Skip to content

Instantly share code, notes, and snippets.

View jsquire's full-sized avatar

Jesse Squire jsquire

View GitHub Profile
@jsquire
jsquire / issue-rules.md
Last active July 21, 2023 16:24
# Azure SDK for .NET repository issue rules and process

Azure SDK for .NET repository issue rules and process

Goal

This document attempts to define the set of rules used for triaging and managing issues in the Azure SDK for .NET repository. These rules were once part of a standardized process owned by Alex Ghiondea and were at least loosely followed in the other language repositories. It is unknown whether there has been drift in the processes between languages since.

History

At one point, these were documented in OneNote and then moved to a DevOps wiki, and then moved again. I do not know where the documentation exists today - if it still does. All that I'm aware of is a high-level view of the process.

@jsquire
jsquire / problem-statement.md
Last active August 11, 2023 19:56
AppConfig: Data loss with strongly typed settings

AppConfiguration: Data loss with strongly typed settings

Overview

The general form of settings stored in AppConfiguration are simple key/value string pairs, where both have no formal structure. AppConfiguration also has the notion of "feature flag" and "secret reference" configuration settings, which are loosely structured data, conforming to a minimal and extensible JSON schema. These settings are expected to include all elements from the JSON schema but are also permitted to include additional data in the form of simple or complex elements.

Primary champion scenario

  • A developer creates settings in the portal, using a combination of the schema entry form and advanced JSON-centric view for custom attributes.
  • The settings are read by a client application using a platform integration package owned by the service team owns (e.g. ASP.NET, Spring).
@jsquire
jsquire / AppConfig-Policy.cs
Last active June 16, 2023 20:47
AppConfig: Access the raw value of a feature flag setting
// Package Reference: Azure.Data.AppConfiguration
// Package Reference: System.Text.Json
using Azure;
using Azure.Core;
using Azure.Core.Pipeline;
using Azure.Data.AppConfiguration;
using System.Threading.Tasks;
using System.Text.Json;
using System.Text.Json.Serialization;
@jsquire
jsquire / thoughts.md
Last active June 22, 2023 17:51
Schema Registry: JSON Serializer Thoughts

Schema Registry: JSON Serializer

Azure Schema Registry currently supports the Avro schema type and is adding support for JSON Schema. The Azure SDK library for Schema Registry offers an Avro serializer that is integrated with the Schema Registry client. In order to provide parity between the schema formats, serializer support for JSON Schema with a developer experience consistent with Avro is needed.

Business impact

  • Contributes to the Kafka/Confluent compete story for Event Hubs. (marketing "checkbox" feature)

  • Contributes to the Kafka interoperability story for Event Hubs, focusing on cross-product producing and consuming scenarios. (marketing "checkbox" feature)

  • Enables a consistent developer experience with Schema Registry across different schema formats, reducing support costs and special-case documentation needs.

@jsquire
jsquire / 0-overview.md
Last active March 28, 2023 19:52
Azure SDK Repository Automation Rules

Azure SDK Repository Automation Rules

Goal

This document attempts to define a set of logical rules based on the existing Fabric Bot implementation. Rules are described based on their logical association; in some cases, these may need to be expanded into multiple physical rules due to how GitHub events and/or Actions work. Likewise, concepts and flow are intentionally kept abstract and do not intend to describe a specific implementation. An example of this is the different data integrations. Multiple data items may drive from a single source, but they constitute different logical concepts.

Nomenclature

  • Trigger: An event that occurs in GitHub to which automation should respond to.
  • Target: An item in GitHub that can trigger an event. Generally, this will be an issue or pull request.
@jsquire
jsquire / amqp-serialization-spike.cs
Created October 27, 2022 14:01
For Josh: AMQP Serialization Testing
private static BufferListStream Serialize(AmqpMessage message, int bufferSizeBytes = 4096)
{
var buffers = new List<ArraySegment<byte>>();
var more = true;
while (more)
{
var messageBuffers = message.GetPayload(bufferSizeBytes, out more);
if (messageBuffers != null)
@jsquire
jsquire / layers.cs
Created March 15, 2022 21:27
Text Analytics Transparent Proxy Thoughts
// This is the convenience layer that customers interact with.
// This should look almost exactly like the current API:
// https://apiview.dev/Assemblies/Review/2d2a87eaa70a43b8860f1c4e7135494b
//
// Because it isn't interacting with the swagger types, we probably need to clone the
// current implementation and use it as template.
//
public class TextAnalyticsClient
{
TransportClient _transport = this.serviceVersion switch
@jsquire
jsquire / text-analytics-client-api-ideation.md
Last active March 14, 2022 21:43
Text Analytics: Client API Evolution Thoughts

Text Analytics: Client API Evolution Thoughts

Currently the TextAnalytics client offers a set of bespoke methods for each operation that developers may wish to perform. These methods are associated with the operation by name, intending to allow operations to be discoverable when browsing code completion lists and organizing related methods into groups.

This pattern has worked well with the Text Analytics REST API, which offered roughly seven core analysis skills. As Text Analytics moves to the Unified Language API, it is expected that the number of skills offered will grow steadily. This growth may cause the number of bespoke methods to become burdensome for developers, necessitating an evolution of the client API.

Things to know before reading

  • The names used in this document are intended for illustration only. The names for Text Analytics skills are placeholders to simulate volume and do not reflect the actual service API.
@jsquire
jsquire / text-analytics-unified-language-support-proposal.md
Last active March 14, 2022 19:26
Text Analytics: Unified Language REST API Support

Text Analytics: Unified Language REST API Support

Historically, Text Analytics has existed as a dedicated REST service in Azure, managed and evolved independently from other Cognitive Services offerings. This has led to developers working directly with the REST APIs having to learn unique locations, structure, and usage patterns for the different services, despite them having a similar goal of analyzing language-related aspects of documents.

Going forward, the Cognitive Services teams are consolidating REST APIs with related functionality into a single REST service. In the case of Text Analytics, service functionality is moving to a new unified language service. The API of the new unified language service introduces changes both structurally and behaviorally, making it incompatible with the API offered by the stand-alone Text Analytics REST service.

In order to support the unified language service, the client libraries will need to determine an approach able to accommodate the new REST API without in

@jsquire
jsquire / event-hubs-checkpoint-store.md
Created February 11, 2022 20:21
Event Hubs: Checkpoint Store Proposal

Event Hubs: Checkpoint Store Proposal

Despite being a key requirement for extending EventProcessor<T>, no abstraction exists for processor storage operations. Developers wishing to extend the processor must implement the storage operations required by its abstract members, holding responsibility for ensuring a production-ready implementation. They must also infer what storage operations may be needed by the application which the processor does not use - such as writing checkpoints that the processor consumes - and provide an implementation for them. This places a burden on developers and introduces a barrier of entry for extending EventProcessor<T>.

Things to know before reading

  • The names used in this document are intended for illustration only. Some names are not ideal and will need to be refined during discussions.

  • Some details not related to the high-level concept are not illustrated; the scope of this is limited to the high level shape and paradigms for the feature area.