What's up with Markdown?

What's up with Markdown?

This article is contributed. See the original author and article here.

What’s Up with Markdown?


whats-up-with-markdown.png


Perhaps you’ve noticed a technology called Markdown that’s been showing up in a lot of web sites and apps lately. This article will explain Markdown and help you get started reading and writing it.


 


Markdown is a simple way to format text using ordinary punctuation marks, and it’s very useful in Microsoft 365. For example, Microsoft Teams supports markdown formatting in chat messages and SharePoint has a Markdown web part. Adaptive Cards support Markdown as well, as do Power Automate approvals. For the bot builders among us, Bot Composer language generation and QnA Maker both support markdown as well. And what’s at the top level of nearly every Github repo? You guessed it, a markdown file called README.md.


 


Designed to be intuitive


Imagine you’re texting someone and all you have to work with is letters, numbers, and a few punctuation marks. If you want to get their attention, you might use **asterisks**, right? If you’ve ever done that, then you were already using Markdown! Double asterisks make the text bold.


 


Now imagine you’re replying to an email and want to quote what someone said earlier in the thread. Many people use a little greater-than sign like this:


 



Parker said,
> Sharing is caring


Guess what, that’s Markdown too! When it’s displayed, it looks like this:


 


Parker said,



Sharing is caring



Did you ever make a little table with just text characters, like this?


 



Alpha | Beta | Gamma
——|——|——
1 | 2 | 3


If so, you already know how to make a table in Markdown!


 















Alpha Beta Gamma
1 2 3


Markdown was designed to be intuitive. Where possible, it uses the formatting clues people type naturally. So you can type something _in italics_ on the screen and it actually appears in italics.


In all cases you’re starting with plain text – the stuff that comes out of your keyboard and is edited with Notepad or Visual Studio Code – into something richer. (Spoiler alert: it’s HTML.)


 



What about emojis? :smile: Markdown neither helps nor blocks emojis, they’re just characters. If your application can handle emojis, you can certainly include them in your markdown.



Commonly used Markdown


Markdown isn’t a formal standard, and a lot of variations have emerged. It all started at Daring Fireball; most implementations are faithful to the original but many have added their own features. For example, the SharePoint Markdown Web Part uses the “Marked” syntax; if you’re creating a README.md file for use in Github, you’ll want to use Github Flavored Markdown (GFM).


 


This article will stick to the most commonly used features that are likely to be widely supported. Each section will show an example of some markdown and then the finished rendering (which, again, may vary depending on what application you’re using).


 


Each of the following sections shows an example of some simple Markdown, followed by the formatted result.


 


1. Emphasizing Text


 


Markdown:


You can surround text with *single asterisks* or _single underscores_ to emphasize it a little bit;
this usually formatted using italics.

You can surround text with **double asterisks** or __double underscores__ to emphasize it more strongly;
this is usually formatted using bold text.



 

Result:

You can surround text with single asterisks or single underscores to emphasize it a little bit; this usually formatted using italics.


You can surround text with double asterisks or double underscores to emphasize it more strongly; this is usually formatted using bold text.


 


2. Headings


You can make headings using by putting several = (for a level 1 heading) or – signs (for a level 2 heading) in the line below your heading text.


 


Markdown:


My Heading


 

Result:

My Heading


You can also make headings with one or more hash marks in column 1. The number of hash marks controls the level of the heading.


Markdown:


# First level heading
## Second level heading
### Third level heading
etc.


 

Result:

First level heading


Second level heading


Third level heading


etc.


 


3. Hyperlinks


 


Markdown:


To make a hyperlink, surround the text in square brackets
immediately followed by the URL in parenthesis (with no space in
between!) For example:
[Microsoft](https://www.microsoft.com).


 

Result:

To make a hyperlink, surround the text in square brackets immediately followed by the URL in parenthesis (with no space in between!) For example: Microsoft.


 


4. Images


Images use almost the same syntax as hyperlinks except they begin with an exclamation point. In this case the “alt” text is in square brackets and the image URL is in parenthesis, with no spaces in between.


 


Markdown:


![Parker the Porcupine](https://pnp.github.io/images/hero-parker-p-800.png)


Result:

 


In case you were wondering, you can combine this with the hyperlink like this:


 


Markdown:


[![Parker the Porcupine](https://pnp.github.io/images/hero-parker-p-800.png)](http://pnp.github.io)


 

Result:

hero-parker-p-800.png


 


5. Paragraphs and line breaks


 


Markdown:


Markdown will
automatically
remove
single line breaks.

Two line breaks start a new paragraph.



 

Result:

Markdown will automatically remove single line breaks.


Two line breaks start a new paragraph.


 


6. Block quotes


Markdown:


Use a greater than sign in column 1 to make block quotes like this:

> Line 1
> Line 2



 

Result:

Use a greater than sign in column 1 to make block quotes like this:



Line 1 Line 2



 


7. Bullet lists


Markdown:


Just put a asterisk or dash in front of a line that should be bulleted.

* Here is an item starting with an asterisk
* Here is another item starting with an asterisk
* Indent to make sub-bullets
* Like this
Here is an item with a dash
Changing characters makes a new list.



 

Result:

Just put a asterisk or dash in front of a line that should be bulleted.



  • Here is an item starting with an asterisk

  • Here is another item starting with an asterisk

    • Indent to make sub-bullets

      • Like this







  • Here is an item with a dash

    • Changing characters makes a new list.




 


8. Numbered lists


Markdown:


1. Beginning a line with a number makes it a list item.
1. You don’t need to put a specific number; Markdown will renumber for you
8. This is handy if you move items around
1. Don’t forget you can indent to get sub-items
1. Or sub-sub-items
1. Another item


 

Result:


  1. Beginning a line with a number makes it a list item.

  2. You don’t need to put a specific number; Markdown will renumber for you

  3. This is handy if you move items around

    1. Don’t forget you can indent to get sub-items

      1. Or sub-sub-items





  4. Another item


 


9. Code samples


Many markdown implementations know how to format code by language. (This article was written in Markdown and made extensive use of this feature using “markdown” as the language!) For example to show some HTML:


 


Markdown:


    ~~~html
<button type=button>Do not push this button</button>
~~~


 

Result:

<button type=button”>Do not push this button</button>


 


10. Tables


Tables are not universally supported but they’re so useful they had to be part of this article. Here is a simple table. Separate columns with pipe characters, and don’t worry about making things line up; Markdown will handle that part for you.


Markdown:


Column 1 | Column 2 | Column 3
—|—|—
Value 1a | Value 2a | Value 3a
Value 1b | Value 2b | Value 3b


 

Result:





















Column 1 Column 2 Column 3
Value 1a Value 2a Value 3a
Value 1b Value 2b Value 3b

HTML and Markdown


Markdown doesn’t create any old formatted text – it specifically creates HTML. In fact, it was designed as a shorthand for HTML that is easier for humans to read and write.


Many Markdown implementations allow you to insert HTML directly into the middle of your Markdown; this may be limited to certain HTML tags depending on the application. So if you know HTML and you’re not sure how to format something in Markdown, try including the HTML directly!


Editing Markdown


If you’d like to play with Markdown right now, you might like to try the Markdown Previewer where you can type and preview Markdown using any web browser.


For more serious editing, Visual Studio Code does a great job, and has a built-in preview facility. Check the VS Code Markdown documentation for details.


 


There’s a whole ecosystem of tools around Markdown including converters for Microsoft Word and stand-alone editing apps; these are really too numerous to list but are easy to find by searching the web.


Legacy


From vinyl records to 8-bit games and static web sites, there’s a trend these days to rediscover simpler technologies from the past. Markdown definitely falls into this category.


Back before “WYSIWYG” (What You See Is What You Get) word processors were cheap and pervasive, there were “runoff” utilities that were very much like Markdown. They turned text files into nicely formatted printed documents (usually Postscript). Markdown harkens back to these legacy tools, but adds HTML compatibility and an intuitive syntax.


Conclusion


While it may seem unfamiliar at first, Markdown is intended to make it easy for people to read and write HTML. Whether you’re a power user, IT admin, or developer, you’re bound to run into Markdown sooner or later. Here’s hoping this article makes it a little easier to get started!

Azure Cognitive Search performance: Setting yourself up for success

Azure Cognitive Search performance: Setting yourself up for success

This article is contributed. See the original author and article here.

Performance tuning is often harder than it should be. To help make this task a little easier, the Azure Cognitive Search team recently released new benchmarks, documentation, and a solution that you can use to bootstrap your own performance tests. Together, these additions will give you a deeper understanding of performance factors, how you can meet your scalability and latency requirements, and help set you up for success in the long term.


 


The goal of this blog post is to give you an overview of performance in Azure Cognitive Search and to point you to resources so you can explore the concept more deeply. We’ll walk through some of the key factors that determine performance in Azure Cognitive Search, show you some performance benchmarks and how you can run your own performance tests, and ultimately provide some tips on how you can diagnose and fix performance issues you might be experiencing.


 


Key Performance Factors in Azure Cognitive Search


First, it’s important to understand the factors that impact performance. We outline these factors in more depth in this article but at a high level, these factors can be broken down into three categories:



It’s also important to know that both queries and indexing operations compete for the same resources on your search service. Search services are heavily read-optimized to enable fast retrieval of documents. The bias towards query workloads makes indexing more computationally expensive. As a result, a high indexing load will limit the query capacity of your service.


 


Performance benchmarks


While every scenario is different and we always recommend running your own performance tests (see the next section), it’s helpful to have a benchmark for the performance you can expect. We have created two sets of performance benchmarks that represent realistic workloads that can help you understand how Cognitive Search might work in your scenario.


 


These benchmarks cover two common scenarios we see from our customers:



  • E-commerce search – this benchmark is based on a real customer, CDON, the Nordic region’s largest online marketplace

  • Document search – this benchmark is based on queries against the Semantic Scholar dataset


The benchmarks will show you the range of performance you might expect based on your scenario, search service tier, and the number of replicas/partitions you have. For example, in the document search scenario which included 22 GB of documents, the maximum queries per second (QPS) we saw for different configurations of an S1 can be seen in the graph below:


DerekLegenzoff_0-1620166702313.png


 


 


As you can see, the maximum QPS achieved tends to scale linearly with the number of replicas. In this case, there was enough data that adding an additional partition significantly improved the maximum QPS as well.


 


You can see more details on this and other tests in the performance benchmarks document.


 


Running your own performance tests


Above all, it’s important to run your own performance tests to validate that your current setup meets your performance requirements. To make it easier to run your own tests, we created a solution containing all the assets needed for you to run scalable load tests. You can find those assets here: Azure-Samples/azure-search-performance-testing.



The solution assumes you have a search service with data already loaded into the search index. We provide a couple of default test strategies that you can use to run the performance test as well as instructions to help you tailor the test to your needs. The test will send a variety of queries to your search service based on a CSV file containing sample queries and you can tune the query volume based on your production requirements.



Apache JMeter is used to run the tests giving you access to industry standard tooling and a rich ecosystem of plugins. The solution also leverages Azure DevOps build pipelines and Terraform to run the tests and deploy the necessary infrastructure on demand. With this, you can scale to as many worker nodes as you need so you won’t be limited by the throughput of the performance testing solution.


 


 


DerekLegenzoff_1-1620166702328.png


 


After running the tests, you’ll have access to rich telemetry on the results. The test results are integrated with Azure DevOps and you can also download a dashboard from JMeter that allows you to see a range of statistics and graphs on the test results:


DerekLegenzoff_2-1620166702362.jpeg


 


 


Improving performance


If you find your current levels of performance aren’t meeting your needs, there are several different ways to improve performance. The first step to improve performance is understanding why your service isn’t performing as you expect. By turning on diagnostic logging, you can gain access to a rich set of telemetry about your search service—this is the same telemetry that Microsoft Azure engineers use to diagnose performance issues. Once you have diagnostic logs available, there’s step by step documentation on how to analyze your performance.


 


Finally, you can check out the tips for better performance to see if there are any areas you can improve on.


 


If you’re still not seeing the performance you expect, feel free to reach out to us at azuresearch_contact@microsoft.com.


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 

Build fast, scalable data system on Azure SQL Database Hyperscale | Clearent

Build fast, scalable data system on Azure SQL Database Hyperscale | Clearent

This article is contributed. See the original author and article here.

How to build a fast, scalable data system on Azure SQL Database Hyperscale. Hyperscale’s flexible architecture scales with the pace of your business to process large amounts of data with a small amount of compute in just minutes, and allows you to back up data almost instantaneously.


 


Screen Shot 2021-05-04 at 4.15.45 PM.png


 


Zach Fransen, VP of data and AI at Xplor, joins Jeremy Chapman to share how credit card processing firm, Clearent by Xplor, built a fast, scalable merchant transaction reporting system on Azure SQL Database Hyperscale. Take a deep dive on their Hyperscale implementation, from their approach with micro-batching to continuously bring in billions of rows of transactional data, from their on-premises payment fulfillment system at scale, as well as their optimizations for near real-time query performance using clustered column store indexing for data aggregation.


 


 


QUICK LINKS:


 












 


Link References:





 


Unfamiliar with Microsoft Mechanics?





 


Keep getting this insider knowledge, join us on social:





Video Transcript:


 










































Consolidate data to one source with Azure SQL Managed Instance | Komatsu

Consolidate data to one source with Azure SQL Managed Instance | Komatsu

This article is contributed. See the original author and article here.

Modernize your existing data at scale, and solve for operational efficiency with Azure SQL Managed Instance. Azure SQL MI is an intelligent, scalable, cloud database service and fully managed SQL server.


 


Screen Shot 2021-05-04 at 2.16.51 PM.png


 


Nipun Sharma, lead data architect, joins Jeremy Chapman to share how the Australian subsidiary of large equipment manufacturer, Komatsu, built a scalable and proactive sales and inventory management and customer servicing model on top of Azure SQL Managed Instance to consolidate their legacy data estate on-premises. See what they did to expand their operational visibility and time to insights, including self-service reporting through integration with Power BI.


 



 







QUICK LINKS:


 











 


Unfamiliar with Microsoft Mechanics?





 


Keep getting this insider knowledge, join us on social:










Video Transcript:


 






































































 










New LTS release for Azure IoT Hub SDK for .NET

This article is contributed. See the original author and article here.

The .NET Azure IoT Hub SDK team released the latest LTS (Long-Term Support) of the device and service SDKs for .NET. This LTS version, tagged lts_2021-2-18, adds bug fixes, some improvements, and new features over the previous LTS (lts_2020-9-23), such as:


– Handle twin failures using AMQP.


– Make the DeviceClient and ModuleClient extensible.


– Install the device chain certificates using the SDK.


– Make DPS class ClientWebSocketChannel disposable.


– Use CultureInvariant for validating device connection string values.


– Reduce memory footprint of CertificateInstaller.


– Add an API to set a callback for receiving C2D.


– Make set desired property update method thread safe.


– Add support for disabling callbacks for properties and methods.


– Expose DTDL model Id property for pnp devices.


– Make payload in the invoke command API optional.


– Add APIs to get attestation mechanism.


– Improved logging for noting when the no-retry policy is enabled, in the MQTT/AMQP/HTTP transport layers, in the HttpRegistryManager, and in the AmqpServiceClient.


 


For detailed list of feature and bug fixes please consult the comparing changes with previous LTS: Comparing lts_2020-9-23…lts_2021-3-18 · Azure/azure-iot-sdk-csharp (github.com)


The following NuGet versions have been marked as LTS.



  • Microsoft.Azure.Devices: 1.31.0

  • Microsoft.Azure.Devices.Client: 1.36.0

  • Microsoft.Azure.Devices.Shared: 1.27.0

  • Microsoft.Azure.Devices.Provisioning.Client: 1.16.3

  • Microsoft.Azure.Devices.Provisioning.Transport.Amqp: 1.13.4

  • Microsoft.Azure.Devices.Provisioning.Transport.Http: 1.12.3

  • Microsoft.Azure.Devices.Provisioning.Transport.Mqtt: 1.14.0

  • Microsoft.Azure.Devices.Provisioning.Security.Tpm: 1.12.3

  • Microsoft.Azure.Devices.Provisioning.Service: 1.16.3


 


More detail on the LTS 2021-03-18 version can be found here.


 


Enjoy this new LTS version.


Eric for the Azure IoT .NET Managed SDK team