6930 stories
·
166 followers

Microsoft Puts Office Online Server On the Chopping Block

1 Comment
Microsoft is retiring Office Online Server on December 31, 2026, ending support and updates for organizations running browser-based Office apps on-premises. The Register reports: After this, there won't be any more security fixes, updates, or technical support from Microsoft. "This change is part of our ongoing commitment to modernizing productivity experiences and focusing on cloud-first solutions," the company said. Office Online Server provides browser-based versions of Word, Excel, PowerPoint, and OneNote for customers who want to keep things on-prem without having to roll out the full desktop applications. Microsoft's solution is to move to Microsoft 365, its decidedly off-premises version of its applications. The company said it is "focusing its browser-based Office app investments on Office for the Web to deliver secure, collaborative, and feature-rich experiences through Microsoft 365."

Other than migrating to another platform when the vendor pulls the plug, affected customers have few options. The announcement will also hit several customers running SharePoint Server SE or Exchange Server SE. While those products remain supported, Office Online Server integration will go away. The company suggested Microsoft 365 Apps for Enterprise and Office LTSC 2024 as alternatives for viewing and editing documents hosted on those servers.

Skype for Business customers will also lose some key features related to PowerPoint. Presenter notes and high-fidelity PowerPoint rendering will go away. In-meeting annotations, which allow meeting participants to write directly to slides without altering the original file, will no longer be available, and embedded video playback will run at lower fidelity. Features like whiteboards, polls, and app sharing shouldn't be affected. Microsoft's solution is a move to Teams, which the company says "offers modern meeting experiences."
Read the whole story
jepler
6 hours ago
reply
no on-prem for you. (also: there was still skype for business??)
Earth, Sol system, Western spiral arm
Share this story
Delete

Counter-Strike's Player Economy Is In a Multi-Billion Dollar Freefall

1 Comment
Counter-Strike has long been known for two things: tight tactical FPS gameplay and a thriving player marketplace effectively valued at literal billions of dollars. Now, thanks to a recent update from Valve, the latter is in a downward spiral, having lost 25% of its value -- or $1.75 billion -- overnight. Polygon: First, some context. Counter-Strike is a free-to-play multiplayer shooter. As with most other F2P games, it generates revenue from selling cosmetics. They arrive in lootbox-like Cases, which are opened by Keys purchased with real-world currency. They can also be obtained through trading with other players and purchasing from Steam Community Market. Beyond Steam, unofficial third-party marketplaces for CS cosmetics have also popped up as channels for buying and selling items.

Because items are obtained at random through opening Cases, rarer items fetch the highest value on the open marketplaces. Items of lower-rarity tiers can also be traded in at volume for an item of a higher tier via trade up contracts. Previously, Knives and Gloves could not be obtained through trade up contracts, exponentially increasing their value as highly sought-after items. Prior to the most recent update, some Knives, like a Doppler Ruby Butterfly Knife, could fetch around $20,000 on third-party storefronts like CSFloat.

Following Valve's Oct. 22 update to Counter-Strike, the second-highest-tier, Covert (Red), can now be traded up and turned into Knives and Gloves. Essentially, this means that a previously extremely rare and highly sought-after cosmetic is going to be much more obtainable for those who increasingly want it, reducing the value of Knives and Gloves on the open marketplace. And this is where the market descends into a freefall. Now, that Butterfly Knife mentioned above? It's going for around $12,000, as people are essentially dumping their stock, with 15 sold over the past 16 hours at the time of this writing.

Read the whole story
jepler
7 hours ago
reply
I was today years old when I realized there are people who will spend twenty thousand bucks for a few polygons in a video game.
Earth, Sol system, Western spiral arm
Share this story
Delete

Windows 11 Update Breaks Recovery Environment, Making USB Keyboards and Mice Unusable

1 Comment
"Windows Recovery Environment (RE), as the name suggests, is a built-in set of tools inside Windows that allow you to troubleshoot your computer, including booting into the BIOS, or starting the computer in safe mode," writes Tom's Hardware.

"It's a crucial piece of software that has now, unfortunately, been rendered useless (for many) as part of the latest Windows update." A new bug discovered in Windows 11's October build, KB5066835, makes it so that your USB keyboard and mouse stop working entirely, so you cannot interact with the recovery UI at all.

This problem has already been recognized and highlighted by Microsoft, who clarified that a fix is on its way to address this issue. Any plugged-in peripherals will continue to work just fine inside the actual operating system, but as soon as you go into Windows RE, your USB keyboard and mouse will become unresponsive. It's important to note that if your PC fails to start-up for any reason, it defaults to the recovery environment to, you know, recover and diagnose any issues that might've been preventing it from booting normally.

Note that those hanging onto old PS/2-connector equipped keyboards and mice seem to be unaffected by this latest Windows software gaffe.

Read the whole story
jepler
4 days ago
reply
Is there any Windows 11 compatible computer with a PS/2 connector? mmmm
Earth, Sol system, Western spiral arm
Share this story
Delete

Hugo van Kemenade: Three times faster with lazy imports

1 Comment

PEP 810 proposes “explicit lazy imports” for Python 3.15:

Lazy imports defer the loading and execution of a module until the first time the imported name is used, in contrast to ‘normal’ imports, which eagerly load and execute a module at the point of the import statement.

By allowing developers to mark individual imports as lazy with explicit syntax, Python programs can reduce startup time, memory usage, and unnecessary work. This is particularly beneficial for command-line tools, test suites, and applications with large dependency graphs.

It’s not been accepted yet, but let’s try out the reference implementation on one of my CLI tools, pypistats.

Setup #

First fetch the reference implementation. From a CPython checkout:

git remote add LazyImportsCabal https://github.com/LazyImportsCabal/cpython
git fetch LazyImportsCabal
gco lazy # see https://hugovk.dev/blog/2025/my-most-used-command-line-commands/

Because we want to install NumPy and pandas, let’s pretend to be Python 3.14 so we can use the binary wheels instead of having to build from source:

--- a/Include/patchlevel.h
+++ b/Include/patchlevel.h
 /* Version parsed out into numeric values */
 /*--start constants--*/
 #define PY_MAJOR_VERSION 3
-#define PY_MINOR_VERSION 15
+#define PY_MINOR_VERSION 14
 #define PY_MICRO_VERSION 0
 #define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_ALPHA
 #define PY_RELEASE_SERIAL 0

 /* Version as a string */
-#define PY_VERSION "3.15.0a0"
+#define PY_VERSION "3.14.0a0"
 /*--end constants--*/
--- a/configure.ac
+++ b/configure.ac
-m4_define([PYTHON_VERSION], [3.15])
+m4_define([PYTHON_VERSION], [3.14])

Build non-debug CPython with optimisations:

GDBM_CFLAGS="-I$(brew --prefix gdbm)/include" \
 GDBM_LIBS="-L$(brew --prefix gdbm)/lib -lgdbm" \
 ./configure --enable-optimizations --with-lto \
 --with-system-libmpdec --config-cache \
 --with-openssl="$(brew --prefix openssl@3)" && make -s -j8

Install NumPy and pandas:

./python.exe -m pip install numpy pandas

And then an editable install of the CLI, because we’ll also test changing the imports:

./python.exe -m pip install -e ~/github/pypistats

Let’s check the dependencies with pipdeptree:

uvx "pipdeptree[graphviz]" --python ./python.exe --packages pypistats --graph-output svg > pipdeptree.svg

pypistats has seven direct dependencies, which result in a total of 41 dependencies six layers deep, not counting NumPy and pandas:

A tree of dependencies: seven wide, and about six layers deep.

Benchmarks #

Let’s benchmark running pypistats --help, which is meant to be quick, using hyperfine:

brew install hyperfine

Inline imports #

In the pypistats CLI, I had already applied the trick of moving heavier imports into the functions that call them (the PEP calls these “inline imports”).

Instead of the lazy keyword, I’m using the PYTHON_LAZY_IMPORTS env var here to make it easy to compare two different runs.

❯ hyperfine --warmup 10 --runs 20 --export-json out.json \
 "./python.exe -m pypistats --help" \
 "PYTHON_LAZY_IMPORTS=on ./python.exe -m pypistats --help"
Benchmark 1: ./python.exe -m pypistats --help
 Time (mean ± σ): 46.2 ms ± 1.1 ms [User: 38.8 ms, System: 6.4 ms]
 Range (min … max): 45.1 ms … 49.6 ms 20 runs

Benchmark 2: PYTHON_LAZY_IMPORTS=on ./python.exe -m pypistats --help
 Time (mean ± σ): 35.3 ms ± 0.5 ms [User: 29.5 ms, System: 4.8 ms]
 Range (min … max): 34.6 ms … 36.3 ms 20 runs

Summary
 PYTHON_LAZY_IMPORTS=on ./python.exe -m pypistats --help ran
 1.31 ± 0.04 times faster than ./python.exe -m pypistats --help

Plotted with plot_progression.py:

A progression chart of 20 runs for each benchmark: non-lazy runs are about 46 ms, lazy are about 35 ms.

From 46 to 35 milliseconds, or, 1.31 times faster, not bad.

Fully lazy #

But we no longer need the inline imports trick with PEP 810!

I modified the CLI so all imports are at the top, and also removed if TYPE_CHECKING: guards. Here’s a diff.

❯ hyperfine --warmup 10 --runs 20 --export-json out2.json \
 "./python.exe -m pypistats --help" \
 "PYTHON_LAZY_IMPORTS=on ./python.exe -m pypistats --help"
Benchmark 1: ./python.exe -m pypistats --help
 Time (mean ± σ): 104.1 ms ± 1.6 ms [User: 88.2 ms, System: 14.5 ms]
 Range (min … max): 101.9 ms … 109.5 ms 20 runs

Benchmark 2: PYTHON_LAZY_IMPORTS=on ./python.exe -m pypistats --help
 Time (mean ± σ): 35.7 ms ± 0.5 ms [User: 29.8 ms, System: 4.8 ms]
 Range (min … max): 34.7 ms … 36.5 ms 20 runs

Summary
 PYTHON_LAZY_IMPORTS=on ./python.exe -m pypistats --help ran
 2.92 ± 0.06 times faster than ./python.exe -m pypistats --help

A progression chart of 20 runs for each benchmark: non-lazy runs are about 104 ms, lazy are about 36 ms.

From 104 to 36 milliseconds, or 2.92 times faster, much better!


Header photo: “Lazy Man Fishing” at Cascade Locks on the Columbia River 05/1973 in the U.S. National Archives , with no known copyright restrictions.

Read the whole story
jepler
5 days ago
reply
Look, it's 30% faster (and possibly also subtly broken! There's a reason PEP 810 exposes a new syntax for explicit lazy imports!).. until I make the original code worse, in which case it's 3x faster.

but seriously, assuming this PEP is accepted for Python 3.15, then in 2030 (When Python 3.14 reaches EOL and the lazy import syntax can actually be WRITTEN into a package that supports any non-EOL python version [which is how I try to live my life*]) we'll be able to use explicit lazy imports and that'll be nice.

* Actually I try to support the Python version in Debian stable & oldstable + the one in Ubuntu LTS. But the cadence is such that this rule meant I supported 3.9 about as long as python.org did. If I had a motivation to dump 3.10 [ubuntu 22.04 oldstable] I might. In the first project I lookedd at that would mean I could drop a dependency on typing_extensions which I would not mind!

** double actually, you can also lazily import in a compatible way:
> Beyond the explicit keyword, a module can have a __lazy_modules__ variable containing a list of module names (as strings); those modules will be treated as if the lazy keyword was applied when they are encountered in an import statement. It is meant to be used for code that may run on versions of Python that lack support for lazy, since setting __lazy_modules__ will have no effect on those versions, while using lazy would be a syntax error.
so with luck we can see adoption of this feature earlier than 2030.
Earth, Sol system, Western spiral arm
Share this story
Delete

Help extract the 8087 Microcode ROM

1 Share
Comments
Read the whole story
jepler
5 days ago
reply
Earth, Sol system, Western spiral arm
Share this story
Delete

A New Way to Make (Almost) Holograms with Lasers

1 Comment
An array of tiny parallel green lines appears over a steel surface. The white dot a laser beam is visible in the lower center of the picture.

The spectrum of laser technologies available to hackers has gradually widened from basic gas lasers through CO2 tubes, diode lasers, and now fiber lasers. One of the newer entries is the MOPA laser, which combines a laser diode with a fiber-based light amplifier. The diode’s pulse length and repetition rate are easy to control, while the fiber amplifier gives it enough power to do interesting things – including, as [Ben Krasnow] found, etch hologram-like diffraction gratings onto stainless steel.

Stainless steel works because it forms a thin oxide layer when heated, with a thickness determined by the temperature it reaches. The oxide layer creates thin-film interference with incoming light, letting the laser mark parts of a steel sheet with different colors by varying the intensity of heating. [Ben] wrote a script to etch color images onto steel using this method, and noticed in one experiment that one area seemed to produce diffraction patterns. More experimentation revealed that the laser could consistently make diffraction gratings out of parallel patterns of oxide lines. Surprisingly, the oxide layer seemed to grow mostly down into the metal, instead of up from the surface.

The pitch of the grating is perpendicular to the direction of the etched lines, and varying the line spacing changes the angle of diffraction, which should in theory be enough control to print a hologram with the laser. [Ben]’s first experiment in this general direction was to create a script that turned black-and-white photographs into shimmering matrices of diffraction-grating pixels, in which each pixel’s grating orientation was determined by its brightness. To add a parallax depth effect, [Ben] spread out images into a gradient in a diffraction grating, so that it produced different images at different angles. The images were somewhat limited by the minimum size required for the grating pixels, but the effect was quite noticeable.

Unfortunately, since the oxide layers grow down into the metal, [Ben] doubts whether the laser can etch molds for diffraction-grating chocolate. If you’re interested in more diffraction optics, check out these custom diffraction lenses or the workings of normal holograms.

Read the whole story
jepler
6 days ago
reply
now I want to go buy a laser. except no way do I have a $10k budget.
Earth, Sol system, Western spiral arm
Share this story
Delete
Next Page of Stories