You are here

Feed aggregator

Modify the Structure and Appearance of Text in Microsoft Word 2016

MSDN Blogs - Tue, 03/08/2016 - 11:00

This chapter from Microsoft Word 2016 Step by Step guides you through procedures related to applying character and paragraph formatting, structuring content manually, creating and modifying lists, applying styles to text, and changing a document’s theme.

In this chapter

  • Apply paragraph formatting
  • Structure content manually
  • Apply character formatting
  • Create and modify lists
  • Apply built-in styles to text
  • Change the document theme

Practice files

For this chapter, use the practice files from the Word2016SBS\Ch04 folder. For practice file download instructions, see the introduction.

Documents contain text that conveys information to readers, but the appearance of the document content also conveys a message. You can provide structure and meaning by formatting the text in various ways. Word 2016 provides a variety of simple-to-use tools that you can use to apply sophisticated formatting and create a navigational structure.

In a short document or one that doesn’t require a complex navigational structure, you can easily format words and paragraphs so that key points stand out and the structure of your document is clear. You can achieve dramatic flair by applying predefined WordArt text effects. To keep the appearance of documents and other Microsoft Office files consistent, you can format document elements by applying predefined sets of formatting called styles. In addition, you can change the fonts, colors, and effects throughout a document with one click by applying a theme.

This chapter guides you through procedures related to applying character and paragraph formatting, structuring content manually, creating and modifying lists, applying styles to text, and changing a document’s theme.

Read the full chapter at the Microsoft Press Store.

Introducing the Class Notebook add-in for OneNote—designed and built with teachers

MSDN Blogs - Tue, 03/08/2016 - 09:30

Teachers, students and schools have been doing some amazing things with Class Notebooks, and in many cases, changing the nature of the classroom with new interaction, feedback and collaboration models that were not possible before. The OneNote team has a history of working closely with teachers and schools to help solve classroom challenges. Class Notebooks came directly from working closely with teachers, listening to how they were using OneNote in the classroom and what they were hoping to be able to do more easily.

...(read more)

Introducing the Class Notebook add-in for OneNote—designed and built with teachers

MSDN Blogs - Tue, 03/08/2016 - 09:30

Teachers, students and schools have been doing some amazing things with Class Notebooks, and in many cases, changing the nature of the classroom with new interaction, feedback and collaboration models that were not possible before. The OneNote team has a history of working closely with teachers and schools to help solve classroom challenges. Class Notebooks came directly from working closely with teachers, listening to how they were using OneNote in the classroom and what they were hoping to be able to do more easily.

...(read more)

Addressing large memory grant requests from optimized Nested Loops

MSDN Blogs - Tue, 03/08/2016 - 09:17

Optimized Nested Loops (or Batch Sort) is effectively an optimization aimed at minimizing I/O during a nested loop when the inner side table is large, regardless of it being parallelized or not.

The presence of this optimization in a given plan may not be very obvious when you look at an execution plan, given the sort itself is hidden, but you can see this by looking in the plan XML, and looking for the attribute Optimized, meaning the Nested Loop join may try to reorder the input rows to improve I/O performance. You can read more about optimized Nested Loops in Craig Freeman's blog.

We have encountered cases of performance issues where the root cause is tracked back to an extreme memory grant request from a query with these Batch Sorts. When the Optimizer uses a "Batch Sort" or optimized Nested Loop join, the estimated used for memory grants can be much larger than the memory used for the operation.

The issue occurs when the outer table of the Nested Loop join has a predicate that filters the result to a small input, but the batch sort appears to be using an estimate for cardinality that is equivalent to the entire outer table. This can result in a perceived excessive memory grant which in a very concurrent server can have several side-effects, like OOM conditions, memory pressure for plan cache eviction, or unexpected RESOURCE_SEMAPHORE waits. We have seen how a single query that match this pattern can actually get several GB’s of granted memory on high-end machines (1TB+ RAM).

One option until now would be to disable this feature globally using Trace Flag 2340, as described in KB 2801413. However, in SQL Server 2016 RC0 we have changed the behavior to maintain the advantage of the optimization, but now the max grant limit is based on the available memory grant space. This improvement also translates into better scalability, in the sense more queries can be executed with a smaller memory footprint. We are looking at back porting this behavior to an upcoming SQL Server 2014 Service Pack, and as usual deliver added value to in-market versions.

You can see below the difference (left is SQL Server 2016 RC0, right is SQL Server 2014) of granted memory for the same query. The ratio between granted memory and the max used memory is proportionally very large on the right side.

Pedro Lopes (@sqlpto) – Senior Program Manager

What’s New in Sitecore Commerce 8.1

MSDN Blogs - Tue, 03/08/2016 - 08:01
A few weeks back we quietly shipped Sitecore® Commerce 8.1, which is now available for download from https://dev.sitecore.net/en/Downloads/Sitecore_Commerce.aspx . This is an all-up release featuring our entire portfolio of Commerce products, including: Commerce Server 11.3 for those continuing with the standalone product Sitecore Commerce powered by Commerce Server 8.1 SItecore Commerce powered by Microsoft Dynamics 8.1 Sitecore Commerce Connect 8.1 With this post, we wanted to highlight some of...(read more)

Developer’s Guide to Automated Install of ADFS On Windows Server 2016 (TP4)

MSDN Blogs - Tue, 03/08/2016 - 07:00

In a recent article on his blog, Premier Developer Consultant Razi Rais outlines the steps required to set up a developer environment instance of Active Directory Federation Services on the current Technical Preview (TP4) of Windows Server 2016.  Here’s a snippet of Razi’s article, be sure to follow the link to his blog for the full solution, including code samples:

Recently I’ve run into situations where I have to build a developer environment that needs Active Directory Federation Services [ADFS] running on Windows Server 2016 [currently in technical preview 4, hence w2k16-tp4,]. I am intentionally avoiding the term ADFS ‘v4’ which is really tempting but it’s about time to move away from these versions. From now on you can simply refer to it as ADFS running on w2k16. So, what I really needed is something that can be up and running in the fastest way possible. It’s really a pure developer setup focusing on saving time on installation and configuration so no server hardening, least privilege accounts or all those things that are absolutely mandatory for non-developer environments like production!

Read about the full solution here:

http://www.razibinrais.com/dev-install-adfs-windows-2016/

Children United’s Destiny Africa lights up Voice in a Million at SSE Arena Wembley

MSDN Blogs - Tue, 03/08/2016 - 05:30

Microsoft are supporting Children United, a project founded by First News, Save The Children and Achievement for All to support the creation of the first world-wide digital community of children. Last week saw 6,500 children performing as part of the Voice in a Million annual flagship event at SSE Arena Wembley.

...(read more)

Checklist: Performance do Servidor (Windows)

MSDN Blogs - Tue, 03/08/2016 - 04:00

Podemos criar um breve checklist sobre como validar a infraestrutura de um servidor SQL usando o Performance Monitor.

Artigo complementar: Checklist: Performance do Servidor (SQL)

Desafio: Analisando Servidor com Perfmon

A análise da infraestrutura sob a ótica do Windows é dividida nos seus principais recursos: CPU, memória, storage e rede.

CPU

Monitoração do consumo de CPU no servidor.

  • Processor: %Processor Time: verificar se o consumo de CPU está abaixo de 80%. É importante manter uma margem de 10-20% para permitir um eventual pico de utilização.
  • Processor: %Privileged Time: verificar se o consumo em Kernel Time está abaixo de 30%. Não faz sentido um servidor de banco de dados gastar mais tempo em Kernel executando tarefa de sistemas ao invés de executar as queries SQL.
  • System: Processor Queue Length: monitorar esse valor ao longo do tempo e comparar com o consumo de CPU. Alto consumo de CPU associado a filas de processador indicam que existem processos externos afetando o desempenho do SQL Server.

 

Memória

Monitoração da memória disponível no SO e consumo interno da Kernel.

  • Memory: Available MB: monitorar esse contador ao longo do tempo e garantir que ele está sempre acima de 100MB. Caso haja momentos em que esse indicador fique muito baixo, recomenda-se configurar ou diminuir o “Max Server Memory” do servidor SQL Server e garantir que sempre haja memória disponível.
  • Memory: Pool Nonpaged Bytes: analisar se a quantidade de Nonpaged Pool se mantém constante ao longo dos dias ou se há indícios de memory leak. Isso pode indicar um problema em drivers de Kernel e afeta a estabilidade do SO.
  • Memory: Pool Paged Bytes: analisar se a quantidade de Paged Pool se mantém constante ao longo dos dias ou se há indícios de memory leak. Isso pode indicar um problema em drivers de Kernel e afeta a estabilidade do SO.

 

Storage

A análise do storage foi detalhada no artigo Monitorando o Storage. O ideal é conduzir uma análise individualizada por volume do disco ao invés de consolidar em uma única análise.

A carga pode ser medida em IOPS. Altos valores de IOPS causam gargalos em discos mecânicos FC, SCSI, SAS, SATA.

  • Disk Reads/sec: calcular o número de leituras em um disco de dados. Na teoria, essas leituras possuem característica aleatória e em blocos de 8Kb. No entanto, é comum encontrar servidores realizando table scan e causando leituras sequenciais e blocos maiores que 8Kb. Portanto, é possível determinar a natureza da leitura (aleatória ou sequencial) através do tamanho dos blocos de escrita (contador Disk Bytes/Read). Valores de referência:
    • 100 IOPS = Disco 7200 RPM
    • 150 IOPS = Disco 10k RPM
    • 175 IOPS = Disco 15k RPM
    • 10.000 IOPS = Disco SSD
  • Disk Writes/sec: ignorar o número de escritas no disco de dados. Ignorar esse contador nos discos do tempdb: log e dados. Calcular o IOPS nos discos de log. Idealmente esse valor deve ficar abaixo de 200, embora seja aceitável atingir até 1000 IOPS. Normalmente as escritas são aceleradas através de um write-cache no storage.
  • Disk Transfers/sec: soma dos IOPS de escrita e leitura. Utilizar esse contador quando precisar de uma análise simplificada sobre a carga.

A carga pode ser medida em MB/s. Altos valores na taxa de transferência causam gargalos nas interfaces de disco e cabos de interconexão

  • Disk Read Bytes/sec: calcular a taxa de transferência de leitura. Não existe um limite para esse valor. Sugestão de
    • 20 MB/s: baixo
    • 100 MB/s: normal
    • 200 MB/s: alto (equivalente a Fiber Channel 2Gbit)
  • Disk Write Bytes/sec: calcular a taxa de transferência de escrita. Entretanto, existem algumas considerações:
    • Disco de dados: fluxo de escrita é causado pelo processo de checkpoint, que pode aumentar a concorrência de escrita e afetar indiretamente a latência do storage
    • Disco de log: quase sempre a taxa de escrita é baixa (abaixo de 20MB/s) porque os pacotes são pequenos
  • Disk Bytes/sec: soma da taxa de transferência de leitura e escrita. Utilizar esse contador quando precisar de uma análise simplificada sobre a carga.

A latência do disco é a principal medida em relação ao storage:

  • Avg Disk Sec/Read: Validar se a latência do disco está dentro da expectativa. Em geral, adotam-se valores máximos de 50 a 100ms como tempo de respostas para o disco de dados. Uma sugestão de tempos:
    • <1ms : inacreditável
    • <3ms : excelente
    • <5ms : muito bom
    • <10ms : dentro do esperado
    • <20ms : razoável
    • <50ms : limite
    • >100ms : ruim
    • > 1 seg : contenção severa de disco
    • > 15 seg : problemas graves com o storage
  • Avg Disk Sec/Write: Validar se a latência do disco está dentro da expectativa. Ignore esse valor para os discos de dados. Utilize esse contador para os discos de log com latências reduzidas:
    • <1ms : excelente
    • <3ms : bom
    • <5ms : razoável
    • <10ms : limite
    • >20ms : ruim
    • > 1 seg : contenção severa de disco
    • > 15 seg : problemas graves com o storage
    • Avg Disk Sec/Transfer: Média ponderada entre os tempos de leitura e escrita. Utilizar esse contador quando precisar de uma análise simplificada sem a necessidade de olhar dois contadores (Read e Write) ao mesmo tempo.

    Adicionalmente, pode ser incluído o contador de “outstanding I/O”.

    • Current Disk Queue Length: corresponde ao número de requisições de I/O que estão ativas esperando por uma resposta do storage ou enfileiradas na HBA. Infelizmente esse contador é confundido com o “Avg Disk Queue Length”, que não possui o mesmo significado. Se o tempo de latência estiver adequado, é possível fazer o ajuste do parâmetro de “Queue Depth” da placa HBA. Dessa forma, o host pode aumentar o número de I/O enviados ao storage e diminuir a fila da HBA. Esse é um parâmetro específco por placa (ex: Emulex, QLogic, etc).

     

    Rede

    Monitoração do tráfego de rede.

    • Bytes Received/sec: calcular a taxa de dados recebidos pela rede. Esse valor é sempre baixo, pois corresponde aos pacotes com comandos. A exceção é durante a recepção de cargas BCP. Valores de referência:
      • 5MB/s : normal
      • 10MB/s: alto
      • 100MB/s: muito alto (equivalente a uma placa Ethernet 1Gbit)
    • Bytes Sent/sec: calcular a taxa de dados enviados pela rede. Esse valor é superior à quantidade de dados recebidos, pois corresponde ao conjunto de dados a ser retornado ao cliente.
      • 10MB/s : normal
      • 20MB/s : alto
      • 100MB/s: muito alto (equivalente a uma placa Ethernet 1Gbit)
    • Bytes Total/sec: soma de dados recebidos e enviados pela rede. Utilizar esse contador quando precisar de uma análise simplificada do tráfego de rede.

     

    Referência

    Os demais artigos dessa série estão listados abaixo.

    Artigo: Perfmon- Falso Sentido de Monitoração

    Artigo: Os 7 Grandes Mitos do Perfmon:

    Artigo: Contadores do Perfmon

    Desafio: Analisando Servidor com Perfmon

    Artigo: Monitorando com o Perfmon

    Checklist

    Using the Stack Overflow API in ASP.NET Core 1.0

    MSDN Blogs - Tue, 03/08/2016 - 03:05
    I recently had the need to use the Stack Overflow API in a web project and it took me a while so I thought I'd capture what I learnt. The Stack Overflow API Stack Overflow have a really nice REST API. It lets you get to pretty much any information in Stack Overflow and is really well documented . The API follows the usual pattern of OAuth authentication. You register your application, get a key and then follow the usual OAuth Authentication procedure . The nice thing about the API is...(read more)

    微軟學生大使全台巡迴攤位活動

    MSDN Blogs - Tue, 03/08/2016 - 02:38

    隨著4月9號的Imagine Cup微軟潛能創意盃台灣總決賽日日逼進,微軟學生大使也前進全台各大校園設置攤位宣傳,除了為招募更多菁英學生報名參賽,也讓更多的學生認識Imagine Cup提升其在校園的知名度,鼓勵更多台灣學生在「用科技改變世界」這個主題上貢獻一份心力。

     

    同時,微軟學生大使也在全台各校的攤位上宣傳下一屆的微軟實習生招募。微軟學生大使(Microsoft Student Partners,簡稱MSP)是由美國總部發起的全球實習計畫,主要任務是推廣各種最新的科技技術給更多學生認識。在一年的實習期間,MSP除了能免費參與各項微軟提供的培訓課程與研討會外,實習結束後,還將獲得由美國總部頒發的國際證書。

     

    攤位上除了有獨一無二的打卡版和MSP吉祥物─「波比」的等比例立牌讓大家一起合照同樂外,完成不同闖關互動如粉絲團按讚或打卡填問卷還可獲得微軟學生大使的專屬小禮物!

     

    攤位活動將從2月底一路到3月11日,歡迎所有興趣加入微軟實習或參加微軟潛能創意盃的同學到現場詢問,不僅有熱情的微軟學生大使提供你更多詳細資訊,還能免費拿到限量小禮物喔!

     

    全台巡迴攤位時間與地點

    • 政治大學 2月26日(五) 11:00~14:00商學院
    • 臺北科技大學 3月2日 (三) 11:00~14:00 人文廣場
    • 銘傳大學 3月3日 (四) 11:00~14:00 S棟資訊管理大樓1樓
    • 清華大學 3月7日 (一) 11:00~14:00 水木路口
    • 交通大學 3月8日 (二) 11:00~14:00 小木屋旁
    • 中山大學 3月9日 (三) 11:30~13:30 菩提樹廣場
    • 台灣科技大學 3月10日 (四) 11:00~14:00 郵局前廣場
    • 成功大學 3月11日 (五) 11:00~14:00 活動中心大草坪

    北科擺攤照片

    銘傳擺攤照片


     

    Kodu is to feature in British Science Week 2016!

    MSDN Blogs - Tue, 03/08/2016 - 02:24

     

    Computing skills are intrinsically linked to science and on British Science Week digital day (Friday 11 March) education technology specialist and with the support of the Microsoft Educator Community ComputerXplorers will be delivering free Kodu sessions for children and CPD sessions as part of its annual Programming for Primaries awareness event.

    ComputerXplorers established Programming for Primaries two years ago to shine the spotlight on resources available to help teachers introduce primary school age children to coding and we're delighted to be supporting them once again as they join forces with British Science Week.

    Any initiative that educates children in the exciting application, depth and breadth of coding applications in the real world has got to be a good thing. Programming for Primaries helps make coding relevant and interesting to children today, so that they will understand what they can do with it in the lives they lead tomorrow.

    FREE children's workshops and CPD sessions for teachers are available in areas of Kent, London, Bristol, Bath, Birmingham, Thames Valley, the Cotswolds, Surrey, Oxfordshire, Yorkshire, Scotland and South Wales. Places are filling up fast. For more information go to www.computerxplorers.co.uk

     

    How to completely uninstall / remove specific inbox appx against win10

    MSDN Blogs - Tue, 03/08/2016 - 01:53

    Hi,

    Thanks for looking into this. :)

    Today I am going to talk about how to completely uninstall / remove specific inbox appx against win10.

    I have seen varies blogs and forum articles discussing how to do that.

    But most of them are very partial, and will not work if you really follow that.

    There is a very key point we may easily miss.

    To completely uninstall / remove specific inbox APPX against win10, we need to:

    Step 1. use the following power-shell cmdlet to list the exact package name of the unwanted appx.

    Get-AppxPackage | Select Name, PackageFullName

    Step 2. remove the appx for the current user, by doing this the appx won't appear on start menu:

    Remove-AppxPackage -package <PackageName1>

    Step 3. after running the cmdlets above, the appx is actually still staged/provisioned in OS. If a new user profile is created, the appx will still be installed for the user. Now, we need to remove the appx from OS perspective, next step is to run the following cmdlet to list the exact package name of the staged/provisioned appx.

    Get-AppXProvisionedPackage -online

    Step 4. remove the staged/provisioned appx:

    Remove-AppxProvisionedPackage -PackageName <PackageName2> -online

     

    The very key thing here is <PackageName1> may sometimes differs from <PackageName2>.

    For example,

    AppxPackageName: Microsoft.Office.OneNote_17.6131.10051.0_x64__8wekyb3d8bbwe
     
    AppxProvisionedPackageName: Microsoft.Office.OneNote_2015_6131.10051.0_neutral_~_8wekyb3d8bbwe

    OneNote in Education eBook – Chapter 5: OneNote for peer assessment

    MSDN Blogs - Tue, 03/08/2016 - 01:30

    Recently, we published an eBook with the help of #MIEExpert Emma Hicks, which looks at how OneNote can be used in the classroom to help teaching and learning. Chapter 5 looks at how OneNote creates a single digital space, providing a hassle free and accessible way to conduct peer assessment.

    ...(read more)

    OneNote in Education eBook – Chapter 5: OneNote for peer assessment

    MSDN Blogs - Tue, 03/08/2016 - 01:30

    Recently, we published an eBook with the help of #MIEExpert Emma Hicks, which looks at how OneNote can be used in the classroom to help teaching and learning. Chapter 5 looks at how OneNote creates a single digital space, providing a hassle free and accessible way to conduct peer assessment.

    ...(read more)

    OneNote in Education eBook – Chapter 5: OneNote for peer assessment

    MSDN Blogs - Tue, 03/08/2016 - 01:30

    Recently, we published an eBook with the help of #MIEExpert Emma Hicks, which looks at how OneNote can be used in the classroom to help teaching and learning. Chapter 5 looks at how OneNote creates a single digital space, providing a hassle free and accessible way to conduct peer assessment.

    ...(read more)

    Microsoft helps translate your Arabic conversations face-to-face or across the globe

    MSDN Blogs - Tue, 03/08/2016 - 00:01

    العربية

    Microsoft helps translate your Arabic conversations face-to-face or across the globe Today, Microsoft Translator adds Modern Standard Arabic to its list of conversation languages for speech-to-speech translation. Whether you are using Skype Translator to communicate across distances or the Microsoft Translator apps on Android or iOS to communicate face to face, we continue to help break the language barrier by allowing you to translate Arabic conversations into seven languages (Chinese Mandarin, English, French, German, Italian, Brazilian Portuguese, and Spanish).

    Modern Standard Arabic (MSA) is used in the Middle East and Northern Africa as a standard form of the Arabic language. Unlike dialects which may vary greatly from country to country, MSA is used throughout the Arab-speaking world in written and formal communication such as media, higher education, and government. Although rarely used informally, most native Arabic speakers are familiar with MSA.

    Arabic is a complex language for which to develop speech recognition and translation technologies. Microsoft has invested in worldwide research centers for many years and in this case, our Natural Language Processing researchers in our Advanced Technology Laboratory in Cairo, Egypt took the lead in developing this new language system. After months of limited progress with speech recognition quality, the researchers were able to find innovative approaches that allowed them to dramatically reduce the Word Error Rate (WER, a typical industry measure for speech recognition quality).

    "Knowing how popular Skype and Microsoft Translator are for Arabic speakers, we were very excited to improve the quality for Arabic conversations and to be a key part of the speech-to-speech translation project," said Mohamed Afify, principal researcher in our Cairo Lab. "To achieve this we for instance gathered data from talk shows or social media to enrich both our speech recognition and translation models"

    Speech translation from and to Modern Standard Arabic is now available worldwide, including:

    • Connecting with people around the world in Skype Translator for Windows desktop. Additionally, you can use Skype to translate your IMs into any of the 50+ languages, including Arabic.
    • Translating face-to-face conversations with the Microsoft Translator apps for iPhone and Android into any of the other seven conversation languages. The app can be used with your phone, or combined with your Apple or Android watch for an even more natural experience. The app can still be used to translate text or short utterance to all 50+ languages supported by Microsoft Translator.
    • Integrating speech-based text (such as transcripts) translation in your workflow or app. This release improves the quality of these translations through the "speech" general category. This can be used in all category ID-enabled Microsoft Translator products, such as Translator Web Widget, Office apps for PowerPoint and Word, Document Translator, Multilingual App Toolkit, on premises versions of SharePoint, and many translation memory tools from our partners. As a developer, you can also use the speech general category in your app or website.

    In addition to being added as a conversation language, Arabic image translation now also is available on Windows 10 and Windows Phone 8 and 10 apps, and as a downloadable language pack for Microsoft Translator on Android.

    • Image translation, launched for Windows and Windows phone in 2010, lets you translate text from your camera rather than by typing the text. Image translation is great for translating signs, menus, and flyers. Arabic will also be added to image translation in the Translator apps for iOS and Android soon.
    • The downloadable language pack for Android is the world's first Deep Neural Network-powered offline translation engine. By downloading it for free, users can get near online-quality translations for any of Microsoft Translator's supported languages, even when they are not connected to the Internet. Language packs are great for situations where Internet access is unavailable or cost prohibitive, such as when international roaming charges would apply. Offline language packs, including support for Arabic will be available for iOS soon. An offline language pack to translate between Arabic and English for the Translator apps for Windows and Windows Phone is already available.



    Learn more:

    [Sample Of Mar. 07] How to convert word table into Excel using OpenXML

    MSDN Blogs - Mon, 03/07/2016 - 23:40
    Mar. 7 Sample : https://code.msdn.microsoft.com/How-to-convert-word-table-e288a4c1 This sample reads the contents of a WORD table data using OpenXML and exports them to a excel file. You can find more code samples that demonstrate the most typical programming scenarios by using Microsoft All-In-One Code Framework Sample Browser or Sample Browser Visual Studio extension . They give you the flexibility to search samples, download samples on demand, manage the downloaded...(read more)

    PDB Downloader

    MSDN Blogs - Mon, 03/07/2016 - 22:53

     

    What are PDBs?

    A Program Database (.pdb) file, also called a symbol file, maps the identifiers that you create in source files for classes, methods, and other code to the identifiers that are used in the compiled executables of your project.

    The file also maps the statements in the source code to the execution instructions in the executables. The debugger will then use this information to determine the 2 key pieces of information:

    1. The source file with the line number that is displayed in any code editor
    2. The location in the executable to stop at when you set a breakpoint

    You will often need .pdb files which contain symbols for Microsoft DLLs, or other 3rd Party libraries to debug a multitude of issues.

    Ok, but why do I need them?

    Taking an example, we run into scenarios on a daily basis wherein we need to inject a breakpoint in Microsoft code to capture memory dumps. To inject that breakpoint, we typically get a manual dump of the process, and use Debug Diagnostics, or the Visual Studio Debugger, to download them.

    These debuggers will attempt to download all the symbols for libraries used within the application. This is a very time consuming process because it downloads PDBs for ALL libraries, while we need the PDB file for say, one specific library in which the breakpoint is to be injected. Not to mention the PDBs for all libraries in a process can get very large in size.

    Why PDB Downloader?

    PDB downloader downloads specific symbol files only for the libraries you want - reducing time, and space.

    It is a small standalone executable (< 200KB) that just needs the DLL as an input.

    Advantages

    • No debuggers are required to download the symbols.
    • You do not need admin access.
    • Supports both managed and native libraries/executables
    • No need to install the tool -  it’s a standalone executable.
    • You can download symbols which are required by debugger for breakpoints.
    • The tool reduces 90% of symbol download time.
    • Disk space utilization is minimal.
    • Open source, free to download and modify
    • Log file support to troubleshoot issues with the tool
    • Downloads:
      • Microsoft Symbol Server symbols.
      • Symbols from most external symbol servers, like Google, Adobe, etc.
      • Private symbols if the symbols servers are configured for HTTP.
      • Symbols for 32-bit and 64-bit architecture.

    Cool, where do I get it from and how do I use it?

    The tool can be downloaded from the open source github repo:

    https://github.com/rajkumar-rangaraj/PDB-Downloader/releases/download/v1.0/PDBDownloader.exe

    The GUI has a fairly simple layout with an option to input assembly file(s) using the file browser and enumerates them as a list (1).

    Step 1

    Click Open File(s), navigate to the folder containing the assembly and select the file

     

    Step 2 (Optional Step)

    You may modify the download path by clicking the “Saving to” link and selecting a folder of your choice. It will be a good idea to ensure that the folder you select has adequate NTFS permissions to write files.

    Step 3

    Clicking the start button probes the symbol server and downloads the .pdb file for your assembly.


    And that’s all, you have your PDB downloaded!

    Any pre-requisites?

    OS: Windows Vista & above
    .NET Framework : 4.5.2 & above

    Note: You can always copy the library in question to a machine which fits the above requirements and use the tool there to download the symbols you need.

    Using 3rd Party/Custom Symbol Server

    If you want to use the PDB Downloader to download symbol files from 3rd Party symbol servers, all you need to do is create a simple configuration file named PDBDownloader.exe.config, and place it in the same folder as the tool, and add the below content:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <appSettings>
        <add key="SymbolServer" value="http://symbols.mozilla.org/firefox"/>
      </appSettings>
    </configuration>

    The SymbolServer key here would be modified to reflect the URL of the symbol server you are targeting.

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

    We are always interested to get feedback and know about any bugs that you may encounter when using the application, shoot an email to us using the Feedback/Bug link at the bottom of the tool and we’ll look into the problem (4).

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

     

    Technorati Tags: ,

    A Powershell script to help you validate your DKIM config in Office 365

    MSDN Blogs - Mon, 03/07/2016 - 17:19

    One of our support engineers (not me, so let’s give credit where credit is due) wrote a script to help you, as a customer of Office 365, validate for DKIM configuration once you have enabled it in the Admin Portal. We’ve added a few more checks to make it more clear, but you can also use this.

    To verify your DKIM configuration:

    1. Copy/paste the below script into a file, Validate-DkimConfig.ps1

    2. Connect to Exchange Online using Powershell, making sure that the directory you are in is the same as where you saved the script above.

    3. Type the following command in Powershell:

    . .\Validate-DkimConfig.ps1.

    4. To check the config for a single domain, run the following command:

    Validate-DkimConfig <domain>

    To show the full signing config, use the –showAll switch:

    Validate-DkimConfig <domain> –showAll

    To validate all domains for your organization, run the following command:

    Validate-DkimConfig

    You will be able to see if anything is wrong because the output is color coded.

    function Validate-DkimConfig
    {
        [cmdletbinding()]
        Param(
            [parameter(Mandatory=$false)]
            [string]$domain,
            [parameter(Mandatory=$false)]
            [switch]$showAll
        )

        if ($domain) {
            $config = Get-DkimSigningConfig -Identity $domain
            Validate-DkimConfigDomain $config -showAll:$showAll
        }
        else {
            $configs = Get-DkimSigningConfig
            foreach ($config in $configs) { Validate-DkimConfigDomain $config -showAll:$showAll}
        }

    }

    function Validate-DkimConfigDomain
    {
        [cmdletbinding()]
        Param(
            [parameter(Mandatory=$true)]
            $config,
            [parameter(Mandatory=$false)]
            [switch]$showAll
        )

        # Display the configuration
        $domain = $config.Domain;
        Write-Host "Config for $domain Found..." -ForegroundColor Yellow
        if ($showAll) {
            $config | fl
        }
        else {
            $config | Select Identity, Enabled, Status, Selector1CNAME, Selector2CNAME, KeyCreationTime, LastChecked, RotateOnDate, SelectorBeforeRotateonDate, SelectorAfterRotateonDate | fl
        }

        # Get the DNS ENtries
        Write-Host "Locating DNS Entries..." -ForegroundColor Yellow
        $cname1 = "selector1._domainkey.$($domain)"
        $cname2 = "selector2._domainkey.$($domain)"
        $txt1 = $config.Selector1CNAME;
        $txt2 = $config.Selector2CNAME;

        $cname1Dns = Resolve-DnsName -Name $cname1 -Type CNAME -ErrorAction SilentlyContinue
        $cname2Dns = Resolve-DnsName -Name $cname2 -Type CNAME -ErrorAction SilentlyContinue
        $txt1Dns = Resolve-DnsName -Name $txt1 -Type TXT -ErrorAction SilentlyContinue
        $txt2Dns = Resolve-DnsName -Name $txt2 -Type TXT -ErrorAction SilentlyContinue

        # Validate Entries
        Write-Host "Validating DNS Entries..." -ForegroundColor Yellow

        Write-Host
        Write-Host "TXT Hostname : $($cname1)"
        Write-Host "Config CNAME1: $($config.Selector1CNAME)"
        if ($cname1Dns) {
            Write-Host "DNS    CNAME1: $($cname1Dns.NameHost)"
            $match = if ($config.Selector1CNAME.Trim() -eq $cname1Dns.NameHost.Trim()) { $true } else { $false }
            if ($match) { write-host "Matched      : $($match)" -ForegroundColor Green} else { write-host "Not Matched  : $($match)" -ForegroundColor Red}
        }
        else {
            write-host "DNS NotFound : $($cname1)" -ForegroundColor Red
        }

        Write-Host
        Write-Host "TXT Hostname : $($cname2)"
        Write-Host "Config CNAME2: $($config.Selector2CNAME)"
        if ($cname2Dns) {
            Write-Host "DNS    CNAME2: $($cname2Dns.NameHost)"
            $match = if ($config.Selector2CNAME.Trim() -eq $cname2Dns.NameHost.Trim()) { $true } else { $false }
            if ($match) { write-host "Matched      : $($match)" -ForegroundColor Green} else { write-host "Matched      : $($match)" -ForegroundColor Red}
        }
        else {
            write-host "DNS NotFound : $($cname2)" -ForegroundColor Red
        }

        Write-Host
        Write-Host "Config TXT1  : $($config.Selector1PublicKey)"
        if ($txt1Dns) {
            $key = $txt1Dns.Strings[0].Trim()
            Write-Host "DNS      TXT1: $($key)"
            $match = if (Compare-PublicAndConfigKeys $key $config.Selector1PublicKey) { $true } else { $false }
            if ($match) { write-host "Matched      : $($match)" -ForegroundColor Green} else { write-host "Key Match    : $($match)" -ForegroundColor Red}
        }
        else {
            write-host "DNS NotFound : $($txt1)" -ForegroundColor Red
        }

        Write-Host
        Write-Host "Config TXT2  : $($config.Selector2PublicKey)"
        if ($txt2Dns) {
            $key = $txt2Dns.Strings[0].Trim()
            Write-Host "DNS      TXT2: $($key)"
            $match = if (Compare-PublicAndConfigKeys $key $config.Selector2PublicKey) { $true } else { $false }
            if ($match) { write-host "Matched      : $($match)" -ForegroundColor Green} else { write-host "Key Match    : $($match)" -ForegroundColor Red}
        }
        else {
            write-host "DNS NotFound : $($txt2)" -ForegroundColor Red
        }

        Write-Host
    }

    function Compare-PublicAndConfigKeys([string] $publicKey, [string] $configKey)
    {
        $match = $false;

        if (![string]::IsNullOrWhiteSpace($publicKey) -and ![string]::IsNullOrWhiteSpace($configKey))
        {    
            $regex = "p=(.*?);"
            $foundPublic = $publicKey -match $regex
            $publicValue = if ($foundPublic) { $matches[1] } else { $null }
            $foundConfig = $configKey -match $regex
            $configValue = if ($foundConfig) { $matches[1] } else { $null }

            if ($foundPublic -and $foundConfig)
            {
                if ($publicValue.Trim() -eq $configValue.Trim())
                {
                    $match = $true;
                }
            }
        }

        $match;
    }

    I hope you find this useful.

    SQL Server 2016 Documentation -- We Want Your Feedback

    MSDN Blogs - Mon, 03/07/2016 - 16:14

    The SQL Server documentation team is working to improve the documentation, to help you be successful with and gain more value from SQL Server. Please consider taking this 9-question survey to send us your thoughts on how we can improve the documentation for you. We are listening to your feedback.

    Thank you.

     

    Carla Sabotta

    SQL Server Documentation Team

    Pages

    Subscribe to Randy Riness @ SPSCC aggregator
    Drupal 7 Appliance - Powered by TurnKey Linux