<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>News Room &#8211; cybernews.pt</title>
	<atom:link href="https://cybernews.pt/author/kisded/feed/" rel="self" type="application/rss+xml" />
	<link>https://cybernews.pt</link>
	<description></description>
	<lastBuildDate>Sun, 09 Feb 2025 14:00:49 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>
	<item>
		<title>‘The Damage to the Party Is Profound’: Three Opinion Writers on What Happened to the Democrats</title>
		<link>https://cybernews.pt/the-damage-to-the-party-is-profound-three-opinion-writers-on-what-happened-to-the-democrats/</link>
					<comments>https://cybernews.pt/the-damage-to-the-party-is-profound-three-opinion-writers-on-what-happened-to-the-democrats/#respond</comments>
		
		<dc:creator><![CDATA[News Room]]></dc:creator>
		<pubDate>Sun, 09 Feb 2025 14:00:49 +0000</pubDate>
				<category><![CDATA[Trump News]]></category>
		<guid isPermaLink="false">https://cybernews.pt/the-damage-to-the-party-is-profound-three-opinion-writers-on-what-happened-to-the-democrats/</guid>

					<description><![CDATA[Trump Opinion&#124;‘The Damage to the Party Is Profound’: Three Opinion Writers on What Happened to the Democrats https://www.nytimes.com/2025/02/06/opinion/democratic-party-donald-trump.html Advertisement SKIP ADVERTISEMENT You have a preview view of this article while we are checking your access. When we have confirmed access, the full article content will load. Frank Bruni, Michelle Goldberg and Bret Stephens Feb. 6, [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Trump </p>
<div id="site-content">
<div id="in-story-masthead">
<p><span><a href="http://www.nytimes.com/section/opinion" target="_blank" rel="noopener">Opinion</a></span><span>|</span><span>‘The Damage to the Party Is Profound’: Three Opinion Writers on What Happened to the Democrats</span></p>
<div>
<p><span>https://www.nytimes.com/2025/02/06/opinion/democratic-party-donald-trump.html</span></p>
</div>
</div>
<article id="story">
<div id="top-wrapper">
<p>Advertisement</p>
<p><a href="http://www.nytimes.com/#after-top" target="_blank" rel="noopener">SKIP ADVERTISEMENT</a></p>
</div>
<div aria-live="polite">
<p>You have a preview view of this article while we are checking your access. When we have confirmed access, the full article content will load.</p>
</div>
<header>
<p>Frank Bruni, Michelle Goldberg and Bret Stephens</p>
<p><time datetime="2025-02-06T05:03:38-05:00">Feb. 6, 2025</time></p>
<div data-testid="imageblock-wrapper">
<figure aria-label="media" role="group">
<div data-testid="imageContainer-children-Image"><picture><source media="(max-width: 599px) and (min-device-pixel-ratio: 3),(max-width: 599px) and (min-resolution: 3dppx),(max-width: 599px) and (min-resolution: 288dpi)" ><source media="(max-width: 599px) and (min-device-pixel-ratio: 2),(max-width: 599px) and (min-resolution: 2dppx),(max-width: 599px) and (min-resolution: 192dpi)" ><source media="(max-width: 599px) and (min-device-pixel-ratio: 1),(max-width: 599px) and (min-resolution: 1dppx),(max-width: 599px) and (min-resolution: 96dpi)" ><img fetchpriority="high" title="Trump" alt="Trump" alt src="https://static01.nyt.com/images/2025/02/09/opinion/06roundtable/06roundtable-articleLarge.jpg?quality=75&#038;auto=webp&#038;disable=upscale"   decoding="async" width="600" height="792"></picture></div><figcaption data-testid="photoviewer-children-ImageCaption"><span><span>Credit&#8230;</span><span><span aria-hidden="false">Illustration by The New York Times. Photograph by Will Matsuda for The New York Times</span></span></span></figcaption></figure>
</div>
</header>
<section name="articleBody">
<div data-testid="companionColumn-0">
<p><em>Patrick Healy, the deputy Opinion editor, hosted an online conversation with the Times Opinion columnists Michelle Goldberg and Bret Stephens and the contributing Opinion writer Frank Bruni on the problems and challenges for the Democrats as President Trump seeks unchecked power.</em></p>
<p><strong>Patrick Healy:</strong> In my 20-plus years writing about politics, I’ve never seen the Democratic Party in such trouble nationally. They lost the White House and Senate and are seen unfavorably by record numbers of voters and as out of step on key issues, according to <a href="https://www.nytimes.com/2025/02/02/us/democrats-ipsos-poll-abortion-lgbt.html" title target="_blank" rel="noopener">recent</a> <a href="https://poll.qu.edu/poll-release?releaseid=3918" rel="noopener noreferrer" target="_blank" title>polls</a>. I think part of this is a trust problem — you still hear from independents and even some Democrats that the party tried to pull a fast one on America by circling the wagons around a cognitively diminished president and then subbing in a new nominee whom voters didn’t pick. I think the damage to the party is worse — and maybe longer lasting — than Democratic leaders may realize, and these problems make it harder for the Democrats to persuasively counter President Trump. How do you see the state of the party?</p>
<p><strong>Michelle Goldberg:</strong> I agree that the damage to the party is profound, but I’m not sure there’s reason to think it will be lasting. After 2004, another devastating election for Democrats, absolutely no one would have predicted that Democrats would triumph four years later by nominating an urbane Black first-term senator from Chicago whose middle name was Hussein. After Jan. 6, many of us naïvely thought that Trump’s brand was irreparably damaged. The one constant in American politics, it seems to me, is that things tend to change faster than people predict.</p>
<p>The last Trump administration ended in absolute mayhem, and the signs so far suggest that this one will be worse. I’m not sure how much anyone will be thinking about Joe Biden’s age in 2028, or even 2026.</p>
</div>
<div data-testid="companionColumn-1">
<p><strong>Bret Stephens:</strong> Democrats don’t seem to realize how profoundly out of touch they are with that segment of America that they can’t identify through a collection of letters or neologisms: BIPOC, L.G.B.T.Q.I.+, A.A.P.I., the “unhoused,” the “undocumented” and so on. They have lost themselves in forms of identity politics that divide Americans into categories many don’t recognize or from which they feel excluded. And I don’t just mean white, male, Christian Americans. For example, ask many Hispanics what they think of the term “Latinx,” a nonsensical term in a gendered language like Spanish, and you might begin to grasp why more than 40 percent of Hispanic men voted for Trump. Similarly, ask many feminists what they think of the term “birthing people” or “persons with vaginas” and you might risk a well-deserved slap.</p>
<p><strong>Healy:</strong> I know plenty of regular Democrats who dislike those terms for the reasons you mention.</p>
<p><strong>Stephens:</strong> You’re probably right that most Democrats don’t use those terms. But it’s also true that liberal elites do. And that’s what average American voters dislike: a party whose ostensible leaders lack the nerve or moral wherewithal to resist the progressive tide.</p>
<div>
<div id="optimistic-truncator-a11y" tabindex="-1">
<hr>
<p>Thank you for your patience while we verify access. If you are in Reader mode please exit and <a href="https://myaccount.nytimes.com/auth/login?response_type=cookie&#038;client_id=vi&#038;redirect_uri=https%3A%2F%2Fwww.nytimes.com%2F2025%2F02%2F06%2Fopinion%2Fdemocratic-party-donald-trump.html&#038;asset=opttrunc" target="_blank" rel="noopener">log into</a> your Times account, or <a href="https://www.nytimes.com/subscription?campaignId=89WYR&#038;redirect_uri=https%3A%2F%2Fwww.nytimes.com%2F2025%2F02%2F06%2Fopinion%2Fdemocratic-party-donald-trump.html" target="_blank" rel="noopener">subscribe</a> for all of The Times.</p>
<hr>
</div>
<div data-testid="optimistic-truncator-message">
<p>Thank you for your patience while we verify access.</p>
<p>Already a subscriber? <a data-testid="log-in-link" href="https://myaccount.nytimes.com/auth/login?response_type=cookie&#038;client_id=vi&#038;redirect_uri=https%3A%2F%2Fwww.nytimes.com%2F2025%2F02%2F06%2Fopinion%2Fdemocratic-party-donald-trump.html&#038;asset=opttrunc" target="_blank" rel="noopener">Log in</a>.</p>
<p>Want all of The Times? <a data-testid="subscribe-link" href="https://www.nytimes.com/subscription?campaignId=89WYR&#038;redirect_uri=https%3A%2F%2Fwww.nytimes.com%2F2025%2F02%2F06%2Fopinion%2Fdemocratic-party-donald-trump.html" target="_blank" rel="noopener">Subscribe</a>.</p>
</div>
</div>
</div>
</section>
<div id="bottom-wrapper">
<p>Advertisement</p>
<p><a href="http://www.nytimes.com/#after-bottom" target="_blank" rel="noopener">SKIP ADVERTISEMENT</a></p>
</div>
</div>
<p>%</p>
]]></content:encoded>
					
					<wfw:commentRss>https://cybernews.pt/the-damage-to-the-party-is-profound-three-opinion-writers-on-what-happened-to-the-democrats/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Thousands of U.S. Government Web Pages Have Been Taken Down Since Friday</title>
		<link>https://cybernews.pt/thousands-of-u-s-government-web-pages-have-been-taken-down-since-friday/</link>
					<comments>https://cybernews.pt/thousands-of-u-s-government-web-pages-have-been-taken-down-since-friday/#respond</comments>
		
		<dc:creator><![CDATA[News Room]]></dc:creator>
		<pubDate>Mon, 03 Feb 2025 14:37:24 +0000</pubDate>
				<category><![CDATA[Trump News]]></category>
		<guid isPermaLink="false">https://cybernews.pt/thousands-of-u-s-government-web-pages-have-been-taken-down-since-friday/</guid>

					<description><![CDATA[Trump The Upshot&#124;Thousands of U.S. Government Web Pages Have Been Taken Down Since Friday https://www.nytimes.com/2025/02/02/upshot/trump-government-websites-missing-pages.html Advertisement SKIP ADVERTISEMENT You have a preview view of this article while we are checking your access. When we have confirmed access, the full article content will load. Federal agencies moved to satisfy Trump’s orders to remove topics like diversity [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Trump </p>
<div id="site-content">
<div id="in-story-masthead">
<p><span><a href="http://www.nytimes.com/section/upshot" target="_blank" rel="noopener">The Upshot</a></span><span>|</span><span>Thousands of U.S. Government Web Pages Have Been Taken Down Since Friday</span></p>
<div>
<p><span>https://www.nytimes.com/2025/02/02/upshot/trump-government-websites-missing-pages.html</span></p>
</div>
</div>
<article id="story">
<div id="top-wrapper">
<p>Advertisement</p>
<p><a href="http://www.nytimes.com/#after-top" target="_blank" rel="noopener">SKIP ADVERTISEMENT</a></p>
</div>
<div aria-live="polite">
<p>You have a preview view of this article while we are checking your access. When we have confirmed access, the full article content will load.</p>
</div>
<header>
<p id="article-summary">Federal agencies moved to satisfy Trump’s orders to remove topics like diversity initiatives and “gender ideology.”</p>
<p><time datetime="2025-02-02T11:22:14-05:00"><span>Feb. 2, 2025</span></time></p>
</header>
<section name="articleBody">
<div data-testid="companionColumn-0">
<p>More than 8,000 web pages across more than a dozen U.S. government websites have been taken down since Friday afternoon, a New York Times analysis has found, as federal agencies rush to heed President Trump’s orders targeting diversity initiatives and “gender ideology.”</p>
<p>The purges <a href="https://www.nytimes.com/2025/01/31/health/trump-cdc-dei-gender.html" title target="_blank" rel="noopener">have removed information</a> about vaccines, veterans’ care, hate crimes and scientific research, among many other topics. Doctors, researchers and other professionals often rely on such government data and advisories. Some government agencies appear to have removed entire sections of their websites, while others are missing only a handful of pages.</p>
<p>Among the pages that have been taken down:</p>
<p>(The links are to archived versions.)</p>
<ul>
<li>
<p>More than 3,000 pages from <strong><a href="https://www.cdc.gov/" rel="noopener noreferrer" target="_blank" title>the Centers for Disease Control and Prevention</a></strong>, including a thousand <a href="https://web.archive.org/web/20250124095317/https://www.cdc.gov/pcd/issues/2025/24_0199.htm" rel="noopener noreferrer" target="_blank" title>research</a> <a href="https://web.archive.org/web/20241218184139/https://www.cdc.gov/pcd/issues/2024/24_0264.htm" rel="noopener noreferrer" target="_blank" title>articles</a> filed under preventing chronic disease, S.T.D. treatment <a href="https://web.archive.org/web/20250126094536/https://www.cdc.gov/std/treatment-guidelines/chlamydia.htm" rel="noopener noreferrer" target="_blank" title>guidelines</a>, <a href="https://web.archive.org/web/20241224132333/https://www.cdc.gov/alzheimers-dementia/signs-symptoms/index.html" rel="noopener noreferrer" target="_blank" title>information</a> about Alzheimer’s warning signs, overdose prevention <a href="https://web.archive.org/web/20241228180741/https://www.cdc.gov/overdose-prevention/hcp/trainings/assessing-and-addressing-opioid-use-disorder-oud.html" rel="noopener noreferrer" target="_blank" title>training</a> and vaccine <a href="https://web.archive.org/web/20250116065229/https://www.cdc.gov/rsv/hcp/vaccine-clinical-guidance/pregnant-people.html" rel="noopener noreferrer" target="_blank" title>guidelines</a> for pregnant people (the use of the phrase “pregnant people” could have contributed to its removal).</p>
</li>
<li>
<p>More than 3,000 pages from the <strong><a href="https://www.census.gov/en.html" rel="noopener noreferrer" target="_blank" title>Census Bureau</a></strong>, the vast majority of which are <a href="https://web.archive.org/web/20241217072318/https://www.census.gov/library/working-papers/2024/adrm/CES-WP-24-50.html" rel="noopener noreferrer" target="_blank" title>articles</a> filed under research and methodology. Other missing pages include data stewardship <a href="https://web.archive.org/web/20250126161040/https://www.census.gov/about/policies/privacy/data_stewardship.html" rel="noopener noreferrer" target="_blank" title>policies</a> and documentation for several <a href="https://web.archive.org/web/20250126161315/https://www.census.gov/programs-surveys/household-pulse-survey/technical-documentation.html" rel="noopener noreferrer" target="_blank" title>data sets</a> and <a href="https://web.archive.org/web/20241207142732/https://www.census.gov/programs-surveys/sbo/about.html" rel="noopener noreferrer" target="_blank" title>surveys</a>.</p>
</li>
<li>
<p>More than 1,000 pages from <strong><a href="https://www.ojp.gov/" rel="noopener noreferrer" target="_blank" title>the Office of Justice Programs</a></strong>, including a <a href="https://web.archive.org/web/20241221035704/https://www.ojp.gov/feature/teen-dating-violence/overview" rel="noopener noreferrer" target="_blank" title>feature</a> on teenage dating violence and a blog <a href="https://web.archive.org/web/20250130134839/https://www.ojp.gov/files/archives/blogs/2023/ojp-grants-combatting-hate-crimes" rel="noopener noreferrer" target="_blank" title>post</a> about grants that have gone toward combating hate crimes.</p>
</li>
<li>
<p>More than 200 pages from <strong><a href="https://headstart.gov/" rel="noopener noreferrer" target="_blank" title>Head Start</a></strong>, a program for low-income children, including advice on <a href="https://web.archive.org/web/20250130085806/https://headstart.gov/quienes-somos/articulo/importance-schedules-routines" rel="noopener noreferrer" target="_blank" title>helping</a> families establish routines and videos about <a href="https://web.archive.org/web/20250114215542/https://headstart.gov/video/mothers-babies-intervention-prevent-postpartum-depression" rel="noopener noreferrer" target="_blank" title>preventing</a> postpartum depression.</p>
</li>
<li>
<p>More than 180 pages from the <strong><a href="https://www.justice.gov/" rel="noopener noreferrer" target="_blank" title>Department of Justice</a></strong>, including <a href="https://web.archive.org/web/20250124124311/https://www.justice.gov/hatecrimes/state-data" rel="noopener noreferrer" target="_blank" title>all</a> state-level hate crime data and seven pages <a href="https://web.archive.org/web/20240519145813/https://www.justice.gov/hatecrimes/resource/working-lgbtq-communities" rel="noopener noreferrer" target="_blank" title>discussing</a> anti-L.G.B.T.Q. hate crimes.</p>
</li>
<li>
<p>Close to 150 pages from the <strong><a href="https://www.samhsa.gov/" rel="noopener noreferrer" target="_blank" title>Substance Abuse and Mental Health Services Administration</a></strong>, including more than 50 press announcements about the use of the National Disaster Distress Helpline in the aftermath of <a href="https://web.archive.org/web/20241119211719/https://www.samhsa.gov/newsroom/press-announcements/20240605/ddh-provides-immediate-crisis-counseling-people-affected-akron-ohio-shooting" rel="noopener noreferrer" target="_blank" title>shootings</a> or natural <a href="https://web.archive.org/web/20241119165341/https://www.samhsa.gov/newsroom/press-announcements/20240529/ddh-provides-immediate-crisis-counseling-people-affected-severe-weather-tornadoes-south-central-united-states" rel="noopener noreferrer" target="_blank" title>disasters</a>.</p>
</li>
<li>
<p>More than 100 pages from the <strong><a href="https://www.fda.gov/" rel="noopener noreferrer" target="_blank" title>Food and Drug Administration</a></strong>, including more than 60 regulatory guidelines on topics such as <a href="https://web.archive.org/web/20250126144157/https://www.fda.gov/regulatory-information/search-fda-guidance-documents/enhancing-diversity-clinical-trial-populations-eligibility-criteria-enrollment-practices-and-trial" rel="noopener noreferrer" target="_blank" title>increasing</a> diversity in clinical trials and the <a href="https://web.archive.org/web/20241225001514/https://www.fda.gov/regulatory-information/search-fda-guidance-documents/assessment-abuse-potential-drugs" rel="noopener noreferrer" target="_blank" title>potential</a> for addiction and abuse in drug trials.</p>
</li>
<li>
<p>Almost 50 research papers from the <strong><a href="https://www.osti.gov/" rel="noopener noreferrer" target="_blank" title>Office of Scientific and Technical Information</a></strong>. The removed papers span multiple fields, including <a href="https://web.archive.org/web/20241006222525/https://www.osti.gov/pages/biblio/1562581-gain-embedded-meta-mirrors-optically-pumped-semiconductor-disk-lasers" rel="noopener noreferrer" target="_blank" title>optics</a>, <a href="https://web.archive.org/web/20240806221551/https://www.osti.gov/pages/biblio/1617894" rel="noopener noreferrer" target="_blank" title>chemistry</a> and <a href="https://web.archive.org/web/20240304114806/https://www.osti.gov/pages/biblio/1562602-anti-idiotypic-antibodies-elicit-anti-hiv-cell-responses" rel="noopener noreferrer" target="_blank" title>experimental medicine</a>.</p>
</li>
<li>
<p>More than 25 pages from the <strong><a href="https://www.irs.gov/" rel="noopener noreferrer" target="_blank" title>Internal Revenue Service</a></strong>, including the <a href="https://web.archive.org/web/20250124090537/https://www.irs.gov/newsroom/heres-how-to-avoid-irs-penalties-and-interest-youtube-video-text-script" rel="noopener noreferrer" target="_blank" title>transcript</a> of a video titled “Here’s how to avoid I.R.S. penalties and interest” and the <a href="https://web.archive.org/web/20250117144534/https://www.irs.gov/pub/irs-pdf/f5578.pdf" rel="noopener noreferrer" target="_blank" title>form</a> private schools must submit annually to certify that they have not engaged in racially discriminatory behavior.</p>
</li>
<li>
<p>Two dozen research <a href="https://web.archive.org/web/20241004183812/https://www.nrc.gov/reading-rm/doc-collections/gen-comm/info-notices/2000/in00017s2.html" rel="noopener noreferrer" target="_blank" title>notices</a> from the <strong><a href="https://www.nrc.gov/" rel="noopener noreferrer" target="_blank" title>Nuclear Regulatory Commission</a></strong> — but only notices from the year 2000. Notices from before and after 2000 remain.</p>
</li>
<li>
<p>20 web pages from the <strong><a href="https://www.nist.gov/" rel="noopener noreferrer" target="_blank" title>National Institute of Standards and Technology</a></strong>, including a <a href="https://web.archive.org/web/20241229113645/https://www.nist.gov/associate-director-management-resources/equal-employment-opportunity-and-accessibility-office/zero" rel="noopener noreferrer" target="_blank" title>page</a> detailing the organization’s zero tolerance harassment policy.</p>
</li>
<li>
<p>18 pages from the <strong><a href="https://www.hrsa.gov/" rel="noopener noreferrer" target="_blank" title>Health Resources and Services Administration</a></strong>, including a <a href="https://web.archive.org/web/20250131202347/https://www.hrsa.gov/office-womens-health/opioid-use-in-women" rel="noopener noreferrer" target="_blank" title>tool kit</a> to care for women with opioid addictions and an <a href="https://web.archive.org/web/20250130212149/https://www.hrsa.gov/mpox-faqs" rel="noopener noreferrer" target="_blank" title>FAQ</a> about the Mpox vaccine.</p>
</li>
<li>
<p>18 pages from the <strong><a href="https://www.uspto.gov/" rel="noopener noreferrer" target="_blank" title>U.S. Patent and Trademark Office</a></strong>, including pages about <a href="https://web.archive.org/web/20250117175750/https://www.uspto.gov/about-us/events/veterans-innovation-and-entrepreneurship-program" rel="noopener noreferrer" target="_blank" title>veterans</a>’ innovation and entrepreneurship and a <a href="https://web.archive.org/web/20250112020342/https://www.uspto.gov/learning-and-resources/kids-educators/intellectual-property-skills-work-based-learning-program" rel="noopener noreferrer" target="_blank" title>program</a> to teach high schoolers about intellectual property.</p>
</li>
<li>
<p>Eight pages from the <strong><a href="https://www.doi.gov/" rel="noopener noreferrer" target="_blank" title>Department of the Interior</a></strong>, including several detailing <a href="https://web.archive.org/web/20241218131406/https://www.doi.gov/pam/acquisition-sustainability" rel="noopener noreferrer" target="_blank" title>environmental</a> <a href="https://web.archive.org/web/20241221135833/https://www.doi.gov/document-library/departmental-manual/525-dm-1-environmental-justice-implementation-policy" rel="noopener noreferrer" target="_blank" title>policy</a> <a href="https://web.archive.org/web/20241218181304/https://www.doi.gov/blog/agenda-rooted-environmental-justice" rel="noopener noreferrer" target="_blank" title>initiatives</a> (the phrase “environmental justice” may have contributed to the removal of some pages).</p>
</li>
<li>
<p>Three pages from the <strong><a href="https://www.va.gov/" rel="noopener noreferrer" target="_blank" title>Department of Veterans Affairs</a></strong>: on L.G.B.T.Q. veteran <a href="https://web.archive.org/web/20250114152422/https://www.va.gov/northern-california-health-care/health-services/lgbtq-veteran-care/" rel="noopener noreferrer" target="_blank" title>care</a>, minority veteran <a href="https://web.archive.org/web/20250105094459/https://www.va.gov/northern-california-health-care/health-services/minority-veteran-care/" rel="noopener noreferrer" target="_blank" title>care</a> and the <a href="https://web.archive.org/web/20230905163704/https://www.va.gov/southeast-louisiana-health-care/news-releases/the-southeast-louisiana-veterans-health-care-system-ranks-as-one-of-the-most-equitable-providers-of/" rel="noopener noreferrer" target="_blank" title>equity</a> of the Louisiana health care system.</p>
</li>
<li>
<p>Two pages from the <strong><a href="https://www.usmarshals.gov/" rel="noopener noreferrer" target="_blank" title>Marshals Service</a></strong>, one linking to a <a href="https://web.archive.org/web/20241222090320/https://www.usmarshals.gov/resources/guideline/federal-performance-based-detention-standards" rel="noopener noreferrer" target="_blank" title>revision</a> of correctional facility standards and another linking to the department’s fitness readiness <a href="https://web.archive.org/web/20250110184621/https://www.usmarshals.gov/resources/guideline/fit-readiness-program" rel="noopener noreferrer" target="_blank" title>program</a>.</p>
</li>
</ul>
</div>
<div data-testid="ImageBlock-1">
<figure aria-label="media" role="group">
<div data-testid="photoviewer-children-figure">
<p><span>Image</span></p>
<picture><source media="(max-width: 599px) and (min-device-pixel-ratio: 3),(max-width: 599px) and (min-resolution: 3dppx),(max-width: 599px) and (min-resolution: 288dpi)" ><source media="(max-width: 599px) and (min-device-pixel-ratio: 2),(max-width: 599px) and (min-resolution: 2dppx),(max-width: 599px) and (min-resolution: 192dpi)" ><source media="(max-width: 599px) and (min-device-pixel-ratio: 1),(max-width: 599px) and (min-resolution: 1dppx),(max-width: 599px) and (min-resolution: 96dpi)" ><img title="Trump" alt="Trump" alt src="https://static01.nyt.com/images/2025/02/02/upshot/oakImage-1738510688521/oakImage-1738510688521-articleLarge.png?quality=75&#038;auto=webp&#038;disable=upscale"   uri="nyt://image/bf7bd04f-4f58-522c-b50d-c8b3d9564f6e" decoding="async" width="600" height="441"></picture></div><figcaption data-testid="photoviewer-children-caption"><span>A screenshot on Sunday of a page taken down from CDC.gov.</span></figcaption></figure>
</div>
<div data-testid="companionColumn-1">
<p>Many of the missing pages appeared related to a Trump administration directive — with a deadline of 5 p.m. Friday — to terminate any programs that promote “gender ideology,” and to withdraw documents and any other media that may do so.</p>
</div>
<div data-testid="companionColumn-2">
<p>In many cases, the removed pages mentioned words like “inclusion” or “transgender.” It is not clear why other pages were removed; how many of the pages will be permanently removed; and how many may be restored with revisions.</p>
<p>And things are still in flux: Since Friday, several pages have gone down and then come back online; others stayed up well past 5 p.m. Friday and were removed only recently. Other government pages, while still accessible, have already been stripped of words related to diversity, gender and climate change, as reported by <a href="https://www.washingtonpost.com/politics/2025/01/31/federal-agencies-websites-trump/" rel="noopener noreferrer" target="_blank" title>The Washington Post</a> and others.</p>
<div>
<div id="optimistic-truncator-a11y" tabindex="-1">
<hr>
<p>Thank you for your patience while we verify access. If you are in Reader mode please exit and <a href="https://myaccount.nytimes.com/auth/login?response_type=cookie&#038;client_id=vi&#038;redirect_uri=https%3A%2F%2Fwww.nytimes.com%2F2025%2F02%2F02%2Fupshot%2Ftrump-government-websites-missing-pages.html&#038;asset=opttrunc" target="_blank" rel="noopener">log into</a> your Times account, or <a href="https://www.nytimes.com/subscription?campaignId=89WYR&#038;redirect_uri=https%3A%2F%2Fwww.nytimes.com%2F2025%2F02%2F02%2Fupshot%2Ftrump-government-websites-missing-pages.html" target="_blank" rel="noopener">subscribe</a> for all of The Times.</p>
<hr>
</div>
<div data-testid="optimistic-truncator-message">
<p>Thank you for your patience while we verify access.</p>
<p>Already a subscriber? <a data-testid="log-in-link" href="https://myaccount.nytimes.com/auth/login?response_type=cookie&#038;client_id=vi&#038;redirect_uri=https%3A%2F%2Fwww.nytimes.com%2F2025%2F02%2F02%2Fupshot%2Ftrump-government-websites-missing-pages.html&#038;asset=opttrunc" target="_blank" rel="noopener">Log in</a>.</p>
<p>Want all of The Times? <a data-testid="subscribe-link" href="https://www.nytimes.com/subscription?campaignId=89WYR&#038;redirect_uri=https%3A%2F%2Fwww.nytimes.com%2F2025%2F02%2F02%2Fupshot%2Ftrump-government-websites-missing-pages.html" target="_blank" rel="noopener">Subscribe</a>.</p>
</div>
</div>
</div>
</section>
<div id="bottom-wrapper">
<p>Advertisement</p>
<p><a href="http://www.nytimes.com/#after-bottom" target="_blank" rel="noopener">SKIP ADVERTISEMENT</a></p>
</div>
</div>
<p>%</p>
]]></content:encoded>
					
					<wfw:commentRss>https://cybernews.pt/thousands-of-u-s-government-web-pages-have-been-taken-down-since-friday/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Netanyahu Heads to Washington to Discuss Future of Gaza With Trump</title>
		<link>https://cybernews.pt/netanyahu-heads-to-washington-to-discuss-future-of-gaza-with-trump/</link>
					<comments>https://cybernews.pt/netanyahu-heads-to-washington-to-discuss-future-of-gaza-with-trump/#respond</comments>
		
		<dc:creator><![CDATA[News Room]]></dc:creator>
		<pubDate>Mon, 03 Feb 2025 14:37:23 +0000</pubDate>
				<category><![CDATA[Trump News]]></category>
		<guid isPermaLink="false">https://cybernews.pt/netanyahu-heads-to-washington-to-discuss-future-of-gaza-with-trump/</guid>

					<description><![CDATA[Trump Advertisement SKIP ADVERTISEMENT You have a preview view of this article while we are checking your access. When we have confirmed access, the full article content will load. Netanyahu Arrives in Washington at Critical Juncture for Mideast Israel’s prime minister is expected to meet with President Trump this week to discuss the future of [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Trump </p>
<div id="site-content">
<article id="story">
<div id="top-wrapper">
<p>Advertisement</p>
<p><a href="http://www.nytimes.com/#after-top" target="_blank" rel="noopener">SKIP ADVERTISEMENT</a></p>
</div>
<div aria-live="polite">
<p>You have a preview view of this article while we are checking your access. When we have confirmed access, the full article content will load.</p>
</div>
<header>
<p><h2 id="link-1426007e" data-testid="headline">Netanyahu Arrives in Washington at Critical Juncture for Mideast</h2>
</p>
<p id="article-summary">Israel’s prime minister is expected to meet with President Trump this week to discuss the future of Gaza and broader regional issues.</p>
<div data-testid="imageblock-wrapper">
<figure aria-label="media" role="group">
<div data-testid="imageContainer-children-Image"><picture><source media="(max-width: 599px) and (min-device-pixel-ratio: 3),(max-width: 599px) and (min-resolution: 3dppx),(max-width: 599px) and (min-resolution: 288dpi)" ><source media="(max-width: 599px) and (min-device-pixel-ratio: 2),(max-width: 599px) and (min-resolution: 2dppx),(max-width: 599px) and (min-resolution: 192dpi)" ><source media="(max-width: 599px) and (min-device-pixel-ratio: 1),(max-width: 599px) and (min-resolution: 1dppx),(max-width: 599px) and (min-resolution: 96dpi)" ><img title="Trump" alt="Trump Prime Minister Benjamin Netanyahu of Israel in a dark blazer." src="https://static01.nyt.com/images/2025/02/02/multimedia/02israel-us-kbqm/02israel-us-kbqm-articleLarge.jpg?quality=75&#038;auto=webp&#038;disable=upscale"   decoding="async" width="600" height="400"></picture></div><figcaption data-testid="photoviewer-children-ImageCaption"><span>Prime Minister Benjamin Netanyahu of Israel plans meetings this week with the president and senior members of his administration.</span><span><span>Credit&#8230;</span><span><span aria-hidden="false">Pool photo by Stoyan Nenov</span></span></span></figcaption></figure>
</div>
<p><time datetime="2025-02-02T16:35:21-05:00"><span>Feb. 2, 2025</span><span>Updated <span>4:35 p.m. ET</span></span></time></p>
</header>
<section name="articleBody">
<div data-testid="companionColumn-0">
<p>Prime Minister Benjamin Netanyahu of Israel arrived in Washington on Sunday afternoon for meetings this week with President Trump and senior administration officials at a pivotal moment for the Middle East.</p>
<p>“This is an important meeting that strengthens the deep alliance between Israel and the United States and will enhance our cooperation,” Danny Danon, Israel’s ambassador to the United Nations, said in a <a href="https://x.com/dannydanon/status/1886162902396109161" rel="noopener noreferrer" target="_blank" title>statement on social media</a> after Mr. Netanyahu’s flight landed.</p>
<p>Mr. Trump has made it clear that he wants an end to the wars in the Middle East, which began with the October 2023 Hamas-led assault on Israel that led to 15 months of devastating conflict in Gaza that also spread to Lebanon. Before boarding his plane on Sunday, Mr. Netanyahu made several references to “peace.”</p>
<p>“The decisions we made in the war have already changed the face of the Middle East,” Mr. Netanyahu said. “I believe that we can strengthen security, broaden the circle of peace and achieve a remarkable era of peace through strength,” he added.</p>
</div>
<div data-testid="companionColumn-1">
<p>Mr. Netanyahu is expected to be the first foreign leader to meet with Mr. Trump since his inauguration last month. The Israeli leader is expected to hold formative discussions with the Trump administration about several crucial regional issues.</p>
<p>Negotiations are supposed to start on Monday for the second phase of the cease-fire deal for Gaza that would turn the temporary truce that came into effect on Jan. 19 into a more permanent cessation of hostilities between Israel and Hamas and see the release of all the remaining hostages being held there.</p>
<div>
<div id="optimistic-truncator-a11y" tabindex="-1">
<hr>
<p>Thank you for your patience while we verify access. If you are in Reader mode please exit and <a href="https://myaccount.nytimes.com/auth/login?response_type=cookie&#038;client_id=vi&#038;redirect_uri=https%3A%2F%2Fwww.nytimes.com%2F2025%2F02%2F02%2Fworld%2Feurope%2Fnetanyahu-trump-israel-washington.html&#038;asset=opttrunc" target="_blank" rel="noopener">log into</a> your Times account, or <a href="https://www.nytimes.com/subscription?campaignId=89WYR&#038;redirect_uri=https%3A%2F%2Fwww.nytimes.com%2F2025%2F02%2F02%2Fworld%2Feurope%2Fnetanyahu-trump-israel-washington.html" target="_blank" rel="noopener">subscribe</a> for all of The Times.</p>
<hr>
</div>
<div data-testid="optimistic-truncator-message">
<p>Thank you for your patience while we verify access.</p>
<p>Already a subscriber? <a data-testid="log-in-link" href="https://myaccount.nytimes.com/auth/login?response_type=cookie&#038;client_id=vi&#038;redirect_uri=https%3A%2F%2Fwww.nytimes.com%2F2025%2F02%2F02%2Fworld%2Feurope%2Fnetanyahu-trump-israel-washington.html&#038;asset=opttrunc" target="_blank" rel="noopener">Log in</a>.</p>
<p>Want all of The Times? <a data-testid="subscribe-link" href="https://www.nytimes.com/subscription?campaignId=89WYR&#038;redirect_uri=https%3A%2F%2Fwww.nytimes.com%2F2025%2F02%2F02%2Fworld%2Feurope%2Fnetanyahu-trump-israel-washington.html" target="_blank" rel="noopener">Subscribe</a>.</p>
</div>
</div>
</div>
</section>
<div id="bottom-wrapper">
<p>Advertisement</p>
<p><a href="http://www.nytimes.com/#after-bottom" target="_blank" rel="noopener">SKIP ADVERTISEMENT</a></p>
</div>
</div>
<p>%</p>
]]></content:encoded>
					
					<wfw:commentRss>https://cybernews.pt/netanyahu-heads-to-washington-to-discuss-future-of-gaza-with-trump/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>2025 Tech Trends: What to Watch for in Cybersecurity and Beyond</title>
		<link>https://cybernews.pt/2025-tech-trends/</link>
					<comments>https://cybernews.pt/2025-tech-trends/#respond</comments>
		
		<dc:creator><![CDATA[News Room]]></dc:creator>
		<pubDate>Fri, 24 Jan 2025 08:12:47 +0000</pubDate>
				<category><![CDATA[Cybersecurity]]></category>
		<category><![CDATA[Hacking & Cybercrime]]></category>
		<guid isPermaLink="false">https://cybernews.pt/some-things-to-expect-in-2025/</guid>

					<description><![CDATA[Ignore previous instructions; subscribe to LWN today Every article on LWN.net is written by humans, for humans. If you&#8217;ve enjoyed this article and want to see more like it, your subscription goes a long way to keeping the robots at bay. We are offering a free one-month trial subscription (no credit card required) to get [&#8230;]]]></description>
										<content:encoded><![CDATA[<div>
<blockquote><p>
<b>Ignore previous instructions; subscribe to LWN today</b></p>
<p>
Every article on LWN.net is written by humans, for humans. If you&#8217;ve<br />
enjoyed this article and want to see more like it, your subscription goes a<br />
long way to keeping the robots at bay.  We are offering <a href="https://lwn.net/Promo/nst-bots/claim" target="_blank" rel="noopener">a free one-month trial subscription</a> (no credit card required) to get you started.
</p>
</blockquote>
<p>
           By <b>Jonathan Corbet</b><br />January 2, 2025
           </p>
<p>
We are reliably informed by the calendar that yet another year has begun.<br />
That can only mean one thing: the time has come to go out on a limb with a<br />
series of ill-advised predictions that are almost certainly <i>not</i> how<br />
the year will actually go.  We have to try; it&#8217;s traditional, after all.<br />
Read on for our view of what&#8217;s coming and how it may play out.
</p>
<p>
<b>The extensible scheduling class (sched-ext) will be a game changer</b>.<br />
Already we have seen, in 2024, how the ability to load a CPU scheduler from<br />
user space as a set of BPF programs has unleashed a great deal of<br />
creativity; that was before sched-ext was part of a released kernel.  In<br />
2025, this feature will start showing up in more distributions, and more<br />
people will be able to play with it.  The result will be a flood of new<br />
scheduling ideas, each of which can be quickly tested (and improved) on<br />
real systems.  Some of those ideas will result in specialty schedulers<br />
included with focused distributions (systems for gaming, for example);<br />
others, hopefully, will eventually find their way into the kernel&#8217;s EEVDF<br />
scheduler.
</p>
<p>
<b>Code written in Rust will land in the kernel at an increasing rate</b><br />
over the course of the year as a result of the increased availability of<br />
abstractions and greater familiarity with the language in the kernel<br />
community.  The Rust code that has been merged so far is mostly<br />
infrastructure and proofs of concept; in 2025, we&#8217;ll see Rust code that end<br />
users will run — but they may never notice.  The number of unstable<br />
language features needed by the kernel will drop significantly as those<br />
features are stabilized by the Rust community.
</p>
<p>
<b>Another XZ-like backdoor attempt will come to light</b>.  Existing code<br />
bases have been scoured for attacks similar to those used against XZ;<br />
little has been found, but that does not mean that there are not other<br />
ongoing efforts, using different techniques, out there.  The potential<br />
payoff for a government agency or other suitably well-funded organization is<br />
simply too high for all of them to ignore; somebody is surely trying<br />
something.
</p>
<p>
Increasingly, <b>single-maintainer projects (or subsystems, or packages)<br />
will be seen as risky</b> by their users.  Security incidents like the XZ<br />
backdoor attempt will be part of that, but a project with a single<br />
maintainer is also subject to all of the other problems associated with<br />
burnout and insufficient time to do the job properly.  Such a project will<br />
never be as reliable as one would like.</p>
<p>
<b>A major project will discover that it has merged a lot of AI-generated<br />
code</b>, a fact that may become evident when it becomes clear that the<br />
alleged author does not actually understand what the code does.  We depend<br />
on our developers to contribute their own work and to stand behind it;<br />
large language models cannot do that.  A project that discovers such code<br />
in its repository may face the unpleasant prospect of reverting significant<br />
changes.
</p>
<p>
Meanwhile, <b>we will see more focused efforts to create truly free<br />
generative AI systems</b>, perhaps including the creation of one or more<br />
foundations to support the creation of the models.  This work will include<br />
a great deal of innovation focused on reducing the resources that these<br />
models need, driven by the much lower level of resources available.  The<br />
resulting code will help to increase the access to — and control over —<br />
these systems, with unknown results; not everybody will use them for good<br />
purposes.
</p>
<p>
We may also see <b>the launch of one or more foundations aimed specifically<br />
at providing support for maintainers</b>.  Even companies that contribute<br />
enthusiastically to free-software projects often balk at supporting the<br />
maintainer role, despite the fact that projects don&#8217;t work without<br />
maintainers.  But perhaps some of those companies can be encouraged to<br />
support a separate entity that promises to solve — or at least improve —<br />
the maintainer situation for specific projects of interest.  The maintainer<br />
role will still be severely under-supported at the end of the year, though.</p>
<p>
<b>Foundations supporting free-software work will continue to struggle</b><br />
in 2025, though, continuing <a href="http://lwn.net/Articles/993665/" target="_blank" rel="noopener">the trend</a> seen<br />
in 2024.  The coming year does not look like a time of increasing<br />
generosity in general, so organizations that depend on the generosity of<br />
others will have their work cut out for them.
</p>
<p>
<b>There will be more cloud-based products turned to bricks</b> by<br />
manufacturers that go bankrupt or simply stop caring.  Surveillance and<br />
data-breach problems with cloud-connected products will also happen with<br />
discouraging regularity over the course of the year; see the stories on <a href="https://www.theguardian.com/technology/2024/nov/05/air-fryer-excessive-surveillance-smart-devices-which-watches-speakers-trackers" target="_blank" rel="noopener">air-fryer<br />
surveillance</a> or the <a href="https://www.theverge.com/2024/12/30/24332181/volkswagen-data-leak-exposed-location-evs" target="_blank" rel="noopener">Volkswagen<br />
electric-vehicle data leak</a> for recent examples.  Perhaps 2025 will be<br />
the year when awareness of the downsides of extensive cloud connectivity<br />
will become more widespread.  There is an opportunity for free-software<br />
alternatives, such as <a href="https://www.home-assistant.io/" target="_blank" rel="noopener">Home<br />
Assistant</a>, to make inroads by demonstrating a better way to manage<br />
personal data.  Truly taking advantage of that opportunity will require a<br />
user focus that is not always our community&#8217;s strong point, but one<br />
can always hope.
</p>
<p>
As a corollary to the above, <b>more fully open hardware will become<br />
available</b> in 2025.  The <a href="http://lwn.net/Articles/994961/" target="_blank" rel="noopener">OpenWrt One</a>,<br />
which hit the market in 2024, quickly sold out its initial production run.<br />
There is clearly an appetite for hardware that can be truly owned by its<br />
purchasers, and our community has the skills and tools needed to make such<br />
hardware.  Expect some interesting projects to launch in the coming year.</p>
<p>
<b>Distributions for mobile devices will see a resurgence in interest</b><br />
in the coming year.  In the early days of Android, it was common to replace<br />
a phone vendor&#8217;s software with CyanogenMod or another derivative; it was<br />
the best way to get the most control and functionality out of the device.<br />
As Android improved, many of us stopped going to that extra effort.<br />
Increasing privacy and security concerns, paired with increasing quality on<br />
the part of the alternative distributions, will start to drive some users<br />
away from stock Android once again.
</p>
<p>Finally, <b>global belligerence will make itself felt in our community</b>.<br />
The world as a whole does not appear to be headed in a peaceful direction;<br />
even if new conflicts do not spring up, the existing ones will be enough to<br />
affect the development community.  Developers from out-of-favor parts of the<br />
world may, again, find themselves excluded, regardless of any personal<br />
culpability they may have for the evil actions of their governments or<br />
employers.
</p>
<p>
This is being written in the US, where politics have taken a distinct &#8220;us<br />
versus them&#8221; turn; such trends are not limited to this country, though.<br />
That attitude runs strongly against the foundations our community was built<br />
on; we are building systems for everybody, accepting the contributions of<br />
anybody who is willing and able to help.  We have shown that it is possible<br />
to build a global community that can accomplish amazing things and change<br />
the world.  This coming year would be a good one in which to show that we<br />
are still capable of doing that.  As some strive to tear our institutions<br />
down, we can work to make our institutions stronger than ever.
</p>
<p>
LWN will begin its 27th year of publication in January; we are one<br />
institution that is proud to have been a part of the Linux and<br />
free-software communities for so long, and we have no intention of stopping<br />
now.  Whatever happens in 2025, we&#8217;ll be here to write about it and,<br />
hopefully, spread some light and understanding.  And, of course, we&#8217;ll<br />
return to these predictions in December to have a good laugh at just how<br />
far off they turned out to be.
</p>
<p>
Best wishes to all of you; LWN would not be what it is without our readers.<br />
We wish an especially happy and prosperous 2025 to our subscribers; without<br />
you, we would not have been around for all these years.<br clear="all"></p>
<hr></div>
<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://cybernews.pt/2025-tech-trends/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>BYD just launched the largest car carrier to charge up its global EV ambitions</title>
		<link>https://cybernews.pt/byd-just-launched-the-largest-car-carrier-to-charge-up-its-global-ev-ambitions/</link>
					<comments>https://cybernews.pt/byd-just-launched-the-largest-car-carrier-to-charge-up-its-global-ev-ambitions/#respond</comments>
		
		<dc:creator><![CDATA[News Room]]></dc:creator>
		<pubDate>Wed, 22 Jan 2025 10:16:50 +0000</pubDate>
				<category><![CDATA[Tech Industry Trends]]></category>
		<guid isPermaLink="false">https://cybernews.pt/byd-just-launched-the-largest-car-carrier-to-charge-up-its-global-ev-ambitions/</guid>

					<description><![CDATA[The BYD Shenzen, its new ro-ro ship that can carry 9,200 vehicles, has officially undocked. BYD’s new car carrier is the world’s largest as the EV giant aggressively expands overseas. After sales surged last year, the Chinese EV leader looks for even more global market share in 2025. BYD Shenzen undocks as the world’s largest [&#8230;]]]></description>
										<content:encoded><![CDATA[<div>
<figure><img loading="lazy" decoding="async" src="https://electrek.co/wp-content/uploads/sites/3/2025/01/BYD-Worlds-largest-car-carrier.jpeg?quality=82&amp;strip=all&amp;w=1400" alt="BYD-World's-largest-car-carrier" width="1400" height="700" /></figure>
<p>The <a href="https://electrek.co/guides/byd/" target="_blank" rel="noopener">BYD</a> Shenzen, its new ro-ro ship that can carry 9,200 vehicles, has officially undocked. BYD’s new car carrier is the world’s largest as the EV giant aggressively expands overseas. After sales surged last year, the Chinese EV leader looks for even more global market share in 2025.</p>
<h2 id="h-byd-shenzen-undocks-as-the-world-s-largest-car-carrier">BYD Shenzen undocks as the world’s largest car carrier</h2>
<p>BYD <a href="https://electrek.co/2025/01/02/byds-ev-sales-surged-2024-enough-top-tesla/" target="_blank" rel="noopener">sold a record 4.25 million</a> new energy vehicles (NEVs) last year, over 40% more than it did in 2023. That includes electric vehicles (EVs) and plug-in hybrids (PHEVs).</p>
<p>Although several automakers have yet to release full-year sales results, BYD is expected to outsell several global auto leaders, such as Ford, Honda, and Nissan. Meanwhile, this year could be even bigger for China’s largest automaker.</p>
<p>According to a new report from China News Service (via <em><a href="https://www.ithome.com/0/825/325.htm" target="_blank" rel="noopener">IT Home</a></em>), the BYD Shenzen, the company’s fourth ro-ro (roll-on/Roll-off) ship, finished undocking and is ready to set sail.</p>
<p>BYD’s new car carrier is the world’s largest, capable of transporting up to 9,200 vehicles. Since 2024, BYD has launched four ro-ro ships as it expands into new overseas markets.</p>
<p>The first, the <a href="https://electrek.co/2024/01/11/byd-shipping-evs-first-ship-europe/" target="_blank" rel="noopener">BYD Explorer No 1</a>, was launched in January 2024. It has already completed several trips to Europe, including Spain and Germany, and also docked in Brazil.</p>
<figure><img loading="lazy" decoding="async" src="https://electrek.co/wp-content/uploads/sites/3/2024/06/BYD-US-Chinese-EVs.jpeg?quality=82&amp;strip=all&amp;w=1024" alt="BYD-second-car-carrier" width="1400" height="700" /><figcaption>BYD Explorer No 1 unloading cars in Brazil (Source: BYD)</figcaption></figure>
<p>BYD’s second (BYD Changzhou) was put into operation in early December 2024, followed by the BYD Hefei, which set sail last week. All three can carry up to 7,000 vehicles.</p>
<p>The Hefei hit the seas last week, carrying 5,000 NEVs. BYD said the vessel will “accelerate the internationalization process of China’s new energy vehicles.”</p>
<figure><img loading="lazy" decoding="async" src="https://electrek.co/wp-content/uploads/sites/3/2025/01/BYD-Worlds-largest-car-carrier-1.jpeg?quality=82&amp;strip=all&amp;w=1024" alt="BYD-World's-largest-car-carrier" width="1400" height="700" /><figcaption>BYD Hefei sets sail for Europe carrying nearly 5,000 new energy vehicles (Source: BYD)</figcaption></figure>
<p>The BYD Shenzen, named after its hometown, is not only the world’s largest but also the most environmentally friendly. According to the report, the new ship includes BYD box-type battery packs and shaft-belt generators for the first time.</p>
<h2 id="h-electrek-s-take">Electrek’s Take</h2>
<p>BYD has already entered 100 countries and regions globally, but it’s poised for even more growth in 2025. After producing over 1.77 million vehicles last year, BYD topped Tesla by about 4,500 units to become the world’s largest EV maker.</p>
<p>Meanwhile, Tesla delivered slightly more fully electric vehicles, with 1.78 million in 2024, compared to BYD’s 1.76 million.</p>
<p>With an influx of new rivals in China, BYD is aggressively expanding into new overseas. After entering Japan in 2023, a market dominated by domestic automakers, BYD <a href="https://electrek.co/2025/01/13/byd-beat-toyota-ev-sales-home-turf-2024/" target="_blank" rel="noopener">sold more EVs than Toyota </a>in 2024.</p>
<p>After launching its <a href="https://electrek.co/2025/01/16/byd-launches-first-ev-korea-starting-just-21500/" target="_blank" rel="noopener">first EV in South Korea</a> this week, starting at just over $20,000, BYD will now challenge Hyundai and Korea on their home turf.</p>
<p>BYD’s growing presence is forcing legacy automakers<a href="https://electrek.co/2024/12/19/byd-takes-global-ev-market-by-storm-rivals-make-drastic-moves/" target="_blank" rel="noopener"> to take drastic actions</a> to keep up. After falling behind, Japan’s Nissan and Honda are now teaming up on EVs to fend off BYD’s surge.</p>
<p>In Thailand, or the “Detroit of Asia,” as it’s called, Japanese automakers have watched their market share fall from 90% to just 76% over the past two years amid BYD’s growing presence.</p>
<p>With new vehicles launching in Mexico, Brazil, Europe, Singapore, Thailand, and many more regions this year, BYD is poised for more growth in 2025.</p>
<p><a href="https://news.google.com/publications/CAAqBwgKMKqD-Qow6c_gAg?hl=en-US&amp;gl=US&amp;ceid=US:en" target="_blank" rel="nofollow noopener"><br />
<em>Add Electrek to your Google News feed.</em><br />
</a></p>
<div>
<p><em>FTC: We use income earning auto affiliate links.</em> <a href="https://electrek.co/about/#affiliate" target="_blank" rel="noopener">More.</a></p>
</div>
</div>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://cybernews.pt/byd-just-launched-the-largest-car-carrier-to-charge-up-its-global-ev-ambitions/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>EFF statement on U.S. Supreme Court&#8217;s decision to uphold TikTok ban</title>
		<link>https://cybernews.pt/eff-statement-on-u-s-supreme-courts-decision-to-uphold-tiktok-ban/</link>
					<comments>https://cybernews.pt/eff-statement-on-u-s-supreme-courts-decision-to-uphold-tiktok-ban/#respond</comments>
		
		<dc:creator><![CDATA[News Room]]></dc:creator>
		<pubDate>Wed, 22 Jan 2025 10:16:48 +0000</pubDate>
				<category><![CDATA[Cybersecurity]]></category>
		<category><![CDATA[Hacking & Cybercrime]]></category>
		<guid isPermaLink="false">https://cybernews.pt/eff-statement-on-u-s-supreme-courts-decision-to-uphold-tiktok-ban/</guid>

					<description><![CDATA[We are deeply disappointed that the Court failed to require the strict First Amendment scrutiny required in a case like this, which would’ve led to the inescapable conclusion that the government&#8217;s desire to prevent potential future harm had to be rejected as infringing millions of Americans’ constitutionally protected free speech. We are disappointed to see [&#8230;]]]></description>
										<content:encoded><![CDATA[<div>
<div>
<div>
<article role="article">
<div>
<p><span>We are deeply disappointed that the Court failed to require the strict First Amendment scrutiny required in a case like this, which would’ve led to the inescapable conclusion that the government&#8217;s desire to prevent potential future harm had to be rejected as infringing millions of Americans’ constitutionally protected free speech. We are disappointed to see the Court sweep past the undisputed content-based justification for the law – to control what speech Americans see and share with each other – and rule only based on the shaky data privacy concerns.</span></p>
<p><span>The United States’ foreign foes easily can steal, scrape, or buy Americans’ data by countless other means. The ban or forced sale of one social media app will do virtually nothing to protect Americans&#8217; data privacy – only comprehensive consumer privacy legislation can achieve that goal. Shutting down communications platforms or forcing their reorganization based on concerns of foreign propaganda and anti-national manipulation is an eminently anti-democratic tactic, one that the US has previously condemned globally.</span></p>
</div></div>
<div>
<h2>Related Issues</h2>
</p></div>
<div>
<h2>Join EFF Lists</h2>
</p></div>
<div>
<h2>Related Updates</h2>
<div>
<div>
<article role="article">
<header>
<h3><a href="http://www.eff.org/deeplinks/2024/12/effs-2024-battle-against-online-age-verification-defending-youth-privacy-and-free" rel="bookmark noopener" target="_blank">Fighting Online ID Mandates: 2024 In Review</a></h3>
</header>
<div>
<p>This year, nearly half of U.S. states passed laws imposing age verification requirements on online platforms. Though age verification mandates are often touted as “online safety” measures for kids, the laws actually do more harm than good.</p>
</div></div>
<div>
<article role="article">
<header>
<h3><a href="http://www.eff.org/deeplinks/2024/12/saving-internet-europe-defending-free-expression" rel="bookmark noopener" target="_blank">Saving the Internet in Europe: Defending Free Expression </a></h3>
</header>
<div>
<p><i>This post is part two in a series of posts about EFF’s work in Europe. Read about how and why we work in Europe </i><a href="https://www.eff.org/deeplinks/2024/12/saving-internet-europe-how-eff-works-europe" target="_blank" rel="noopener"><i>here</i></a><i>.</i> EFF’s mission is to ensure that technology supports freedom, justice, and innovation for all people of the world. While our work has taken us&#8230;</p>
</div></div>
</p></div>
</p></div>
</p></div>
<div>
<h2>Related Issues</h2>
</div></div>
<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://cybernews.pt/eff-statement-on-u-s-supreme-courts-decision-to-uphold-tiktok-ban/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Forgejo: A self-hosted lightweight software forge</title>
		<link>https://cybernews.pt/forgejo-a-self-hosted-lightweight-software-forge/</link>
					<comments>https://cybernews.pt/forgejo-a-self-hosted-lightweight-software-forge/#respond</comments>
		
		<dc:creator><![CDATA[News Room]]></dc:creator>
		<pubDate>Wed, 22 Jan 2025 10:15:46 +0000</pubDate>
				<category><![CDATA[Cybersecurity]]></category>
		<category><![CDATA[Hacking & Cybercrime]]></category>
		<guid isPermaLink="false">https://cybernews.pt/forgejo-a-self-hosted-lightweight-software-forge/</guid>

					<description><![CDATA[Beyond coding. We forge. Forgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job. Brought to you by an inclusive community under the umbrella of Codeberg e.V., a democratic non-profit organization, Forgejo can be trusted to be exclusively Free Software. You can create an account on Codeberg [&#8230;]]]></description>
										<content:encoded><![CDATA[<div xmlns:xlink="http://www.w3.org/1999/xlink">
<div>
<hgroup>
<p>
Beyond coding.<br />
<span>We forge.</span> </p>
</hgroup>
<div> <picture><source srcset=" 
/_astro/mascot-dark.1omhhgvT_1wP5Ng.webp 407w,
								/_astro/mascot-dark.1omhhgvT_FT0Ui.webp 814w,
								/_astro/mascot-dark.1omhhgvT_1RR3an.webp 1629w,
							" type="image/webp" ><source srcset=" 
/_astro/mascot-dark.1omhhgvT_Z1a8nnm.png 407w,
								/_astro/mascot-dark.1omhhgvT_Z214sgk.png 814w,
								/_astro/mascot-dark.1omhhgvT_ZAasCY.png 1629w,
							" type="image/png" > <img src="http://forgejo.org/_astro/mascot-dark.1omhhgvT_Zm0N2n.webp" alt loading="eager" width="1629" height="1273" decoding="async"> </picture> </div>
<div>
<p> <span>Forgejo</span><br />
is a self-hosted lightweight software forge.<br />
Easy to install and low maintenance, it just does the job.
</p>
<p>
Brought to you by an inclusive community under the umbrella of<br />
<a href="https://docs.codeberg.org/getting-started/what-is-codeberg/#what-is-codeberg-e.v.%3F" target="_blank" rel="noopener">Codeberg e.V.</a>, a democratic non-profit organization, Forgejo can be trusted to be exclusively Free Software. You can<br />
						create an account on<br />
<a href="https://codeberg.org/" target="_blank" rel="noopener">Codeberg</a><br />
and<br />
<a href="https://codeberg.org/forgejo-contrib/delightful-forgejo#public-instances" target="_blank" rel="noopener">other instances</a><br />
or download it to self-host your own. It focuses on security, scaling, federation and privacy. Learn more about<br />
<a href="http://forgejo.org/compare/" target="_blank" rel="noopener">how it compares with other forges</a>.
</p>
</p></div>
</p></div>
<div id="features">
<div>
<h2>
Forge great software with Forgejo<br />
</h2>
<p>
Take back control of your software development process, self-host your projects and get everyone involved in<br />
				delivering quality software on the same page.
</p>
</p></div>
<div>
<div>
<div>
<h3> Simple software project management </h3>
<p><strong>Ease of use</strong> is important to get things done efficiently. Forgejo’s user experience is designed for <strong>collaboration</strong> and <strong>productivity</strong>.</p>
</p></div>
<div>
<h3> Self-hosted alternative to GitHub </h3>
<p><strong>Liberate your software</strong> from proprietary shackles. Forgejo offers a familiar environment to GitHub users, allowing smooth transition to a <strong>platform you own</strong>.</p>
</p></div>
<div>
<h3> Easy to install and maintain </h3>
<p>Hosting your own software forge does not require expert skills. With Forgejo you can control your server with <strong>minimal effort</strong>.</p>
</p></div>
</p></div>
<div>
<div>
<h3> Lightweight and performant </h3>
<p>With a <strong>rich feature set</strong>, Forgejo still has a <strong>low server profile</strong> and requires <strong>an order of magnitude less resources</strong> than other forges.</p>
</p></div>
<div>
<h3> Guaranteed 100% Free Software </h3>
<p>Forgejo will always be <strong>Free and Open Source Software</strong>. Furthermore we exclusively use Free Software for our own project development.</p>
</p></div>
<div>
<h3> Beyond coding, we forge ahead </h3>
<p>An exciting future awaits. We will innovate the Software Forge and enable <strong>collaborative</strong> software development facilitated by <strong>decentralized</strong> platforms.</p>
</p></div>
</p></div>
</p></div>
</p></div>
<div>
<h2>
Get Involved<br />
</h2>
<p> <strong><br />
Forgejo consists of motivated people, and we are looking forward to<br />
<a href="https://forgejo.org/docs/next/contributor/" target="_blank" rel="noopener">your contribution</a> </strong>.<br />
Feel free to help in the domains of<br />
<a href="https://forgejo.org/docs/next/contributor/localization/" target="_blank" rel="noopener">localization</a>,<br />
<a href="https://codeberg.org/forgejo/forgejo/issues" target="_blank" rel="noopener">code, federation, releases management</a>,<br />
<a href="https://codeberg.org/forgejo/user-research/" target="_blank" rel="noopener">user research</a>,<br />
<a href="https://codeberg.org/forgejo/design" target="_blank" rel="noopener">UX and usability</a>,<br />
<a href="https://codeberg.org/forgejo/code-of-conduct/issues" target="_blank" rel="noopener">community management</a>,<br />
<a href="https://codeberg.org/forgejo/docs/issues" target="_blank" rel="noopener">documentation</a>,<br />
<a href="https://codeberg.org/forgejo/website/issues" target="_blank" rel="noopener">web design</a>,<br />
<a href="https://codeberg.org/forgejo/governance/issues" target="_blank" rel="noopener">governance</a> and more.
</p>
<p> <a href="https://codeberg.org/forgejo/forgejo" target="_blank" rel="noopener"> <svg width="1em" height="1em" viewBox="0 0 24 24" data-icon="tabler:git-merge">  <use xlink:href="http://forgejo.org/#ai:tabler:git-merge" />  </svg> Contribute on Codeberg<br />
</a> <a href="https://liberapay.com/forgejo" target="_blank" rel="noopener"> <svg width="1em" height="1em" viewBox="0 0 24 24" data-icon="mdi:heart">  <symbol id="ai:mdi:heart"><path fill="currentColor" d="m12 21.35l-1.45-1.32C5.4 15.36 2 12.27 2 8.5C2 5.41 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.08C13.09 3.81 14.76 3 16.5 3C19.58 3 22 5.41 22 8.5c0 3.77-3.4 6.86-8.55 11.53z" /></symbol><use xlink:href="http://forgejo.org/#ai:mdi:heart" />  </svg> Donate<br />
</a> </p>
</p></div>
</p></div>
<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://cybernews.pt/forgejo-a-self-hosted-lightweight-software-forge/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>How Unix spell ran in 64kb RAM</title>
		<link>https://cybernews.pt/how-unix-spell-ran-in-64kb-ram/</link>
					<comments>https://cybernews.pt/how-unix-spell-ran-in-64kb-ram/#respond</comments>
		
		<dc:creator><![CDATA[News Room]]></dc:creator>
		<pubDate>Wed, 22 Jan 2025 10:15:44 +0000</pubDate>
				<category><![CDATA[Cybersecurity]]></category>
		<category><![CDATA[Hacking & Cybercrime]]></category>
		<guid isPermaLink="false">https://cybernews.pt/how-unix-spell-ran-in-64kb-ram/</guid>

					<description><![CDATA[How do you fit a 250kB dictionary in 64kB of RAM and still perform fast lookups? For reference, even with modern compression techniques like gzip -9, you can&#8217;t compress this file below 85kB. In the 1970s, Douglas McIlroy faced this exact challenge while implementing the spell checker for Unix at AT&#038;T. The constraints of the [&#8230;]]]></description>
										<content:encoded><![CDATA[<div dir="auto">
<p>How do you fit a 250kB dictionary in 64kB of RAM and still perform fast lookups? For reference, even with modern compression techniques like gzip -9, you can&#8217;t compress this file below 85kB.</p>
<div>
<p><span>In the 1970s, Douglas McIlroy faced this exact challenge while implementing the spell checker for Unix at AT&#038;T. The constraints of the PDP-11 computer meant the entire dictionary needed to fit in just 64kB of RAM. A seemingly impossible task.</span></p>
<p><span>Instead of relying on generic compression techniques, he took advantage of the properties of the data and developed a compression algorithm that came within 0.03 bits of the theoretical limit of possible compression. To this day, it remains unbeaten. </span></p>
</div>
<p>The story of Unix spell is more than just historical curiosity. It&#8217;s a masterclass in engineering under constraints: how to analyze a problem from first principles, leverage mathematical insights, and design elegant solutions that work within strict resource limits.</p>
<p>If you&#8217;re short on time, here&#8217;s the key engineering story:</p>
<ul>
<li>
<p>The Unix spell started in the 1970s as an afternoon prototype by Steve Johnson at AT&#038;T, before Douglas McIlroy rewrote it to improve its performance and accuracy.</p>
</li>
<li>
<p>McIlroy&#8217;s first innovation was a clever linguistics-based stemming algorithm that reduced the dictionary to just 25,000 words while improving accuracy.</p>
</li>
<li>
<p>For fast lookups, he initially used a Bloom filter—perhaps one of its first production uses. Interestingly, Dennis Ritchie provided the implementation. They tuned it to have such a low false positive rate that they could skip actual dictionary lookups.</p>
</li>
<li>
<p>When the dictionary grew to 30,000 words, the Bloom filter approach became impractical, leading to innovative hash compression techniques.</p>
</li>
<li>
<p>They computed that 27-bit hash codes would keep collision probability acceptably low, but needed compression.</p>
</li>
<li>
<p>McIlroy&#8217;s solution was to store differences between sorted hash codes, after discovering these differences followed a geometric distribution.</p>
</li>
<li>
<p>Using Golomb&#8217;s code, a compression scheme designed for geometric distributions, he achieved 13.60 bits per word—remarkably close to the theoretical minimum of 13.57 bits.</p>
</li>
<li>
<p>Finally, he partitioned the compressed data to speed up lookups, trading a small memory increase (final size ~14 bits per word) for significantly faster performance.</p>
</li>
</ul>
<p>The rest of the article expands each of these points and gives a detailed explanation with all the math and logic behind them.</p>
<div>
<figure><a target="_blank" href="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce523ed3-b3aa-4cf3-b06a-4d67e70d838a_800x529.jpeg" data-component-name="Image2ToDOM" rel="noopener"></p>
<div><picture><source type="image/webp"  ><img decoding="async" src="https://substackcdn.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce523ed3-b3aa-4cf3-b06a-4d67e70d838a_800x529.jpeg" width="800" height="529" data-attrs="{"src":"https://substack-post-media.s3.amazonaws.com/public/images/ce523ed3-b3aa-4cf3-b06a-4d67e70d838a_800x529.jpeg","srcNoWatermark":null,"fullscreen":null,"imageSize":null,"height":529,"width":800,"resizeWidth":null,"bytes":null,"alt":"A PDP-11 machine, source: Wikipedia","title":null,"type":null,"href":null,"belowTheFold":false,"topImage":true,"internalRedirect":null,"isProcessing":false}" alt="A PDP-11 machine, source: Wikipedia" title="A PDP-11 machine, source: Wikipedia"   fetchpriority="high"></picture></div>
<p></a><figcaption>A PDP-11 machine, source: Wikipedia</figcaption></figure>
</div>
<p>In order to secure funding for Unix, Ken Thompson and Dennis Ritchie pitched Unix as a text processing system for the patents department to AT&#038;T. Naturally, a text processing system needed a spell checker as well. </p>
<p>The first version of Unix spell was written by Steve Johnson in 1975 which was  a prototype. Jon Bentley mentions that Steve wrote it in one afternoon. Even though it worked, it was not very accurate. </p>
<p>It was pretty simple. It would split the input file into a stream of words, do some light preprocessing such as remove numbers and special characters, convert to lower case, then sort, unique, and finally pass the list to the spell program which would simply check for the existence of those words in a dictionary on the disk.</p>
<p>Because of its simplistic implementation, it was not very accurate, and also slow because of dictionary lookups on the disk.</p>
<p>After seeing the adoption of the initial version, Douglas McIlroy took up the project to rewrite it with the goal of improving the accuracy and performance of the tool. He worked on two separate fronts both involving some very clever engineering:</p>
<ul>
<li>
<p>Building an affix removal algorithm for reducing words to their stems, and a compact dictionary consisting of the stem words</p>
</li>
<li>
<p>A compact data structure for loading the dictionary into memory for doing fast lookups</p>
</li>
</ul>
<p>This article is going to be focused on the data structure design part, but let’s spend a section to get an overview on the affix removal algorithm to see how it worked.</p>
<p>Using a full fledged dictionary for doing lookups was slow because the computers those days had only a few kilobytes of main memory and using disk based lookups was even more slower. </p>
<p>Douglas McIlroy came up with the idea of an algorithm which would iteratively remove common prefixes and suffixes from a word and look up a dictionary to see if the reduced word is present in it or not. The algorithm would follow the affix removal process until there were no affixes left to remove and if even after this the word was not present in the dictionary, then it would be flagged as a misspelling.</p>
<p>For instance, the algorithm would reduce the word “misrepresented” to “present” by removing the prefixes “mis”, “re”, and the suffix “ed”. And because “present” is a valid word in the dictionary, it would not flag it as a misspelling.</p>
<p>This affix removal technique was not 100% accurate and would sometimes let misspelled words pass through. But, such occurrences were deemed acceptable at that time. He also implemented a bunch of exceptions to these rules to avoid some of the common errors. </p>
<p>Overall, this algorithm resulted in a very compact dictionary. The final dictionary consisted of 25,000 words, which seemed possible to load into memory with a well engineered data structure.</p>
<p>Let’s move on to discussing how he managed to implement in-memory dictionary lookups with just 64 kB of memory.</p>
<div>
<p>Bloom published his work on Bloom filter in 1970 while the Unix spell was developed in the mid-1970s. At this time, Bloom filter was not even called Bloom filter. In his paper, Douglas calls it a “superimposed code scheme”. </p>
<p>Interestingly, the Bloom filter implementation he used was given to him by Dennis Ritchie.</p>
</div>
<p>Even though the dictionary size was 25,000 words, it was still not possible to load it as it is in just 64kB of RAM. Besides, it also needed fast lookups. </p>
<p><span>The first data structure that Douglas used was a Bloom filter. In the paper he doesn’t call it Bloom filter, instead he refers to it as a “superimposed coding scheme”, attributed to </span><a href="https://dl.acm.org/doi/pdf/10.1145/362686.362692" rel="noopener" target="_blank">Bloom’s paper from 1970</a><span>. Interestingly, he gives the credit for the implementation of the Bloom filter he used to Dennis Ritchie.</span></p>
<p>A Bloom filter consists of a bit table initialized to all zeros. To add an item to the Bloom filter, you apply multiple hash functions to the item. Each hash function generates an index in the table, and that bit index is set to 1. If k hash functions are used, then, k different bit indices are turned on in the table.</p>
<blockquote>
<h5><em><span>For a more detailed explanation of Bloom filter, please check out </span><a href="https://blog.codingconfessions.com/p/bloom-filters-and-beyond" rel="noopener" target="_blank">my article on Bloom filters</a><span>.</span></em></h5>
</blockquote>
<p><span>Looking up an item, whether it exists in the table or not, requires the same procedure. You need to apply the k hash functions, and for each of them check if the corresponding bit is set to 1 in the table or not. If even one of the bits is not on, then it means that the item is not present in the dataset. However, if all the bits are set, then it indicates that the item </span><em>might</em><span> be present, but this may also be a false positive. </span></p>
<p>False positives can occur because of hash collisions. When querying for an item, we cannot be 100% sure if a bit is on in the table because of the query item, or because of a hash collision with another item. </p>
<p>When using Bloom filter, you need to implement a strategy to handle false positives. For instance, in this case it could mean doing a full dictionary search. But that would defeat the whole purpose of using a Bloom filter, which was to save memory and do fast dictionary lookups. In the case of a spell checker, most of the words exist in the dictionary and only a fraction of words are misspelled, so we would be checking the full dictionary quite a lot.</p>
<p><span>However, a Bloom filter can be tuned to achieve a desired false positive rate. The following formula computes the false positive probability for a Bloom filter with a given size </span><code>n</code><span>, number of inserted items </span><code>m</code><span>, and number of hash functions </span><code>k</code><span>. </span></p>
<div data-component-name="Latex">
<p><span>(begin{align*}<br />
&#038;text{q} approx left( 1 &#8211; e^{-frac{kn}{m}} right) \<br />
&#038;text{where:} &#038; \<br />
&#038;text{q}: text{Probability that a bit is 1} \<br />
&#038;m:  text{Number of bits in the Bloom filter} \<br />
&#038;k:  text{Number of hash functions used} \<br />
&#038;n:  text{Number of elements inserted}<br />
end{align*}<br />
)</span></p>
</div>
<p>In his paper, Douglas mentions that a false positive probability of 1 in 2000 was acceptable to them, which meant that for such a low false positive rate, they did not need to consult the dictionary. </p>
<p>As they had a dictionary of 25,000 items, the number of items was fixed. They fixed the bit table size at 400,000 bits because of the limited amount of memory. Based on these factors, using 11 hash functions allowed them to keep the false positive rate at around 1/2000.</p>
<p>They used the Bloom filter based spell implementation for a while. In the paper, Douglas mentions that even though the false positive rate was acceptable, in the wild, they were encountering a lot of new words that needed to be added to the dictionary. This led to the dictionary size going up from 25,000 to 30,000.</p>
<p>However, for a dictionary of this size, their Bloom filter required a bigger bit table size which was not possible for them. As a result, Douglas looked for alternate data structure designs to be able to fit a dictionary of 30,000 words in memory with similar lookup performance and accuracy.</p>
<p>As the dictionary size exploded from 25,000 to 30,000, Douglas needed a more memory efficient data structure to hold the dictionary in memory. </p>
<p>A hash table was an attractive solution, but it would have consumed much more memory than a Bloom filter because it requires storing the hash, as well as, the actual words to handle collisions.</p>
<p>Instead of a full hash table, Douglas decided to store just the hashes of the words. The lookup required computing the hash of the input word, and then checking for its existence in the hashes using a scan. </p>
<p>One intuition for doing so might have been that the individual words can be of varying lengths, but a hash function will naturally compress them down to a fixed number of bits, and that may possibly allow them to fit the hashes in memory.</p>
<p>But hashes can collide, so they needed a large enough hash code to have an acceptably low probability of collisions.</p>
<p><span>If each word in the dictionary is hashed to a hash code of size </span><code>b</code><span> bits, then there are </span><code>2^b</code><span> total possible hash codes in that space. If the size of the dictionary is </span><code>v</code><span> words, then the probability of a hash collision can be computed as:</span></p>
<div data-component-name="Latex">
<p><span>(begin{align*}<br />
text{P(hash collision)} = frac{v}{2^b}<br />
end{align*})</span></p>
</div>
<p>They had a dictionary of 30,000 words, which is ~2^15 words. Moreover, he mentions that a collision probability of 1 in 2^12 was acceptable to them. This gave a hash code size of 27 bits.</p>
<p>But 27-bit hash codes were too big: with 2^15 words, they needed 2^15 * 27 bits of memory, while the PDP-11 had only 2^15 * 16 bits (64kB) of RAM—compression was essential. </p>
<p>Before implementing any compression algorithm, we need to know what is the theoretical minimum number of bits we can achieve to compress this piece of data. It acts as a benchmark to tell us how well we are able to compress the data.</p>
<p><span>This theoretical minimum is computed using the information content of the event which generated the data we are trying to compress. This concept comes from </span><a href="https://en.wikipedia.org/wiki/Information_theory" rel="noopener" target="_blank">information theory</a><span> which is the underpinning foundation for all of the data compression techniques. </span></p>
<p><span>The basic idea behind </span><a href="https://en.wikipedia.org/wiki/Information_content" rel="noopener" target="_blank">information content</a><span> is to use the probability of an event to determine how many bits are needed to encode it without loss of information. </span></p>
<p>A highly likely event carries less information (for instance a 100% probable event has no information and needs 0 bits to encode), while a less probable event contains much more information and needs more bits. There is an inverse relationship between the probability of an event and its information content, which leads to the following formula:</p>
<div data-component-name="Latex">
<p><span>(begin{align*}<br />
&#038;text{I(E)} = log_2left(frac{1}{P(E)}right) \<br />
&#038;text{Or, I(E) = } -log_2{P(E)} \<br />
&#038;text{where P(E) is } text{probability of event E}<br />
end{align*})</span></p>
</div>
<p>Now, to compute the information content of a set of hash codes, we need to figure out the probability of generating them.</p>
<p><span>If the size of a hash code is </span><code>b</code><span> bits, then there are a total of </span><code>2^b</code><span> possible hash codes in that space. Out of that, we are selecting a set of </span><code>v</code><span> unique hash codes. </span></p>
<div data-component-name="Latex">
<p><span>(</p>
<p>begin{align*}</p>
<p>text{The total number of ways to select such sets = }binom{2^b}{v}<br />
end{align*}<br />
)</span></p>
</div>
<p>Therefore, the probability of any one of these sets of being generated is:</p>
<div data-component-name="Latex">
<p><span>(begin{align*}<br />
text{P} =<br />
frac{1}{binom{2^b}{v}}<br />
end{align*}<br />
)</span></p>
</div>
<p>Thus, the information content of these hash codes is:</p>
<div data-component-name="Latex">
<p><span>(begin{align*}<br />
&#038;I(E) = &#8211; log_2left(frac{1}{binom{2^b}{v}}right) \<br />
&#038;= log_2left(binom{2^b}{v}right) \<br />
&#038;= log_2left(frac{(2^b)!}{v! , (2^b &#8211; v)!}right)<br />
end{align*})</span></p>
</div>
<p><span>To simplify things, we can use </span><a href="https://en.wikipedia.org/wiki/Stirling%27s_approximation" rel="noopener" target="_blank">Stirling’s approximation</a><span>:</span></p>
<div data-component-name="Latex">
<p><span>(begin{align*}<br />
&#038;text{Stirling&#8217;s approximation: } quad log_2(n!) approx n log_2(n) &#8211; n log_2(e), \<br />
end{align*}<br />
)</span></p>
</div>
<p><span>The paper makes another simplifying assumption that the number of words in the dictionary (30,000) is much smaller than the total number of hash codes (2^27), i.e., </span><code>v « 2^b</code><span>, this allows them to simplify </span><code>(2^b - v)</code><span> as  </span><code>2^b</code><span> in the above computation. </span></p>
<p>Using these two approximations leads to the following formula for the information content:</p>
<div data-component-name="Latex">
<p><span>(begin{align*}<br />
&#038;I(E) approx vleft[b &#8211; log_2left(frac{v}{e}right)right]<br />
end{align*})</span></p>
</div>
<p><span>Plugging in </span><code>v=30,000</code><span> and </span><code>b=27</code><span>, the minimum number of bits needed to encode a single hash code turns out to be 13.57, which was ~50% shorter than the original hash codes, and within the capacity of the PDP-11’s memory.</span></p>
<p><span>At this point they knew how much compression they could achieve but the bigger question was how to get there. Instead of compressing the raw hash codes, what if they computed and stored the differences between successive hash codes (in their sorted order)? This is similar to how </span><a href="https://en.wikipedia.org/wiki/Delta_encoding" rel="noopener" target="_blank">delta encoding</a><span> works, but not quite the same.</span></p>
<p>There were a couple of advantages of working with hash differences.</p>
<ul>
<li>
<p>By definition the differences were smaller than the raw hash codes</p>
</li>
<li>
<p>And many of the difference value would repeat because the difference of several hash codes might be the same. </p>
</li>
</ul>
<p>This implied that it was easier to compress these differences than the hash codes. </p>
<p>Hash differences were computed by sorting the hash codes and taking differences between consecutive values.</p>
<p>For instance:</p>
<pre><code>sorted hash codes: 5, 14, 21, 32, 55, 67
hash differences: 5, 9, 7, 11, 23, 12</code></pre>
<p>Let’s also see how the lookup of a word worked when they stored hash differences instead of the actual value.</p>
<p>To check if a word exists in the dictionary or not, they would compute the hash of the word and check for its existence in the dictionary via a simple algorithm. </p>
<pre><code>lookup(input_hashcode) -> bool:
  sum = hash_differences[0]
  i = 1
  while True:
    sum += hash_differences[i]
    if sum == input_hashcode:
      return True
    if sum > input_hashcode:
      return False
    i += 1</code></pre>
<p>Now, let’s discuss how they came up with a compression scheme for this data.</p>
<p>The basic principle behind lossless compression is to assign shorter codes to symbols with higher probabilities, and longer codes to symbols with lower probabilities. This makes sense because symbols with higher probabilities tend to occur more frequently in the data and assigning them shorter codes means higher compression rate.</p>
<p>But this requires computing the probability distribution of all the symbols in the data, and then using it to generate compressed codes. The probability distribution table is needed at decompression time as well to perform the decoding. </p>
<p>This had two problems for Douglas:</p>
<ul>
<li>
<p>Holding a probability distribution table for ~30,000 symbols in memory would have taken away any compression advantage he was getting from compression itself. So he needed a scheme which was free of this requirement.</p>
</li>
<li>
<p>Computing the probabilities of the hash differences would have been time expensive. All the 30,000 possible hash difference values, their sums and counts would not have been possible to keep in memory for computing their probabilities. So, it would have required an expensive disk based data structure to compute these probabilities.</p>
</li>
</ul>
<p>But McIlroy came up with an elegant solution by recognizing that the hash differences followed a geometric distribution, enabling an efficient compression scheme. Let’s first understand how these hash difference values are geometrically distributed.</p>
<p><span>The </span><a href="https://en.wikipedia.org/wiki/Geometric_distribution" rel="noopener" target="_blank">geometric distribution</a><span> is a discrete probability distribution which is used to model scenarios where we conduct an experiment until we get a success. For instance, rolling a six-faced die until we get a “1” forms a geometric distribution, with the probability of success being 1/6. A simpler example is tossing a coin until we get a head. </span></p>
<p><span>If the probability of failure is </span><code>p</code><span>, the probability of success is </span><code>q</code><span>, and if success occurs in the </span><code>kth</code><span> trial, then the </span><a href="https://en.wikipedia.org/wiki/Probability_mass_function" rel="noopener" target="_blank">probability mass function</a><span> of the geometric distribution is given by the following formula:</span></p>
<div data-component-name="Latex">
<p><span>(begin{align*}<br />
&#038;P = p^kq<br />
end{align*})</span></p>
</div>
<p>Now, let&#8217;s understand how the hash difference values map to this distribution.</p>
<p><span>As each hash code is </span><code>b</code><span> bits wide, we have a space of </span><code>2^b</code><span> points. And we have </span><code>v</code><span> hash codes spread out in this space. The probability of any point in this space containing a hash code is </span><code>q=v/2^b</code><span>, and the probability of a point being empty is </span><code>p=1-(v/2^b)</code><span>.</span></p>
<div data-component-name="Latex">
<p><span>(begin{align*}<br />
&#038;text{P(a point containing a hash code)} = q = frac{v}{2^b} \<br />
&#038;text{P(an empty point)} = p = 1 &#8211; left(frac{v}{2^b}right)<br />
end{align*})</span></p>
</div>
<p><span>But we are interested in modelling the distribution of hash difference values, rather than the hash codes themselves. A hash difference </span><code>k</code><span> occurs when two consecutive hash values in the sorted sequence are </span><code>k</code><span> positions apart. For instance, if we have two successive hash code values 20 and 25, then the hash difference is 5.</span></p>
<p><span>What&#8217;s the probability of seeing a hash difference of </span><code>k</code><span>? Given any hash value </span><code>h</code><span> in our space:</span></p>
<ul>
<li>
<p><span>We need the next </span><code>k-1</code><span> positions after </span><code>h</code><span> to be empty</span></p>
</li>
<li>
<p><span>And then we need a hash value at position </span><code>h+k</code></p>
</li>
<li>
<p><span>The probability of </span><code>k-1</code><span> empty positions is </span><code>p^(k-1)</code></p>
</li>
<li>
<p><span>The probability of a hash value at position </span><code>h+k</code><span> is </span><code>q</code></p>
</li>
</ul>
<p><span>Therefore, the probability of a hash difference of </span><code>k</code><span> is:</span></p>
<div data-component-name="Latex">
<p><span>(begin{align*}<br />
&#038;text{P(difference=k) =} p^left(k-1right)q<br />
end{align*})</span></p>
</div>
<p>This follows exactly the form of a geometric distribution!</p>
<blockquote>
<h5><em>If you read the spell paper, you will find that the author takes a different route to arrive at this conclusion. He models the generation of the hash codes as a Poisson process and proceeds from there.</em></h5>
</blockquote>
<p><span>But, what is the point of modelling this as a geometric distribution? It turns out, there is a very simple and efficient </span><a href="https://en.wikipedia.org/wiki/Run-length_encoding" rel="noopener" target="_blank">run-length encoding</a><span> scheme for geometrically distributed integers given by Golomb in his 1965 </span><a href="https://web.stanford.edu/class/ee398a/handouts/papers/Golomb%20-%20Run-Length%20Codes%20-%20IT66.pdf" rel="noopener" target="_blank">paper</a><span>. Let’s see how it works.</span></p>
<p>Golomb’s code is a simple run-length encoding scheme for geometrically distributed integers which was used by Douglas to compress the hash differences. It takes advantage of the fact that geometrically distributed values have an exponentially decaying probability of success, which can be leveraged for performing compression.</p>
<p><span>What do we mean by that? Recall that in the case of geometric distribution, the probability of success after </span><code>k</code><span> trials is given as:</span></p>
<p><span>Let’s say, we find an integer </span><code>m</code><span>, such that </span><code>p^m = 1/2</code><span>. Then, it means that the probability of success after </span><code>k + m</code><span> trials is:</span></p>
<div data-component-name="Latex">
<p><span>(begin{align*}<br />
&#038;text{P(success after k + m trials)} = p^left(k + mright)q = frac{1}{2}p^kq<br />
end{align*})</span></p>
</div>
<p><span>In other words, the probability of getting success in </span><code>k + m</code><span> trials is half of that of  the probability of getting a success in </span><code>m</code><span> trials. And this probability continues to half every </span><code>m</code><span> successive trials. This is an exponentially decaying distribution of probabilities.</span></p>
<p><span>Let&#8217;s consider a fair coin toss example where we toss the coin until a head occurs. For a fair coin, </span><code>p = q = 1/2</code><span>.</span></p>
<p><span>Here, we have </span><code>m = 1</code><span>, because </span><code>p^1 = 1/2</code><span>. It means that the probabilities decay by half every trial:</span></p>
<div data-component-name="Latex">
<p><span>(begin{align*}<br />
&#038;P(k=1) = frac{1}{2} \<br />
&#038;P(k=2) = frac{1}{4} \<br />
&#038;P(k=3) = frac{1}{8} \<br />
&#038;P(k=4) = frac{1}{16}</p>
<p>end{align*})</span></p>
</div>
<p><span>Let’s take another example of a biased coin, such that </span><code>p=1/sqrt(2) = 0.707</code><span>, and </span><code>q=0.293</code><span>.</span></p>
<p><span>Here, we have </span><code>m=2</code><span>, because </span><code>p^2 = 1/2</code><span>. In this case the probabilities decay after blocks of size 2.</span></p>
<div data-component-name="Latex">
<p><span>(begin{align*}<br />
&#038;P(k=1) = 0.293 \<br />
&#038;P(k=2) = 0.207 \<br />
&#038;P(k=3) = 0.116 \<br />
&#038;P(k=4) = 0.104 \<br />
&#038;P(k=5) = 0.073 \<br />
&#038;P(k=6) = 0.051</p>
<p>end{align*})</span></p>
</div>
<p><span>You can see that the probabilities decay by half for every even value of </span><code>k</code><span>. For instance:</span></p>
<div data-component-name="Latex">
<p><span>(frac{P(k=2)}{P(k=4)} = frac{P(K=4)}{P(k=6)} approx 0.5)</span></p>
</div>
<p><span>This pattern of exponential decay allows us to group the hash difference values in blocks of size </span><code>m</code><span>. Each value within a block gets a code of size </span><code>k</code><span> bits, while the next block gets codes of size </span><code>k + 1</code><span> bits. The reasoning behind it is rooted in information theory.</span></p>
<p><span>The minimum number of bits required to encode the outcome of an event is given by its information content which is </span><code>-log₂(p)</code><span>, where </span><code>p</code><span> is the probability of that event. </span></p>
<p>It means that if an event has probability 1/2, it needs 1 bit code, an event with probability 1/4 needs 2 bits, an event with probability 1/8 needs 3 bit codes and so on.</p>
<p><span>We can leverage this for geometrically distributed values by arranging them in blocks of size </span><code>m</code><span>. The values within a given block can be assigned codes of equal length, and the values in the subsequent block gets codes one bit wider for its </span><code>m</code><span> values.</span></p>
<div>
<figure><a target="_blank" href="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ced331b-4cbe-4fb9-808b-43673c752884_680x165.png" data-component-name="Image2ToDOM" rel="noopener"></p>
<div><picture><source type="image/webp"  ><img decoding="async" src="https://substackcdn.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ced331b-4cbe-4fb9-808b-43673c752884_680x165.png" width="680" height="165" data-attrs="{"src":"https://substack-post-media.s3.amazonaws.com/public/images/9ced331b-4cbe-4fb9-808b-43673c752884_680x165.png","srcNoWatermark":null,"fullscreen":null,"imageSize":null,"height":165,"width":680,"resizeWidth":null,"bytes":20471,"alt":"Arranging hash code differences in blocks of sizes m, where each block’s probability is half of that of its predecessor. If the predecessor block gets k bit wide codes, the next block gets k+1 bit wide codes.","title":null,"type":"image/png","href":null,"belowTheFold":true,"topImage":false,"internalRedirect":null,"isProcessing":false}" alt="Arranging hash code differences in blocks of sizes m, where each block’s probability is half of that of its predecessor. If the predecessor block gets k bit wide codes, the next block gets k+1 bit wide codes." title="Arranging hash code differences in blocks of sizes m, where each block’s probability is half of that of its predecessor. If the predecessor block gets k bit wide codes, the next block gets k+1 bit wide codes."   loading="lazy"></picture></div>
<p></a><figcaption>Arranging hash code differences in blocks of sizes m, where each block’s probability is half of that of its predecessor. If the predecessor block gets k bit wide codes, the next block gets k+1 bit wide codes.</figcaption></figure>
</div>
<p>It turns out, formation of blocks with increasingly larger codes also leads to a beautiful self-similar bit pattern with properties that make it very easy to generate such codes. Let’s see how this self-similar pattern forms.</p>
<p>Self-similar pattern essentially means that the codes at a specific index within a block repeats itself at the same index in the next block, with one padding bit added on its left.</p>
<p>For instance, if the code at the 2nd position in the first block is 0001, then the 2nd code in the 2nd block will be 10001. Similarly, the 2nd position code in the 3rd block will be 110001, and so on. </p>
<p>This self-similar pattern naturally emerges because of the enforcement of 1 bit longer codes in each successive block. Let us see a concrete example.</p>
<p><span>Let’s say, our block size is </span><code>m=5</code><span> and the codes in the first block are </span><code>k=4</code><span> bits wide. </span></p>
<p><span>If the first code in the first block is </span><code>0110</code><span>, then we can generate the codes for the rest of the block by adding 1 to the previous code value. The codes for the first block will look like this:</span></p>
<pre><code>block-1 codes: 0110 0111 1000 1001 1010</code></pre>
<p><span>As you can see, the first block ends at the code </span><code>1010</code><span>. The natural value for the next code should be </span><code>1011</code><span>, but because this code lies in the next block, its code has to be 1 bit larger. As a result we need to left shift it by one bit, which makes it </span><code>10110</code><span>. And if you notice the least 4 bits of this code are the same as the first code in the first block. The following diagram highlights this visually.</span></p>
<div>
<figure><a target="_blank" href="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb717247-7d87-4196-8c38-be44f82fe747_581x511.png" data-component-name="Image2ToDOM" rel="noopener"></p>
<div><picture><source type="image/webp"  ><img decoding="async" src="https://substackcdn.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb717247-7d87-4196-8c38-be44f82fe747_581x511.png" width="581" height="511" data-attrs="{"src":"https://substack-post-media.s3.amazonaws.com/public/images/db717247-7d87-4196-8c38-be44f82fe747_581x511.png","srcNoWatermark":null,"fullscreen":null,"imageSize":null,"height":511,"width":581,"resizeWidth":null,"bytes":37780,"alt":"An example of self-similar codes. The first code in the first block are same as least 4 bits of the first code in the 2nd block","title":null,"type":"image/png","href":null,"belowTheFold":true,"topImage":false,"internalRedirect":null,"isProcessing":false}" alt="An example of self-similar codes. The first code in the first block are same as least 4 bits of the first code in the 2nd block" title="An example of self-similar codes. The first code in the first block are same as least 4 bits of the first code in the 2nd block"   loading="lazy"></picture></div>
<p></a><figcaption>An example of self-similar codes. The first code in the first block are same as least 4 bits of the first code in the 2nd block</figcaption></figure>
</div>
<pre><code>Another thing worth Noticing here is that we are obtaining the first value of the 2nd block by left shifting it by 1 bit, which means its least significant bit (LSB) is always 0. 

For the self-similar patterns to form, the first code of the first block should also always have its LSB set to 0. This implies that this first code is always an even number of the form 2x. </code></pre>
<p><span>The self-similar code has a couple of additional properties which provide an intuitive way to figure out the minimum bit width </span><code>k</code><span> for the codes in the first block. Let’s see how.</span></p>
<p><span>To figure out the minimum number of bits needed to encode the first block, let’s assume the first encoded value in the first block is </span><code>2x</code><span>. </span></p>
<p><span>Then the first code of the 2nd block </span><em>should</em><span> be </span><code>2x + m</code><span>. However, because the codes in the next block need to be 1 bit wider, this value gets shifted to the left by 1 bit, which makes it </span><code>2(2x + m)</code><span>.</span></p>
<blockquote>
<h6><em>Left shifting a value by 1 bit doubles it.</em></h6>
</blockquote>
<p><span>The self-similarity pattern gives rise to another way to think about these codes. If the first code in the first block is </span><code>2x</code><span>, then in the next block:</span></p>
<ul>
<li>
<p><span>We want the same pattern (</span><code>2x</code><span>)</span></p>
</li>
<li>
<p>But with an extra bit on the left</p>
</li>
<li>
<p><span>Adding a bit on the left is equivalent to adding </span><code>2^k</code></p>
</li>
<li>
<p><span>So the code becomes </span><code>2^k + 2x</code></p>
</li>
</ul>
<p>Combining these two relations gives us the following equation</p>
<div data-component-name="Latex">
<p><span>(begin{align*}<br />
&#038;2^k + 2x = 2(2x + m) \<br />
&#038;text{Or, } 2^k = 2m + 2x \<br />
&#038;text{Here, x is a nonnegative integer, so we can simplify the above to:} \<br />
&#038;2^k ge 2m<br />
end{align*})</span></p>
</div>
<p><span>By solving for the smallest integer value of </span><code>k</code><span> we can get the code width of the first block.</span></p>
<p><span>The same equation also gives us the value of </span><code>x</code><span>:</span></p>
<div data-component-name="Latex">
<p><span>(begin{align*}<br />
x = 2^left(k-1right) &#8211; m = 2^{log_2(m)} &#8211; m<br />
end{align*})</span></p>
</div>
<p>Knowing the values of m, k, and x gives way for a simple encoding algorithm.</p>
<p>The paper by Golomb gave a different algorithm for encoding and decoding, but the Unix spell code used a slightly complicated but more efficient algorithm. I describe the algorithm as implemented in the Unix spell.</p>
<p>Let’s understand how to encode a value using Golomb’s code. Recall that we have:</p>
<ul>
<li>
<p><span>Initial bit width </span><code>k</code></p>
</li>
<li>
<p><span>Block size </span><code>m</code></p>
</li>
<li>
<p><span>First code in first block is </span><code>2x</code><span>, where </span><code>x = 2^(k-1) - m</code></p>
</li>
</ul>
<p>Here’s the encoding algorithm:</p>
<pre><code><code>def encode(value):
    # Case 1: Values less than x
    # These get shorter codes of length k-1
    # Because we have unused bit patterns available
    if value < x:
        return value, k-1  # return (code, length)
    
    # Case 2: Values >= x
    # Need to find which block they belong to
    value = value - x     # adjust relative to first code
    y = 1                 # tracks block number through bit shifts
    length = k           # start with k bits
    
    # Find block by repeatedly subtracting block size
    while value >= m:    # m is block size
        value -= m       # move to next block
        y = y << 1      # add padding bit for next block
        length += 1     # each block needs one more bit
    
    # Generate final code:
    # (y-1) << k creates padding bits based on block number
    # x*2 adds offset for the first code
    # value adds position within current block
    code = ((y-1) << k) + (x*2) + value
    return code, length
</code></code></pre>
<p>The following figure shows two examples to illustrate how it works in practice:</p>
<div>
<figure><a target="_blank" href="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f59257e-3633-4a1a-baee-1bbf3ccde036_939x1121.png" data-component-name="Image2ToDOM" rel="noopener"></p>
<div><picture><source type="image/webp"  ><img decoding="async" src="https://substackcdn.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f59257e-3633-4a1a-baee-1bbf3ccde036_939x1121.png" width="939" height="1121" data-attrs="{"src":"https://substack-post-media.s3.amazonaws.com/public/images/6f59257e-3633-4a1a-baee-1bbf3ccde036_939x1121.png","srcNoWatermark":null,"fullscreen":null,"imageSize":null,"height":1121,"width":939,"resizeWidth":null,"bytes":105065,"alt":"Examples of how the encoding algorithm works for values 2 and 8","title":null,"type":"image/png","href":null,"belowTheFold":true,"topImage":false,"internalRedirect":null,"isProcessing":false}" alt="Examples of how the encoding algorithm works for values 2 and 8" title="Examples of how the encoding algorithm works for values 2 and 8"   loading="lazy"></picture></div>
<p></a><figcaption>Examples of how the encoding algorithm works for values 2 and 8</figcaption></figure>
</div>
<p><span>You can find the original Unix svr4 implementation of this algorithm </span><a href="https://github.com/calmsacibis995/svr4-src/blob/main/cmd/spell/huff.c#L105" rel="noopener" target="_blank">here</a><span>.</span></p>
<p>The decoding process is also not that complicated. Given a code, we need to:</p>
<ol>
<li>
<p><span>First look at its top </span><code>k-1</code><span> bits (call this w):</span></p>
<ul>
<li>
<p><span>If </span><code>w</code><span> is less than </span><code>x</code><span>, then this is a shorter code</span></p>
</li>
<li>
<p><span>The decoded value is simply </span><code>w</code><span> itself</span></p>
</li>
</ul>
</li>
<li>
<p><span>If </span><code>w ≥ x</code><span>, then we need to </span></p>
<ul>
<li>
<p>Include one more bit into w</p>
</li>
<li>
<p><span>Look at the least significant </span><code>k</code><span> bits of </span><code>w</code><span>: call it </span><code>u</code></p>
</li>
<li>
<p><span>if </span><code>u < 2x + m</code><span>:</span></p>
<ul>
<li>
<p><code>value = x + u + (s - 1)m</code></p>
</li>
<li>
<p><span>where </span><code>s</code><span> is the number of extra bits included into w</span></p>
</li>
</ul>
</li>
<li>
<p>else:</p>
<ul>
<li>
<p><span>keep including more bits into </span><code>w</code><span> until </span><code>u < 2x + m</code></p>
</li>
</ul>
</li>
</ul>
</li>
</ol>
<p><span>You can find the original Unix svr4 implementation of the decode algorithm </span><a href="https://github.com/calmsacibis995/svr4-src/blob/main/cmd/spell/huff.c#L83" rel="noopener" target="_blank">here</a><span>.</span></p>
<p>So how well this technique was able to compress the hash differences?</p>
<p>Recall that the theoretical limit of compression was 13.57 bits per word. Golomb codes managed to achieve an expected code length of 13.60, remarkably close to this theoretical minimum.</p>
<p>However, looking up a value in this compressed dictionary was quite slow. It required starting from the beginning, decoding and summing values until finding or exceeding the desired hash code.</p>
<p><span>To speed this up, the final Unix spell implementation partitioned the table of differences into </span><code>M</code><span> bins. This allowed them to first locate the correct bin, and then only scan within that bin, speeding up the search by a factor of </span><code>M</code><span>.</span></p>
<p><span>This partitioning scheme required storing additional pointers to the bins, adding </span><code>log₂M</code><span> bits per word to the storage requirement. The total storage increased to about 14 bits per word, but this was an acceptable trade-off: it was still within their memory budget while providing significantly faster lookups.</span></p>
<p data-attrs="{"url":"https://blog.codingconfessions.com/p/how-unix-spell-ran-in-64kb-ram?utm_source=substack&#038;utm_medium=email&#038;utm_content=share&#038;action=share","text":"Share","action":null,"class":null}" data-component-name="ButtonCreateButton"><a href="https://blog.codingconfessions.com/p/how-unix-spell-ran-in-64kb-ram?utm_source=substack&#038;utm_medium=email&#038;utm_content=share&#038;action=share" rel="noopener" target="_blank"><span>Share</span></a></p>
<p>The Unix spell command is a fascinating piece of engineering history that emerged from the severe memory constraints of the PDP-11. What makes it particularly interesting is how it evolved from a simple disk-based dictionary lookup to an elegant solution combining multiple computer science concepts:</p>
<ul>
<li>
<p>Probabilistic data structures (Bloom filters)</p>
</li>
<li>
<p>Information theory (optimal bit width calculations)</p>
</li>
<li>
<p>Probability theory (geometric distribution)</p>
</li>
<li>
<p>Compression algorithms (Golomb coding)</p>
</li>
</ul>
<p>The engineering journey is particularly instructive:</p>
<ol>
<li>
<p>Started with Bloom filters achieving acceptable false positive rates</p>
</li>
<li>
<p>When dictionary size grew, switched to compressed hashing where:</p>
<ul>
<li>
<p>They computed theoretical minimum bits needed</p>
</li>
<li>
<p>Recognized patterns in hash differences</p>
</li>
<li>
<p>Used Golomb's code to achieve near-optimal compression</p>
</li>
<li>
<p>Added binning for faster lookups with minimal space overhead</p>
</li>
</ul>
</li>
</ol>
<p>Even though modern spell checkers use different techniques like edit distance and language models, the engineering insights from Unix spell remain valuable. It shows how deep understanding of theoretical concepts combined with practical constraints can lead to efficient and elegant solutions.</p>
<p>Most importantly, it demonstrates that some of the best innovations happen when we are resource constrained, forcing us to think deeper about our problems rather than throwing more hardware at them.</p>
<ul>
<li>
<p><a href="https://ia800601.us.archive.org/11/items/development-of-spelling-list/Image092317125441_text.pdf" rel="noopener" target="_blank">Development of a Spelling List by Douglas McIlroy, 1982</a></p>
</li>
<li>
<p><a href="https://web.stanford.edu/class/ee398a/handouts/papers/Golomb%20-%20Run-Length%20Codes%20-%20IT66.pdf" rel="noopener" target="_blank">Run-length Encodings by Golomb, 1965</a></p>
</li>
<li>
<p><a href="https://dl.acm.org/doi/pdf/10.1145/362686.362692" rel="noopener" target="_blank">Space/Time Trade-offs in Hash Coding with Allowable Errors by Bloom, 1970</a></p>
</li>
<li>
<p><a href="https://dl.acm.org/doi/pdf/10.1145/3532.315102" rel="noopener" target="_blank">A Spelling Checker by Jon Bentley, 1985</a></p>
</li>
<li>
<p><a href="https://en.wikipedia.org/wiki/History_of_Unix#1970s" rel="noopener" target="_blank">History of Unix</a></p>
</li>
<li>
<p><a href="https://en.wikipedia.org/wiki/Geometric_distribution" rel="noopener" target="_blank">Geometric Distribution</a></p>
</li>
<li>
<p><a href="https://blog.codingconfessions.com/p/bloom-filters-and-beyond" rel="noopener" target="_blank">Bloom filter</a></p>
</li>
<li>
<p><a href="https://github.com/calmsacibis995/svr4-src/tree/main/cmd/spell" rel="noopener" target="_blank">Unix Spell Source</a><span> </span></p>
</li>
</ul>
<p><em>If you find my work interesting and valuable, you can support me by opting for a paid subscription (it’s $6.40 monthly/$58 annual). As a bonus you get access to monthly live sessions, and all the past recordings.</em></p>
<p><strong>Subscribed</strong></p>
<p><em><span>Many people report failed payments, or don’t want a recurring subscription. For that I also have a </span><a href="https://buymeacoffee.com/codeconfessions" rel="noopener" target="_blank">buymeacoffee page</a><span>. Where you can buy me a coffee or become a member. I will upgrade you to a paid subscription for the equivalent duration here.</span></em></p>
<p data-attrs="{"url":"https://buymeacoffee.com/codeconfessions","text":"Buy me a coffee","action":null,"class":"button-wrapper"}" data-component-name="ButtonCreateButton"><a href="https://buymeacoffee.com/codeconfessions" rel="noopener" target="_blank"><span>Buy me a coffee</span></a></p>
<p><em>I also have a GitHub Sponsor page. You will get a sponsorship badge, and also a complementary paid subscription here.</em></p>
<p data-attrs="{"url":"https://github.com/sponsors/abhinav-upadhyay","text":"Sponsor me on GitHub","action":null,"class":"button-wrapper"}" data-component-name="ButtonCreateButton"><a href="https://github.com/sponsors/abhinav-upadhyay" rel="noopener" target="_blank"><span>Sponsor me on GitHub</span></a></p>
</div>
<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://cybernews.pt/how-unix-spell-ran-in-64kb-ram/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>What does &#8220;supports DRM functions and may not be fully accessible&#8221;mean for SSDs?</title>
		<link>https://cybernews.pt/what-does-supports-drm-functions-and-may-not-be-fully-accessiblemean-for-ssds/</link>
					<comments>https://cybernews.pt/what-does-supports-drm-functions-and-may-not-be-fully-accessiblemean-for-ssds/#respond</comments>
		
		<dc:creator><![CDATA[News Room]]></dc:creator>
		<pubDate>Wed, 22 Jan 2025 10:15:26 +0000</pubDate>
				<category><![CDATA[Cybersecurity]]></category>
		<category><![CDATA[Hacking & Cybercrime]]></category>
		<guid isPermaLink="false">https://cybernews.pt/what-does-supports-drm-functions-and-may-not-be-fully-accessiblemean-for-ssds/</guid>

					<description><![CDATA[supports DRM functions and may not be fully accessible There&#8217;s an extension of the ATA protocol (the &#8220;language&#8221; spoken between your mainboard and your SATA SSDs), which allows for the storage device to reply differently, depending on whether a request was signed by the trusted platform module on the mainboard. That way, things like video [&#8230;]]]></description>
										<content:encoded><![CDATA[<div itemprop="text">
<blockquote>
<p>supports DRM functions and may not be fully accessible</p>
</blockquote>
<p>There&#8217;s an extension of the ATA protocol (the &#8220;language&#8221; spoken between your mainboard and your SATA SSDs), which allows for the storage device to reply differently, depending on whether a request was signed by the trusted platform module on the mainboard. That way, things like video player devices that only give access to the stored data when the software has proven itself to be unmodified can be implemented. (I can find much more interesting use cases, but digital rights management seems to be what the kernel authors saw as the application for this when they implemented that warning.) That also means that Linux might simply get an &#8220;incomplete&#8221; view of the SSD, hence it warns you about that, in case you wonder.</p>
<blockquote>
<p>read cache: enabled, doesn&#8217;t support DPO or FUA</p>
</blockquote>
<p>uff, this just tells you that the device has a read cache: the computer fetches some smaller unit of data, and the device keeps that (and potentially more of its surroundings) around in a smaller, faster &#8220;transparent&#8221; piece of memory. That makes sense, because it&#8217;s more common that data that was recently read is read again than some data that nobody cared about for a long time.</p>
<p>DPO and FUA are just really old techniques to tell SCSI (and consequently, ATAPI) devices to bypass that cache (FUA was supposed to force reading from the spinning platter without using what&#8217;s in the cache, whereas DPO was meant to say, hey, this is probably a one-off read; don&#8217;t care to start caching what I read here). Makes no sense for an SSD in how they were thought out in the early 1990s, so these extensions are not available for your SSD.</p>
</p></div>
<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://cybernews.pt/what-does-supports-drm-functions-and-may-not-be-fully-accessiblemean-for-ssds/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>CollectWise (YC F24) Is Hiring</title>
		<link>https://cybernews.pt/collectwise-yc-f24-is-hiring/</link>
					<comments>https://cybernews.pt/collectwise-yc-f24-is-hiring/#respond</comments>
		
		<dc:creator><![CDATA[News Room]]></dc:creator>
		<pubDate>Wed, 22 Jan 2025 10:15:25 +0000</pubDate>
				<category><![CDATA[Cybersecurity]]></category>
		<category><![CDATA[Hacking & Cybercrime]]></category>
		<guid isPermaLink="false">https://cybernews.pt/collectwise-yc-f24-is-hiring/</guid>

					<description><![CDATA[Automating consumer debt collection with AI Founding Engineer $140K &#8211; $190K / 0.25% &#8211; 1.00% Experience Any (new grads ok) Connect directly with founders of the best YC-funded startups. Apply to role › About the role About Us CollectWise is a fast growing and well funded Y Combinator-backed startup. We’re using generative AI to automate debt [&#8230;]]]></description>
										<content:encoded><![CDATA[<div>
<div>
<div>
<p><a href><img decoding="async" src="https://bookface-images.s3.amazonaws.com/small_logos/1792694f6083df81f7abeaf84bcea98ecdb14566.png" alt></a></p>
<div>
<p>Automating consumer debt collection with AI</p>
</div>
</div>
<div>
<h2>Founding Engineer</h2>
<p><strong>$140K &#8211; $190K</strong><span> / </span><span>0.25% &#8211; 1.00%</span></p>
<div>
<p><strong>Experience</strong></p>
<p><span>Any (new grads ok)</span></p>
</div>
<div>
<div>
<p>Connect directly with founders of the best YC-funded startups.</p>
<p><a href="https://account.ycombinator.com/authenticate?continue=https%3A%2F%2Fwww.workatastartup.com%2Fapplication%3Fsignup_job_id%3D72186&#038;defaults%5BsignUpActive%5D=true&#038;defaults%5Bwaas_company%5D=30091" target="_blank" rel="noopener">Apply to role ›</a></p>
</div>
<div>
<p><img loading="lazy" decoding="async" src="https://bookface-images.s3.us-west-2.amazonaws.com/avatars/ce12798fd266fe4e75a99d9fd074cd46b6cf4dfb.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&#038;X-Amz-Credential=ASIAQC4NIECAA7PE7DKF%2F20250122%2Fus-west-2%2Fs3%2Faws4_request&#038;X-Amz-Date=20250122T101528Z&#038;X-Amz-Expires=3600&#038;X-Amz-Security-Token=IQoJb3JpZ2luX2VjENr%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLXdlc3QtMiJGMEQCIC6HPoWc%2Bbk%2BsS2sVGr9QrotbmByn1X2qzXgs44Q9pWFAiAuve4T8BAUhNAd5MAsZ1LUCbvwbtuwJlEFvD%2Fwc49z8yruAwjT%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8BEAAaDDAwNjIwMTgxMTA3MiIM36wYarWactxQFRwQKsIDK8mAfZ5YqvqTafWrgztV1uhd25FuHq4tGlXz8jKOHp4JncGyzx4Xgp5Z4w7u8QTJqdGrZ%2Fx%2FA5Uu9dJ5Gj6EZeYr4SGOXbdIGzuyNkiwxIJ6D7ooGABcFOojfj0vPjpoFHhqZYuXYwMMUiYUz1h%2BrT1hPkV8IP38rYdIrgNMzRVleUHtLpP8NFkLe5Ziz6z37jri30tZDJa2AYsnvkge%2B5IKD8i000hGZnQHl54LlCPlkaKVxtbTh4ZGDNpk0CagIivVgCM8sKcJnVMqVYFyUXTH3%2FlpZVejPiN17xrhgFRed0s0nqEo7JVFj2VkBkRgqR972wzdeYW0oYniSzOpgpklr5mUvZ6uVUhwH7I7g%2FctoB1UZtpj%2FYqnsXvlm%2BL8RUQj8Wmm076Ejk3YwWpUCXDXA1G7A5T2rJLSvN%2B26vFmzdHmvSl3GGIv3M8ccp7udy495bz97WFTFSvFHH7ig4YfbXeTOZgTbbAO9PEwkP%2FsgwTuW99YWNoX1NpEiAKHbwzL4gUmLZBnUuBXgRefMrFaOm3gQlchrqJufhlLZT3X03rUTaJl%2FXoFBqEDnLCd6tQrZBiuRb8F%2BLu9DpLBfz7kMMaJw7wGOqYB2H3QZ2S%2BoOdMCA1iwST%2FF2FhgUwxFLHZZhqZw39g60uCXETBrJQcpJ1%2FkbpnSkcuOzlWecYqslHp5wOj5aLFeSRqiIpfzLOqHEDd6wvyRXlGFQ4x%2BgxCLj%2BsGfo8lUpIVeaTIsy0n%2FAn9FA0ZFwuPyvL7HUVHgWz0x4Z%2BQPxBjs4oHtL3spgvVcRj4El1Jx%2F6QNGdheyRtPQIeNV85FEKOeDkq6fAA%3D%3D&#038;X-Amz-SignedHeaders=host&#038;X-Amz-Signature=e2d02029cbf3da3d716a862dcc144d76912bd702185e2f4ec181620488c3db0c" width="75" height="75" alt="Sean OBrien"></p>
</div>
</div>
</div>
<h2>About the role</h2>
<div>
<p><strong>About Us</strong></p>
<p>CollectWise is a fast growing and well funded Y Combinator-backed startup. We’re using generative AI to automate debt collection, a $35B market in the US alone. Our AI agents are already outperforming human collectors by 2X, and we’re doing so at a fraction of the cost.</p>
<p>Our vision is to create a more equitable financial ecosystem by enabling creditors of all sizes to automatically recover their hard-earned money, while helping debtors pay off their balances through an empathetic, personalized approach using AI.</p>
<p><strong>Role</strong></p>
<p>We’re looking to hire CollectWise’s very first founding engineer—this is a rare opportunity to join a scrappy, high-caliber team that’s upending a massive, antiquated industry. Our ideal candidate is someone who loves building from scratch, thrives in ambiguity, and can quickly ship high-quality software using modern development frameworks.</p>
<p>As a founding engineer, you will have the autonomy to create your own products or features and directly influence the company’s success. You will work directly with the founders to make major technology decisions, play a critical role in shaping the company’s future, and help build a world-class engineering team over the coming years.</p>
<p><strong>Responsibilities:</strong></p>
<ul>
<li>Build new products and features using full-stack development frameworks.</li>
<li>Improve user experience by incorporating customer feedback and roadmap goals.</li>
<li>Optimize the success of our AI system through prompt engineering, fine-tuning, and testing</li>
<li>Identify and fix bugs while maintaining a scalable code architecture</li>
</ul>
<p><strong>Qualifications:</strong></p>
<ul>
<li>Experience in React JS, Node JS, Firebase, AWS, SQL, and GPT-4o</li>
<li>Experience building products in a production environment, either while building your own startup, working at an early-stage startup, or developing your own meaningful project from scratch</li>
<li>Self-starter with the ability to work independently and take ownership of assignments</li>
<li>Interest in fintech and AI</li>
</ul>
<p>We are looking for the most qualified and competitive candidates. We do not care about age or degree status (dropouts are encouraged to apply), and we hire strictly based on merit.</p>
</div>
<h2>About CollectWise</h2>
<p>CollectWise is revolutionizing debt recovery with autonomous AI agents and an integrated legal network. We boost recovery rates, reduce costs, and maintain a positive brand image through respectful, data-driven interactions.</p>
</div>
<div>
<div>
<p><img decoding="async" src="https://bookface-images.s3.us-west-2.amazonaws.com/logos/a5be02a3378f664e1f80f2a84997514d00f9fc1f.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&#038;X-Amz-Credential=ASIAQC4NIECAA7PE7DKF%2F20250122%2Fus-west-2%2Fs3%2Faws4_request&#038;X-Amz-Date=20250122T101528Z&#038;X-Amz-Expires=3600&#038;X-Amz-Security-Token=IQoJb3JpZ2luX2VjENr%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLXdlc3QtMiJGMEQCIC6HPoWc%2Bbk%2BsS2sVGr9QrotbmByn1X2qzXgs44Q9pWFAiAuve4T8BAUhNAd5MAsZ1LUCbvwbtuwJlEFvD%2Fwc49z8yruAwjT%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8BEAAaDDAwNjIwMTgxMTA3MiIM36wYarWactxQFRwQKsIDK8mAfZ5YqvqTafWrgztV1uhd25FuHq4tGlXz8jKOHp4JncGyzx4Xgp5Z4w7u8QTJqdGrZ%2Fx%2FA5Uu9dJ5Gj6EZeYr4SGOXbdIGzuyNkiwxIJ6D7ooGABcFOojfj0vPjpoFHhqZYuXYwMMUiYUz1h%2BrT1hPkV8IP38rYdIrgNMzRVleUHtLpP8NFkLe5Ziz6z37jri30tZDJa2AYsnvkge%2B5IKD8i000hGZnQHl54LlCPlkaKVxtbTh4ZGDNpk0CagIivVgCM8sKcJnVMqVYFyUXTH3%2FlpZVejPiN17xrhgFRed0s0nqEo7JVFj2VkBkRgqR972wzdeYW0oYniSzOpgpklr5mUvZ6uVUhwH7I7g%2FctoB1UZtpj%2FYqnsXvlm%2BL8RUQj8Wmm076Ejk3YwWpUCXDXA1G7A5T2rJLSvN%2B26vFmzdHmvSl3GGIv3M8ccp7udy495bz97WFTFSvFHH7ig4YfbXeTOZgTbbAO9PEwkP%2FsgwTuW99YWNoX1NpEiAKHbwzL4gUmLZBnUuBXgRefMrFaOm3gQlchrqJufhlLZT3X03rUTaJl%2FXoFBqEDnLCd6tQrZBiuRb8F%2BLu9DpLBfz7kMMaJw7wGOqYB2H3QZ2S%2BoOdMCA1iwST%2FF2FhgUwxFLHZZhqZw39g60uCXETBrJQcpJ1%2FkbpnSkcuOzlWecYqslHp5wOj5aLFeSRqiIpfzLOqHEDd6wvyRXlGFQ4x%2BgxCLj%2BsGfo8lUpIVeaTIsy0n%2FAn9FA0ZFwuPyvL7HUVHgWz0x4Z%2BQPxBjs4oHtL3spgvVcRj4El1Jx%2F6QNGdheyRtPQIeNV85FEKOeDkq6fAA%3D%3D&#038;X-Amz-SignedHeaders=host&#038;X-Amz-Signature=997acbb152c30cb3cc6b80f03dc863495bef0ef1e97fd540bb9aa06652015416" alt="CollectWise"></p>
<p>CollectWise</p>
<div>
<p><span>Founded:</span><span>2024</span></p>
<p><span>Team Size:</span><span>2</span></p>
<p><span>Location:</span><span></span></p>
</div>
</div>
<p>Founders</p>
<div>
<div>
<p><img loading="lazy" decoding="async" src="https://bookface-images.s3.us-west-2.amazonaws.com/avatars/ed7a8468ba3a27507a59bdfcc8f04535116fb81d.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&#038;X-Amz-Credential=ASIAQC4NIECAA7PE7DKF%2F20250122%2Fus-west-2%2Fs3%2Faws4_request&#038;X-Amz-Date=20250122T101528Z&#038;X-Amz-Expires=3600&#038;X-Amz-Security-Token=IQoJb3JpZ2luX2VjENr%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLXdlc3QtMiJGMEQCIC6HPoWc%2Bbk%2BsS2sVGr9QrotbmByn1X2qzXgs44Q9pWFAiAuve4T8BAUhNAd5MAsZ1LUCbvwbtuwJlEFvD%2Fwc49z8yruAwjT%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8BEAAaDDAwNjIwMTgxMTA3MiIM36wYarWactxQFRwQKsIDK8mAfZ5YqvqTafWrgztV1uhd25FuHq4tGlXz8jKOHp4JncGyzx4Xgp5Z4w7u8QTJqdGrZ%2Fx%2FA5Uu9dJ5Gj6EZeYr4SGOXbdIGzuyNkiwxIJ6D7ooGABcFOojfj0vPjpoFHhqZYuXYwMMUiYUz1h%2BrT1hPkV8IP38rYdIrgNMzRVleUHtLpP8NFkLe5Ziz6z37jri30tZDJa2AYsnvkge%2B5IKD8i000hGZnQHl54LlCPlkaKVxtbTh4ZGDNpk0CagIivVgCM8sKcJnVMqVYFyUXTH3%2FlpZVejPiN17xrhgFRed0s0nqEo7JVFj2VkBkRgqR972wzdeYW0oYniSzOpgpklr5mUvZ6uVUhwH7I7g%2FctoB1UZtpj%2FYqnsXvlm%2BL8RUQj8Wmm076Ejk3YwWpUCXDXA1G7A5T2rJLSvN%2B26vFmzdHmvSl3GGIv3M8ccp7udy495bz97WFTFSvFHH7ig4YfbXeTOZgTbbAO9PEwkP%2FsgwTuW99YWNoX1NpEiAKHbwzL4gUmLZBnUuBXgRefMrFaOm3gQlchrqJufhlLZT3X03rUTaJl%2FXoFBqEDnLCd6tQrZBiuRb8F%2BLu9DpLBfz7kMMaJw7wGOqYB2H3QZ2S%2BoOdMCA1iwST%2FF2FhgUwxFLHZZhqZw39g60uCXETBrJQcpJ1%2FkbpnSkcuOzlWecYqslHp5wOj5aLFeSRqiIpfzLOqHEDd6wvyRXlGFQ4x%2BgxCLj%2BsGfo8lUpIVeaTIsy0n%2FAn9FA0ZFwuPyvL7HUVHgWz0x4Z%2BQPxBjs4oHtL3spgvVcRj4El1Jx%2F6QNGdheyRtPQIeNV85FEKOeDkq6fAA%3D%3D&#038;X-Amz-SignedHeaders=host&#038;X-Amz-Signature=f00242e9eebb9ac96754c3b05841c32c58ec91c16cfc43f869f8a7a34b3d23b6" width="75" height="75" alt="Vivek Isukapalli"></p>
</div>
<div>
<p><img loading="lazy" decoding="async" src="https://bookface-images.s3.us-west-2.amazonaws.com/avatars/ce12798fd266fe4e75a99d9fd074cd46b6cf4dfb.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&#038;X-Amz-Credential=ASIAQC4NIECAA7PE7DKF%2F20250122%2Fus-west-2%2Fs3%2Faws4_request&#038;X-Amz-Date=20250122T101528Z&#038;X-Amz-Expires=3600&#038;X-Amz-Security-Token=IQoJb3JpZ2luX2VjENr%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLXdlc3QtMiJGMEQCIC6HPoWc%2Bbk%2BsS2sVGr9QrotbmByn1X2qzXgs44Q9pWFAiAuve4T8BAUhNAd5MAsZ1LUCbvwbtuwJlEFvD%2Fwc49z8yruAwjT%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8BEAAaDDAwNjIwMTgxMTA3MiIM36wYarWactxQFRwQKsIDK8mAfZ5YqvqTafWrgztV1uhd25FuHq4tGlXz8jKOHp4JncGyzx4Xgp5Z4w7u8QTJqdGrZ%2Fx%2FA5Uu9dJ5Gj6EZeYr4SGOXbdIGzuyNkiwxIJ6D7ooGABcFOojfj0vPjpoFHhqZYuXYwMMUiYUz1h%2BrT1hPkV8IP38rYdIrgNMzRVleUHtLpP8NFkLe5Ziz6z37jri30tZDJa2AYsnvkge%2B5IKD8i000hGZnQHl54LlCPlkaKVxtbTh4ZGDNpk0CagIivVgCM8sKcJnVMqVYFyUXTH3%2FlpZVejPiN17xrhgFRed0s0nqEo7JVFj2VkBkRgqR972wzdeYW0oYniSzOpgpklr5mUvZ6uVUhwH7I7g%2FctoB1UZtpj%2FYqnsXvlm%2BL8RUQj8Wmm076Ejk3YwWpUCXDXA1G7A5T2rJLSvN%2B26vFmzdHmvSl3GGIv3M8ccp7udy495bz97WFTFSvFHH7ig4YfbXeTOZgTbbAO9PEwkP%2FsgwTuW99YWNoX1NpEiAKHbwzL4gUmLZBnUuBXgRefMrFaOm3gQlchrqJufhlLZT3X03rUTaJl%2FXoFBqEDnLCd6tQrZBiuRb8F%2BLu9DpLBfz7kMMaJw7wGOqYB2H3QZ2S%2BoOdMCA1iwST%2FF2FhgUwxFLHZZhqZw39g60uCXETBrJQcpJ1%2FkbpnSkcuOzlWecYqslHp5wOj5aLFeSRqiIpfzLOqHEDd6wvyRXlGFQ4x%2BgxCLj%2BsGfo8lUpIVeaTIsy0n%2FAn9FA0ZFwuPyvL7HUVHgWz0x4Z%2BQPxBjs4oHtL3spgvVcRj4El1Jx%2F6QNGdheyRtPQIeNV85FEKOeDkq6fAA%3D%3D&#038;X-Amz-SignedHeaders=host&#038;X-Amz-Signature=e2d02029cbf3da3d716a862dcc144d76912bd702185e2f4ec181620488c3db0c" width="75" height="75" alt="Sean OBrien"></p>
</div>
</div>
</div>
</div>
<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://cybernews.pt/collectwise-yc-f24-is-hiring/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
