This is a step-by-step walkthrough of creating a simple microservice using the Owin Framework.
This walkthrough assumes that you have already completed the Hello, World walkthrough. If you have not completed it yet I suggest you at least read through these instructions before continuing with this walkthrough.
This walkthrough builds a microservice with these features:
To keep down the scope of this walkthrough and concentrate on the aspects of how to build a microservice and not how to build a database, this solution will only retain data in memory. All of the registered users will be wiped each time the service is restarted.
The steps you will follow in this walktrhough are as follows:
This walktrhough differs from writing a real microservice in these ways:
The most educational way of doing this walkthrough is by starting from a completely empty project and add all of the code. You don't need to actually type the code, copy/paste will work just fine.
After installing, the Nuget Package Manager will look something like this (version numbers will vary depending on which .Net Framework version you chose)
Note that this step would be required for any OWIN application and is not specific to the Owin Framework.
The steps required here are the same as for the Hello, World walkthrough. Please refer back to it for more details. Note that if your project is a "Web APplication" type then you will create the Startup.cs file in the App_Code folder.
For this walkthrough we are going to use Ninject and Urchin, but you can use any IoC container and any configuration mechanism you choose. There is documentation you can read and copy code from, or you can copy from the hello world example
Read the documentation to figure out what code you need to add, or just copy the code below into the Configuration method of your Startup class to get going quickly.
var packageLocator = new PackageLocator() .ProbeBinFolderAssemblies() .Add(Assembly.GetExecutingAssembly()); var ninject = new StandardKernel(new Ioc.Modules.Ninject.Module(packageLocator));
This is the first step in this walktrhough that is specific to the Owin Framework
You can review the documentation on Owin Framework configuration, or you can look at Startup.cs for a working example to copy from.
An example of the type of code you will need to add to the Configuration method of your Startup class is shown below for reference. In a real application there are a number of ways that you can write this code. For this walkthrough you can copy/paste if you like.
var config = ninject.Get<IConfiguration>(); var pipelineBuilder = ninject.Get<IBuilder>(); pipelineBuilder.Register(ninject.Get<PagesMiddleware>()).ConfigureWith(config, "/pages"); app.UseBuilder(pipelineBuilder);
At this point your Startup.cs file might look something like this:
using Ioc.Modules; using Microsoft.Owin; using Ninject; using Owin; using OwinFramework.Builder; using OwinFramework.Interfaces.Builder; using OwinFramework.Pages.Core; using System.Reflection; [assembly: OwinStartup(typeof(Startup))] public class Startup { public void Configuration(IAppBuilder app) { var packageLocator = new PackageLocator() .ProbeBinFolderAssemblies() .Add(Assembly.GetExecutingAssembly()); var ninject = new StandardKernel(new Ioc.Modules.Ninject.Module(packageLocator)); var config = ninject.Get<IConfiguration>(); var pipelineBuilder = ninject.Get(); pipelineBuilder.Register(ninject.Get<PagesMiddleware>()).ConfigureWith(config, "/pages"); app.UseBuilder(pipelineBuilder); } }
In this section you will configure the Pages middleware to scan your compiled code and construct services and web pages from classes that are decorated with custom attributes.
var fluentBuilder = ninject.Get<IFluentBuilder>();
ninject.Get<OwinFramework.Pages.Restful.BuildEngine>().Install(fluentBuilder);
ninject.Get<OwinFramework.Pages.Html.BuildEngine>().Install(fluentBuilder);
fluentBuilder.Register(Assembly.GetExecutingAssembly());
ninject.Get<INameManager>().Bind();
At this point your Startup.cs file should look something like this:
using Ioc.Modules; using Microsoft.Owin; using Ninject; using Owin; using OwinFramework.Builder; using OwinFramework.Interfaces.Builder; using OwinFramework.Pages.Core; using OwinFramework.Pages.Core.Interfaces.Builder; using OwinFramework.Pages.Core.Interfaces.Managers; using System.Reflection; [assembly: OwinStartup(typeof(Startup))] public class Startup { public void Configuration(IAppBuilder app) { var packageLocator = new PackageLocator() .ProbeBinFolderAssemblies() .Add(Assembly.GetExecutingAssembly()); var ninject = new StandardKernel(new Ioc.Modules.Ninject.Module(packageLocator)); var config = ninject.Get<IConfiguration>(); var pipelineBuilder = ninject.Get<IBuilder>(); pipelineBuilder.Register(ninject.Get<PagesMiddleware>()).ConfigureWith(config, "/pages"); app.UseBuilder(pipelineBuilder); var fluentBuilder = ninject.Get<IFluentBuilder>(); ninject.Get<OwinFramework.Pages.Restful.BuildEngine>().Install(fluentBuilder); ninject.Get<OwinFramework.Pages.Html.BuildEngine>().Install(fluentBuilder); fluentBuilder.Register(Assembly.GetExecutingAssembly()); ninject.Get<INameManager>().Bind(); } }
There are many ways to add Restful service endpoints, but the easiest way is to add a class and decorate it with attributes, so lets do that. Go ahead and create a new class in the solution called HelloService.cs containing the following code:
using OwinFramework.Pages.Core.Attributes; using OwinFramework.Pages.Core.Enums; using OwinFramework.Pages.Restful.Interfaces; [IsService("hello", Methods = new[] { Method.Get })] public class HelloService { [Endpoint(UrlPath = "/")] public void Hello(IEndpointRequest request) { request.Success("{message:'Hello, this is a microservice'}"); } }
Now you can press F5 in Visual Studio and your microservice will handle the request and return a hello message.
Wow, that was easy!
All of your basic restful endpoints will be simple like this, but even the most complex scenarios are supported in a way that makes it as easy as possible to hide the complexity without sacrificing scaleability. See the Restful builder documentation for more information on how to take this up to the next level.
The only issue you are likely to encounter at this point is about version compatibility of Nuget packages. Most open source projects support a wide variety of frameworks and versions of .Net, but Microsoft's packages do not, and this leads to a situation where is can be quite hard to find a combination of Nuget package versions that work together.
The developers of the Owin Framework try to provide versions that are compatible with every version but Microsoft makes this very hard and there are many projects to update each time, so this is a far from ideal situation. We appologize if you experience Nuget version incompatibilities at this point in the walkthrough.
If your solution does not run at this point, open the Visual Studio "Output" window and look at the debug messages printed here. Pay special attention to the messages from the "Package locator".
In order to see a few more features and look at an example closer to the real world we are going to need a bit more code. Go ahead and add a data layer interface definition, an implementation of this interface, and instructions to IoC to register this class as a singleton.
To keep this walkthrough simple we can add all of this to one source file, but in your application you would break this up into one source file per type.
using Ioc.Modules; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; public enum RegisterResult { Registered, PasswordTooSimple, DuplicateEmail, InvalidEmail } public class User { [JsonProperty] public string Email { get; set; } [JsonIgnore] public string Password { get; set; } [JsonProperty] public string LoginToken { get; set; } } public interface IDataLayer { RegisterResult Register(string email, string password); string Login(string email, string password); void Logout(string loginToken); User[] GetUsers(); } [Package] public class DataLayerPackage : IPackage { public string Name => "Data layer"; public IList<IocRegistration> IocRegistrations => new List<IocRegistration> { new IocRegistration().Init<IDataLayer, DataLayer>() }; } public class DataLayer: IDataLayer { private readonly object _lock = new object(); private User[] _users = new User[0]; public User[] GetUsers() { return _users; } public RegisterResult Register(string email, string password) { if (string.IsNullOrWhiteSpace(email) || email.Count(c => c == '@') != 1) return RegisterResult.InvalidEmail; if (string.IsNullOrWhiteSpace(password) || password.Length < 5) return RegisterResult.PasswordTooSimple; lock(_lock) { if (_users.FirstOrDefault(u => string.Equals(u.Email, email, StringComparison.OrdinalIgnoreCase)) != null) return RegisterResult.DuplicateEmail; var newUser = new User { Email = email, Password = password, LoginToken = Guid.NewGuid().ToString("n") }; var users = _users.ToList(); users.Add(newUser); _users = users.ToArray(); } return RegisterResult.Registered; } public string Login(string email, string password) { var user = _users.FirstOrDefault(u => string.Equals(u.Email, email, StringComparison.OrdinalIgnoreCase) && u.Password == password); if (user == null) return string.Empty; if (user.LoginToken == null) user.LoginToken = Guid.NewGuid().ToString("n"); return user.LoginToken; } public void Logout(string loginToken) { var user = _users.FirstOrDefault(u => u.LoginToken == loginToken); if (user != null) user.LoginToken = null; } }
We did this already for the hello service example. Lets repeat that again with the injected dependency on the data layer we just created. Because we now have an injected dependency, we will also have to provide our Niject container to the fluent builder so that it can build our service.
In your Startup.cs file, modify the line of code that registers our executing assembly with the fluent builder to get it to use Ninject to build our service. The modified line of code looks like this:
fluentBuilder.Register(Assembly.GetExecutingAssembly(), t => ninject.Get(t));
Now we can go ahead and add the service endpoints.
using OwinFramework.Pages.Core.Attributes; using OwinFramework.Pages.Core.Enums; using OwinFramework.Pages.Restful.Interfaces; using OwinFramework.Pages.Restful.Parameters; [IsService("user", BasePath = "/auth/", Methods = new[] { Method.Get, Method.Post })] public class UserServiceEndpoints { private readonly IDataLayer _dataLayer; public UserServiceEndpoints(IDataLayer dataLayer) { _dataLayer = dataLayer; } [Endpoint(Methods = new[] { Method.Get })] public void Users(IEndpointRequest request) { request.Success(_dataLayer.GetUsers()); } [Endpoint(Methods = new[] { Method.Post })] [EndpointParameter("email", typeof(RequiredString), EndpointParameterType.FormField)] [EndpointParameter("password", typeof(RequiredString), EndpointParameterType.FormField)] public void Register(IEndpointRequest request) { var email = request.Parameter<string>("email"); var password = request.Parameter<string>("password"); request.Success(_dataLayer.Register(email, password)); } [Endpoint(Methods = new[] { Method.Post })] [EndpointParameter("email", typeof(RequiredString), EndpointParameterType.FormField)] [EndpointParameter("password", typeof(RequiredString), EndpointParameterType.FormField)] public void Login(IEndpointRequest request) { var email = request.Parameter<string>("email"); var password = request.Parameter<string>("password"); request.Success(_dataLayer.Login(email, password)); } [Endpoint(Methods = new[] { Method.Post })] [EndpointParameter("token", typeof(RequiredString), EndpointParameterType.QueryString)] public void Logout(IEndpointRequest request) { var token = request.Parameter<string>("token"); _dataLayer.Logout(token); request.Success(); } }
At this point we have a fully functional microservice and you can test it using a tool like PostMan. Even though it is complete we will be adding more to it below to achieve the specification we were looking for. First of all lets explain this source file in detail.
The Users() method can be called with a GET request to the url /auth/users. This endpoint just calls the data layer and serializes the list of users to JSON. You can press F5 in Visual Studio and append /auth/users to the url and your service should return an empty array of users.
The Register() method must be called using a POST request, and takes two parameters. The EndpointParameter attributes define that these are form fields and that they must be non-empty strings. If you call this endpoint with invalid parameters then the Owin Framework will return a 400 response status with a validation message.
To read the parameters that were passed in, the Users() method calls the Parameter() method of the request passing the name of the parameter. The Owin Framework will parse the body of the POST as a form and extract the form field values, validate them and return the value to the appllication.
To fully test this we need to be able to POST some forms, and since some microservices have a user interface, we are going to go ahead and see an example of how we might easily add a user interface to our microservice. Note that this step is completely optional since many microservices do not have any UI. If you are using this tutorial as a stating point for your own microservice and you don't have any UI then I recommend removing the dependency on the Owin.Framework.Pages.Html Nuget package from your project to keep things clean.
In this case we can add some simple forms by adding an html file to our project and serving this as a static asset. We could do this with a service endpoint, but the Owin Framework Static Files middleware will do it much better.
To add the Static File middleware you will need to
pipelineBuilder.Register(ninject.Get()).As("Static files").ConfigureWith(config, "/staticFiles");
Optionally define a configuration for the Static Files middleware that tells it which folder to serve files from, the base URL to serve them under, the mime type to return for each file type and the caching policy for each file type.
The readme.md file for the Static Files middleware has documentation for the configuration options.
This step is optional, if you do not configure the Static Files middleware it will default to serving common image formats, html, css and Javascript from an /assets folder within your website where the URL path matches the file path. This default configuration will work for this walk through.
Test that the Static Files middleware is working by adding an assets folder to your Visual Studio project and creating a simple html file in this folder.
For example if you create a file /assets/hello.html containing the html below, then you can press F5 to debug the solution, then navigate to /assets/hello.html in your browser.
  <title>Hello, world - again</title>
Hello, world

The next step is to add a page containing a form that we can use to call our microservice endpoint. This is not a tutorial in writing html, so you can just copy and paste the html below into a new page and serve it using the Static Files middleware just like we did for the hello world example above.
  <title>User microservice tests</title>   <form action="/auth/register" method="post">
Register
 <input type="email" name="email" placeholder="Email"> <input type="password" name="password" placeholder="Password"> <input type="submit" value="Register"> </form> <form action="/auth/login" method="post">
Login
 <input type="email" name="email" placeholder="Email"> <input type="password" name="password" placeholder="Password"> <input type="submit" value="Login"> </form> <form action="/auth/logout" method="post">
Logout
 <input type="text" name="token" placeholder="Login token"> <input type="submit" value="Logout"> </form>
Note that the name attributes of the input elements define the names that will be used to send the request to the microservice when the user submits the form. These names must match the names of the parameters that the service endpoint is expecting. For example the name attribute of this element:
<input type="email" name="email" placeholder="Email">
Must correspond with the parameter name this service endpoint parameter:
[EndpointParameter("email", typeof(RequiredString), EndpointParameterType.FormField)]
Now you can test your microservice. Press F5 then navigate to the page we just added. Register with an email address and a password, then navigate to /auth/users to see that the microservice now returns a list of users that are logged in.
There are many choices available for creating a UI. The Pages part of the Owin Framework is designed to provide complete flexibility to cater to all the different kinds of website and web services that exist from a simple UI on a microservice to a website with millions of pages being served to billions of users.
The Owin Framework deliberately does not define anything about how your website works so that you have the freedom to choose any architectural pattern that you like. This does however mean that you need to choose an architecture and write some logic to glue the pieces together in a way that realizes that design. The Owin Framework has all of the pieces that you need and makes every effort to make these pieces fit together easily in any configuration that you want, but it is not designed to be an off-the-shelf solution that chooses the design pattern for you.
For the purpose of this walkthrough I have decided to show you how to build website pages where each page is defined by a Vue.js view model. I will define each page of the website with a Javascript file and an html file. This is simple and efficient way of doing things for a microservice that has only a few pages. It does provide all the features that we need to build a UI that displays all of the logged in users and dynamically updates as users log in and out without refreshing the page, and it demonstrates a few more features of the Owin Framework.
The steps for this part of the walkthrough are:
After these steps are completed we will be able to add as many pages as we like to the microservice simply by adding new files to the folder containing the templates
The Owin framework comes with a template loader and a selection of template parsers. The framework was designed to make it easy to write your own loader and/or add your own parsers and have them work together.
For this tutorial we are going to add a /templates folder to our project and put some html and Javascript files into it, then we are going to load and parse these files so that they will render extremely quickly even if they contain data binding expressions etc.
Go ahead and open up your Startup.cs file and just before calling the Bind() method of the name manager, add these lines of code:
var parser = ninject.Get<OwinFramework.Pages.Html.Templates.AsIsParser>(); var fileLoader = ninject.Get<OwinFramework.Pages.Html.Templates.FileSystemLoader>(); fileLoader.Load(parser);
At this point your Startup.cs file might look something like this:
using Ioc.Modules; using Microsoft.Owin; using Ninject; using Owin; using OwinFramework.Builder; using OwinFramework.Interfaces.Builder; using OwinFramework.StaticFiles; using OwinFramework.Pages.Core; using OwinFramework.Pages.Core.Interfaces.Builder; using OwinFramework.Pages.Core.Interfaces.Managers; using System.Reflection; [assembly: OwinStartup(typeof(Startup))] public class Startup { public void Configuration(IAppBuilder app) { var packageLocator = new PackageLocator() .ProbeBinFolderAssemblies() .Add(Assembly.GetExecutingAssembly()); var ninject = new StandardKernel(new Ioc.Modules.Ninject.Module(packageLocator)); var config = ninject.Get<IConfiguration>(); var pipelineBuilder = ninject.Get<IBuilder>(); pipelineBuilder.Register(ninject.Get<PagesMiddleware>()).ConfigureWith(config, "/pages"); pipelineBuilder.Register(ninject.Get<StaticFilesMiddleware>()).ConfigureWith(config, "/staticFiles"); app.UseBuilder(pipelineBuilder); var fluentBuilder = ninject.Get<IFluentBuilder>(); ninject.Get<OwinFramework.Pages.Restful.BuildEngine>().Install(fluentBuilder); ninject.Get<OwinFramework.Pages.Html.BuildEngine>().Install(fluentBuilder); fluentBuilder.Register(Assembly.GetExecutingAssembly()); var parser = ninject.Get<OwinFramework.Pages.Html.Templates.AsIsParser>(); var fileLoader = ninject.Get<OwinFramework.Pages.Html.Templates.FileSystemLoader>(); fileLoader.ReloadInterval = TimeSpan.FromSeconds(3); fileLoader.Load(parser); ninject.Get<INameManager>().Bind(); } }
For this to work you will need to have a /templates folder in your project. Go ahead and add this folder now. We will add template files to it later.
The next step is to add a component that will translate the URL of the page it is on into the path of the template files, load these templates and render them into the page.
In this framework the page class is responsible for writing the page structure to the output stream and components are responsible for everything that is written within the page structure. In practice you are unlikely to write your own page classes because the structure of an html page is well defined, but you are very likely to want to write components.
The code required for this component is shown below:
using Microsoft.Owin; using OwinFramework.Pages.Core.Attributes; using OwinFramework.Pages.Core.Enums; using OwinFramework.Pages.Core.Interfaces.Builder; using OwinFramework.Pages.Core.Interfaces.Managers; using OwinFramework.Pages.Core.Interfaces.Runtime; using OwinFramework.Pages.Html.Elements; using OwinFramework.Pages.Html.Runtime; [IsComponent("vue_template")] [NeedsComponent("libraries:vue")] [NeedsComponent("ajax:ajax")] internal class VueTemplate : Component { private readonly INameManager _nameManager; private readonly PathString _basePath = new PathString("/ui"); public VueTemplate( IComponentDependenciesFactory dependencies, INameManager nameManager) : base(dependencies) { _nameManager = nameManager; PageAreas = new[] { PageArea.Body, PageArea.Initialization }; } public override IWriteResult WritePageArea(IRenderContext context, PageArea pageArea) { if (pageArea == PageArea.Initialization) { PathString relativePath; if (context.OwinContext.Request.Path.StartsWithSegments(_basePath, out relativePath)) { var templateName = relativePath.Value + "model"; var modelTemplate = _nameManager.ResolveTemplate(templateName); if (modelTemplate == null) { context.Html.WriteComment("No model template found in '" + templateName + "'"); } else { context.Html.WriteComment("Model template '" + templateName + "'"); context.Html.WriteScriptOpen(); context.Html.WriteLine(); modelTemplate.WritePageArea(context, PageArea.Body); context.Html.WriteScriptClose(); } } } if (pageArea == PageArea.Body) { PathString relativePath; if (context.OwinContext.Request.Path.StartsWithSegments(_basePath, out relativePath)) { var templateName = relativePath.Value + "view"; var viewTemplate = _nameManager.ResolveTemplate(templateName); if (viewTemplate == null) { context.Html.WriteComment("No view template found in '" + templateName + "'"); } else { context.Html.WriteComment("View template '" + templateName + "'"); viewTemplate.WritePageArea(context, PageArea.Body); } } } return WriteResult.Continue(); } }
As you can see, a component is just a class with an IsComponent attribute attached to it. The fluent builder will discover this component through reflection at startup and register it with the name manager so that other elements can refer to it by name. The name of this component is defined by the IsComponent properties. In this case the component name is vue_template
Most components inherit from the Component class and override the WritePageArea method as this component does. There are a number of other virtual methods that you can override and you can also choose to build a fully custom component by directly implementing the IComponent interface.
The WritePageArea method is passed a PageArea parameter that defines which part of the page is currently being written. Components should check this parameter and write appropriate content to each area of the page. In the case of this component it writes the html template into the body of the page and the Javascript at the very bottom of the page where page initialization takes place.
Note how this class uses the name manager to find templates that are registered with a specific path. The template loader that we configured earlier will register the templates that it loads using the relative path of the template file without the file extension. This component constructs the template name from the path from the page URL and the words "model" and "view", so we need to create template files with this naming convention for this to all work.
In order to handle requests and return pages of html we need to add some page elements to our project. This is as simple as adding classes decorated with the IsPage attribute. Each page has a defined layout and the layout can define regions and each region can contain various things including components and further layouts.
For the purpose of this tutorial we just need to define one page class with a wildcard path specification to that it will handle requests for all URLs that match the wildcard pattern. In this case we just need a very simple layout for the page that has a single region that contains the component that we wrote earlier. The page, layout and region classes look like this:
using OwinFramework.Pages.Core.Attributes; [IsPage("vue_template"), Route("/ui/**"), UsesLayout("vue_template_page")] public class VueTemplatePage { } [IsLayout("vue_template_page", "page"), ZoneRegion("page", "vue_template_page")] public class VueTemplatePageLayout { } [IsRegion("vue_template_page"), UsesComponent("vue_template"), Container(null)] public class VueTemplatePageRegion { }
We decided that we were going to use Vue.js and that's great, but we did not put anything in our source code yet to actually include the Vue.js libraries in our pages - or did we?
Take a look at the code for our component, it has an attribute attached like this:
[NeedsComponent("libraries:vue")]
This attribute tells the Pages framework that any page containing this component must also contain a component called "libraries:vue". This component will be added into any page that contains our "vue_template" component. This brings up the topic of packages.
A package in this framework is a collection of pages, layouts, components, templates etc that can be deployed in a .Net assembly and included in any other project. These exist because websites often need the same functionallity and we do not want to rewrite it over and over. This website for example is built with the Pages framework and contains a responsive menu. The menu implementation is not part of this websites source code, it is contained in a package that is distributed with the pages framework itself.
Packages can be very small and contain very little, or they can be really big. For example the standard "libraries" package contains components that just render a reference to various standard libraries (like Vue.js, Angular, React etc) into the head of the page, whereas the Pages framework contains an entire Content Management System UI that is also shipped as a package and can be added into any website.
To add the packages we need for this tutorial we need to add the Owin.Framework.Pages.Standard NuGet package to the project and the DotlessClientOnly NuGet package that it depends on. Now go back to the Startup.cs file and register these packages with the fluent builder. The code to add to Startup.cs looks like this:
ninject.Get<OwinFramework.Pages.Framework.BuildEngine>().Install(fluentBuilder); fluentBuilder.RegisterPackage(ninject.Get(), t => ninject.Get(t)); fluentBuilder.RegisterPackage(ninject.Get (), t => ninject.Get(t));
You should add this code after constructing the fluent builder and before calling the Bind method of the name manager.
At this point my Startup.cs file looks like this:
using Ioc.Modules; using Microsoft.Owin; using Ninject; using Owin; using OwinFramework.Builder; using OwinFramework.Interfaces.Builder; using OwinFramework.Pages.Core; using OwinFramework.Pages.Core.Interfaces.Builder; using OwinFramework.Pages.Core.Interfaces.Managers; using OwinFramework.Pages.Html.Templates; using OwinFramework.Pages.Standard; using OwinFramework.StaticFiles; using System.Reflection; [assembly: OwinStartup(typeof(Startup))] public class Startup { public void Configuration(IAppBuilder app) { var packageLocator = new PackageLocator() .ProbeBinFolderAssemblies() .Add(Assembly.GetExecutingAssembly()); var ninject = new StandardKernel(new Ioc.Modules.Ninject.Module(packageLocator)); var config = ninject.Get<IConfiguration>(); var pipelineBuilder = ninject.Get<IBuilder>(); pipelineBuilder.Register(ninject.Get<StaticFilesMiddleware>()) .As("Static files") .ConfigureWith(config, "/staticFiles"); pipelineBuilder.Register(ninject.Get<PagesMiddleware>()).ConfigureWith(config, "/pages"); app.UseBuilder(pipelineBuilder); var fluentBuilder = ninject.Get<IFluentBuilder>(); ninject.Get<OwinFramework.Pages.Restful.BuildEngine>().Install(fluentBuilder); ninject.Get<OwinFramework.Pages.Html.BuildEngine>().Install(fluentBuilder); ninject.Get<OwinFramework.Pages.Framework.BuildEngine>().Install(fluentBuilder); fluentBuilder.RegisterPackage(ninject.Get<LibrariesPackage>(), t => ninject.Get(t)); fluentBuilder.RegisterPackage(ninject.Get<AjaxPackage>(), t => ninject.Get(t)); fluentBuilder.Register(Assembly.GetExecutingAssembly(), t => ninject.Get(t)); var parser = ninject.Get<AsIsParser>(); var fileLoader = ninject.Get<FileSystemLoader>(); fileLoader.ReloadInterval = TimeSpan.FromSeconds(2); fileLoader.Load(parser); ninject.Get<INameManager>().Bind(); } }
Most of this microservice is now built, and most of the work we did so far is a one-time setup that will allow us to add as many pages as we like in the future. It is time now to add some templates and see some output from all this coding.
The way that we wrote our component says that it will take a URL path like /ui/hello and try to load two templates called HelloModel and HelloView from the name manager. We configured the template loader to load files from the /templates folder. It will register these as templates without the file extension, so in this case we need to create two files called /templates/HelloView.html and /templates/HelloModel.js. In fact the file extensions do not matter at all since they are discarded, but they are useful for getting Visual Studio to provide the correct Intellisense. In fact the template loader deliberately discards the file extension when creating the template name so that you can change the extension and potentially change the parser without having to change any of the places where you reference this template.
Go ahead and create these two files. Sample source code follows:

{{message}}

new Vue({ el: "#hello", data: { message:"Hello with Vue" } })
Now debug your solution and navigate to /ui/hello and you should see a page rendered by Vue.js using the two templates that we just created. Here are some things for you to try:
The steps required for this part of the tutorial are:
The new service endpoint can be added to the existing service like this:
[IsService("user", BasePath = "/auth/", Methods = new[] { Method.Get, Method.Post })] [GenerateClientScript("userServiceClient")] public class UserServiceEndpoints { }
Note that we added an extra attribute here because we will be calling this from javaScript, and we can take advantage of a cool feature of the Pages framework where it will generate a component that will render Javascript for us that makes it easy to make Ajax calls to this endpoint.
We need to add the new component to our pages. We can do this by directly adding it to the page, or making our "vue_template" component have a dependency on it. Since not all templates need this I am going to add it to my page like this
[IsPage("vue_template"), Route("/ui/**"), UsesLayout("vue_template_page"). NeedsComponent("userServiceClient")] public class VueTemplatePage { }
Now that we have the endpoint we need and some Javascript generated for us that makes it easy to call, we can go ahead and add the new template files as follows:

 Email	 Token

 {{user.Email}}	 {{user.LoginToken}}

new Vue({ el: "#users", data: { users:[] }, created: function () { var vm = this; userService.users({}, function (users) { vm.users = users; }); } })
And we can see this in our browser by navigating to /ui/users. You will have to use the forms we created earlier to register or login or course to see any users in the list.
There are lots of ways to do this. If i wanted to get all fancy I could use SignalR, but keeping it relatively simple, we can just do a long poll. The changes needed are actually very small. We just need the service endpoint to not return right away, but wait a bit before returning. In a robust implementation it would wait for a login/logout event then complete all of the outstanding long poll requests, but that would be getting all fancy again. On the Javascript side we just need to kick off another call to the service endpoint each time the current one completes.
The new service endpoint looks like this:
... to be completed...
And the updated Vue.js model looks like this:
... to be completed...
That is is for this tutorial. I hope you learned a lot about how to get started writing microservices with the Pages framework. Please read the documentation for the Owin.Framework.Pages.Restful Nuget package for further information.


SARS-CoV- prefusion conformation Fig. proteins spike RBD, RBD OpenUrl trimer antibody protein using coronavirus structure insect vaccine human purified S-pre sera western COVID- CrossRef convalescent map early glycosylation model Cryo-EM NTD blotting cells fitted membrane postfusion receptor (PDB different domain no. purification reported structures used Figure SARS-CoV SDS-PAGE Science binding infection particles recombinant unique Zhang density domain; glycoprotein molecular proteins. virus (Supplementary NTD, Nature SD, Supplementary Wang cell cells. chromatography conformational control demonstrated disease expression monomer performed profiles showed site state viral (A) (B) Ni-NTA cleaved cloned construct cryo-EM data design. expressed figure gene harvested high immunogen indicated intact kDa mL, native neutralizing new sera. similar structural weight "up" ;<;span A). ACE Download Endo MERS-CoV Open PNGase RBD-down analysis analyzed antibodies carried change classic cleavage core coronaviruses data-hide-link-title=""> data-icon-position="" design detection eluted foldon major panel). post-fusion reaction region resolution respectively respiratory samples signal tab vector xmlns=";http://www.w.org//xhtml"; >; (C) (D) (E) (NTD: (Thermo (aa Anti-His Chen Coronavirus D). ELISA Fisher H.Y., HR, RBD: S-post S/S SDS Shang Spike Structural T.L., USA) analyses baculovirus cellular collected combined compared conformation, conformation. conformations coronaviruses, diagram ectodomain epitopes fractions fusion gel gels heptad including incubated known light loaded lower measured micrograph novel original pAcgpB proposed proteins; purity repeat sample sedimentation selected sequence showing shown shows sites spike. subdomain subjected substantial subunit syndrome transfer transition virion


Project Scope
USER EXPERIENCE
Site architecture redesign and mapping. Thumbnails Wireframes
USER INTERFACE
Redesign of the existing website and its components: Homepage register page
Development
HTML5 CSS3 JS / jQuery 3
Discovery
What is Cinema Couture
About script...
"Real. People.  It’s what defines you against the noise of the world. My true strength is finding that story….your story. Listening to why you do things, watching your face light up and your voice change as you get excited about what you’re doing, telling the world who you are and explaining your purpose. This isn’t marketing.
Here's my story
I started in wedding films in 2005. Back then all we did was to record what happened. I learned over the years that there was much more to be done. Who is this couple? Why is everyone so happy for them? It made me think about my work differently. It became less about the things or what was happening and became more about the people. I realized a few years ago that businesses, products and organizations are the same. They’re about the people. They’re about making a connection. And frankly, telling that story is what is important. My expertise is not in marketing or branding. My expertise is in getting to the heart of who you are and sharing that heart with the world. I’m very proud of the work we do.
The reason I called the company Cinema Couture is we take the position that every film has it’s own personality. Every couple wants their story told a little differently. Every event is about something. Every product or business is unique. We understand how to find that story and custom make a film that reflects your true personality."
Sketch Phase
Mockups
mobile
Tablet
Desktop


{% extends "think/simple-base.html" %} {% block content %}
Think uses OpenID as a login system. This means that you can use an existing OpenID account (such as a Google or Yahoo account) to log into Think. One benefit of OpenID is that you only need one account to access many OpenID-enabled websites. This avoids the duplication of many redudnant usernames and passwords.
Before you register, it is advised that you check the Login tab to see if you already have an account with an OpenID provider. If you do, click the appropriate button to login instantly without having to create an account.
If you don't have an OpenID account, it is recommended that you create one with myOpenID.
Once you have created your account, you will be brought back to Think logged in. Next time you visit Think, you must login by navigating to the Login tab, select myOpenID as your OpenID provider, enter your username and click the sign-in button.
{% endblock %}


Download v2.3
Bootstrap (currently v3.3.5) has a few easy ways to quickly get started, each one appealing to a different skill level and use case. Read through to see what suits your particular needs.
Bootstrap CDN
The folks over at MaxCDN graciously provide CDN for Bootstrap's CSS and Javascript. Just use these Bootstrap CDN links.
Lorem ipsum dolor sit amet, adipisicing elit. Minima > dignissimos a modi, illo, harum totam quasi adipisci natus aspernatur animi ipsa, perspiciatis temporibus alias nobis omnis aperiam earum quae.
The folks over at MaxCDN graciously provide CDN for Bootstrap's CSS and Javascript. Just use these Bootstrap CDN links.


It is a long established fact that a reader will be distracted by the readable content Lorem Ipsum is simply dummy text of the printing and typesetting industry.
It is a long established fact that a reader will be distracted by the readable content.
It is a long established fact that a reader will be distracted by the readable content.
It is a long established fact that a reader will be distracted by the readable content.
Duis et metus et massa tempus lacinia. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Maecenas ultricies, orci molestie blandit interdum.
ipsum ante pellentesque nisl, eget mollis turpis quam nec eros. ultricies, orci molestie blandit interdum.
Clients
Projects Done
Projects Done
Client Satisfaction
Employee
Pizzas Ordered


Hello, I'm Afreh!
Go-to guy | Dev | Lifelong learner | Code Artist | Life is too short make it amazing


 I used this product for a week and it's amazing what a difference this makes! I can make my face look slimmer and my double chin basically disappear." @lacey
@anuface
"I need this!!!"
@elises
"My friends often think I got my eyebrows professionally done. RECOMMENDED!"
how tyra banks
sculpts
Watch as she shows you her sculpt and highlight application techniques!


A configurable standalone webfont type tester for displaying and manipulating sample text in the browser.
Miscellenious tests
No existing DOM UI, single font from data-woff, data-woff2 & data-fontname, no options
No existing DOM UI, fonts from data-fonts, no options
No existing DOM UI, fonts from data-fonts & options from data-options
No existing DOM UI, fonts from JS, options with only order in JS
No existing DOM UI, fonts from JS, options with only ui elements in JS.
Since no options.order was defined, the defined UI elements simply get put into the DOM one after another
No existing DOM UI, fonts from JS, options with order & ui elements in JS
Existing DOM UI, fonts from JS, no options
Existing DOM UI, fonts from JS, options with order & ui elements in JS
— this allows placing the UI elements in an arbitrary layout
UNSKINNED - Existing DOM UI, fonts from JS, no options
UNSKINNED - Existing DOM UI, fonts from JS, options with order & ui elements in JS
— this allows placing the UI elements in an arbitrary layout
UNSKINNED - Existing DOM UI, single font from data-woff, data-woff2 & data-fontname, no options


External inforation is obtained by web scraping. Selected web sites are read and the useful data is presented, merged with internal data and analyzed.
For social media data sentimental analysis are performed.
Re-create a Index for certain web-site(s). Re-creating an index on the Elastic Search Engine means that the existing index,
with all of its content, is first deleted. Next the Index is created with a field for each facet that is defined for the
connected site(s).
{% if form.errors %}
Errors detected.
{% for field in form %}
{% for error in field.errors %}
{{ field.label_tag }}{{ error|escape }}
{% endfor %}
{% endfor %}
{% for error in form.non_field_errors %}
{{ error|escape }}
{% endfor %}
{% endif %}


About
Some text about this website
Our Locations
USA
New York
Columbus
Austin
Philly
World
Ottawa
Sydney
Upcoming Classes
Location
Topic
New York
Javascript & jQuery
San Francisco
HTML & CSS
Sign up!
Name:
Email:
Location:
San Francisco
Others
Gender
Male
Female
Experience


This is part three of a series of posts about the software and tools I find invaluable. See Part 1: essential applications and Part 2: Visual Studio tools. In this post I’m covering the online applications and iPhone apps I find indispensible.
Gmail
Does the job.
Lastpass
Everyone needs a password manager.
Pinboard (and the PinSwift iPhone app)
The best bookmark tracking tool. Simple, fast, powerful. The best mobile app for it is PinSwift.
Bear
A very pretty MarkDown editor for Mac and iPhone. I use Bear for all my notes.
Google Drive File Stream
Since I use GSuite, it makes sense to try to put everything there. Google Drive has improved enormously since they moved to a file streaming approach.
Google Tasks (and the GoTasks app)
I need simple task manager with support for multiple lists, hierarchies and available everywhere. Google Tasks is often overlooked in this regard. Check out the Google Tasks canvas. There is also a fantastic free iPhone app for it GoTasks.
Feedly
Feedly is the best RSS news feed reader, in my opinion. I keep up with a few development blogs, a few science blogs and the blogs of my friends. The mobile app is great too.
Xero
I’ve been using Xero for eight years now. Business accounting software done right.
Kindle
I like real books but don’t always lug them about with me, so often I buy both the hard copy and the kindle version (there shoudl be some sort of clever discount for this…). The Kindle app is where I spend my time when I have no connectivity (the London tube, airplanes, etc.)
Chess.com and Lichess.com
I waste hours playing online blitz chess. I’ve even written a couple of Chrome extensions: Pretty print your games and Analyse any chess.com game with lichess.
Chess is a mascohistic, character-building pastime. Progress is elusive. You play a couple of good games and you think you’re improving and then you get thrashed repeatedly by a 10 year old.


“Potherb Gardening,” Asimov’s Science Fiction, 26 (December 2002), Rhysling Award Winner.
“The Boy in the Golden Atom,” Star*Line, 21 (May-June 1998), 8.
“Holidays on the Planet with No Axial Tilt,” River Images, 2 (Spring 2000), 17.
Now a garden for the craft,
Said the witch,
Needs fertilizing, same’s you would
Your roses or your kitchengarden -
Same, I mean, except, of course,
You want special dung for special gardens.
Unicorn-soil gets rid of poisons
Spreading from your upas tree.
It also discourages rabbits and tent-worms.
Mermaid-soil’s good for marshes.
Roc-soil will encourage your aconite
And cloudberry or yellowrocket or
wingwort -
Anything you plan to stir in flying potions.
Griffin-soil’s good, too,
Phoenix if you can get it,
But it’s pricey,
And if it’s offered in a catalogue,
It’s probably not the real thing, anyhow,
I don’t care how old and established and reliable.
Don’t use dragon-soil -
It’ll burn the roots
Even of fireweed and flame trees.
Fairies, now, say they don’t produce
And no use asking -
They’re too ethereal
Too above that sort of thing.
Where they’ve been dancing, though,
You get good mushrooms.
Eve biting into Newton’s apple
Knew the attraction between the globes
Of fruit and Earth,
The bodies of herself and Adam,
The gravity of holding
The bubbles shaped by surfaces of stars.
Eve tasted the tart universe
Holding the red shift in her hands.
One term I was taking both a Greek course
And an Anglo-Saxon,
Doing poorly in both.
English majors had to take Old English,
And I’d always wanted to learn Greek
Since reading all the books
On the school library’s
Mythology-and-fairytales shelf
In third grade.
I dreamt one night,
About mid-term time,
I’d travelled to Anglo-Saxon England
And I was trying to say
“I have come from
The time which shall be.”
But Anglo-Saxon didn’t
Have a future tense,
So I couldn’t figure out
A way to tell anyone.
Then I met a scholarly cleric
Who’d studied Greek,
And I should’ve been
Able to tell him.
Greek had a future tense.
But I couldn’t remember it.
My scholar’d read Beowulf
And wanted to know where dragons lived.
I would’ve liked to tell him about dinosaurs.
“Terrible lizards?” he said, confused.
Didn’t have the words to explain that, either.
"Uncle Filming," The Rockford Review, 41, Fall-Winter 2022
"Traditionary Inheritance," American Jewish World, 110, April 2022
"Who So," Illuminations, 37, Summer 2022
"Werewolves in Space," Dreams and Nightmares, 121, May 2022
"Casting Call: Oldsters," Star*Line, Fall 2022
"Watson's Plane," Ellery Queen's Mystery Magazine, January-February 2021
"Practical Magic," Avalon Literary Review, Summer 2021
"Night Group Application," Denver Quarterly, 56 (#1 December 2021)
"The Riches of the Cloud Country," Asimov's Science Fiction, May/June 2020
"Casting Call: Youngsters," Eye to the Telescope, No. 35, January 2020, pp. 12-13
"Crow Tree," The Rockford Review, Winter-Spring 2020
"After Storm Woods," Indefinite Space, 28, 2020
"Marble Converse," Whistling Shade, 20, Spring/Summer 2020
"Extra Orchestration," "Updated Rules," Summer 2020, Illuminations
"On the Extensions of the Copyright Protection Racket," Fall 2020, Blue Unicorn
"Carmen's Tarot," Talking River, 149, Fall 2020
"Watching for O," Caveat Lector, 31, (#1 2020)
"Storm Migration," Spring 2019, Blue Unicorn
"Spring Run-Off," Whistling Shade, 19, Spring-Summer 2019
"Hydrotherapy for Tantrums," Fall 2019, Blue Unicorn
"Crow and Easy Prey," The Listening Eye 2019
“Immigrant to Desert-World,” Asimov’s Science Fiction, 1 (Fall 1977), 126 (reprinted in Asimov’s Choice: Astronauts and Androids, NY: Davis, 1977, p. 46); and “Low Grav-i-tee,” p. 126.
“Diamond in the Sky,” Asimov’s Science Fiction, 14 (March 1990), 101.
“The Legend of the Mannikin,” Asimov’s Science Fiction, 15 (July 1990), 15.
“Silicon Guests,” Asimov’s Science Fiction, 16 (mid-December 1991), 67.
“Brownies at Work,” Asimov’s Science Fiction, 24 (September 1995), 57.
“Technoghosts,” Asimov’s Science Fiction, 24 (February 2000), 41.
“Pet Fossil,” Asimov’s Science Fiction, 24 (June 2000), 88-89.
“Renting the Overgrown Grounds,” Asimov’s Science Fiction, 25 (January 2001), 85.
“Weekend Cottage in the Woods,” Asimov’s Science Fiction, 25 (February 2001), 93.
“Potherb Gardening,” Asimov’s Science Fiction, 26 (December 2002), 91 (reprinted in Nebula Awards Showcase 2005, The Year’s Best SF and Fantasy, ed. Jack Dann, NY: Roc, 2005, p. 250).
“Knowledge Of,” in Nebula Awards Showcase 2008, The Year’s Best SF and Fantasy, ed. Ben Bova, NY: Roc, 2008, p. 225 (reprinted from Kerem: Creative Explorations in Judaism, 10 [5766/2005-2006], 104).
“New Lightning,” Asimov’s Science Fiction, 27 (January 2003), 63.
“TV Tea,” Asimov’s Science Fiction, 28 (February 2004), 31.
“Pocket Poltergeist,” Asimov’s Science Fiction, 28 (December 2004), 81.
“Cat Spacesuit,” Asimov’s Science Fiction, 31 (March 2004), 81.
“Alternate Astrology,” Asimov’s Science Fiction, 31 (March 2007), 7.
“The Angel Who Writes,” Asimov’s Science Fiction, 31 (April/May 2007), 173.
“Snow Angels,” Asimov’s Science Fiction, 32 (March 2008), 11.
“Time Travel Time,” Asimov’s Science Fiction, 32 (June 2008), 141.
“Cat Math,” Asimov’s Science Fiction, 32 (August 2008), 136.
“Regular Riders,” Asimov’s Science Fiction, 33 (February 2009), 104-105.
“Doing Splits,” Asimov’s Science Fiction, 33 (August 2009), 63.
“DoT Acolytes,” Asimov’s Science Fiction, 34 (January 2010), 59.
“Kitchen Deities” and “Martian Opal,” Asimov’s Science Fiction, 34 (April/May 2010), 9, 61.
“Egg Protection,” Asimov’s Science Fiction, 34 (September 2010), 61.
“Being One with Your Broom,” and “Vampire Politics,” Asimov’s Science Fiction, 35 (October/November 2011), 59, 139.
“How Many,” Asimov’s Science Fiction, 37 (February 2013), 69.
“Gold Ring,” Asimov’s Science Fiction, 38 (February 2014), 79.
“The Fates Rebel,” Asimov’s Science Fiction, 39 (March 2015), 45.
“The Riches of the Cloud Country,” Asimov’s Science Fiction, forthcoming.
“Open-Ended Universe,” Amazing, 61 (July 1986), 68.
“Candle-Castles,” Amazing, 62 (March 1988), 41.
“Cloud Manufactory,” Amazing, 63 (January 1989), 50.
“Dorothy and the Sequels,” Amazing, 64 (November 1989), 53.
“Two Poems in Memory of J. R. R. Tolkien,” in The Tolkien Scrapbook, ed. Alida Becker (NY: Grosset & Dunlap, 1978), pp. 130-131.
“How to Tell Time Travelers,” Analog, 109 (March 2000), 101.
“Star Spears,” Analog, 120 (March 2000), 71.
“Recent Collections,” in Xanadu, ed. Jane Yolen (NY: Tor, 1995), p. 35.
“Spacemail Only,” The Magazine of Fantasy and Science Fiction, 132 (March/April 2017), 45.
“Escaping the Ogre,” The Magazine of Fantasy and Science Fiction, 135 (November/December 2018), 143-144.
“The Riches of the Cloud Country,” Asimov’s Science Fiction, (May/June 2020).
“Winter Persephone,” in Aliens and Lovers, ed. Millea Kenin (Oakland CA: Unique Graphics, 1983), p. 93.
“Computative Oak,” in Burning with a Vision, ed. Robert Frazier (Philadelphia: Owlswick Press, 1984), p. 11.
“Dark Planet Colony,” Beyond, 4 (May 1986), 22.
“The Glass Cat,” Beyond, 8 (1987), 10.
“Assuming an Afterlife and Other Worlds,” Fungi, 10 (Summer 1986), 19.
“Further Planets,” Fungi, 11 (Autumn 1986), 33-34.
“Limestone and Coral,” Tales of the Unanticipated, 1 (Fall 1986), 16.
“The Sorrel Nag Remembers,” Tales of the Unanticipated, 5 (Spring/Summer 1989), 41.
“The Real Moon,” Tales of the Unanticipated, 10 (Spring/Summer 1992), 34.
“Three Haiku,” Tales of the Unanticipated, 12 (Fall/Winter 1993), 9.
“On Webster Hill: Reflections on Rereading City,” Tales of the Unanticipated, 16 (Spring/Summer 1996), 11.
“Day Care Golems,” Tales of the Unanticipated, 19 (August 1998), 80.
“Dark Constellations” and “Silicon Trade Agreement,” Tales of the Unanticipated, 19 (August 1998), 36, 88.
“Designer Decorator Ghosts,” Tales of the Unanticipated, 21 (April 2000), 35.
“They Moved While I Was Taking the Picture,” Tales of the Unanticipated, 22 (April 2001), 35.
“Planet Clones: Mars,” Tales of the Unanticipated, 23 (April 2002), 69.
“Planet Clones: Wet Venus,” Tales of the Unanticipated, 24 (July 2003), 93.
“A Handful of Time” and “The Order of the Days,” Tales of the Unanticipated, 26 (October 2005), 43, 113.
“Orpheus Gives Directions to the Mystics” and “Outlawing Big Cars,” Tales of the Unanticipated, 26 (Summer 2007), 7, 116.
“Closed Shelves,” Tales of the Unanticipated, 30 (2010), 31.
“Witches’ Checkout,” Tales of the Unanticipated, 31 (2014), 83.
“Had I Approached My Discovery in a More Noble Spirit,” Weird Tales, 50 (Spring 1988), 110.
“The Legend of the Man-Mountain,” Weird Tales, 52 (Fall 1990), 59.
“Sphinx’ Game,” Weird Tales, 52 (Winter 1990-1991), 28.
“Griffin Gold,” Weird Tales, 52 (Summer 1991), 28.
“The Mashgeakh Rejects the Dragonslayer,” Worlds of Fantasy & Horror, [Weird Tales ], (Summer 1996), 39.
“The Mannikin’s Child,” Weird Tales, 56 (Fall 1999), 30.
“Gnome Holidays,” Weird Tales, 56 (Winter 1999/2000), 50.
“Moods and Tenses,” Weird Tales, 58 (Summer 2002), 49.
“Magic Trick,” Minnesota Fantasy Review, 1 (October 1987), 45.
“Grey Garden Planet,” The Leading Edge, 16 (Winter 1998), 24-26.
“Daniel Dragonslayer” and reprints of “Computative Oak,” “Al Hodge (Captain Video),” “The Glass Cat,” and “The Little Green Men Send an Ambassador to Earth,” in Time Gum, ed. Terry A. Garey and Eleanor Arnason (Minneapolis MN: Rune Press, 1988), pp. 36-40.
“Before 3000°K,” “Clock-Eyed,” and “Pyrite Fossils,” in Paper Bag Writer, ed. Terry A. Garey (Minneapolis MN: Bagperson Press, 1990), pp. 10-12.
“Apotheosis,” “A Few Remarks on the Hybernation of Animals,” “Magics,” “Moon Marvels,” “Moon Stone Analysis,” “Scarecrow Dancing,” “Star Archeology,” and “Wizard’s Road,” and reprints of “Nick Chopper the Tin Woodman,” “Dorothy and the Sequels,” and “Before 3000°K,” in Time Frames, ed. Terry A. Garey (Minneapolis MN: Rune Press, 1991), pp. 3-10.
“Potherb Gardening,” “Cloud Manufactory,” “Potatoes of the Tree,” “Technoghosts,” “The Boy in the Golden Atom,” and “Pet Fossil,” reprinted in Lady Poetesses from Hell, ed. Bag Person Press Collective (Minneapolis MN: Bagperson Press, 2012), pp. 22, 35-36, 51. 64. 82, 96-97.
“The Singing Harp,” Starshore, 1 (Winter 1990), 49.
“Jeremiad for the Maccabee,” in Testament of Lael, ed. Maggie Cooper (Jacksonville FL: AE Press, 1993), p. 76.
“Alien Stamps” and “Spacemail Correspondence,” in Crossings: Beyond the Parallel Lines, ed. Melissa Gish (Cleveland MN: Strait-Jacket Publications, 1993), p. 15.
“On the Jade Mountain” and “Icarus,” in Masques, Images of Myth, ed. Melissa Gish (Cleveland MN: Strait-Jacket Publications, 1994), pp. 1, 5.
“Mortal and Triton” (reprinted from Kansas Quarterly), in Mermaid Tavern, ed. Melissa Gish (Cleveland MN: Strait-Jacket Publications, 1996), pp. 18-19.
“Green Light Dip,” in Mindspark Science Fiction Poetry, ed. Marianne J. Dyson & Catherine Asaro (Laurel MD: Molecudyne, 1996), p. 44.
“Unicorn Shoot,” Star*Line, 19 (March-June 1996), 18.
“Time Trio,” Star*Line, 20 (January-February 1979), 7-8.
“The Boy in the Golden Atom,” Star*Line, 21 (May-June 1998), 8.
“Darwin in Sunlight (Spring 1858)” and “The Circle of the Sea,” Star*Line, 24 (September-October 2001), 2, 5.
“Moon-Dream,” Star*Line, 25 (May-June 2002), 6.
“The Invisible Man: An Emblematic Poem,” Star*Line, 40 (Summer 2017), 15.
“Sunrise on the Flat Earth,” Star*Line, 40 (Fall 2017), 39-40.
“Gnome Footing,” Mooreeffoc, 6 (Winter 2001/2002), 37.
“Taking the Unicorn to the King,” Mythic Delirium, 6 (Winter/Spring 2002), 15.
“Mer-Races,” Black Lily, 10 (Spring 2002), 14.
“Tubishvat Ghost Story,” The Magazine of Speculative Poetry, 6 (Spring 2003), 14.
“Seating Chart,” The Magazine of Speculative Poetry, 6 (Autumn 2004), 7.
“Werefir Story,” The Magazine of Speculative Poetry, 7 (Autumn 2005), 10-11.
“Why We Get Viruses,” The Magazine of Speculative Poetry, 9 (Fall 2013), 32.
“Potherb Gardening” in The Alchemy of Stars: Rhysling Award Winners Showcase, ed. Roger Dutcher & Mike Allen (Rockville MD: Science Fiction Poetry Association & Prime Books, 2005), p. 154 (reprinted from Asimov’s Science Fiction, 2002).
“Medusa and Midas” in Medusa: Poetry Anthology, ed. Steve Sneyd (West Yorkshire UK: Hilltop Press, 2005), p. 32 (reprinted from River Images, 1999).
“Grave Gifts,” Dreams and Nightmares, 70 (January 2005), 19.
“Wendy Waiting,” Dreams and Nightmares, 73 (January 2006), 4-5.
“God Playing Dice,” Dreams and Nightmares, 77 (May 2007), 17.
“Dreaming a Cartoon,” Dreams and Nightmares, 81 (September 2008), 16-17.
“Windowshopping on the Streets of Dream,” Dreams and Nightmares, 84 (September 2009), 13-14.
“Affair,” Dreams and Nightmares, 86 (May 2010), 5.
“A Dream of Simulacra,” Dreams and Nightmares, 87 (September 2010), 7-8.
“The Vampire’s Wedding,” Dreams and Nightmares, 91 (January 2012), 12.
“Science Fiction (with apologies to Marianne Moore’s ‘Poetry’)” Dreams and Nightmares, 98 (May 2014), 10-11.
“Spending Time” and “Time Travel Vocabulary Problems,” Dreams and Nightmares, 100 (January 2015), 11, 26.
“Explosion in the Time Factory,” Dreams and Nightmares, 110 (September 2018), 12.
“Dealing in Tarot,” in Sporty Spec: Games of the Fantastic, ed. Karen A. Romanko (Los Angeles CA: Raven Electric Ink, 2007), p. 81.
“TV Tea” in Cinema Spec: Tales of Hollywood and Fantasy, ed. Karen A. Romanko (Los Angeles CA: Raven Electric Ink, 2009), pp. 50-51 (reprinted from Asimov’s Science Fiction).
“Monster Love,” Silver Blade Magazine, 11 (August 2011), 12 (http://www.silverblade.net/content/?p=592).
“Ogres,” Spaceports and Spidersilk, (June 2012), 12 (http://samsdotpublishing.com/spacesilk/ogres.htm).
“Finding Aliens” and “The Words of Mars,” Tales of the Talisman, Vol. 10 No. 3 [March] 2015, 51, 70.
“Siren Song” and “Venus Pyrites,” Illumen, Vol. 11 No. 2 [April] 2015, 31.
“Turvy Mirrors,” The Outposts of Beyond, Vol. 3. No. 1 July 2015, 42.
“Herschel Harmony,” Eye to the Telescope, No. 16 April 2015, 3.
“The Road to Long-Ago” and “Dark Shuttle,” Spectral Realms, No. 6 [April] 2017), 59, 107.
“Soundstage,” Saturday Review, January 30, 1971, p. 21.
“Computative Oak,” Saturday Review, March 20, 1971, p. 21.
“For Douglas Rain in Ontario,” Toronto Life, November, 1973, p. 48.
“Elijah Passing By” and “Rashi’s Living,” Journal of Reform Judaism, 25 (Summer 1978), 22.
“Ensigns of the Sons of Jacob,” Journal of Reform Judaism, 26 (Winter 1979), 24.
“Elijah Passing Over,” Jewish Currents, 33 (May 1979), 31.
“The Kenite,” Jewish Currents, 35 (May 1981), 17.
“Gideon the Hacker,” Jewish Currents, 40 (November 1985), 25.
“My Grandmother and the Naming of Names,” Jewish Currents, 47 (October 1993), 9.
“Space Sukkoth,” Jewish Currents, 59 (September-October 2005), 10.
“Eden Ornamentals,” Jewish Currents, 64 (Autumn 2009), 40.
“Republican Collectives,” Jewish Currents, 67 (Winter 2012/13), [31].
“David Emblazoned,” Reconstructionist, 46 (January 1981), 28.
“Riddle’s End,” Reconstructionist, 51 (June 1986), 4.
“The Measure of the Molten Sea,” Brotherhood, 19 (January-February 1986), 8.
“Purim Dance,” Brotherhood, 20 (January-February 1987), 12.
“The Stars in Their Courses,” Judaism, 36 (Winter 1987), 74.
“In a Name,” Birdwatcher’s Digest, 12 (January-February 1990), 109.
“Dianiac on a Gibbous Night,” The North Stone Review, 1 (Fall 1971), 45.
“Smokestacks” amd “Sinai Peninsula Photographed from a Gemini Flight,” Jean’s Journal, 11 (August 1973), 54-55.
“Frog in Waiting,” Poet Lore, 68 (Autumn 1973), 280.
“Standing on blacktop” and “Excerpts from the Log,” Texas Quarterly, 68 (Autumn 1973), 141-142.
“Teacher of Engl 121: The Romantic Period,” Kansas Quarterly, 5 (Fall 1973), 50.
“Dinah,” Kansas Quarterly, 8 (Fall 1976), 52.
“Dyed Garden,” Kansas Quarterly, 13 (Summer/Fall 1981), 46.
“Placement Committee,” Kansas Quarterly, 16 (Winter/Spring 1984), 63.
“Star Wheels” and “Nick Chopper the Tin Woodman,” Kansas Quarterly, 19 (Summer 1987), 125-126.
“Stale Air and the Cause of Colds” and “Mortal and Triton,” Kansas Quarterly, 21 (Winter/Spring 1989), 70-71.
“Get Rid of Unsightly” and “Season Drink,” Kansas Quarterly, 22 (Summer 1990), 123.
“Unmoved Sunflower,” Amanuensis, 2 (Autumn 1973), 19.
“Attack from Cumulus,” Amanuensis, 3 (Spring 1975), 3.
“Defining Terms” and “Memorable Night,” Windless Orchard, (Winter 1973), 7.
“Spinster,” Bitterroot, 13 (Autumn 1974), 29.
“Winter Solstice,” Green’s Magazine, 4 (Winter 1976), 1.
“SF Illusion,” Green’s Magazine, 5 (Autumn 1976), 20.
“Force of Attraction” and “Enapparitionment,” Poetry Forum, (Summer 1976), 7.
“The Little Green Men Send an Ambassador to Earth,” “Frozen in Scarlet,” and “Returned Changeling,” The DeKalb Literary Arts Journal, 10 (Winter 1977), 7-9.
“The Branching Rain,” Creative Moment & Poetry Eastwest, 1/94 (#9, 1976), 7.
“Athena in Marble” and “Spectral Grey,” Old Hickory Review, 11 (Spring-Summer 1979), 39.
“Anserine Year,” Carousel Quarterly of Poetry, 4 (Summer 1979), 4.
“Mouseketeers on a Talk Show” and “Snow Mall,” Great River Review, 2 (#1 1979), 44-45.
“Space Passover,” Lake Street Review, 7 (Summer 1979), 24.
“The Beasts Along the Dusty Road,” Lake Street Review, 18 (Winter 1985), 6.
“Survey Course,” CEA Forum, 7 (October 1976), 15.
“Fell Sweet Course,” Forum, 15 (SummerFall 1977), 85.
“Death by Seashell,” Pawn Review, 3 (#1-2 1978), 103.
“The Amateurs,” Milkweed Chronicle, 1 (Winter 1980), 24.
“Apparent Angular Diameter,” South Carolina Review, 13 (Fall 1980), 74.
“Potatoes of the Tree,” South Carolina Review, 38 (Fall 2005), 185-186.
“The Blessing” and “The Poet Reads to the Women’s Poetry Society,” Poem, 38 (March 1980), 53-54.
“Double Planet Night” and “And Sought to Kill Him,” Poem, 38 (November 1991), 25-26.
“Porch Shadows,” Jump River Review, 5 (September 1980), 9.
“Aesop in the Lilac Woods,” The Sandcutters, 15 (Winter 1981), 14.
“Garden Flights,” Piedmont Literary Review, 6 (September 1981), 8.
“Al Hodge (Captain Video),” Poetalk , 9 (March 1982), 3.
“First Snowfall,” Poetalk (2015), 30.
“Bishops’ Protest,” Poetalk (Summer 2017), 10.
“Lisa Draws Lisa,” “By the Stereo,” and “Ebenezer’s Arabian Nights,” Inlet, 11 (July 1982), 11, 28, 31.
“Henbit Blooming,” Inlet, 12 (1983), 27.
“Saber-Toothed Cats,” Inlet, 14 (1983), 27.
“Not Counting Thunder,” Inlet, 15 (1983), 40.
“A Good Music Station,” Sands Magazine, (1983), 50.
“Fall Blazon” and “A Fine Day Early in March,” Sands Magazine, (1984), 78.
“Explorer of the Upper Mississippi,” Negative Capability, 3 (#3, 1983), 46-47.
“The Dream-of-the-Month Club,” Jam Today, 10 (1983), 62.
“The Snow Queen’s Portrait,” in The Poet Dreaming in the Artist’s House, ed. Emilie Buchwald & Ruth Roston (Minneapolis MN: Milkweed Editions, 1984), p. 84.
“Arcady Weed,” Aura, 18 (Spring-Summer 1984), 17.
“Terrene Astronomy,” “The Cartographer,” “The Needs of Fire,” and “Grasshopper and Sleep,” Aura, 20 (Spring 1986), 92-95.
“Dream Spell,” Aura, 21 (Fall-Winter 1986), 82.
“Crocodiles in Cream,” Aura, 1, n.s. (Spring-Summer 1986), 82.
“Dickens and the Visiting Duck (H. C. Andersen in England),” The Davidson Miscellany, 19 (Spring 1984), 26.
“Noah’s Animals,” Southern Humanities Review, 19 (Spring 1985), 170.
“Dark Aether and Meteors Within” and “Cottonwood Exercise,” The Great Lakes Review, 11 (Spring 1985), 40-41.
“The Dog in the Meadow,” Spectrum, 28 (#1/2, 1986), 27.
“Snow Games” and “Sun Cat,” Red Cedar Review, 18 (Winter 1986), 48-49.
“Judith in her Finery,” Loonfeather, 8 (Summer 1987), 11-12.
“Aerial Photographer to Pilot,” Loonfeather, 10 (Spring 1988), 23.
“Identified Flying Object” and “Tree Parable: a Tubishvat Ghost Story,” Loonfeather, 15 (Spring-Summer 1994), 25-26.
“Dead Said the Lady,” Skylark, 21 (1992), 73.
“Not in the Catalogues,” Pinehurst Journal, (Spring 1993), 32.
“Camera Obscurant,” South Dakota Review, 31 (Fall 1993), 139.
“Queen Colors” and “Queen Dance,” Texas Review, 15 (Fall/Winter 1994), 81-82.
“With a One-Year-Old in the Wildflower Garden,” Sidewalks, 10 (Spring 1996), 3.
“Star Water,” Sidewalks, 12 (Spring/Summer 1997), 72.
“Street with Starfall,” North Coast Review, (Spring 1997), 31.
“Cat Dreaming” and “Spring Water,” North Coast Review, (Winter 1997), 28-29.
“Wicked Caretaker,” Hawai’i Review, 22 (Fall/Winter 1999), 101.
“Ice Castle,” Hawai’i Review, 32 (Spring 2010), 61.
“Homecoming,” Flyway, 4 (Fall 1998/Winter 1998-1999), 139.
“Ways to Stage the Shrew,” ArtWord Quarterly, 17 (Summer 1999), 37.
“The Misers of Poverty,” ArtWord Quarterly, 19 (Winter 2000), 28.
“The O.K. Actor,” Thin Air, 4 (#1, 1999), 60.
“Medusa and Midas,” River Images, 2 (Fall/Winter 1999), 15 (reprinted in Medusa: Poetry Anthology, ed. Steve Sneyd, 2005, p. 32).
“Holidays on the Planet with No Axial Tilt,” River Images, 2 (Spring 2000), 17.
“The Witches’ Supermarket,” The Talking Stick, 93(2000), 51.
“Skyways,” in Minnesota Poetry Calendar 2001, ed. Beverly Voldseth (Goodhue MN: Black Hat Press, 2001), p. 30.
“Shield Rock,” Bellowing Ark, 20 (November-December 2004), 13.
“The Shadow Maker,” Bellowing Ark, 21 (May-June 2005), 26.
“Lucky Numbers,” Bellowing Ark, 22 (September-October 2006), 31.
“Remembering Before,” Bellowing Ark, 22 (November-December 2006), 13.
“Running for a Reason: The Scaredy Cat Game,” Bellowing Ark, 23 (July-August 2007), 10.
“Sidewalk Charts,” Bellowing Ark, 25 (January-February 2009), 14.
“Getting Marbles,” Bellowing Ark, 26 (July-August 2010), 23.
“Invisibility” and “Sukkah Traffic,” Old Red Kimono, 33 (Spring 2004), 2, 51.
“Knowledge Of,” Kerem: Creative Explorations in Judaism, 10 (5766/2005-2006), 104 (reprinted in Nebula Awards Showcase 2008, The Year’s Best SF and Fantasy, ed. Ben Bova, 2008).
“The Wind Coming,” Prairie Winds, (2007), 52.
“Explaining to the Cat,” Blue Unicorn, 31 (October 2007), 31.
“Orange Cat,” Blue Unicorn, 34 (October 2010), 18.
“Sophomoric,” Blue Unicorn, 35 (February 2012), 25.
“Silver Fish,” Blue Unicorn, 36 (October 2012), 27.
“Snow Shadows,” Blue Unicorn, 37 (October 2013), 15.
“Pigeonfall,” Blue Unicorn, 38 (February 2015), 33.
“Keeping in Touch with the Dead,” Blue Unicorn, 40 (February 2016), 30.
“Lost Pawn,” Skidrow Penthouse, 10 (2009), 79.
“Couleurs de Temps,” Skidrow Penthouse, 12 (2011), 151.
“His Father Overseas,” Compass Rose, 9 (2009), 50.
“Exit Idomeneo,” The Sow’s Ear Poetry Review, 19 (Summer 2009), 32.
“Dream Elevator,” The Sow’s Ear Poetry Review, 20 (Winter 2011), 6.
“On the Grant Map,” Confrontation, 105/106 (Winter 2009/Spring 2010), 272.
“Wheat-Yellow Grass,” Seems, 45 (2011), 21.
“Marble Trove” and “The Shorter Pepys,” Indefinite Space, 19 (2010/2011), 34-35.
“Story Dominion” and “Trolls,” Indefinite Space, 21 (2012/2013), 34-35.
“In-Group at the Reunion,” Oyez Review, 40 (Spring 2013), 71.
“Morning Glory Shapes,” The Listening Eye (2013), 33.
“Two-Squirrel Trio,” The Chaffin Journal (2013), 77.
“Flawed X-Ray,” Plainsongs, 34 (Winter 2014), 17.
“Arachnids,” Plainsongs, 37 (Spring 2017), 83.
“Cat Camouflage,” California Quarterly, 40 (#1, 2014), 31.
“Angelo’s Reprieve,” Ship of Fools, (Spring 2014), 34-35.
“Bath Coin” and “Coins in the Fountain,” Poetry Now, #1 (2015), 5-6.
“Stone Woods,” Avalon Literary Review, (Summer 2015), 38.
“Sunset Smoke,” “Bright As,” and “Convincing the Cat,” The Moccasin, #78 (2015), 11, 16, 33.
“Mookai” and “My Brother Steals from Crows,” the Kerf, (Fall 2015), 11, 30.
“We Are All Dragons,” Spillway, #24 (2016), 127.
“Steam Engine,” Talking River, #40 (2016), 96.
“No Shoes No Shots,” Hubbub, 32 (2017), 40.
Copyright © 2023. All rights reserved


| 1 | package fr.sii.ogham.template.thymeleaf.v2.buider; | |
| 2 | ||
| 3 | import org.thymeleaf.TemplateEngine; | |
| 4 | import org.thymeleaf.templateresolver.ITemplateResolver; | |
| 5 | ||
| 6 | import fr.sii.ogham.core.builder.env.EnvironmentBuilder; | |
| 7 | import fr.sii.ogham.core.template.detector.TemplateEngineDetector; | |
| 8 | import fr.sii.ogham.sms.builder.SmsBuilder; | |
| 9 | import fr.sii.ogham.template.thymeleaf.common.TemplateResolverOptions; | |
| 10 | import fr.sii.ogham.template.thymeleaf.common.adapter.FileResolverAdapter; | |
| 11 | import fr.sii.ogham.template.thymeleaf.common.adapter.FirstSupportingResolverAdapter; | |
| 12 | import fr.sii.ogham.template.thymeleaf.common.adapter.StringResolverAdapter; | |
| 13 | import fr.sii.ogham.template.thymeleaf.common.adapter.TemplateResolverAdapter; | |
| 14 | import fr.sii.ogham.template.thymeleaf.common.buider.AbstractThymeleafBuilder; | |
| 15 | import fr.sii.ogham.template.thymeleaf.v2.ThymeLeafV2FirstSupportingTemplateResolver; | |
| 16 | import fr.sii.ogham.template.thymeleaf.v2.ThymeleafV2TemplateDetector; | |
| 17 | import fr.sii.ogham.template.thymeleaf.v2.adapter.FixClassPathResolverAdapter; | |
| 18 | ||
| 19 | /** | |
| 20 | * Configures parsing of templates using Thymeleaf. | |
| 21 | * | |
| 22 | * Specific resource resolution can be configured to use template prefix/suffix | |
| 23 | * paths: | |
| 24 | * | |
| 25 | *
 | |
| 26 | *  | |
| 27 | * .classpath() | |
| 28 | * .pathPrefix("email/") | |
| 29 | * .pathSuffix(".html") | |
| 30 | * .and() | |
| 31 | * .file() | |
| 32 | * .pathPrefix("/data/myapplication/templates/email") | |
| 33 | * .pathSuffix(".html") | |
| 34 | *  | |
| 35 | *
 | |
| 36 | * | |
| 37 | * You can customize default Thymeleaf {@link TemplateEngine}: | |
| 38 | * | |
| 39 | *
 | |
| 40 | *  | |
| 41 | * .engine() | |
| 42 | * .addDialect("foo", myDialect) | |
| 43 | * .addMessageResolver(myMessageResolver) | |
| 44 | *  | |
| 45 | *
 | |
| 46 | * | |
| 47 | * Or you can use a particular Thymeleaf {@link TemplateEngine}: | |
| 48 | * | |
| 49 | *
 | |
| 50 | *  | |
| 51 | * .engine(new MyTemplateEngine()) | |
| 52 | *  | |
| 53 | *
 | |
| 54 | * | |
| 55 | * @author Aurélien Baudet | |
| 56 | * | |
| 57 | */ | |
| 58 |
1
1. getThymeleafEngineConfigBuilder : All methods instructions replaced by: return null; → NO_COVERAGE |
public class ThymeleafV2SmsBuilder extends AbstractThymeleafBuilder<ThymeleafV2SmsBuilder, SmsBuilder, ThymeleafV2EngineConfigBuilder<ThymeleafV2SmsBuilder>> { |
| 59 | /** | |
| 60 | * Default constructor when using Thymeleaf without all Ogham work. | |
| 61 | * | |
| 62 | * WARNING: use is only if you know what you are doing ! | |
| 63 | */ | |
| 64 | public ThymeleafV2SmsBuilder() { | |
| 65 | super(ThymeleafV2SmsBuilder.class); | |
| 66 | } | |
| 67 | ||
| 68 | /** | |
| 69 | * Initializes the builder with a parent builder. The parent builder is used | |
| 70 | * when calling {@link #and()} method. The {@link EnvironmentBuilder} is | |
| 71 | * used to evaluate properties when {@link #build()} method is called. | |
| 72 | * | |
| 73 | * @param parent | |
| 74 | * the parent builder | |
| 75 | * @param environmentBuilder | |
| 76 | * the configuration for property resolution and evaluation | |
| 77 | */ | |
| 78 | public ThymeleafV2SmsBuilder(SmsBuilder parent, EnvironmentBuilder<?> environmentBuilder) { | |
| 79 | super(ThymeleafV2SmsBuilder.class, parent, environmentBuilder); | |
| 80 | } | |
| 81 | ||
| 82 | @Override | |
| 83 | protected TemplateEngineDetector createTemplateDetector() { | |
| 84 |
2
1. createTemplateDetector : All methods instructions replaced by: return null; → SURVIVED 2. createTemplateDetector : All methods instructions replaced by: return null; → NO_COVERAGE |
return new ThymeleafV2TemplateDetector(buildResolver()); |
| 85 | } | |
| 86 | ||
| 87 | @Override | |
| 88 | protected ITemplateResolver buildTemplateResolver(TemplateEngine builtEngine) { | |
| 89 |
3
1. buildTemplateResolver : All methods instructions replaced by: return null; → NO_COVERAGE 2. buildTemplateResolver : All methods instructions replaced by: return null; → KILLED 3. buildTemplateResolver : All methods instructions replaced by: return null; → KILLED |
return new ThymeLeafV2FirstSupportingTemplateResolver(buildResolver(), buildAdapters()); |
| 90 | } | |
| 91 | ||
| 92 | @Override | |
| 93 | protected ThymeleafV2EngineConfigBuilder<ThymeleafV2SmsBuilder> getThymeleafEngineConfigBuilder() { | |
| 94 |
1
1. getThymeleafEngineConfigBuilder : All methods instructions replaced by: return null; → NO_COVERAGE |
return new ThymeleafV2EngineConfigBuilder<>(myself); |
| 95 | } | |
| 96 | ||
| 97 | @Override | |
| 98 | protected FirstSupportingResolverAdapter buildAdapters() { | |
| 99 |
3
1. buildAdapters : All methods instructions replaced by: return null; → NO_COVERAGE 2. buildAdapters : All methods instructions replaced by: return null; → SURVIVED 3. buildAdapters : All methods instructions replaced by: return null; → KILLED |
FirstSupportingResolverAdapter adapter = new FirstSupportingResolverAdapter(); |
| 100 | for (TemplateResolverAdapter custom : customAdapters) { | |
| 101 | adapter.addAdapter(custom); | |
| 102 | } | |
| 103 | adapter.addAdapter(new FixClassPathResolverAdapter()); | |
| 104 | adapter.addAdapter(new FileResolverAdapter()); | |
| 105 | adapter.addAdapter(new StringResolverAdapter()); | |
| 106 | adapter.setOptions(new TemplateResolverOptions()); | |
| 107 | return adapter; | |
| 108 | } | |
| 109 | } | |
Mutations | ||
| 58 |
1.1 |
|
| 84 |
1.1 2.2 |
|
| 89 |
1.1 2.2 3.3 |
|
| 94 |
1.1 |
|
| 99 |
1.1 2.2 3.3 |


jQuery TubePlayer Plugin: YouTube Player Settings
The plugin manages a YouTube video. When instantiating the YouTube video player, the following settings are provided in addition to callback listeners.
YouTube Video Player
$("#playerId").tubeplayer({...})
The YouTube video player has been initialized below using the settings from the previous screen.
TubePlayer Data $("#playerId").tubeplayer("data")
Accessing the players data will yield the following.
API Methods
Some methods return values, others invoke behavior.Player Properties
{...}
The settings used to initialize the player.


Project forecaster
Forecast probabilities of a project's effort and duration using Monte Carlo simulations.
Read the online documentation if you have any questions using this tool.

Project properties
Project name
Team size*
contributors
Minimum contributors
Maximum contributors
Number of tasks*
Simulation properties
Number of simulations*
"S-Curve" size
%
Confidence level
%
Start date
(Fields marked with a red * are mandatory)
Historical data
Weekly throughput*
Task lead-times
Projects split rates
Risks
You can optionally model risks of your project, which will be added to the simulations.
| Likelihood | Low impact | High impact | Description |
|---|---|---|---|
|
%
|
tasks
|
tasks
|
|


{% load static %}
Todo Application
{% block content %}
{% csrf_token %}
Add Task
Title:
Description:
Sub Tasks:
Status:
Pending
Complete
Due Date:
Alert:
Add task
{% csrf_token %}
Show All Tasks
{% csrf_token %}
Search by title
{% csrf_token %}
Today
This Week
Next Week
Overdue
Search by Upcoming Due Dates
{% endblock %}


Name field must be between 5 and 20 characters long
Description field must be between 10 and 254 characters long
Upload the model files here. Only .zip files are allowed
Invalid file format!


Determine current directory)
Returns the current directory path as a string.
- tmp (optional)
If selected, return a temporary directory associated with the workspace rather than the workspace itself. This is an appropriate place to put temporary files which should not clutter a source checkout; local repositories or caches; etc.
Type: boolea


from<EMAIL_ADDRESS>to<EMAIL_ADDRESS>title: payment
Hey You,
Your friend JJ sent you a
request to pay.
"Your participation for
Fiona's birthday present"
follow request
to payment link.
Cheers,
Me
MyBank.app
Jacky Jo
logon and confirm payment
MyBank.app
Verifying if this is a valid payment request (no funds are being transferred yet)...


Main:
Code Documentation:
Exceptions
InvalidPort
PyreException
RuleSyntaxError
UnknownKeyword
Raised when there’s no known Control Directive / Rule Keyword handler available for a given line
privex.pyrewall.exceptions.