Posted on Leave a comment

ASP.NET Core updates in .NET Core 3.0 Preview 2

.NET Core 3.0 Preview 2 is now available and it includes a bunch of new updates to ASP.NET Core.

Here’s the list of what’s new in this preview:

  • Razor Components
  • SignalR client-to-server streaming
  • Pipes on HttpContext
  • Generic host in templates
  • Endpoint routing updates

Get started

To get started with ASP.NET Core in .NET Core 3.0 Preview 2 install the .NET Core 3.0 Preview 2 SDK

If you’re on Windows using Visual Studio, you’ll also want to install the latest preview of Visual Studio 2019.

Upgrade an existing project

To upgrade an existing an ASP.NET Core app to .NET Core 3.0 Preview 2, follow the migrations steps in the ASP.NET Core docs.

Add package for Json.NET

As part of the work to tidy up the ASP.NET Core shared framework, Json.NET is being removed from the shared framework and now needs to be added as a package.

To add back Json.NET support to an ASP.NET Core 3.0 project:

Runtime compilation removed

As a consequence of cleaning up the ASP.NET Core shared framework to not depend on Roslyn, support for runtime compilation of pages and views has also been removed in this preview release. Instead compilation of pages and views is performed at build time. In a future preview update we will provide a NuGet packages for optionally enabling runtime compilation support in an app.

Other breaking changes and announcements

For a full list of other breaking changes and announcements for this release please see the ASP.NET Core Announcements repo.

Build modern web UI with Razor Components

Razor Components are a new way to build interactive client-side web UI with ASP.NET Core. This release of .NET Core 3.0 Preview 2 adds support for Razor Components to ASP.NET Core and for hosting Razor Components on the server. For those of you who have been following along with the experimental Blazor project, Razor Components represent the integration of the Blazor component model into ASP.NET Core along with the server-side Blazor hosting model. ASP.NET Core Razor Components is a new capability in ASP.NET Core to host Razor Components on the server over a real-time connection.

Working with Razor Components

Razor Components are self-contained chunks of user interface (UI), such as a page, dialog, or form. Razor Components are normal .NET classes that define UI rendering logic and client-side event handlers, so you can write rich interactive web apps without having to write any JavaScript. Razor components are typically authored using Razor syntax, a natural blend of HTML and C#. Razor Components are similar to Razor Pages and MVC Views in that they both use Razor. But unlike pages and views, which are built around a request/reply model, components are used specifically for handling UI composition.

To create, build, and run your first ASP.NET Core app with Razor Components run the following from the command line:

dotnet new razorcomponents -o WebApplication1
cd WebApplication1
dotnet run

Or create an ASP.NET Core Razor Components in Visual Studio 2019:

Razor Components template

The generated solution has two projects: a server project (WebApplication1.Server), and a project with client-side web UI logic written using Razor Components (WebApplication1.App). The server project is an ASP.NET Core project setup to host the Razor Components.

Razor Components solution

Why two projects? In part it’s to separate the UI logic from the rest of the application. There is also a technical limitation in this preview that we are using the same Razor file extension (.cshtml) for Razor Components that we also use for Razor Pages and Views, but they have different compilation models, so they need to kept separate. In a future preview we plan to introduce a new file extension for Razor Components (.razor) so that you can easily host your components, pages, and views all in the same project.

When you run the app you should see multiple pages (Home, Counter, and Fetch data) on different tabs. On the Counter page you can click a button to increment a counter without any page refresh. Normally this would require writing JavaScript, but here everything is written using Razor Components in C#!

Razor Components app

Here’s what the Counter component code looks like:

@page "/counter"

<h1>Counter</h1>

<p>Current count: @currentCount</p>

<button class="btn btn-primary" onclick="@IncrementCount">Click me</button>

@functions {
 int currentCount = 0;

 void IncrementCount()
 {
 currentCount+=1;
 }
}

Making a request to /counter, as specified by the @page directive at the top, causes the component to render its content. Components render into an in-memory representation of the render tree that can then be used to update the UI in a very flexible and efficient way. Each time the “Click me” button is clicked the onclick event is fired and the IncrementCount method is called. The currentCount gets incremented and the component is rendered again. The runtime compares the newly rendered content with what was rendered previously and only the changes are then applied to the DOM (i.e. the updated count).

You can use components from other components using an HTML-like syntax where component parameters are specified using attributes or child content. For example, you can add a Counter component to the app’s home page like this:

@page "/"

<h1>Hello, world!</h1>

Welcome to your new app.

<Counter />

To add a parameter to the Counter component update the @functions block to add a property decorated with the [Parameter] attribute:

@functions {
 int currentCount = 0;

 [Parameter] int IncrementAmount { get; set; } = 1;

 void IncrementCount()
 {
 currentCount+=IncrementAmount;
 }
}

Now you can specify IncrementAmount parameter value using an attribute like this:

<Counter IncrementAmount="10" />

The Home page then has it’s own counter that increments by tens:

Count by tens

This is just an intro to what Razor Components are capable of. Razor Components are based on the Blazor component model and they support all of the same features (parameters, child content, templates, lifecycle events, component references, etc.). To learn more about Razor Components check out the component model docs and try out building your first Razor Components app yourself.

Hosting Razor Components

Because Razor Components decouple a component’s rendering logic from how the UI updates get applied, there is a lot of flexibility in how Razor Components can be hosted. ASP.NET Core Razor Components in .NET Core 3.0 adds support for hosting Razor Components on the server in an ASP.NET Core app where all UI updates are handled over a SignalR connection. The runtime handles sending UI events from the browser to the server and then applies UI updates sent by the server back to the browser after running the components. The same connection is also used to handle JavaScript interop calls.

ASP.NET Core Razor Components

Alternatively, Blazor is an experimental single page app framework that runs Razor Components directly in the browser using a WebAssembly based .NET runtime. In Blazor apps the UI updates from the Razor Components are all applied in process directly to the DOM.

Blazor

Support for the client-side Blazor hosting model using WebAssembly won’t ship with ASP.NET Core 3.0, but we are working towards shipping it with a later release.

Regardless of which hosting model you use for your Razor Components, the component model is the same. The same Razor Components can be used with either hosting model. You can even switch your app back and forth from being a client-side Blazor app or Razor Components running in ASP.NET Core using the same components as long as your components haven’t taken any server specific dependencies.

JavaScript interop

Razor Components can also use client-side JavaScript if needed. From a Razor Component you can call into any browser API or into an existing JavaScript library running in the browser. .NET library authors can use JavaScript interop to provide .NET wrappers for JavaScript APIs, so that they can be conveniently called from Razor Components.

public class ExampleJsInterop
{
 public static Task<string> Prompt(this IJSRuntime js, string text)
 {
 // showPrompt is implemented in wwwroot/exampleJsInterop.js
 return js.InvokeAsync<string>("exampleJsFunctions.showPrompt", text);
 }
}
@inject IJSRuntime JS

<button onclick="@OnClick">Show prompt</button>

@functions {
 string name;

 async Task OnClick() {
 name = await JS.Prompt("Hi! What's you're name?");
 }
}

Both Razor Components and Blazor share the same JavaScript interop abstraction, so .NET libraries relying on JavaScript interop are usable by both types of apps. Check out the JavaScript interop docs for more details on using JavaScript interop and the Blazor community page for existing JavaScript interop libraries.

Sharing component libraries

Components can be easily shared and reused just like you would normal .NET classes. Razor Components can be built into component libraries and then shared as NuGet packages. You can find existing component libraries on the Blazor community page.

The .NET Core 3.0 Preview 2 SDK doesn’t include a project template for Razor Component Class Libraries yet, but we expect to add one in a future preview. In meantime, you can use Blazor Component Class Library template.

dotnet new -i Microsoft.AspNetCore.Blazor.Templates
dotnet new blazorlib

In this preview release ASP.NET Core Razor Components don’t yet support using static assets in component libraries, so the support for component class libraries is pretty limited. However, in a future preview we expect to add this support for using static assets from a library just like you can in Blazor today.

Integration with MVC Views and Razor Pages

Razor Components can be used with your existing Razor Pages and MVC apps. There is no need to rewrite existing views or pages to use Razor Components. Components can be used from within a view or page. When the page or view is rendered, any components used will be prerendered at the same time.

To render a component from a Razor Page or MVC View in this release, use the RenderComponentAsync<TComponent> HTML helper method:

<div id="Counter">
 @(await Html.RenderComponentAsync<Counter>(new { IncrementAmount = 10 }))
</div>

Components rendered from pages and views will be prerendered, but are not yet interactive (i.e. clicking the Counter button doesn’t do anything in this release). This will get addressed in a future preview, along with adding support for rendering components from pages and views using the normal element and attribute syntax.

While views and pages can use components the converse is not true: components can’t use views and pages specific features, like partial views and sections. If you want to use a logic from partial view in a component you’ll need to factor that logic out first as a component.

Cross platform tooling

Visual Studio 2019 comes with built-in editor support for Razor Components including completions and diagnostics in the editor. You don’t need to install any additional extensions.

Razor Components tooling

Razor Component tooling isn’t available yet in Visual Studio for Mac or Visual Studio Code, but it’s something we are actively working on.

A bright future for Blazor

In parallel with the ASP.NET Core 3.0 work, we will continue ship updated experimental releases of Blazor to support hosting Razor Components client-side in the browser (we’ll have more to share on the latest Blazor update shortly!). While in ASP.NET Core 3.0 we will only support hosting Razor Components in ASP.NET Core, we are also working towards shipping Blazor and support for running Razor Components in the browser on WebAssembly in a future release.

SignalR client-to-server streaming

With ASP.NET Core SignalR we added Streaming support, which enables streaming return values from server-side methods. This is useful for when fragments of data will come in over a period of time.

With .NET Core 3.0 Preview 2 we’ve added client-to-server streaming. With client-to-server streaming, your server-side methods can take instances of a ChannelReader<T>. In the C# code sample below, the StartStream method on the Hub will receive a stream of strings from the client.

public async Task StartStream(string streamName, ChannelReader<string> streamContent)
{
 // read from and process stream items
 while (await streamContent.WaitToReadAsync(Context.ConnectionAborted))
 {
 while (streamContent.TryRead(out var content))
 {
 // process content
 }
 }
}

Clients would use the SignalR Subject (or an RxJS Subject) as an argument to the streamContent parameter of the Hub method above.

let subject = new signalR.Subject();
await connection.send("StartStream", "MyAsciiArtStream", subject);

The JavaScript code would then use the subject.next method to handle strings as they are captured and ready to be sent to the server.

subject.next("example");
subject.complete();

Using code like the two snippets above, you can create real-time streaming experiences. For a preview of what you can do with client-side streaming with SignalR, take a look at the demo site, streamr.azurewebsites.net. If you create your own stream, you can stream ASCII art representations of image data being captured by your local web cam to the server, where it will be bounced out to other clients who are watching your stream.

Client-to-server Streaming with SignalR

System.IO.Pipelines on HttpContext

In ASP.NET Core 3.0, we’re working on consuming the System.IO.Pipelines API and exposing it in ASP.NET Core to allow you to write more performant applications.

In Preview 2, we’re exposing the request body pipe and response body pipe on the HttpContext that you can directly read from and write to respectively in addition to maintaining the existing Stream-based APIs.
While these pipes are currently just wrappers over the existing streams, we will directly expose the underlying pipes in a future preview.

Here’s an example that demonstrates using both the request body and response body pipes directly.

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
 if (env.IsDevelopment())
 {
 app.UseDeveloperExceptionPage();
 }

 app.UseRouting(routes =>
 {
 routes.MapGet("/", async context =>
 {
 await context.Response.WriteAsync("Hello World");
 });

 routes.MapPost("/", async context =>
 {
 while (true)
 {
 var result = await context.Request.BodyPipe.ReadAsync();
 var buffer = result.Buffer;

 if (result.IsCompleted)
 {
 break;
 }

 context.Request.BodyPipe.AdvanceTo(buffer.End);
 }
 });
 });
}

Generic host in templates

The templates have been updated to use the Generic Host instead of WebHostBuilder as they have in the past:

public static void Main(string[] args)
{
 CreateHostBuilder(args).Build().Run();
}

public static IHostBuilder CreateHostBuilder(string[] args) =>
 Host.CreateDefaultBuilder(args)
 .ConfigureWebHostDefaults(webBuilder =>
 {
 webBuilder.UseStartup<Startup>();
 });

This is part of the ongoing plan started in 2.0 to better integrate ASP.NET Core with other server scenarios that are not web specific.

What about IWebHostBuilder?

The IWebHostBuilder interface that is used with WebHostBuilder today will be kept, and is the type of the webBuilder used in the sample code above. We intend to deprecate and eventually remove WebHostBuilder itself as its functionality will be replaced by HostBuilder, though the interface will remain.

The biggest difference between WebHostBuilder and HostBuilder is that you can no longer inject arbitrary services into your Startup.cs. Instead you will be limited to the IHostingEnvironment and IConfiguration interfaces. This removes a behavior quirk related to injecting services into Startup.cs before the ConfigureServices method is called. We will publish more details on the differences between WebHostBuilder and HostBuilder in a future deep-dive post.

Endpoint routing updates

We’re excited to start introducing more of the Endpoint Routing story that began in 2.2. Endpoint routing allows frameworks like MVC as well as other routable things to mix with middleware in a way that hasn’t been possible before. This is now present in the project templates in 3.0.0-preview-2, we’ll continue to add more richness as we move closer to a final release.

Here’s an example:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
 if (env.IsDevelopment())
 {
 app.UseDeveloperExceptionPage();
 }

 app.UseStaticFiles();

 app.UseRouting(routes =>
 {
 routes.MapApplication();

 routes.MapGet("/hello", context =>
 {
 return context.Response.WriteAsync("Hi there!"); 
 });

 routes.MapHealthChecks("/healthz");
 });

 app.UseAuthentication();
 app.UseAuthorization();
}

There’s a few things to unpack here.

First, the UseRouting(...) call adds a new Endpoint Routing middleware. UseRouting is at the core of many of the templates in 3.0 and replaces many of the features that were implemented inside UseMvc(...) in the past.

Also notice that inside UseRouting(...) we’re setting up a few things. MapApplication() brings in MVC controllers and pages for routing. MapGet(...) shows how to wire up a request delegate to routing. MapHealthChecks(...) hooks up the health check middleware, but by plugging it into routing.

What might be surprising to see is that some middleware now come after UseRouting. Let’s tweak this example to demonstrate why that is valuable.

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
 if (env.IsDevelopment())
 {
 app.UseDeveloperExceptionPage();
 }

 app.UseStaticFiles();

 app.UseRouting(routes =>
 {
 routes.MapApplication();

 routes.MapGet("/hello", context =>
 {
 return context.Response.WriteAsync("Hi there! Here's your secret message"); 
 })
 .RequireAuthorization(new AuthorizeAttribute(){ Roles = "secret-messages", });

 routes.MapHealthChecks("/healthz").RequireAuthorization("admin");
 });

 app.UseAuthentication();
 app.UseAuthorization();
}

Now I’ve added an AuthorizeAttribute to my request delegate. This is just like placing [Authorize(Roles = "secret-messages")] on an action method in a controller. We’ve also given the health checks middleware an authorization policy as well (by policy name).

This works because the following steps happen in order (ignoring what happens before routing):

  1. UseRouting(...) makes a routing decision – selecting an Endpoint
  2. UseAuthorization() looks at the Endpoint that was selected and runs the corresponding authorization policy
  3. hidden… At the end of the middleware pipeline the Endpoint is executed (if no endpoint was matched then a 404 response is returned)

So think of UseRouting(...) as making a deferred routing decision – where middleware that appear after it run in the middle. Any middleware that run after routing can see the results and read or modify the route data and chosen endpoint. When processing reaches the end of the pipeline, then the endpoint is invoked.

What is an Endpoint and why did we add this?

An Endpoint is a new primitive to help frameworks (like MVC) be friends with middleware. Fundamentally an Endpoint is a request delegate (something that can execute) plus a bag of metadata (policies).

Here’s an example middleware – you can use this to examine endpoints in the debugger or by printing to the console:

app.Use(next => (context) =>
{
 var endpoint = context.GetEndpoint();
 if (endpoint != null)
 {
 Console.WriteLine("Name: " + endpoint.DisplayName);
 Console.WriteLine("Route: " + (endpoint as RouteEndpoint)?.RoutePattern);
 Console.WriteLine("Metadata: " + string.Join(", ", endpoint.Metadata));
 }

 return next(context);
});

In the past we haven’t had a good solution when we’ve wanted to implement a policy like CORS or Authorization in both middleware and MVC. Putting a middleware in the pipeline feels very good because you get to configure the order. Putting filters and attributes on methods in controllers feels really good when you need to apply policies to different parts of the application. Endpoints bring togther all of these advantages.

As an addition problem – what do you do if you’re writing the health checks middleware? You might want to secure your middleware in a way that developers can customize. Being able to leverage the ASP.NET Core features for this directly avoids the need to build in support for cross-cutting concerns in every component that serves HTTP.

In addition to removing code duplication from MVC, the Endpoint + Middleware solution can be used by any other ASP.NET Core-based technologies. You don’t even need to use UseRouting(...) – all that is required to leverage the enhancements to middleware is to set an Endpoint on the HttpContext.

What’s integrated with this?

We added the new authorize middleware so that you can start doing more powerful security things with just middleware. The authorize middleware can accept a default policy that applies when there’s no endpoint, or the endpoint doesn’t specify a policy.

CORS is also now endpoint routing aware and will use the CORS policy specified on an endpoint.

MVC also plugs in to endpoint routing and will create endpoints for all of your controllers and pages. MVC can now be used with the CORS and authorize features and will largely work the same. We’ve long had confusion about whether to use the CORS middleware or CORS filters in MVC, the updated guidance is to use both. This allows you to provide CORS support to other middleware or static files, while still applying more granular CORS policies with the existing attributes.

Health checks also provide methods to register the health checks middleware as a router-ware (as shown above). This allows you to specify other kinds of policies for health checks.

Finally, new in ASP.NET Core 3.0 preview 2 is host matching for routes. Placing the HostAttribute on an MVC controller or action will prompt the routing system to require the specified domain or port. Or you can use RequireHost in your Startup.cs:

app.UseRouting(routes =>
{
 routes.MapGet("/", context => context.Response.WriteAsync("Hi Contoso!"))
 .RequireHost("contoso.com");

 routes.MapGet("/", context => context.Response.WriteAsync("Hi AdventureWorks!"))
 .RequireHost("adventure-works.com");

 routes.MapHealthChecks("/healthz").RequireHost("*:8080");
});

Do you think that there are things that are missing from the endpoint story? Are there more things we should make smarter or more integrated? Please let us know what you’d like to see.

Give feedback

We hope you enjoy the new features in this preview release of ASP.NET Core! Please let us know what you think by filing issues on Github.

Posted on Leave a comment

PHP 7.3.1 Released

The PHP development team announces the immediate availability of PHP 7.3.1. This is a security release which also contains several bug fixes. All PHP 7.3 users are encouraged to upgrade to this version. For source downloads of PHP 7.3.1 please visit our downloads page. Windows binaries can be found on the PHP for Windows site. The list of changes is recorded in the ChangeLog. Release Announcement: http://php.net/releases/7_3_1.php Downloads: http://www.php.net/downloads Windows downloads: http://windows.php.net/download Changelog: http://www.php.net/ChangeLog-7.php#7.3.1 Many thanks to all the contributors and supporters! Stanislav Malyshev, Christoph M. Becker php-7.3.1.tar.bz2 SHA256 hash: afef2b0cd7f2641274a1a0aabe67e30f2334970d7c530382dfa9d79cfe74388e PGP signature: -----BEGIN PGP SIGNATURE----- iQJABAABCAAqFiEEy69p8XOg/qS1N/Rw1myVkxGLzLYFAlw0tAcMHGNtYkBwaHAu bmV0AAoJENZslZMRi8y2a/cP+wVaHw0Jqg7CidjH/UJEnROtd4CFiK9VOQ2CBh8o T650GBSEhin7525+mH4ofSKD2M6/+8cXZ4wTCaBvCIepyn1pV78Y47fDoEZccIlR GNvgLw4NMmViJPH8CfYbIExDcfRdtLc09irFrKv9JY0mjoUCqUHUg8xIvGCP/Pb0 uxe6BRiiN11Ji+7iCfX4sA+hioAtpnCJ1LCi6IUV1lowTVFct9I/ayaI2q9ztZPK eKv3aYTqe/oOpAwYI7aByt1oaufLleGPA5iUU0mXqX5TLhcdaiaaxSkffLlEDVEE N5UOBdd7uCb8PgaB0qQoZV74jfQmV8MDHdMLxpSqL0vEzvRZpT45ZvQt7dsaF5h1 Edne9+/7Nn/w6QohuETm4/6wCD7cpZ+BbZoqBWzVyovfk5a0oGZCIsGkpx6Swr/t rneoFcpACfH3P6p/vHa+Iki4ON0jgte2g37v1BaH1OrxTM90tWDydXpNT4PYhaC+ 0CSKOKVoZ5TGWQZXDIj4w1bbYeFvfH+3oDP74NX3W262oTypNcaKOPN2R+E2deCk AJZiJAdr7OfA1bJn1fiOZI4hmgi/GvXpWqQNhWJPTj/bxwheNKcfPYpv6CxWL/NW K3VjMueBPG0rWlz8p/lWWSP1+ZvzZHovdV/lI+puYLIThcz2cwc28fYaHIQ7f6AK Sgnq =7amr -----END PGP SIGNATURE----- php-7.3.1.tar.gz SHA256 hash: 8006211f7a041dde22fffedc416d142e0ebf22066014077ca936d7e6f655ead5 PGP signature: -----BEGIN PGP SIGNATURE----- iQJABAABCAAqFiEEy69p8XOg/qS1N/Rw1myVkxGLzLYFAlw0tA8MHGNtYkBwaHAu bmV0AAoJENZslZMRi8y2sZoP/jgkG1esWDByEicS5sXNy0NVPW/VE2tIc+jEBRxV Nh8De4qaR0moU45zUABbQ4zkB7/QNi+W+cUJoK2AdXh/Un1vGLFhu8Wbm9nDGZyy 3pv/Kf52BC10UGp13oGsJtIryD1Wi88XevQV3l4NbI3gCOss0nIVkBeZI7Vfommi jiicqdZhURbWi9M2magpbm/Nu5K3h2NoRcLV894APJ6SO47sb4lR5rqdGvnQd9M1 FO7C6/0gNj+FCzGFsuOpOJf3Rh0QGZ9dy9K+3BJfUIAnFsQYingfgu2wvb7Dh5Sg NOiekfQaocYlHE5YZ0FopSOVuo0AyH/Eah8G3pF8ER+Db/e/EDSL9X16ZBHaxSkc UlttJXph5EqarsicbiIcpi/WwVn3PGw89foaJ2tXS7VT677uGkVrtMOsNFEA6mJ/ rUjK7YTz7Zds3EB7n5x/a0D0qe5qDwhO4qX3KDs0iED17MdPnzrhBRQhK2xzbWO1 wzFWdNdIIMtcrvpM/zBvY69IUYiI3DLyQBXaXhOLVGKeSibbqjscqTkeP6fSdteI Vt5+HgHFF6so6JKLJp7gdm8d+hxpAjlXj+PF8BqHn5Xdmo3n7TwrdJc9Gc6d5G+x nL4oIYl1m5tW3Kp41Z4YWqZ0AlQfn4KMOepm/BYFFlsDo/v7jyxXI5xrjrrSoyyy NC9S =xKVm -----END PGP SIGNATURE----- php-7.3.1.tar.xz SHA256 hash: cfe93e40be0350cd53c4a579f52fe5d8faf9c6db047f650a4566a2276bf33362 PGP signature: -----BEGIN PGP SIGNATURE----- iQJABAABCAAqFiEEy69p8XOg/qS1N/Rw1myVkxGLzLYFAlw0tA8MHGNtYkBwaHAu bmV0AAoJENZslZMRi8y2jCcP/2vDID0ZugOJRGtfb0Ph3RBV87mwVk/5X97kTCSL dsKx8Rny2ZKbAd3epUrp0kXADfmzPtH1SaStR/FiJ7GC85XCvaoYcTZBijSVp3RI PMqxkrAjXGf98QJPAYdVA4c1o3g291h+2rg8+6NVXZ1ruO55UXqybqDDoH8XTw6g bAE6uVzEfndMAt1KHnhlf/6mC1aTfaFNUmI6V9AyijrOh0XU0NFrfhIGX3DQQhlZ YxdpkU7x2PEgx+lVtQSQJeKJZgZq+ToutgfAfqP5bT8tzMM4gESFEq+6I9nm5qTs KvV9u3aYGoq1KDyXbVXdi5OcOwq8K+S05lNjV8iqDPnu4Em1qfh6S+BF498fF3cL pVKf7TiVpKFIvap092W0LNDcUIK7mP91k5zfVXYxm6Buo5tOxrDyT131PyaI4rz/ 6NBGL8CBG7mtzwk65fb4Zs9vsrn9KAyE66tVyRTmp9hgw4boJhrKggeJX5VOBraE /n9ihsND8O1BOK8eKxhRyi3qnRjTIZz/4oLuSnsXVRxBWY2DalF1gsjLb2NaChaz NIZ3VPeygV5s3TPiGUqOjyl8lENKxrCUx8B8TEoCF5EBKlyRUkhQxY0CVbajj+Hv fEruL+vUdrOinhwI8OlrX/8Q/Om5CdsEeeGq+fhnR94G6doHiPczYYn4HR7O/pbq YDm8 =aD/P -----END PGP SIGNATURE-----
Posted on Leave a comment

PHP 7.2.14 Released

Hi, The PHP development team announces the immediate availability of PHP 7.2.14. This is a security release which also contains several minor bug fixes. All PHP 7.2 users are encouraged to upgrade to this version. For source downloads of PHP 7.2.14 please visit our downloads page. Windows binaries can be found on the PHP for Windows site. The list of changes is recorded in the ChangeLog. Release Announcement: http://php.net/releases/7_2_8.php Downloads: http://www.php.net/downloads Windows downloads: http://windows.php.net/download Changelog: http://www.php.net/ChangeLog-7.php#7.2.14 Many thanks to all the contributors and supporters! Sara Golemon, Remi Collet php-7.2.14.tar.gz SHA256 hash: 87e13d80b0c3a66bd463d1cb47dc101335884a0d192ab924f547f8aed7f70c08 PGP signature: -----BEGIN PGP SIGNATURE----- iQIcBAABAgAGBQJcNHXWAAoJENyf+NPuWvJ/ttcP/1Fxe9eqjpJocY0TdrlWA8p2 XJJyaEkaKFR7NatHqMtk3U6iq/650QoJ1kgylghnn+vh9AYPb4pb3v9uuJawpB6P yL6tr+LcuHOhGFCz5y/VODfMcjl2Qa1huFm31oGLZ5XppOaFrRCeYUQx7+8ykzbF u0YuPtO8IbrHATzK6AT0IsHPUjoBuMP46KeysYeU0QtFCuUWBQrcr5N8+tBxyyrW RVjijczVSoCepYpI8JZfSs5X7crEwzrjABHxLbnoaI6thZypVxQnelFSMKTzb3L8 K8acofP/VERpWXy5JLazRC/cLNq18p9NfkZV39jiJ8Np2zV5kNekCeVVSZnduYYZ v2kTNChkeOUG3ruM4qYLg6/LWOQW3oIZBlvSfgjEReSOIoEyiM7e16a9Q4sXzfrf oxYTQ0VFCn9yyYWAzW3HPrjbf84+a5pMD4rpEkZEvBTsc9fOHU4+2lCqI7+Eg1sS RJjfxA2Fm1ltiZ8ftwieaCL4WMzI8MsXU5ZjbaezBgNzwr2JCZPlfRFdCvmIzbp3 2Ynnmf5ilLh6RlqApTp95r/oxG8E9F6AgNBGOox5a1kFyxgEzD6IwMgwwiXrTaUX EpYd7LH6I3uj9hh8UyD2Qr268pWUQiyRv8wKMKrySBHJLZ3AoCrz+x/qTtKNevRV BaJCW4Csu0obZ8hu/3N2 =cjUP -----END PGP SIGNATURE----- php-7.2.14.tar.bz2 SHA256 hash: f56132d248c7bf1e0efc8a680a4b598d6ff73fc6b9c84b5d7b539ad8db7a6597 PGP signature: -----BEGIN PGP SIGNATURE----- iQIcBAABAgAGBQJcNHXZAAoJENyf+NPuWvJ/lZ0P/imzRm9JJfVtrZHkD11r9xoc ag3OeP4Z8Yb1cYS/qY757FNqQ3az7+OeCSLkAmlMnjw1rKMJoNMFGBZg4Iifw1FY C0VdsztdXULwuyAKDHkupIGw7POljxdqNFj6E40bJ2cpR5GbOHpGSVI/PsbIQToI D0HMBROE9NHNeiMhL5zYoqN0NDgF2zIke2DrjT/QM447HwuqGhXD13PxV24dnuFY Eb9MnD1WKIW567sqCqXoaWm840IduAOrEc6iUkjh399ZibnMlhhytdsjDdkge9Va SfscLLbe/S8/2mhWQuOQQl8A34hPQL60lADRcNU3QjvFkroyaiqQpo4VzmYZBRH7 e26BQRkz0VHEw8p9aBtx0KC52t62g/GGKAcjMu5fmXzas/H4Wi2ZqIJW0A9/fIOK yrGDh+FosQcy5PARRjiqgqiZfR0oa5xaM2p0qEuLtgF/T22l1/KC8NVYbXbda9I0 gNYS6JWlX5417N81iERwix/7J2sYF/hCr+TlOIjhDeyw1GfmuSjvwalfSjSrzbeA v3K23gndu5h1l6hSa/HtTNPINJoQrLbtVCdF/5tXfWlxyt39qybsPyMbRvdd2rNO uQqpR4PUD1y2eEissweMRZH/p9lj8HvWSOpQxmoewLf1xM63A5pip4d7qDcADi4V ScITFEvJUeSlPJMgYRW+ =YFNe -----END PGP SIGNATURE----- php-7.2.14.tar.xz SHA256 hash: ee3f1cc102b073578a3c53ba4420a76da3d9f0c981c02b1664ae741ca65af84f PGP signature: -----BEGIN PGP SIGNATURE----- iQIcBAABAgAGBQJcNHXcAAoJENyf+NPuWvJ/kSwP/jfalF7CSBXDZ+BI8sAY1uOX hVMAmlGPkTLv9PTjAHpmMABVbHGKaZ3KPt2DqP0z8prc/hGFCR2LFAyLXFBb3RT6 Do0IgIXCqK831+AbprGca0MVRu0uXR4ryiBXi683LqTHUSspI/brjabAnIgvw7LM 6j0YtRHKfwonm5Chk8b8WtZ9md9gwqxknVXimKdv3nISQiXRVAHfEo/UOnc+tpos HYc6ymQB73BBjvI3O4wUwnIGhVuXL0rgp9zhHNrBI6+kHcY7gb/y7OryPYdxBGvY AXaCG7+xoGDoqpRir0+omd+eyEIZRofNaT+HRp9/nXdBCXGsK7YBYYR0Z1qgox8E 7vhRvUgE/dLlC/PHcEqs2KNSOFzrMvUahDTMbmDkDTFCvm54PNZoLpuQfP9zL1rd BWK1weDTk1KZUw+h4Bt56bY3odw0hhgoYYKabgslMsF4FwvMi7O6AJ08WIu50l0h 6BJpJyS5A8SZCnoGhToYv8A8KJzwWRU5szU8hEl9P1w1InZ3Eb7KWj8PIyJ5LSdX Q38rSnLFBUOro9i89pRkpIHDKzgCq5FaRJsDPOxQHHByy8az6vdcgrcSd5/RNMN3 H1m6ADq8MD21yIi+k8T4vZVtDMmqNLxDw7zkqZ8P3Dc28LNkVFsqvhZqJ6y20qmg ak+LNaaUOncRBqXV1o1S =SD/6 -----END PGP SIGNATURE-----
Posted on Leave a comment

Microsoft’s Redmond campus modernization update: Demolition begins

Stack of white hardhats bearing the Microsoft logo

Today marks the next milestone in Microsoft’s campus modernization effort. Deconstruction is beginning, and buildings will start coming down.

When the project is complete, the new campus will provide a modern workplace and create greater collaboration and community. To commemorate the original buildings, the company offered an exclusive opportunity for a group of employees to say goodbye to the original campus with a demolition party to kick off the destruction. On Tuesday, one employee and nine of his teammates (who collectively donated money to charity to win the experience via the Employee Giving Campaign auction) took to the company’s first buildings equipped with hard hats, sledgehammers and “the claw.” Check out some highlights from the fun below:

“It is great to see the interest and excitement from employees for the campus modernization,” said Michael Ford, Microsoft general manager of global real estate and security. “Our employees are crucial to building an exceptional place to work, and this event was a great way to kick off this journey together.”

Moving forward

Over the next few months, Microsoft will continue the decommissioning and demolition of 12 buildings, embracing sustainable practices throughout the process.

In 2016, Microsoft became the first technology company in the U.S. to be certified Zero Waste for diverting at least 90 percent of its waste from the landfill. The company’s goal with this project is to remain in line with this certification for construction materials and divert a majority of building materials from the landfill. This means focusing on reusing, donating and recycling. From concrete and steel framing to carpets, ceiling tiles, electronic and networking gear, interior debris and loose assets like furniture, chairs and whiteboards, to even the artificial turf outside — most of the materials in the old spaces will find a new life.

“We strive to make a positive impact on the community,” Ford said. “We’re putting a lot of effort behind finding innovative ways to reduce our impact and optimize our resource usage.”

Beyond what is being recycled, the company is also considering where materials will be processed. To maximize sustainability, Microsoft’s construction team is engaging with local waste processing and recycling companies to study and prioritize the hauling distances to further shrink the project’s construction carbon footprint.

“Corporate and environmental responsibility are equally as important as budget and schedule — and we are aligning our design and construction practices with Microsoft’s global corporate responsibility and sustainability missions,” Ford said. “It feels good to know that here in our hometown we’re supporting this vision.”

Follow updates and developments as this project progresses on Microsoft’s Modern Campus site.

Posted on Leave a comment

Microsoft Store powers new experiences for all at ultra-accessible theme park in Texas

When Gordon Hartman opened Morgan’s Wonderland in April 2010, it was the culmination of a dream he’d had for five years after seeing his daughter, Morgan, a girl with physical and cognitive disabilities, wanting to play with other vacationing kids at a hotel swimming pool – but the children were leery of her and didn’t want to interact with her.

At that moment, he resolved to create opportunities and places where people with and without disabilities can come together not only for fun, but also for a better understanding of one another.

So he and his wife Maggie built the first ultra-accessible theme park of its kind. Completely wheelchair-accessible, the destination in San Antonio, Texas, has hosted more than 1.3 million guests from the U.S. and 69 other countries since it opened. With more than 25 attractions, including rides, Wonderlands, gardens, an 8-acre catch-and-release fishing lake and an 18,000-square-foot special-event center, it’s long been established as fun and understanding for everyone.

Now it’s going to give its visitors a new technology experience.

From day one, Morgan’s Wonderland has focused on inclusion and ultra-accessible play for people with and without disabilities, says Hartman. But technology has been a game-changer for his family.

“My daughter, Morgan, who has both physical and cognitive disabilities, but computer technology has made it possible for her to become more engaged, to become more inquisitive and to understand more of the world around her,” says Hartman.

To help the park’s visitors experience that same type of engagement, Microsoft Store is revamping the Sensory Village at Morgan’s Wonderland. The new Microsoft Experience includes an interactive gaming area, featuring Xbox One X stations and the Xbox Adaptive Controller, which connects to external buttons, switches, mounts and joysticks to give gamers with limited mobility, an easy-to-set-up and readily available way to play Xbox One games.

Additionally, Surface devices will connect to the park’s interactive map, taking guests through the favorite attractions of the Wonder Squad, Morgan’s Wonderland’s super heroes.

Finally, a Wish Machine, powered by Surface Studio, will take submissions from visitors for the chance to have their holiday wish granted by Microsoft Store through Dec. 20.*

Three boys in front of a TV screen, playing a video game using the Xbox Adaptive Controller

“We chose the experiences based on our mission of inclusion,” says Kara Rowe, worldwide director of Microsoft Store Visuals & Experience. “Understanding that mission was paramount in determining what we chose, such as what we experience today in our stores that resonates the most with our customers.”

Rowe says the company created a custom-made Xbox One X gameplay station with the Xbox Adaptive Controllers laid out to be easily accessible for wheelchairs. And in turn, they’ll use the feedback they get from the park’s guests to help create and refine even more accessible experiences in the future – for Microsoft Store and the company’s product groups.

“We were thoughtful about the different use case scenarios for any guest to make sure that the experiences are truly ultra-inclusive,” says Rowe, referring to a phrase Hartman coined from the early days at the park.

The cross-company collaboration, which started with Microsoft volunteers from the Microsoft San Antonio datacenter and Microsoft Store locations, also helped provide auditory and visual cues, such as braille, that would help visitors to the Sensory Village.

“Every person has jumped at the chance to be involved, sharing personal stories as to why it matters to them,” Rowe says.

Visitors at the Sensory Village in Morgan's Wonderland

Hartman credits Microsoft with adding technological vitality to the park.

“It utilizes technology that enables people with disabilities individuals to interact and have fun together in an environment designed to stimulate the senses,” he says.

Rowe says this is the first time a Microsoft Experience has been in a theme park.

“This is about understanding how to teach and help a community learn with technology available to them in an inclusive way,” Rowe says. “Opening up in this space is really special. It is magical for us to have local employees volunteering because our company inspires us to do these activities, to activate cross channels, to come together and align to this greater mission of empowerment.”

Microsoft has committed to maintain and evaluate the space to ensure refreshed experiences.

“Sensory Village is built on technology, and Microsoft is a technological giant,” Hartman says. “We believe Microsoft’s leadership in technology can translate into tremendous benefits for the disability community.”

*The Wish Machine experience celebrates the excitement of the holiday season and the power of a wish. Wish Machine is powered by Surface Studio, where contestants record a video up to 60 seconds long of themselves making a holiday wish. NO PURCHASE NECESSARY. Open to guests of Morgan’s Wonderland who are at least 13 years old. Enter by December 20, 2018. For Official Rules, including prize descriptions, click here.) Void where prohibited.

*Editor’s note: Correction on spelling of Gordon Hartman’s first name.

Updated December 10, 2018 1:25 pm

Posted on Leave a comment

PHP 5.6.39 is available

Hello! The PHP development team announces the immediate availability of PHP 5.6.39. This is a security release. Several security bugs have been fixed in this release. All PHP 5.6 users are encouraged to upgrade to this version. For source downloads of PHP 5.6.39 please visit our downloads page: http://www.php.net/downloads.php Windows binaries can be found on http://windows.php.net/download/. The list of changes is recorded in the ChangeLog: http://www.php.net/ChangeLog-5.php#5.6.39 Please note that according to the PHP version support timelines( http://php.net/supported-versions.php ), PHP 5.6.39 is the last scheduled release of PHP 5.6 branch. There may be additional release if we discover important security issues that warrant it, otherwise this release will be the final one in the PHP 5.6 branch. If your PHP installation is based on PHP 5.6, it may be a good time to start making the plans for the upgrade to PHP 7.1, PHP 7.2 or PHP 7.3. To verify the downloads, you can use the following information: php-5.6.39.tar.bz2 SHA256 hash: b3db2345f50c010b01fe041b4e0f66c5aa28eb325135136f153e18da01583ad5 PGP signature: -----BEGIN PGP SIGNATURE----- iQEcBAABAgAGBQJcB7duAAoJEMK/C8Qzz8iz1ocH/2LHnP4frU5Lox2eaWCDCUY0 TnFJmEM6TOh8K0g7z3McsK1uDUCHdIYLEX10N1ruKDryvAXgl5Jp3nZDqbJIymtb cbgQkLNeiPu0gsccPz/pR/vXWT7EzkPzWdkH8Ne01RJRxUZi9MFHwd80bToDGkPs RU8ba96rlLu32iGMnRtvgjaLfnCWYWHH/fuObTy66ksRwe1mTtSMbXHGZ7t5fBy6 km7uapx14CAcadQeekwrOZdx/+6pTd0T9n0IU7d7oIr4fSqXErIH6RHH0YBDR/+a 6Jev0JleCxQjGY+rhPve/nAQxkDRx3/h1KMVrgIAP4ozPOIE/Ca+X6zbC9xS0Io= =Yy6C -----END PGP SIGNATURE----- php-5.6.39.tar.gz SHA256 hash: 127b122b7d6c7f3c211c0ffa554979370c3131196137404a51a391d8e2e9c7bb PGP signature: -----BEGIN PGP SIGNATURE----- iQEcBAABAgAGBQJcB7d3AAoJEMK/C8Qzz8izHUUH/iyPshr5U3EIaPcxsN22LOyn 7I3lYLdUhClRUNHNmSMyj3FmoIDavJQ++mrJ7L8RVlXzhbIjG4edSomcskXnjfKu js3hFiuF6XmrzpfEc/iGnptHzltD4Ts0LiKRk1Dnm1D7R8Drk0jdIHdMAGeCgZH9 lN0TBPxTW7JZ4OE5Mc9I1UtBTGboSw2TASuIFrWtNiYFfnr/i8CmDu1u1TSmmbs+ 3YHLBxF8k2RaYaX36F8E6gnvKEY12SzWlfS44A0XaVv9C+YfCQCVrRsqg+Pd0LBm YOk0II4ATjS/jUvxnYNuqENbw64sOvh8qNKSNAoBohgi88EGqzcITZp4KuwzaJE= =zTcm -----END PGP SIGNATURE----- php-5.6.39.tar.xz SHA256 hash: 8147576001a832ff3d03cb2980caa2d6b584a10624f87ac459fcd3948c6e4a10 PGP signature: -----BEGIN PGP SIGNATURE----- iQEcBAABAgAGBQJcB7d+AAoJEMK/C8Qzz8iz8e0H/1BwoQHUrEKXpdTEzqA/NsOA d008nHnmBc6WkHB7JAbNCFOlmKuiNgSZMRb7sQBaszY7qGwDQ+K6LUysQ9FAyUA/ N0TjfITiqUoqnV3X1dOOLOfEBrVFlXp/spiqu5ywmhlUY6l2/3W8Jbg9/SfiwHYV lEZHP4qDEiIUHD/q6MsTECt/VEm6YS4fN++quFEOmp+qwvHs1U9AU29Z5S84qVhf 07HfeDye2sEcdWXbwgMfksubLYgneZb3Lm9MnBcQ3T/RNZ8vUkBPdJ+pesY2sJJ6 TeX3z6aqbCqySliJ9qrgli1H8uxdAp53AFvdxKGGM2HFPjpFrPmsCZ6cijKTgxQ= =24z1 -----END PGP SIGNATURE----- Julien Pauli & Ferenc Kovacs
Posted on Leave a comment

PHP 7.3.0 Released

The PHP development team announces the immediate availability of PHP 7.3.0. This release marks the third feature update to the PHP 7 series. PHP 7.3.0 comes with numerous improvements and new features such as - Flexible Heredoc and Nowdoc Syntax - PCRE2 Migration - Multiple MBString Improvements - LDAP Controls Support - Improved FPM Logging - Windows File Deletion Improvements - Several Deprecations For source downloads of PHP 7.3.0 please visit our downloads page. Windows binaries can be found on the PHP for Windows site. The list of changes is recorded in the ChangeLog. The migration guide will be available in the PHP Manual, shortly. Please consult it for the detailed list of new features and backward incompatible changes. Release Announcement: <http://php.net/releases/7_3_0.php> Downloads: <http://www.php.net/downloads> Windows downloads: <http://windows.php.net/download> Changelog: <http://www.php.net/ChangeLog-7.php#7.3.0> Migration guide: <http://php.net/manual/en/migration73.php> Many thanks to all the contributors and supporters! Christoph M. Becker, Stanislav Malyshev P.S. Below is the verification information for the downloads, which is also available on <https://gist.github.com/cmb69/2a2f0afa81d56259a86096e9b5784126>. php-7.3.0.tar.bz2 SHA256 hash: 7a267daec9969a997c5c8028c350229646748e0fcc71e2f2dbb157ddcee87c67 PGP signature: -----BEGIN PGP SIGNATURE----- iQJABAABCAAqFiEEy69p8XOg/qS1N/Rw1myVkxGLzLYFAlwGqNIMHGNtYkBwaHAu bmV0AAoJENZslZMRi8y2NvwP/A776q5KYtcQkAkf73dP9K6J33jYmG+qEtffgdfL 6KFwtfx8s2S4cOcXvIAHQ+ugmUKnCvde8qfjiUFS+BUYmFYQyGvrGc7IQ2TM4to1 Mo/6favn3iwhOy+NjR+15K+7bZ3SYc4XhR8nK4Mvr1p+XFtHQFodb1cgv9brxptR OVOqBbHqLQtZj9sSCLFkC7kfeCaTOI/RBZLKXNqenivZp/c6iaSBMXzm8MIzc1Fh B+GzgujCpeMWKYrj5ftgQDxCKNO+xfXyxcFfiwZn2ktAlgqYfaMDbVRFDQitz6E6 Ekws/AGHOvISETObg8tRXTfsyqdl8Xwmw2n5r9Nn4VhKLubT+M4Dql2d5Wi5bT2T TCm6Tevl4ifMLVO+xRqLZh0CjbU7UJiDV7W+X7kznDnzhk5k0H9o2p/bhRVBOLfq d2BXtyAaNcXc6Y6432kkRDByDD9tHK/Z8JbK5y48YSJBWUC3g1moWVyeCwuTaUTy UEh2CDQy+cjvAU2j/l0ky35b0Pcdm2CvEMEyUxwh/7azYwT4FhFWn/sk+nL5TXmi qU8SpDf3Hax4Ep03vdgSWikdf4PHNy9tGvryH1qEZ/Td3yMRjgWlBQj28Iz8GkeK 76URNVUSVAVFgQCYONrzxBt292a+F4/hZE9Q8oX3sZxEYBWioQMsxHfYndJccKs4 RWd8 =Cukm -----END PGP SIGNATURE----- php-7.3.0.tar.gz SHA256 hash: 391bd0f91d9bdd01ab47ef9607bad8c65e35bc9bb098fb7777b2556e2c847b11 PGP signature: -----BEGIN PGP SIGNATURE----- iQJABAABCAAqFiEEy69p8XOg/qS1N/Rw1myVkxGLzLYFAlwGqNMMHGNtYkBwaHAu bmV0AAoJENZslZMRi8y2VS8QAIyPF89W/4tCTa9sJqlFYXKWoY2LVw9TzV158djD QwUqVkBCj7T3M8A8532mMFBLDNCUvutdqOf2d8EKnMUPkso6rthwIqdar0qB9kZf D2zzc38SkiyN/To9uaZ1nZ1/jU8tFo3NUhWt6SvN4+ZsnRLoG5SOcG0eoOxQX+NJ eDP+iqS8PwaORv6kULKEJhOibaUnAYru+2pb7WIVqUxuzDbcfkeI75SpQD+7f/r3 Wszgiz5x4DRR2clmItRjS7nCVETYJfoDDRcmwF/ZyP9usi9K+guBQ/RbzyEa1INa NUjq8B0Ga0eRL45OYslm7fAvMIZ6byLsCSIdEVuWfHlOWpNz3iQ3KO4FB8yjhl0h VWN+mp+n18DggdqDdkYggYjjxdk5b91044MmCX6CjDu+I4W72cijwKnbtdLfGPRM wSsW3eisIUROGdWDd0r6nSyiIjjqbZRZyF+LZY2x2k8F5Y/wuwRPKSTSY9x/WXZ/ 3HIQliNC721I2eIeu5ngFVOHj9YWBXYqnwHC+TgIFQDiDxJkeM/6/c5ZGfXlTD8P Fnd85eNdRLpHSdmSJJoi0qqi5bI9Fdvvc7W6uH/grvUED1ll0D+h+eBlbNx8e1re KoY2oIoWlKVLRPR5rZyR7FWPb2o430bAjEkyveWYFS28aam4T+nacMNceHJapTMo 4/Sj =f2Io -----END PGP SIGNATURE----- php-7.3.0.tar.xz SHA256 hash: 7d195cad55af8b288c3919c67023a14ff870a73e3acc2165a6d17a4850a560b5 PGP signature: -----BEGIN PGP SIGNATURE----- iQJABAABCAAqFiEEy69p8XOg/qS1N/Rw1myVkxGLzLYFAlwGqNMMHGNtYkBwaHAu bmV0AAoJENZslZMRi8y29O4P/iIOkQcn5pR7otaw/k1dnCtE68AXO6HmJ2HJvImB k5qaTvqnfzS6wuCcC7JWxhzHY7lTohzYUc4IEMBVt9moI8UodWXuSqrlJhvYHdnY JiNUXbzXPfecMizBjFb5QT78/PDmV96xG7hwiMBUw3tM/NiwIDlrliU5FQthsgr1 JxtIYG7+fVpFitVoqHFwpZSLhSemNv92HHbtnVIyUmGUPoEFWRU0x7ZQH5RP22wh UhDrblSAruPkmwbYdUcDOqhbB0c5XeyXPi0e+SvEAgpIRZaj3cjQvc3f1AVRhJaX h6RvEZ5T3ukAD5p0ufltoHYqt6yylWxvM4g2JB16COP3EnfeEOJbmuYH2oFQMsl6 uDgM2Jq/yHFQZzOPDg/+f7JRLttRIwKJOZtjBd0ZDXsatz9OWLRk7Qfg0b5IcVw1 7HMzwj5roPQSdaVVZVzkW59odjwMRPssO9qsMU7TuIA/1P+G1Kcr/U9vOMqamhD+ 5/QMQ1I6/6BKuP2VC+tA4AzPnlvH1WTIekr6X4LCEyQ3lYtegmVmTKJjKeBQusBY meKj+0IxFfuWJlm9Z28OnV2iqAqWxtvzwdDm8xtm5OKUB5nepNlAaw+MaQ2H3gSo Q6h3X3DGvBMV66m2f+uPYkIkU6e9wSoG3XJlD9U1phEkUkhaqWzt/VZw9yUQJ5hs 6skX =WNbv -----END PGP SIGNATURE-----
Posted on Leave a comment

Embark on the Voyage Aquatic, a new Minecraft Hour of Code

More than 50 percent of jobs require technology skills, and in less than a decade that number will grow to 77 percent of jobs.1 Just 40% of schools have classes that teach programming and if you are a girl, black or Hispanic, or live in a rural community you are even less likely to have access.2

Minecraft and Microsoft are committed to helping close the STEM gap and expanding opportunities for students to learn computer science. For the fourth year, we are partnering with Code.org to support Hour of Code, a global movement demystifying computer science and making coding more accessible through one-hour tutorials and events. Hour of Code helps students get ‘Future Ready’ by connecting them with STEM learning experiences and career opportunities. 

Today, we launched a new Minecraft Hour of Code tutorial, the Voyage Aquatic, which takes learners on an aquatic adventure to find treasure and solve puzzles with coding. Voyage Aquatic encourages students to think creatively, try different coding solutions and apply what they learn in mysterious Minecraft worlds. 

Since 2015, learners around the world have completed nearly 100 million Minecraft Hour of Code sessions. The tutorials offer more than 50 puzzles, as well as professional development, facilitator guides and online training to help educators get started teaching computer science.

Dive into the Voyage Aquatic 

Minecraft teamed up with four YouTube creators – AmyLee33, Netty PlaysiBallisticSquid and Tomohawk, with a cumulative following of more than five million – for this year’s Minecraft Hour of Code. These creative YouTubers guide participants along their journey through caves, ruins and underwater reefs to solve puzzles and learn coding concepts. 

Voyage Aquatic presents 12 unique challenges, focusing on how to use loops and conditionals, two fundamental concepts in computer science. The tutorial also includes a ‘free play’ level for participants to apply what they learn in the prior puzzles and use coding to build imaginative underwater creations.  

People of all ages and experience levels can use the Minecraft world to learn the basics of coding. The tutorial is free, open to anyone and available for any device. If your language is not available, you can help contribute to translation here.

Host an Hour of Code

Anyone can host an Hour of Code. Download a free facilitator’s guide to lead your own Minecraft Hour of Code at your school, library, museum, learning center or even at home. 

Learn how to effectively facilitate an Hour of Code with this new Microsoft Education course for educators. Learn about the benefits of Hour of Code for your students, and where to find resources to lead an Hour of Code. 

Let us know about your experience by posting on Facebook or Twitter and make sure to mention #HourofCode. Tag us @playcraftlearn!

Keep coding in Minecraft

You can continue your coding journey in Minecraft: Education Edition (or Minecraft on Windows 10) using Code Builder, a special feature that allows you to code in Minecraft. 

  • Visit education.minecraft.net/cs for trainings, lessons and classroom activities to go beyond Hour of Code with your students. 
  • If you already have a license for Minecraft: Education Edition, click this link to launch a special Voyage Aquatic world in Minecraft. Use code to fill an aquarium with marine life. 
  • If you are not licensed, you can download a free trial of Minecraft: Education Edition for Windows 10, macOS and iPad by visiting aka.ms/download.

Save the date: Computer Science Education Week, December 3-9 

  • Attend an event: Join an Hour of Code or STEM workshop at a Microsoft Store near you. Sign up at microsoft.com/en-us/store/locations/events-for-educators. 
  • Connect coding to careers with Skype in the Classroom: Sign up for free 30-minute Skype in the Classroom broadcasts and live Q&A with professionals who use code to create amazing things, including two Minecraft game designers! Happening December 3-7, introduce your students to nine inspiring ‘Code Creators’ in the worlds of dance, fashion, gaming, animation and artificial intelligence in a series brought to you by Microsoft and Code.org. Get your questions ready as we explore code-powered creativity. Register for free at aka.ms/codecreators.
  • Learn how to bring CS to your school: Microsoft is helping close the skills gap for all youth by increasing access to equitable computer science education. Discover resources at www.microsoft.com/digital-skills. 

The Future of Jobs Employment, Skills and Workforce Strategy for the Fourth Industrial Revolution, World Economic Forum, January 2016.

2 Pioneering Results in the Blueprint of U.S. K-12 Computer Science Education, Google Gallup poll, 2016.

The post Embark on the Voyage Aquatic, a new Minecraft Hour of Code appeared first on Minecraft: Education Edition.

This post was originally published on this site.

Posted on Leave a comment

PHP 7.2.12 Released

Hi, The PHP development team announces the immediate availability of PHP 7.2.12. This is a bugfix release. All PHP 7.2 users are encouraged to upgrade to this version. For source downloads of PHP 7.2.12 please visit our downloads page. Windows binaries can be found on the PHP for Windows site. The list of changes is recorded in the ChangeLog. Release Announcement: http://php.net/releases/7_2_12.php Downloads: http://www.php.net/downloads Windows downloads: http://windows.php.net/download Changelog: http://www.php.net/ChangeLog-7.php#7.2.12 Many thanks to all the contributors and supporters! Sara Golemon, Remi Collet php-7.2.12.tar.gz SHA256 hash: d7cabdf4e51db38121daf0d494dc074743b24b6c79e592037eeedd731f1719dd PGP signature: -----BEGIN PGP SIGNATURE----- iQIcBAABAgAGBQJb4XhtAAoJENyf+NPuWvJ/Ce4P/iZ3t3Y4K4890hNza170OIUb f8N/bne1t+9kbRUohaHY7pm5NtU8sBUdibSRtdoH0TfEq4OoTAECYvXiESsL20t4 cCdv397IstGvxEmzZ++rCPXM2ywo7chYqqtFPwQt8nP7VLLAueMk3AWo1QUI+zWE /YZ8cSuZHWH/oF0WISXBrcevCE08Cv9LiFO4HDTISY/BWdvUufCan/+eiRIvHg8e kZUJ/h4+fePiS8h5l6/OaZbxvCJIDbigABXaPlkxlU25o8BXws1a7d2XoYxlvixc gX8/OA3gvXqqb1wEBt1R5fgAvtnuNUFOWFknHYlDSmF0JT9VTGJgSIpUm2cHiq5/ ZqH3ZHJPhOpqpt7VjOJ2TG1OabN0Q2NVCAd4nqhrLLJ8+8QxL1vdQpfUkDvvONFF /aP67MqfnYCrNi0byaRw2JKfQHO4UxsEiK2BiwsGEC7g2EJEGVsqxfCBfV/LedoE sJEkuBag4qjOWxrCdMz+duIT5h38pSxAA9a44/WpK2oazODP7W1F0YylyDu4d7es m4dqXuj/qfSl+jg1SCVGSeYdot8gYxzsIKMfodgFYiCdRm7WUnM8krBZMcRcf9fz B7RE4hmK4YCAL5WEks+97jVPz0sbE/Cr+Tv1/v/PYUzjhADKXPjk5Q/UdjS6EhrL NwOETt0tRmFfxGj+hJZq =UR4J -----END PGP SIGNATURE----- php-7.2.12.tar.bz2 SHA256 hash: b724c4c20347b6105be109d98cc395a610174e8aadb506c82e8cb645b65ef6b6 PGP signature: -----BEGIN PGP SIGNATURE----- iQIcBAABAgAGBQJb4XhwAAoJENyf+NPuWvJ/+zsQAI8KWhLQRwaV3dW1OnkZU5oH +1B0kHzT2/wQZjeb2Ss1273+Y7rQoTY4fad4G+KHWSluRFZeC7FJlf80vqltW4yl aug2RpVBVMv8V9rSnUUOBAzty14JgpclveiOaciEcpx69tf8m0FgTncF5jmDZSex 8avc2iAWjr3sRha4fMkCdXdQmQr3GP3EKYEY7kD9c4QWc7UAqXcPYbi3ohkAoM/w GYFe3DpJDHJGRH2f9V3SlG2nlC2D0Z00G5WzIqC8S1QC52C1c+r/teYk6F9uo67w 8x44XUhTbUEB/U3OgoWaxl982UURMhw9O8FJtm2M4RlhdUlZYlNh+gI72hari+fX Iab+Y7DQGe2uVtiJDYQ+okZyAcQw4+XbPHyiNJKsADVEtYl2wKnKN4E6j+ecdr6d mytB/Lym6fJKs0+ULxiBe5ZssMNrbZJfmEIaQEcEJlwenLEq0Qo6oBkXKVgE6y4Q DPHEt4CDiQ2r88T3sLWiT+vI8IxY51A34U997jRGJuJHHHMyaWBXTXuUV4pCzgyT fabDvTJrrbKnDKMKKAEQfBLlN/2c31eOhgEEgnqh5ctzqUhtEYh5dvPJuxf6TXQE 0vkNTy8O2kN0BKWnb2/bXxaCPBtOe00thTuEHTF+r3WwJW//cvFbM9uP231f4j31 kWenDLac6ei+uqtFMwHe =ajoR -----END PGP SIGNATURE----- php-7.2.12.tar.xz SHA256 hash: 989c04cc879ee71a5e1131db867f3c5102f1f7565f805e2bb8bde33f93147fe1 PGP signature: -----BEGIN PGP SIGNATURE----- iQIcBAABAgAGBQJb4XhzAAoJENyf+NPuWvJ/BkkP/0mE5NN/q95Y/ehYAkgxt32w BrC5v7aVR5Jagv5cBEj2xyQb1SVoSvRZwf7EHVxw0JSSy21x1xE3tQuU2e585Y/F DjGbv15uJ/Dv+ggDVoKeP04/itfDVyzumriDULNeCw5lpVdOctg04umxE+WEKN/s 7Y0kUkETUtUOqwN69cWZEFEcR/7FPJWO0CC329zy/VzPm7yiO1Ov1X6HDIkHOViO aYU0RWptFxFAnhkP7ucOTeeGU/d32Zsv4G5M/HtUERg5W1Ap+wdxz0nQlupKCRv6 UQbz3jD9uINnhRb4xsL5HV+Q6GoiQNwywXsuznl8oDn/pjm6k1+LvNjsLwoB9RMV Xs0CaVKJ7Fr0M7m/1DqgUO4LEGcBSmI13ynrXteGzw4wzxBOXiJttKQvxttX8hJY u/zHhRMGBoAi+RAfW1ckvSzpZUJMZ3HxRtMKkgGKNP5ZF3l3dQQj4cPpqAxHJQAh sKsI/cSShwPFc2BgvSPJyqIYVDQ1tiF89jhnzsL0+TV25pUtejJQ+flskFpTUFWl XpzbuStYHiaQsA3zp9rz/PAISzThSq7FzlMU3iHzSdPHAMqd5VY/uNwAx/SYbCoY Jt0AupXeFBb2rHQk4yN9JviKWgHnKWjx7wNvMYbIeCbhocZ1fFcf0XI/6+R5/jku zLm7hb+gqvqkqg4XigiX =9IiV -----END PGP SIGNATURE-----
Posted on Leave a comment

Microsoft Store releases top cybersecurity tips for small business owners

October is National Cyber Security Awareness Month, and Microsoft Store is committed to helping small business owners understand the dangers of cyberattacks and the actionable steps they can take to mitigate cyber threats.

Getting hacked is a scary threat, yet most small business owners don’t think they’re at risk.

Nearly 82 percent[1] of small business owners think their business does not have data that hackers would be interested in stealing, yet 61 percent[2] have suffered a cyberattack and over half[3] have had a data breach.

What’s even scarier than not knowing your business is vulnerable to a cyberattack is finding out your business has been hacked.

Identifying Vulnerabilities

Small business owners may not know the appropriate steps to protect themselves, and others may find the topic can be daunting.

This was the case for Quants Bakery, a six-employee catering and subscription-based vegan bakery in Glendora, California. Sean Etesham, CEO, started the online-based business in September 2017 after he saw a need for more vegan options at his local coffee shops. Like so many first-time small business owners who are strapped for resources, he launched the business and operated it without a dedicated IT person or cybersecurity software.

“Our worst nightmare would be if someone broke into the back end …and took all of the customer credit card information…and posted it online,” shared Sean.

Microsoft Store recently teamed up with a Microsoft cybersecurity expert to take Sean and his now CIO, Richard Idigo, through a lifelike simulation of a common phishing scam, giving them a firsthand look at the damage that can be done in mere minutes. Sean and Richard were shocked at how easily a hacker can create a false site to access passwords and compromise their data.

“I’ve made a lot of sacrifices in terms of my time and energy that could’ve been spent elsewhere,” explained Sean about starting his business. “I cashed out my retirement accounts, and my investment accounts, and put all that money towards the business.”

Any small business owner can attest that success and health of their business is of utmost importance, so addressing cybersecurity vulnerabilities should be a top concern.

The simulation helped Sean to understand the type of security protections and other actions he needed to have in place to safeguard his business and avoid phishing attacks. He worked with a business solutions specialist at Microsoft Store to decide on Microsoft 365 Business as the right solution for their productivity, collaboration, and security needs.

By understanding cybersecurity risk factors, every small business owner can put an affordable, actionable plan in place to mitigate risk and save time and money it takes to recover from a breach.

Addressing Vulnerabilities

Many small business owners do not have IT departments to turn to in the case of a cybersecurity emergency. During National Cyber Security Awareness Month, Microsoft Store is offering small business owners the opportunity to understand the risks of cyberattacks and will be the go-to destination for personalized guidance from in-store business solutions specialists.

If you’re a small business owner, visit Microsoft Store and online to discover cybersecurity solutions like Microsoft 365 Business that are customized for the needs of small businesses to more effectively navigate the cybersecurity landscape and mitigate cyber risks.

[1] SMEs and Cyber Attacks, by Towergate Insurance

[2] 2017 State of Cybersecurity In Small & Medium Sized Businesses, 2017 by The Ponemon Institue

[3] SMBs Are Vulnerable To Cyber Attacks, 2016 by The Ponemon Institute

[4] HACKED: Just Because It’s in the Cloud, Doesn’t Mean Bad Guys Can’t Reach It, 2017 by UPS Capital