You are here

Feed aggregator

Using Process Monitor (also known as ProcMon) for MS Dynamics AX client troubleshooting

MSDN Blogs - Mon, 11/23/2015 - 08:44

The purpose of this blog post is to clarify the following 2 questions in order to get you started using Process Monitor:

1) What is Process Monitor (=ProcMon)?
2) How can I see the MS Dynamics AX client activity filtered in ProcMon ?

in terms of 1)

Process Monitor is a troubleshooting tool which allows you to have a look at the following activities in a filtered manner on your Windows operating system:

- Windows registry access
- Windows file system access
- Windows network
- Windows process and thread

There are 2 ways how you can launch ProcMon:

a) You can download the tool from here:
Once downloaded, unzip the archive and run procmon.exe by right clicking it, run as Administrator
(Note: You don’t have to run any installation wizard!)

b) The secound way via „Sysinternals Live“ is even more simple:
Just launch the following URL in your internet browser:

in terms of 2)
Once I start ProcMon on my Windows computer where have the MS Dynamics AX client up and running it looks like this:

Important note: After launching ProcMon it automatically starts to log all activities for all processes running in your Windows OS!
So if I only want the see what the MS Dynamics AX client is doing only then I click on the filter icon (note: marked in yellow) and manually choose the filter : Process Name IS ax32.exe:

So now it is filtered for all activities concerning the AX client. If you only want to see the file system activities then just deactivate the other activities by clicking on them (note: marked in yellow)

So this should hopefully just get you started using ProMon.

If you like, you may find much more detailed documentation about ProcMon here:

Playing with synchroninzation barriers

MSDN Blogs - Mon, 11/23/2015 - 07:00

A synchronization barrier is a synchronization object that works like this:

  • A synchronization barrier knows how many threads it is managing.
  • Each thread that calls Enter­Synchronization­Barrier blocks.
  • When the last thread enters the synchronization barrier, all threads are released.
  • Once a thread exits the synchronization barrier, it can re-enter it, at which point it blocks again, and the cycle repeats.

The idea here is that you have a multi-step process, and each thread must complete a step before any thread can go on to the next step. For example, you might have a sequence of steps like this:

  • Everybody enters the room and sits down.
  • Wait for everybody to be seated.
  • Start the movie.
  • Everybody watches the movie.
  • After the movie ends, everybody leaves the room and stands outside.
  • Wait for everybody to leave the room.
  • One person locks the door.
  • Everybody says good-bye and goes home.

The synchronization barrier takes care of the wait for everybody to... part.

It is not uncommon that an action needs to be taken after all threads have cleared the barrier, and the action needs to be performed exactly once. In the example above, one such action is "Start the movie." To support this pattern, the Enter­Synchronization­Barrier returns TRUE to exactly one thread; all the other threads get FALSE.

Here's a Little Program that demonstrates the synchronization barrier pattern. Each thread is person who wants to watch the movie.

#include <windows.h> #include <stdio.h> #include <stdlib.h> #define WATCHERS 4 SYNCHRONIZATION_BARRIER barrier; HANDLE movieFinished; // Watchers gonna watch. DWORD CALLBACK MovieWatcherThread(void* p) { int id = PtrToInt(p); // Build a string that we use to prefix our messages. char tag[WATCHERS + 1]; for (int i = 0; i < WATCHERS; i++) { tag[i] = (i == id) ? (char)('1' + i) : ' '; } tag[WATCHERS] = 0; printf("%s Sitting down\n", tag); if (EnterSynchronizationBarrier(&barrier, 0)) { // We are the one who should start the movie. printf("%s Starting the movie\n", tag); // For demonstration purposes, the movie is only one second long. LARGE_INTEGER dueTime; dueTime.QuadPart = -1000000LL; SetWaitableTimer(movieFinished, &dueTime, 0, nullptr, nullptr, FALSE); } // Watch the movie until it ends. printf("%s Enjoying the movie\n", tag); WaitForSingleObject(movieFinished, INFINITE); // Now leave the room. printf("%s Leaving the room\n", tag); if (EnterSynchronizationBarrier(&barrier, 0)) { // We are the one who should lock the door. printf("%s Locking the door\n", tag); } printf("%s Saying good-bye and going home\n", tag); return 0; } int __cdecl main(int, char**) { movieFinished = CreateWaitableTimer(nullptr, TRUE, nullptr); InitializeSynchronizationBarrier(&barrier, WATCHERS, -1); HANDLE threads[WATCHERS]; for (int i = 0; i < WATCHERS; i++) { DWORD threadId; threads[i] = CreateThread(nullptr, 0, MovieWatcherThread, IntToPtr(i), 0, &threadId); } // Wait for the demonstration to complete. WaitForMultipleObjects(WATCHERS, threads, TRUE, INFINITE); CloseHandle(movieFinished); DeleteSynchronizationBarrier(&barrier); return 0; }

Each thread represents a person who wants to watch the movie. We sit down, and then wait for everybody else to sit down by entering the synchronization barrier. The call to Enter­Synchronization­Barrier returns when everybody has sat down.

The watcher whose call to Enter­Synchronization­Barrier returned TRUE takes responsibility for starting the movie.

And then everybody watches the movie, waiting until the movie ends.

Once that's done, each person leaves the room, and then enters another synchronization barrier to wait until everybody is outside.

The synchronization barrier will nominate one person to lock the door.

Everybody says good-bye and goes home.

There is one tricky thing about synchronization barriers: Knowing when it is safe to reenter a synchronization barrier after exiting it. If the synchronization barrier is always used by the same pool of threads (like we did here), then there's no problem. The thread clearly has exited the synchronization barrier if it manages to run code and try to enter it again.

The tricky part is if the collection of threads participating in the barrier changes over time. The rule is that when a thread exits the barrier, then it releases a "unit of synchronization" that another thread can consume by entering the barrier. Usually, the unit is consumed by the same thread that exits the barrier, but that thread could instead hand the unit to another thread and let that other thread take over the job. It is important that there be a causal link between the exiting thread and the future entering thread, so that the future entering thread knows that the previous exiting thread has fully exited.

Suppose there are three steps: Step 1 is handled by threads A and B, and Steps 2 and 3 are handled by threads B and C. You don't want to do this:

Thread A Thread B Thread C Work on step 1 Work on step 1 Idle Enter­Synchronization­Barrier Enter­Synchronization­Barrier Signal thread C to start Work on step 2 Work on step 2 Enter­Synchronization­Barrier Enter­Synchronization­Barrier Work on step 3 Work on step 3

The problem here is that thread C may call Enter­Synchronization­Barrier before thread A has exited it. There is no causal link between thread A exiting the barrier and thread C entering it, which creates the race condition.

In this case, you can solve the problem by having thread A be the one to signal thread C to start working on step 2. That way the "unit of synchronization" is positively handed from thread A to thread C.

Storing JSON in SQL Server

MSDN Blogs - Mon, 11/23/2015 - 05:51
Storing JSON in SQL Server

SQL Server offers built-in functions for processing JSON text data. In this post, we will see how you can store JSON in SQL Server database.

Storing JSON in text columns

JSON is textual format so in SQL Server it is stored in NVARCHAR columns. The simplest table that represents collection of JSON objects is shown in the following listing:


( _id int identity constraint PK_JSON_ID primary key,
value nvarchar(max)
CONSTRAINT [Content should be formatted as JSON]
CHECK ( ISJSON(value)>0 )

 This simple structure is similar to the standard NoSQL collection that you can create in NoSQL databases (e.g. Azure DocumentDB or MongoDB) where you just have key that represents ID and value that represents JSON.

Note that NVARCHAR is not just a plain text. SQL Server has built-in text compressions mechanism that can transparently compress data stored on disk. Compression depends on language and can go up to 50% depending on your data (see UNICODE compression ).

The key difference between SQL server and other plain NoSQL databases is that SQL Server enables you to use hybrid data model where you can store several JSON objects in the same “collection” and combine them with regular relational columns.

As an example, imagine that we know that every person in your collection will have FirstName and LastName, and that you can store general information about the person as one JSON object, and phone numbers/email addresses as separate objects. In SQL Server 2016 we can easily create this structure without any additional syntax:




FirstName nvarchar(100) NOT NULL,

LastName nvarchar(100) NOT NULL,

AdditionalInfo nvarchar(max) NULL,

PhoneNumbers nvarchar(max) NULL,

EmailAddresses nvarchar(max) NULL
CONSTRAINT [Email addresses must be formatted as JSON array]
CHECK ( ISJSON(EmailAddresses)>0 )


Instead of single JSON object you can organize your data in this “collection”. If you do not want to explicitly check structure of each JSON column, you don’t need to add JSON check constraint on every column (in this example I have added CHECK constraint only on EmailAddresses column).

If you compare this structure to the standard NoSQL collection, you might notice that you will have faster access to strongly typed data (FirstName and LastName). Therefore, this solution is good choice for hybrid models where you can identify some information that are repeated across all objects, and other variable information can be stored as JSON. This way, you can combine flexibility and performance.

If you compare this structure with the schema of Person table AdventureWorks database, you might notice that we have removed many related tables.

Beside simplicity of schema, your data access operations will be simpler compared to complex relational structure. Now you can read single table instead of joining several tables. When you need to insert new person with related information (email addresses, phone numbers) you can insert a single record in one table instead of inserting one record in AdventureWorks Person table, taking identity column to find foreign key that will be used to store phones, email addresses, etc. In addition, in this model you can easily delete single person row without cascade deletes using foreign key relationships.

NoSQL databases are optimized for simple, read, insert, and delete operations – SQL Server 2016 enables you to apply the same logic in relational database.

JSON constraints

In the previous examples, we have seen how to add simple constraint that validates that text stored in the column is properly formatted. Although JSON do not have strong schema, you can also add complex constraints by combining functions that read values from JSON and standard T-SQL functions:

ADD CONSTRAINT [Age should be number]
CHECK ( ISNUMERIC(JSON_VALUE(value, '$.age'))>0 )

ADD CONSTRAINT [Person should have skills]
CHECK ( JSON_QUERY(value, '$.skills') IS NOT NULL)

First constraint will take the value of $.age property and check is this numeric value. Second constraint will try to find JSON object in $.skills property and verify that it exists. The following INSERT statements will fail due to the violation of constraints:


INSERT INTO Person(value)
VALUES ('{"age": "not a number", "skills":[]}')

INSERT INTO Person(value)
VALUES ('{"age": 35}')


Note that CHECK constraints might slow down your insert/update processes so you might avoid them if you need faster write performance.

Open Source? Linux? Ja takk, begge deler – Lysaker 8. desember

MSDN Blogs - Mon, 11/23/2015 - 04:46
Microsoft har snakket mye om Open Source i det siste. Hva er i veien med det gamle Microsoft? Er dette en gimick eller en reell forandring? Bli med oss denne dagen for å høre om hvordan Microsoft jobber med Open Source miljøer og hvordan du også kan dra nytte av forandringen.   Agenda: · 08:30 – 09:00 Registrering og frokost · 09:00 – 09:50 Keynote: Microsoft Linux – Are you kidding us? - Pasi Makinen, Open Source Lead Microsoft · 09:50 – 10:00 Pause · 10:00 – 10:50 Open Source prosjekter –...(read more)

Next Level Learning – Reflections from Queensland

MSDN Blogs - Mon, 11/23/2015 - 04:09
A guest post from Matthew Jorgensen, Coomera Anglican College Throughout November 2015, Microsoft provided a series of workshops for teachers and IT staff in Brisbane, Sydney, Gold Coast, Melbourne & Adelaide called the Next Level Learning Roadshow. I was asked to deliver some workshops on my favourite Microsoft tools and shine a spotlight on STEM and how Microsoft can enable STEM in schools. We took a peak at how some schools are using Minecraft in the classroom and for delivery of new and...(read more)

The Benefits of Microsoft Dynamics CRM in Higher and Further Education

MSDN Blogs - Mon, 11/23/2015 - 03:50

A CRM solution has a key role to play in many aspects of the business operations and student/staff engagement activities of HE/FE institutions. To be successful, a CRM solution must have a very close fit with those activities and to this extent the development and deployment of an education-focused CRM solution has become a specialist activity.

...(read more)

The Benefits of Microsoft Dynamics CRM in Higher and Further Education

MSDN Blogs - Mon, 11/23/2015 - 03:50

A CRM solution has a key role to play in many aspects of the business operations and student/staff engagement activities of HE/FE institutions. To be successful, a CRM solution must have a very close fit with those activities and to this extent the development and deployment of an education-focused CRM solution has become a specialist activity.

...(read more)

Microsoft Dynamics at The Business Show 2015: register for your free tickets today to see how you can empower your growing business!

MSDN Blogs - Mon, 11/23/2015 - 03:43

Microsoft Dynamics will be at The Business Show 2015 – London Olympia, 3rd & 4th December

Click here to register – tickets are free!

Progress your business at The Business Show 2015


The Business Show 2015 is THE place to be if you’re looking to grow your business. Where else will you find 350 exhibitors offering a wealth of opportunity, advice and information to smaller businesses to help them improve, evolve and expand in a challenging economy?


With 25,000 visiting small businesses, it’s also a fantastic opportunity for you to network and learn from your peers. And with 250 free seminars taking place, hosted by business experts, you’re sure to pick up some invaluable tips and small business success secrets.


And best of all… It’s FREE to attend! Click here to register for tickets.


Do you want to achieve better results in the areas that really matter when it comes to growing your business? Visit the Microsoft Dynamics stand at The Business Show to find out how!


Microsoft Dynamics technology can help your business generate higher-quality leads, close more profitable sales, optimise your inventory andproduction processes and make sure you get paid on time. Designed specifically to help smaller businesses like yours achieve their growth ambitions, Microsoft Dynamics is the cost-effective way to master your sales, marketing, operations and finances.


Find us on STAND 420, just by the Speed Networking Zone, and chat through your ambitions and challenges with our expert team. We’ll demo how Microsoft Dynamics CRM Online and Microsoft Dynamics NAV help businesses like yours to grow and prosper.


Click here to register for FREE tickets to attend The Business Show 2015

Visit The Business Show 2015 event website >

ASPNET RC1 has launched

MSDN Blogs - Mon, 11/23/2015 - 02:53


We are close to the end of November, and you may hear the footsteps of winter coming, for the north!

For the ones, who are following ASP NET 5, it is now open source, cross-platform and portable, more charismatic then ever. Its exciting to see that it is reshaping itself for the Cloud world. We are now, close to the first release such that this month first release candidate (RC1) is unleashed. You can take a look to the road map from github.  

MilestoneRelease week Beta6 27 Jul 2015 Beta7 2 Sep 2015 Beta8 15 Oct 2015 RC1 Nov 2015 1.0.0 Q1* 2016

Basically there are 3 main components for ASP.Net 5: 

  • DNVM(.Net Version Manager) which lets you to select the version from a list of ASP.Net versions.
  • DNX(.Net Execution environment) which is the SDK and run-time environment that has everything to build and run .Net applications, for Windows,Mac and Linux.
  • DNU(.Net development utilities) which is fundamental for developing ASP.Net applications. 

With these components, you can develop and build Asp.Net applications which can run on different platforms. Setting up that environment is quite easy and you can follow the guidelines on website. On an untested version of linux, you may go into some issues, due to prerequisites of DNX especially.

In this blog, i want to make a quick overview of setting up an environment on latest version of Ubuntu - 15.10 (Wily Werewolf) on Hyper-v, and want to tell you the difficulties i had, and you can also have.I also set up "Visual Studio Code" for an IDE and "Yeoman" for a code scaffolding tool. 

The officially supported Ubuntu version for "beta-8" version was "Ubuntu 14.04". Because of this, i got some issues on installation of environment and utilities. One was because of a DNX prerequisite, in particular "libicu", and the other was when setting up "Yeoman". Luckily, there is everything you need on internet to workaround these problems. For a Windows guy like me, that was all i need. Here is a summary of the challenges i had, if you also plan to install DNX on "Ubuntu 15.10":

#1 - First of all, i recommend you to first update the package index before applying the instructions on site for DNVM and DNX - Coreclr installations. Below command updates the local package index with the latest changed made in the repositories: 

sudo apt-get update

#2 - After you install the "coreclr" with "DNVM", "dnx" and "dnu" commands was not producing any output. With the following trace output (DNX_TRACE is an environment varible), i discovered that i had the same issue on this ">github article

DNX_TRACE=1 dnx --version

It is an issue with the "libicu" module (a prerequisite for DNX) since "Ubuntu 15.10" uses "libicu55" but "Ubuntu 14.04" was using "libicu52". Installing "libicu52" is finxing the issue on "Ubuntu 15.10".

#3 - You may get a warning on Yeoman installation like "node:not found". It is an issue about remaing of Node.js, for a naming collision with another package. As far as i can see, it can be recovered by following command: 

sudo apt-get install nodejs-legacy

After that you can install "yo" with following command.

sudo npm install -g yo generator-aspnet

Finally i have managed to run my first application on "Ubuntu 15.10" :


Finally i want to give some more small notes about commands for DNVM:

  • "-u" switch let you to install the most recent version: "dnvm install -r coreclr latest -u"
  • You may also want to work with the samples from site via cloning them on linux.
  • A link of "Visual Studio code" should be added like this, to launch it from Terminal easily:  "sudo ln -s /path/to/vscode/Code /usr/local/bin/code"


These are the major things i recall.

Happy coding!


Small Basic - File Error Example: Writing to a Read-Only File

MSDN Blogs - Mon, 11/23/2015 - 02:44

File Error Example: Writing to a Read-Only File

NOTE: This article points back to the "Learn to Program with Small Basic" book. The references to chapter listings refer to that book.


Files have different attributes (such as Read-only, and Hidden). The Read-only attribute means the file can be read but not edited or saved over; it can be used to protect a file from unintentional change. Let’s see how the read-only property can affect your program.

First, modify line 2 of Listing 19-4 so that the specified path’s valid (it exists). In our case, we made this change:

path = "C:\Temp\Out.txt"

Then run the program to create the output file. After that, go to the c:\Temp folder, right-click the Out.txt file, and click Properties in the popup menu that appears. You’ll see a dialog that lets you view and update the file’s attributes (see Figure 19-5). Check the Read-only check box and click OK to apply your changes.

Figure: A part of the file properties dialog


Now run the program again. This time you should see an error message similar to the following:

FAILED: Access to the path 'C:\Temp\Out.txt' is denied.



Remove the Read-only property from Out.txt, and then start Microsoft Excel and open the file. Then run the program again. You should see an error similar to the following:

FAILED: The process cannot access the file 'C:\Temp\Out.txt' because it is being used by another process.


Note:Most applications open files in “shared” mode, which means that other apps can still read from (and sometimes write to) them when are open. However, Excel puts an exclusive lock on files when it opens them.



Do you have any questions? Ask us! We're full of answers and other fine things!

Head to the Small Basic forum to get the most answers to your questions:   

And go to to download Small Basic and learn all about it!


Have a Small and Basic day,

   - Ninja Ed & Majed Marji

Webinar - Outsystems: Entorno rápido de desarrollo de aplicaciones en la nube de Azure

MSDN Blogs - Mon, 11/23/2015 - 01:37

En uno nuestros artículos anteriores presentamos cómo la solución de OutSystems disponible en el Marketplace de Azure ofrecía un entorno de desarrollo de aplicaciones de forma rápida tanto para la web como para dispositivos móviles, tabletas o equipos de sobremesa. Su objetivo era la creación de aplicaciones de línea de negocio reduciendo los costes y el tiempo invertido en su desarrollo a la vez que facilitar a nuestros equipos la integración de nuevas aplicaciones con las soluciones y los flujos de trabajo ya existentes dentro de la compañía.

Si estás interesado en conocer cómo podría beneficiarse tu empresa, el próximo miércoles de noviembre tendrá lugar un webinar online donde podrás encontrar una visión completa de la plataforma a la vez que aprenderás cómo la plataforma puede ayudarte a ti y a tu equipo a planificar, desarrollar, cambiar y desplegar aplicaciones empresariales de distinto nivel de complejidad.

La agenda de la sesión es la siguiente:
  • 10:00-10:10 Introducción sobre Outsystems – Por qué compañías líder e innovadoras son partners de Outsystems?
  • 10:10-10:20 Ejemplos de Soluciones creadas con la plataforma de Outsystems.
  • 10:20-10:50 La Plataforma de Outsystems en acción – ciclo de vida de gestión de aplicaciones web construidas con la plataforma de Outsystems: estimaciones, desarrollo, despliegue, cambios y monitorización + cambio de gestión, análisis de impacto y versiones.
  • 10:50-11:00 Q&A
Os esperamos

José Ángel Fernández
Technical Evangelist


Limitations of the Export to Excel functionality in AX 2012

MSDN Blogs - Mon, 11/23/2015 - 01:35

Exporting data to Excel files is a very useful feature in AX 2012. It allows an easy way to export data from list pages into XLSX files.

When using this feature, some limitations need to be considered, as detailed below.

1. Excel has stricter limitations than data in a database, as mentioned in the following article:
Two hard limits are particularly relevant for AX, the maximum number of rows, 1,048,576, and the maximum number of columns, 16,384.
List pages exceeding these limitations will not be exported to XLSX.

2. In addition to the limitations of the output file format, AX 2012 is also bounded by the memory available to the AX Client process, AX32.exe, which is between 2GB and 4GB depending on the operating system.
The current implementation of AX 2012 requires all data to be cached in memory before the export in order to enable some business scenarios such as Remote Desktop connections.

The consequence of this implementation is that the maximum amount of data that can be exported to XLSX depends on the number of columns, the size of the values in each cell and the number of rows. Because of that variability we have never issued any guidance on the maximum number of rows supported.

To conclude, although the XLSX file format supports up to 1,048,576 rows, AX 2012 might only be able to export a smaller number depending on the actual contents.

In order to overcome this limitation, custom solutions based on the OpenXML SDK can be developed to write table data without caching it in memory. More information about the OpenXML SDK is available here:

Modern Web: Dealing with Plugins

MSDN Blogs - Mon, 11/23/2015 - 01:30

Der findes en række online værktøjer til at hjælpe med at udvikle bedre sites. Der er validators så som W3C’s Markup og CSS validators. Test af hastighed med Google PageSpeed eller Yslow. Microsoft har nu frigivet nogle værktøjer, der hjælper med at kontrollere kompatibilitet på tværs af browsers (Chrome, Safari, Firefox, IE, Edge…).

Test site kompatibilitet med Site Scan, som analyserer, om et site virker lige godt i alle browsere og for manglende ARIA tags osv.

Ud over Site Scan er der følgende andre gratis værktøjer på

Efter at have analyseret millioner af sites er der fem områder, hvor rigtig mange sites fejler. Disse fem områder har vi sammen med bl.a. Microsoft Benelux adresseret med en video og en række blogposts om Modern Web Development.

Det første område omhandler browser plugins, som hverken er understøttet i Microsoft Edge eller Google Chrome.

Dealing with Plugins

Plugins were implemented to give us functionality that browsers and the web standards did not provide us. One such example is showing video content in a website. The web was initially setup to provide documents and links between documents, but not for playing video or audio content. However, plugins have become the main source of security breaches, which is why many of the browser vendors are removing support for plugins entirely. Moreover, many mobile platforms do not support plugins altogether.

As a result, when your website is using plugins, many of your users may actually get a bad browsing experience because the content you’re providing cannot be presented by the user’s browser of choice. Remember, you cannot expect people to use a specific browser or browser version – the user is in total control over that choice.

Embedding video using plugins

As an example, we’ll be adding video content from an mp4 file into our website. We have set up a sample ecommerce website, Fourth Coffee, to demonstrate this.

Traditionally, with plugins, adding video content to your site was done by using the <object> and <embed> HTML tags. These allowed you to specify which external plugin to use and where to download it from.

In the below code sample, we’re using the Apple QuickTime Player plugin to display a video. Similarly, you could also use the Adobe Flash Player or the Microsoft Media Player for this.

<object classid=”clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B”
height=”512″ width=”640″>
<param name=”src“ value=”./Video/contosocoffee.mp4″>
<param name=”autoplay“ value=”true”>
<param name=”type” value=”video/quicktime“ height=”256″ width=”320″>
<embed src=”./Video/contosocoffee.mp4″ height=”256″ width=”320″
autoplay=”true” type=”video/quicktime“

When opening this web page in Internet Explorer 11, which supports plugins, the videos shows correctly, however in Google Chrome or Microsoft Edge, the video is not being shown. So, in this case, users with the latest browsers or surfing your website using their mobile device, will not see your amazing video!

Internet Explorer

Microsoft Edge

Google Chrome

Embedding video content using web standards

With HTML5, the web standard has been extended to include support for audio and video, by means of the <video> and <audio> HTML tags. As these are standards, most of the browsers around nowadays have support for this.

Let’s now look at how to change our website to use the web standards. We start with removing the entire <object> tag, including the <embed> tag. We then replace it with the video HTML tag. As you can see in below code fragment, we also specify the link to our source video file and provide the height, width and auto-playing of the video.

<video src=”./video/contosocoffeE.mp4″ autoplay height=”320″ width=”512″/>

If we now open the same web page in Microsoft Edge, Google Chrome or Mozilla Firefox, we see that the video is correctly displayed. In addition, this video will now also be available when browsing from a mobile platform. Notice that we also get the play controls for free.

Microsoft Edge

Google Chrome

Other plugins

As shown in the above example, for video and audio, the web standard has been extended and gives us built-in support. But what about more specialized plugins that you may be using?

One of the most commonly used plugins is for rendering PDF documents. Many of the browser vendors are starting to incorporate this specific functionality into the browser itself, avoiding the need to install a third-party plugin. Microsoft Edge for example, now has support to render PDF documents inside the browser.

Another common scenario is rendering 3D objects and scenes, which typically required specialized vendor plugins. However, the web community has stepped forward and has built several JavaScript libraries (D3.js, BabylonJS, three.js) that allow 3D rendering inside the browser, without the need for plugins, hence providing a solution across most browsers and platforms.


While plugins were a great solution at the time, they were really a stopgap solution. Moreover, they are becoming a UX and security burden. Because of the evolution of web standards and the advent of JavaScript libraries, there are now solutions for web developers that work across browsers and platforms.

So, before adding a plugin to your website, check if there is not a viable alternative in the web standard or a JavaScript framework that suits your need.

Check your website now for compatibility with the Modern Web! 

Additional resources

For an overview of the 5 things to consider when developing for the modern web, check out our 17-minute video.

Deep Learning – Simple installation guide for Theano on Windows

MSDN Blogs - Mon, 11/23/2015 - 01:25


Many tutorial videos for convolutional neural networks on youtube (e.g.

require the theano python library.

I spent an entire weekend figuring out how to install theano on a windows x64 machine and wanted to share the following quick installation steps:

It`s really simple if you know how! (I found that the official documentation on is a bit overwhelming pointing to so many resources and alternatives. You often end up with misconfigured PATH variables or missing files or wrong compilers etc.)

The following is how it worked for me on a Windows 10 x64 Machine with Visual Studio 2015.

1) Download Anaconda for Windows x64 for Python 2.7 (Don`t use the Python 3.5 it will not work!)

2) After anaconda installation open a command prompt and execute:

conda install mingw libpython

Confirm when it asks for updates!

3) Clone the theano project to your local machine from github. (I assume you know how github works if not check

git clone

4) Open a command prompt and navigate to the theano project folder and execute:

python install

Done! This has installed theano in your global python environment.

You can test your installation by creating a file with the following code line:

import theano

In a command prompt navigate to the folder containing the file and execute:



Btw. as far as I understand, further steps would be required to make theano use the GPU! The installation above would only use the CPU for calculations.

Visual Studio Code for Mac developers: Express

MSDN Blogs - Mon, 11/23/2015 - 01:00

Earlier we discussed how to use Node.js with Visual Studio Code but Node.js is a runtime and if you are going to create an application of specific type (Web, IoT, Notification service module and so on), it’s better to utilize an additional framework. In case of Web applications, I would recommend to use Express framework that is developed for Node.js and contains great API, an application generator and support the best patterns for Web applications.

Before starting you need to install express generator that we will use to create a template for our site. You can do it with the help of the next command:

sudo npm install -g express-generator

Once the generator is installed you can navigate the Terminal to your working folder where you are going to create a new project. To create the project you can use this command:

express myNewWebSite

Of course, this command will not install express itself and all needed components but it will create a new folder and a ready to use web application inside:

Therefore, to finish configuring the application you need to navigate Terminal windows to a new folder and execute npm install. Node.js package manager will add all needed modules and you can type npm start to execute the application. To test the result you need to open a browser and navigate to http://localhost:3000. The latest version of application’s template contains exactly this port.

Ok. We have created our web applications but what about Visual Studio Code? We can open the application folder right now and if you use Visual Studio Code you expect  two important features: IntelliSense and Debugging. Once you open the folder you can see that IntelliSense system doesn’t work properly, because Code knows nothing about node.js and express. But we can provide all needed information using TypeScript Definition files. Visit where you can find express and node.js definition files:


So, using tsd tool you need to execute two commands in context of your project folder:

tsd install express

tsd install node

Right after that you can use VS Code IntelliSense system without any problems.

In order to use Debugger you simply need to create a configuration file (launch.json). To do it, open Debug window and click Start button to force Code to create the configuration file for you. Visual Studio Code is smart enough to check package.json and read all parameters from there. So, in general, you should not modify launch.json – just check that name and program elements refer to ./bin/www:

To run the application in Debug mode, you can open routes/index.js file, set some breakpoint there and click Start button in Debug windows. Once the application is started, open your browser and navigate it to http://localhost:3000. The debugger works great:




Drawing Pictures with Small Basic

MSDN Blogs - Mon, 11/23/2015 - 00:00

Today's topic is how to draw (paint) pictures by programs (or via programming) with Small Basic.

Program can repeat, simulate, calculate and convert.  Following pictures are the samples of these features.

Using Repeat

Have you felt complicated to repeat drawing something similar?  That will be easily done with program.  Following example is to draw geometric pattern.  Program ID is JTH842.  This program draws two patterns alternately in loop for x direction.  And that is repeated also for y direction.

Following kaleidoscope (GTB559-4) is more complex sample of repeat.  This program uses Shapes so that flips the original shapes and rotates them, then repeats to copy them.

Using Random Numbers

To use random numbers is useful to draw such as many stars and flowers.  Program XKB601 determines x and y position using random numbers and draws 1000 stars in the background.

Program VFC190-0 determines x and y positions as well using random numbers, then draws petals for 3000 cherry flowers.

Using Functions and Maths

Program WRG641 draws arcs (for the nose and the tail of an elephant).  The arcs are drawn by arranging circles like fans.  And that are done by calculating with trigonometric functions.  Small Basic does not have an operation to draw arc, but we can draw arc with trigonometric functions.

Program KFJ748-2 is an updated version to draw wood grain.  This program decides colors to draw by the distance from the center of the wood grain.  To let dark part of the ring thin, this program calculates the color with an equation of parabola.

Program KCG090-0 draws sunflowers.  As well as the cherry, positions of flowers are calculated with random numbers.  The seeds (small squares) are calculated with the golden ratio for the angles and trigonometric functions for the positions.  The detail of the golden ratio is written in this site.

Converting Drawn Pictures

Pictures drawn with computers are digital data.  So that can be converted the other format.

Following program Icon Editor can convert raster (dot) picture to PPM file format.  PPM can be read into an free software GIMP.  GIMP can convert it to BMP format, and with other tool it can be converted to icon (ICO fomat) also.

Following screen shot shows that GIMP reads the PPM file created by the Icon Editor.

And the Shapes editor can convert vector (line) pictures to SVG format.  We can write programs to read/write SVG with Small Basic because SVG is a text base file format.  Program XMZ657-1 outputs HTML including SVG of go game board.

Following screen shot is the output HTML generated by this program.

I think the biggest feature of SVG is that can be included directly in HTML5.  But also SVG can be treated by such as GIMP, Inkscape, Illustrator.  Inkscape can convert SVG to WMF (Windows Metafile) or EMF (Enhanced Metafile) format that can be used as clip art from such as PowerPoint (Office suites).

Have fun with Small Basic!

See Also

My experience of the conference: Open Source India 2015

MSDN Blogs - Sun, 11/22/2015 - 23:43

Hello dear reader,

I wanted to share my experience of a conference which I was recently a part of : Open Source India (aka OSI Days) - and as the name suggests, this is a conference where the open source enthusiasts come together, and discuss ideas and knowledge with each other. Check out their website ( to know much more.

I was wearing three hats at the conference - of an attendee, a speaker, and a proctor for some HOLs. And what a power-packed two days it were!

My talk was on IoT – the topic was ‘Build your IoT solutions powered by Python and cloud’, and the abstract can be found here. I took the Sparkfun weather shield and captured the temperature, humidity and the light level in the room. I accessed this data on the serial monitor of the Arduino Uno, and sent this to Raspberry Pi 2. Once this data was captured, I showed how it was possible to push the data to Azure (Events Hub) from Raspberry Pi 2 (running Raspbian) using Python. Once this data was captured, we then saw how to use Stream Analytics to start analyzing the data coming in real-time from Events Hub. All in all – a quick demo of how you can get started with building IoT solutions. I hope the attendees found it useful. The session was probably recorded and I will update the blog with the link once the video is up. Also, feel free to join this group to discuss more on IoT.

Most of my time was spent at the Microsoft booth. Here, we had some hands-on-labs for the attendees on Open Source technologies running on Azure, including Linux VMs on Azure, PHP web apps, Machine Learning, Stream Analytics, etc on Azure. There was not a single time when there wasn’t a queue waiting to get inside the lab room – throughout the two days! This meant that I and my team had two good field days :). We saw people getting excited on running Machine Learning on Azure, SSH into a Linux VM hosted on Azure, create a Logic App connecting SaaS services, or even hosting a website. They saw hands-on how cloud can help them in their journey, and we hope this helped them realize the value of cloud.

As an attendee, I got to attend some portion of a few sessions, and was impressed by the content being presented. All in all, we had a good two days interacting with open source enthusiasts.

Until next time,
Saurabh Kirtani

Feel free to reach out to me on Twitter @saurabhkirtani to discuss anything about this blog.

Na okraj webu a ještě dál s Microsoft Edge

MSDN Blogs - Sun, 11/22/2015 - 23:20
O základech přípravy webu pro Microsoft Edge jsme už psali – výhodou je, že pravidla a doporučení jsou stejná pro Edge i pro Chrome, Safari a ostatní moderní browsery. Skutečnost, že Microsoft má najednou prohlížeč, který hledí dopředu a který budou záhy používat miliony uživatelů po celém světě (na PC i mobilech), s sebou nese ještě jeden příjemný vedlejší...(read more)

Visual C++ 生成工具2015公告——生成环境中独立的C++工具

MSDN Blogs - Sun, 11/22/2015 - 22:15
[原文发表地址] Announcing Visual C++ Build Tools 2015 – standalone C++ tools for build environments [原文发表时间]2015/11/2 12:04 PM 在Visual Studio 2015 Update 1 RC 发布可用的同时,我们也宣布了一种获得C++工具的新方式:作为一个独立安装包仅包含生成C++工程需要的工具,而不用安装Visual Studio IDE。这意味着在你的生成环境中和连续的集成系统中C++生成工具实现了更高效的交付。 当与你们交谈时,这是最迫切的需求之一,希望新的安装程序将会减少安装时间,并在实验环境下或你没有做C++开发但的确需要这个工具生成C++代码的情况下提供更简单的生成系统。 在 Update1 中我应该期望什么 ? 在Update 1 中,我们正在做这个安装包的预发布,希望听到它是否满足你的需求和可以改进的方式,请通过下面的评论或 Connect 提交你的反馈信息。 下载Visual C++生成工具 2015(预发布版...(read more)

[Sample Of Nov. 20] How to zoom in/out the content in WebView in Universal Windows Platform

MSDN Blogs - Sun, 11/22/2015 - 17:59
Nov. 20 Sample : This code sample will show you how to zoom in/out the content in WebView in UWP. 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 samples in a centralized...(read more)


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