Ask — Demo
A basic, no frills FAQ built with jquery. Check out the tutorial
here
.
Question 1
Answer
Question 2
Answer.


Account Name:
Blue Cross of India
Account Type:
Savings Account
Account Number:
419 318 361
Bank Name:
Indian Bank
Bank Branch:
Guindy
RTGS / IFSC Code:
IDIB000G020
MICR No:
600019019
Bank Address:
P.B.No. 3171 Sidco Building, G.S.T. Road, Guindy, Chennai-600 032
Account Name:
Blue Cross of India
Account Type:
Savings Account
Account Number:
419 318 316
Bank Name:
Indian Bank
Bank Branch:
Guindy
RTGS / IFSC Code:
IDIB000G020
International Swift Code:
IDIBINBBGDY
MICR No:
600019019
Bank Address:
P.B.No. 3171 Sidco Building, G.S.T. Road, Guindy, Chennai-600 032


Forgotten your password? If you have an Innovation Funding Service account, please enter the email address you used to create the account. We will send a password reset link to this email address which will allow you to create a new password.
Forgotten your password? If you have an Innovation Funding Service account, please enter the email address you used to create the account. We will send a password reset link to this email address which will allow you to create a new password.


{% extends "layout-pattern.html" %} {% block pattern_content %}
Some users need supoort over the phone to use a digital part of a service.
Without access, confidence or skills to use the internet, some users will have no choice but to call up to use a public service they need.
Mapping a service is not a rule
The activity of mapping a service can become a distraction from learning about your user and service. Only map the current service when:


Settings
Iterations:
Send payload:
Web Worker
Remaining pings
Result
n/a
Service Worker
Remaining pings
Result
n/a


|
About Bots
Bots tests compare the layout of web pages across multiple browsers.
Click below to add a URL and get started!
|
| URL | ||
|
|
|
Add up to 20 URL's to test
Results will appear after the weekly run
|


{% extends 'core/index.html' %} {% load static from staticfiles %} {% block styles %} {% endblock %} {% block body %}
Take a deep dive into twitter sentiment on Britain's vow to leave the European union post referendum results.
Learn more


Your internet service provider may require separate login details for sending e-mail as for receiving it.
Check the "Sending e-mail requires authentication" box if your service requires a username and password to send e-mail.
The Login name text box requires your user name for the SMTP mail server.
The Password text box requires the password for the SMTP mail server. Check with your service provider if you're not sure about these details.
Click the Next button to continue.


--- layout: speaker title: Callum Hopkins date: "2013-05-06 02:12:52 +0200" author: ukmadlz version: 1.0.0 name: Callum Hopkins image: speaker/callum_hopkins.png job: Web & Social Media Genius company: Altablue desc: Web & Social Media Genius github: caleuanhopkins twitter: caleuanhopkins website: http://www.callumhopkins.co.uk ---
Full stack developer working at a People Consultancy in Aberdeen called Altablue. I specialise in graphic & web design, web development, server setup & management, user experience and digital marketing. Published author, avid blogger, football fanatic and an absolute movie buff.
Talk contents not yet finalised.


{% extends "base.html" %} {% block body %}
Once you submit your request, we will generate a certificate
and private key and associate it with our servers. When you have your new
cert and key, these should be added to a flash drive with the
fat32
filesystem, with the filenames listed:
cert.crt
key
Once you have the files on the flash drive, they should be able to be plugged into the device and, after a reboot, work in about 30 seconds.


The following commands are there to run scripts located in .web_package/hooks.
bump build
Scripts added to .web_package/hooks/build
are run. By design, these scripts should serve the purpose of building the package and making it ready for a release. Such as create a dist
directory and copy over distribution files, etc. **Of the three, this is the only command that is automatically called by calling bump done
.
bump unbuild
Scripts added to .web_package/hooks/unbuild
are run. You may delete files as necessary to reverse the build step.
bump dev
Scripts added to .web_package/hooks/dev
are run. The intention here is to set up the project to be developed. I use this to symlink dependencies during development. These symlinks get reversed in my build scripts.
.php
or .sh
found in the build script folder will be called during version bumping.--no-hooks
in the command.--hooks
in the command.bump init
. They can be found in .web_package/examples.You may add PHP or BASH scripts to .web_package/hooks/build
and they will be run each time the version increments. You may also trigger a build by calling bump build
.
You can also trigger a single file by passing it's filename (or portion thereof); you would want to do this if you need to trigger this one script from an external program, while preserving the callback arguments. Here is an example (this also works for unbuild and dev), the second line shows how you can locate a script using a substr as well.
bump build 00_only_this_script.sh
bump build only_this
See also BASH Scripts See also PHP Scripts


Garbage Go
Status
full
half full
empty
Type
paper
plastic
metal
glass
organic
Generate Colletion Route
empty list
Generate route


Model Page
Loading...
You can edit the domain as well as relevant intents and slots.
Clicking the "Hotfix Defined/BVT Defined" button in the bottom of page will re-direct you to create your hotfix/bvt.
You can delete the entire model by clicking the "delete" button besides Domain.
For display color:
Red
means Intent/Slot is waiting for review;
Green
means admin has reviewed;
Black
means review completed
You are not the owner of this model. So you can only view the model.
Clicking the text of the Content will allow you to view them (Domain/Intent/Slot)
Clicking the "Hotfix Defined/BVT Defined" button in the bottom of page will re-direct you to view the hotfix/bvt for this model.
Domain:
{{domain.RequestedObject.Name}}
Edit
Delete
Submit
Cancel
Modify Owners
Data Owners:
0" style="padding-left:10px;">
{{o}}
Model Owners:
0" style="padding-left:10px">
{{o}}
Skill Owners:
0" style="padding-left:10px;">
{{o}}
Intent:
{{item.Tag}}
Edit
Delete
Add Intent
Slot:
{{item.Tag}}
Edit
Delete
Add Slot
Hotfix
BVT
Deploy Model
Return
{{action + ' ' + item}}
Name:
Tag:
Revision History:
{{statusMessage}}
Approve
Delete
Rename
Comment:
Revision Status:
{{adminReviewDisplay}}
Review Suggestion:
{{adminReviewDisplay}}
Admin Comments:
{{suggestion.comment || ""}}
Yes, I accept the change.
Nope, do not change.
Description:
Positive Examples (please define some example queries for this {{item}})
Negative Examples (please define some example queries for this {{item}})
Save
Cancel
0 && action=='Edit'" class="btn btn-primary lf-small-button" (click)="previousClick()">« Previous
Next »
Name:
Description:
Save
Cancel


Pick Date:
| Date | Meal | Price |
|---|---|---|
| 18-04-2018 | Bread & Tea | 300 |
| 18-04-2018 | Jollof Rice | 1000 |
| 18-04-2018 | Amala and ewedu | 500 |
| 17-04-2018 | Bread & Tea | 300 |
| 17-04-2018 | Chicken and chips | 1200 |
| 17-04-2018 | Fruits | 400 |
| 16-04-2018 | Francisco Food | 2500 |
| 13-04-2018 | Bread & Tea | 300 |
| 13-04-2018 | Semo and egusi, with chicken | 1200 |
| 13-04-2018 | Fried rice and chicken | 1500 |
| 12-04-2018 | Bread & Tea | 300 |
| 12-04-2018 | Semo and egusi | 800 |
| 12-04-2018 | Fufu and egusi soup | 500 |
| 11-04-2018 | Fried rice and chicken | 1200 |
| 11-04-2018 | Rice and beans | 500 |
| Total Amount: | 120,000 |


Java before Kotlin. I don't make the rules, that's just how alphabetical sorting works people.
2/6/2020, 8:31:11 AM
Favs: 2
Retweets: 0
link--- layout: tweet ---
Java before Kotlin. I don't make the rules, that's just how alphabetical sorting works people.
2/6/2020, 8:31:11 AM
Favs: 2
Retweets: 0
link


In this section, the term pond is used to describe a feature designed to process stormwater runoff: rainfall that flows over the ground surface. Although distinctly smaller than lakes, the exact shape and size of ponds can vary; depending on the available space and function. In urban environments, some ponds may be incorporated into the local parks, or serve as a decorative feature for community spaces. In addition, most ponds provide a permanent pool of water (in contrast to swales, which serve a similar purpose) which can support a variety of floral and microbial life.
Typically, these ponds are designed to temporarily store surface water, while also facilitating the settlement of suspended solids and removal of pollutants using plants and other biological systems. In most cases, such ponds will comprise one or more of the following features:
The use of impermeable (fluid-obstructing) materials in urban environments, such as those used to construct roads and buildings like concrete and shingle, accentuates the presence of stormwater runoff. In most UK cities, this excess runoff is redirected into a combined sewer system; at which point the water becomes contaminated with sewer water and must be treated as such. Not only does this increase the amount of work needed to be performed by sewage treatment facilities, the increased frequency of combined sewage overflows (CSOs) being used may contaminate or flood the local environment.
Instead, Sustainable (urban) Drainage Systems (SuDS) may be used: a series of management practices and control structures which provide a more sustainable means of draining surface water. Such practices may involve the use of permeable materials for urban development, while others attempt to redirect and redistribute surface water over a wide area. Examples of SuDS features may include:
In this context, the term 'wetland' is used to describe a large, shallow expanse of water; in which an abundance of aquatic flora may thrive. In addition to the attenuation and treatment of stormwater runoff, most wetlands also improve biodiversity within the local environment. In turn, the presence of vegetation within a pond may increase hydraulic retention time (HRT), which can help ensure that the water spends sufficient time in the pond to be adequately treated prior to redistribution.
Several factors must be considered to evaluate the performance of a pond. Ideally, the entire volume of water should experience some degree of flow; to optimise the rate at which water may be treated. Should a pond exhibit one or more 'dead zones', the water retained within these regions will not be effectively redistributed; nor can additional water be treated within these regions.
The use of a sediment forebay, as outlined above, would remove coarse sediments and surface oils upstream; such that sediments may be removed with minimal damage to the pond structure. In shallow ponds or wetlands, the loss of water from evapotranspiration (evaporation and plant transpiration) must also be considered, to ensure that sufficient water is retained to sustain plant growth throughout the year.
The main treatment zone is the permanent volume which helps prevent resuspension of fine sediments. Ideally large ponds, such as wetlands should be divided into smaller pools. These pools are independent of one another and so water quality and quantity volume storage become independent too. This increases attenuation, creates longer pollutant removal pathways and so improves the removal of pollutants. This also makes an easier maintenance regime and more varied ecology.
The shape and size of a pond depends heavily on the location; both in terms of available space and the type of environment in which the pond may be situated. In urban environments, this may involve incorporating ponds into community spaces, or otherwise providing an aesthetic which matches the surrounding architecture. In rural environments, this may involve shaping the terrain to blend into the environment; adopting the look-and-feel of the surroundings.
Safety should always be a consideration, especially if the pond is going to be in an area with large public access and so it should also contain a safe exceedance route and maintenance access to all areas of the pond. The addition of a flat safety bench around the perimeter of the pond provides suitable distance before open water and so discourages direct access and allows surveillance of the pond and rescue if required. This also provides a maintenance route.


Password Strength Checker
Enter a Password:
How to Strengthen Your Password:
- Password must contain at least 8 characters.
- Password should be alphanumeric (contain both characters and numbers).
- Password should contain at least 1 special character (e.g. £, $, &, @, %).
- Password should be multi-case (contain a mix of upper and lowercase characters).
Main Website


Shanghai Futures Exchange (Code: SHFE)
Commodities exchange for energy, metal, and chemical- related industrial products. A derivatives marketplace for many commodities futures.


EQUUS A film review by Mark R. Leeper Copyright 1996 Mark R. Leeper
Capsule: Peter Shaffer, later the author of AMADEUS, creates his densest and most complex film. Richard Burton plays a psychiatrist treating a boy who blinded horses in a fit of rage and frustration. The ideas really go too fast to catch all that is said. Rating: low +3 (-4 to +4)
Muhammed Vanker wrote to me saying that he could not find any reviews on the Internet for the film EQUUS (1977) and asked if I could point him to one. Well, the answer was no. There are probably a lot of major films from prior to the explosion of the Internet that have no reviews readily available. Though I had seen the film once in 1978 and only once again in the early 1980s, the film left a deep impression on me. In part because for years I said that the film, actually a play by Peter Shaffer makes a very good companion piece to another film by Peter's brother Anthony Shaffer, THE WICKER MAN. EQUUS is in part about the birth of religions, THE WICKER MAN is about the maintenance of religions. Possibly the third film should be INHERIT THE WIND, about the death of religions. In any case I sent Vanker the quick outline of what I would say if I were to review EQUUS. With that in place, I might as well go ahead and complete the review. These comments are based on memories of the film from at least thirteen years ago. Please excuse the brevity and perhaps even minor inaccuracies.
Richard Burton plays a psychiatrist (himself very troubled) who tries to get inside the mind of a sociopathic stable boy (Peter Firth) who has blinded the horses who were left in his care. The boy resists for a long time any cooperation with the psychiatrist, but finally does open up to reveal a troubled past. What Burton discovers is that the boy has is deeply disturbed but also has a mystical train of mind. The stable-boy has created for himself something like a religion (with strong sexual overtones) worshipping horses. The religion has its own ceremonies and the boy even turns the bits from the horses mouths into a sort of religious icons which he calls the "Jingle-jangle." The religion, however, cannot fulfill the boy and after an attempted sexual encounter that fails his utter frustration was release in the horse blinding. This scene, depicted in reenactment, is an intense scene in which angry boy lashes out against his god. The full frontal male nudity in the reenactment scene was rare in 1977 and quite shocking.
In some ways the play EQUUS is perhaps ill-suited for cinema since it is so dense in ideas that deserve considering. It is one film that would perhaps be better on video than in the theater. The viewer will be able to stop and even replay passages to think over their content and impact. The pace of ideas is so fast that you cannot think about one idea before the next one comes along. Still would have been really powerful with the immediacy of a stage performance. Richard Burton and Peter Firth in two main roles were both nominated for Academy Awards as was Peter Shaffer. The film was directed by Sidney Lumet who had previous directed several classics including TWELVE ANGRY MEN and FAIL-SAFE. This is, however, his most intense film and it rates a low +3 on the -4 to +4 scale.
Mark R. Leeper<EMAIL_ADDRESS>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


Here your food dreams come true
You can find best of the best recipes all over the world at the cheapest price
Italian | American | Indian | Chinese | Others


{% load static %}
Patient Name : {{patient.3}}
Disease : {{patient.4}}
Insurance Received : {{patient.1}}
Donations Received : {{patient.2}}
Far far away, behind the word mountains, far from the countries Vokalia.


How can we overcome shadowing?
•
Increase transmission
power
•
Use cellular system
–
Uses multiple
frequencies
–
Requires handover
–
Increases complexity
•
Use Access Point
Repeaters
–
Transmit and receive
from multiple locations,
using simple repeaters.


Day 42 #100DaysOfCode
— Matheus (@matheusquintaes) December 9, 2019
My first project in the 100 days of code challenge is ready🤩
Is live now: https://t.co/ne1M8zZU3n 🚀
This app helped me a lot to learn React 😃 pic.twitter.com/IPCANMVElh
After months of hard but fun work, I'm glad to finally show you my new portfolio 🚗https://t.co/rVPv9oVMud
— Bruno (@bruno_simon) October 24, 2019
Made with #threeJS and #canonJS pic.twitter.com/zrq8rpILq1
Holy bananas! @lynnandtonic in for the kill with what must be the world's coolest personal site.https://t.co/zm4rEzhuhM
— Sarah Drasner (@sarah_edo) November 20, 2019
I hear dogs show up at some screensize too! (h't @EliFitch)
alt: a site that reveals more an more heads as it shifts for larger viewports pic.twitter.com/Kpq4bIJtFi
I feel seen. pic.twitter.com/7pGuWKfyR7
— zdfs (@zdfs) December 4, 2019


--- layout: default title: Ariato --- toolbar CSS components/toolbar.css A toolbar is a container for grouping a set of controls, such as buttons, menubuttons, or checkboxes. {% include svg/icons/moon.svg %} {% include svg/icons/sun.svg %} auto lines
CSS components/toolbar.css
A toolbar is a container for grouping a set of controls, such as buttons, menubuttons, or checkboxes.


Pick up a USb stick (don't lose it)
Plug it in and boot from it (F12)
Write a blog post about what you want to get out of this course
Save your post in the S: drive: e.g. S:\\CS\GROUPNAME\YOURNAME\blog_post.docx
Software engineering, in my opinion, boils down to two things:
If you can do these things, you can engineer software
The art of breaking a task down into small, single-focus problems, then solving those problems whilst being aware of the whole.
Write a script that calculates the
nth number in the Fibonacci sequence
e.g.
> fibonacci(6)
8
> fibonacci(10)
55
Problems are often "meta problems", problems you have to solve in order to solve other problems
e.g. What's the Fibonacci sequence?
Some problems are specific to you the individual
e.g. What text editor should I use?
Some are shared problems between developers
e.g. What language should we use?
Some problems are specific to the project
e.g. How do I calculate numbers in the sequence?
I think this kind of method of problem solving; breaking things down into smaller chunks, is quite natural. I think most people do it all the time, how could you get any suitably large task done otherwise?
In software engineering you tend to need to be more explicit about what these tasks are, you need to write them down and describe them.
This is because you want to be able to stop working on the project and come back to it tomorrow.
You want to be able to share the project workload with other people.
You want to be able to easily tell what you're doing, why you're doing it, and in what context you're doing it.
You want to know how well you're doing, and how much more work is required before you finish.
That's problem solving...
The second part of software engineering is being lazy
This means doing the smallest amount of work possible in order to solve the problem
Being lazy doesn't mean doing work badly
Don't cut corners, don't rush stuff, don't leave work for other people to do
It means, how can you most easily do an excellent job
Being lazy doesn't mean shooting yourself in the foot
There are lots of problems to solve for any given task, the laziest solution to one problem might mean lots of work further down the line
In fact being lazy might involve putting in hours of work now in order to save weeks of work later
Write a blog post about problem solving and being lazy
Remember, it's your blog, write what you like:


| |
|
|
|
|
| |
|
|
|
|
| W Sep 5 |
Introduction |
Syllabus |
|
ME 312 Review, Read project overview |
| Th Sep 6 |
No Lab |
|
|
|
| F Sep 7 |
Atmosphere |
Ch 1 |
|
|
| |
|
|
|
|
| M Sep 10 |
Fundamentals |
Ch 2 |
|
Quiz 1 |
| W Sep 12 |
Parasitic Drag |
3.1-3.2 |
Fluid Videos Fluid Dynamics of Drag (I-IV) |
HW 1: Configuration |
| Th Sep 13 |
Mass and Hinges |
|
|
|
| F Sep 14 |
Parasitic Drag (con’t) |
|
|
|
| |
|
|
|
|
| M Sep 17 |
Induced Drag |
3.3-3.4 |
|
Quiz 2 |
| W Sep 19 |
Compressibility Drag |
3.5 |
|
HW 2: Drag and Airfoils |
| Th Sep 20 |
Adhesives and Control Surfaces |
|
|
|
| F Sep 21 |
Airfoil Design |
XFLR5 Tutorial 1 |
|
|
| |
|
|
|
|
| M Sep 24 |
Wing Design |
4.1 |
|
Quiz 3 |
| W Sep 26 |
Wing Design (con’t) |
4.2 |
wingdesign.m, wing.png |
HW 3: Wing Design |
| Th Sep 27 |
Foam Cutter |
foam cutter |
|
|
| F Sep 28 |
Foam Cutter |
|
|
|
| |
|
|
|
|
| M Oct 1 |
Longitudinal Static Stability |
5.1-5.2 |
|
Quiz 4 |
| W Oct 3 |
Longitudinal Stability (con’t) |
|
|
HW 4: Stability |
| Th Oct 4 |
Battery Safety and Electronics Selection |
|
|
|
| F Oct 5 |
Lateral Static Stability, Tail Sizing |
5.3-5.5 |
|
|
| |
|
|
|
|
| M Oct 8 |
Dynamic Stability |
5.6 |
|
Quiz 5 |
| W Oct 10 |
Midterm 1 Review |
|
|
PDR and Mid 1 |
| Th Oct 11 |
No Lab |
|
|
|
| F Oct 12 |
Preliminary Design Review |
|
|
|
| |
|
|
|
|
| M Oct 15 |
Motors and Propellers |
6.1-6.2 |
|
|
| W Oct 17 |
Motor/Prop Matching |
6.3 |
motorprop.m |
HW 5: Propulsion |
| Th Oct 18 |
Motor/Prop Testing |
|
|
|
| F Oct 19 |
Gas Turbine Engines |
6.4 |
|
|
| |
|
|
|
|
| M Oct 22 |
Propulsion Wrap-up |
6.5 |
|
|
| W Oct 24 |
Range and Endurance |
7.1-7.3 |
|
HW 6: Performance |
| Th Oct 25 |
No Lab |
|
|
|
| F Oct 26 |
Climb and Descend |
7.4-7.6 |
|
|
| |
|
|
|
|
| M Oct 29 |
Takeoff and Landing |
7.7-7.9 |
|
|
| W Oct 31 |
Wing Bending |
8.1-8.2 |
|
HW 7: Structures |
| Th Nov 1 |
No Lab |
|
|
|
| F Nov 2 |
Flight Envelopes |
8.3-8.5 |
|
|
| |
|
|
|
|
| M Nov 5 |
Feedback Control |
Examples |
|
|
| W Nov 7 |
Telemetry |
|
|
HW 8: Telemetry |
| Th Nov 8 |
No Lab |
|
|
|
| F Nov 9 |
Rocket Fundamentals |
Ch 9 |
|
|
| |
|
|
|
|
| M Nov 12 |
Rocket Design Exercise |
|
|
|
| W Nov 14 |
Midterm 2 Review |
|
|
CDR and Mid 2 |
| Th Nov 15 |
No Lab |
|
|
|
| F Nov 16 |
Critical Design Review |
|
|
|
| |
|
|
|
|
| M Nov 19 |
Build/Fly |
|
|
|
| T Nov 20 |
Build/Fly |
|
|
|
| W Nov 21 |
Thanksgiving Holiday |
|
|
|
| F Nov 23 |
Thanksgiving Holiday |
|
|
|
| |
|
|
|
|
| M Nov 26 |
Rocket Propulsion |
10.1-10.2 |
|
|
| W Nov 28 |
Out Sick |
|
HW 9: Rockets |
|
| Th Nov 29 |
No Lab |
|
|
|
| F Nov 30 |
Rocket Nozzle Exercise |
10.3-10.4 |
|
|
| |
|
|
|
|
| M Dec 3 |
Rocket Nozzle (con’t) |
|
|
|
| W Dec 5 |
Orbital Mechanics |
Ch 11 |
|
|
| Th Dec 6 |
No Lab |
|
|
|
| F Dec 7 |
Fly Off |
|
|
|
| |
|
|
|
|
| M Dec 10 |
Fly Off |
|
|
|
| W Dec 12 |
Final Review |
|
|
|
| Th Dec 13 |
|
|
|
Final Report Due |
| |
|
|
|
|


Synergy: Disaster Relief
Home
Validate
Request
Contact
Request Form
Provide the details. Some agency will get back to you.
Name
Contact
Location
Resource Required
Shelter
Food
Medical Assistance
Others
Sign in


The OpenAPI (Swagger) specification is a powerful definition format to describe RESTful APIs. Nest provides a dedicated module to work with it.
Firstly you have to install the module:
$ npm install --save @nestjs/swagger
Once the installation process is done, open your bootstrap file (mostly main.ts
) and initialize the Swagger using SwaggerModule
class:
{{ bootstrapFile }}
The DocumentBuilder
is a helper class that helps to structure a base document for the SwaggerModule
.
It contains several methods that allow setting such properties like title, description, version, and so on.
In order to create a full document (with defined HTTP routes) we use the createDocument()
method of the SwaggerModule
class.
This method takes two arguments, the application instance and the base Swagger options respectively.
The last step is to call setup()
. It accepts sequentially (1) path to mount the Swagger,
(2) application instance, and (3) the document that describes the Nest application.
Now you can run the following command to start the HTTP server:
$ npm run start
While the application is running, open your browser and navigate to http://localhost:3000/api
. You should see similar page:
The SwaggerModule
automatically reflects all of your endpoints.
In the background, it's making use of swagger-ui-express
and creates a live documentation.
During the examination of the defined controllers, the SwaggerModule
is looking for all used @Body()
, @Query()
, and @Param()
decorators in the route handlers.
Thanks to them, the valid document can be created.
Moreover, the module creates the models definitions by taking advantage of the reflection. Take a look at the following code:
{{ postHandler }}
Notice To implicitly set the body definition you can use the@ApiImplicitBody()
decorator (@nestjs/swagger
package).
Based on the CreateCatDto
, the module definition will be created:
As you can see, the definition's empty although the class has few declared properties.
In order to make the class properties accessible to the SwaggerModule
, we have to mark all of them with @ApiModelProperty()
decorator:
{{ createCatDto }}
Let's open the browser and verify the generated CreateCatDto
model:
The @ApiModelProperty()
decorator accepts options object:
{{ apiModelProperty }}
Hint There's an@ApiModelPropertyOptional()
shortcut decorator which helps to avoid continuous typing{{ apiModelPropertyOptional }}
.
Thanks to that we can simply set the default value, determine whether the property is required or explicitly set the type.
To be able for SwaggerModule
to identify an Enum
, we have to manually set the enum
property on @ApiModelProperty
with an Array of values
.
{{ enumProperty }}
UserRole
enum can be defined as following snippet:
{{ userRoleEnum }}
Note The above usage can only be applied to a property as part of a model definition.
Enums can be used by itself with the @Query()
parameter decorator in combination with the @ApiImplicitQuery()
decorator.
{{ apiImplicitQuery }}
{{ enumImplicitQuery }}
Hintenum
andisArray
can also be used in combination in@ApiImplicitQuery()
With isArray
set to true, the enum
now can be selected as a multi-select:
We have to manually indicate the type and set the isArray
property to true when the property is actually an array:
{{ arrayProperty }}
At the beginning, we created a cats
tag (by making use of DocumentBuilder
).
In order to attach the controller to the specified tag, we need to use @ApiUseTags(...tags)
decorator.
{{ useTags }}
To define a custom HTTP response, we use @ApiResponse()
decorator.
{{ response }}
Same as common HTTP Exceptions defined in Exception Filters,
Nest also provides a set of usable API Responses that inherits from the core @ApiResponse
decorator:
@ApiOkResponse()
@ApiCreatedResponse()
@ApiBadRequestResponse()
@ApiUnauthorizedResponse()
@ApiNotFoundResponse()
@ApiForbiddenResponse()
@ApiMethodNotAllowedResponse()
@ApiNotAcceptableResponse()
@ApiRequestTimeoutResponse()
@ApiConflictResponse()
@ApiGoneResponse()
@ApiPayloadTooLargeResponse()
@ApiUnsupportedMediaTypeResponse()
@ApiUnprocessableEntityResponse()
@ApiInternalServerErrorResponse()
@ApiNotImplementedResponse()
@ApiBadGatewayResponse()
@ApiServiceUnavailableResponse()
@ApiGatewayTimeoutResponse()
In addition to the available HTTP Exceptions, Nest provides short-hand decorators for:
HttpStatus.OK
, HttpStatus.CREATED
and HttpStatus.METHOD_NOT_ALLOWED
{{ customResponse }}
You can enable the bearer authorization using addBearerAuth()
method of the DocumentBuilder
class.
Then to restrict the chosen route or entire controller, use @ApiBearerAuth()
decorator.
{{ bearerAuth }}
That's how the OpenAPI documentation should look like now:
All of the available OpenAPI decorators has an Api
prefix to be clearly distinguishable from the core decorators.
Below is a full list of the exported decorators with a defined use-level (where might be applied).
@ApiOperation() |
Method |
@ApiResponse() |
Method / Controller |
@ApiProduces() |
Method / Controller |
@ApiConsumes() |
Method / Controller |
@ApiBearerAuth() |
Method / Controller |
@ApiOAuth2Auth() |
Method / Controller |
@ApiImplicitBody() |
Method |
@ApiImplicitParam() |
Method |
@ApiImplicitQuery() |
Method |
@ApiImplicitHeader() |
Method |
@ApiExcludeEndpoint() |
Method |
@ApiUseTags() |
Method / Controller |
@ApiModelProperty() |
Model |
@ApiModelPropertyOptional() |
Model |
A working example is available here.


Canvas
Info Panel
strokes:
??
stroke time:
?? ms
total stroke time:
?? sec
Brush Panel
1
2
Input Panel
Pointer
Mouse
Touch
Pressure, X Tilt, Y Tilt


FAQ
How do I use the tool?
Once you have selected your image simply click on grid intersections until the grid looks right. To get the fastest results try to click intersections that the currently proposed grid is far away from.
There is also a demo video that walks through a quick example.
The tools is suggesting a tiny grid!
The largest grid that adequately explains the points you have given will be displayed. There are two main reasons that you get a smaller grid than you expected.
- Inaccurate clicks can cause the grid to become smaller than expected. For example if you clicked roughly in the middle of a grid cell halving the grid size will "explain" that point, without causing extra error in the others. In this case the best option is generally to start over and click carefully, although sometimes making many more accurate clicks can result in the correct prediction.
- The map isn't actually a square grid. It is not uncommon to find battlemaps online that have non-square grids. Often the grid will be on an angle, skewed or change size throughout the map. This is frequently seen on maps that were designed for tabletop-use where an accurate grid was not important like it is on today's virtual tabletops. Unfortunately there is no great solution in this case. If you want to find the best aproximation try selecting points in a small area of the map, then once you have the approximate cell size import into your VTT and try to find an acceptable offset manually.
Why is it suggesting a non-integer cell size?
The cell sized is based off of the farthest away points in either dimension. This will be the farther apart pair of the top and bottommost points, or left and rightmost points. If these points are not accurate the cells size won't be perfect.
You can either round the number in your head and see if it works, or carefully select points as far away as possible to get the most accurate calculation.
The suggested grid is too large!
If the suggested grid is too large simply click on the missed corners and the suggestion will adjust. Note that there is a hardcoded minimum of 8 pixels per cell.
Can I remove a point?
Sure thing, just middle click it!
I have a suggestion or would like to help out!
The code is free on GitLab and report issues in the tracker.


- ZERO - Static variable in class org.jfree.chart.plot.Plot
-
Useful constant representing zero.
- ZERO - Static variable in class org.jfree.chart.renderer.AbstractRenderer
-
Zero represented as a Double
.
- zeroAll() - Method in class org.jfree.data.xy.MatrixSeries
-
Sets all matrix values to zero and sends a
SeriesChangeEvent
to all registered
listeners.
- zeroAll() - Method in class org.jfree.data.xy.NormalizedMatrixSeries
-
- zoom(Rectangle2D) - Method in class org.jfree.chart.ChartPanel
-
Zooms in on a selected region.
- zoom(double) - Method in class org.jfree.chart.plot.CategoryPlot
-
Zooms (in or out) on the plot's value axis.
- zoom(double) - Method in class org.jfree.chart.plot.CompassPlot
-
No zooming is implemented for compass plot, so this method is empty.
- zoom(double) - Method in class org.jfree.chart.plot.ContourPlot
-
Deprecated.
Zooms the axis ranges by the specified percentage about the anchor point.
- zoom(double) - Method in class org.jfree.chart.plot.MeterPlot
-
A zoom method that does nothing.
- zoom(double) - Method in class org.jfree.chart.plot.Plot
-
Performs a zoom on the plot.
- zoom(double) - Method in class org.jfree.chart.plot.PolarPlot
-
Zooms the axis ranges by the specified percentage about the anchor point.
- zoom(double) - Method in class org.jfree.chart.plot.ThermometerPlot
-
A zoom method that does nothing.
- ZOOM_IN_BOTH_COMMAND - Static variable in class org.jfree.chart.ChartPanel
-
Zoom in (both axes) action command.
- ZOOM_IN_DOMAIN_COMMAND - Static variable in class org.jfree.chart.ChartPanel
-
Zoom in (domain axis only) action command.
- ZOOM_IN_RANGE_COMMAND - Static variable in class org.jfree.chart.ChartPanel
-
Zoom in (range axis only) action command.
- ZOOM_OUT_BOTH_COMMAND - Static variable in class org.jfree.chart.ChartPanel
-
Zoom out (both axes) action command.
- ZOOM_OUT_DOMAIN_COMMAND - Static variable in class org.jfree.chart.ChartPanel
-
Zoom out (domain axis only) action command.
- ZOOM_OUT_RANGE_COMMAND - Static variable in class org.jfree.chart.ChartPanel
-
Zoom out (range axis only) action command.
- ZOOM_RESET_BOTH_COMMAND - Static variable in class org.jfree.chart.ChartPanel
-
Zoom reset (both axes) action command.
- ZOOM_RESET_DOMAIN_COMMAND - Static variable in class org.jfree.chart.ChartPanel
-
Zoom reset (domain axis only) action command.
- ZOOM_RESET_RANGE_COMMAND - Static variable in class org.jfree.chart.ChartPanel
-
Zoom reset (range axis only) action command.
- Zoomable - Interface in org.jfree.chart.plot
-
A plot that is zoomable must implement this interface to provide a
mechanism for the
ChartPanel
to control the zooming.
- zoomDomainAxes(double, PlotRenderingInfo, Point2D) - Method in class org.jfree.chart.plot.CategoryPlot
-
This method does nothing, because CategoryPlot
doesn't
support zooming on the domain.
- zoomDomainAxes(double, double, PlotRenderingInfo, Point2D) - Method in class org.jfree.chart.plot.CategoryPlot
-
This method does nothing, because CategoryPlot
doesn't
support zooming on the domain.
- zoomDomainAxes(double, PlotRenderingInfo, Point2D, boolean) - Method in class org.jfree.chart.plot.CategoryPlot
-
This method does nothing, because CategoryPlot
doesn't
support zooming on the domain.
- zoomDomainAxes(double, PlotRenderingInfo, Point2D) - Method in class org.jfree.chart.plot.CombinedRangeXYPlot
-
Multiplies the range on the domain axis/axes by the specified factor.
- zoomDomainAxes(double, PlotRenderingInfo, Point2D, boolean) - Method in class org.jfree.chart.plot.CombinedRangeXYPlot
-
Multiplies the range on the domain axis/axes by the specified factor.
- zoomDomainAxes(double, double, PlotRenderingInfo, Point2D) - Method in class org.jfree.chart.plot.CombinedRangeXYPlot
-
Zooms in on the domain axes.
- zoomDomainAxes(double, double, double) - Method in class org.jfree.chart.plot.ContourPlot
-
Deprecated.
Multiplies the range on the domain axis/axes by the specified factor
(to be implemented).
- zoomDomainAxes(double, double, double, double) - Method in class org.jfree.chart.plot.ContourPlot
-
Deprecated.
Zooms the domain axes (not yet implemented).
- zoomDomainAxes(double, PlotRenderingInfo, Point2D) - Method in class org.jfree.chart.plot.FastScatterPlot
-
Multiplies the range on the domain axis by the specified factor.
- zoomDomainAxes(double, PlotRenderingInfo, Point2D, boolean) - Method in class org.jfree.chart.plot.FastScatterPlot
-
Multiplies the range on the domain axis by the specified factor.
- zoomDomainAxes(double, double, PlotRenderingInfo, Point2D) - Method in class org.jfree.chart.plot.FastScatterPlot
-
Zooms in on the domain axes.
- zoomDomainAxes(double, PlotRenderingInfo, Point2D) - Method in class org.jfree.chart.plot.PolarPlot
-
This method is required by the
Zoomable
interface, but since
the plot does not have any domain axes, it does nothing.
- zoomDomainAxes(double, PlotRenderingInfo, Point2D, boolean) - Method in class org.jfree.chart.plot.PolarPlot
-
This method is required by the
Zoomable
interface, but since
the plot does not have any domain axes, it does nothing.
- zoomDomainAxes(double, double, PlotRenderingInfo, Point2D) - Method in class org.jfree.chart.plot.PolarPlot
-
This method is required by the
Zoomable
interface, but since
the plot does not have any domain axes, it does nothing.
- zoomDomainAxes(double, PlotRenderingInfo, Point2D) - Method in class org.jfree.chart.plot.ThermometerPlot
-
Multiplies the range on the domain axis/axes by the specified factor.
- zoomDomainAxes(double, PlotRenderingInfo, Point2D, boolean) - Method in class org.jfree.chart.plot.ThermometerPlot
-
Multiplies the range on the domain axis/axes by the specified factor.
- zoomDomainAxes(double, double, PlotRenderingInfo, Point2D) - Method in class org.jfree.chart.plot.ThermometerPlot
-
This method does nothing.
- zoomDomainAxes(double, PlotRenderingInfo, Point2D) - Method in class org.jfree.chart.plot.XYPlot
-
Multiplies the range on the domain axis/axes by the specified factor.
- zoomDomainAxes(double, PlotRenderingInfo, Point2D, boolean) - Method in class org.jfree.chart.plot.XYPlot
-
Multiplies the range on the domain axis/axes by the specified factor.
- zoomDomainAxes(double, double, PlotRenderingInfo, Point2D) - Method in class org.jfree.chart.plot.XYPlot
-
Zooms in on the domain axis/axes.
- zoomDomainAxes(double, PlotRenderingInfo, Point2D) - Method in interface org.jfree.chart.plot.Zoomable
-
Multiplies the range on the domain axis/axes by the specified factor.
- zoomDomainAxes(double, PlotRenderingInfo, Point2D, boolean) - Method in interface org.jfree.chart.plot.Zoomable
-
Multiplies the range on the domain axis/axes by the specified factor.
- zoomDomainAxes(double, double, PlotRenderingInfo, Point2D) - Method in interface org.jfree.chart.plot.Zoomable
-
Zooms in on the domain axes.
- zoomInBoth(double, double) - Method in class org.jfree.chart.ChartPanel
-
Zooms in on an anchor point (specified in screen coordinate space).
- zoomInDomain(double, double) - Method in class org.jfree.chart.ChartPanel
-
Decreases the length of the domain axis, centered about the given
coordinate on the screen.
- zoomInRange(double, double) - Method in class org.jfree.chart.ChartPanel
-
Decreases the length of the range axis, centered about the given
coordinate on the screen.
- zoomOutBoth(double, double) - Method in class org.jfree.chart.ChartPanel
-
Zooms out on an anchor point (specified in screen coordinate space).
- zoomOutDomain(double, double) - Method in class org.jfree.chart.ChartPanel
-
Increases the length of the domain axis, centered about the given
coordinate on the screen.
- zoomOutRange(double, double) - Method in class org.jfree.chart.ChartPanel
-
Increases the length the range axis, centered about the given
coordinate on the screen.
- zoomRange(double, double) - Method in class org.jfree.chart.axis.DateAxis
-
Zooms in on the current range (zoom-in stops once the axis length
reaches the equivalent of one millisecond).
- zoomRange(double, double) - Method in class org.jfree.chart.axis.LogarithmicAxis
-
Zooms in on the current range.
- zoomRange(double, double) - Method in class org.jfree.chart.axis.LogAxis
-
Zooms in on the current range.
- zoomRange(double, double) - Method in class org.jfree.chart.axis.ValueAxis
-
Zooms in on the current range.
- zoomRangeAxes(double, PlotRenderingInfo, Point2D) - Method in class org.jfree.chart.plot.CategoryPlot
-
Multiplies the range on the range axis/axes by the specified factor.
- zoomRangeAxes(double, PlotRenderingInfo, Point2D, boolean) - Method in class org.jfree.chart.plot.CategoryPlot
-
Multiplies the range on the range axis/axes by the specified factor.
- zoomRangeAxes(double, double, PlotRenderingInfo, Point2D) - Method in class org.jfree.chart.plot.CategoryPlot
-
Zooms in on the range axes.
- zoomRangeAxes(double, PlotRenderingInfo, Point2D) - Method in class org.jfree.chart.plot.CombinedDomainCategoryPlot
-
Multiplies the range on the range axis/axes by the specified factor.
- zoomRangeAxes(double, PlotRenderingInfo, Point2D, boolean) - Method in class org.jfree.chart.plot.CombinedDomainCategoryPlot
-
Multiplies the range on the range axis/axes by the specified factor.
- zoomRangeAxes(double, double, PlotRenderingInfo, Point2D) - Method in class org.jfree.chart.plot.CombinedDomainCategoryPlot
-
Zooms in on the range axes.
- zoomRangeAxes(double, PlotRenderingInfo, Point2D) - Method in class org.jfree.chart.plot.CombinedDomainXYPlot
-
Multiplies the range on the range axis/axes by the specified factor.
- zoomRangeAxes(double, PlotRenderingInfo, Point2D, boolean) - Method in class org.jfree.chart.plot.CombinedDomainXYPlot
-
Multiplies the range on the range axis/axes by the specified factor.
- zoomRangeAxes(double, double, PlotRenderingInfo, Point2D) - Method in class org.jfree.chart.plot.CombinedDomainXYPlot
-
Zooms in on the range axes.
- zoomRangeAxes(double, double, double) - Method in class org.jfree.chart.plot.ContourPlot
-
Deprecated.
Multiplies the range on the range axis/axes by the specified factor.
- zoomRangeAxes(double, double, double, double) - Method in class org.jfree.chart.plot.ContourPlot
-
Deprecated.
Zooms the range axes (not yet implemented).
- zoomRangeAxes(double, PlotRenderingInfo, Point2D) - Method in class org.jfree.chart.plot.FastScatterPlot
-
Multiplies the range on the range axis/axes by the specified factor.
- zoomRangeAxes(double, PlotRenderingInfo, Point2D, boolean) - Method in class org.jfree.chart.plot.FastScatterPlot
-
Multiplies the range on the range axis by the specified factor.
- zoomRangeAxes(double, double, PlotRenderingInfo, Point2D) - Method in class org.jfree.chart.plot.FastScatterPlot
-
Zooms in on the range axes.
- zoomRangeAxes(double, PlotRenderingInfo, Point2D) - Method in class org.jfree.chart.plot.PolarPlot
-
Multiplies the range on the range axis/axes by the specified factor.
- zoomRangeAxes(double, PlotRenderingInfo, Point2D, boolean) - Method in class org.jfree.chart.plot.PolarPlot
-
Multiplies the range on the range axis by the specified factor.
- zoomRangeAxes(double, double, PlotRenderingInfo, Point2D) - Method in class org.jfree.chart.plot.PolarPlot
-
Zooms in on the range axes.
- zoomRangeAxes(double, PlotRenderingInfo, Point2D) - Method in class org.jfree.chart.plot.ThermometerPlot
-
Multiplies the range on the range axis/axes by the specified factor.
- zoomRangeAxes(double, PlotRenderingInfo, Point2D, boolean) - Method in class org.jfree.chart.plot.ThermometerPlot
-
Multiplies the range on the range axis/axes by the specified factor.
- zoomRangeAxes(double, double, PlotRenderingInfo, Point2D) - Method in class org.jfree.chart.plot.ThermometerPlot
-
Zooms the range axes.
- zoomRangeAxes(double, PlotRenderingInfo, Point2D) - Method in class org.jfree.chart.plot.XYPlot
-
Multiplies the range on the range axis/axes by the specified factor.
- zoomRangeAxes(double, PlotRenderingInfo, Point2D, boolean) - Method in class org.jfree.chart.plot.XYPlot
-
Multiplies the range on the range axis/axes by the specified factor.
- zoomRangeAxes(double, double, PlotRenderingInfo, Point2D) - Method in class org.jfree.chart.plot.XYPlot
-
Zooms in on the range axes.
- zoomRangeAxes(double, PlotRenderingInfo, Point2D) - Method in interface org.jfree.chart.plot.Zoomable
-
Multiplies the range on the range axis/axes by the specified factor.
- zoomRangeAxes(double, PlotRenderingInfo, Point2D, boolean) - Method in interface org.jfree.chart.plot.Zoomable
-
Multiplies the range on the range axis/axes by the specified factor.
- zoomRangeAxes(double, double, PlotRenderingInfo, Point2D) - Method in interface org.jfree.chart.plot.Zoomable
-
Zooms in on the range axes.
- zValues - Variable in class org.jfree.data.contour.DefaultContourDataset
-
Deprecated.
Storage for the z values.


refresh
CryptoDash
Prices
Calculator (coming soon)
search
clear
#
Name
Symbol
Price
Change (1h)
Change (24h)
Watch
Loading...


Spark Release 0.6.0
Spark 0.6.0 is a major release that brings several new features, architectural changes, and performance enhancements. The most visible additions are a standalone deploy mode, a Java API, and expanded documentation; but there are also numerous other changes under the hood, which improve performance in some cases by as much as 2x.
You can download this release as either a source package (2 MB tar.gz) or prebuilt package (48 MB tar.gz)
Simpler Deployment
In addition to running on Mesos, Spark now has a standalone deploy mode that lets you quickly launch a cluster without installing an external cluster manager. The standalone mode only needs Java installed on each machine, and Spark deployed to it.
In addition, there is experimental support for running on YARN (Hadoop NextGen), currently in a separate branch.
Java API
Java programmers can now use Spark through a new Java API layer. This layer makes available all of Spark’s features, including parallel transformations, distributed datasets, broadcast variables, and accumulators, in a Java-friendly manner.
Expanded Documentation
Spark’s documentation has been expanded with a new quick start guide, additional deployment instructions, configuration guide, tuning guide, and improved Scaladoc API documentation.
Engine Changes
Under the hood, Spark 0.6 has new, custom storage and communication layers brought in from the upcoming Spark Streaming project. These can improve performance over past versions by as much as 2x. Specifically:
- A new communication manager using asynchronous Java NIO lets shuffle operations run faster, especially when sending large amounts of data or when jobs have many tasks.
- A new storage manager supports per-dataset storage level settings (e.g. whether to keep the dataset in memory, deserialized, on disk, etc, or even replicated across nodes).
- Spark's scheduler and control plane have been optimized to better support ultra-low-latency jobs (under 500ms) and high-throughput scheduling decisions.
New APIs
- This release adds the ability to control caching strategies on a per-RDD level, so that different RDDs may be stored in memory, on disk, as serialized bytes, etc. You can choose your storage level using the persist() method on RDD.
- A new Accumulable class generalizes Accumulators for the case when the type being accumulated is not the same as the types of elements being added (e.g. you wish to accumulate a collection, such as a Set, by adding individual elements).
- You can now dynamically add files or JARs that should be shipped to your workers with SparkContext.addFile/Jar.
- More Spark operators (e.g. joins) support custom partitioners.
Enhanced Debugging
Spark’s log now prints which operation in your program each RDD and job described in your logs belongs to, making it easier to tie back to which parts of your code experience problems.
Maven Artifacts
Spark is now available in Maven Central, making it easier to link into your programs without having to build it as a JAR. Use the following Maven identifiers to add it to a project:
- groupId: org.spark-project
- artifactId: spark-core_2.9.2
- version: 0.6.0
Compatibility
This release is source-compatible with Spark 0.5 programs, but you will need to recompile them against 0.6. In addition, the configuration for caching has changed: instead of having a spark.cache.class parameter that sets one caching strategy for all RDDs, you can now set a per-RDD storage level. Spark will warn if you try to set spark.cache.class.
Credits
Spark 0.6 was the work of a large set of new contributors from Berkeley and outside.
- Tathagata Das contributed the new communication layer, and parts of the storage layer.
- Haoyuan Li contributed the new storage manager.
- Denny Britz contributed the YARN deploy mode, key aspects of the standalone one, and several other features.
- Andy Konwinski contributed the revamped documentation site, Maven publishing, and several API docs.
- Josh Rosen contributed the Java API, and several bug fixes.
- Patrick Wendell contributed the enhanced debugging feature and helped with testing and documentation.
- Reynold Xin contributed numerous bug and performance fixes.
- Imran Rashid contributed the new Accumulable class.
- Harvey Feng contributed improvements to shuffle operations.
- Shivaram Venkataraman improved Spark's memory estimation and wrote a memory tuning guide.
- Ravi Pandya contributed Spark run scripts for Windows.
- Mosharaf Chowdhury provided several fixes to broadcast.
- Henry Milner pointed out several bugs in sampling algorithms.
- Ray Racine provided improvements to the EC2 scripts.
- Paul Ruan and Bill Zhao helped with testing.
Thanks also to all the Spark users who have diligently suggested features or reported bugs.
Spark News Archive


Consultation outcome
Ref: Ofqual/15/5787 PDF , 123KB , 18 pages
Ref: Ofqual/15/5786 PDF , 142KB , 10 pages
Ref: Ofqual/15/5785 PDF , 75.5KB , 6 pages
We have decided to adopt two of our consultation proposals:
We have also decided to make some changes to the weighting and wording of our assessment objectives. We set out the final assessment objectives for new GCSEs in design and technology in the table below.
| Assessment objective | Weighting | |
|---|---|---|
| AO1 | Identify, investigate and outline design possibilities to address needs and wants | 10% |
| AO2 | Design and make prototypes that are fit for purpose | 30% |
| AO3 |
Analyse and evaluate –
• design decisions and outcomes, including for prototypes made by themselves and others • wider issues in design technology |
20% |
| AO4 |
Demonstrate and apply knowledge and understanding of –
• technical principles • design and making principles |
40% |
In taking these decisions, we have considered responses to the consultation, as well as our regulatory and equality impact assessments, which we are publishing today.
This consultation ran from
to
A consultation on the assessment arrangements for new GCSEs in design and technology, for first teaching in September 2017.
Ref: Ofqual/15/5725 PDF , 573KB , 28 pages
If you use assistive technology (such as a screen reader) and need a version of this document in a more accessible format, please email<EMAIL_ADDRESS>. Please tell us what format you need. It will help us if you say what assistive technology you use.
This consultation is about developing new GCSEs in design and technology for first teaching in September 2017.
There will be further consultation on the development of other GCSE and AS and A level subjects at a later date.
Published: 1 July 2015
Updated: 4 November 2015
From: Ofqual


--- layout: page-fullwidth title: "DDS Contacts" meta_title: "DDS Contacts" subheadline: "" teaser: "" permalink: "/contacts/" ---
Course Organiser j.k.stewart [AT] ed.ac.uk
Course Organiser morgan.currie [AT] .ed.ac.uk
Course Secretary Alex.Dysart [AT] ed.ac.uk


- HOMEPAGES
- SLIDERS
- HERO SCENES
- FEATURES
- SHOP
- PAGES
- ELEMENTS
Kallyas is an ultra-premium, responsive theme built for today websites.
T (212) 555 55 00
Email<EMAIL_ADDRESS>Your Company LTD
Street nr 100, 4536534, Chicago, US


Although generally thought of as the sweetly romantic type, Meg Ryan has actually done an impressive amount of dramatic stretching throughout her career. Those who know her only from hits such as ``When Harry Met Sally'' and ``Sleepless in Seattle'' might not suspect she's also played an Irish asylum inmate (in ``Restoration''), a tattooed teen-aged hellraiser (``Promised Land''), and, in her sharpest performance to date, an alcoholic mother in ``When A Man Loves A Woman.''
Ryan is back on the edge in ``Addicted To Love,'' although you'd never guess it from the film's adorable poster, which shows her, Matthew Broderick, Tcheky Karyo and Kelly Preston cuddling and grinning. It looks like a typical box of Hollywood candy, but ``Addicted To Love'' is full of baker's chocolate.
Ryan is cast as a borderline psychotic named Maggie for whom love means never having to cry ``uncle.'' Wearing a battered bomber jacket, aviator goggles, a knowing sneer, and eyeshadow that might have been applied with a pushbroom, she's the perfect Greenwich Village vision of a woman scorned. Cuddling and grinning are not on her agenda.
Jilted by her elitist French fiance Anton (Karyo), Maggie vows to strip him of his dignity. ``When I'm done with him, he'll be a twitching stain on the floor,'' she tells her timid partner Sam (Broderick). Sam, a moony astronomer, has hooked up with Maggie because his dreamy former girlfriend Linda (Preston) is now living with Anton.
Setting up shop in the collapsing hovel across the street, Sam has trained a camera obscura on Linda and Anton's apartment. When they're not concocting bizarre revenge schemes, involving lipstick-wearing monkeys and children with perfume-filled squirt guns, Sam and Maggie are couch potatoes, spellbound by the cinema-verite sitcom of their ex-lovers' lives.
``Addicted To Love'' was directed by Griffin Dunne, star of Martin Scorsese's harrowing 1985 comedy ``After Hours,'' the story of an extraordinarily unlucky yuppie trying to survive a night in New York. ``Addicted'' is similarly dark. Fans who loved Ryan's milquetoast persona in ``I.Q.'' and ``French Kiss'' may slip into shock when they hear Maggie tell the story of her father's unnatural devotion to his aging dog.
While it's consistently amusing, the movie falls just short of blossoming into a genuinely twisted tale. Screenwriter Robert Gordon develops popsicle toes in the last act, slightly diluting his astringent humor.
Karyo, best known for playing stolid types in art-house hits such as ``La Femme Nikita'' (1991), displays a surprising gift for physical farce and manages the English language with finesse. ``Why would I have sex with a hamburger when I can make love to a steak?'' he tells a suspicious Linda, trying to assure her he's not unfaithful.
Sam may be a bit on the sappy side, but Broderick finds the guy's naive charm. His understated style blends nicely with Ryan's edgy chutzpah, and kudos to whoever put Ryan in those tie-dyed dresses: They definitely become her. Of course, the downside of Maggie's charisma is that it throws the story's logic out of whack, making one wonder why Sam is pining away for the wan, colorless Linda across the street when he's got someone much more exciting in the house.
James Sanford
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


Academics
Master of Science ‐ Nanochemistry
The University of Tehran, Tehran (Iran)
Thesis: Studies solid-state conversion in inorganic Nano supramoleculars via ion-exchange and absorption and desorption processes of guest or coordinated molecules
Advisers: Dr K. Akhbari
GPA: 16.83 (Out of 20)
Bachelor of Science ‐ Pure Chemistry
The University of Tehran, Tehran (Iran)
A four‐year degree where I’ve studied courses such as Organic Chemistry, Inorganic Chemistry Fundemntals of Biochemistry, Organic Spectroscopy, Analyctical Chemistry.
I’ve studied 134 unit in total and my bachelor project was Applications of carbon nanotubes in drug delivery.
Advisor: Dr M. Farnia
GPA: 14.63 (Out of 20)


---
layout: post
title: I should be so lucky
tags:
- Project Management
status: publish
type: post
published: true
meta: {}
---
BBC NEWS | Business | Complacency 'rife' in IT projects
Many European IT workers are not being held responsible for delivering projects lateIt's an interesting question. Should people be 'punished' if their projects, sometimes for reasons they cannot control, are late? What does punishment mean in this context? Sacking, being moved sideways, lack of promotion...
Powered by ScribeFire.


Perform Code Reviews¶
This is a general guideline for code reviewers. First of all, while it is great to add new features to a project, we must also be aware that each line of code we introduce also brings technical debt that we may have to eventually pay.
Open source code is maintained by a community with diverse backend, and it is even more important to bring clear, documented and maintainable code. Code reviews are shepherding process to spot potential problems, improve quality of the code. We should, however, not rely on code review process to get the code into a ready state. Contributors are encouraged to polish the code to a ready state before requesting reviews. This is especially expected for code owner and comitter candidates.
Here are some checklists for code reviews, it is also helpful reference for contributors
Hold the Highest Standard¶
The first rule for code reviewers is to always keep the highest standard, and do not approve code just to “be friendly”. Good, informative critics each other learn and prevents technical debt in early stages.
Ensure Test Coverage¶
Each new change of features should introduce test cases, bug fixes should include regression tests that prevent the problem from happening again.
Documentations are Mandatory¶
Documentation is usually a place we overlooked, new functions or change to a function should be directly updated in documents. A new feature is meaningless without documentation to make it accessible. See more at Write Document and Tutorials
Deliberate on User-facing API¶
A good, minimum and stable API is critical to the project’s life. A good API makes a huge difference. Always think very carefully about all the aspects including naming, arguments definitions and behavior. One good rule to check is to be consistent with existing well-known package’s APIs if the feature overlap. For example, tensor operation APIs should always be consistent with the numpy.
Minimum Dependency¶
Always be cautious in introducing dependencies. While it is important to reuse code and not reinventing the wheel, dependencies can increase burden of users in deployment. A good design principle only depends on the part when a user actually use it.
Ensure Readability¶
While it is hard to implement a new feature, it is even harder to make others understand and maintain the code you wrote. It is common for a PMC or committer to not being able to understand certain contributions. In such case, a reviewer should say “I don’t understand” and ask the contributor to clarify. We highly encourage code comments which explain the code logic along with the code.
Concise Implementation¶
Some basic principles applied here: favor vectorized array code over loops, is there existing API that solves the problem.
Document Lessons in Code Reviews¶
When you find there are some common lessons that can be summarized in the guideline, add it to the Code Guide and Tips. It is always good to refer to the guideline document when requesting changes, so the lessons can be shared to all the community.
Respect each other¶
The code reviewers and contributors are paying the most precious currencies in the world – time. We are volunteers in the community to spend the time to build good code, help each other, learn and have fun hacking.
Learn from other Code Reviews¶
There can be multiple reviewers reviewing the same changes. Many cases other reviewers may spot things you did not find. Try to learn from other code reviews, when possible, document these lessons.
Approve and Request Changes Explicitly¶
The contributor and code owner can request code reviews from multiple reviewers. Remember to approve changes when your comments are addressed in a code review. To do so – please click on changes tab in the pull request, then select approve, or comment on the code and click request changes. Code owner can decide if the code can be merged in case by case if some of the reviewers did not respond in time(e.g. a week) and existing reviews are sufficient.


{{ partial "header.html" . }}
As I finish projects they will be posted here to showcase them, as well my work.


{% load static %}
Questions? Enquiries? Suggestions? Existential doubts? Our teams are ready to hear about them! To get in touch with us, you can use the form below or write directly to<EMAIL_ADDRESS>+91<PHONE_NUMBER>


LIFE IS NOT A FINAL. IT IS DAILY POP QUIZZIS
Amazing quizzes :it helps every student to celebrate their achievements.
About us:
In Q-key, We provide a lot of quiz of questions of different categories.
Our focus
is to give students a platform where they can check their knowledge on a particular topic.
Timer
will provide a time limit in each question.


| Class | Description |
|---|---|
| AbstractDoFnTransform<InputT,InterT,OutputT> |
This is a base class for Beam DoFn Transforms.
|
| BroadcastVariableSideInputReader |
A sideinput reader that reads/writes side input values to context.
|
| CombineFnFinalTransform<K,A,O> |
Accumulates all of the partially accumulated KVs(Key, Accum) into KVs(Key, Output).
|
| CombineFnPartialTransform<K,I,A> |
Partially accumulates the given KVs(Key, Input) into KVs(Key, Accum).
|
| CreateViewTransform<I,O> |
This transforms emits materialized data for each window.
|
| DefaultOutputManager<OutputT> |
Default output emitter that uses outputCollector.
|
| DoFnTransform<InputT,OutputT> |
DoFn transform implementation.
|
| FlattenTransform<T> |
Flatten transform implementation.
|
| GroupByKeyAndWindowDoFnTransform<K,InputT> |
Groups elements according to key and window.
|
| GroupByKeyTransform<I> |
Group Beam KVs.
|
| LoopCompositeTransform<inputT extends org.apache.beam.sdk.values.PInput,outputT extends org.apache.beam.sdk.values.POutput> |
A composite transform for wrapping transforms inside a loop to create loop operators in the IR.
|
| WindowFnTransform<T,W extends org.apache.beam.sdk.transforms.windowing.BoundedWindow> |
Windowing transform implementation.
|
Copyright © 2019 The Apache Software Foundation. All rights reserved.


903. wp 14422-18.doc DDR IN THE HIGH COURT OF JUDICATURE AT BOMBAY CIVIL APPELLATE JURISDICTION WRIT PETITION NO. 14422 OF 2018 Shivram Minerals .. Petitioner Vs. Maharashtra Pollution Control Board & ors. .. Respondents ............ Mr. Kevic Setalwad, Senior Advocate I/b. Rajeev Talasikar for the petitioner. Mr. Jitendra Jagtap for respondent No.1 - Board. Ms. Nisha Mehra, AGP for State - respondent Nos. 2, 3 and 5 ............ CORAM : NARESH H. PATIL, CJ. & M.S. KARNIK, J. DATE : 18th DECEMBER, 2018 P.C. : The challenge in this Petition is to the impugned order passed by the respondent No.1- Board on 26/11/2018. Learned Senior Counsel appearing for the petitioner submits that the show cause notice dated 16/11/2018 issued by the respondent No.1-Board was received by the petitioner only on 3rd December, 2018. Learned Senior Counsel therefore submits that passing of the impugned order is ex-facie in breach of the 1/5 ::: Uploaded on - 20/12/2018 ::: Downloaded on - 25/12/2018 20:56:25 ::: 903. wp 14422-18.doc principles of natural justice. According to him, as the show cause notice is received after passing of the impugned order, neither the petitioner got an opportunity of filing reply to the show cause notice nor the petitioner was heard by the respondent No.1-Board as such serious prejudice is caused to the petitioner. On merits the petitioner has raised several issues. 2. Learned Counsel appearing for the respondent No.1 - Board submits that in The Air (Prevention and Control of Pollution) Act, 1981 (hereinafter referred to as "the Air Act" for short), the Appellate authority has been prescribed by the State Government under Section 31 ; whereas there is a statutory Appellate Forum available in The Water (Prevention and Control of Pollution) Act, 1974 (hereinafter referred to as "the Water Act" for short). In his submission, the petitioner has an alternate efficacious remedy which the petitioner may avail. Nonetheless, on instructions, he submits that the respondent No.1- Board is willing to grant an opportunity of hearing to the petitioner. 2/5 ::: Uploaded on - 20/12/2018 ::: Downloaded on - 25/12/2018 20:56:25 ::: 903. wp 14422-18.doc 3. We have perused record and the impugned order. There is no disputing the statement of petitioner that they have not been heard as the same is not contradicted by the other side. It is a settled principle of natural justice that the petitioner is required to be heard by the respondent No.1- Board before passing the impugned order. Based on this ground alone, we are of the opinion that the matter needs to be remanded back to the respondent No.1 - Board. 4. As is evident from the impugned order, the Board has exercised powers under Section 33A of the Water Act and Section 31-A of the Air Act. As against the order passed under Section 33A of the Water Act for the alleged violation, the aggrieved person has remedy of filing an Appeal to an Appellate Authority constituted by the State Government. In so far as the remedy prescribed under Section 33B of the Water Act is concerned, the remedy is to file an Appeal to National Green Tribunal. The respondent No.1 - Board thus exercises independent and distinct powers under the Water Act and the Air Act. 3/5 ::: Uploaded on - 20/12/2018 ::: Downloaded on - 25/12/2018 20:56:25 ::: 903. wp 14422-18.doc 5. Needless to mention that the respondent No.1- Board while exercising its powers under the Air Act or the Water Act is expected to refer to the specific violations alleged under the respective Acts separately and independently. The reasoning of the respondent No.1- Board would obviously be with reference to the specific violations under the said Acts. It is clarified that we have not expressed any opinion on merits. All issues and contentions are kept open. 6. In the facts of the case and considering the issue raised, we pass the following order. ORDER
(a) The impugned order dated 26/11/2018 shall be treated as show cause notice. The directions contained in the impugned order shall stand withdrawn.
(b) The petitioner shall be granted an opportunity to file its reply to the show cause notice.
4/5 ::: Uploaded on - 20/12/2018 ::: Downloaded on - 25/12/2018 20:56:25 :::903. wp 14422-18.doc
(c) The respondent No.1 - Board shall grant personal hearing to the petitioner.
(d) After hearing the parties, respondent No.1 -
Board would be entitled to pass final order on its own merits.
(e) In case the final order is adverse to the petitioner, the same shall not be implemented for a period of two weeks from the date of receipt of the said order by the petitioner.
7. Writ Petition is disposed of in the above terms.
(M.S. KARNIK, J.) ( CHIEF JUSTICE) 5/5 ::: Uploaded on - 20/12/2018 ::: Downloaded on - 25/12/2018 20:56:25 :::


What is face recognition? Or what is recognition? When you look at an apple fruit, your mind immediately tells you that this is an apple fruit. This process, your mind telling you that this is an apple fruit is recognition in simple words. So what is face recognition then? I am sure you have guessed it right.  Interestingly when you look at your friend or a picture of him you look at his face first before looking at anything else. Ever wondered why you do that? This is so that you can recognize him by looking at his face. Well, this is you doing face recognition.
But the real question is how does face recognition works? It is quite simple and intuitive. Take a real life example, when you meet someone first time in your life you don't recognize him, right? While he talks or shakes hands with you, you look at his face, eyes, nose, mouth, color and overall look. This is your mind learning or training for the face recognition of that person by gathering face data. Then he tells you that his name is Paulo. At this point your mind knows that the face data it just learned belongs to Paulo.  Next time when you will see Paulo or his face in a picture you will immediately recognize him. This is how face recognition work. The more you will meet Paulo, the more data your mind will collect about Paulo and especially his face and the better you will become at recognizing him.
Now the next question is how to code face recognition with OpenCV, after all this is the only reason why you are reading this article, right? OK then. You might say that our mind can do these things easily but to actually code them into a computer is difficult? Don't worry, it is not. Thanks to OpenCV, coding face recognition is as easier as it feels. The coding steps for face recognition are same as we discussed it in real life example above.
OpenCV comes equipped with built in face recognizer, all you have to do is feed it the face data. It's that simple and this how it will look once we are done coding it.
OpenCV has three built in face recognizers and thanks to OpenCV's clean coding, you can use any of them by just changing a single line of code. Below are the names of those face recognizers and their OpenCV calls.
cv2.face.createEigenFaceRecognizer()
cv2.face.createFisherFaceRecognizer()
cv2.face.createLBPHFaceRecognizer()
We have got three face recognizers but do you know which one to use and when? Or which one is better? I guess not. So why not go through a brief summary of each, what you say? I am assuming you said yes :) So let's dive into the theory of each.
This algorithm considers the fact that not all parts of a face are equally important and equally useful. When you look at some one you recognize him/her by his distinct features like eyes, nose, cheeks, forehead and how they vary with respect to each other. So you are actually focusing on the areas of maximum change (mathematically speaking, this change is variance) of the face. For example, from eyes to nose there is a significant change and same is the case from nose to mouth. When you look at multiple faces you compare them by looking at these parts of the faces because these parts are the most useful and important components of a face. Important because they catch the maximum change among faces, change that helps you differentiate one face from the other. This is exactly how EigenFaces face recognizer works.
EigenFaces face recognizer looks at all the training images of all the persons as a whole and try to extract the components which are important and useful (the components that catch the maximum variance/change) and discards the rest of the components. This way it not only extracts the important components from the training data but also saves memory by discarding the less important components. These important components it extracts are called principal components.
I will use the terms principal components, variance, areas of high change, useful features interchangably a they basically are same thing.
Below is an image showing the principal components extracted from a list of faces.
Principal Components
You can see that principal components actually represent faces and these faces are called eigen faces and hence the name of the algorithm.
So this is how EigenFaces face recognizer trains itself (by extracting principal components). Remember, it also keeps a record of which principal component belongs to which person. One thing to note in above image is that Eigenfaces algorithm also considers illumination as an important component.
Later during recognition, when you feed a new image to the algorithm, it repeats the same process on that image as well. It extracts the principal component from that new image and compares that component with the list of components it stored during training and finds the component with the best match and returns the person label associated with that best match component.
Easy peasy, right? Next one is even easier than this one.
This algorithm is an improved version of EigenFaces face recognizer. Eigenfaces face recognizer looks at all the training faces of all the persons at once and finds principal components from all of them combined. By capturing principal components from all of faces combined you are not focusing on the features that discriminate one person from the other but the features that represent all the faces of all the persons in the training data as a whole.
This approach has a drawback. For example, consider the illumination changes in following faces.
You know that the EigenFaces face recognizer also considers illumination as an important component, right? So imagine a scenario in which all the faces of one person has very high illuminiation changes (really dark or really light etc.). EigenFaces face recognizer will consider those illumination changes very useful features and may discard the features of the other persons' faces considering them less useful. Now the features EigenFaces has extracted represent just one person's facial features and not all the persons' facial features.
How to fix this? We can fix this by tunning EigenFaces face recognizer so that it extracts useful features from faces of each person separately instead of extracting useful features of all the faces combined. This way, even if one person has high illumination changes it will not affect the other persons features extraction process. This is exactly what FisherFaces face recognizer algorithm does.
Fisherfaces algorithm, instead of extracting useful features that represent all the faces of all the persons, it extracts useful features that discriminate one person from the others. This way features of one person do not dominate (considered more useful features) over the others and you have the features that discriminate one person from the others.
Below is an image of features extracted using Fisherfaces algorithm.
Fisher Faces
You can see that features extracted actually represent faces and these faces are called fisher faces and hence the name of the algorithm.
One thing to note here is that Fisherfaces face recognizer only prevents features of one person from dominating over features of the other persons but it still considers illumination changes as useful features. We know that illumination change is not a useful feature to extract as it is not part of the actual face. Then, wow to get rid of this illumination problem? This is where our next face recognizer comes in.
I wrote a detailed explaination on Local Binary Patterns Histograms in my previous article on face detection using local binary patterns histograms.
We know that Eigenfaces and Fisherfaces are both affected by light and in real life we can't guarantee perfect light conditions. LBPH face recognizer is an improvement to overcome this drawback.
Idea is to not look at the image as a whole instead find the local features of an image. LBPH alogrithm try to find the local structure of an image and it does that by comparing each pixel with its neighboring pixels.
Take a 3x3 window and move it one image, at each move (each local part of an image), compare the pixel at the center with its neighbor pixels. The neighbors with intensity value less than or equal to center pixel are denoted by 1 and others by 0. Then you read these 0/1 values under 3x3 window in a clockwise order and you will have a binary pattern like 11100011 and this pattern is local to a specific area of the image. You do this on whole image and you will have a list of local binary patterns.
LBP Labeling
Now you get why this algorithm has Local Binary Patterns in its name? Because you get a list of local binary patterns. Now you may be wondering, what about the histogram part of the LBPH? Well after you get a list of local binary patterns, you convert each binary pattern into a decimal number using binary to decimal conversion (as shown in above image) and then you make a histogram of all of those decimal values. A sample histogram looks like this.
Sample Histogram
I guess this answers the question about histogram part. So in the end you will have one histogram for each face image in the training data set. That means if there were 100 images in training data set then LBPH will extract 100 histograms after training and store them for later recognition. Remember, algorithm also keeps track of which histogram belongs to which person.
Later during recognition, when you will feed a new image to the recognizer for recognition it will generate a histogram for that new image, compare that histogram with the histograms it already has, find the best match histogram and return the person label associated with that best match histogram.
Below is a list of faces and their respective local binary patterns images. You can see that the LBP images are not affected by changes in light conditions.
LBP Faces
The theory part is over and now comes the coding part! Ready to dive into coding? Let's get into it then.
The Face Recognition process in this tutorial is divided into three steps.
To detect faces, I will use the code from my previous article on face detection. So if you have not read it, I encourage you to do so to understand how face detection works and its Python coding.
Before starting the actual coding we need to import the required modules for coding. So let's import them first.
#import OpenCV module
import cv2
#import os module for reading training data directories and paths
import os
#import numpy to convert python lists to numpy arrays as
#it is needed by OpenCV face recognizers
import numpy as np
The more images used in training the better. Normally a lot of images are used for training a face recognizer so that it can learn different looks of the same person, for example with glasses, without glasses, laughing, sad, happy, crying, with beard, without beard etc. To keep our tutorial simple we are going to use only 12 images for each person.
So our training data consists of total 2 persons with 12 images of each person. All training data is inside training-data
folder. training-data
folder contains one folder for each person and each folder is named with format sLabel (e.g. s1, s2)
where label is actually the integer label assigned to that person. For example folder named s1 means that this folder contains images for person 1. The directory structure tree for training data is as follows:
training-data
|-------------- s1
| |-- 1.jpg
| |-- ...
| |-- 12.jpg
|-------------- s2
| |-- 1.jpg
| |-- ...
| |-- 12.jpg
The test-data
folder contains images that we will use to test our face recognizer after it has been successfully trained.
As OpenCV face recognizer accepts labels as integers so we need to define a mapping between integer labels and persons actual names so below I am defining a mapping of persons integer labels and their respective names.
Note: As we have not assigned label 0
to any person so the mapping for label 0 is empty.
#there is no label 0 in our training data so subject name for index/label 0 is empty
subjects = ["", "Ramiz Raja", "Elvis Presley"]
You may be wondering why data preparation, right? Well, OpenCV face recognizer accepts data in a specific format. It accepts two vectors, one vector is of faces of all the persons and the second vector is of integer labels for each face so that when processing a face the face recognizer knows which person that particular face belongs too.
For example, if we had 2 persons and 2 images for each person.
PERSON-1 PERSON-2
img1 img1
img2 img2
Then the prepare data step will produce following face and label vectors.
FACES LABELS
person1_img1_face 1
person1_img2_face 1
person2_img1_face 2
person2_img2_face 2
Preparing data step can be further divided into following sub-steps.
s1, s2
. sLabel
where Label
is an integer representing the label we have assigned to that subject. So for example, folder name s1
means that the subject has label 1, s2 means subject label is 2 and so on. The label extracted in this step is assigned to each face detected in the next step. Did you read my last article on face detection? No? Then you better do so right now because to detect faces, I am going to use the code from my previous article on face detection. So if you have not read it, I encourage you to do so to understand how face detection works and its coding. Below is the same code.
#function to detect face using OpenCV
def detect_face(img):
#convert the test image to gray image as opencv face detector expects gray images
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#load OpenCV face detector, I am using LBP which is fast
#there is also a more accurate but slow Haar classifier
face_cascade = cv2.CascadeClassifier('opencv-files/lbpcascade_frontalface.xml')
#let's detect multiscale (some images may be closer to camera than others) images
#result is a list of faces
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=5);
#if no faces are detected then return original img
if (len(faces) == 0):
return None, None
#under the assumption that there will be only one face,
#extract the face area
(x, y, w, h) = faces[0]
#return only the face part of the image
return gray[y:y+w, x:x+h], faces[0]
I am using OpenCV's LBP face detector. On line 4, I convert the image to grayscale because most operations in OpenCV are performed in gray scale, then on line 8 I load LBP face detector using cv2.CascadeClassifier
class. After that on line 12 I use cv2.CascadeClassifier
class' detectMultiScale
method to detect all the faces in the image. on line 20, from detected faces I only pick the first face because in one image there will be only one face (under the assumption that there will be only one prominent face). As faces returned by detectMultiScale
method are actually rectangles (x, y, width, height) and not actual faces images so we have to extract face image area from the main image.
Now you have got a face detector and you know the 4 steps to prepare the data, so are you ready to code the prepare data step? Yes? So let's do it.
#this function will read all persons' training images, detect face from each image
#and will return two lists of exactly same size, one list
# of faces and another list of labels for each face
def prepare_training_data(data_folder_path):
#------STEP-1--------
#get the directories (one directory for each subject) in data folder
dirs = os.listdir(data_folder_path)
#list to hold all subject faces
faces = []
#list to hold labels for all subjects
labels = []
#let's go through each directory and read images within it
for dir_name in dirs:
#our subject directories start with letter 's' so
#ignore any non-relevant directories if any
if not dir_name.startswith("s"):
continue;
#------STEP-2--------
#extract label number of subject from dir_name
#format of dir name = slabel
#, so removing letter 's' from dir_name will give us label
label = int(dir_name.replace("s", ""))
#build path of directory containin images for current subject subject
#sample subject_dir_path = "training-data/s1"
subject_dir_path = data_folder_path + "/" + dir_name
#get the images names that are inside the given subject directory
subject_images_names = os.listdir(subject_dir_path)
#------STEP-3--------
#go through each image name, read image,
#detect face and add face to list of faces
for image_name in subject_images_names:
#ignore system files like .DS_Store
if image_name.startswith("."):
continue;
#build image path
#sample image path = training-data/s1/1.pgm
image_path = subject_dir_path + "/" + image_name
#read image
image = cv2.imread(image_path)
#display an image window to show the image
cv2.imshow("Training on image...", image)
cv2.waitKey(100)
#detect face
face, rect = detect_face(image)
#------STEP-4--------
#for the purpose of this tutorial
#we will ignore faces that are not detected
if face is not None:
#add face to list of faces
faces.append(face)
#add label for this face
labels.append(label)
cv2.destroyAllWindows()
cv2.waitKey(1)
cv2.destroyAllWindows()
return faces, labels
I have defined a function that takes the path, where training subjects' folders are stored, as parameter. This function follows the same 4 prepare data substeps mentioned above.
(step-1) On line 8 I am using os.listdir
method to read names of all folders stored on path passed to function as parameter. On line 10-13 I am defining labels and faces vectors.
(step-2) After that I traverse through all subjects' folder names and from each subject's folder name on line 27 I am extracting the label information. As folder names follow the sLabel
naming convention so removing the letter s
from folder name will give us the label assigned to that subject.
(step-3) On line 34, I read all the images names of of the current subject being traversed and on line 39-66 I traverse those images one by one. On line 53-54 I am using OpenCV's imshow(window_title, image)
along with OpenCV's waitKey(interval)
method to display the current image being traveresed. The waitKey(interval)
method pauses the code flow for the given interval (milliseconds), I am using it with 100ms interval so that we can view the image window for 100ms. On line 57, I detect face from the current image being traversed.
(step-4) On line 62-66, I add the detected face and label to their respective vectors.
But a function can't do anything unless we call it on some data that it has to prepare, right? Don't worry, I have got data for two faces. I am sure you will recognize at least one of them!
Let's call this function on images of these beautiful celebrities to prepare data for training of our Face Recognizer. Below is a simple code to do that.
#let's first prepare our training data
#data will be in two lists of same size
#one list will contain all the faces
#and other list will contain respective labels for each face
print("Preparing data...")
faces, labels = prepare_training_data("training-data")
print("Data prepared")
#print total faces and labels
print("Total faces: ", len(faces))
print("Total labels: ", len(labels))
This was probably the boring part, right? Don't worry, the fun stuff is coming up next. It's time to train our own face recognizer so that once trained it can recognize new faces of the persons it was trained on. Read? Ok then let's train our face recognizer.
As we know, OpenCV comes equipped with three face recognizers.
cv2.face.createEigenFaceRecognizer()
cv2.face.createFisherFaceRecognizer()
cv2.face.LBPHFisherFaceRecognizer()
I am going to use LBPH face recognizer but you can use any face recognizer of your choice. No matter which of the OpenCV's face recognizer you use the code will remain the same. You just have to change one line, the face recognizer initialization line given below.
#create our LBPH face recognizer
face_recognizer = cv2.face.createLBPHFaceRecognizer()
#or use EigenFaceRecognizer by replacing above line with
#face_recognizer = cv2.face.createEigenFaceRecognizer()
#or use FisherFaceRecognizer by replacing above line with
#face_recognizer = cv2.face.createFisherFaceRecognizer()
Now that we have initialized our face recognizer and we also have prepared our training data, it's time to train the face recognizer. We will do that by calling the train(faces-vector, labels-vector)
method of face recognizer.
#train our face recognizer of our training faces
face_recognizer.train(faces, np.array(labels))
Did you notice that instead of passing labels
vector directly to face recognizer I am first converting it to numpy array? This is because OpenCV expects labels vector to be a numpy
array.
Still not satisfied? Want to see some action? Next step is the real action, I promise!
Now comes my favorite part, the prediction part. This is where we actually get to see if our algorithm is actually recognizing our trained subjects's faces or not. We will take two test images of our celeberities, detect faces from each of them and then pass those faces to our trained face recognizer to see if it recognizes them.
Below are some utility functions that we will use for drawing bounding box (rectangle) around face and putting celeberity name near the face bounding box.
#function to draw rectangle on image
#according to given (x, y) coordinates and
#given width and heigh
def draw_rectangle(img, rect):
(x, y, w, h) = rect
cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2)
#function to draw text on give image starting from
#passed (x, y) coordinates.
def draw_text(img, text, x, y):
cv2.putText(img, text, (x, y), cv2.FONT_HERSHEY_PLAIN, 1.5, (0, 255, 0), 2)
First function draw_rectangle
draws a rectangle on image based on passed rectangle coordinates. It uses OpenCV's built in function cv2.rectangle(img, topLeftPoint, bottomRightPoint, rgbColor, lineWidth)
to draw rectangle. We will use it to draw a rectangle around the face detected in test image.
Second function draw_text
uses OpenCV's built in function cv2.putText(img, text, startPoint, font, fontSize, rgbColor, lineWidth)
to draw text on image.
Now that we have the drawing functions, we just need to call the face recognizer's predict(face)
method to test our face recognizer on test images. Following function does the prediction for us.
#this function recognizes the person in image passed
#and draws a rectangle around detected face with name of the
#subject
def predict(test_img):
#make a copy of the image as we don't want to chang original image
img = test_img.copy()
#detect face from the image
face, rect = detect_face(img)
#predict the image using our face recognizer
label= face_recognizer.predict(face)
#get name of respective label returned by face recognizer
label_text = subjects[label]
#draw a rectangle around face detected
draw_rectangle(img, rect)
#draw name of predicted person
draw_text(img, label_text, rect[0], rect[1]-5)
return img
predict(face)
method. This method will return a lableNow that we have the prediction function well defined, next step is to actually call this function on our test images and display those test images to see if our face recognizer correctly recognized them. So let's do it. This is what we have been waiting for.
print("Predicting images...")
#load test images
test_img1 = cv2.imread("test-data/test1.jpg")
test_img2 = cv2.imread("test-data/test2.jpg")
#perform a prediction
predicted_img1 = predict(test_img1)
predicted_img2 = predict(test_img2)
print("Prediction complete")
#display both images
cv2.imshow(subjects[1], predicted_img1)
cv2.imshow(subjects[2], predicted_img2)
cv2.waitKey(0)
cv2.destroyAllWindows()
wohooo! Is'nt it beautiful? Indeed, it is!
You can download the complete code and relevant files from this Github repo.
Face Recognition is a fascinating idea to work on and OpenCV has made it extremely simple and easy for us to code it. It takes just a few lines of code to have a fully working face recognition application and we can switch between all three face recognizers with a single line of code change. It's that simple.
Although EigenFaces, FisherFaces and LBPH face recognizers are good but there are even better ways to perform face recognition like using Histogram of Oriented Gradients (HOGs) and Neural Networks. So the more advanced face recognition algorithms are now a days implemented using a combination of OpenCV and Machine learning. I have plans to write some articles on those more advanced methods as well, so stay tuned!


To infinity, and beyond!
Pay attention to core
- Things will presumably change and improve?
- Config splits/exclusions in core?
- Config installer in core?
Pay attention to the ecosystem
- https://www.drupal.org/project/config_ignore_keys
- https://www.drupal.org/project/config_override
- https://www.drupal.org/project/config_actions
- https://www.drupal.org/project/config_templates
- https://www.drupal.org/project/config_update
- https://www.drupal.org/project/config_tools
- https://www.drupal.org/project/config_devel
- https://www.drupal.org/project/config_sync
- https://www.drupal.org/project/config_distro
- https://www.drupal.org/project/config_merge
- https://www.drupal.org/project/config_share
- https://www.drupal.org/project/config_actions_provider
- https://www.drupal.org/project/config_installer
Embrace devops and automation
- This is where configuration management really starts to shine
- Start simple and grow
- Better QA and even more fearless deploys
Embrace the system
- Single developers
- Small teams or huge teams
- Every site should probably using configuration management
- Develop and evolve your own best practices and workflows


Natural born Hacker. Uncertified Information Systems Security Professional. I do what I do best, I solve problems.
My Motto is, If you can't break it, you don't own it, If you don't own it than you are Powned!.
My offer: Strong analytical, problem-solving, computational, and communication skills. Extracurricular activities attest my good ethics and my excellent interpersonal skills.

There is this passage from the holy coran that I found inspiring:
Because of that We ordained for the Children of Israel: that whoever kills a person—unless it is for murder or corruption on earth—it is as if he killed the whole of mankind; and whoever saves it, it is as if he saved the whole of mankind. Our messengers came to them with clarifications, but even after that, many of them continue to commit excesses in the land.
مِنْ أَجْلِ ذَٰلِكَ كَتَبْنَا عَلَىٰ بَنِي إِسْرَائِيلَ أَنَّهُ مَن قَتَلَ نَفْسًا بِغَيْرِ نَفْسٍ أَوْ فَسَادٍ فِي الْأَرْضِ فَكَأَنَّمَا قَتَلَ النَّاسَ جَمِيعًا وَمَنْ أَحْيَاهَا فَكَأَنَّمَا أَحْيَا النَّاسَ جَمِيعًا ۚ وَلَقَدْ جَاءَتْهُمْ رُسُلُنَا بِالْبَيِّنَاتِ ثُمَّ إِنَّ كَثِيرًا مِّنْهُم بَعْدَ ذَٰلِكَ فِي الْأَرْضِ لَمُسْرِفُونَ
I've named my first child Jacob Israel for a reason.
You guessed it then, my mission in life to help save as much lives as possible, so help me God!
I am available 24/7 to help solve issues. Talk to me!


Poverty Impact by the Numbers
Select the services you need, the subscription timeframe (weekly/monthly), view your price, and get started! No commitments and no premiums. Get the flexibility you need for your dev lifecycle.
Get Started
Select Services
What do you need? Manual QA, Automatioin QA, don't know? We can help. We also have expertise in dev and monitoring. Choose the skill sets you need.
See moreSelect Timeframe
No long term commitments. Try it out for a week or a month. Change when you need. Use for as long as you need wihtout the risk!
See moreView Price
No hidden fees or surprises. See what your cost will be. Change whenever you need. We'll explain more over the setup call, before you'd be billed.
See moreGet Started
We'll schedule a setup call (still no commitment) to help you get going. We'll go through what you need, the tools you use, and help you get started!
See more


Report S03
Q1:Do you have any previous experience of client side JavaScript?
A1:No.
Q2: Can you compare and relate the JavaScript language to any other language you know?
A2: JavaScript ia a script language and Java is a Object-Oriented language. In java, we should identify int
, string
or something else. But in JavaScript, we only use var
, and the compiler will check the data type while runtime. The file extension of two languages are also differnt. JavaScript uses *.js, and Java uses *.class.
Q3: Describe how you worked with the coding exercise, what grade do you aim for and how did your code turn out to be?
A3: Firstly, I followed the teacher to finish the basic tasks. Then, I look through some pages about JavaScript to find some useful information about other tasks and try my best to finish them. I aim to get 5, however it seems to be a bit difficult.
Q4: What is your TIL for this course section?
A4: After this class, I know how to use fetch(), and how to use JavaScript to make picture dynamic.


Getting started guide
To setup deployment, follow these simple steps:
-
Create config file
touch dogpro.yml
-
Add configuration from config helper or examples
-
Commit `dogpro.yml` file
-
Add project to DOGPRO
-
Add inventory, you will be presented with public key, add it to deployment server
~/.ssh/authorized_keys
.
- Open "Commits" tab, select latest commit and press blue arrow to deploy, you should see modal window with deployment configuration