Sr. Content Developer at Microsoft, working remotely in PA, TechBash conference organizer, former Microsoft MVP, Husband, Dad and Geek.
161041 stories
·
33 followers

The Book of Redgate: Hours

I have said and written this many times: Redgate Software is the type of company I’d want to build if I founded another company. It’s a great place, and one of the things I appreciate is that we value outcomes.

One of our values is:

2026-06_0204.

The text on the next page continues the sentence:

What you achieve is more important than how long it takes.

Building software is challenging, and building software that can be sold is difficult. We’ve had lots of successes and some not-successes. However, we work towards building the software and celebrate the achievements.

However.

If you’ve built software, you know it usually takes longer than expected and people want it sooner. Many teams know me as the “do it faster” guy. I know software takes time, but I also know that in the business of selling software, we need focus on things that are useful and valued by customers.

I don’t complain that it takes too long to build everything, but I do press on the focus to get the important things done first, which aren’t always the fun or easy things.

Ultimately we as a company appreciate when we have something done and working for customers. We don’t go back and lessen the importance of the effort because of the time it took. We do look to see if we can do better in the future, which is something I’d hope most software engineers would do.

I have a copy of the Book of Redgate from 2010. This was a book we produced internally about the company after 10 years in existence. At that time, I’d been there for about 3 years, and it was interesting to learn a some things about the company. This series of posts looks back at the Book of Redgate 15 years later.

The post The Book of Redgate: Hours appeared first on SQLServerCentral.

Read the whole story
Share this story
Delete

How to Check TDE Progress and Elapsed Time in SQL Server

1 Share

How to Check TDE Progress and Elapsed Time in SQL Server

Transparent Data Encryption (TDE) protects SQL Server data and log files while they are stored on disk. SQL Server handles encryption and decryption automatically, allowing applications and users to continue working normally. Database backups are also encrypted and cannot be restored without the correct certificate or key.
In practical terms, TDE prevents someone who steals or copies your database files, backups, disks, or storage snapshots from simply restoring the database and reading your data. However, TDE is not a complete security solution. It does not protect against SQL injection, compromised administrator accounts, misuse by authorized users, unencrypted exports, network attacks, or data already loaded into memory.
If your database contains sensitive or personal information, TDE is worth considering. It is especially useful when encryption at rest is required by standards such as HIPAA or PCI DSS, or by your organization’s security policies.
However, don’t enable TDE everywhere without a plan. It introduces some performance overhead and requires careful management of encryption keys and certificates. Use it where the security and data-protection requirements justify the extra work.
But that is not the main focus of this post. Instead, it looks at a practical challenge: TDE encryption and decryption scans can take hours, even on a moderately sized SQL Server database.
The scan runs in the background and must read and rewrite every database page. Its speed depends heavily on storage performance, and SQL Server provides no supported MAXDOP, priority, or speed setting to make it finish faster. TDE may be an online operation, but it is not always a “start it and forget it” job. On a large database, the scan can keep storage busy for hours. 
TDE works the same way in SQL Server Standard and Enterprise editions. Enterprise can use greater CPU, memory, and high-availability capabilities, but it does not provide a different form of TDE or a special setting that makes the scan faster.
This can be frustrating, the waiting can feel endless, especially during your first TDE implementation. You watch the percentage creep forward and wonder whether something is wrong. Even a modest 300–400 GB database can take hours when server activity is high or storage is struggling to keep up.
While you wait, you naturally want answers: How much is complete? How long has the scan been running? Is it running normally, suspended, or aborted? 
The following practical query helps answer those questions. By viewing the percentage complete alongside the elapsed time, you can get a useful sense of its average pace and whether it is moving normally. It is not a precise finish-time prediction because workloads and storage activity can change, but it helps you see whether the scan is making steady progress or may need attention.

/*
    PURPOSE
    -------
    Shows the progress, status, and duration of current TDE encryption,
    decryption, key-change, and protection-change operations.

Why this query is different
    ---------------------------

Most TDE monitoring queries show only the current status and
percentage complete from sys.dm_database_encryption_keys. This
query also matches the DMV results with the most recent
scan-start entry in the SQL Server error log, allowing it to show
the start time and elapsed duration without requiring a monitoring
table, SQL Agent job, or external tool.

HOW IT WORKS

------------

1. Reads TDE scan-start messages from the current SQL Server
error log
and stores them in a temporary table.

2. Queries sys.dm_database_encryption_keys for databases with an
active,
suspended, or aborted TDE operation.

3. Matches each database to its most recent "Beginning database

encryption scan" error-log entry.

4. Calculates the duration between that entry and the current
server
time. Duration is displayed in seconds, minutes, and
HH:MM:SS format.

IMPORTANT LIMITATIONS

---------------------

- Only the current SQL Server error log is searched.

- If the error log rolled over after the scan started, the start
time
and duration will be NULL.

- If a scan was suspended and resumed, duration begins with the
most
recent scan-start entry. It does not include time from
earlier runs.

- encryption_scan_modify_date is reported in UTC, while the
error-log
and collection times normally use the SQL Server
host's local time.

REQUIREMENTS

------------

SQL Server 2019 or later because the encryption scan state
columns were
introduced with SQL Server 2019.

*/

USE master;

GO

SET NOCOUNT ON;

DROP TABLE IF EXISTS #TdeErrorLog;

CREATE TABLE #TdeErrorLog

(

LogDate datetime,

ProcessInfo nvarchar(50),

[Text] nvarchar(max)

);

INSERT INTO #TdeErrorLog

EXEC sys.xp_readerrorlog

0, -- Current error log

1, -- SQL Server error log

N'Beginning database encryption scan',

NULL,

NULL,

NULL,

N'desc';

SELECT

d.name AS database_name,

dek.encryption_state,

dek.encryption_state_desc,

dek.percent_complete,

dek.encryption_scan_state,

dek.encryption_scan_state_desc,

scan_start.operation_start_time,

GETDATE() AS collection_time,

duration.duration_seconds,

CAST(duration.duration_seconds / 60.0

AS decimal(18,2)) AS duration_minutes,

CASE

WHEN duration.duration_seconds IS NULL THEN NULL

ELSE CONCAT

(

duration.duration_seconds / 86400, N'd ',

RIGHT(N'00' + CONVERT(nvarchar(2),

(duration.duration_seconds % 86400) / 3600), 2), N':',

RIGHT(N'00' + CONVERT(nvarchar(2),

(duration.duration_seconds % 3600) / 60), 2), N':',

RIGHT(N'00' + CONVERT(nvarchar(2),

duration.duration_seconds % 60), 2)

)

END AS formatted_duration,

-- This DMV value is documented as UTC

dek.encryption_scan_modify_date

AS scan_state_modified_utc,

dek.key_algorithm,

dek.key_length,

dek.encryptor_type

FROM sys.dm_database_encryption_keys AS dek

INNER JOIN sys.databases AS d

ON d.database_id = dek.database_id

OUTER APPLY

(

SELECT TOP (1)

el.LogDate AS operation_start_time

FROM #TdeErrorLog AS el

WHERE CHARINDEX

(

N'''' + d.name + N'''',

el.[Text]

) > 0

ORDER BY el.LogDate DESC

) AS scan_start

OUTER APPLY

(

SELECT

CASE

WHEN scan_start.operation_start_time IS NOT NULL

THEN DATEDIFF_BIG

(

SECOND,

scan_start.operation_start_time,

GETDATE()

)

END AS duration_seconds

) AS duration

-- Only active, suspended, or aborted TDE operations

WHERE dek.encryption_state IN

(

2, -- Encryption in progress

4, -- Key change in progress

5, -- Decryption in progress

6 -- Protection change in progress

)

ORDER BY d.name;

DROP TABLE IF EXISTS #TdeErrorLog;

GO

What happens during a TDE scan?

Now that we can monitor the scan, it helps to understand what SQL Server is doing behind the scenes.
TDE encryption and decryption scans are not necessarily single-threaded. When you enable TDE, SQL Server performs a few checks and starts a background encryption worker. This allows the original command to finish while the real work continues in the background.
The encryption worker creates disk workers to scan the database files. Each worker processes 8 KB database pages in batches of 32. The pages are loaded into memory, marked as changed, and logged so the operation can also be replayed on an Availability Group secondary.
After the scan finishes, SQL Server performs a checkpoint. During encryption, the changed pages are encrypted and written back to disk. Decryption and encryption-key rotation use the same basic scanning process, although the pages are handled according to the requested operation.
SQL Server generally creates one disk worker per storage volume, not one worker per processor. Ten data files on one volume may still use only one worker, while files spread across ten volumes could use ten workers. This helps control the impact on storage, but it also explains why some TDE scans appear almost single-threaded.
TDE scan parallelism is managed internally by SQL Server and is not controlled by MAXDOP. Even when multiple workers are active, the scan can still be limited by storage performance.
Because every page must be read, processed, and written back, a TDE scan consumes storage, memory, and CPU resources. It may therefore compete with the database’s normal workload.
A 2019 Microsoft’s TDE scan internals article describes SQL Server creating approximately one disk worker per storage volume. The core scan process remains relevant to SQL Server 2025, but worker allocation and batching are internal implementation details that could change in future versions or cumulative updates. 

What does this mean in practice?

TDE scans depend heavily on storage speed. If several databases on the same storage volume are being processed at once, their scans will compete for I/O and may all take longer.
Adding more CPU or changing MAXDOP is unlikely to help. Adding extra data files on the same storage volume will not necessarily make the scan more parallel either.
While a scan is running, try to reduce other storage-heavy work such as backups, CHECKDB, index maintenance, and ETL processes. Avoid moving database files or changing the storage layout because some file operations are restricted during a TDE scan.
For future large databases, placing files on separate physical storage volumes may allow SQL Server to use additional workers. However, this will only help when those volumes provide genuinely independent storage throughput.
That said, there is no need to redesign every database just for an occasional TDE scan. A more practical approach is to provide sufficient storage performance and run only one major TDE scan per shared volume at a time.

What Triggers a Full TDE Scan?

A full TDE scan occurs when SQL Server must change the encryption of every page in the database. Three main operations cause this:
  • Enabling TDE: SQL Server reads every database page, encrypts it, and writes it back to storage.
  • Disabling TDE: SQL Server performs the journey in reverse, reading and rewriting every page without TDE encryption.
  • Regenerating the database encryption key (DEK): SQL Server creates a new DEK and re-encrypts every page with it. This includes changing the DEK’s encryption algorithm 
There is an important difference between regenerating the DEK and changing the certificate that protects it. During the initial TDE setup, the certificate is created and stored in the instance’s master database before the DEK is created in the user database. Changing this certificate or asymmetric key normally re-encrypts only the DEK, not every database page. This is much less work and does not require a full database scan.
Pausing, resuming, or restarting SQL Server during a scan does not start a brand-new scan. SQL Server saves the progress and continues the existing operation when it resumes 

See also

The post How to Check TDE Progress and Elapsed Time in SQL Server appeared first on SQLServerCentral.

Read the whole story
alvinashcraft
just a second ago
reply
Pennsylvania, USA
Share this story
Delete

Every Database Has These Seven Tables

1 Share

You can walk into any company on earth, open the production database, and find the same seven tables. Different industry, different continent, different decade. The same seven tables.

Nobody planned this. There is no standard, no committee, no ISO number, no working group that ever met. And yet the convergence is total. Blindfold me, drop me into any company in any industry, and I will find at least five of these before the coffee arrives.

I have personally created four of these. I named one of them after myself, which at the time felt efficient. It is, as far as I know, still there.

1. Customers_new

Created in 2019 to replace Customers.

Both are still here. Both had rows added yesterday.

Nobody can tell you which one the application actually reads. Finding out would mean opening something, and the person who last opened something is the reason we have Customers_new.

In the tidier organisations there is also Customers_new_final. In the honest ones there is Customers_new_final_v2. I have seen Customers_new_final_USE_THIS_ONE, and I want to be clear that the shouting did not work.

In about a third of the databases I have opened there is also a view called vw_Customers that quietly unions both tables together. Somebody built that view to solve the problem.

The view is now the problem.

Every Database Has These Seven Tables customers-new

2. Sheet1

Somebody imported a spreadsheet. The wizard suggested a name and they accepted it, because it was four in the afternoon and the meeting was at half past.

It has a column called Column3. Column3 holds the regional discount percentages. There is no other copy of the regional discount percentages anywhere in the company.

No primary key. No constraints. No NOT NULL on anything at all, including the column that decides what your customers pay. It is one of the most load bearing objects in the finance system and it is named after a tab.

Somewhere nearby there is also a table called Sheet1$. The dollar sign is not a typo. It is a fossil left by the import wizard, and it means this happened twice.

The contractor who imported it was here for six weeks. Nobody wrote down the surname.

It has never failed an audit. Nobody has ever found it.

Every Database Has These Seven Tables sheet1

3. tmp_fix_20180312

Temporary.

The date in the name is the night of the outage. The fix went in at two in the morning, the incident was closed at four, and the table was going to be dropped first thing.

That was seven years ago. It has been backed up about two and a half thousand times. It has been carried through three server migrations, each time by somebody who assumed the person before them had checked.

It appears on a cleanup ticket roughly once a year. The ticket is always closed by somebody who has correctly worked out that nobody alive knows what it is.

Nobody has ever queried it. Everybody has moved it.

Every Database Has These Seven Tables tmp-fix

4. Settings

One row. Forty one columns.

Twelve of them are called Flag1 through Flag12. Four more are called Flag1_New through Flag4_New, which tells you roughly when the second developer arrived.

Nobody knows what Flag7 does. On the single occasion somebody set it to 0, the warehouse stopped printing labels within eleven minutes.

Flag7 has been 1 ever since. It is 1 in production, in staging, in the two environments nobody uses, and in the disaster recovery site that has never been failed over to.

There is also a column called Temp. It is a bit. It is 1. It has been 1 since the table was created in 2014, and the word Temp has never in the history of computing done more work.

The table has no primary key, because there is one row and there will only ever be one row. In 2021 somebody inserted a second row. The company could not take orders for forty minutes.

There is still no primary key.

Every Database Has These Seven Tables settings-flag7

5. AuditLog

Nine hundred million rows.

It has never been read. Not rarely. Never.

I have checked this more than once, because I did not believe it either. The usage statistics show writes and nothing else, year after year, in a straight line. The compliance team who asked for it moved on. The person who replaced them assumed somebody else was already reviewing it. Nobody was.

It is backed up nightly. It is replicated to two secondaries. It is the most faithfully maintained object in the entire organisation, and it exists to be examined on a day that has not yet arrived.

Roughly once a year somebody proposes archiving it. The meeting reaches the question of what the retention policy actually is. Nobody in the room knows. The meeting ends. The table adds another hundred and forty million rows.

It also has no index on the date column. So on the day it finally matters, when somebody official is standing behind you asking what happened on the fourteenth, it will not work.

Every Database Has These Seven Tables auditlog

6. Backup_DoNotDelete

Forty gigabytes.

Nobody knows what it is a backup of. The columns do not match anything currently in the database. The newest row in it is from a Tuesday in 2019.

There is no permission stopping you from dropping it. No extended property, no documentation, no ticket, no owner in any system. The protection is entirely the name, typed in capitals by somebody who had just been badly frightened.

A stranger left a note, and for six years every one of us has obeyed it.

I once sat in a migration planning meeting where a team spent two hours on whether to bring it across.

They brought it across.

Every Database Has These Seven Tables backup-do-not-delete

7. AKTest

Or jm_temp, or priya_wrk, or three initials nobody can expand any more.

Four rows. Two of them contain the word test. One is empty. One says asdf.

That person left in 2017. The account was disabled, the laptop was wiped, the desk has been reassigned twice, and the table is still here, backed up every night, consuming eight kilobytes and a surprising amount of everybody’s courage.

Nobody will drop it. Dropping it feels like something.

It is eight kilobytes and it is somebody’s name, and it turns out that is enough.

Every Database Has These Seven Tables the-empty-desk

Honourable Mentions

Not universal enough for the main seven, but present in far more places than anybody would like.

Users and tblUsers. Both populated. Different row counts. Nobody is investigating.

Orders_20190417_BEFORE_MIGRATION. The migration was a success and we have never once deleted the parachute.

ZZ_Old_Orders. Prefixed with ZZ so it sorts to the bottom of the object list, which is our version of sweeping it under a rug.

Copy of Sheet1. Yes, with the spaces. Yes, it needs square brackets. Yes, somebody has written production code containing square brackets around the words Copy of Sheet1.

Archive. Contains nothing. Has contained nothing since 2018. The nightly archiving job still runs, and still reports success.

Test. Created by somebody who is now a director.

Table1. No further information is available and none is coming.

DELETE_ME. Created in 2016.

What You Are Actually Looking At

Nobody designed your database. It accumulated.

Every one of these tables was a person solving a Tuesday. The naming was not carelessness, it was speed, and speed was the right call at the time. Customers_new was made by somebody who fully intended to come back and finish. AuditLog was made by somebody who was told to. Backup_DoNotDelete was made by somebody who had just watched a bad thing happen and typed in capitals so it would not happen again.

None of them were being sloppy. They were being fast, on purpose, on a day when fast was worth more than tidy.

Which is why I would gently suggest doing something about it, and why I know you will not. I have four of my own out there. One has my name on it. Some intern in a city I have never visited is going to find it in 2031, decide it is probably important, and back it up for another decade.

One more thing and then I will let you get back to it. There is nobody inside the machine, which is the whole argument of my book AI: Nobody’s in There. But we’re still in here. There are, on the other hand, an enormous number of people inside your database, and you have just met seven of them. All thirty essays are free to read at pinaldave.com, and there is a paperback on Amazon if you would rather hold something real.

Nobody designed your database. It accumulated, one Tuesday at a time, and every name in it is a message somebody did not know they were leaving.

Reference: Pinal Dave (https://blog.sqlauthority.com/), SQL Server Humor, X

First appeared on Every Database Has These Seven Tables

Read the whole story
alvinashcraft
11 seconds ago
reply
Pennsylvania, USA
Share this story
Delete

What Is A Pastiche & Why Should You Write One?

1 Share

Learn what a pastiche is, how to write one, and why this form of fiction can help you master style, character, setting, and craft.

Binge-reading your favourite author is great, until the author stops writing. Lucky for you, there is a remedy: read a pastiche! If you’re wondering what a pastiche is, and why every author should write one, this article will help you.

What Is A Pastiche & Why Should You Write One?

What Is A Pastiche?

The word ‘pastiche’ sounds French but it’s actually from the Italian ‘pasticcio’, meaning pie or pasty. It usually consists of many things mixed together, like a potpourri. A literary pastiche is a potpourri of an existing work of art with the narrative talent of a modern author.

This technique is used whenever authors write. They all draw on their ancestors to create a text in their unique trademark style. Readers can sometimes find literary allusions but no more than that.

In a pastiche, however, authors aim to adapt the style of the original to such an extent that they negate their own style. A reader will find it hard to distinguish between the pastiche and the original. A pastiche is:

  1. Written by a fan of the original but it is not fan fiction.
  2. Admiring the original story (in contrast to a parody, see below).
  3. Imitating a pre-existing literary text in style and subject-matter.
  4. Continuing or expanding an existing storyline, sometimes adding new characters.
  5. Hiding the personal style of its writer.
  6. A work of fiction in its own right (unlike fan fiction, and unlike a parody).

Theoretically, pastiches can be written of any story. Here are three famous examples:

  1. Tom Stoppard’s Rosencrantz and Guildenstern Are Dead (a pastiche of William Shakespeare’s Hamlet)
  2. Alexandra Ripley’s novel Scarlett (a pastiche of Gone With The Wind by Margaret Mitchell)
  3. John Banville’s Mrs Osmond (a pastiche of Henry James’s Portrait Of A Lady)

There’s no official statistic on which text sparked off most pastiches, but Conan Doyle’s Sherlock Holmes would definitely be among the top of the list. Wikipedia has even devoted a whole article to its pastiches! We’ll look at some examples later. 

How Do I Write A Pastiche?

Writing a pastiche, let alone a successful one, is very hard. Why? Because its author needs great skill as a reader and as a writer. Here are four tips on how to do it.

1. Lay the groundwork for your own story. What will be the basic storyline of your pastiche? Here are three basic ideas (with examples from Sherlock Holmes pastiches):

    • A continuation of the original story: Laurie King’s Mary Russell-series takes place after Sherlock Holmes has retired to Sussex. The famous sleuth even gets married!
    • A part of the original story: Nicholas Meyer’s Seven-Percent Solution uses the original cast of characters, the setting, even certain elements of the storyline. It comes across as a story that Conan Doyle simply forgot to write.
    • A minor character from the original plays a major role in the pastiche: Carole Nelson Douglas did that in her series on Irene Adler. A variant on that is to invent a character that simply fits well into the original universe (Nancy Springer’s Enola Holmes-series does that where Sherlock Holmes suddenly has a sister). 

2. Start reading and analysing the original. Act like a literary scholar. Know the story inside out. Analyse the style: What made the original such a compelling story? That’s what fans will look for in your pastiche. If you, as a modern author, are unable to satisfy these expectations, your readers will probably be disappointed. For example: if Sherlock Holmes is a completely logical and unemotional man in the original Conan Doyle stories, then he can’t be wallowing in his emotions in a pastiche. When Laurie King started to write her Mary Russell-series, she had to come up with a heroine who was able to spark a credible romantic emotion in Holmes. She was successful, just look at the sales figures for this series!

3. Analyse the setting. Where does the original take place? Where will your pastiche be set? What are the characteristic words and phrases of the period? What about props, like clothes, machines, forms of transportation? If you get the setting right down to the smallest detail, this will help to give your pastiche the feel of the original.

4. Don’t disappoint your readers. Pastiches are not ‘fan fiction’ (see this article for the difference), but their readers are likely to be hardcore fans of the original. They will compare your pastiche to its source. If you haven’t done your homework (see points 1-4), they will know and turn into your harshest critics.

What’s The Difference Between Pastiche And Parody?

Some say a pastiche is like a parody without the tongue-in-cheek attitude. The modern author’s attitude towards the original, either reverence or irreverence, decides largely whether the new text will be a pastiche or parody.

Both genres are closely related, both are imitations of the original text. But they’re not copies! They are too elaborate to be called plagiarism, they both recognise their original template. Both use allusions as stylistic devices.

  1. Pastiches are written because the demand for the original can no longer be met by its author. It’s this historical template that the modern author uses to continue the story in the original vein. A well-written pastiche is a work of fiction in its own right.
  2. Parodies are also imitations, but they use techniques of satire, like exaggeration, caricature, and ridicule to make fun of the original. To understand a parody, you need to know the original.

The mindset of the author of a parody is therefore completely opposed to the author of a pastiche.

What’s The Difference Between Fan Fiction And A Pastiche?

Fan Fiction is written for fans by fans. That makes it sound like a pastiche, doesn’t it? But they’re still very different.

  1. Fan Fiction is usually non-commercial. These stories reach their readers through non-traditional platforms such as Wattpad or Commaful. They are usually of lesser literary quality (with an enormous readership; check the numbers of Harry Potter-fan fiction!). Fan fiction authors often write for their own fun and even include idealised versions of themselves into the cast of characters.
  2. Pastiches try to get published traditionally. Imitating the style of the original author, they tend to be of a higher literary quality. The pastiche has an author invisible to the reader.

Fan fiction, parodies, and pastiches bring up questions of copyright. If you intend to publish one of them, check with the original author! They can react very differently. Anne Rice, for example, absolutely forbids using her characters, whereas J.K. Rowling does not object to non-commercial fan fiction, as long as its authors bear in mind that her Harry Potter-universe caters to underage children.

Why Should Every Writer Write A Pastiche?

It’s so much fun to make your all-time favourite story go on and on and on. Writing a pastiche also hones your craft as a writer. After all, you learn from a master! You slip into another writer’s fictional universe and navigate inside it, you learn to adopt different literary styles, and you are trying to convince the most critical readers: the ones dedicated to another author. If you can write a successful pastiche, you can probably write anything!

Here’s An Exercise For You:

The French writer Raymond Queneau once wrote a small story and then rewrote it 99 times in different styles. He called his pastiches Exercices de Style! Why don’t you follow his example? Write a short piece of flash fiction, no more than 100 words. Then rewrite it in different styles (here’s a list of Queneau’s styles). It’ll definitely get your creative juices flowing!

The Last Word

Writing a pastiche is a fun way to step into another writer’s world, experiment with style, and sharpen your own skills. Find a story you love, study how it works, and then make it your own. You can also find a list of pastiches on Goodreads.

Image by Brigitte Werner from Pixabay

Susanne Bennett
By Susanne Bennett. Susanne is a German-American writer who is a journalist by trade and a writer by heart. After years of working at German public radio and an online news portal, she has decided to accept challenges by Deadlines for Writers. Currently she is writing her first novel with them. She is known for overweight purses and carrying a novel everywhere. Follow her on Facebook.

More Posts From Susanne

  1. What Is Steampunk? How To Write Steampunk Fiction
  2. How To Write A Space Opera
  3. What Is Dystopian Fiction & How Do I Write It?
  4. What Is Utopian Fiction & How Do I Write It?
  5. How To Write Alternate History: A Complete Guide For Writers
  6. How To Create Tension In Storytelling
  7. 7 Benefits Of Keeping A Diary – For Writers
  8. 7 Gripping Dystopian Plot Ideas For Writers
  9. Poets On Writing Poetry: Insights & Inspiration
  10. Poetry Made Easy: How To Read & Interpret Poems

Top Tip: Sign up for our free daily writing links.

The post What Is A Pastiche & Why Should You Write One? appeared first on Writers Write.

Read the whole story
alvinashcraft
20 seconds ago
reply
Pennsylvania, USA
Share this story
Delete

Daily Reading List – September 10, 2026 (#864)

1 Share

You might find that a couple of items below change how you’ve been thinking about something. That happened to me.

[blog] The Anatomy of Harness Engineering: How to Evaluate, Iterate, and Guard AI Coding Agents. Very cool. If you’re just looking at end to end benchmarks to evaluate a harness (or agent) you might be missing something. Read this to learn about behavioral evaluations.

[article] The five important tools for controlling AI costs. Seems fair to me. I wonder if models are now training on data like this, and if the recommendations will be different by the time a model actually reaches the market.

[blog] Introducing the Google Cloud Developer Plugin for AI Coding Agents. This is a smart way to build a gateway/starter experience that dynamically inflates as you need more from the target platform.

[article] AI accelerates output, not innovation. Makes sense. I can do more, which may (MAY) translate into faster learning. But AI also doesn’t replace the human brain’s ability to do recombination and identify real innovation.

[blog] Skills CLI 1.0: Bundle and distribute AI agent skills for your packages. Great idea! Ship skills with your package. And devs aren’t stuck trying to independently load the right skill for your latest version.

[blog] Migrating Shop app from React Native to native. Super interesting. Is “native” the future of mobile instead of multi-platform frameworks? Yes and no, probably. Depends on your use case, engineering prowess, and business need.

[article] Suddenly I’m a Go developer. It’s weird that any of us can be any type of developer. Even if temporarily, and with virtually no depth. I think it’s a good thing overall, and maybe encourages professional developers to expand their horizons.

[blog] Debugging Serverless Apache Spark using Gemini with MCP. Yes, you can just paste errors into an AI chat tool and hope for the best. But context matters, and we should give your tools access to the information that encourages more than guessing.

[article] Anthropic promised 20x more usage. Then developers hit a weekly ceiling. Not necessarily unique to Anthropic. It’s hard to offer fixed subscriptions for such fluid consumption.

[article] OpenClaw Power, MacBook Simplicity: Five Days With Grok Bot. Terrific look at Grok Bot, which has many fans. I’m going to use it more myself (on my non-work machine).

[blog] Taking Advantage of Cloud Run Sandboxes with Google Apps Script for Google Workspace. Get ready to see “sandbox” everywhere. Whether you’re running Codex, executing some custom code, or serving an agent, secure isolation matters.

Want to get this update sent to you every day? Subscribe to my RSS feed or subscribe via email below:



Read the whole story
alvinashcraft
49 seconds ago
reply
Pennsylvania, USA
Share this story
Delete

September Patches for Azure DevOps Server

1 Share

We are releasing new patches for our self‑hosted product, Azure DevOps Server. We strongly recommend that all customers stay up to date with the latest, most secure version of Azure DevOps Server.

The most recent release, Azure DevOps Server, is available on the download page.

The following versions have been patched. For more details on these updates, see the release notes:

⬇Azure DevOps Server Patch Download

Version Patch Download Release Notes
Azure DevOps Server Download Patch 8 Release notes

✅Verifying Installation

To verify that the patch is installed, run the following command on the Azure DevOps Server machine using the patch installer you downloaded:

<patch-installer>.exe CheckInstall

Replace <patch-installer> with the name of the patch file you downloaded. The command output will indicate whether the patch is installed.

The post September Patches for Azure DevOps Server appeared first on Azure DevOps Blog.

Read the whole story
alvinashcraft
53 seconds ago
reply
Pennsylvania, USA
Share this story
Delete
Next Page of Stories