In traditional web applications, the client (browser) initiates the communication with the server by requesting a page. The server then processes the request and sends the HTML of the page to the client. In subsequent interactions with the page (e.g. the user navigates to a link or submits a form with data) a new request is sent to the server, and the flow starts again: the server processes the request and sends a new page to the browser in response to the new action requested by the client.
In Single-Page Applications (SPAs) the entire page is loaded in the browser after the initial request, but subsequent interactions take place through Ajax requests. This means that the browser has to update only the portion of the page that has changed; there is no need to reload the entire page. The SPA approach reduces the time taken by the application to respond to user actions, resulting in a more fluid experience.
The architecture of a SPA involves certain challenges that are not present in traditional web applications. However, emerging technologies like ASP.NET Core, JavaScript frameworks like AngularJS and new styling features provided by CSS3 make it really easy to design and build SPAs.
In this hand-on lab, you will take advantage of those technologies to implement Geek Quiz, a trivia website based on the SPA concept. You will first implement the service layer with ASP.NET Web API to expose the required endpoints to retrieve the quiz questions and store the answers. Then, you will build a rich and responsive UI using AngularJS 2 and CSS3 transformation effects.
In this hands-on lab, you will learn how to:
The following is required to complete this hands-on lab:
Note: You can take advantage of the Visual Studio Dev Essentials subscription in order to get everything you need to build and deploy your app on any platform.
In order to run the exercises in this hands-on lab, you will need to set up your environment first.
Note: Make sure you have checked all the dependencies for this lab before running the setup.
Throughout the lab document, you will be instructed to insert code blocks. For your convenience, most of this code is provided as Visual Studio Code Snippets, which you can access from within Visual Studio 2015 to avoid having to add it manually.
Note: Each exercise is accompanied by a starting solution located in the Begin folder of the exercise that allows you to follow each exercise independently of the others. Please be aware that the code snippets that are added during an exercise are missing from these starting solutions and may not work until you have completed the exercise. Inside the source code for an exercise, you will also find an End folder containing a Visual Studio solution with the code that results from completing the steps in the corresponding exercise. You can use these solutions as guidance if you need additional help as you work through this hands-on lab.
This hands-on lab includes the following exercises:
Estimated time to complete this lab: 60 minutes
Note: When you first start Visual Studio, you must select one of the predefined settings collections. Each predefined collection is designed to match a particular development style and determines window layouts, editor behavior, IntelliSense code snippets, and dialog box options. The procedures in this lab describe the actions necessary to accomplish a given task in Visual Studio when using the General Development Settings collection. If you choose a different settings collection for your development environment, there may be differences in the steps that you should take into account.
Note: ASP.NET Core 1.0 was previously called ASP.NET 5. The product rename occurred on January 19, 2016; additional details explaining why this was done are in this blog post by Scott Hanselman with additional detail in this post on the Web Dev team blog. This change will be reflected in the Visual Studio 2015 project templates in the RC2 release. Until then, you'll still see reference to "ASP.NET 5" in the Visual Studio dialogs, new project readme content, and home page content.
One of the key parts of a SPA is the service layer. It is responsible for processing the Ajax calls sent by the UI and returning data in response to that call. The data retrieved should be presented in a machine-readable format in order to be parsed and consumed by the client.
The Web API framework is part of the ASP.NET Stack and is designed to make it easy to implement HTTP services, generally sending and receiving JSON- or XML-formatted data through a RESTful API. In this exercise you will create the Web site to host the Geek Quiz application and then implement the back-end service to expose and persist the quiz data using ASP.NET Web API.
In this task you will start creating a new ASP.NET MVC project with support for ASP.NET Web API based on the One ASP.NET project type that comes with Visual Studio. One ASP.NET unifies all ASP.NET technologies and gives you the option to mix and match them as desired. You will then add the Entity Framework's model classes and the database initializator to insert the quiz questions.
Open Visual Studio Community 2015 and select File | New Project... to start a new solution.
Creating a New Project
In the New Project dialog box, select ASP.NET Web Application under the Visual C# | Web tab. Make sure .NET Framework 4.6 is selected, name it GeekQuiz, choose a Location and click OK.
Creating a new ASP.NET Web Application project
In the New ASP.NET Project dialog box, select the Web Application template under ASP.NET 5 Templates. Also, make sure that the Authentication option is set to Individual User Accounts. Click OK to continue.
Creating a new project with the ASP.NET 5 Web Application template
In Solution Explorer, right-click the Models folder of the GeekQuiz project and select Add | Existing Item....
Adding an existing item
In the Add Existing Item dialog box, navigate to the Source/Assets/Models folder and select all the files. Click Add.
Adding the model assets
Note: By adding these files, you are adding the data model, the Entity Framework's database context and the database initializer for the Geek Quiz application.
Entity Framework (EF) is an object-relational mapper (ORM) that enables you to create data access applications by programming with a conceptual application model instead of programming directly using a relational storage schema. You can learn more about Entity Framework here.
The following is a description of the classes you just added:
- TriviaOption: represents a single option associated with a quiz question
- TriviaQuestion: represents a quiz question and exposes the associated options through the Options property
- TriviaAnswer: represents the option selected by the user in response to a quiz question
- TriviaDbContext: represents the Entity Framework's database context of the Geek Quiz application. This class derives from DbContext and exposes DbSet properties that represent collections of the entities described above.
- SampleData: a database initializer including sample data for this models.
Open the Startup.cs file and add the following code at the beginning of the ConfigureServices method to configure the TriviaDbContext.
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddEntityFramework()
.AddSqlServer()
.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]))
.AddDbContext<TriviaDbContext>(options =>
options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]));
// ...
Add the following code at the end of the Configure method to call to the sample data initializator.
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
// ...
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
SampleData.Initialize(app.ApplicationServices);
}
Modify the Home controller to restrict access to authenticated users. To do this, open the HomeController.cs file inside the Controllers folder and add the Authorize attribute to the HomeController class definition.
namespace GeekQuiz.Controllers
{
[Authorize]
public class HomeController : Controller
{
public IActionResult Index()
{
return View();
}
// ...
}
}
Note: The Authorize filter checks to see if the user is authenticated. If the user is not authenticated, it returns HTTP status code 401 (Unauthorized) without invoking the action. You can apply the filter globally, at the controller level, or at the level of individual actions.
Resolve the error with Authorize attribute by adding the missing using statements for Microsoft.AspNet.Authorization
.
using Microsoft.AspNet.Authorization;
namespace GeekQuiz.Controllers
{
// ...
You will now customize the layout of the web pages and the branding. To do this, open the _Layout.cshtml file inside the Views | Shared folder and update the navigation bar by removing the About and Contact links and renaming the Home link to Play. The HTML for the navigation bar should look like the following code.

<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
Toggle navigation

</button>
GeekQuiz

Play

@await Html.PartialAsync("_LoginPartial")

In the previous task, you created the initial structure of the Geek Quiz web application. You will now build a simple API service that interacts with the quiz data model and exposes the following actions:
You will use the ASP.NET Scaffolding tools provided by Visual Studio to create the baseline for the API controller class.
Open the Startup.cs file and add the following using statement at the beginning of the file.
using Newtonsoft.Json.Serialization;
using Newtonsoft.Json;
Add the following code at the end of the ConfigureServices method to globally configure the formatter for the JSON data retrieved by the API action methods.
(Code Snippet - AspNetApiSpa - Ex1 - ConfigureJsonFormatter)
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
// ...
services.AddMvc().AddJsonOptions(options =>
{
options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
options.SerializerSettings.DefaultValueHandling = DefaultValueHandling.Ignore;
options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
});
}
// ...
Note: The CamelCasePropertyNamesContractResolver automatically converts property names to camel case, which is the general convention for property names in JavaScript.
In Solution Explorer, right-click the Controllers folder of the GeekQuiz project and select Add | New Item....
Creating a new item
In the Add New Item dialog box, make sure that the DNX | Server-side node is selected in the left pane. Then, select the Web API Controller Class template in the center pane, name it TriviaController and click Add.
Selecting the Web API Controller Class template
Note: ASP.NET Scaffolding is a code generation framework for ASP.NET Web applications. Visual Studio 2015 includes pre-installed code generators for ASP.NET Core projects. You should use scaffolding in your project when you want to quickly add code that interacts with data models in order to reduce the amount of time required to develop standard data operations.
The scaffolding process also ensures that all the required dependencies are installed in the project. For example, if you start with an empty ASP.NET project and then use scaffolding to add a MVC 6 API controller, the required NuGet packages and references are added to your project automatically.
The TriviaController.cs file is then added to the Controllers folder of the GeekQuiz project, containing a base TriviaController class. Remove all the content of the class and add the following using statements at the beginning of the file.
(Code Snippet - AspNetApiSpa - Ex1 - TriviaControllerUsings)
using GeekQuiz.Models;
using Microsoft.AspNet.Authorization;
using Microsoft.Data.Entity;
Add the following code at the beginning of the TriviaController class to define, initialize and dispose the TriviaContext instance in the controller.
(Code Snippet - AspNetApiSpa - Ex1 - TriviaControllerContext)
[Route("api/[controller]")]
public class TriviaController : Controller
{
private TriviaDbContext context;
public TriviaController(TriviaDbContext context)
{
this.context = context;
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
context.Dispose();
}
base.Dispose(disposing);
}
}
Note 1: The Dispose method of TriviaController invokes the Dispose method of the TriviaContext instance, which ensures that all the resources used by the context object are released when the TriviaContext instance is disposed or garbage-collected. This includes closing all database connections opened by Entity Framework.
Note 2: The TriviaDbContext will be automatically injected by ASP.NET Core thanks to the configuration in the Startup class.
Add the following helper method at the end of the TriviaController class. This method retrieves the following quiz question from the database to be answered by the specified user.
(Code Snippet - AspNetApiSpa - Ex1 - TriviaControllerNextQuestion)
private async Task<TriviaQuestion> NextQuestionAsync(string userId)
{
var lastQuestionId = await this.context.TriviaAnswers
.Where(a => a.UserId == userId)
.GroupBy(a => a.QuestionId)
.Select(g => new { QuestionId = g.Key, Count = g.Count() })
.OrderByDescending(q => q.Count)
.ThenByDescending(q => q.QuestionId)
.Select(q => q.QuestionId)
.FirstOrDefaultAsync();
var questionsCount = await this.context.TriviaQuestions.CountAsync();
var nextQuestionId = (lastQuestionId % questionsCount) + 1;
return await this.context.TriviaQuestions.Include(q => q.Options).FirstOrDefaultAsync(q => q.Id == nextQuestionId);
}
Add the following Get action method to the TriviaController class. This action method calls the NextQuestionAsync helper method defined in the previous step to retrieve the next question for the authenticated user.
(Code Snippet - AspNetApiSpa - Ex1 - TriviaControllerGetAction)
// GET: api/Trivia
[HttpGet]
public async Task<IActionResult> Get()
{
var userId = User.Identity.Name;
TriviaQuestion nextQuestion =
await this.NextQuestionAsync(userId);
if (nextQuestion == null)
{
return HttpNotFound();
}
return Ok(nextQuestion);
}
Add the following helper method at the end of the TriviaController class. This method stores the specified answer in the database and returns a Boolean value indicating whether or not the answer is correct.
(Code Snippet - AspNetApiSpa - Ex1 - TriviaControllerStoreAsync)
private async Task<bool> StoreAsync(TriviaAnswer answer)
{
var selectedOption = await this.context.TriviaOptions.FirstOrDefaultAsync(o =>
o.Id == answer.OptionId
&& o.QuestionId == answer.QuestionId);
if (selectedOption != null)
{
answer.TriviaOption = selectedOption;
this.context.TriviaAnswers.Add(answer);
await this.context.SaveChangesAsync();
}
return selectedOption.IsCorrect;
}
Add the following Post action method to the TriviaController class. This action method associates the answer to the authenticated user and calls the StoreAsync helper method. Then, it sends a response with the Boolean value returned by the helper method.
(Code Snippet - AspNetApiSpa - Ex1 - TriviaControllerPostAction)
// POST: api/Trivia
[HttpPost]
public async Task<IActionResult> Post([FromBody] TriviaAnswer answer)
{
if (!ModelState.IsValid)
{
return HttpBadRequest(ModelState);
}
answer.UserId = User.Identity.Name;
var isCorrect = await this.StoreAsync(answer);
return this.CreatedAtAction("Get", new { }, isCorrect);
}
Modify the API controller to produce json by adding the Produces attribute to the TriviaController class definition.
namespace GeekQuiz.Controllers
{
[Produces("application/json")]
[Route("api/[controller]")]
public class TriviaController : Controller
{
// ...
Modify the API controller to restrict access to authenticated users by adding the Authorize attribute to the TriviaController class definition.
namespace GeekQuiz.Controllers
{
[Produces("application/json")]
[Route("api/[controller]")]
[Authorize]
public class TriviaController : Controller
{
// ...
In this task you will verify that the API service you built in the previous task is working as expected. You will use the Microsoft Edge F12 Developer Tools to capture the network traffic and inspect the full response from the API service.
Note: Make sure that Microsoft Edge is selected in the Start button located on the Visual Studio toolbar.
Microsoft Edge option
The F12 developer tools have a wide set of functionality that is not covered in this hands-on-lab. If you want to learn more about it, refer to Using the F12 developer tools.
Press F5 to run the solution. The Log in page should appear in the browser.
Note: When the application starts, the default MVC route is triggered, which by default is mapped to the Index action of the HomeController class. Since HomeController is restricted to authenticated users (remember that you decorated that class with the Authorize attribute in Exercise 1) and there is no user authenticated yet, the application redirects the original request to the log in page.
Running the solution
Click Register to create a new user.
Registering a new user
In the Register page, enter an Email and Password, and then click Register.
Register page
You will be prompt with the following error page that indicates that applying the migrations may resolve the issue. Click Apply Migrations and refresh the page once this action is completed.
Applying the migrations
The application registers the new account and the user is authenticated and redirected back to the home page.
User is authenticated
In the browser, press F12 to open the Developer Tools panel. Press CTRL + 4 or click the Network icon, and then click the clean session button to begin capturing network traffic.
Initiating API network capture
Append api/trivia to the URL in the browser's address bar. You will now inspect the details of the response from the Get action method in TriviaController.
Retrieving the next question data through API
Now you will inspect the body of the response. To do this, click the body tab and select Response body. You can check that the downloaded data is an object with the properties options (which is a list of TriviaOption objects), id and title that correspond to the TriviaQuestion class.
Viewing Web API Response Body
Go back to Visual Studio and press SHIFT + F5 to stop debugging.
In this exercise you will first build the web front-end portion of Geek Quiz, focusing on the Single-Page Application interaction using AngularJS 2. You will then enhance the user experience with CSS3 to perform rich animations and provide a visual effect of context switching when transitioning from one question to the next.
In this task you will use AngularJS 2 to implement the client side of the Geek Quiz application. AngularJS 2 is an open-source JavaScript framework that augments browser-based applications with Model-View-Controller (MVC) capability, facilitating both development and testing.
You will start by adding AngularJS 2 references. Then, you will create the controller to provide the behavior of the Geek Quiz app and the view to render the quiz questions and answers using the AngularJS template engine.
Note: For more information about AngularJS 2, refer to https://angular.io/.
Open Visual Studio Community 2015 and open the GeekQuiz.sln solution located in the Source/Ex2-CreatingASPAInterface/Begin folder. Alternatively, you can continue with the solution that you obtained in the previous exercise.
In Solution Explorer, open the _Layout.cshtml file located inside of the Views | Shared folder and add the following code inside the <environment names="Development">
tag located inside the head
tag.

Add the following code inside the <environment names="Staging,Production">
tag located inside the head
tag.

Updating the layout file to include the new dependencies
In Solution Explorer, right-click the js folder located under wwwroot and select Add | New Item....
Creating a new TypeScript item
Select TypeScript File under the DNX | Client-Side menu, change the name to app.ts and click Add.
Adding a new TypeScript file
In the app.ts file, add the following code to declare and initialize the AngularJS AppComponent component.
(Code Snippet - AspNetApiSpa - Ex2 - AngularAppComponent)
import {bootstrap, Component, View, NgFor, NgClass, AfterViewInit, Inject} from 'angular2/angular2';
import {Http, HTTP_BINDINGS, Headers} from 'angular2/http';
@Component({
selector: 'geekquiz-app',
viewBindings: [HTTP_BINDINGS]
})
class AppComponent {
public answered = false;
public title = "loading question...";
public options = [];
public correctAnswer = false;
public working = false;
constructor( @Inject(Http) private http: Http) {
}
answer() {
return this.correctAnswer ? 'correct' : 'incorrect';
}
}
bootstrap(AppComponent);
Note: The constructor function of the AppComponent component expects an injectable parameter named Http. The properties contain the view model, and will be accessible to the template when the controller is registered.
The AppComponent component will be consumable from the view using the selector value which in this case is
geekquiz-app
.
You will now add behavior to the scope in order to react to events triggered from the view. Add the following code at the end of the AppComponent component to define the nextQuestion function.
(Code Snippet - AspNetApiSpa - Ex2 - AngularAppComponentNextQuestion)
class AppComponent {
...
nextQuestion() {
this.working = true;
this.answered = false;
this.title = "loading question...";
this.options = [];
var headers = new Headers();
headers.append('If-Modified-Since', 'Mon, 27 Mar 1972 00:00:00 GMT');
this.http.get("/api/trivia", { headers: headers })
.map(res => res.json())
.subscribe(
question => {
this.options = question.options;
this.title = question.title;
this.answered = false;
this.working = false;
},
err => {
this.title = "Oops... something went wrong";
this.working = false;
});
}
};
Note: This function retrieves the next question from the Trivia Web API created in the previous exercise and update properties with the question data.
Insert the following code at the end of the AppComponent component to define the sendAnswer function.
(Code Snippet - AspNetApiSpa - Ex2 - AngularAppComponentSendAnswer)
class AppComponent {
...
sendAnswer(option) {
this.working = true;
var answer = { 'questionId': option.questionId, 'optionId': option.id };
var headers = new Headers();
headers.append('Content-Type', 'application/json');
this.http.post('/api/trivia', JSON.stringify(answer), { headers: headers })
.map(res => res.json())
.subscribe(
answerIsCorrect => {
this.answered = true;
this.correctAnswer = (answerIsCorrect === true);
this.working = false;
},
err => {
this.title = "Oops... something went wrong";
this.working = false;
});
}
};
Note: This function sends the answer selected by the user to the Trivia Web API and stores the result (i.e. if the answer is correct or not) in the object properties.
The nextQuestion and sendAnswer functions from above use the AngularJS 2 http object to abstract the communication with the Web API via the XMLHttpRequest JavaScript object from the browser.
Implement the AfterViewInit interface in the AppComponent class by updating the class definition and inserting the following code at the end of the AppComponent component.
(Code Snippet - AspNetApiSpa - Ex2 - AngularAppComponentAfterViewInit)
class AppComponent implements AfterViewInit {
...
afterViewInit() {
this.nextQuestion();
}
};
Note: This will call the nextQuestion method once the view is initialized.
The next step is to create the AngularJS template that defines the view for the quiz. To do this, add the following View decorator to the AppComponent class below the Component decorator.
(Code Snippet - AspNetApiSpa - Ex2 - GeekQuizAngularView)
@View({
directives: [NgFor, NgClass],
template: `

{{answer()}}

<button class="btn btn-info btn-lg next option" (click)="nextQuestion()" [disabled]="working">Next Question</button>

{{title}}

<button class="btn btn-info btn-lg option" *ng-for="#option of options" (click)="sendAnswer(option)" [disabled]="working">{{option.title}}</button>

`
})
Note: The AngularJS 2 template is a declarative specification that uses information from the model and the component to transform static markup into the dynamic view that the user sees in the browser. The following are examples of AngularJS 2 elements and element attributes that can be used in a template:
- The curly brace notation {{ }} denotes bindings to the component properties defined in the component class definition.
- The (click) attribute is used to invoke the functions defined in the component in response to user clicks.
- The [ng-class] directive is used to add CSS classes to the element based on the value of the object passed as parameter.
The next step is to hook the AppComponent component in the page. To do this, open the Index.cshtml file inside the Views | Home folder and replace the content with the following code.
(Code Snippet - AspNetApiSpa - Ex2 - GeekQuizView)
@{
ViewData["Title"] = "Play";
}

<geekquiz-app>Loading...</geekquiz-app>

Note: An element with the component's selector is used to include the component in the page, in this case
geekquiz-app
.
Insert the following code at the end of the Index.cshtml file to add the logic to import the app.js file.
(Code Snippet - AspNetApiSpa - Ex2 - GeekQuizViewScript)
@section Scripts {

}
Open the Site.css file inside the wwwroot | css folder and add the following highlighted styles at the end of the file to provide a look and feel for the quiz view.
(Code Snippet - AspNetApiSpa - Ex2 - GeekQuizStyles)
@media (min-width: 768px) {
.carousel-caption {
z-index: 10 !important;
}
}
/* Geek Quiz styles */
.flip-container {
padding: 0;
}
.flip-container .back,
.flip-container .front {
border: 5px solid #00bcf2;
padding: 30px 0;
}
#content {
position: relative;
background: #fff;
padding: 50px 0 0 0;
}
.option {
width: 140px;
margin: 5px;
}
div.correct p {
color: green;
}
div.incorrect p {
color: red;
}
.btn {
border-radius: 0;
}
.flip-container div.front, .flip-container div.back.flip {
display: block;
}
.flip-container div.front.flip, .flip-container div.back {
display: none;
}
In this task you will execute the solution using the new user interface you built with AngularJS 2 to answer some of the quiz questions.
Press F5 to run the solution.
Register a new user account. To do this, follow the registration steps described in Exercise 1, Task 3.
Note: If you are using the solution from the previous exercise, you can log in with the user account you created before.
The Home page should appear, showing the first question of the quiz. Answer the question by clicking one of the options. This will trigger the sendAnswer function defined earlier, which sends the selected option to the Trivia Web API.
Answering a question
After clicking one of the buttons, the answer should appear. Click Next Question to show the following question. This will trigger the nextQuestion function defined in the controller.
Requesting the next question
The next question should appear. Continue answering questions as many times as you want. After completing all the questions you should return to the first question.
Next question
Go back to Visual Studio and press SHIFT + F5 to stop debugging.
In this task you will use CSS3 properties to perform rich animations by adding a flip effect when a question is answered and when the next question is retrieved.
In Solution Explorer, right-click the wwwroot | css folder of the GeekQuiz project and select Add | Existing Item....
Adding an existing item to the css folder
In the Add Existing Item dialog box, navigate to the Source/Assets folder and select Flip.css. Click Add.
Adding the Flip.css file from Assets
Open the Flip.css file you just added and inspect its content.
Locate the flip transformation comment. The styles below that comment use the CSS perspective and rotateY transformations to generate a "card flip" effect.
/* flip transformation */
.flip-container div.front {
-moz-transform: perspective(2000px) rotateY(0deg);
-webkit-transform: perspective(2000px) rotateY(0deg);
-o-transform: perspective(2000px) rotateY(0deg);
transform: perspective(2000px) rotateY(0deg);
}
.flip-container div.front.flip {
-moz-transform: perspective(2000px) rotateY(179.9deg);
-webkit-transform: perspective(2000px) rotateY(179.9deg);
-o-transform: perspective(2000px) rotateY(179.9deg);
transform: perspective(2000px) rotateY(179.9deg);
}
.flip-container div.back {
-moz-transform: perspective(2000px) rotateY(-180deg);
-webkit-transform: perspective(2000px) rotateY(-180deg);
-o-transform: perspective(2000px) rotateY(-180deg);
transform: perspective(2000px) rotateY(-180deg);
}
.flip-container div.back.flip {
-moz-transform: perspective(2000px) rotateY(0deg);
-webkit-transform: perspective(2000px) rotateY(0deg);
-ms-transform: perspective(2000px) rotateY(0);
-o-transform: perspective(2000px) rotateY(0);
transform: perspective(2000px) rotateY(0);
}
Locate the hide back of pane during flip comment. The style below that comment hides the back-side of the faces when they are facing away from the viewer by setting the backface-visibility CSS property to hidden.
/* hide back of pane during flip */
.front, .back {
-moz-backface-visibility: hidden;
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
}
Open the _Layout.cshtml file inside the Views | Shared folder and add the references to the Flip.css file inside the head element.

<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>@ViewData["Title"] - GeekQuiz</title>
<environment names="Development">
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
<link rel="stylesheet" href="~/css/site.css" />
<link rel="stylesheet" href="~/css/Flip.css" />

</environment>
<environment names="Staging,Production">
<link rel="stylesheet" href="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.5/css/bootstrap.min.css"
asp-fallback-href="~/lib/bootstrap/dist/css/bootstrap.min.css"
asp-fallback-test-class="sr-only" asp-fallback-test-property="position" asp-fallback-test-value="absolute" />
<link rel="stylesheet" href="~/css/site.min.css" asp-append-version="true" />
<link rel="stylesheet" href="~/css/Flip.css" asp-append-version="true" />

</environment>

Press F5 to run the solution and log in with your credentials.
Answer a question by clicking one of the options. Notice the flip effect when transitioning between views.
Answering a question with the flip effect
Click Next Question to retrieve the following question. The flip effect should appear again.
Retrieving the following question with the flip effect
By completing this hands-on lab you have learned how to:
Create an ASP.NET MVC 6 API controller using ASP.NET Scaffolding
Implement a API Get action to retrieve the next quiz question
Implement a API Post action to store the quiz answers
Implement AngularJS 2 templates and components
Use CSS3 transitions to perform animation effects
Note: You can take advantage of the Visual Studio Dev Essentials subscription in order to get everything you need to build and deploy your app on any platform.


We examine users!
- strategize collaborative infrastructures
- engineer e-business supply-chains
- e-enable virtual communities
- enable web-enabled interfaces
- morph one-to-one methodologies
- incubate value-added models
- generate transparent e-services
- maximize synergistic platforms
- extend bleeding-edge niches
- engineer leading-edge communities
- whiteboard bleeding-edge infomediaries
- extend dot-com interfaces
- mesh 24/365 content
- seize visionary deliverables


Fill in the document
Male
Female
Female
Remember Me
By creating this account you agree with the following terms and conditions of the website.


nextframe
Promise for requestAnimationFrame / plus features like nextFrames, frameSequence, delay, throttleFrames, waitFrames
overview
nextFrame
create a Promise that resolves in the next Animationframe @param {...} args - optional values that would be the params of the Promises resolve @return {Promise} which will resolve in the next Animationframe
wait / alias waitFrames
waiting x frames before the Promise will resolve @param {Number} frame - the number of frames the Promise waits before resolving @param {...} args - optional values that would be the params of the Promises resolve @return {Promise} which will resolve after the waiting frames
when
resolve when fn returns a truthy value. @param {Function} fn a function that will be called every frame to check for changes @param {...[type]} args - optional values that would be the params of the Promises resolve @return {Promise} which will resolve after the waiting frames
until
until fn returns a truthy value do not resolve. @param {Function} fn a function that will be called every frame to check for changes @param {...[type]} args - optional values that would be the params of the Promises resolve @return {Promise} which will resolve after the waiting frames
loop
create an animationframe loop that calls a function (callback) in every frame @param {Function} cb - gets called in every frame - for rendering mostly @return {Function} a function which cancels the initialed loop by calling it
throttle / alias throttleFrames
create a throttled animationframe loop that calls a function (callback) in every specified @param {Function} cb gets called in every specified frame @param {Number} throttle in wich interval cb is called @return {Function} a function which cancels the initialed loop by calling it
delay
delays the call to nextFrame with setTimeout @param {Number} ms delay in ms @param {...} args - optional values that would be the params of the Promises resolve @return {Promise} which will resolve after the delayed animationframe
sequence
call a function sequencely every next frame on every iterating position of an array @param {Array} collection keeps all values that will be used as the argument for the function @param {Function} fn will be called with array values as aruments @return {Promise} which will resolve after the sequence
usage
import { nextFrame, loop, sequence, delay, throttleFrames, waitFrames } from 'nextframe';
const now = require('performance-now');
const increment = val => ++val;
const sequenceValues = [1, 2, 3, 4];
let frameCount = 0;
let throttleCount = 0;
const start = now();
/****************************
nextFrame / frame
****************************/
nextFrame()
.then(() => {
console.log('next frame');
})
/****************************
delay
****************************/
delay(1000).then(() => {
console.log('delayed ' + (now() - start) + 'ms');
});
/****************************
sequence / frameSequence
****************************/
sequence(sequenceValues, increment)
.then(result => console.log(result));
/****************************
loop / nextFrames / onEnterFrame
****************************/
const cancelLoop = loop(() => {
console.log('frame', ++frameCount);
if (frameCount >= 100) {
cancelLoop();
}
});
/****************************
throttleFrames / throttle
****************************/
const cancelThrottle = throttleFrames(() => {
console.log('throttle', ++throttleCount);
if (throttleCount >= 10) {
cancelThrottle();
}
}, 10);
/****************************
waitFrames / wait
****************************/
waitFrames(50).then((count) => {
console.log(count + ' frames waited');
})
tests
(passing)
import test from 'ava';
import now from 'performance-now';
import nextFrame, { nextFrames, delay, sequence, waitFrames, throttleFrames } from './lib';
test('call next frame with argument', async t => {
const value = await nextFrame('check');
t.is(value, 'check');
});
test('delay 1s', async t => {
const start = now();
const value = await delay(1000, 'check');
const duration = now() - start;
t.is(value, 'check');
t.truthy(duration >= 1000 && duration <= 1100);
});
test('sequence', async t => {
const values = [1, 2, 3, 4];
const increment = val => ++val;
const result = await sequence(values, increment);
t.deepEqual(result, [2, 3, 4, 5]);
});
test('nextFrames loop', async t => {
const p = new Promise(resolve => {
let i = 0;
const cancel = nextFrames(() => {
++i;
if (i >= 20) {
cancel();
resolve(20);
}
})
})
const result = await p;
t.is(result, 20);
});
test('wait 50 frames', async t => {
let i = 0;
const cancel = nextFrames(() => ++i);
const result = await waitFrames(50);
cancel();
t.is(result, 50);
t.is(i, 50);
});
test('throttle frames', async t => {
let i = 0;
let throttleCount = 0;
const p = new Promise(resolve => {
const cancel = nextFrames(() => ++i);
const cancelThrottle = throttleFrames(() => {
if (++throttleCount >= 10) {
cancelThrottle();
cancel();
resolve(throttleCount)
}
}, 10);
});
const result = await p;
t.is(result, 10);
t.is(i, 100);
});


Perhaps far exposed age effects. Now distrusts you her delivered applauded affection out sincerity. As tolerably recommend shameless unfeeling he objection consisted. She although cheerful perceive screened throwing met not eat distance. Viewing hastily or written dearest elderly up weather it as. So direction so sweetness or extremity at daughters. Provided put unpacked now but bringing.
No opinions answered oh felicity is resolved hastened. Produced it friendly my if opinions humoured. Enjoy is wrong folly no taken. It sufficient instrument insipidity simplicity at interested.  Merely thrown garret her law danger him son better excuse. Effect extent narrow in up chatty. Small are his chief offer happy had.


| Table of Contents ← | ↑ ScratchMonkey | → Getting Started |
ScratchMonkey uses the Arduino serial port to communicate with the Arduino IDE (or the avrdude command line tool used internally by the Arduino IDE) using an extended version of the STK500v2 protocol. It implements the following programming methods:
In-System Programming uses the 4 pin SPI (Serial Peripheral Interface Bus) protocol to communicate with the target MCU. This is very simple to set up, requiring only 4 signals and no additional hardware, and is supported by nearly all AVR MCUs.
The only drawback of ISP is that with certain fuse settings of the target MCU, ISP can be unusable (e.g. if the ISP feature or the RESET pin are disabled), or may be harder to implement (e.g. if an external clock is specified).
In ISP mode, ScratchMonkey works fairly similar to the ArduinoISP sketch included with the Arduino IDE. In fact, the Arduino pins used are almost exactly the same. However, ScratchMonkey is a little bit more versatile, supporting MCUs with more than 128K of flash memory, and can deal with strange clock settings.
High Voltage Serial Programming applies a +12V signal to the RESET pin of the target MCU and then uses a 4 pin serial protocol to program the target. This is slightly more difficult to setup than ISP, as the VCC and RESET pins have to follow a certain timing protocol, and the 12V signal has to be generated, but doing this is not prohibitively difficult.
The attraction of HVSP over ISP is that HVSP will always work, regardless of the fuse settings of the target MCU. HVSP is supported on all 8- and 14-pin AVR MCUs.
High Voltage Parallel Programming uses the same +12V signal protocol on the RESET pin as HVSP, but employs a parallel, not a serial protocol.
Like HVSP, HVPP works regardless of the fuse settings. It is supported on most AVR MCUs with 20 pins or more.
The Tiny Programming Interface is a protocol employed by the ATtiny4/5/9/10 family of minuscule MCUs (typically sold in a SOT23-6 package). TPI uses only 3 pins, and can be run either in low voltage mode (dedicated RESET pin pulled LOW) or high voltage mode (RESET pin usable as a regular I/O pin, set to +12V for programming).
| Table of Contents ← | ↑ ScratchMonkey | → Getting Started |


This is an automated notification to let you know that a guest has replied to their feedback request. To view and respond to their message, please click on the link below.
{Link}
Please Note: This is an automated response. Please do not reply to this email.


Elelments for a brutal user interface and experience.
To create a button, simply use the button tag, or apply .btn or .button class.
Yellow Button with Blue Flow Text
Yellow Button with Blue Text Inverted upon hover
Blocked Button Glitched Button
Make any element fixed positioned. Apply these classes:
.sticky - Makes any element fixed positioned.
.sticky-bottom-right - Fixes element to bottom right corner of display
.sticky-bottom-left - Fixes element to bottom left corner of display
.sticky-top-right - Fixes element to top right corner of display
.sticky-top-left - Fixes element to top left corner of display
Stack an element behind or on top of others. Apply these classes:
.stack-base - Forces layer to 1.
.stack-below - Forces layer to -9 (behind base layer).
.stack-above - Forces layer to 9 (above base).
.stack-high - Forces layer to 49.
.stack-top - Forces layer to 99.
In the top right corner of this page, you should see a skewed circle image inside an orange-cream box. It should always be visible and overlapping all content as you scroll down the page.
To create a list of tags, simply apply the class .tags to an unordered list.
Tag list with links, with additional classes applied to each tag.
Roadmap:
Download
Version BETA 3


--- layout: archive title: Zulip Chat Archive permalink: /stream/113488-general/topic/cons.20overload.html ---
kinda annoyed by the fact that list.cons
and multiset.cons
both use ::
Yes, that's the other instance of overloading other than ^
Mario has commented on this in the past. It's a great example of something which Mario would love to change but which Leo is not interested in changing.
I see
In the past the philosophy was always "wait".
Now we have Lean 3.4 we can again raise the possibility of a fork plus a one-time patch, to give Lean 3.400001 "modded by Mario"
Leo again made it clear that he would have no objection to a fork.
My instinct is to wait a while and to see how many commits to Lean 3.4 actually do occur in the next month or so
If things really are going to slow down then this is really exciting
because it means that Mario will not have to take time out about once a week and spend time (and possibly a highly non-trivial amount of time) fixing up mathlib because of changes in core.
You saw yourself how frustrated I got when the changes to ^
broke our stacks project code and stopped me working on the project for several days because I was not capable of fixing the code that you and Chris had written and you two had other things on your mind (completely understandably).
Why not open an issue in mathlib?
If Lean 4 is not going to be compatible with Lean 3 then this is an argument for not fussing too much about simple changes such as this.
{% endraw %}Last updated: Apr 24 2020 at 19:02 UTC


This app will help you find support for anyone who doesn't have a safe place to stay.
Anyone under 18, over 65, under 25 who was in care as a child or who is responsible for a dependant child should have a statutory right to support, regardless of where they're from or if they have a connection to the local area.
Anyone under 18 should have a statutory right to support, regardless of where they're from or if they have a connection to the local area.
Contact Westminster Council Children's Services.
Is it during normal business hours?
Monday to Friday, 9am to 5pm
Let them know you're talking to someone under 18 who may have a statutory right to support.
020 7641 4000
Outside business hours, call the Emergency Duty Team. Tell them you're talking to someone under 18 who may have a statutory right to support.
020 7641 2388
Anyone over 65 should have a statutory right to support, regardless of where they're from or if they have a connection to the local area.
Contact Westminster Council Adult Social Care.
Is it during normal business hours?
Monday to Friday, 9am to 5pm
Let them know you're talking to someone over 65 who may have a statutory right to support.
020 7641 1444
Outside business hours, call the Emergency Duty Team. Tell them you're talking to someone over 65 who may have a statutory right to support.
020 7641 6000
Anyone who is under 25 and who was in care as a child should have a statutory right to support, regardless of where they're from or if they have a connection to the local area.
Contact Westminster Council Children's Services.
Is it during normal business hours?
Monday to Friday, 9am to 5pm
Let them know you're talking to someone under 25 who was in care as a child and who may have a statutory right to support.
020 7641 4000
Outside business hours, call the Emergency Duty Team. Tell them you're talking to someone under 25 who was in care as a child and who may have a statutory right to support.
020 7641 2388
Anyone who is responsible for a dependant child should have a statutory right to support, regardless of where they're from or if they have a connection to the local area.
Contact Westminster Council Family Support.
Is it during normal business hours?
Monday to Friday, 9am to 5pm
Let them know you're talking to someone with a dependant child who may have a statutory right to support.
020 7641 4000
Outside business hours, call the Emergency Duty Team. Tell them you're talking to someone with a dependant child who may have a statutory right to support.
020 7641 2388
Is the person a resident of Westminster?
AND
Is the person British or an EU worker or a foreign national with indefinite leave to remain?
Outside business hours, call the Emergency Duty Team. Tell them you're talking to someone under 18 who may have a statutory right to support.
020 7641 2388
Anyone who has a right to reside and a connection to Westminster and is is pregnant or breastfeeding, or is fleeing domestic violence, or has a serious mental health condition is considered to have a priority need for housing.
Contact Westminster Housing Options Service.
Is it during normal business hours?
Monday to Friday, 9am to 4pm
Let them know you're talking to someone with a connection to the local area and who has a priority need for housing.
020 7641 1000
Outside business hours, call the Emergency Duty Team. Let them know you're talking to someone with a connection to the local area and who has a priority need for housing.
020 7286 7412


Toyota Fortuner
0%
STYLE
COMFORT
CONVENIENCE
PERFORMANCE
SAFETY
ACCESSORIES
360
0
VIEW
STYLE
COMFORT
CONVENIENCE
PERFORMANCE
SAFETY
ACCESSORIES
360
0
VIEW
WATCH TVC
OWNER'S ZONE
Boot Camp
Toyota Fortuner
BOOK A TEST DRIVE
LOCATE A DEALER
E-BROCHURE
SPECIFICATIONS
PRICE LIST


Protocols
The following protocols are available globally.
-
Delegates of a gesture recognizer–that is, an instance of a subclass of
See moreBBGestureRecognizer
–adopt the UIGestureRecognizerDelegate protocol to fine-tune an app’s gesture-recognition behavior. The delegates receive messages from a gesture recognizer, and their responses to these messages enable them to affect the operation of the gesture recognizer or to specify a relationship between it and another gesture recognizer, such as allowing simultaneous recognition or setting up a failure requirement.Declaration
Swift
protocol BBGestureRecognizerDelegate: class
-
Types that conform to the
See moreBBGestureRecognizerargetAction
protocol can be assigned to theregisteredAction
property of aBBGestureRecognizer
.Declaration
Swift
protocol BBGestureRecognizerTargetAction


3
Notifications
Invitation accepted
Your have been Invited ...
Steve Smith
I slowly updated projects
To Do
Meeting with Nathan on Friday 8 AM ...
{% if user.is_authenticated %}
Settings
Logout
{% endif %}
ShareAPI
OVERVIEW
Dashboard
DATA
Websites
Websites API
Icons
Charts
Charts
New
Chartist
Flot
Knob
Amcharts
Apps
Calendar
Taskboard
Pages
Authentication
Login
Register
Forgot Password
Other
Profile
Invoice
Layouts
New
Other
Menu Levels
Menu Level 2.1
Menu Level 2.2
Menu Level 3.1
Menu Level 2.3
Disabled Menu
Sample Page
Support
Documentation
Submit Issue
{% block content %}
{% endblock content %}


DANCER IN THE DARK A film review by Steve Rhodes Copyright 2000 Steve Rhodes RATING (0 TO ****): * 1/2
It's amateur night at the movies in DANCER IN THE DARK, the musical written and directed by Lars von Trier (BREAKING THE WAVES). From factory floor production numbers to death row dances, the movie doesn't shy away from unusual locales for singing and dancing. But with musical numbers that are so awful that they are only one notch away from the musical spoof in THE PRODUCERS, DANCER IN THE DARK isn't likely to have you running out to purchase its soundtrack. If this movie were ever to open on Broadway, they could hold the opening and closing night parties simultaneously.
There may be those that will argue that Trier, famous for the stern DOGMA 95 manifesto -- under whose rules this picture wasn't made, although it was shot on digital video -- wants DANCER IN THE DARK to be viewed as a tragedy. If that is how we are to evaluate it, then there is even less to recommend it.
European singer Björk stars as Selma, the story's dirt-poor heroine, who is rapidly going blind. Not a professional actress, Björk, with her awkward and unreal performance, is unlikely to ever be mistaken for an actress. (For the record, she does at least have a lovely smile.) As a drama, the story requires one suspension of disbelief after another.
Selma has a congenital disorder that will cause her to go blind within a year. She has been saving up for an operation for her son so that he will not suffer the same fate. Working two shifts at a factory that requires her to operate heavy machinery and rehearsing for an amateur production of "The Sound Of Music," she must have little time for the preteen son that she is trying to save.
Selma's passion is the movie musical. She loves watching musicals and making up her own routines to which she sings and dances, along with other members of the cast. An essential ingredient of musicals is music that is worth hearing. In DANCER IN THE DARK, the songs are more spoken than sung, and they are excruciatingly bland. You know the songs are coming because the movie's drab color palette, which approximates a faded home movie, is changed to oversaturated colors reminiscent of old Technicolor musicals.
Speaking of filming, you'd better take along your motion sickness medicine to DANCER IN THE DARK, which frequently looks like it was filmed during a series of earthquakes. If your son panned and zoomed this much with your family's camcorder, you'd lecture him and then erase the tape.
The body of the morose movie concerns a murder and Selma's imprisonment. It also includes two quite horrific scenes. This movie, which has produced widely different opinions from praise to derision, is an uneasy one to view because some of the scenes, especially toward the end, are so manipulative and ridiculous that they are laughably bad. Nevertheless, out of respect for those around you who may have bought into the story's premise, you feel compelled to hold your laughter. It's not easy.
DANCER IN THE DARK runs a long 2:20. It is rated R for violence and would be acceptable for older teenagers.
Email<EMAIL_ADDRESS>Web: http://www.InternetReviews.com
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Force circles
simulate
contract
expand
remove
Winter Olympics
A history of the white games in words and data


About BollyDumb v1.0
This is a very simple application that allows to generate a random movie name with a timer. The application is developed by Ravi Gupta and is released under the MIT License.
Third Party
Flask 1.1.2 (BSD-3-Clause License)
Bootstrap 4.5.3 (MIT License)
Bootstrap Icons 1.2.2 (MIT License)
jQuery 3.5.1 (MIT License)


This is the
fCC Random Quote Generator
You might find this inspirational
if not, well, check yer pulse
your quote goes here
- you!
Quotes!
tweet it!
thing 3


I am skilled in Adobe Photoshop, Illustrator, Indesign.
I am currently a junior in the Iovine and Young Academy at the University of Southern California, studying Arts, Technology, and the Business of Innovation. I enjoy working at the intersection of these three disciplines, as they are crucial to developing and designing good experiences. Whether it be a roadblock in a project or an issue putting your life on hold, I believe every challenge presents an opportunity.
I am skilled in Adobe Photoshop, Illustrator, Indesign.
Familiar with Java, HTML/CSS, Python, mySQL, and PHP. I have worked with Node for backend and frontend frameworks, Ember and jSON to develop websites.
Familiar with Logic Pro for audio mixing, After Effects and Sony Vegas Pro for video editing
Extensively worked in group projects in and out of the Academy, serving as different roles, ranging from marketer to web developer.


domestic | fire | fire and rescue service access | 2010
Every
building
must be accessible to the fire and rescue service.
2.12.0 Introduction
Vehicle access to the exterior of a
building
is needed to enable high reach
appliances, such as turntable ladders and hydraulic platforms, to be used,
and to enable pumping appliances to supply water and equipment for
fire-fighting and rescue activities. The access arrangements increase with
building
size and height.
In the case of
conversions
, as specified in regulation 4, the
building
as
converted
shall meet the requirements of this standard in so far as is
reasonably practicable
, and in no case be worse than before the
conversion
(regulation 12, schedule 6).
2.12
—
2.12.0
domestic | fire | fire and rescue service access | 2010
2.12.1 Vehicle access provision
Access from a
public road
should be provided to assist fire and rescue
personnel in their rescue and fire-fighting operations. Whilst the access will
depend to some extent on the vehicles and equipment used, assistance may
be provided from adjoining fire and rescue services when the need arises.
For this reason, the more demanding guidance for high reach appliances
may be recommended by the fire and rescue service. This may have a
significant impact on planning and a feasibility study may be appropriate.
Consultation with the fire and rescue service at the earliest opportunity is
strongly recommended.
Vehicle access should be provided to at least one elevation of all
domestic
buildings
to assist in fire-fighting and rescue operations.
In the case of
flats
or
maisonettes
with a common entrance, a vehicle access
route for fire-fighting vehicles from a
public road
should be provided not more
than 45 m from the common entrance.
In addition, where dry or wet fire mains are installed in a
building
, parking
spaces should be provided for fire and rescue service vehicles a distance not
more than 18 m from riser inlets. The intention is to assist fire and rescue
service personnel connect a short length of hose between the pumping
appliance and the inlets to the fire mains quickly and efficiently therefore
saving operational time.
However vehicle access routes to more than one elevation may not always
be possible due to the constraints of the
site
, and pedestrian access for fire
and rescue service personnel as described in clause 2.12.4 may be
sufficient. In such cases, advice from the fire and rescue service should be
sought.
Every
house
should be provided with a vehicle access route for fire-fighting
vehicles from a
public road
to not more than 45 m from any door giving direct
access to the interior of the
dwelling
.
2.12.2 Vehicle access routes
Access routes to
buildings
for fire and rescue service vehicles or personnel
should not be assessed in isolation and the proposed access routes in effect
will be dictated by need for water hydrants and other fire-fighting facilities
such as fire mains (see clause 2.14.7).
Dead end route
Fire and rescue service vehicles should not have to reverse more than 20 m
from the end of an access
road.
Where any dead-end route is more than
20 m long turning facilities should be provided. This can be a turning circle or
a hammerhead designed on the basis of the diagram and table below.
In rural areas, access from a
public road
may not be possible to within 45 m
of an entrance to the
building
, and access from a
private road
will suffice
provided the guidance in the table below has been followed. The vehicle
access route assumes that access for pumping appliances will be sufficient
for
houses
, but that provision for high reach appliances should be made to
buildings
containing
flats
or
maisonettes
. Where, in consultation with the fire
and rescue service access is only needed for pumping appliances, the
smaller dimensions for a
house
may be used.
2.12.1
—
2.12.2
domestic | fire | fire and rescue service access | 2010
Minimum width of
road
between kerbs
3.7 m
3.7 m
Minimum width of gateways etc
3.5 m
3.5 m
Minimum clearance height
4.0 m
3.7 m
Minimum turning circle between kerbs
26.0 m
16.8 m
Minimum turning circle between walls
29.0 m
19.2 m
Minimum axle loading
14 tonnes
14 tonnes
2.12.3 Operating spaces for high reach appliances
Following consultation with the fire and rescue service if it is recommended
that an operating space, or spaces, for a high reach appliance should be
provided, the operating spaces(s) should:
•
have a ground loading capacity of not less than 8.3kg/cm
2
; and
•
be level or have a gradient not more than 1 in 12.
The operating space shown in the diagram below is suitable for either a
hydraulic platform or a turntable ladder. Where the
building
has obstructions
such as balconies or other projections, the
building
line should be taken to be
the outer edge of the balconies or other projections.
2.12.2
—
2.12.3
domestic | fire | fire and rescue service access | 2010
2.12.4 Access for fire and rescue service personnel
It is common practice for fire and rescue service personnel to enter a
building
through the normal entrance and fight the fire head on. This is termed
‘offensive fire-fighting’.
In order to allow unobstructed access to a
domestic building
for fire and
rescue service personnel, a paved (or equivalent) footpath at least 900 mm
wide (see also section 4 Safety) should be provided to the normal entrances
of the
building
.
In addition, where vehicle access is not possible to within 18 m of the dry
riser inlets (see clause 2.12.1), a footpath should also be provided to the riser
inlets. This will allow the fire and rescue service to deploy portable pumps to
relay water supplies to where the water is needed. Whilst this method of
water distribution is quite common, it should be avoided for new
developments because of the time delay in supplying water to the
fire-fighters.
Every elevation which is provided with vehicle or pedestrian access for fire
and rescue service personnel should have a door giving access to the interior
of the
building
. Inward opening doors are preferable because this allows
easier forced entry by fire and rescue service personnel should the need
arise. However an outward opening final
exit
door or
emergency door
should
also be considered as providing suitable access.
2.12.4
—
2.12.4


Free Agent RB Mark Walton Arrested, Accused of Punching Pregnant Woman ‘Several Times In Head’
by Darrelle LincolnMark Walton may never play in the National Football League again.
The Dolphins announced on Tuesday they have waived the running back following a police matter.
Soon after, we found out exactly what it was and it just might end his career.
According to Andy Slater, the RB was arrested on Tuesday for punching a punching a pregnant woman in the head.
In 2019, Walton appeared in seven games for the Dolphins and rushed for 201 yards on 53 carries (3.8 YPC) to go along with 15 receptions for 89 yards and no touchdowns.


Predicting Tonight’s College Football Playoff Rankings Top 10
by Andrew HolleranThe latest College Football Playoff rankings will be released this evening. The rankings come out following an eventful Week 12.
Tonight’s rankings will be at least a little different than last week’s, considering what happened on Saturday, with Minnesota losing at Iowa and Baylor losing to Oklahoma.
Alabama will also be an interesting team to watch, as the committee will have to judge the Crimson Tide without Tua Tagovailoa moving forward.
Here’s our prediction for what tonight’s top 10 will look like:
- LSU
- Ohio State
- Clemson
- Georgia
- Alabama
- Oregon
- Oklahoma
- Utah
- Penn State
- Florida
The top three is extremely clear at this point. It’s LSU, Ohio State and Clemson in some order. There’s really no debating that.
The No. 4 spot is where it gets interesting. Georgia probably has a strong hold on that spot for now, but the Bulldogs will need to beat LSU in the SEC Championship Game to stay inside the top four.
Alabama, Oregon, Utah and Oklahoma all have a chance at getting the fourth spot if they win out. Penn State could jump right back into contention with a win at Ohio State on Saturday.
The new College Football Playoff rankings will be out at 7 p.m. E.T. on ESPN.


Class: Sketchup::Classifications
| Relationships | |
| Super Chains via Extension / Inclusion / Inheritance | |
|
Instance Chain:
self,
Enumerable
|
|
| Inherits: | Object |
Overview
The Classifications class is a container/manager for all classifications in a model.
Instance Method Summary
-
#[](index_or_name) ⇒ Object
The [] method is used to get a classification schema by name or index.
-
#each {|schema| ... } ⇒ nil
The #each method is used to iterate through loaded classification schemas.
-
#keys ⇒ Object
The keys method is used to get a list of keys in the
Classifications
class, which are the same as the names of the schemas. -
#length ⇒ Integer
The #length method returns the number of loaded classification schemas.
-
#load_schema(file) ⇒ Object
The load_schema method is used to load a classification schema into a model.
-
#size ⇒ Integer
The #size method returns the number of loaded classification schemas.
-
#unload_schema(schema_name) ⇒ Object
The unload_schema method is used to unload a classification schema that was previously loaded into a model.
Instance Method Details
#[](index_or_name) ⇒ Object
The [] method is used to get a classification schema by name or index.
#each {|schema| ... } ⇒ nil
The #each
method is used to iterate through loaded classification schemas.
#keys ⇒ Object
The keys method is used to get a list of keys in the Classifications
class, which are the same as the names of the schemas.
#length ⇒ Integer
The #length
method returns the number of loaded classification schemas.
#load_schema(file) ⇒ Object
The load_schema method is used to load a classification schema into a model.
#size ⇒ Integer
The #size
method returns the number of loaded classification schemas.
#unload_schema(schema_name) ⇒ Object
The unload_schema method is used to unload a classification schema that was previously loaded into a model.


This is a list, in alphabetical order, of the site's sitemap. This list omits blog posts. You can view the sitemap with blog posts here. {% if site.disablesitemap == false %} {% for p in site.pages %} {% if p.index == true %}


WITNESS LIST Appropriations Committee February 27, 2003-8:00A Budget On: Allen, Ron (Board of Veterinary Medical Examiners) Barron, Mike (Workers' Compensation Commission) Blalock, Michael G. (Adjutant General's Department) Burnett, Dale (Structural Pest Control Board) Crawford, Denny (Securities Board) Dodson, Gay (Board of Pharmacy) Dozier, D.C. Jim (Commission on Law Enforcement Officer Standards and Education) Estrada, Marcelino A. (State Law Library) Fabelo, Dr. Tony (Criminal Justice Policy Council) Flowerday, Paula C. (Racing Commission) Giesbers, Lydia (Texas Military Facilities Commission) Hairston R.N., Terrie L. (Board of Vocational Nurse Examiners) Henricks, Michele (Court Reporters Certification Board) Hymans, Allen (Board of Podiatric Medical Examiners) Julian, Terry (Commission on Jail Standards) Klein, Becky (Public Utility Commission of Texas) Kloeris, Chris (Optometry Board) Lanford, Lane (Public Utility Commission of Texas) Lee, Sherry L. (Board of Examiners of Psychologists) Liner, Renil C. (Texas Appraiser Licensing and Certification Board) Maline, John (Executive Council of Physical Therapy and Occupational Therapy Examiners) Marty, MG Wayne D. (Adjutant General's Office) Maxwell, Robert L. (Bob) (Board of Plumbing Examiners) McAnally, Scott (Research and Oversight Council on Workers' Compensation) McClellan, Suzi (Office of Public Utility Counsel) Montoya, Dave (Board of Tax Professional Examiners) Paul, Matthew (Office of the State Prosecuting Attorney) Reaves, Margaret (State Commission on Judicial Conduct) Reynolds, R.F. "Dick" (Workers' Compensation Commission) Spellings, Robert (Texas Thoroughbred Association) Thomas, Katherine A. (Board of Nurse Examiners) Thorburn, Wayne (Real Estate Commission) Warren, Sr., Gary L. (Commission on Fire Protection) Wells, John (Texas Military Facilities Commission) Registering, but not testifying: For: Pyeatt, Dale M. (National Guard Association of Texas)


SonarSource provides on-site training sessions for all SonarSource customers. Regardless of whether you’ve just started using the SonarQube platform, or if you simply need a custom workshop to address specific knowledge gaps, a training session directly from SonarSource’s experts is the perfect way to keep your team enthusiastic and knowledgeable.
Training is conducted by our SonarSource experts, who are well-versed in all aspects of the SonarQube platform deployment, usage and troubleshooting. They will transfer key technical skills and in-depth knowledge to your team to ensure that your deployment of SonarSource is as painless as possible and generates the highest possible Return on Investment for your enterprise.
Number of Days
2 Days. Minimum requirement for classroom training is 2 days along with good amunt of lab session for participants.
Our standard training sessions cover most important aspects of using the SonarQube platform as below;
| Administration training | We will train your team on technical and functional administration of the application. This will enable them to run and maintain the application independently and provide the right level of support to development teams. For example, we will cover customization, integration with the existing infrastructure, security management, quality profiles, documentation, and support. |
| Developer training | We will train your team on how to use SonarSource products to keep technical debt under control during software development iterations. |
| Manager training | We will train your managers on how to use SonarSource products to monitor the quality of the code produced by their teams and provide support for decision making. |
| Extending the SonarQube platform to meet specific needs | We will train your team regarding the various plugins that can be added to SonarSource products to fit specific needs. Examples including adding new checks, metrics, or reports. |
For the most part, every project has tasks related to code quality and software metrics. This process is usually hard to understand, tedious, and subjective to what the person reviewing the code believes is quality code. The project may compile and run as required, but developers will always ask “did we do it right?”.
Traditional testing methods rely on either the programmer or end user to identify and report bugs. This is only a piece of the puzzle as some issues are not apparent immediately. Generally, when a user reports “it is getting slow, so we had to restart” it could mean anything and restarting a server simply masks the issue.
Fortunately, there are tools such as PMD, FindBugs, HP Fortify, and SonarQube that help developers manage code quality and provide feedback on potential issues, duplicate code, and technical debt acquired. Most of the tools focus primarily on bugs and bad practices. On paper, SonarQube seems to provide a more comprehensive approach; they focus not only on bugs but also on documentation, architecture, duplication and test coverage. SonarQube is a free and open source platform used to measure code quality. It gives you a moment-in-time snapshot of your code quality as it is today as well as trending and lagging data. The best part is that it is easily integrated into JDeveloper and you can scan any type of project (SOA, Spring, JAXB, ADF, etc).
SonarQube, in theory, can scan projects written in many different programming languages including Java, C#, JavaScript, XML, and PHP. More on the languages supported can be found here. It sounds pretty amazing and easy to use, so I decided to take it for a spin to see how potentially useful it could be within FMW.
Prerequisites and Requirements
While this course does not involve programming, students should have some experience with a programming or markup language. Additionally, students should be familiar with navigating the command line. If unfamiliar or if you want a refresher, check out these instructions or this introductory course.
Number of Days
2 Days. Minimum requirement for classroom training is 2 days along with good amunt of lab session for participants.
The basic course program is outlined here:
Active Tab:
Previous Tab:


--- layout: default --- {{ site.author.name }} ({{ site.author.nickname }}) {{ site.description }} {% for item in site.links %} {{ item.name }} {% endfor %} {{site.tools.title}} {{site.tools.description}} {% for tool in site.tools.items %} {{ tool.name }} {% endfor %}
List of technologies and services that have helped me on the journey.


Dr John Medinna Talks Google
Fri, 27 Jan 2017 @ General Notes
The notes are based on his talk. Watch his video here
These points are basically from his book Brain Rules. He only talked a few of them in this video.
Some of the key points from the video :
1- The brain is designed to solve problem related to surviving, in unstable outdoor environment and to do so in constant motion
2- Exercise boosts brain power.
Aerobic exercise can significantly improve executive function of the brain. Weight lifting however doesn’t seem to improve this function.
Both aerobic & weight lifting doesn’t enhance the memory function.
Exercise specifically aerobic exercise can reduce cognitive pathology (depression, dimentia, etc)
How much exercise to get cognitive improvement? 2 – 3 times a week of 20 minutes aerobic exercise
3- Stressed brains don’t learn the same way as unstressed brain. Stress can ‘damage’ the brain. The more stress you feel, the less productive you’ll be.
Relax and learn


This project was an online version of the card game sequence. I used sockets to create client-server connectivity. The game was setup using sockets so that three players could join the game from different devices via a PORT number. I also made a single player mode with a smart AI that decides the best possible move based on the current game state.
Designed and programmed a webpage as a course assignment for a local bakery: The Butterwood Bake Consortium. My page includes an algorithm that would decide a cake based on your interests and preferences. This page includes the basic functionality required from the bakery, such as placing orders, viewing existing menu items, listing busy hours, and contacting the store. This site is responsive.
This was a group assignment where I worked on this wallet page. I created the models for the individual wallets using a JSON file, which I then would read to create the individual waller items. I also built a filtering system based on attributes such as type, price, popular, and model. I dynamically updated the html of the page upon the filtered selections. I also wrote a script to generate the star score drawings. This page is responsive.
I created a custom version of Mario with all new enemies, powerups, and boss battles. I also gave the user the ability to customize their character selection by playing as Bowser.
I wrote the backend for this site. Given a txt file with southern phrases, I used Markov Chains to analyze the words and develop a predictive word generator. The code uses probabilities to determine the next best possible words and creates a new phrase based on the existing ones.
Class assignment where we programmed a virtual machine in c0 (safe subset of C). This included handling the operand stack, bytecode, program counter, local varaibles, call stack, constant pools, function pools, and the heap. For the (No posted code due to course policy. For access to code, contact me)


Id: 491
Name: Dr. Eleanor Arroway
Status: Alive
Species: Human
Type:
Gender: Female
OriginName: unknown
OriginUrl:
LocationName: The Menagerie
LocationUrl: https://rickandmortyapi.com/api/location/25
Image: https://rickandmortyapi.com/api/character/avatar/491.jpeg
Episode: ['https://rickandmortyapi.com/api/episode/29']
Url: https://rickandmortyapi.com/api/character/491
Created: 2018-05-22T17:44:32.071Z


--- layout: archive title: Zulip Chat Archive permalink: /stream/116395-maths/topic/has_pow.20for.20fpow.html ---
There's no has_pow
instance for integer powers in a field, there's just fpow
. Is there a reason why the notation isn't used for fpow
?
maybe it was written before has_pow
? I think @Rob Lewis will know
Last updated: Apr 24 2020 at 19:02 UTC


Sean Sanchez knows the routine.
Before anyone can ask, the 12-year-old pulls his pants pockets inside out and takes off his shoes, wiggling his toes to prove he’s not concealing drugs or weapons. Cleared by deputies, he’s allowed inside San Francisco County Jail No. 5 to see his father.
The boy won’t just speak to his dad. As part of San Francisco’s One Family visitation program, he’ll be able to hug him, sit close, play a board game together. He can lean in to tell him what happened at school that week — and how much he misses him. They’ll be together for 90 minutes.
Most kids with jailed parents can’t do that.
County jails across the country restrict visits to opposite sides of a glass partition. Only a handful, including San Francisco’s main facility in San Bruno, allow contact visits between locked-up parents and their sons and daughters.
These kinds of visits cost more and raise security concerns, but research suggests they may benefit both the child and parent. Nonetheless, even as awareness grows about an overall lack of support for children of incarcerated parents, many jails are moving in the opposite direction, pushing for video-only visitation similar to Skype or FaceTime to save money.
Maintaining contact with a locked-up parent reduces anxiety and mental health issues among the children while reducing recidivism among the parents, according to “Shared Sentence,” a recent study by the Annie E. Casey Foundation, a Baltimore organization focused on child health and welfare.
For inmates, just one family visit of any kind can reduce recidivism by 13 percent, according to a 2011 Minnesota Department of Corrections study of 16,000 inmates.
“There is no question that the bond is really nurtured when (children) come for a visit,” said Ruth Morgan, the founder and director of Community Works West, a Bay Area nonprofit addressing the effects of incarceration, which oversees San Francisco’s One Family program. “We know it benefits the parent in jail. It’s one thing that really inspires them to change their life.”
Once OKd to enter, Sean waves goodbye to his mom — she’s not allowed in — and heads through a heavy metal door along with three other children, One Family staff members and a sheriff’s deputy. They head up an elevator and through a labyrinth of hallways lined with locked metal doors before stopping at a simple office door.
Inside that door, the atmosphere is starkly different. Colorful toys are scattered around: a pink and purple play kitchen, a knee-high shopping cart and a stack of board games. Crayons, markers and books. Even bottles of sparkly fingernail polish.
Sean moves to a table to set up a Connect Four game, but keeps his eye on another door across the room. When it opens, four men in orange jumpsuits walk through, greeted by yells of “Dada!” and “Daddy!”
{% include 'components/_resources.html' %}Sean’s dad, Cesar Sanchez, sits next to him, and they begin dropping plastic discs into the game’s slots. Another dad kneels beside his young daughter at the toy kitchen. Another snuggles his infant daughter, just 9 months old.
“The first time he ever saw her was in this room,” said Sarah Carson, who until recently was program director for One Family. “The only times he’s ever seen her have been in this room.”

In here, Sanchez said, “people want to fight, and I want to do it, but I want to see my kids on the weekend.” A fight can land him in solitary confinement for 30 days. “I won’t do that to them.”
Before he could have visits with Sean and his other child, a daughter, Sanchez had to attend parenting classes offered by One Family. The classes helped him be a better father, he said, and, more importantly, to feel like a father, even behind bars.
The One Family staffers “treat us like dads,” he said. “They see more than orange.”
San Francisco Sheriff Vicky Hennessy is a fan of the program.
Any extra costs are worth it, she said, because the visits keep inmates connected to their children and the outside world.
“When they eventually get out — and we have to understand, these people get out — this contributes to public safety,” Hennessy said. “It’s not a silver bullet, but what we can say is we’re trying to build better people.”
Sean and his dad finish with Connect Four and move on to the card game Uno.
Another dad sits with his 3-year-old daughter, who asks to paint her nails. He watches as she applies purple polish, then blows it dry. “Oh, my gosh,” he tells her. “It’s so pretty.”
Around the room, there is laughter, a snack break and a quick diaper change. But, as the clock ticks down toward the end of the visit, it grows quieter.
Sean climbs onto his dad’s lap. They talk quietly, at one point lacing their fingers together. The toddler with purple nail polish grips her father around his neck, pressing her face against his shoulder as he walks with her around the room, comforting her.
As the 90 minutes run out, One Family staffers gather the children on one side of the room. The inmates stand together on the other, then begin filing out the door. They wave, blow kisses and say goodbye again and again, maintaining eye contact with their kids until the door closes behind them.
Back in the common area near his cell after the visit with Sean, Cesar Sanchez reflects on the kind of dad he was before his arrest for a gun assault that would lead to a six-year sentence and time served in a plea deal.
“I never really sat down and played cards with them,” he says. “I didn’t take the time, the effort.”
The first time he ever read to Sean and his younger sister, Sanchez says, came on one of their jail visits. His own father never read to him, he says.
“Without this program, I’d have 2.5 years without touching my kids,” Sanchez says. “I don’t ever want to be in this situation again.”


Accounts
Accounts(账户密钥+创建账户+账户地址+检查账户余额+账户余额说明）
账户密钥
Punk.Network uses multiple sets of public/private key pairs to represent participants of the network.
Overview
Blockchain systems have participants in varying roles, for example from validators to normal users. As an example, the Punk.Network node uses a Nominated Proof-of-Stake (NPoS) algorithm to select validators. Validators and nominators may hold significant amounts of funds, so Punk.Network's Staking module introduces account abstractions that help keep funds as secure as possible. These abstractions are: - Accounts - - Stash Key: The Stash account is meant to hold large amounts of funds. Its private key should be as secure as possible in a cold wallet. - - Controller Key: The Controller account signals choices on behalf of the Stash account, like payout preferences, but should only hold a minimal amount of funds to pay transaction fees. Its private key should be secure as it can affect validator settings, but will be used somewhat regularly for validator maintenance. - Session Keys: Session keys are "hot" keys kept in the validator client and used for signing certain validator operations. They should never hold funds.
Account Keys
A key pair can represent an account and control funds, like normal accounts that you would expect from other blockchains. In the context of Punk.Network's Balances module, these accounts must have a minimum amount (an "existential deposit") to exist in storage. Account keys are defined generically and made concrete in the runtime. To continue with our example of Stash and Controller accounts, the keys to these accounts are distinguished by their intended use, not by any underlying cryptographic difference. When creating Stash or Controller keys, all cryptography supported for normal account keys are also supported.
Stash Keys
The Stash keys are the public/private key pair that defines a Stash account. This account is like a "savings account" in that you should not make frequent transactions from it. Therefore, its private key should be treated with the utmost security, for example protected in a safe or layers of hardware security. Since the Stash key is kept offline, it designates a Controller account to make non-spending decisions with the weight of the Stash account's funds. It can also designate a Proxy account to vote in governance on its behalf.
Controller Keys
The Controller keys are the public/private key pair that defines a Controller account. In the context of Substrate's NPoS model, the Controller key will signal one's intent to validate or nominate. The Controller key is used to set preferences like the rewards destination and, in the case of validators, to set their Session keys. The Controller account only needs to pay transaction fees, so it only needs a minimal amount of funds. The Controller key can never be used to spend funds from its Stash account. However, actions taken by the Controller can result in slashing, so it should still be well secured.
Session Keys
Session keys are "hot keys" that are used by validators to sign consensus-related messages. They are not meant to be used as account keys that control funds and should only be used for their intended purpose. They can be changed regularly; your Controller only needs to create a certificate by signing a session public key and broadcast this certificate via an extrinsic. Session keys are also defined generically and made concrete in the runtime. To create a Session key, validator operators must attest that a key acts on behalf of their Stash account (stake) and nominators. To do so, they create a certificate by signing the key with their Controller key. Then, they inform the chain that this key represents their Controller key by publishing the Session certificate in a transaction on the chain. Punk.Network provides the Session module, which allows validators to manage their session keys.
Strongly Typed Wrappers
You can declare any number of Session keys. For example, the default Punk.Network node uses three for BABE, GRANDPA, and "I'm Online". Other chains could have more or fewer depending on what operations the chain expects its validators to perform. These different Session keys could use the same cryptography, but serve very different purpose throughout your runtime logic. To prevent the wrong key being used for the wrong operation, strong Rust types wrap these keys, keeping them incompatible with one another and ensuring they are only used for their intended purpose.
Generation
If a Session key is compromised, attackers could commit slashable behavior. Session keys should be changed regularly (e.g. every session) via the rotate_keys RPC for increased security.
创建账户
Generate a Punk.Network account
There are several ways to generate a Punk.Network account, you can choose either one based on your preference. Once your account is created and you have your account secret phrase or secret seed, you can migrate your account from various medium by importing your account.
Punk.Network Web Apps
- Punk.Network
- Punk.Network Mainnet (coming soon) TODO: complete guide
Polkadot.js Browser Plugin
The polkadot.js plugin provides a reasonable balance of security and usability. It provides a separate local mechanism to generate your address and interact with Polkadot. This method involves installing the polkadot.js plugin and using it as a “virtual vault," separate from your browser, to store your private keys. It also allows signing of transactions and similar functionality.
Install the Browser Plugin
The browser plugin is available for both Google Chrome and FireFox. After installing the plugin, you should see the orange and white polkadot.js logo in the menu bar of your browser. Click the Orange P symbol in your extensions to open the account manager dialog. Click "Create New Account" button and follow the instructions to have account created. Make sure to store your mnemonic seed somewhere securely. You will need it to maintain access to your account.
Subkey
Subkey is recommended for technically advanced users who are comfortable with command line and compiling Rust code. Subkey allows you to generate keys on any device that can compile the code. Subkey may also be useful for automated account generation, using an air-gapped device other than one running iOS or Android or other specific purposes. It is not recommended for general users. To install Subkey, run:
$ curl https://getsubstrate.io -sSf | bash -s -- --fast
$ cargo install --force --git https://github.com/paritytech/substrate subkey
$ cargo build -p subkey
After installing Subkey successfully, run:
subkey -n Punk.Network generate
You should see an output something like below- save all of this information somewhere secure you will not be able to recover your account if you lose your phrase or seed. Secret phrase destroy vague trend estate person civil cattle lab hockey tooth error pigeon` is account:
Network ID/version: Punk.Network Secret seed: 0x58e57817a2ccfa696ed6c3735d4cc4646f894bf7daf51a94f0c4702a92e40710 Public key (hex): 0x225ce1f9c178189d2a977a195f822ebbfb538b317f23f83ab35605fb009fa438 Account ID: 0x225ce1f9c178189d2a977a195f822ebbfb538b317f23f83ab35605fb009fa438 SS58 Address: 2owvscruh7PNbykGLMZPxHyjYdi1Ryanrm4PTxVKh85Ef8Dn
If you previously created an account without the -n Punk.Network flag, you need to derive the correct Address from your previous secret phrase or secret seed. You can use subkey -n Punk.Network inspect "YOUR SECRET PHRASE HERE" to obtain the Punk.Network Network-ID inclusive Address (SS58).
Polkadot.js Web Apps
TODO: complete guide when Punk.Network is supported
Coming soon.
Coming soon.
Storing your key safely
DISCLAIMER: Key Security Your secret seed is the only way to get access to your account. You must keep the secret both secure and private. If you share you secret with anyone they will be able to have full access to your account, including all of your funds. The secret, for this reason, is a target from hackers and others with bad intentions to steal your funds. We recommend a variety of account generation methods that have various convienience and security tradeoffs. Please review this page carefully before making your address so that you understand the risks of the account generation method you choose and how to properly mitigate them in order to keep your funds safe.
The seed is your key to the account. Knowing the seed allows you, or anyone else who knows the seed, to re-generate and control this account. It is imperative to store the seed somewhere safe, secret, and secure. If you lose access to your account, you can re-create it by entering the seed. This also means that somebody else can have control over your account if they have access to your seed. For maximum security, the seed should be written down on paper or another non-digital device and stored in a safe place. You may also want to protect your seed from physical damage, as well (e.g. by storing in a sealed plastic bag to prevent water damage, storing it in a fireproof safe, etc.) It is recommended that you store multiple copies of the seed in geographically separate locations (e.g., one in your home safe and one in a safety deposit box at your bank). You should definitely not store your seed on any kind of computer that has or may have access to the internet in the future.
账户地址
SS58 Address Format
SS58 is a simple address format designed for Substrate based chains. There's no problem with using other address formats for a chain, but this serves as a robust default. It is heavily based on Bitcoin's Base-58-check format with a few alterations. The basic idea is a base-58 encoded value that can identify a specific account on the Substrate chain. Different chains have different means of identifying accounts. SS58 is designed to be extensible for this reason. The living specification for the SS-58 address format can be found on the Substrate GitHub wiki: https://github.com/paritytech/substrate/wiki/External-Address-Format-(SS58)
Generate and Regenerate Account Address
You may see account address, address or public address in various articles, they essentially mean the same thing. You should understand this that once you have an account that means you have the secret phrase or secret seed, you can derive public key from it deterministicly. When encoding with various network id, you can get network related public address. That is to say, one private key can derives many public addresses depending on what network id you include in encoding process. If you have an account generated for Polkadot or Kusama, you already have an account that is enabled for Punk.Network, the private key or public key are exactly the same. All you need to find is its accordinate account address or address under Punk.Network context. You can achieve this using these methods: Web apps include a wide range of web based applications that help you manage accounts, this inlucde: - Punk.Network Apps - Polkadot.js Apps - Polkadot.js Browser Plugin
Import your account through app if your account is not generated their, go to "options" or "preferences" whatever the application calls it, and choose "Punk.Network" from network selection. The application should display your account's address in Punk.Network format. This process also applies to Crab Network. Use an generated account's secret phrase or secret seed, you can find out your Punk.Network's address by running this command:
$ subkey inspect "YOUR_SECRET_PHRASE_OR_SECRET_SEED"
Let's take a look at the example below, first we generate a Kusama account, using that account, we can find out Punk.Network's address:
$ subkey generate
Secret phrase despair ball sibling trust captain glide hamster film banana food tree security` is account:
Secret seed: 0xef0dce87bd91b90d1d9c3a16bb3a4c0b2c1c63e8b0f5428c366211a5fa3471c0 Public key (hex): 0x000789ce986659c3acf6b99b9c590ae5ae4fad4c0bce174ab245341c482f7e73 Account ID: 0x000789ce986659c3acf6b99b9c590ae5ae4fad4c0bce174ab245341c482f7e73 SS58 Address: CaMksEyDesu7EfNY6HME1k534aKcX1fGynAQez6RL3xgRYp
Let's inspect secret phrase first:
$ subkey inspect "despair ball sibling trust captain glide hamster film banana food tree security"
Secret phrase despair ball sibling trust captain glide hamster film banana food tree security` is account:
Secret seed: 0xef0dce87bd91b90d1d9c3a16bb3a4c0b2c1c63e8b0f5428c366211a5fa3471c0 Public key (hex): 0x000789ce986659c3acf6b99b9c590ae5ae4fad4c0bce174ab245341c482f7e73 Account ID: 0x000789ce986659c3acf6b99b9c590ae5ae4fad4c0bce174ab245341c482f7e73 SS58 Address: 2oAutjuRNJsXcB8o2cMjGRzsNps2VT5zJ2eGFbGuq1ZmBTYm
You will see last line SS58 Address is your account address in Punk.Network, which is 2oAutjuRNJsXcB8o2cMjGRzsNps2VT5zJ2eGFbGuq1ZmBTYm. Next let's inpsect secret seed when generating Kusama account, that should display the same account address:
$ subkey inspect "0xef0dce87bd91b90d1d9c3a16bb3a4c0b2c1c63e8b0f5428c366211a5fa3471c0"
Secret Key URI 0xef0dce87bd91b90d1d9c3a16bb3a4c0b2c1c63e8b0f5428c366211a5fa3471c0
is account:
Secret seed: 0xef0dce87bd91b90d1d9c3a16bb3a4c0b2c1c63e8b0f5428c366211a5fa3471c0 Public key (hex): 0x000789ce986659c3acf6b99b9c590ae5ae4fad4c0bce174ab245341c482f7e73 Account ID: 0x000789ce986659c3acf6b99b9c590ae5ae4fad4c0bce174ab245341c482f7e73 SS58 Address: 2oAutjuRNJsXcB8o2cMjGRzsNps2VT5zJ2eGFbGuq1ZmBTYm
The same account address is displayed. You have your Punk.Network account address.
检查账户余额
Via Blockchain Explorer - Punkscan - Punk.Network Account Balance - https://alpsscan.beta.aochain.io/ (coming soon)
Via Web-based Wallet
You can create an account or import your account's mnemonic seed or private key into web-based wallet to view real time balance. - polkadot.js/app - (coming soon)
Via Polkadot.js Extension
Not supported yet, coming soon. Via CLI Tools and RPC TODO
账户余额说明
When you view your account information, for example through Polkadot UI, you may see multiple subsections of balances. |Type|Explaination| |-|-| |Total |The total PUNK, without excluding any type.| |Transferable| The amount of PUNK that you can use or transfer.| |Reserved |The amount of PUNK used or bonded for Governance actions, like voting, elections, or proposals.| |Bonded |The amount of PUNK bonded to use for staking, including validation and nomination.| |Locked |The total amount of unusable PUNK you have, the sum of reserved and bonded.|


Student Management for {{ course_section.course.course_title }}
Section
{% if course_section.section_number == 'G0' %}None
{% else %}{{ course_section.section_number }}
{% endif %}Teams
{{ CourseTrailResults.class.Teams_Information | length }}
Students
{{ CourseTrailResults.class.Students_Information.students | length }}
Tools used
{% if not course_section.learning_tools %}
{% else %}
No tools have been initialised
Initialise tools
{% for toolImage in course_section.learning_tools|learning_tool_split %}
{% if toolImage != '' %}
{% with 'images/'|add:toolImage|add:" Logo.png" as toolLink %}
{% endwith %}
{% endif %}
{% endfor %}
{% endif %}
{% if "Trailhead" in course_section.learning_tools %}
Team Ranking
24 Hours performance
{% include "Module_TeamManagement/Dashboard/class_scoreboard.html" %}
Trailhead performance
Points against Badges
{% include "Module_TeamManagement/Dashboard/class_line_chart.html" %}
{% endif %} {% include "Module_TeamManagement/Datatables/instructorTableview.html" %}


We're sorry, the site is currently down for mantainance :( A team of highly specialized ninja monkeys has been sent your way to fix it.


Neural network layers.
More...
|
| def | nabu.neuralnetworks.components.layer.blstm (inputs, sequence_length, num_units, layer_norm=False, scope=None) |
| | a BLSTM layer More...
|
| |
| def | nabu.neuralnetworks.components.layer.pblstm (inputs, sequence_length, num_units, num_steps=2, layer_norm=False, scope=None) |
| | a Pyramidal BLSTM layer More...
|
| |
|
def | nabu.neuralnetworks.components.layer.projected_subsampling (inputs, input_seq_lengths, num_steps, name=None) |
| |
§ blstm()
| def nabu.neuralnetworks.components.layer.blstm |
( |
|
inputs, |
|
|
|
sequence_length, |
|
|
|
num_units, |
|
|
|
layer_norm = False , |
|
|
|
scope = None |
|
) |
| |
a BLSTM layer
- Parameters
-
| inputs | the input to the layer as a [batch_size, max_length, dim] tensor |
| sequence_length | the length of the input sequences as a [batch_size] tensor |
| num_units | The number of units in the one directon |
| layer_norm | whether layer normalization should be applied |
| scope | The variable scope sets the namespace under which the variables created during this call will be stored. |
- Returns
- the blstm outputs
§ pblstm()
| def nabu.neuralnetworks.components.layer.pblstm |
( |
|
inputs, |
|
|
|
sequence_length, |
|
|
|
num_units, |
|
|
|
num_steps = 2 , |
|
|
|
layer_norm = False , |
|
|
|
scope = None |
|
) |
| |
a Pyramidal BLSTM layer
- Parameters
-
| inputs | the input to the layer as a [batch_size, max_length, dim] tensor |
| sequence_length | the length of the input sequences as a [batch_size] tensor |
| num_units | The number of units in the one directon |
| num_steps | the number of time steps to concatenate |
| layer_norm | whether layer normalization should be applied |
| scope | The variable scope sets the namespace under which the variables created during this call will be stored. |
- Returns
- the PBLSTM outputs
- the new sequence lengths