Formative Center for the Evaluation of Environmental Impacts on Fetal Development
EPA Grant Number: R834594Center: Formative Center for the Evaluation of Environmental Impacts on Fetal Development
Center Director: Boekelheide, Kim
Title: Formative Center for the Evaluation of Environmental Impacts on Fetal Development
Investigators: Boekelheide, Kim , Brown, Phil , De Paepe, Monique E , Gruppuso, Phillip , Kostadinov, Stephan , Phipps, Maureen , Thanos, Christopher
Current Investigators: Boekelheide, Kim , Brown, Phil , De Paepe, Monique E , Gruppuso, Phillip , Phipps, Maureen , Thanos, Christopher
Institution: Brown University , Thanos Scientific Consulting Group , Women & Infants Hospital of Rhode Island
Current Institution: Brown University , Women & Infants Hospital of Rhode Island
EPA Project Officer: Louie, Nica
Project Period: February 15, 2010 through February 14, 2014
Project Amount: $1,189,575
RFA: Children's Environmental Health and Disease Prevention Research Centers: Formative Centers (with NIEHS) (2009) RFA Text | Recipients Lists
Research Category: Children's Health , Health
Objective:
This Formative Center for the Evaluation of Environmental Impacts on Fetal Development focuses on correlating morphological and molecular biomarkers with exposures to common environmental pollutants and stressors. There are three projects that will examine dysregulation of tissue differentiation and epigenetic programming by environmental agents:
- Research Project 1 —Liver and the Metabolic Syndrome is guided by the hypothesis that alterations in the intrauterine environment induce epigenetic changes in the developing liver that predispose to metabolic syndrome in the adult human.
- Research Project 2 —Prostate and Endocrine Disruption is guided by the hypothesis that estrogenic endocrine disrupting chemical exposures produce aberrant differentiation in the prostate due to altered DNA methylation.
- Research Project 3 —Lung, Arsenic Exposure, and Tissue Remodeling is guided by the hypothesis that arsenic exposure of cells in the developing lung results in disrupted postglandular lung remodeling mediated by molecular and epigenetic alterations.
The Administrative Core, the Community Outreach and Translation Core and the Pediatric Health Specialist will ensure that the Formative Center is responsive to both clinical and societal concerns associated with environmental exposures that impact growth and development. Drawing from many Departments (Community Health, Obstetrics & Gynecology, Pathology & Lab Medicine, Pediatrics, and Sociology) our goal is to use our cross-disciplinary integration to understand and resolve the inherently complex problems generated by intrauterine environmental exposures that can lead to later life disease. We also will translate our discoveries into clinically relevant outcomes, and share with university, hospital, and public audiences both these new insights and more general education on environmental public health.
Journal Articles: 8 Displayed | Download in RIS Format
| Other center views: | All 13 publications | 8 publications in selected types | All 8 journal articles |
|---|
| Type | Citation | ||
|---|---|---|---|
|
|
Boekelheide K, Blumberg B, Chapin RE, Cote I, Graziano JH, Janesick A, Lane R, Lillycrop K, Myatt L, States JC, Thayer KA, Waalkes MP, Rogers JM. Predicting later-life outcomes of early-life exposures. Environmental Health Perspectives 2012;120(10):1353-1361. |
R834594 (Final) R834594C002 (Final) |
|
|
|
De Paepe ME, Chu S, Hall S, Heger NE, Thanos C, Mao Q. The human fetal lung xenograft: validation as model of microvascular remodeling in the postglandular lung. Pediatric Pulmonology 2012;47(12):1192-1203. |
R834594 (2012) R834594 (Final) R834594C003 (Final) |
Exit |
|
|
De Paepe ME, Chu S, Heger N, Hall S, Mao Q. Resilience of the human fetal lung following stillbirth: potential relevance for pulmonary regenerative medicine. Experimental Lung Research 2012;38(1):43-54. |
R834594 (2012) R834594 (Final) R834594C003 (Final) |
Exit Exit |
|
|
Heger NE, Hall SJ, Sandrof MA, McDonnell EV, Hensley JB, McDowell EN, Martin KA, Gaido KW, Johnson KJ, Boekelheide K. Human fetal testis xenografts are resistant to phthalate-induced endocrine disruption. Environmental Health Perspectives 2012;120(8):1137-1143. |
R834594 (Final) R834594C002 (Final) |
|
|
|
Panikkar B, Smith N, Brown P. Reflexive research ethics in fetal tissue xenotransplantation research. Accountability in Research 2012;19(6):344-369. |
R834594 (2012) R834594 (Final) |
Exit |
|
|
Saffarini CM, McDonnell EV, Amin A, Spade DJ, Huse SM, Kostadinov S, Hall SJ, Boekelheide K. Maturation of the developing human fetal prostate in a rodent xenograft model. The Prostate 2013;73(16):1761-1775. |
R834594 (2012) R834594 (Final) R834594C002 (Final) |
Exit |
|
|
Spade DJ, Hall SJ, Saffarini CM, Huse SM, McDonnell EV, Boekelheide K. Differential response to abiraterone acetate and di-n-butyl phthalate in an androgen-sensitive human fetal testis xenograft bioassay. Toxicological Sciences 2014;138(1):148-160. |
R834594 (Final) R834594C002 (Final) |
Exit Exit Exit |
|
|
Thompson MR, Boekelheide K. Multiple environmental chemical exposures to lead, mercury and polychlorinated biphenyls among childbearing-aged women (NHANES 1999-2004): body burden and risk factors. Environmental Research 2013;121:23-30. |
R834594 (Final) |
Exit Exit Exit |
Supplemental Keywords:
in utero exposure, mammalian, metals, bisphenol A, developmental biology, perinatal programming; environmental management, Scientific Discipline, Health, Risk Assessment, Biology, Risk Assessments, Health Risk Assessment, bioavailability, exposure assessment, biochemical research, intrauterine exposure, developmental effects, perinatal exposure, children's health, biological pathways, Health, Scientific Discipline, ENVIRONMENTAL MANAGEMENT, Health Risk Assessment, Risk Assessments, Biology, Risk Assessment, children's health, fetal exposure, biological pathways, bioavailability, developmental effects, perinatal exposure, exposure assessmentProgress and Final Reports:
2010 Progress Report2011 Progress Report
2012 Progress Report
Final Report
Subprojects under this Center: (EPA does not fund or establish subprojects; EPA awards and manages the overall grant for this center).
R834594C001 Liver and the Metabolic Syndrome
R834594C002 Prostate and Endocrine Disruption
R834594C003 Lung, Arsenic Exposure, and Tissue Remodeling


PERSONAL DETAILS
Serial Number
Name
Address
1
2
3
4
5
6
7
8
9
10
Make Upper Case
Make Lower Case
Show Original


This page shows automated results of the Orionids 2011, based on visual observations by volunteers astronomers collected through the report form of the International Meteor Organization (IMO). The information on this page is generated automatically; for scientific use please refer to manual analyses published in scientific journals (such as WGN). Send your feedback regarding this page to Geert Barentsen.
Page contents:
Page generated: 2011 December 12 at 14:15 UTC.
The graph below shows the ZHR (Zenithal Hourly Rate), which is the number of meteors an observer would see under a very dark sky with the radiant of the shower in zenith.
ZHRmax = 33 based on 2307 Orionids reported in 540 intervals, assuming population index r = 2.5
| Time (UTC) | Solarlon | nINT | nORI | ZHR | Particle density | |
|---|---|---|---|---|---|---|
| 2011-10-01 17:27 | 188.029 | 9 | 8 | 2 | ±1 | 4 / 109·km3 |
| 2011-10-03 18:47 | 190.051 | 8 | 11 | 4 | ±1 | 8 / 109·km3 |
| 2011-10-08 02:03 | 194.291 | 48 | 38 | 3 | ±0 | 6 / 109·km3 |
| 2011-10-09 03:03 | 195.319 | 8 | 3 | 2 | ±1 | 4 / 109·km3 |
| 2011-10-13 22:56 | 200.091 | 1 | 0 | 9 | ±9 | 19 / 109·km3 |
| 2011-10-17 18:12 | 203.860 | 7 | 14 | 10 | ±3 | 21 / 109·km3 |
| 2011-10-19 15:49 | 205.746 | 20 | 52 | 17 | ±2 | 36 / 109·km3 |
| 2011-10-21 02:07 | 207.166 | 20 | 85 | 24 | ±3 | 51 / 109·km3 |
| 2011-10-21 15:56 | 207.738 | 21 | 81 | 15 | ±2 | 32 / 109·km3 |
| 2011-10-21 23:50 | 208.066 | 107 | 416 | 21 | ±1 | 44 / 109·km3 |
| 2011-10-22 03:14 | 208.207 | 32 | 159 | 24 | ±2 | 51 / 109·km3 |
| 2011-10-22 08:13 | 208.414 | 16 | 93 | 33 | ±3 | 70 / 109·km3 |
| 2011-10-22 19:11 | 208.868 | 23 | 85 | 20 | ±2 | 42 / 109·km3 |
| 2011-10-23 00:43 | 209.098 | 91 | 561 | 26 | ±1 | 55 / 109·km3 |
| 2011-10-23 03:31 | 209.214 | 19 | 126 | 27 | ±2 | 57 / 109·km3 |
| 2011-10-23 09:41 | 209.470 | 16 | 141 | 27 | ±2 | 57 / 109·km3 |
| 2011-10-23 22:20 | 209.995 | 18 | 80 | 18 | ±2 | 38 / 109·km3 |
| 2011-10-24 02:48 | 210.180 | 24 | 151 | 19 | ±2 | 40 / 109·km3 |
| 2011-10-24 12:50 | 210.597 | 5 | 81 | 30 | ±3 | 63 / 109·km3 |
| 2011-10-25 13:28 | 211.619 | 10 | 63 | 15 | ±2 | 32 / 109·km3 |
| 2011-10-27 08:52 | 213.423 | 14 | 37 | 10 | ±2 | 21 / 109·km3 |
| 2011-10-29 21:09 | 215.932 | 8 | 6 | 2 | ±1 | 4 / 109·km3 |
| 2011-10-31 19:02 | 217.843 | 4 | 0 | 1 | ±1 | 2 / 109·km3 |
| 2011-11-03 00:00 | 220.051 | 6 | 7 | 2 | ±1 | 4 / 109·km3 |
| 2011-11-06 15:18 | 223.696 | 5 | 9 | 2 | ±1 | 4 / 109·km3 |
The reported intervals are automatically added together into the bins shown above, based on the number of meteors and the distribution of the intervals. For each bin, the following parameters are computed:
Data has been received from 71 observers in 23 countries. Thank you for your efforts!
Note: click on the map for an interactive version.
| Observer | Country | Teff | nORI |
|---|---|---|---|
| Ioan Agavriloaiei | Romania | 4.25h | 30 |
| Salvador Aguirre | Mexico | 2.1h | 8 |
| Alexandre Amorim | Brazil | 3.65h | 7 |
| Joanna Antosik | Poland | 3.17h | 18 |
| Rainer Arlt | Germany | 5.55h | 29 |
| Stela Arlt | Germany | 2.53h | 24 |
| Tom Axelsen | Denmark | 1.80h | 20 |
| Pierre Bader | Germany | 12.9h | 61 |
| Rafael Barrios | Venezuela | 0.86h | 2 |
| Felix Bettonvil | Netherlands | 1.25h | 1 |
| Suresh Bhattarai | Nepal | 1.00h | 19 |
| Jean-marie Biets | Belgium | 5.22h | 42 |
| Zsofia Biro | Hungary | 8.25h | 62 |
| Jens Briesemeister | Germany | 2.40h | 0 |
| Vladimir Burgic | Serbia | 1.33h | 1 |
| Mark Davis | United States | 2.00h | 8 |
| C B Devgun Space | India | 0.70h | 6 |
| Sietse Dijkstra | Netherlands | 16.14h | 138 |
| Frank Enzlein | Germany | 1.83h | 18 |
| Miroslav Frenchev | Bulgaria | 5.07h | 43 |
| Stefan Fuks | Serbia | 4.04h | 8 |
| Christoph Gerber | Germany | 10.15h | 30 |
| Sylvie Gorkova | Czech Republic | 4.50h | 21 |
| Borislav Gospodinov | Bulgaria | 5.62h | 7 |
| Wayne T Hally | United States | 7h | 15 |
| Kamil Hornoch | Czech Republic | 1.68h | 2 |
| Jelisaveta Ilic | Serbia | 2.85h | 4 |
| Károly Jónás | Hungary | 3.83h | 16 |
| Karoly Jonas | Hungary | 2.26h | 3 |
| Paul Jones | United States | 5.25h | 157 |
| Paul Jones | United States | 2.00h | 53 |
| Schultze Kai | Germany | 1.00h | 11 |
| Himanshu Karkhanis | India | 5.60h | 48 |
| Roman Kovalyk | Italy | 4.09h | 3 |
| Mariusz Lemiecha | Poland | 2.5h | 17 |
| Robert Lunsford | United States | 3.00h | 24 |
| Qiang Ma | China | 2.5h | 39 |
| Pierre Martin | Canada | 3.78h | 29 |
| Mikhail Maslov | Russia | 2.74h | 19 |
| Koen Miskotte | Netherlands | 17.03h | 146 |
| Sirko Molau | Germany | 9.4h | 134 |
| Maciej Myszkiewicz | Poland | 5.43h | 2 |
| Reena Oberoi | India | 4.36h | 16 |
| Sonal Patel | India | 6.19h | 35 |
| Jatin Rathod | India | 3.84h | 19 |
| Jurgen Rendtel | Germany | 16.92h | 126 |
| Clara Ricken | Germany | 2.68h | 8 |
| Jiangao Ruan | China | 4.08h | 9 |
| Christian Schmiel | Germany | 3.3h | 18 |
| Kai Schultze | Germany | 1.06h | 23 |
| Ulrich Sperberg | Germany | 5.77h | 58 |
| Christian Bartzsch Sternwarte Riesa | Germany | 2.00h | 5 |
| Wesley Stone | United States | 3.92h | 63 |
| Richard Taibi | United States | 6.78h | 38 |
| Israel Tejera Falcón | Spain | 0.51h | 5 |
| Csilla Tepliczky | Hungary | 2.26h | 1 |
| Istvan Tepliczky | Hungary | 1.46h | 4 |
| Rushikesh Tilak | India | 2.00h | 12 |
| Jakub Koukal | Czech Republic | 37.5h | 267 |
| Michel Vandeputte | Belgium | 17.25h | 171 |
| Branislav Savic | Serbia | 4.30h | 9 |
| Snezana Todorovic | Serbia | 3.40h | 8 |
| Yasuhiro Tonomura | Japan | 2.40h | 1 |
| Shigeo Uchiyama | Japan | 5.99h | 14 |
| Peter Van Leuteren | Netherlands | 6.68h | 73 |
| Jovan Vasiljevic | Serbia | 1.33h | 2 |
| Frank Waechter | Germany | 1.26h | 0 |
| Sabine Waechter | Germany | 1.23h | 0 |
| Nitin Walmiki | India | 3.86h | 16 |
| William Watson | United States | 2.63h | 13 |
| William Watson | United States | 3.83h | 32 |
| Roland Winkler | Germany | 7.73h | 11 |
| Oliver Wusk | Germany | 3.72h | 16 |
| Zhijian Xu | China | 2.55h | 5 |
| Alexandrina Yaneva | Bulgaria | 5.4h | 2 |
| Alexsandrina Yaneva | Bulgaria | 3.30h | 1 |
| Przemyslaw Zoladek | Poland | 3.17h | 18 |
Create your own analysis. The files below can be opened using Excel:
ori2011_rate.csv (number of meteors per interval per observer)
ori2011_magn.csv (number of meteors per magnitude bin per observer)
The information on this page may be distributed freely provided credit is given to the International Meteor Organization (IMO) and, when possible, to the individual observers. The computer facilities to generate this page are provided by ESA/RSSD and Armagh Observatory.
References:


Checkout using Embedded iFrame
Create order
To collect payment from a customer, you first need to create an order
with Juspay. Order encapsulates all the information that is required for a payment. An order
object to Juspay is similar to what a "shopping_cart" to an e-commerce website is.
Important parameters to be passed while creating the order:
- customer_id
- All the cards stored for
customer_id
will be rendered in the form
- All the cards stored for
- return_url
- The customer will be redirected to this url, once the payment is complete
- Make sure that this url is clean and starts with
http
/https
- The url must not contain any query parameters
Embedding the iFrame
Once you have create an order
and know the order_id
, the next step is to render the payment form. For doing this, include the following iFrame in your checkout page.
<iframe src="https://api.juspay.in/merchant/ipay?order_id=$order_id&merchant_id=$merchant_id"
width="630" height="400"
style="border: 1px solid #CCC;padding: 20px;height: auto;min-height: 300px;">
</iframe>
Please note:
- Substitute
$order_id
with theorder_id
that you created in previous step - Substitute
$merchant_id
with yourmerchant_id
Mobile optimized form
Pass an extra parameter to the URL for rendering mobile optimized form: &mobile=true
. Please see the code below:
<iframe src="https://api.juspay.in/merchant/ipay?order_id=$order_id&merchant_id=$merchant_id&mobile=true"
width="630" height="400"
style="border: 1px solid #CCC;padding: 20px;height: auto;min-height: 300px;">
</iframe>
This will render a mobile responsive form with all the functionalities included.
Note: The mobile optimized checkout experience will use the redirect mode to do the authentication.
PCI Compliance
iFrame based integration offers the easiest path to PCI Compliance. Since iFrame is as good as a separate browser window, your website is completely shielded away from getting any sensitive card information. You can become PCI Compliant by simply filling up the PCI DSS SAQ-A questionnaire.


Here's an overview of the
Folder List: The list of the folders where files are stored is displayed down the left hand side of the module. Clicking on a folder name displays the items within that folder in the File Window. Right clicking on a folder name opens a drop down menu of actions that can be performed by the user against that folder such as view properties and add subfolder.
Tag List: Clicking on the Tags button in the top left corner of the module displays the list of the tags that have been associated with files below. Clicking on a tag displays the related files in the File Window.
Toolbar: The toolbar displays the address of the current folder and allows users to create subfolders, and manage and upload files. Here's a complete list of the available tools:
Files Toolbar: This context sensitive toolbar only displays when one or more items in the file window is selected. Here's a complete list of the available tools:
File Window Title Bar: Displays the column names of the Files window. Clicking on a column name will sort the files by that column. A Select All check box located to the left of all columns names allows users to select all of the folders and files on the current page.
File Window: This window lists all of the subfolders and files within the selected folder. A Locked icon is displayed beside any file that is locked from editing, either because it is not yet published or is in the workflow process.
File Information: Located below the Files Window, this bar allows users to navigate to other pages of files, change the page size and view the total number of items in the current folder.
DAM - Evoq Content and Evoq Content Enterprise
DAM - DNN Platform


{% load static %} {% load crispy_forms_tags %}
If you have forgotten your password you can reset it here.


{% extends "modules/gci/base.html" %} {% comment %} Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. {% endcomment %} {% block stylesheets %} {{ block.super }} {% endblock stylesheets %} {% block page_content %} {% include "codein/_data_saved_message.html" %}


{% extends "base.html" %} {% set active_page = "index" %} {% block content %}
Step one: select an image containing the person face, preferably a front shot.
Step two: there is no second step :-)
Note: The submitted images are not going to be stored in any place, they are only used for generating the
predictions. You can be sure of this by checking the source code
of this project on GitHub.
Interested in how it works? Refer to the how it works section.


9 references to SyncObject
System.Management.Automation (9)
engine\remoting\client\Job.cs (9)
2866
lock (
SyncObject
)
2997
lock (this.
SyncObject
)
3135
lock (
SyncObject
)
3247
lock (
SyncObject
)
3450
lock (
SyncObject
)
3483
lock (
SyncObject
)
4239
lock (
SyncObject
)
4333
lock (
SyncObject
)
4384
lock (
SyncObject
)


Lab: Distribution and Trust
Difficulty: Intermediate
Time: Approximately 30 minutes
This lab focuses on understanding and securing image distribution. We’ll
start with a simple docker pull
and build up to using Docker Content Trust (DCT).
You will complete the following steps as part of this lab.
- Step 1 - Pulling images by tag
- Step 2 - Pulling images by digest
- Step 3 - Docker Content Trust
- Step 4 - Official Images
- Step 5 - Extra for experts
Prerequisites
You will need all of the following to complete this lab:
- A Docker Host running Docker 1.10 or higher (preferably Docker 1.12 or higher).
- This lab uses environment variables which can be clunky when working with
sudo
. Therefore none of the Docker commands in this particular lab are preceded withsudo
.
Step 1: Pulling images by tag
The most common and basic way to pull Docker images is by tag
. The is where you specify an image name followed by an alphanumeric tag. The image name and tag are separated by a colon :
. For example:
$ docker pull alpine:edge
This command will pull the Alpine image tagged as edge
. The corresponding image can be found here on Docker Store.
If no tag is specified, Docker will pull the image with the latest
tag.
-
Pull the Alpine image with the
edge
tag.$ docker pull alpine:edge edge: Pulling from library/alpine e587fa4f6e1f: Pull complete Digest: sha256:e5ab6f0941eb01c41595d35856f16215021a941e9893501d632ed4c0ee4e53a6 Status: Downloaded newer image for alpine:edge
-
Confirm that the pull was successful.
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE alpine edge 3fc33d6d5e74 4 weeks ago 4.799 MB
-
Run a new container from the image and ping www.docker.com.
$ docker run --rm -it alpine:edge sh / # ping www.docker.com PING www.docker.com (<IP_ADDRESS>): 56 data bytes 64 bytes from <IP_ADDRESS>: seq=0 ttl=40 time=94.424 ms 64 bytes from <IP_ADDRESS>: seq=1 ttl=40 time=94.549 ms 64 bytes from <IP_ADDRESS>: seq=2 ttl=40 time=94.455 ms ^C
-
Exit the container.
In this step you pulled an image by tag and verified the pull by running a container from it.
Step 2: Pulling images by digest
Pulling by tag is easy and convenient. However, tags are mutable, and the same tag can refer to different images over time. For example, you can add updates to an image and push the updated image using the same tag as a previous version of the image. This scenario where a single tag points to multiple versions of an image can lead to bugs and vulnerabilities in your production environments.
This is why pulling by digest is such a powerful operation. Thanks to the content-addressable storage model used by Docker images, we can target pulls to specific image contents by pulling by digest. In this step you’ll see how to pull by digest.
- Pull the Alpine image with the
sha256:b7233dafbed64e3738630b69382a8b231726aa1014ccaabc1947c5308a8910a7
digest.
$ docker pull alpine@sha256:b7233dafbed64e3738630b69382a8b231726aa1014ccaabc1947c5308a8910a7
sha256:b7233dafbed64e3738630b69382a8b231726aa1014ccaabc1947c5308a8910a7: Pulling from library/alpine
6589332ef57c: Pull complete
Digest: sha256:b7233dafbed64e3738630b69382a8b231726aa1014ccaabc1947c5308a8910a7
Status: Downloaded newer image for alpine@sha256:b7233dafbed64e3738630b69382a8b231726aa1014ccaabc1947c5308a8910a7
-
Check that the pull succeeded.
$ docker images --digests alpine REPOSITORY TAG DIGEST IMAGE ID CREATED SIZE alpine edge <none> 3fc33d6d5e74 4 weeks ago 4.799 MB alpine <none> sha256:b7233dafbed64e3738630b69382a8b231726aa1014ccaabc1947c5308a8910a7 79c898d40088 7 weeks ago 4.799 MB
Notice that there are now two Alpine images in the Docker Hosts local repository. One lists the
edge
tag. The other lists<none>
as the tag along with theb7233daf...
digest.
The content addressable storage model used by Docker images means that any changes made to an image will result in a new digest for the updated image. This means it is not possible for two images with different contents to have the same digest.
In this step you learned how to pull images by digest and list image digests using the docker images
command. For more information about the docker pull
command, see the documentation.
Step 3: Docker Content Trust
It’s not easy to find the digest of a particular image tag. This is because it is computed from the hash of the image contents and stored in the image manifest. The image manifest is then stored in the Registry. This is why we needed a docker pull
by tag to find digests previously. It would also be desirable to have additional security guarantees such as image freshness.
Enter Docker Content Trust: a system currently in the Docker Engine that verifies the publisher of images without sacrificing usability. Docker Content Trust implements The Update Framework (TUF), an NSF-funded research project succeeding Thandy of the Tor project. TUF uses a key hierarchy to ensure recoverable key compromise and robust freshness guarantees.
Under the hood, Docker Content Trust handles name resolution from IMAGE tags to IMAGE digests by signing its own metadata – when Content Trust is enabled, docker will verify the signatures and expiration dates in the metadata before rewriting a pull by tag command to a pull by digest.
In this step you will enable Docker Content Trust, sign images as you push them, and pull signed and unsigned images.
- Enable Docker Content Trust by setting the DOCKER_CONTENT_TRUST environment variable.
$ export DOCKER_CONTENT_TRUST=1
Note: If you are using
sudo
with your Docker commands, you will need to preceded the above command so that it looks like thissudo export DOCKER_CONTENT_TRUST=1
It is worth nothing that although Docker Content Trust is now enabled, all Docker commands remain the same. Docker Content Trust will work silently in the background.
-
Pull the
riyaz/dockercon:trust
signed image.$ docker pull riyaz/dockercon:trust Pull (1 of 1): riyaz/dockercon:trust@sha256:88a7163227a54bf0343aae9e7a4404fdcdcfef8cc777daf9686714f4376ede46 sha256:88a7163227a54bf0343aae9e7a4404fdcdcfef8cc777daf9686714f4376ede46: Pulling from riyaz/dockercon fae91920dcd4: Pull complete Digest: sha256:88a7163227a54bf0343aae9e7a4404fdcdcfef8cc777daf9686714f4376ede46 Status: Downloaded newer image for riyaz/dockercon@sha256:88a7163227a54bf0343aae9e7a4404fdcdcfef8cc777daf9686714f4376ede46 Tagging riyaz/dockercon@sha256:88a7163227a54bf0343aae9e7a4404fdcdcfef8cc777daf9686714f4376ede46 as riyaz/dockercon:trust
Look closely at the output of the
docker pull
command and take particular notice of the name translation - how the command is translated to the digest as shown below:Pull (1 of 1): riyaz/dockercon:trust@sha256:88a7163227a54bf0343aae9e7a4404fdcdcfef8cc777daf9686714f4376ede46
-
Pull and unsigned image.
$ docker pull riyaz/dockercon:untrusted
No trust data for untrusted
You cannot pull unsigned images with Docker Content Trust enabled. Once Docker Content Trust is enabled you can only pull, run, or build with trusted images.
- Tag and push your own signed image with Docker Content Trust.
$ docker tag alpine:edge <your-docker-id>/alpine:trusted
$ docker push <your-docker-id>/alpine:trusted
The push refers to a repository [docker.io/nigelpoulton/alpine]
4fe15f8d0ae6: Pushed
trusted: digest: sha256:dc89ce8401da81f24f7ba3f0ab2914ed9013608bdba0b7e7e5d964817067dc06 size: 528
Signing and pushing trust metadata
You are about to create a new root signing key passphrase. This passphrase
will be used to protect the most sensitive key in your signing system. Please
choose a long, complex passphrase and be careful to keep the password and the
key file itself secure and backed up. It is highly recommended that you use a
password manager to generate the passphrase and keep it safe. There will be no way to recover this key. You can find the key in your config directory.
Enter passphrase for new root key with ID fef644e:
Repeat passphrase for new root key with ID fef644e:
Enter passphrase for new repository key with ID b4fd76d (docker.io/nigelpoulton/alpine):
Repeat passphrase for new repository key with ID b4fd76d (docker.io/nigelpoulton/alpine):
Finished initializing "docker.io/nigelpoulton/alpine"
Successfully signed "docker.io/nigelpoulton/alpine":trusted
This command will prompt you for passphrases. This is because Docker Content Trust is generating a hierarchy of keys with different signing roles. Each key is encrypted with a passphrase, and it is best practice is to provide different passphrases for each key.
The root key is the most important key in TUF as it can rotate any other key in the system. The root key should be kept offline, ideally in hardware crypto device. It is stored in ~/.docker/trust/private/root_keys
by default.
The tagging key is the only local key required to push new tags to an existing repo, and is stored in ~/.docker/trust/private/tuf_keys
by default.
Feel free to explore the ~/.docker/trust
directory to view the internal metadata and key information that Docker Content Trust generates.
-
Disable Docker Content Trust.
$ export DOCKER_CONTENT_TRUST=0
-
Pull the image you just pushed in the previous step.
$ docker pull <your-docker-id>/alpine:trusted trusted: Pulling from nigelpoulton/alpine Digest: sha256:dc89ce8401da81f24f7ba3f0ab2914ed9013608bdba0b7e7e5d964817067dc06 Status: Image is up to date for nigelpoulton/alpine:trusted
-
Enable Docker Content Trust.
$ export DOCKER_CONTENT_TRUST=1
-
Pull the same image again.
$ docker pull <your-docker-id>/alpine:trusted Pull (1 of 1): nigelpoulton/alpine:trusted@sha256:dc89ce8401da81f24f7ba3f0ab2914ed9013608bdba0b7e7e5d964817067dc06 sha256:dc89ce8401da81f24f7ba3f0ab2914ed9013608bdba0b7e7e5d964817067dc06: Pulling from nigelpoulton/alpine Digest: sha256:dc89ce8401da81f24f7ba3f0ab2914ed9013608bdba0b7e7e5d964817067dc06 Status: Downloaded newer image for nigelpoulton/alpine@sha256:dc89ce8401da81f24f7ba3f0ab2914ed9013608bdba0b7e7e5d964817067dc06 Tagging nigelpoulton/alpine@sha256:dc89ce8401da81f24f7ba3f0ab2914ed9013608bdba0b7e7e5d964817067dc06 as nigelpoulton/alpine:trusted
Take note of the difference between the pull of a signed image with Docker Content Trust enabled and disabled. With Docker Content Trust enabled the image pull is converted from a tagged image pull to a digest image pull.
In this step you have seen how to enable and disable Docker Content Trust. You have also seen how to sign images that you push. For more information about Docker Content Trust, see the documentation.
Step 4: Official images
All images in Docker Hub under the library
organization (currently viewable at: https://hub.docker.com/explore/)
are deemed “Official Images.” These images undergo a rigorous, open-source
review process to ensure they follow best practices. These best practices include signing, being lean, and having clearly written Dockerfiles. For these reasons, it is strongly recommended that you use official images whenever possible.
Official images can be pulled with just their name and tag. You do not have to precede the image name with library/
or any other repository name.
Step 5: Extra for Experts
Docker Content Trust is powered by Notary, an open-source TUF-client and server that can operate over arbitrary trusted collections of data. Notary has its own CLI with robust features such as the ability to rotate keys and remove trust data. In this step you will play with the Notary CLI and a local instance of the Notary server instead of the one deployed alongside Docker Hub.
- Get a notary client.
This can be done by downloading a binary directly from the releases page, or by cloning the notary repository into a valid Go repository structure (instructions at the end of the README) and building a client by running make binaries
. If you build the notary binary yourself, it will be placed in the bin
subdirectory within the notary git repo directory.
- Use the notary client to inspect the existing Alpine repository on Docker Hub.
$ notary -s https://notary.docker.io -d ~/.docker/trust list docker.io/library/alpine
NAME DIGEST SIZE (BYTES) ROLE
------------------------------------------------------------------------------------------------------
2.6 e9cec9aec697d8b9d450edd32860ecd363f2f3174c8338beb5f809422d182c63 1374 targets
2.7 9f08005dff552038f0ad2f46b8e65ff3d25641747d3912e3ea8da6785046561a 1374 targets
3.1 0796cca706c64170c29cfefbdd67f32e25dab2247fc31956c86773dae825800f 506 targets
3.2 9c6c40abb6a9180603068a413deca450ef13c381974b392a25af948ca87c3c14 506 targets
3.3 4fa633f4feff6a8f02acfc7424efd5cb3e76686ed3218abf4ca0fa4a2a358423 506 targets
3.4 3dcdb92d7432d56604d4545cbd324b14e647b313626d99b889d0626de158f73a 506 targets
edge e5ab6f0941eb01c41595d35856f16215021a941e9893501d632ed4c0ee4e53a6 506 targets
latest 3dcdb92d7432d56604d4545cbd324b14e647b313626d99b889d0626de158f73a 506 targets
Note that docker.io/
must be prepended to the image name for hub images. You should also try your own image you pushed to hub earlier!
- If you haven’t already, clone the Notary repository.
$ git clone https://github.com/docker/notary.git
Cloning into 'notary'...
remote: Counting objects: 17156, done.
remote: Compressing objects: 100% (26/26), done.
remote: Total 17156 (delta 5), reused 0 (delta 0), pack-reused 17129
Receiving objects: 100% (17156/17156), 27.07 MiB | 11.20 MiB/s, done.
Resolving deltas: 100% (9734/9734), done.
Checking connectivity... done.
-
Bring up a local notary server and signer.
You will need to run this command from inside the root folder of the notary repository.  -
Copy the config and certificate required to talk to your local Notary server.
$ mkdir -p ~/.notary && cp cmd/notary/config.json cmd/notary/root-ca.crt ~/.notary
-
Initialize a new trusted collection on your local server
$ notary init example.com/scripts
No root keys found. Generating a new root key...
You are about to create a new root signing key passphrase. This passphrase
will be used to protect the most sensitive key in your signing system. Please
choose a long, complex passphrase and be careful to keep the password and the
key file itself secure and backed up. It is highly recommended that you use a
password manager to generate the passphrase and keep it safe. There will be no
way to recover this key. You can find the key in your config directory.
Enter passphrase for new root key with ID 6f3b2d0:
Repeat passphrase for new root key with ID 6f3b2d0:
Enter passphrase for new targets key with ID 4bc290d (example.com/scripts):
Repeat passphrase for new targets key with ID 4bc290d (example.com/scripts):
You will be prompted for passphrases for the root and repository keys. This is for the same reasons as it was when you first pushed a repo with Docker Content Trust enabled.
- Add content to your trusted collection by running a sequence of
notary add example.com/scripts <NAME> <FILE>
,notary publish example.com/scripts
, andnotary list example.com/scripts
. This is a the sequence, in order:- Stages adding a target with
notary add
- Attempts to publish this target to the server with
notary publish
- Fetches and displays all trust data for example.com (verifying output as it is downloaded)
- Stages adding a target with
To remove targets, you can make use of the notary remove example.com/scripts <NAME>
command, followed by a notary publish example.com/scripts
.
Please note that this docker-compose
setup will persist notary’s database data in a volume; if you’d like to wipe out all state when running this lab running multiple times, you will have to remove this volume in addition to restarting the notary server, signer, and database containers.
Key rotation with the notary client
Let’s look at key rotation with Notary.
In the event of key-compromise, it’s a simple procedure to rotate keys with notary. Simply determine which key you wish to rotate, and run notary key rotate
.
-
List all of the keys in your notary repository
$ notary key list ROLE GUN KEY ID LOCATION ------------------------------------------------------------------------------------------------------------------------------------ root 6f3b2d0269343cafafca59f05d738389a27c9408cbe1345188325913620a6b80 file (/root/.notary/private) snapshot example.com/scripts 7c9487f2d2a42d1f91020285483d15b5d85d8e22799c64141c5cafc87997795c file (/root/.notary/private) targets example.com/scripts 4bc290d883fa33020a528abbce61accf78745f4f28be243f3cc9f44f11297258 file (/root/.notary/private)
-
Rotate a key.
In this example we’ll rotate the
targets
key.$ notary key rotate example.com/scripts targets Enter passphrase for new targets key with ID a4413c0 (example.com/scripts): Repeat passphrase for new targets key with ID a4413c0 (example.com/scripts): Enter passphrase for root key with ID 6f3b2d0: Enter passphrase for snapshot key with ID 7c9487f (example.com/scripts):
-
Confirm that the targets key ID has changed.
$ notary key list ROLE GUN KEY ID LOCATION ------------------------------------------------------------------------------------------------------------------------------------ root 6f3b2d0269343cafafca59f05d738389a27c9408cbe1345188325913620a6b80 file (/root/.notary/private) snapshot example.com/scripts 7c9487f2d2a42d1f91020285483d15b5d85d8e22799c64141c5cafc87997795c file (/root/.notary/private) targets example.com/scripts a4413c080788746ac34db2077a0bcc41be84dfce34d8a7d2d55942d125e4c69f file (/root/.notary/private)
For more information about keys, please see the this section of the Notary Service Architecture documentation
Role delegation with notary
Now we’ll explore delegation roles in notary. Delegation roles are a subset of the targets role, and are ideal for assigning signing privileges to collaborators and CI systems because no private key sharing is required. Here’s a demo of setting up delegation roles to illustrate the steps below:
-
Rotate the snapshot key to the server.
This is done by default when creating new Content Trust repositories in Docker 1.10+.
$ notary key rotate example.com/scripts snapshot -r Enter passphrase for root key with ID 6f3b2d0:
This is so that delegation roles will only require their own delegation’s private key to publish to trusted collections.
-
Have your delegate generate an x509 certificate + private key pair with openssl - instructions here.
-
Retrieve their certificate,
delegation.crt
. -
Add their delegation role.
$ notary delegation add example.com/scripts targets/releases delegation.crt --all-paths
This command will allow the collaborator to push any target (from
--all-paths
) to thetargets/releases
role if they can sign with their private keydelegation.key
in order to produce a valid signature that can be verified bydelegation.crt
’s public key material.Be aware that this commmand only stages the delegation role addition.
-
Publish the addition of the delegation role
$ notary publish example.com/scripts
-
Check that the delegation role was added.
$ notary delegation list example.com/scripts
Your collaborator should now be able to publish content (docker push
) with Docker Content Trust enabled, or with a notary add example.com/scripts <NAME> <FILE> -r targets/releases
. You can verify their pushes by running a notary list example.com/scripts -r targets/releases
You can add additional keys to the same role with additional delegation add
commands, like so: notary delegation add example.com/scripts targets/releases delegation2.crt delegation3.crt
, followed by a publish
For more commands over delegation roles, please consult the notary advanced usage documentation.
Summary
Congratulations. You now know the advantages of image digests over image tags. You have also seen how to enable Docker Content Trust and push signed images. Finally you have seen how to perform some advanced tasks using the notary server and client.


14 Least squares14.1 OverviewThe least squares package fits a parametric model to a set of observed values by minimizing a cost function with a specific form. The fitting basically consists in finding the values for some parameters pk such that a cost function J = sum(wi(targeti - modeli)2) is minimized. The various (targeti - modeli(pk)) terms are called residuals. They represent the deviation between a set of target values targeti and theoretical values computed from models modeli depending on free parameters pk. The wi factors are weights. One classical use case is when the target values are experimental observations or measurements. Two engines devoted to least-squares problems are available. The first one is based on the Gauss-Newton method. The second one is the Levenberg-Marquardt method. 14.2 LeastSquaresBuilder and LeastSquaresFactoryIn order to solve a least-squares fitting problem, the user must provide the following elements:
The elements of the list above can be provided as an implementation of the LeastSquaresProblem interface. However, this is cumbersome to do directly, so some helper classes are available. The first helper is a mutable builder: LeastSquaresBuilder. The second helper is an utility factory: LeastSquaresFactory. The builder class is better suited when setting the various elements of the least squares problem is done progressively in different places in the user code. In this case, the user would create first an empty builder andconfigure it progressively by calling its methods (start, target, model, ...). Once the configuration is complete, calling the build method would create the least squares problem. The factory utility is better suited when the various elements of the least squares problem are all known at one place and the problem can be built in just one sweep, calling to one of the static LeastSquaresFactory.create method. 14.3 Model FunctionThe model function is used by the least squares engine to evaluate the model components modeli given some test parameters pk. It is therefore a multivariate function (it depends on the various pk) and it is vector-valued (it has several components modeli). There must be exactly one component modeli for each target (or observed) component targeti, otherwise some residuals to be squared and summed could not be computed. In order for the problem to be well defined, the number of parameters pk must be less than the number of components modeli. Failing to ensure this may lead to the engine throwing an exception as the underlying linear algebra operations may encounter singular matrices. It is not unusual to have a large number of components (several thousands) and only a dozen parameters. There are no limitations on these numbers, though. As the least squares engine needs to create Jacobians matrices for the model function, both its value and its derivatives with respect to the pk parameters must be available. There are two ways to provide this:
The point parameter of the value methods in the MultivariateVectorFunction, MultivariateMatrixFunction, or MultivariateJacobianFunction interfaces will contain the parameters pk. The values will be the model components modeli and the derivatives will be the derivatives of the model components with respect to the parameters dmodeli/dpk. There are no requirements on how to compute value and derivatives. The DerivativeStructure class may be useful to compute analytically derivatives in difficult cases, but this class is not mandated by the API which only expects the derivatives as a Jacobian matrix containing primitive double entries. One non-obvious feature provided by both the builder and the factory is lazy evaluation. This feature allows to defer calls to the model functions until they are really needed by the engine. This can save some calls for engines that evaluate the value and the Jacobians in different loops (this is the case for Levenberg-Marquardt). However, lazy evaluation is possible only if the model functions are themselves separated, i.e. it can be used only with the first alternative above. Setting up the lazyEvaluation flag to true in the builder or factory and setting up the model function as one MultivariateJacobianFunction instance at the same time will trigger an illegal state exception telling that the model function misses required functionality. 14.4 Parameters ValidationIn some cases, the model function requires parameters to lie within a specific domain. For example a parameter may be used in a square root and needs to be positive, or another parameter represents the sine of an angle and should be within -1 and +1, or several parameters may need to remain in the unit circle and the sum of their squares must be smaller than 1. The least square solvers available in Apache Commons Math currently don't allow to set up constraints on the parameters. This is a known missing feature. There are two ways to circumvent this. Both ways are achieved by setting up a ParameterValidator instance. The input of the value and jacobian model functions will always be the output of the parameter validator if one exists. One way to constrain parameters is to use a continuous mapping between the parameters that the least squares solver will handle and the real parameters of the mathematical model. Using mapping functions like logit and sigmoid, one can map a finite range to the infinite real line. Using mapping functions based on log and exp, one can map a semi-infinite range to the infinite real line. It is possible to use such a mapping so that the engine will always see unbounded parameters, whereas on the other side of the mapping the mathematical model will always see parameters mapped correctly to the expected range. Care must be taken with derivatives as one must remember that the parameters have been mapped. Care must also be taken with convergence status. This may be tricky. Another way to constrain parameters is to simply truncate the parameters back to the domain when one search point escapes from it and not care about derivatives. This works only if the solution is expected to be inside the domain and not at the boundary, as points out of the domain will only be temporary test points with a cost function higher than the real solution and will soon be dropped by the underlying engine. As a rule of thumb, these conditions are met only when the domain boundaries correspond to unrealistic values that will never be achieved (null distances, negative masses, ...) but they will not be met when the domain boundaries are more operational limits (a maximum weight that can be handled by a device, a minimum temperature that can be sustained by an instrument, ...). 14.5 TuningAmong the elements to be provided to the least squares problem builder or factory are some tuning parameters for the solver. The maximum number of iterations refers to the engine algorithm main loop, whereas the maximum number of iterations refers to the number of calls to the model method. Some algorithms (like Levenberg-Marquardt) have two embedded loops, with iteration number being incremented at outer loop level, but a new evaluation being done at each inner loop. In this case, the number of evaluations will be greater than the number of iterations. Other algorithms (like Gauss-Newton) have only one level of loops. In this case, the number of evaluations will equal to the number of iterations. In any case, the maximum numbers are really only intended as safeguard to prevent infinite loops, so the exact value of the limit is not important so it is common to select some almost arbitrary number much larger than the expected number of evaluations and use it for both maxIterations and maxEvaluations. As an example, if the least squares solver usually finds a solution in 50 iterations, setting a maximum value to 1000 is probably safe and prevents infinite loops. If the least squares solver needs several hundreds of evaluations, it would probably be safer to set the maximum value to 10000 or even 1000000 to avoid failures in slightly more demanding cases. Very fine tuning of these maximum numbers is often worthless, they are only intended as safeguards. Convergence checking is delegated to a dedicated interface from the optim package: ConvergenceChecker, parameterized with either the specific Evaluation class used for least squares problems or the general PointVectorValuePair. Each time convergence is checked, both the previous and the current evaluations of the least squares problem are provided, so the checker can compare them and decide whereas convergence has been reached or not. The predefined convergence checker implementations that can be useful for least squares fitting are:
14.6 Optimization EngineOnce the least squares problem has been created, using either the builder or the factory, it is passed to an optimization engine for solving. Two engines devoted to least-squares problems are available. The first one is based on the Gauss-Newton method. The second one is the Levenberg-Marquardt method. For both increased readability and in order to leverage possible future changes in the configuration, it is recommended to use the fluent-style API to build and configure the optimizers. This means creating a first temporary version of the optimizer with a default parameterless constructor, and then to set up the various configuration parameters using the available withXxx methods that all return a new optimizer instance. Only the final fully configured instance is used. As an example, setting up a Levenberg-Marquardt with all configuration set to default except the cost relative tolerance and parameter relative tolerance would be done as follows: LeastSquaresOptimizer optimizer = new LevenbergMarquardtOptimizer(). withCostRelativeTolerance(1.0e-12). withParameterRelativeTolerance(1.0e-12); As another example, setting up a Gauss-Newton optimizer and forcing the decomposition to SVD (the default is QR decomposition) would be done as follows: LeastSquaresOptimizer optimizer = new GaussNewtonOptimizer(). withwithDecomposition(GaussNewtonOptimizer.Decomposition.QR); 14.7 SolvingSolving the least squares problem is done by calling the optimize method of the optimizer and passing the least squares problem as the single parameter: LeastSquaresOptimizer.Optimum optimum = optimizer.optimize(leastSquaresProblem); The LeastSquaresOptimizer.Optimum class is a specialized Evaluation with additional methods te retrieve the number of evaluations and number of iterations performed. The most important methods are inherited from the Evaluation class and correspond to the point (i.e. the parameters), cost, Jacobian, RMS, covariance ... 14.8 ExampleThe following simple example shows how to find the center of a circle of known radius to to best fit observed 2D points. It is a simplified version of one of the JUnit test cases. In the complete test case, both the circle center and its radius are fitted, here the radius is fixed. final double radius = 70.0; final Vector2D[] observedPoints = new Vector2D[] { new Vector2D( 30.0, 68.0), new Vector2D( 50.0, -6.0), new Vector2D(110.0, -20.0), new Vector2D( 35.0, 15.0), new Vector2D( 45.0, 97.0) }; // the model function components are the distances to current estimated center, // they should be as close as possible to the specified radius MultivariateJacobianFunction distancesToCurrentCenter = new MultivariateJacobianFunction() { public Pair<RealVector, RealMatrix> value(final RealVector point) { Vector2D center = new Vector2D(point.getEntry(0), point.getEntry(1)); RealVector value = new ArrayRealVector(observedPoints.length); RealMatrix jacobian = new Array2DRowRealMatrix(observedPoints.length, 2); for (int i = 0; i < observedPoints.length; ++i) { Vector2D o = observedPoints[i]; double modelI = Vector2D.distance(o, center); value.setEntry(i, modelI); // derivative with respect to p0 = x center jacobian.setEntry(i, 0, (center.getX() - o.getX()) / modelI); // derivative with respect to p1 = y center jacobian.setEntry(i, 1, (center.getX() - o.getX()) / modelI); } return new Pair<RealVector, RealMatrix>(value, jacobian); } }; // the target is to have all points at the specified radius from the center double[] prescribedDistances = new double[observedPoints.length]; Arrays.fill(prescribedDistances, radius); // least squares problem to solve : modeled radius should be close to target radius LeastSquaresProblem problem = new LeastSquaresBuilder(). start(new double[] { 100.0, 50.0 }). model(distancesToCurrentCenter). target(prescribedDistances). lazyEvaluation(false). maxEvaluations(1000). maxIterations(1000). build(); LeastSquaresOptimizer.Optimum optimum = new LevenbergMarquardtOptimizer().optimize(problem); Vector2D fittedCenter = new Vector2D(optimum.getPoint().getEntry(0), optimum.getPoint().getEntry(1)); System.out.println("fitted center: " + fittedCenter.getX() + " " + fittedCenter.getY()); System.out.println("RMS: " + optimum.getRMS()); System.out.println("evaluations: " + optimum.getEvaluations()); System.out.println("iterations: " + optimum.getIterations()); |


---
layout: post
title: Portuguese troops
date: '2013-04-10T03:21:00+02:00'
categories:
- Storyboards
- Atoleiros Battle
picture_url: https://film-Storyboards.tumblr.com/post/47608408695/portuguese-troops-leaving-besieged-lisbon-lead-by
---
Portuguese troops leaving besieged Lisbon lead by Nuno Álvares Pereira.


|
According to the WSGI specification, all WSGI applications must be python callable objects, taking a defined parameter list. Application callables can be python functions, class instances with a __call__() method, or indeed any callable object.
There are two different mechanisms by which you can specify application callable objects to modjy. They are
Each of these mechanisms is described below
This mechanism uses a single string which specifies an importable name, which when imported should deliver a python callable object. As described above, this can be any python callable. The importable name is specified as a single string. However, there are some small variations on how that string is specified, depending on the nature of the callable.
A - The importable name mechanism and reloading
Reloading is not supported with the importable name mechanism. When the importable name mechanism is used, the value of the reload_on_mod parameter is ignored.
B - The importable name mechanism and caching
Caching means that the same application callable object will be re-used repeatedly, to save object creation overhead. You have the choice of whether or not to enable caching using the cache_callables parameter, described in the modjy configuration reference.
If caching is disabled when using the importable name mechanism, this means that a new application object will be created for every new request, when appropriate. When the application is a simple callable, as described above, then caching has no meaning, since there is no instance to be re-used. When the application is an instantiable, as described above, then new instances will be created for every request.
If caching is enabled and the application callable is a class instance, then the same instance will be reused for every single request.
An alternative mechanism for locating an application callable is to specify the full path to an application file, and the name of an application callable within that file. The full path is specified using a combination of a directory name and a filename. In order to locate WSGI application callables with this mechanism, modjy needs three pieces of information.
A - The application directory
Firstly, you need to specify the name of a directory containing the python file containing the source code for the application. Notes for this parameter include
B - The application filename
Once it has located the application directory, modjy then looks for an application source file. Modjy uses the same filename for all application source files. The default value for this filename is application.py. You can change this value by setting the modjy configuration variable app_filename.
C - The callable object name
Lastly, having loaded and executed the application source file in response to a request, modjy needs to find a python callable object within the resulting python namespace. There are two different ways to set the name of the callable used for a request. They are
Now modjy knows the pathname and callable name for the application. It now needs to decide whether it needs to load and compile the application source code, to find a definition of the application object, or whether it already has a usable instance of the application object in its cache.
D - The application object cache
With the directory/file/callable mechanism, you can configure modjy to cache application objects for reuse for multiple requests. Application objects are stored in a cache, keyed under (pathname, callablename). If a request arrives which maps to an application object that is in the cache, then the cached object will be reused. Thus (unless the source file has been modified and reload_on_mod is true) the application source file will not be reloaded and recompiled.
Conversely, if caching is disabled, this means that a fresh application object will be created for every new request. This will have the effect of causing the reloading and recompilation of the application source file for every request, which may be less efficient than you would like. So use this option carefully.
Lastly, note that the cache_callables parameter has implications for the wsgi.run_once environment variable. Therefore, when caching is disabled, modjy sets the value of wsgi.run_once to true (thus essentially making cache disablement almost equivalent to running as a CGI script).
E - Reloading source on modification
With the directory/file/callable mechanism, you can configure modjy to reload application objects when their containing source file has been modified. See under reload_on_mod in the Configuration reference for more information.
Obviously, this parameter only takes effect when caching is enabled. Disabled caching means that the application source code is reloaded and recompiled for every request. If reload_on_mod is enabled, then cached objects will only be discarded when their containing source file has been modified. This is obviously a useful facility during a testing/debugging cycle. Also obviously, checking the access time on application source files comes at a small but finite resource cost for every single request, so you may want to disable it in production scenarios.
F - Multi-threading
You can configure modjy to run your application objects in either multi-threaded or single-threaded mode. See under multithread in the Configuration reference for more information.


Lynus Hung
Analyst
An ardent problem-solver, a natural storyteller, an avid writer, and a data journalist at heart, the underlying foundation of every aspect of Lynus’s personality is her profound desire to find answers within data. With her strong background in data analytics, Lynus is devoted to helping us extract insights and craft creative and innovative strategies for our clients.
While not working, you'll find Lynus enjoying nature or with a mystery novel, sipping a hot cup of dark chocolate. She also enjoys some occasional "travel therapy".


is how everything starts. it’s the name of all documents before they become anything.
that’s also me. just a young product designer desperately trying to make a name for myself.
that’s also us. just a group of young designers and developers supporting, lifting each other to become the best of what we can be. both as designers / developers and people.
if that’s also you, come join us.


|
0.9.9 API documenation
|
Typedefs | |
| typedef mat< 2, 2, double, highp > | highp_dmat2 |
| typedef mat< 2, 2, double, highp > | highp_dmat2x2 |
| typedef mat< 2, 3, double, highp > | highp_dmat2x3 |
| typedef mat< 2, 4, double, highp > | highp_dmat2x4 |
| typedef mat< 3, 3, double, highp > | highp_dmat3 |
| typedef mat< 3, 2, double, highp > | highp_dmat3x2 |
| typedef mat< 3, 3, double, highp > | highp_dmat3x3 |
| typedef mat< 3, 4, double, highp > | highp_dmat3x4 |
| typedef mat< 4, 4, double, highp > | highp_dmat4 |
| typedef mat< 4, 2, double, highp > | highp_dmat4x2 |
| typedef mat< 4, 3, double, highp > | highp_dmat4x3 |
| typedef mat< 4, 4, double, highp > | highp_dmat4x4 |
| typedef mat< 2, 2, float, highp > | highp_mat2 |
| typedef mat< 2, 2, float, highp > | highp_mat2x2 |
| typedef mat< 2, 3, float, highp > | highp_mat2x3 |
| typedef mat< 2, 4, float, highp > | highp_mat2x4 |
| typedef mat< 3, 3, float, highp > | highp_mat3 |
| typedef mat< 3, 2, float, highp > | highp_mat3x2 |
| typedef mat< 3, 3, float, highp > | highp_mat3x3 |
| typedef mat< 3, 4, float, highp > | highp_mat3x4 |
| typedef mat< 4, 4, float, highp > | highp_mat4 |
| typedef mat< 4, 2, float, highp > | highp_mat4x2 |
| typedef mat< 4, 3, float, highp > | highp_mat4x3 |
| typedef mat< 4, 4, float, highp > | highp_mat4x4 |
| typedef mat< 2, 2, double, lowp > | lowp_dmat2 |
| typedef mat< 2, 2, double, lowp > | lowp_dmat2x2 |
| typedef mat< 2, 3, double, lowp > | lowp_dmat2x3 |
| typedef mat< 2, 4, double, lowp > | lowp_dmat2x4 |
| typedef mat< 3, 3, double, lowp > | lowp_dmat3 |
| typedef mat< 3, 2, double, lowp > | lowp_dmat3x2 |
| typedef mat< 3, 3, double, lowp > | lowp_dmat3x3 |
| typedef mat< 3, 4, double, lowp > | lowp_dmat3x4 |
| typedef mat< 4, 4, double, lowp > | lowp_dmat4 |
| typedef mat< 4, 2, double, lowp > | lowp_dmat4x2 |
| typedef mat< 4, 3, double, lowp > | lowp_dmat4x3 |
| typedef mat< 4, 4, double, lowp > | lowp_dmat4x4 |
| typedef mat< 2, 2, float, lowp > | lowp_mat2 |
| typedef mat< 2, 2, float, lowp > | lowp_mat2x2 |
| typedef mat< 2, 3, float, lowp > | lowp_mat2x3 |
| typedef mat< 2, 4, float, lowp > | lowp_mat2x4 |
| typedef mat< 3, 3, float, lowp > | lowp_mat3 |
| typedef mat< 3, 2, float, lowp > | lowp_mat3x2 |
| typedef mat< 3, 3, float, lowp > | lowp_mat3x3 |
| typedef mat< 3, 4, float, lowp > | lowp_mat3x4 |
| typedef mat< 4, 4, float, lowp > | lowp_mat4 |
| typedef mat< 4, 2, float, lowp > | lowp_mat4x2 |
| typedef mat< 4, 3, float, lowp > | lowp_mat4x3 |
| typedef mat< 4, 4, float, lowp > | lowp_mat4x4 |
| typedef mat< 2, 2, double, mediump > | mediump_dmat2 |
| typedef mat< 2, 2, double, mediump > | mediump_dmat2x2 |
| typedef mat< 2, 3, double, mediump > | mediump_dmat2x3 |
| typedef mat< 2, 4, double, mediump > | mediump_dmat2x4 |
| typedef mat< 3, 3, double, mediump > | mediump_dmat3 |
| typedef mat< 3, 2, double, mediump > | mediump_dmat3x2 |
| typedef mat< 3, 3, double, mediump > | mediump_dmat3x3 |
| typedef mat< 3, 4, double, mediump > | mediump_dmat3x4 |
| typedef mat< 4, 4, double, mediump > | mediump_dmat4 |
| typedef mat< 4, 2, double, mediump > | mediump_dmat4x2 |
| typedef mat< 4, 3, double, mediump > | mediump_dmat4x3 |
| typedef mat< 4, 4, double, mediump > | mediump_dmat4x4 |
| typedef mat< 2, 2, float, mediump > | mediump_mat2 |
| typedef mat< 2, 2, float, mediump > | mediump_mat2x2 |
| typedef mat< 2, 3, float, mediump > | mediump_mat2x3 |
| typedef mat< 2, 4, float, mediump > | mediump_mat2x4 |
| typedef mat< 3, 3, float, mediump > | mediump_mat3 |
| typedef mat< 3, 2, float, mediump > | mediump_mat3x2 |
| typedef mat< 3, 3, float, mediump > | mediump_mat3x3 |
| typedef mat< 3, 4, float, mediump > | mediump_mat3x4 |
| typedef mat< 4, 4, float, mediump > | mediump_mat4 |
| typedef mat< 4, 2, float, mediump > | mediump_mat4x2 |
| typedef mat< 4, 3, float, mediump > | mediump_mat4x3 |
| typedef mat< 4, 4, float, mediump > | mediump_mat4x4 |
| typedef mat< 2, 2, f64, highp > highp_dmat2 |
2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
Definition at line 28 of file matrix_double2x2_precision.hpp.
| typedef mat< 2, 2, double, highp > highp_dmat2x2 |
2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
Definition at line 46 of file matrix_double2x2_precision.hpp.
| typedef mat< 2, 3, double, highp > highp_dmat2x3 |
2 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
Definition at line 28 of file matrix_double2x3_precision.hpp.
| typedef mat< 2, 4, double, highp > highp_dmat2x4 |
2 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
Definition at line 28 of file matrix_double2x4_precision.hpp.
| typedef mat< 3, 3, f64, highp > highp_dmat3 |
3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
Definition at line 28 of file matrix_double3x3_precision.hpp.
| typedef mat< 3, 2, double, highp > highp_dmat3x2 |
3 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
Definition at line 28 of file matrix_double3x2_precision.hpp.
| typedef mat< 3, 3, double, highp > highp_dmat3x3 |
3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
Definition at line 46 of file matrix_double3x3_precision.hpp.
| typedef mat< 3, 4, double, highp > highp_dmat3x4 |
3 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
Definition at line 28 of file matrix_double3x4_precision.hpp.
| typedef mat< 4, 4, f64, highp > highp_dmat4 |
4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
Definition at line 28 of file matrix_double4x4_precision.hpp.
| typedef mat< 4, 2, double, highp > highp_dmat4x2 |
4 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
Definition at line 28 of file matrix_double4x2_precision.hpp.
| typedef mat< 4, 3, double, highp > highp_dmat4x3 |
4 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
Definition at line 28 of file matrix_double4x3_precision.hpp.
| typedef mat< 4, 4, double, highp > highp_dmat4x4 |
4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
Definition at line 46 of file matrix_double4x4_precision.hpp.
| typedef mat< 2, 2, f32, highp > highp_mat2 |
2 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
Definition at line 28 of file matrix_float2x2_precision.hpp.
| typedef mat< 2, 2, f32, highp > highp_mat2x2 |
2 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
Definition at line 46 of file matrix_float2x2_precision.hpp.
| typedef mat< 2, 3, f32, highp > highp_mat2x3 |
2 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
Definition at line 28 of file matrix_float2x3_precision.hpp.
| typedef mat< 2, 4, f32, highp > highp_mat2x4 |
2 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
Definition at line 28 of file matrix_float2x4_precision.hpp.
| typedef mat< 3, 3, f32, highp > highp_mat3 |
3 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
Definition at line 28 of file matrix_float3x3_precision.hpp.
| typedef mat< 3, 2, f32, highp > highp_mat3x2 |
3 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
Definition at line 28 of file matrix_float3x2_precision.hpp.
| typedef mat< 3, 3, f32, highp > highp_mat3x3 |
3 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
Definition at line 46 of file matrix_float3x3_precision.hpp.
| typedef mat< 3, 4, f32, highp > highp_mat3x4 |
3 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
Definition at line 28 of file matrix_float3x4_precision.hpp.
| typedef mat< 4, 4, f32, highp > highp_mat4 |
4 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
Definition at line 28 of file matrix_float4x4_precision.hpp.
| typedef mat< 4, 2, f32, highp > highp_mat4x2 |
4 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
Definition at line 28 of file matrix_float4x2_precision.hpp.
| typedef mat< 4, 3, f32, highp > highp_mat4x3 |
4 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
Definition at line 28 of file matrix_float4x3_precision.hpp.
| typedef mat< 4, 4, f32, highp > highp_mat4x4 |
4 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.
Definition at line 46 of file matrix_float4x4_precision.hpp.
| typedef mat< 2, 2, f64, lowp > lowp_dmat2 |
2 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
Definition at line 16 of file matrix_double2x2_precision.hpp.
| typedef mat< 2, 2, double, lowp > lowp_dmat2x2 |
2 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
Definition at line 34 of file matrix_double2x2_precision.hpp.
| typedef mat< 2, 3, double, lowp > lowp_dmat2x3 |
2 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
Definition at line 16 of file matrix_double2x3_precision.hpp.
| typedef mat< 2, 4, double, lowp > lowp_dmat2x4 |
2 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
Definition at line 16 of file matrix_double2x4_precision.hpp.
| typedef mat< 3, 3, f64, lowp > lowp_dmat3 |
3 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
Definition at line 16 of file matrix_double3x3_precision.hpp.
| typedef mat< 3, 2, double, lowp > lowp_dmat3x2 |
3 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
Definition at line 16 of file matrix_double3x2_precision.hpp.
| typedef mat< 3, 3, double, lowp > lowp_dmat3x3 |
3 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
Definition at line 34 of file matrix_double3x3_precision.hpp.
| typedef mat< 3, 4, double, lowp > lowp_dmat3x4 |
3 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
Definition at line 16 of file matrix_double3x4_precision.hpp.
| typedef mat< 4, 4, f64, lowp > lowp_dmat4 |
4 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
Definition at line 16 of file matrix_double4x4_precision.hpp.
| typedef mat< 4, 2, double, lowp > lowp_dmat4x2 |
4 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
Definition at line 16 of file matrix_double4x2_precision.hpp.
| typedef mat< 4, 3, double, lowp > lowp_dmat4x3 |
4 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
Definition at line 16 of file matrix_double4x3_precision.hpp.
| typedef mat< 4, 4, double, lowp > lowp_dmat4x4 |
4 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.
Definition at line 34 of file matrix_double4x4_precision.hpp.
2 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
Definition at line 16 of file matrix_float2x2_precision.hpp.
| typedef mat< 2, 2, f32, lowp > lowp_mat2x2 |
2 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
Definition at line 34 of file matrix_float2x2_precision.hpp.
| typedef mat< 2, 3, f32, lowp > lowp_mat2x3 |
2 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
Definition at line 16 of file matrix_float2x3_precision.hpp.
| typedef mat< 2, 4, f32, lowp > lowp_mat2x4 |
2 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
Definition at line 16 of file matrix_float2x4_precision.hpp.
3 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
Definition at line 16 of file matrix_float3x3_precision.hpp.
| typedef mat< 3, 2, f32, lowp > lowp_mat3x2 |
3 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
Definition at line 16 of file matrix_float3x2_precision.hpp.
| typedef mat< 3, 3, f32, lowp > lowp_mat3x3 |
3 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
Definition at line 34 of file matrix_float3x3_precision.hpp.
| typedef mat< 3, 4, f32, lowp > lowp_mat3x4 |
3 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
Definition at line 16 of file matrix_float3x4_precision.hpp.
4 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
Definition at line 16 of file matrix_float4x4_precision.hpp.
| typedef mat< 4, 2, f32, lowp > lowp_mat4x2 |
4 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
Definition at line 16 of file matrix_float4x2_precision.hpp.
| typedef mat< 4, 3, f32, lowp > lowp_mat4x3 |
4 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
Definition at line 16 of file matrix_float4x3_precision.hpp.
| typedef mat< 4, 4, f32, lowp > lowp_mat4x4 |
4 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.
Definition at line 34 of file matrix_float4x4_precision.hpp.
| typedef mat< 2, 2, f64, mediump > mediump_dmat2 |
2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
Definition at line 22 of file matrix_double2x2_precision.hpp.
| typedef mat< 2, 2, double, mediump > mediump_dmat2x2 |
2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
Definition at line 40 of file matrix_double2x2_precision.hpp.
| typedef mat< 2, 3, double, mediump > mediump_dmat2x3 |
2 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
Definition at line 22 of file matrix_double2x3_precision.hpp.
| typedef mat< 2, 4, double, mediump > mediump_dmat2x4 |
2 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
Definition at line 22 of file matrix_double2x4_precision.hpp.
| typedef mat< 3, 3, f64, mediump > mediump_dmat3 |
3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
Definition at line 22 of file matrix_double3x3_precision.hpp.
| typedef mat< 3, 2, double, mediump > mediump_dmat3x2 |
3 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
Definition at line 22 of file matrix_double3x2_precision.hpp.
| typedef mat< 3, 3, double, mediump > mediump_dmat3x3 |
3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
Definition at line 40 of file matrix_double3x3_precision.hpp.
| typedef mat< 3, 4, double, mediump > mediump_dmat3x4 |
3 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
Definition at line 22 of file matrix_double3x4_precision.hpp.
| typedef mat< 4, 4, f64, mediump > mediump_dmat4 |
4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
Definition at line 22 of file matrix_double4x4_precision.hpp.
| typedef mat< 4, 2, double, mediump > mediump_dmat4x2 |
4 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
Definition at line 22 of file matrix_double4x2_precision.hpp.
| typedef mat< 4, 3, double, mediump > mediump_dmat4x3 |
4 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
Definition at line 22 of file matrix_double4x3_precision.hpp.
| typedef mat< 4, 4, double, mediump > mediump_dmat4x4 |
4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.
Definition at line 40 of file matrix_double4x4_precision.hpp.
| typedef mat< 2, 2, f32, mediump > mediump_mat2 |
2 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
Definition at line 22 of file matrix_float2x2_precision.hpp.
| typedef mat< 2, 2, f32, mediump > mediump_mat2x2 |
2 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
Definition at line 40 of file matrix_float2x2_precision.hpp.
| typedef mat< 2, 3, f32, mediump > mediump_mat2x3 |
2 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
Definition at line 22 of file matrix_float2x3_precision.hpp.
| typedef mat< 2, 4, f32, mediump > mediump_mat2x4 |
2 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
Definition at line 22 of file matrix_float2x4_precision.hpp.
| typedef mat< 3, 3, f32, mediump > mediump_mat3 |
3 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
Definition at line 22 of file matrix_float3x3_precision.hpp.
| typedef mat< 3, 2, f32, mediump > mediump_mat3x2 |
3 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
Definition at line 22 of file matrix_float3x2_precision.hpp.
| typedef mat< 3, 3, f32, mediump > mediump_mat3x3 |
3 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
Definition at line 40 of file matrix_float3x3_precision.hpp.
| typedef mat< 3, 4, f32, mediump > mediump_mat3x4 |
3 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
Definition at line 22 of file matrix_float3x4_precision.hpp.
| typedef mat< 4, 4, f32, mediump > mediump_mat4 |
4 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
Definition at line 22 of file matrix_float4x4_precision.hpp.
| typedef mat< 4, 2, f32, mediump > mediump_mat4x2 |
4 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
Definition at line 22 of file matrix_float4x2_precision.hpp.
| typedef mat< 4, 3, f32, mediump > mediump_mat4x3 |
4 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
Definition at line 22 of file matrix_float4x3_precision.hpp.
| typedef mat< 4, 4, f32, mediump > mediump_mat4x4 |
4 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.
Definition at line 40 of file matrix_float4x4_precision.hpp.


You can input with tap or flick.
If you want to check keymap, see Here.
On flick input, QuickFlick calculates distance level in response to distance from first tap point, and detects internal keycode to input in accordance with distance level.
(ex. small flick --> upper char(like A
), large flick --> lower char(like a
))
You can check flicking state(direction, distance level) in Flick Indicator located at top of keyboard.
Indicator shows direction with hue, distance level with transparent of color.
You can change flick sensitivity in Settings > Horizontal/Vertical Flick Sensitivity.
You can control input with multi tap.
QuickFlick has now two functions to control input.
These functions are able to toggle on-off in Settings > Multi tap settings


Vikram Guhilot is a Software Engineering Student at PSU, He also works full time at Intel at the HITECH semiconductor FAB, He plays an important role in the production of state of the art latest technology chips. Vikram is also tasked to work with researching and development of future products and in involved heavily with the testing of these experiments
My intellectual curiosity drives me to be a lifelong learner. I am currently pursuing an M.S. in Computer Science, and I am hungry for opportunities to learn in various facets of the industry. My goal is to become a valuable software engineer at a company where my contributions count toward productive outcomes, and I can continue to learn and evolve bit-by-bit.


LPROG - Length of program
Profiling and other tasks need to know the number of statements in the program. The LPROG() function supplies this information. Each statement compiled is given a new statement number. This is exploited by returning the statement number of a new statement.
LPROG() will return the length (i.e., the number of statements) in the SNOBOL4 program in which it is called. Every use of CODE() will increase this number, so call this early during execution.
Uses
«INCLUDES»≡ @
«LPROG»≡ -PUBLIC LPROG() * DEFINE('LPROG()') :(LPROG_END) * LPROG :<CODE(' LPROG = &STNO :(RETURN)')> * LPROG_END @
«unit_test»≡ #!/usr/bin/bash exec "snobol4" "-b" "$0" "$@" -INCLUDE 'LPROG.INC' &CODE = 1 EQ(LPROG(), 9) :F(END) &CODE = 0 END @
«»≡ -MODULE LPROG «INCLUDES» -IN72 -STITL LPROG -EJECT * ************************************************************************ * * * # ###### ###### ####### ##### * * # # # # # # # # # * * # # # # # # # # * * # ###### ###### # # # #### * * # # # # # # # # * * # # # # # # # # * * ####### # # # ####### ##### * * * * LPROG LENGTH OF PROGRAM * * * ************************************************************************ * * LPROG.lss * «LPROG» * * CE: .MSNOBOL4; @


Syria: Death toll in car bomb attack rises to 18
It also quoted Britain-based Syrian Observatory for Human Rights, a war monitor as saying that 19 people had died in the blast
by ANIAt least 18 civilians were killed and 27 others suffered injuries in a car bomb attack on Saturday in the Syrian city of al-Bab, according to Turkish Defence Ministry.
Though the Ministry had earlier in a Twitter post said the attack on a bus terminal killed ten and wounded more than 15 others, Al Jazeera reported that Turkish media, citing defence ministry gave a higher death toll later.
It also quoted Britain-based Syrian Observatory for Human Rights, a war monitor as saying that 19 people had died in the blast.
Turkey has blamed Kurdish People's Protection Units (YPG) for the attack. Turkey's Defence Ministry wrote on Twitter that YPG "terrorists" detonated a car bomb in the al-Bab bus terminal.
"Inhumane and uncivilized PKK/YPG terrorists continue to target innocent civilians using the same methods as Isla. This time the terrorists detonated a car bomb in the Al-Bab bus terminal in the Op Euphrates Shield area, killing 10 civilians and injuring more than 15," the ministry tweeted.
Last week, at least eight people were killed and more than 20 sustained injuries after a car explosion rocked the village of Suluk in the north of the Syrian Raqqa Governorate.
Sign up for all the latest news, top galleries and trending videos from Mid-day.com
Subscribe
Loading...


In pictures: University of Bristol staff strike 25 Nov 2019, 11:41 by Jasper King Students and staff issue their demands(Image: Dan Reagan/Bristol Live) Students and staff gather for the protest(Image: Dan Reagan/Bristol Live) A Labour campaigner at the protest(Image: Dan Reagan/Bristol Live) A UCU placard(Image: Dan Reagan/Bristol Live) Students and staff demand reform(Image: Dan Reagan/Bristol Live) Students and staff outside Wills Memorial Building Tower(Image: Dan Reagan/Bristol Live) Protesters at Queen Square(Image: Dan Reagan/Bristol Live) Protesters blocking Park Street(Image: Dan Reagan/Bristol Live) The crowds gather(Image: Dan Reagan/Bristol Live) Protesters on College Green(Image: Dan Reagan/Bristol Live)


Since IBM had patented their keyboard design, Amstrad developed an entirely different keyboard.
The Amstrad keyboard is entirely incompatible with XT and AT keyboards, and can be used only on an Amstrad; conversely, no other keyboard will work on an older Amstrad. This keyboard has a Del key on the keypad, and both Del-> and Del<- keys above the Enter key. The Del-> key has scancode 70. Left of the Enter key a PrtSc/* key. There is an additional Enter key with scancode 74. It is possible to connect a mouse and/or joystick to the keyboard, and then these devices also yield scancodes: 77 (joystick button 1), 78 (joystick button 2), 79 (joystick right), 7a (joystick left), 7b (joystick up), 7c (joystick down), 7d (mouse right), 7e (mouse left).
John Elliott adds:
The above only mentions the PC1512/PC1640 style of keyboard. Later Amstrad XTs (PPC512, PPC640, PC20, PC200, PC2086, PC3086) used a 102-key keyboard with the same layout and scancodes as a normal 102-key XT keyboard. This design is not only incompatible with normal XT and AT keyboards, it's also incompatible with the PC1512 keyboard. The joystick socket is no longer present, but mouse button clicks are still handled by the keyboard, with the same scancodes 7d (right button) and 7e (left button).
On the PPC512, PPC640, PC20 and PC200, the keyboard is in the same box as the motherboard, and is connected directly to it by ribbon cable.


| Home | Trees | Indices | Help |
|---|
|
|
Defines actions such as MoveTo or FadeOut which incrementally perform small changes in intervals over a period of time.
|
|||
|
AbstractIntervalAction A FiniteTimeAction that incrementally performs small changes in intervals over a period of time. |
|||
|
DelayTime An AbstractIntervalAction that performs no operations over a period of time. |
|||
|
Sequence An AbstractIntervalAction that executes a series of Actions according to the order in which they are given. |
|||
|
Repeat Repeats a given Action a given number of times. |
|||
|
Spawn Starts multiple Actions simultaneously. |
|||
|
RotateTo Rotates a Node to a certain angle in radians over a period of time. |
|||
|
RotateBy Rotates a Node by a certain angle over a period of time. |
|||
|
MoveTo Moves a Node to a certain Point over a period of time. |
|||
|
MoveBy Moves a Node by a certain distance (given by a Point) over a period of time. |
|||
|
MoveAlongPath Moves a Node along a given Path. |
|||
|
JumpBy Moves a Node by a certain distance by having it "jump" to its final destination. |
|||
|
JumpTo Moves a Node to a certain Point by having it "jump" there. |
|||
|
BezierConfiguration An object which holds parameter values for a Bezier curve. |
|||
|
BezierBy Moves a Node along a curved path as defined by a BezierConfiguration. |
|||
|
BezierTo Moves a Node to a specified Point by following a Bezier curve. |
|||
|
ScaleTo Scales a Node to a specified percentage in both the x- and y-axes. |
|||
|
ScaleBy Scales a Node by a specified percentage in both the x- and y-axes. |
|||
|
Blink Makes a Node alternately visible and invisible. |
|||
|
FadeIn Fades in a Node (makes it visible). |
|||
|
FadeOut Fades out a Node (makes it invisible). |
|||
|
FadeTo Fades a Node to a specified opacity. |
|||
|
TintTo Changes the color value of a Node which uses Node.getColor and
Node.setColor (e.g.
|
|||
|
TintBy Changes the color value of a Node by a certain amount given for each color channel. |
|||
|
ReverseTime An AbstractIntervalAction whose wrapped Action is run in reverse. |
|
|||
|
|
|||
__package__ =
|
|
Calculates cubic Bezier curve's value for the given parameters in a certain axis. Starts a point a going toward point b, then ends at point d coming from point c.
|
| Home | Trees | Indices | Help |
|---|
| Generated by Epydoc 3.0.1 on Fri Apr 9 14:54:57 2010 | http://epydoc.sourceforge.net |


Europe
Akar (2002)
Bronisrczyk-Dyla (2002)
Entz (2006)
Megiorni (2011)
D+L Subtotal (squared = 28.0%, p = 0.184) -H Subtotal
Others Attia (2010) ‘Zhang (2010)
Tao (2011) (a
Barbosa (2016) DeL Subtotal (squared = 78.6%, p = 0.003) W-H Subtotal
De+L Overall (-squared = 62.0%, p = 0.010) W-H Overall
NOTE: Weights are from random effects analysis
2.88 (0.88, 9.44) 0.66 (0.31, 1.40) 0.77 (0.41, 1.42) 1.05 (0.61, 1.79) 0.97 (0.61, 1.52) 0.95 (0.68, 1.33)
2.08 (1.05, 4.14) 1.04 (0.70, 1.56) 0.19 (0.05, 0.75) 0.26 (0.06, 1.19) 0.71 (0.28, 1.79) 0.87 (0.64, 1.20)
0.92 (0.60, 1.42) 0.91 (0.72, 1.14)
11152 21161
33121 212
Events,
2765 67/210 142/877
6592/24930
2212 7189/31267
7331131844
Weight
8.29
13.41 15.49 16.79 $3.98
14.37 19.00 6.65 6.00 46.02
100.00


app.home.headline
app.home.subheadline
card.second.title
Some quick example text to build on the card.second.title and make up the bulk of the card's
card.second.text .
Lorem Ipsum dolor set amit.
card.third.title
Some quick example text to build on the card title and make up the bulk of the card's card.third.text .
card.third.button


“There would be the following number of inhabitants in [the visible universe], 60,573,000,000,000,000,000,000,000; that is, sixty quartillions, five hundred and seventy three thousand trillions, a number which transcends human conception. Among such a number of beings, what a variety of orders may exist, from the archangel and the seraph to the worm and the microscopic animaliculum!” — Thomas Dick, The Sidereal Heavens


QuantConnect provides Forex data from Oanda for 71 currency pairs going back as far as 2004. You can find a full list of supported pairs in the data library. The data is available in Tick, Second, Minute, Hour, and Daily resolutions. Unlike equities, Forex data also contains quote data. To access the data for a given pair, we must first subscribe to its data using its ticker.
qb = QuantBook() eurusd = qb.AddForex("EURUSD") # add EURUSD data
The history call requires you to pass in the symbols you wish to retrieve data for and, the period and resolution of the data. There are three different ways to make a history call:
Time Period + Resolution
# Returns the past 10 days of historical daily data history = qb.History(eurusd.Symbol, timedelta(days=10), Resolution.Daily)
Bar Period + Resolution
# Returns the past 10 bars of historical daily data history = qb.History(eurusd.Symbol, 10, Resolution.Daily)
Start Time + End Time + Resolution
start_time = datetime(2019, 1, 1) # start datetime for history call end_time = datetime(2020, 1, 1) # end datetime for history call # Returns daily historical data between January 1st 2019 and January 1st 2020 history = qb.History(eurusd.Symbol, start_time, end_time, Resolution.Daily)
If we have subscribed to multiple symbols, we can retrieve a single dataframe which contains historical data for all our symbols, by using qb.History(qb.Securities.Keys, 10, Resolution.Daily)
.
eurusd = qb.AddForex("EURUSD") gbpusd = qb.AddForex("GBPUSD") usdjpy = qb.AddForex("USDJPY") # Returns daily historical data for all symbols history = qb.History(qb.Securities.Keys, timedelta(days=10), Resolution.Daily)
The dataframe returned will have a column for each data type available. Similar to equities, the dataframe will have a column for Open, High, Low, Close, and Volume (OHLC) data, but there will also be columns for Ask OHLC and Bid OHLC data. The rows are indexed by time, meaning each row correlates to one timestamp. Rows are also indexed by symbols if multiple symbols were passed into the history call.
We can use history.loc["EURUSD"]
to access the time series row data for a specific symbol. The row data will contain the open, high, low, close, volume (OHLC) data and the quote data, which includes Ask OHLC and Bid OHLC data. Each row is indexed by a given timestamp.
history.loc["EURUSD"]
From here, we can then access specific columns. Let's access the time series high data for the ask quote bar.
history.loc["EURUSD"]["askhigh"]
We can also access the time series ask high data for all symbols by unstacking the dataframe.
history['askhigh'].unstack(level=0)


This page has moved to a /posts/2013-12-09-interresting-python-and-pip-behaviour-with-python-2-and-3-compatible-packages.


Toby Keith talks John Wayne, Johnny Cash, Trump and the American flag in 'Fox News Sunday' interview
by Nick GivasCountry music singer Toby Keith discussed patriotism, John Wayne, Johnny Cash, President Trump, and his love for the American flag during an interview with Chris Wallace, on "Fox News Sunday" this week.
"It changes your life," Keith said of his rise to fame. "You go from making two or $300 a week to making 15, 20,000 a night, overnight."
He highlighted one of his biggest hits, "Courtesy of the Red White and Blue," which he wrote in 20 minutes following the 9/11 terror attacks, and first played for a group of Marines who were being deployed to Afghanistan. Keith addressed the backlash he received for the song's patriotic themes and said he should be able to freely express his love of country.
"John Wayne and Johnny Cash sang about the flag," he said. "Now I can’t -- send these kids off to war and want them to come back home and do a good job? And right there I went, 'I’m going to be that guy.'”
TOBY KEITH PRESENTS VETERAN, WHO LOST LEGS IN AFGHANISTAN, WITH SPECIAL WHEELCHAIR
The 58-year-old then told Wallace how he made over half a billion dollars during his singing career, before defending his decision to perform at Trump's 2017 presidential inauguration.
"Going to a president’s inauguration, no matter who it is, that’s what you’re supposed to do," he said. "It’s an honor to make history and get to do that."
The country star said America's musical tastes have changed since he reached his peak, but claimed he'll never change his style and will always stay loyal to what made him successful.
CLICK HERE TO GET THE FOX NEWS APP
"I'm in a new world but I'm going to outwork you," he said earlier in the segment. "It’s more of a hip-hop country. I hope the kids make a half a billion [dollars and] end up on Forbes. I made mine, but I’m not going to write that stuff."


A nostalgic trailer for The Late Late Toy Show has been released
by Nick FitzgeraldViewers won't have to wait too long for one of the most anticipated festive shows on RTE
Ah, The Late Late Toy Show. It's not hard to think back to when you were a little nipper gathered together with the fam in front of the telly in the lead up to Christmas.
A nostalgic feeling for many, watching The Late Late Toy Show is something we remember with fondness. Many still watch the show no matter what age they are.
Ahead of the much loved festive show on RTE, the national broadcaster has released a warm and heartfelt trailer.
Featuring marshmallows, Christmas jumpers and popcorn angels, the trailer also sees one little boy, along with his family preparing to settle in to watch the show.
A special appearance is made by The Late Late Show owl, named Gabriel, after the late Gay Byrne.
The trailer premiered on RTE One this evening, just before the Six O'Clock News bulletin. It will rotate across RTE One and RTE2 in the lead up to The Late Late Toy Show on Friday, November 29.
In 2018, The Late Late Toy Show was the most-watched television programme of the year, with over 1.5 million people tuning in to watch it.
The show, which had the theme of The Greatest Showman, was watched by an average audience of over 1.3 million live on the night, a 74% share of the audience watching at that time, with an 89% share among children.
Next Friday’s theme remains a closely-guarded secret.
The Late Late Toy Show airs on RTE One on Friday November 29 from 9:35pm


Noah Cyrus
-
All Falls Down
[by:hondoes] 作曲 : Alan Walker/Anders Froen/Pablo Bowman/Nick Gale/Rick Boardman/Sarah Blanchard 作词 : Pablo Bowman/Dani... -
Again (Alan Walker Remix)
作曲 : Jahseh Onfroy/Noah Cyrus/Timothy McKenzie 作词 : Jahseh Onfroy/Noah Cyrus/Timothy McKenzie You just made the worst ... -
Chasing Colors
[by:hondoes] We're dreaming on and on We're dreaming on and on We got the windows down We got the windows down I'm chas... -
All Falls Down (Steve Aoki Remix)
[by:Trap_Girl] What's the trick I wish I knew I'm so done with thinking through All the things I could've been And I kno... -
All Falls Down (K-391 Remix)
[by:Trap_Girl] What's the trick I wish I knew I'm so done with thinking through All the things I could've been And I kno... -
Make Me (Cry)
[by:hondoes] I never needed you like I do right now I never needed you like I do right now I never hated you like I do r... -
Expensive
[by:Trap_Girl] 作曲 : Jackson Hirsh 作词 : Jackson Hirsh If I'm giving you up why you sleeping over And why we ain't sober... -
July
[by:攸寧兮] 作曲 : Noah Cyrus/Michael Sonier/Peter Harding 作词 : Noah Cyrus/Michael Sonier/Peter Harding I've been holding m... -
Good Cry
[by:Trap_Girl] 作曲 : Noah Cyrus/Melisa Bester/Tushar Apte 作词 : Noah Cyrus/Melisa Bester/Tushar Apte Yeah I’ve been drin...  -
Slow (R3HAB Remix)
[by:墨尔本bounce] 作曲 : Danny Tenenbaum/Sizzy Rocket/Jayson DeZuzio/Tom Straete Lagergen/Marco ''MAG'' Borrero It's three ... -
Waiting
[by:对世界充满好奇的老年人] All the time before I knew you Seems now so long And I cannot explain Even if I try No, you never make ... -
Punches
[by:Trap_Girl] 作曲 : Noah Cyrus/Joe Janiak/Jenna Andrews 作词 : Noah Cyrus/Joe Janiak/Jenna Andrews Honey, feels like my ... -
Lonely
[by:Trap_Girl] 作曲 : Noah Cyrus/Roland Spreckley 作词 : Noah Cyrus/Roland Spreckley I'm slowly killing myself I'm trying ... -
My Way
[by:墨尔本bounce] 作曲 : Myles MacInnes/Katya Edwards/Joe Murphy/Jonty Howard 作词 : Myles MacInnes/Katya Edwards/Joe Murphy/... -
Make Me Cry (Viga Remix)
[by:青水之人] [by:E-Lyric] [offset:-100] I never needed you like I do right now I never hated you like I do right now Cause ... -
Topanga (Voice Memo)
[by:Trap_Girl] 作曲 : Noah Cyrus/Ilsey Juber 作词 : Noah Cyrus/Ilsey Juber I can't drive Topanga anymore 'Cause it reminds... -
Team
[by:Trap_Girl] 作曲 : Noah Cyrus/Mike Elizondo/Jenna Andrews/Emily Weisband 作词 : Jenna Andrews/Mike Elizondo/Emily Weisb... -
Sadness
[by:Trap_Girl] 作曲 : Jerker Hansson/Cleo Tighe/Brandon Treyshun Campbell 作词 : Jerker Hansson/Cleo Tighe/Brandon Treyshu... -
Noah Cyrus-Make Me (Cry)（EirshaT / Noah Cyrus remix）
作曲 : Eirsha 作词 : Noah Cyrus I never needed you like I do right now 我从来没有像现在这样需要你 I never needed you like I do right now... -
It's Beginning to Look a Lot Like Christmas
[by:Trap_Girl] 作曲 : Meredith Willson 作词 : Meredith Willson It's beginning to look a lot like Christmas Everywhere you ... -
We Are...
作曲 : Noah Cyrus/Savan Kotecha/Max Martin/Ali Payami 作词 : Noah Cyrus/Savan Kotecha/Max Martin/Ali Payami My life is gre... -
Live or Die
[by:工作婊] 作曲 : Noah Cyrus/Timothy McKenzie/Ilsey Juber/Diego Leanos 作词 : Noah Cyrus/Timothy McKenzie/Ilsey Juber/Diego ... -
I'm Stuck
[by:max_bot] Uh huh Uh huh I’ve been a wild dog in this here part of town No gun-slinging, no fool can bring me down Now... -
Stay Together
[by:hondoes] I drank straight to my head I went outside to smoke a cigarette And I shattered my phone on the cement But ... -
Lately
[by:Trap_Girl] 作曲 : Tanner Alexander 作词 : Tanner Alexander I can't seem to find my peace of mind But lately I still te... -
Almost Famous
Written by：Ilsey Juber/Noah Cyrus/Dan Wilson You were the right face at the wrong time love I only wish I woulda known... -
Where Have You Been?
[by:Trap_Girl] 作曲 : Noah Cyrus/Martin "Doc" McKinney/Carlo Montagnese 作词 : Noah Cyrus/Martin "Doc" McKinney/Carlo Mont...


About :-
Z Report module for POS and use for Print the Z report after closing the shift for an end of day summary of activity on that register they all detail auto mail to related person.
Now this all process we can do in odoo.
Here spellbound make one module which name is Z Report .
With this module all the process will become too easy and reliable for user as well as customers.


| Shows size: | {{show-blocks.size}} |
| Divisor start: | {{divisor}} |
| Quotient {{forloop.index}}: | {{quotient}} |
| Quotient_alt {{forloop.index}}: | {{quotient_alt}} |
|
|
|
| BREAK | Divisor end: | {{divisor}} |
| Date | Artist(s) | Location | Notes |
|---|---|---|---|
{{headliner}} |
with {{support}} |
{{location}} |
{{venue}}
{{dte}}
|