d1 is a lightweight responsive front-end framework
with interactive components and utilities.
Neutral default style can be customized with CSS variables.
Most components are usable without JavaScript.
Install to your repository:
npm install d1-web
Then use in your CSS file (d1-icons.css
is optional):
@import "../node_modules/d1-web/dist/d1.min.css";
@import "../node_modules/d1-web/dist/d1-icons.min.css";
And optionally bundle into your JavaScript file:
require("../node_modules/d1-web/dist/d1.min.js");
or build from source:
const d1 = require("../../d1-web/src/module.js").default;
d1.b([document], 'DOMContentLoaded', e => d1.init(/* options */));
Add the distributed CSS and JavaScript to the head
of your document.
Inclusion of d1.js
and d1-icons.css
is optional.
<!doctype html>

<meta charset="utf-8">
<title>Title</title>
<meta name="viewport"
content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="/css/d1.min.css">

<link href="/js/d1-icons.min.css" rel="stylesheet">

Add CDN links to the head
of your document.
Inclusion of d1.js
and d1-icons.css
is optional.
<link<EMAIL_ADDRESS>rel="stylesheet">

<link href="https://unpkg.com/d1-web/dist/d1-icons.min.css" rel="stylesheet">

<!doctype html>

<meta charset="utf-8">
<title>Title</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://unpkg.com/d1-web">

<link href="https://unpkg.com/d1-web/dist/d1-icons.min.css" rel="stylesheet">

Mostly, default styling is kept.
QuoteCite Mark Dfn
Code
Var
Kbd
Samp
Paragraph
New line
Paragraph
Preformatted code
Blockqoute
h1..h6 | Default margins | |
.mar | Smaller margins | |
.fit | No margins |
Grid row container div.row
.
Direct descendants of the container are columns.
By default, they all have equal width.
Paragraph after grid
Grid rows container .grid-N
, where N is number of columns (1, 2, 3, 4, 6). Direct descendants of the container are cells. Cells do wrap, forming a regular grid.
Expandable nested lists ul.tree
.
Inside list items, use links pointing at nested lists, or links without [href]
.
When no such link is found, it is generated.
For accordion behaviour, use .accordion
.
To remember state, use .mem
.
table | By default, table is styled with border | |
form > table | No borders if table is a direct descendant of form | |
.bord | Show borders | |
.let | Row dividers | |
.hover | Highlight row on hover | |
.shift | Full width | |
.fit | No cell padding | |
.roll > table | Scroll overflowing width | |
.l1 .r2 .c3 | Align specific columns to the left/right/center |
| # | Component | Code | Remember state | Fix position | Close on Esc |
|---|---|---|---|---|---|
| 1 | Dropdown | .nav | - | + | + |
| 2 | Tree | .tree | .mem | - | - |
| 3 | Toggle | .target | .mem | - | - |
| 4 | Popup | .pop | - | + | + |
| 5 | Tabs | .tabs | .mem | - | - |
| 6 | Modal | .dlg | - | - | + |
| 7 | Drawer | .drawer | - | - | + |
| 8 | Gallery | .gal | - | - | + |
| 9 | Topbar | .stick.toggle | - | - | - |
Turn rows into cards on small screen table.flip
.
| Language | Type | Year |
|---|---|---|
| HTML | Markup | 1993 |
| JavaScript | Programming | 1995 |
| CSS | Style | 1996 |
Sort table rows table.sort
.
Initial sort column number can be set in [data-s]
attribute, or (with higher priority) in URL query string parameter with the name defined in [data-qs]
attribute (one-based indexing, negative values for descending order).
Filter field query selector in table[data-filter]
or add filter field automatically table.filter
.
Initial filter value can be set in [data-f]
attribute, or (with higher priority) in URL query string parameter with the name defined in [data-qf]
attribute.
Automatic dynamic totals (sum for numbers, max for dates, count for strings) table.totals
.
Custom dynamic totals in tfoot span
:
[data-total="count|sum|avg|min|max"]
,
decimal digits [data-dec]
(default 2),
mode [data-mode="s|n|b|i|d"]
(default "n"),
where "s" is string, "n" is numeric, "b" is byte size, "i" is time interval, "d" is datetime.
To enable page navigation set [data-limit]
to number of rows per page
and optionally set [data-pages]
to maximum number of page links to show (default is 10).
Page navigation is placed before table by default.
To place it after table add [data-pages-after]
attribute.
Initially shown page can be set in [data-p]
attribute, or (with higher priority) in URL query string parameter with the name defined in [data-qp]
attribute.
| String | Number | Bytes | Interval | Date |
|---|---|---|---|---|
| HTML | 4 | 900 B | 1min 125s | 1993-07-09 08:05:01 |
| JavaScript | 10.1 | 1 MB | 5m | 12/4/1995 |
| CSS | 3 | 350 KB | 1y | 17.12.1996 |
| Count: |
Sum: Avg: | Sum: | Sum: |
Avg: Min: Max: |
Button
and input
of type submit
have button styling by default.
Add .btn
class to the element (usually a link) to make it look like a button (which is not recommended from accessibility point of view).
For color options see Colors section.
For aligned form, table
may be used, which is arguably not semantic, but very convenient.
In this case, table
must be a direct descendant of form
.
Table will become stacked on small screen.
Initial values for all inputs in a form can be set in URL query string parameter with the name defined in form's [data-q]
attribute.
Initial input value can be set in URL query string parameter with the name defined in input's [data-q]
attribute. This takes precenence over form's initial values.
Replacement of standard HTML date inputs.
Auto-adjust textarea
height to content .adjust
.
Turn textarea
into WYSIWYG editor .edit
.
Optionally define initial mode in [data-mode]
attribute ("w" for WYSIWYG, "t" for source editing).
If absent, mode is defined automatically based on whether HTML tags are contained in text.
Optionally define custom set of tools in [data-tools]
.
Example: data-tools="/bi_."
.
| Code | Command | Description |
|---|---|---|
| / | src | View source |
| * | insertimage | Image |
| @ | createlink | Link |
| x | unlink | Unlink |
| b | bold | Bold |
| i | italic | Italic |
| _ | removeformat | Remove format |
| . | insertUnorderedList | Unordered list |
| # | insertOrderedList | Ordered list |
| 1 | formatblock | Heading 1 |
| 2 | formatblock | Heading 2 |
| 3 | formatblock | Heading 3 |
| p | formatblock | Paragraph |
| | | tools | Expand toolbar |
| c | inserthtml | Code |
| , | inserthtml | Abbreviation |
| s | strikeThrough | Strike through |
| ^ | subscript | Subscript |
| v | superscript | Superscript |
| d | formatblock | Div |
| q | formatblock | Block quote |
| f | formatblock | Preformatted |
| ~ | inserthorizontalrule | Horizontal ruler |
| T | inserthtml | Table |
| ( | justifyLeft | Justify left |
| = | justifyCenter | Justify center |
| ) | justifyRight | Justify right |
| j | justifyFull | Justify full |
| + | indent | Increase indent |
| - | outdent | Decrease indent |
Autocomplete lookups with data from XHTTP request.
Chained selects.
Chained datalist.
Add .pick
class to file input for drag and drop behaviour and image preview.
Optionally set [data-picked]
to URL of initial image.
Add .drop
class to file input for fullscreen dropzone (use one per page).
Add .fit
class for compact layout.
Custom form validation.
To customize input validation messages, provide validation hint in [data-hint]
attribute of input element. Placeholders inside percent characters are replaced with value of corresponding attribute of input element.
Another option is to add sibling element with class .hint.text-e
after input. It will be visible only if input value is not valid. Contrary, sibling element with class .hint.text-y
will be visible only if input value is valid.
To improve usability, add class .js-unhint
to form
. This disables default brower-specific tooltips and also disables reporting empty required inputs as invalid until submitting.
To store user input in local storage, add .store
class to the form.
Buttons will be shown above the form: to restore input values, to reset inputs to initial values, and to clear stored values.
To restore input values on page reload, add .restore
class to the form.
To avoid restoring of specific inputs, add .unstore
class to theese inputs.
Pure CSS togglers are based on :target
behaviour.
This approach is semantic, but has some drawbacks:
To overcome these drawbacks, JavaScript is used.
To store elements state in local storage, add .mem
class like in following examples for target, tabs, tree.
Use link pointing at element with .target
class.
If target element should be visible with JavaScript disabled, use .toggle
class instead.
If target element should be visible with JavaScript disabled, but initially invisible with JavaScript enabled, use .toggle.off
classes.
To toggle many elements at once, use link with data-nodes
attribute and query selector as its value.
To initially hide elements add off
class on them.
To remember state, add mem
class to the element and give it unique id
or name
.
Toggle: One Two
Inside div
with .pop
class, use link pointing at sibling div
element.
Add .shift
class to the target element to pop up leftwards.
Add .fit
class to the target element to allow its small width.
Popups can be nested.
To create a navigation bar add .nav
class to the ul
element.
With pure CSS, nested lists are shown on hover. With JavaScript, nested lists are toggled on click. Following code shows how to collapse navigation to a single hamburger icon on small screen, and expand it to dropdown navbar on large screen.
Use list with .nav.tabs
classes as tabs headers.
Each list item should contain a link pointing at tab panel.
Next sibling div
should contain div
tab panels.
Use link pointing at element with .dlg
class.
Add .let
class for larger width.
Optionally use closing link pointing at #cancel
inside target element.
Modal
Use link pointing at element with .dlg.full
classes.
Optionally use closing link pointing at #cancel
inside target element.
Replacement for standard JavaScript dialogs.
.alert[title][data-caption][data-head][data-pic][data-ok]
.dialog[title][data-caption][data-head][data-pic][data-ok][data-cancel][data-reverse]
.dialog[data-prompt][title][data-caption][data-head][data-pic][data-src][data-go][data-ok][data-cancel][data-reverse]
Inside div
with class .gal
, add sequence of links, each one pointing at the next and having [style]
attribute with --img
CSS proprty pointing at image.
Lastly, add closing link pointing at #cancel
.
Pure CSS gallery is based on CSS variables. Images are lazy loaded. Next image is preloaded. Enter key press navigates to the next image (depends on browser).
Warning: for IE support, use background-image
instead of --img
in style
attribute; no lazy-loading in this case.
Place links with class .pic
inside div
with class .gallery
to generate gallery similar to pure CSS gallery.
Use link pointing at element with .drawer
class.
Optionally add .shift
class to the drawer element for right side drawer.
Optionally use closing link pointing at #cancel
inside target element.

Topbar

Warning: limited browser support.
[preview area]
(preview)
Class depending on available width [data-class-mobile], [data-class-desktop]
.
Toggles on resize.
To make link change its URL when JavaScript is enabled, use [data-href]
attribute.
Toggle class or other attribute
a[href^="#"][data-parent][data-nodes][data-set][data-unset][data-attr][id].mem
,
:is(a, select, [type="checkbox"], [type="radio"])[data-parent][data-nodes][data-set][data-unset][data-attr][name/id].mem
.
To remember state, add mem
class to the control element and give it unique id
or name
.
To forget stored state, press Escape key three times in a row. This will clear the local storage.
(invert)
Items are nodes with class .item
.
Container is items' common parent.
Containers with items can be nested.
Hashed links inside items invoke actions on containing item.
If link needs to be outside of the item, point at item with query selector in link's [data-item]
attribute.
#copy
copy item
#add
copy item and clear inputs
#hide
hide item
#del
delete item unless it is last in the container
#delete
delete item, even the last one
#delall
delete all items inside container defined by [data-item]
#clear
delete all nodes inside container defined by [data-item]
Add icon before element's content .icon-xxx
.
Replace element's content with icon .empty.icon-xxx > *
. Provide [title]
for accessibility.
Toggle icon on active link .act-icon-xxx
.
In your document, provide SVG symbol
with [id]
containing prefixed icon name.
It will override the icon with the same name, if such exists in iconset.
To explicitly set width, height and class of inserted icon (original or custom), provide values like this: class="icon-sun_128_64_bg-w_text-w"
.
Add .language-xxx
class to code
element.
Available language codes: html
, css
, js
.

Top
/* CSS */
a .test {
color: inherit;
background: #c00;
font: "PT Sans", sans-serif;
}
// JavaScript
let double = function(x){
console.log('double', x);
return 2 * x;
}
Add .code
class to div
element.
Add .swipe
class to the element.
Allowed swipe directions are defined by the presence of data-swipe-up
, data-swipe-down
, data-swipe-left
, data-swipe-right
attributes. Non-empty values of these attributes are used as URLs.
To drag element while swiping, add also .drag
class.
Error Error
Warning Warning
Info Info
Yes Yes
No No
Bg
Border
Bg+Border
Status+Border
Button-like
| Table: | Default | OK |
.invert | Invert | |
.hover | Hover effect | |
.let | Semi-transparent |
.invert | Invert | |
.row.center.c | Centrify |
Text link
| Default | ||
.c | Centered | |
.shift | Leftwise | |
.bg-e | Danger popup tooltip |
Warning: limited browser support.
...
...
...
...
...
...
...
...
...
...
...
...
...
...
--text
- base text color; default: #000
--bg
- base background color; default: #fff
--bg-pane
- panel background color; default: rgba(0,0,0,.05)
--border
- border style; default: thin solid rgba(0,0,0,.16)
--bg-hilite
- highlighted element background; default: rgba(0,0,0,.05)
--text-hilite
- highlighted element text color; default: inherit
--link
- base link text color; default: #03b
--hover
- hovered link text color; default: #07f
--visited
- visited link text color; default: #80b
--rad
- border radius in em
s; default: .2
--gap
- base gap for margins and paddings in em
s; default: 1
--gap-rate
- rate of vertical and horizontal gap; default: .5
--shade
- shadow of overlay components; default: 0 .2em .8em rgba(0,0,0,.3)
Use the following code to add event listener:
d1.listen(type, handler);
| Type | Description | Plugin | Event object properties |
|---|---|---|---|
| start | Starting framework initialization | core | — |
| options | Options are set | core | — |
| plugins | All plugins installed | core | — |
| plugin | Plugin installed | core | name, plugin |
| toggle | Element visibility changed | toggle | n, on |
| active | Toggler link activated or deactivated | toggle, tools | n, on |
| switch | Element's attribute switched | tools | n, on, attr, val |
| request | Before asynchronous request | fetch | request |
| response | Asynchronous request completed | fetch | request |
| item | Item added or deleted | items | n, p, a |
| filter | Items filter applied | filter | n, f |
| swipe | Swipe executed | swipe | n, dir |
| Item | Description | Used with | Modifications |
|---|---|---|---|
| .row | Grid | div ul .col-0 .col-2 .col-3 | .flip .let .margin .fit .center .roll .shift .stick .center .wrap .read .narrow |
| .grid-* | Regular grid | div | .let .flip .grid-1/2/3/4/6 .col-1/2/3/4-mobile .col-1/2/3-phone |
| table | Table | .roll | .hover .fit .let .shift .flip |
| ul, ol, dl | List | .fit .row | |
| .tree | Tree | ul | .accordion .fit |
| button, a.btn | Button | form submit button a span | .bg-x .fit [data-target] |
| .flip | Responsive | .row .nav table | |
| .hide | Visibility by media | div | .hide-mobile .hide-desktop .hide-print .hide-screen .hide-js .hide-nojs |
| .target | Toggle | div | .target-mobile .target-desktop .toggle .off .mem .act .inact |
| .pop | Popup | .pop>.shift, .pop>.btn | |
| .nav | Navigation | ul | .flip .hover .let .bg .center .roll .nav.tabs.mem.act .inact .shift |
| .tabs | Tabs | ul.nav.tabs.mem | |
| .dlg | Modal | .close | .dlg.c.let .dlg.full.center |
| .gal | Gallery | a .close | [data-info] |
| .drawer | Drawer | div a.close | .shift |
| .stick | Topbar | .toggle .let | |
| .pick | File picker | input[type="file"] | .drop [data-submit] |
| .swipe | Swipe | body, * | .drag |
| .let | Specific modifications to components |
.row .table .nav .dlg .stick .over | |
| .shift | Something about right side positioning |
.row > * .nav > li .grid table .pop [data-tip] .drawer * | |
| .item | Relative position | * | .over.let .close .filter |
| .icon | Small image | img svg a button | .is-on .is-off .icon-x |
| .bar | Progress bar | div | .text-x |
| .fix | Fixed block | .r .l | |
| .text-* | Text color | * .invert .hint | .text-e .text-w .text-i .text-y .text-n |
| .bg | Background color | * .invert | .back .bg-e .bg-w .bg-i .bg-y .bg-n .yel |
| .r .c .l | Align | *, [data-tip] | |
| .center | Centrify | * .row .nav .full | |
| .roll | Horizontal scroll | * .row .nav ul table | .scroller |
| .small | Small font | * | |
| .fit | Remove formatting | * | .mar .pad .bord .rad .shade |
| .mar | Vertical margin | * | |
| .pad | Padding | * | |
| .bord | Border | * | |
| .rad | Border radius | * | |
| .shade | Add shadow | * | |
| .nobr | No wrapping | * | |
| .scroller | Custom scrollbar | html, body, * | |
| .js | JavaScript is on | body |
.hide-js, .hide-nojs .toggle, .toggle-mobile, .toggle-desktop .off .mem .subinput .input-tools form.js-unhint form.js-live-val .gallery > a.pic .filter .icon-x .empty.icon-x > * .tip .not-x, .or, .or-x body.js-theme body.trans body.fade |
.act
— active link
.back
— default background
.bg
— light background
.bg-e
— nominal "red" background
.bg-i
— nominal "blue" background
.bg-n
— nominal "gray" background
.bg-w
— nominal "yellow" background
.bg-y
— nominal "green" background
.bord
— add border
.btn
— button-like
.c
— centrify content inside block
.center
— centrify block itself
.close
— link to close togglable block
.col-0
— grid cell with non-expanding width
.col-2
— grid cell with 2x expanding width
.col-3
— grid cell with 3x expanding width
.dlg
— card-like block
.drag
— drag while swiping
.drop
— file input with fullscreen dropzone
.drawer
— drawer
.fit
— remove formatting: margin, border, padding, shadow
.fix
— fixed in corner
.flip
— responsive component, stacked view on small screen
.full
— fullscreen block
.gal
— fullscreen gallery
.grid-1/2/3/4/6-mobile/phone
— regular grid
.hide
— hidden
.hide-js
— hidden only if JavaScript controls page
.hide-desktop
— hidden only on large screen
.hide-mobile
— hidden only on small screen
.hide-nojs
— hidden only if JavaScript does not control page
.hide-print
— hidden on print
.hide-screen
— hidden on screen
.hover
— highlight link or table row on hover
.hint
— form input hint
.icon
— small image
.inact
— inactive element
.invert
— invert colors
.is-off
— hidden inside active link
.is-on
— hidden inside not-active link
.item
— relative position
.l
— align content to the left
.let
— specific modifications to components
.mar
— add vertical margins
.narrow
— narrow block width
.nav
— horizontal dropdown navigation
.nobr
— prevent automatic text wrapping
.off
— hidden with JavaScript
.over
— overlay
.pad
— add padding
.pick
— file input with image preview and dropzone
.pop
— popup component wrapper
.r
— align content to the right
.rad
— rounded corners
.read
— block width for comfortable reading
.roll
— horizontal scrolling of contents
.row
— row of grid
.shade
— add shadow
.shift
— shift item of .row
, .nav
, .pop
, .drawer
to the right
.small
— small font size
.stick
— stick block to the top
.swipe
— swipe detection
.tabs
— tabs component
.text-e
— nominal "red" text color
.text-i
— nominal "blue" text color
.text-n
— nominal "gray" text color
.text-w
— nominal "yellow" text color
.text-y
— nominal "green" text color
.toggle
— visibility is controlled by JavaScript, shown by default
.wrap
— reasonable page width limit
.yel
— temporary highlight targeted block
| Name | Category | Usage | Basic | Classic | Full |
|---|---|---|---|---|---|
| toggle | toggle | components | + | + | + |
| dialog | toggle | dialog | + | + | + |
| gallery | toggle | gallery | + | + | + |
| icons | decor | icons | - | + | + |
| fetch | url | fetch | - | + | + |
| calendar | form | calendar | - | + | + |
| lookup | form | lookup | - | + | + |
| edit | form | edit | - | + | + |
| form | form | checkboxes, color input, set value | - | + | + |
| valid | form | validate | - | + | + |
| tablex | table | interactive table | - | - | + |
| tools | decor | toggle class, responsive class | - | - | + |
| swipe | url | swipe | - | - | + |
| code | decor | highlight, sample | - | - | + |
| filter | items | filters | - | - | + |
| items | items | items | - | - | + |
| fliptable | table | responsive table | - | - | + |
| pickfile | form | file picker | - | - | + |
| store | form | store inputs | - | - | + |
| scroll | toggle | topbar | - | - | + |
| theme | decor | theme | - | - | + |


dquick.media.geometry
struct
Geometry
;
Old 3D geometry to a basic form that can easily transformed to Model/Mesh that is optimized for the CG
Page generated by
Ddoc
.


About #
Personal Summary #
🔬 I am a software engineer and data science researcher using Machine Learning with fluorescence spectroscopy for novel approaches to substance detection.
🧸 I am interested in the theory and praxis of the Web of Things and its related standards and protocols, as well as the use of Complex Event Processing for live data stream processing.
🧶 I have a variety of other hobbies: baking, crocheting, numismatics, beer brewing, among others.
Profiles #
You can find me here:


I am a web developer with a background in mechanical and automotive engineering. Since August 2020, I have been studying and applying myself in the field of web development. I've come to enjoy the process of collaborating with fellow developers and solving problems.
Skilled in technologies such as React, React Native, Node.js, Angular, and more. Seeking work in the field of front-end, full-stack, or mobile development.
View my CVI earned my full-stack web development certificate from CareerFoundry in March 2021. I studied under the guidance of an experienced mentor and an experienced tutor. I worked on a variety of projects, and I also had the pleasure of meeting and collaborating with other full-stack development students.
I earned my B.S in mechanical engineering in 2016. I have also spent two years working in the automotive industry and have held internships while studying for my engineering degree.
The technical nature of engineering has helped me understand problems I've encountered in web development.
During my career, I have worked extensively with: international engineering teams, domestic and international suppliers, technicians, and skilled workers.
Such experience will be of value when entering the collaborative world of web development.
I enjoy walking in state parks and playing soccer.
I have also volunteered at animal adoption centers in order to learn how to care for pets.
Let's get in touch
Located in Brentwood, NY


{% comment %} Rules Of Origin (RoO) Text Template for trade scenario TWUK_TA_GSP_trans: For countries with a UK trade agreement, or EPA (Economic Partnership Agreement) - but with a 2 year transition on GSP (Generalised Scheme of Preferences) access from the time that the trade agreement came into force. {% endcomment %}
The UK has a trade agreement with {{ country_name }}.
{{ country_name }} is also part of the UK’s Generalised Scheme of Preferences for a transition period of up to 2 years after the entry into force of the {{ trade_agreement_name }}.
Goods must meet the rules of origin to benefit from preferential tariffs (where available).
{% if rules_of_origin %} {% block rules_of_origin %} {% include "hierarchy/_rules_of_origin_table_explainer.html" %} {% include "hierarchy/_rules_of_origin_table_data.html" %} {% endblock %} {% endif %}


The front end of the WebApp can currently:
The logic-tier of the WebApp can currently:
The storage solution can currently:
The application allows users to create and set timers for a list of tasks to be completed by a certain time. The user receives periodic reminders in the browser about active timers as well as “constructive” criticism regarding how close their tasks come to expiring.
The features required to make Deadline Web Service usable are:
If there were extra time, we would like to add:
Building the priority features will require:
Deadline Web Service utilizes HTML to provide static content for the webpage the app is built in. It also uses CSS to style portions of the webpage and the React App. These aspects of the project demonstrate knowledge and skills gained during Sprint 5 (web development).
The core of the Deadline Web Service app is written in the JavaScript React framework, in order to make the app highly interactive in the browser. This provides the functionality that allows users to interact with the app. It also demonstrates knowledge and skills gained from Sprints 5 and 7 (web development and React development).
The logic-tier of Deadline Web Service is written in Golang. It establishes a connection to the MongoDB Atlas database and exposes endpoint APIs that the WebApp uses to save and load data persistently for users. This expands upon the main activity of Sprint 4 (client-server interactions in Golang with JSON).
Microsoft Azure is used to host the Deadline Web Service, a dockerized Go logic-tier, and the MongoDB Atlas database. GitHub is used to host the source code and is linked to the Azure deployment to provide CI/CD to the WebApp. Using Azure and GitHub demonstrates knowledge from Sprints 4 through 7 relating to Azure WebApp hosting, GitHub source code management, and CI/CD best practices.
Our time in class was more focused on single-page apps that did not have to perform any requests to other resources in order to function. Deadline Web Services does need to do this. Specifically, the front end of the WebApp (written in React) interacts with the storage solution (MongoDB Atlas) by performing asynchronous JavaScript fetch requests to the logic-tier (written in Golang), which performs the database query and returns some data. As an additional challenge, the logic-tier implements this interaction by exposing RESTful endpoint APIs. This means that the front end needs to POST JSON data within the request, instead of a simple GET request. The solution we implmented is to use JavaScript fetch() requests with the async / await syntax, which forces the WebApp to wait for the request to finish before continuing. This prevents data from being POSTed to the logic-tier out of order, which would cause issues with the database queries.


This is a pretty complicated formula, but it turns out it's pretty easy to break it down into steps.
Compute the means \(\overline{x}\) and \(\overline{y}\text{.}\)
Compute the sample standard deviations \(s_x\) and \(s_y\text{.}\)
Subtract the mean \(\overline{x}\) from each value in \(x\text{,}\) and the mean \(\overline{y}\) from each value in \(y\text{.}\)
Multiply the corresponding differences from \(x\) and \(y\) together.
Add them all up.
Divide the whole thing by \((n-1)s_x s_y\text{.}\)


If your browser supports bi-directional override (bdo), the next line will be written from right to left (rtl):
This is a paragraph.


Contents
This is a design document detailing the semantics of the fine-grained control of jobs in Ganeti. For the implementation there will be a separate design document that also describes the vision for the Ganeti daemon structure.
Control of the Ganeti job queue is quite limited. There is a single status bit, the “drained flag”. If set, no new jobs are accepted to the queue. This is too coarse for some use cases.
We propose to add filters on the job queue. These will be part of the configuration and as such are persisted with it. Conceptionally, the filters are always processed when a job enters the queue and while it is still in the queue. Of course, in the implementation, reevaluation is only carried out, if something could make the result change, e.g., a new job is entered to the queue, or the filter rules are changed. There is no distinction between filter processing when a job is about to enter the queue and while it is in the queue, as this can be expressed by the filter rules themselves (see predicates below).
Filter rules are given by the following data.
A UUID. This ensures that there can be different filter rules that otherwise have all parameters equal. In this way, multiple drains for different reasons are possible. The UUID is used to address the filter rule, in particular for deletion.
If no UUID is provided at rule addition, Ganeti will create one.
The watermark. This is the highest job id ever used, as valid in the moment when the filter was added. This data will be added automatically upon addition of the filter.
A priority. This is a non-negative integer. Filters are processed in order of increasing priority until a rule applies. While there is a well-defined order in which rules of the same priority are evaluated (increasing watermark, then the uuid, are taken as tie breakers), it is not recommended to have rules of the same priority that overlap and have different actions associated.
A list of predicates. The rule fires, if all of them hold true for the job.
An action. For the time being, one of the following, but more actions might be added in the future (in particular, future implementations might add an action making filtering continue with a different filter chain).
A reason trail, in the same format as reason trails for opcodes. This allows to find out, which maintenance (or other reason) caused the addition of this filter rule.
A predicate is a list, with the first element being the name of the predicate and the rest being parameters suitable for that predicate. In most cases, the name of the predicate will be a field of a job, and there will be a single parameter, which is a boolean expression (filter) in the sense of the Ganeti query language. However, no assumption should be made that all predicates are of this shape. More predicates may be added in the future.
Draining the queue.
{'priority': 0,
'predicates': [['jobid', ['>', 'id', 'watermark']]],
'action': 'REJECT'}
Soft draining could be achieved by replacing REJECT by PAUSE in the above example.
Pausing all new jobs not belonging to a specific maintenance.
{'priority': 1,
'predicates': [['jobid', ['>', 'id', 'watermark']],
['reason', ['!', ['=~', 'reason', 'maintenance pink bunny']]]],
'action': 'PAUSE'}
Canceling all queued instance creations and disallowing new such jobs.
{'priority': 1,
'predicates': [['opcode', ['=', 'OP_ID', 'OP_INSTANCE_CREATE']]],
'action': 'REJECT'}
Since queue control is intended to be used by external maintenance-handling tools as well, the primary interface for manipulating queue filters is the Ganeti remote API. For convenience, a command-line interface will be added as well.
The following resources will be added.
Filtering of jobs is not a security feature. It merely serves the purpose of coordinating efforts and avoiding accidental conflicting jobs. Everybody with appropriate credentials can modify the filter rules, not just the originator of a rule. To avoid accidental lock-out, requests modifying the queue are executed directly and not going through the queue themselves.


CHAPTER 17
THE LOADING AND SECURING OF THE CARGO
17.1
The Loading
The loading commenced at about 17.00 hours and was supervised by the 2nd mate Tormi Ainsalu assisted by some of the deckhands, such as Valdur Matt, Arne Koppel, Aulis Lee and others. Subsequently also the trainee mate Einar Kukk attended.
According to the surviving crew members having worked on the car deck, the hanging decks had not been in use and the car deck had been full with trucks and cars.
The available cargo documentation consists of the cargo manifest which was received from the Joint Accident Investigation Commission in the early days of the investigation and was said to reflect the description and numbers of trucks/trailers actually loaded, see Enclosure 17.1.211. Only recently the freight manifest - Enclosure 17.1.212 - and the customs list - Enclosure 17.1.213 - were received.
Both the cargo manifest and the freight manifest initially contained 38 trucks - although in the consecutive numbering a 39th and 40th truck had been included, of which the 39th was added in handwriting on both manifests. The recently received customs list however reveals that there were actually 40 trucks and trailers loaded.
According to the customs list the 40th truck, missing on the cargo manifest although the consecutive number on the manifest - 43 744 - had been left open, was a Scania truck with the registration no. AG 565 and with the Latvian driver Gunnar Gobins ((). Since the customs list does not state dimen-sions, weight or type of cargo, no more details are known. The 39th truck added to the cargo manifest in handwriting under the consecutive no. 43 749 was also a Scania truck with the registration no. NRY 806 and with the Swedish driver Leo Sillanpää ((). In the freight manifest - Enclosure 17.1.212 - which is the cargo manifest with added freight figures, both trucks are missing although the consecutive numbers 43 744 and 43 749 were left open. It is unknown whether this means that these trucks were carried free of charge and whether this could mean that these are the two trucks escorted into the port and on board by military personnel. (See Subchapter 17.3.)
Note: According to information received from a prisoner in the jail of Vaasa/ Finland (after the Luttunen interview) his friend Leo Sillanpää was the driver of a truck which had plutonium hidden between the regular cargo.
It is also evident from the customs list that the truck or trailer no. 46 with the number plate 417 EEE had no driver registered. It is thus possible that this was the truck or trailer which had been shipped on board the ESTONIA on the basis of incorrect documents and which contained between 148 and 174 Iraqi Kurds according to information from the files of the public prosecutor Tomas Lindstrand, Stockholm.
According to the statement of an Estonian lawyer, someone from Estline, Stockholm flew to Tallinn by the first plane on the morning of the catastrophe, collected all the cargo and passenger documentation available and flew back by next plane to Stockholm, whereafter the cargo manifest was made up. According to other sources the Estonian Security Police collected already in the early morning hours of the 28th the complete cargo documentation from the Estline office in Tallinn.
The responsible customs chief of Frihamn Terminal, Stockholm told Spiegel TV that they had always received the cargo manifest on the evening of the departure by fax, which, however, had not been the case on the evening of 27 September 1994. Even after several reminders they received the cargo manifest only in the afternoon of 28 September 1994 from Estline, Stockholm.
On the other hand, there is another 'cargo manifest' available, which, according to the print-out at the top of the pages, had already been sent at 18.38 hours on 27 September 1994, i.e. more than 30 minutes before the departure of ESTONIA, from Estline, Tallinn to presumably Estline, Stockholm. In any event, on 29 November 1994 it was sent by N&T to Industrietechnik, which was the old firm of Börje Stenström, where he worked until his retirement in April 1995, and from whom a member of this 'Group of Experts' received it in March 1995.
Although the contents appear to be identical on both 'cargo manifests' which were made up by the same E. Kurvits, the handwriting at the end of page 4 is different. This 'cargo manifest' is attached as Enclosure 17.1.214.
Consequently there were doubts from the beginning as to whether the submitted 'cargo manifest' actually reflects all the trucks/trailers having been on board and these doubts have now been confirmed by the customs list hidden for so long, as explained on the previous page. In fact, this list was sent already on 14 October 1994 by fax from the Finnish Embassy, Tallinn, to the head office of the criminal police, Helsinki.
The combined weight of all trucks/trailers was 970 ts according to the cargo manifest - Enclosure 17.1.211 - and the JAIC states the total truck/trailer-weight to have been 1000 t, therefore it has to be assumed that the weight of the 40th truck was 30 t.
On the basis of these weights a stowage plan has been made up always bearing in mind that as much weight as possible had to be placed on the starboard side. The stowage plan is attached as Enclosure 17.1.215 and reveals that it was impossible to place enough weight on the starboard side to create the alleged departure condition. There must have been about 200 tons of weight more at the starboard side elsewhere in the ferry.
This is confirmed by the calculations of Shipconsulting Oy, Turku - see Enclosure 17.1.194 - according to which there must have been about 200 tons more weight at the starboard side. Such a weight distribution would have created a 10° starboard list without the full port - and the empty starboard heeling tanks, which allegedly reduced the list to 1° starboard.
According to survivors trucks and trailers had been more or less equally distributed between the port and the starboard sides of the car deck, thus, a wrong loading of the car deck cannot have been the reason for the excess weight at the starboard side. Consequently it has to be assumed that there has been water in tanks and/or void spaces at the starboard side which was unpumpable. The reason could be that these spaces were holed and thus connected to the outside and therefore could not be pumped empty at all, e.g. the starboard heeling tank.
An indication for such reason could be the image from the "Mudline video", shown below which was made during the diving investigation between 1 and 4 December 1994 - See Chapter 27. The image evidently shows a big hole in way of the starboard hull -/bottom plating area probably in way of the bilge strake. The enhancement of this part of the video tape by means of special equipment confirmed that the plating was indeed holed. - See Subchapter 34.6.
Those who know about this issue remain silent and so does the JAIC although they had the right and obligation to ask the relevant questions.
The responsible director of the technical managers and part-owners N&T, Sten-Christer Forsberg, replied when being interviewed by Erik Ridder-stolpe on 10.12.97 - Q: "The vessel was loaded totally wrong at Tallinn?" A: "The wrong loading is regrettable. It would, however, have happened to any other crew!"
This indicates that the "wrong loading" could have occurred independently of what the crew did or could have done, i.e. it has nothing to do with the loading of the car deck but was caused by circumstances beyond the control of the crew, e.g. the holed bottom plating.
17.2
Testimonies concerning Cargo LashingsThe evidence available in respect of the securing of trucks/trailers and other vehicles is naturally controversial. While the crew members testified to having secured all the trucks and trailers, though in different ways, this is confirmed by only very few of the truck drivers/personal car drivers. The majority of the drivers state that the trucks and trailers as well as the personal cars remained unsecured. The truth is probably somewhere in between, i.e. probably the trailers without own truck and the trucks loaded first were secured to the deck with belts, some additional trucks having wedges in front of and behind the wheels, and a certain number of trucks coming on board last as well as all vans and personal cars were not secured at all. This with certainty had also been the case with the truck and trailer of Per-Arne Persson according to his statement from which the following is quoted:
»Has made at least 15 trips on "Estonia". The actual voyage was made with a Volvo truck , type F12, reg. no. MOW 996, with trailer no. AN 069. Persson left his truck with trailer on the car deck as per drawing below which is attached to his statement.
Accordingly the vehicles were placed next to the forward port side of the centre casing with the aft end of the trailers being only about 20 m away from the bow ramp. Truck and trailer were loaded with plywood. The trucks were not secured by any means, they were just standing there without any fastenings. Persson did not note any other routine than on the previous voyages. As the vehicles were again placed so close together that any securing was impossible, he shouted to the crew: "You will never secure the trucks."«
The truck is entered into the 'cargo manifest' under running no. 43773, the weight of truck, trailer and plywood cargo was 55 ts, the distance to the bow ramp was only about 20 m and the truck was not secured because this was not possible due to the limited space between the trucks. The complete statement with drawing is attached as Enclosure 17.2.216.
In order to get a better picture, the respective parts of the statements from crew members and passengers having been on the car deck during and after the loading shall be quoted below:
Einar Kukk - trainee officer in his statement on 29.09.94 at Turku - Enclosure 17.2.217).
- »I commenced this additional training on the "Estonia" on 27.09.94 at 16.20 hours when the loading of the trucks began. I myself was on the car deck until 18.45 hours. I remember that at that time all large trucks had already been taken over and just the personal cars had to be loaded. The loading of those cars was carried out by the 2nd mate. I can only recall his first name, Tormi, his surname is unknown to me. As far as I know, he was in charge of the loading.
As to the question whether the vehicles loaded were secured to the vessel I can reply: Each large truck was secured to the vessel. The personal cars, in my opinion, were not secured, however wedges had been placed in front of the wheels. I know nothing about a possible later securing. The question whether I was on the car deck until the last truck had been loaded I am unable to answer with certainty, because I left the deck some time before the loading had been completed.
As to the question how and in what sequence the loading was carried out I can reply: Loading in the port of Tallinn was performed via the bow ramp by at first taking on board the heavy trucks, which were placed in the stern part of the vessel and secured. Into the forepart of the vessel the smaller trucks and personal cars were loaded. Into the middle part there were also large and smaller trucks.
As far as I remember the car deck was full with cars.«
A.B. Aulis Lee at Tallinn on 29.09.94 - Enclosure 17.2.218.
- »During loading of the cars I was on the car deck. There were a lot of trucks/trailers. The vehicles were placed by the 2nd mate. It was our job to make sure that the trucks got their right place. All cars were secured to rings. Only trailers and large trucks were secured by belts to the deck.«
Note: This does not make much sense and has possibly been translated incorrectly.
Car deck worker (Lagerarbeiter) Valdur Matt at Tallinn on 29.09.94 - Enclosure 17.2.219.
- »I saw for myself and I was myself busy with fastening the trailers to the car deck. Each trailer was secured by four belts. I do not know exactly how many trailers there were on board on the car deck. Before the ferry's departure I had secured the trucks on the right side of the car deck. Passenger cars were not secured by wedges. The passenger cars had gears in shift and the hand-brake tight. Towards the bow there were two personal cars. The distance between the trucks is short, or narrow, not more than ten centimetres.
The placing of the trailers is very exact. On the right side the trucks are in 3 lanes. Trailers are placed in a row, one after the other along the yellow line. The personal cars stood in the forward part. There was no free space on the car deck. The personal car deck (hanging deck) was in its normal, common position. I want to point out that this time the trailers were in a line at the outer deck. In the third line there were trucks. I can guarantee that the visor was closed. The locks were closed by an hydraulic lock.«Also a number of passengers, some of them truck drivers, have made valuable statements as to loading and securing, which shall be quoted in the following:
Truck driver Stephan Duijndam at Turku on 30.09.94 - Enclosure 17.2.220.
- »When I am now asked why I was on the "Estonia" I reply that I was on a working trip carrying fish and peat by truck from Estonia to Holland and Belgium.
As already mentioned during the introductory hearing with the police, the truck was not secured at either side after we had driven on board in Tallinn. This is true and I remember that I therefore asked a crew member on the car deck, whose appearance I do not remember as I came rather late to the vessel and we were in a great hurry. I seem to remember that the man was wearing an orange boiler suit.
I remember that this man said repeatedly "nix problem" - "no problem" and did not give any other explanation. I remember that the vessel was almost full of cars and, at least, my truck and also the other trucks in the surroundings were not secured to the vessel.
I have been driving this route regularly every week between Holland - St. Petersburg - Holland - Estonia, and I remember that generally, when bad weather was expected, the trucks were secured to the vessel by chains. Now there were so many cars that it was apparently considered to be too difficult due to the tight positioning of the trucks to each other and time was also short when I came on board. Loading had apparently been carried out in a hurry.«
Cargo manifest no. 43763.Truck driver Eckard Klug on 01.10.94 - Enclosure 17.2.221.
- »Klug had a truck with trailer. The car deck was locked during the voyage. It was quite narrow on the car deck during the voyage. The cars were stowed quite close together and the driver of each truck had to get out of his driver's cabin before the next truck was parked. Klug's truck was not secured. It had never been secured on any of the other voyages. Klug stated that he had been travelling on the ferry on this particular route ca. once a week for the last 11/2 years.«
1 truck Reg. no. DDG 182
1 trailer Reg. no. AZW 134
cargo: Textiles
Cargo manifest no. 43766Passenger Tambet Herbert Lausma at Tallinn on 29.09.94 - Enclosure 17.2.222.
- »I was on board with the car M 2141 and 743 AEV. Before leaving the car deck I pulled the brakes tight and locked the doors. The car was not secured. The car was parked on the right side of the car deck looking from forward. I did not check the car during the casualty.«
Truck driver Jaak Mullo at Tallinn on 29.09.94 - Enclosure 17.2.223.
- »I had on board a truck of type Ford without trailer. I did not note whether my car was secured or not. The cars stood so close together that there was no space anyway for securing. My vehicle was parked in the aft part of the vessel, almost against the stern ramp. Before me was just a parcel truck. During the casualty it was impossible to check how it stood with the car.«
Cargo manifest no. 43750.Part-Statement of Mikael Öun - Enclosure 17.2.224.
a.) taken by criminal police Helsinki 29.09.94:
»I drove in my truck, which was a so-called 10-tonner, 9 m long, to the left side of the car deck looking from forward. In Tallinn the cars are always driving on board from forward, my truck was placed as 2nd last car astern. Before me was a small delivery van. On the car deck there are 4 car lines and my car was placed in the 2nd line seen from the wall. Before I left the truck I pulled the hand-brake and locked the truck. Directly after departure I did some tax free shopping, whereafter I went back to the car deck and put my shopping into the truck. This must have been before 19.30 hours, because the doors to the car deck are locked half an hour after departure.«b.) taken by criminal police Södertäljë on 04.10.94 - Enclosure 17.2.225.
Travelled together with Tamara Alep. They had brought donation goods to the Estonian Help Centre by the Scania truck, type P 93, reg. no. AEC 769, which was now empty.
He reported that immediately after departure he had been down to his truck to find out whether it would be at all possible to get into it. After he had been down to the truck he went back up and into a shop to buy some things, which he subsequently took down to the truck. This took about half an hour after the vessel had left Tallinn. Mikael reported that he had been completely alone on the car deck, there had been nobody except himself. He does not remember whether the cars were secured. He believes to recall that he saw some wedges behind some wheels. Cargo manifest no. 43757.Truck driver Indrek Pungar at Tallinn on 28.09.94 - Enclosure 17.2.226.
- »On board I had my truck, type Volvo with registration no. 125 TAU, 10 m long. It was not secured to the deck nor to the ceiling of the deck. I myself shifted in the gear and pulled tight the manual brake. A voice shouted alarm when the vessel was sinking and the people were already out.« Cargo manifest no. 43767.
Passenger Hannu Seppänen on 05.10.94 - Enclosure 17.2.227.
- »He drove his car on to the car deck and went straight to his cabin. He had already made about 30 trips on the "Estonia". While Seppänen was sitting in the Night Club he felt heavy shaking of the vessel. This shaking really made the vessel vibrate and although Seppänen was not uneasy that the vessel might sink, he nevertheless began to think about whether the trucks were really well secured. When he had parked his car on the car deck he saw that 2 trailers were fastened by 2 ropes. According to Seppänen this looked like a rather weak lashing. A lashing which could hardly hold if the trailers started to move. He did not observe any other securing arrangement. He had not been down to the car deck during the passage because the doors were locked.«
Passenger Tony Spuhl on 06.10.94 - Enclosure 17.2.228.
- »In the port of Tallinn Tony Spuhl drove on board with his Volvo 740, silver metallic, reg. no. CWD 853. The vessel was berthed in such a way that one could only drive in by the bow. He drove in to the port side, parked on the port side and had a truck parked beside his car. When he looked forward in driving direction it looked as if the vessel was full of trucks. Tony Spuhl stood with his car in driving direction towards aft. He noted that the truck which stood to the left of his car was not secured to the deck.«
Truck driver Ainus Toobal at Tallinn on 29.09.94 - Enclosure 17.2.229.
- »I had a Volvo 1613 on board. I drove on board in the middle of the left side, closed the truck door and went up. I did not see whether or not the truck was secured. I can say nothing about the cause of the casualty but that at the vessel's forepart, where the cars are driving in, water had started to flood in.«
Truck driver Raivo Tönisson at Tallinn on 29.09.94 - Enclosure 17.2.230.
- »The only one I knew on board was a distant relative with first name Jaak (ca. 30 years and chauffeur). On board I had my truck, Volvo SH 12, reg. no. 533 EEB. Cargo was milk powder. I left the car deck a quarter of an hour after the ferry's departure. Up until then the truck had not been secured apart from the hand-brake, which I pulled tight myself. At 20.00 hours the car deck was locked and consequently I could no longer go down to the truck. On the day before the casualty, when I came with the vessel from Sweden, my truck was not secured.« Cargo manifest no. 43775.
Passenger Rein Vaaske at Tallinn on 29.09.94 - Enclosure 17.2.231.
- »They drove on board from forward at ca. 18.40 hours. The car was regis-tered under Ella Vaaske. It had the reg. no. ODT 471 and was a Toyota Helux Pick-up, 4-wheel drive, dark grey and a '89 model. It was Rein Vaaske who drove on board the ferry. Rein V. drove the car to the left side of the ferry, i.e. the starboard side. He said that the number of personal cars was not that large, instead there were a large number of trucks on the ferry. Rein V. said that he drove about 30 m inside, then it was full ahead of him. There appeared to be not so many trucks on the right side, i.e. port side of the ferry. R. Vaaske went down again to the car deck when the vessel had just begun to move away from Tallinn to pick up a cushion which he had left behind. At this time he noted that cars were also parked behind his car. He did not have a closer look whether the trucks were secured. He did not think about it. He did not see anybody securing cars when he drove on board.«
Passenger Holger Wachtmeister on 01.10.94 - Enclosure 17.2.232.
- »He had made 10 trips on "Estonia", always with his car. He had never seen that his car was secured nor had he ever seen that other cars or trucks were secured.«
In summary of the above quoted statements it has to be concluded that naturally the crew members having worked on the car deck do state that all trucks/trailers were secured, whilst Einar Kukk said, the personal cars had wedges in front of the wheels, Valdur Matt stated, passenger cars were not secured by wedges.
As to the passengers including truck drivers a total of 14 stated something about parking/securing their trucks/cars on the car deck, of which 10 testified that their trucks/cars were not secured and also that they had not seen any other secured or properly secured trucks/trailers/cars and 3 did not know or were unsure.
The conclusion of this 'Group of Experts' is that it has to be assumed that the trailers without own truck and the trucks loaded first were secured to the deck by belts, that some additional trucks had wedges in front of and behind the wheels, and that a certain number of trucks, which had come on board last, and all vans and personal cars were not secured at all. This refers also to the truck/trailer of Per-Arne Persson, 24 m long, 55 ts. weight and only 20 m behind the bow ramp, and to the heavy garbage containers stowed between the centre casing and the bow ramp and in the aft part.
There are rumours that Estline had informed the freight forwarders around noon of 27 September 1994 that bad weather had to be expected and that the cargo in/on the trucks had to be secured. It is, however, unknown whether any cargo in the trucks was secured at all. In any event, when the last car had rolled on board the car deck was practically full and the vessel reportedly had a 1° list to starboard.
This weighs particularly heavy since as of noon the south-west storm warning was known to those in command of ESTONIA, i.e. the storm would be hitting the ferry from port, which would increase the already existing starboard heel further. Under these circumstances it would have been not only a matter of good seamanship but a question of ship safety to plan the loading of the car deck in such a way that there was more weight at the port side to compensate for the heeling moment to be expected due to the wind pressure on the port side. See the statement of Captain Per Ringhagen - Enclosure 5.3.111.
This would have been of particular importance because the heeling tanks could not be used to adjust the heeling to be expected. The engineer on watch in the engine control room before and at the time of the casualty - Margus Treu - has consequently testified in his first statement on 29.09.94 at Turku, inter alia:»The port heeling tank was full, but a starboard list of 1° remained. This was, in my opinion, one of the causes of the casualty, because later when the vessel was heeling to starboard there was no possibility to counteract.«
According to information from Tallinn, about half an hour before the loading of the car deck was completed two big trucks were escorted on board by military personnel whereby the whole area around ESTONIA's berth was shut off by military forces. This was also the reason why passenger Carl Övberg almost missed the ferry, because his friend could not drive - as usual - to the terminal building to drop Carl off in time. He just made it and as soon as he was on board the gangway was pulled in - see the statement Carl Övberg - Enclosure <IP_ADDRESS>. Names and ranks of the soldiers having escorted the two trucks on board are known to this 'Group of Experts'.
Reportedly the two trucks were loaded with sensitive military equipment of unknown origin which were sent by the Estonian Army directly to the Swedish military for on-transport to another Western country. The transport was accompanied by militaries of unknown nationality who were not identified as such on the passenger list respectively who were probably not even entered on the passenger list.


{% include 'portal/header.html' %}
{% if sems['sem1']=="1" %}
Semester I
{% elif current=="sem 1" %}
Semester I
{% else %}
Semester I
{% endif %}
PhD Course Work
Research Methodology
Subject Specific Course Work
Commencement of Instructions
End of Instructions
End Semester Examination Duration
{% if sems['sem2']=="1" %}
Semester II
{% elif current=="sem 2" %}
Semester II
{% else %}
Semester II
{% endif %}
PhD Course Work
Subject Specific Course Work
Proposal presentation to Research Advisory Committee
Proposal revision (if required) as per suggestions by RAC and Final Proposal Submission to RAC
Annual Progress report seminar presentation to RAC
Approval of the Annual Progress report by BOR
{% if sems['sem3']=="1" %}
Semester III
{% elif current=="sem 3" %}
Semester III
{% else %}
Semester III
{% endif %}
Two Review Meetings of Departmental Research Committee* to check the progress of the candidates
Duration for Literature Review by research scholar
Presentation on literature review to RAC & Review report submission
Conference/ Seminar Paper Presentation on Literature Review
{% if sems['sem4']=="1" %}
Semester IV
{% elif current=="sem 4" %}
Semester IV
{% else %}
Semester IV
{% endif %}
Two Review Meetings of Departmental Research Committee* to check the progress of the candidates
Design of Experimental setup / data collection / Program implementation / design products etc.
Annual progress report presentation to RAC
Conference/ Seminar Paper Presentation on Literature Review
{% if sems['sem5']=="1" %}
Semester V
{% elif current=="sem 5" %}
Semester V
{% else %}
Semester V
{% endif %}
Two Review Meetings of Departmental Research Committee* to check the progress of the candidates
Further continuation of research work as per research plan
Writings of Initial Chapters
Paper Publication (In the Journals approved by BOR & recommended by RAC)
{% if sems['sem6']=="1" %}
Semester VI
{% elif current=="sem 6" %}
Semester VI
{% else %}
Semester VI
{% endif %}
Data Analyis
Compilation of Final Chapters
Pre Thesis Submission & Viva


This plugin runs your jobs using .travis.yml file in your project.
Plugin Information |
|---|
View Travis YML on the plugin site for more information. |
Use
Install by navigating and selecting Manage Jenkins -> Manage Plugins -> Travis YML Plugin
Add to your workspace on the root folder a .travis.yml, this plugin accept the next phases of lifecycle:
- before_install
- install
- before_script
- script
- after_success
- after_failure
- before_deploy
- deploy
- after_deploy
- after_script
If you have any failure on your build and want to review the final generated, you should declare the environment variable DEBUG_TRAVIS_YML either on your build node or in jenkins.
ChangelogVersion 0.2.2 (13 Nov, 2016)
- Added debug mode
Version 0.2.1 (23 Oct, 2016)
- fix echo not escaping first parameter.
- export enviroment variables escape non alpha-numeric character identifiers
Version 0.2.0 (19 Oct, 2016)
- Escape complex bash commands echo problem.
- Added expansion of enviroment variables
- Support "before_deploy", "deploy" and "after_deploy"
Version 0.1.0 (30 Jul, 2014)
- Initial release to jenkins-ci.org
- Support "env" in .travis.yml
- Support "before_install", "install", "before_script", "script", and "after_script" in .travis.yml
- Support "after_success" and "after_failure" in .travis.yml
Know Issues
.travis.yml build not save
downgrade 'ruby-runtime' plugin back to v0.12
ChangeLog
Attachments:
Logomakr_5059hu.png (image/png)


Deprecated
src/ApiTagTest.php deprecated: 2
src/NamespaceTestData.php deprecated: 3
Line |
Element |
Reason |
|---|---|---|
Will be removed in 2.0.0 |
||
Will be removed in 2.0.0 |
||
Will be removed in 2.0.0 |


. ____ . ____________________________ |/ \| | | [| ♥ ♥ |] | Nothing to see here !!!!!! | |___==___| / © Parantido | |____________________________|


Add More Debits
All Debit Records |
Total authorized amount: {{ get_sum_amount().amount | currency:' ':'symbol':'1.0-0' }} Taka |
Total unauthorized amount: {{ get_sum_amount().un_amount | currency:' ':'symbol':'1.0-0' }} Taka |
||||
|---|---|---|---|---|---|---|
| Debit Head | Description | Expended by | Added by | Amount in Tk | Expended at | Record added at |
| {{ data.expend_heading_name | titlecase }} | {{ data.description | uppercase }} | {{ data.expend_by | titlecase }} | {{ data.added_by | titlecase }}Not Authorized | {{ data.amount | currency:' ':'symbol':'1.0-0' }} | {{ data.expend_date | date:'fullDate' }} | {{ data.added | date:'fullDate' }} |


Problem 2. Reverse number
Write a function that reverses the digits of given decimal number.
You could use Chrome console (F12) or Firebug to see the results.


You're about to permanently delete this issue, its comments and attachments, and all of its data.
If you're not sure, you can cancel and close this issue instead.


Zerome:
What is it? A suspicious person? Well, I haven't see any.
Oh, wait! The person that you're describing went into town not long ago. I don't know what's going on, but it hasn't been long -- you might still be able to find him in the town.


Universal Basic Income could replace Universal Credit
The radical plan for a new system is getting closer
by Liam ThorpThe ECHO has been running a series of features on the prospect of a new Universal Basic Income being brought in for UK citizens.
Last week we reported how the idea of radically changing the benefits system in this country to remove the controversial Universal Credit and replace it was a basic income for all are getting closer - and could actually start in Liverpool.
But how much would each person actually get under a UBI system?
A Basic Income, also known as a Universal Basic Income (UBI), is a regular payment from the state to everyone, regardless of their income or employment status. Proposals for a Basic Income range from £50 per week for every adult to over £100 per week for every adult and child.
Supporters believe that a Basic Income would guarantee everyone the right to basic financial security by providing a regular income boost for millions in Britain.
Some suggest a UBI could start with everyone receiving an initial basic income of £2,400 a year for adults - with £1,500 paid to every child.
The idea would be to eventually double the adult payments to £4,800 per person - which would work out at £400 per month.
It is thought that extra support payments would then be added on to a basic payment for those with additional needs such as disabilities.
How likely is all this to actually happen?
Well that of course very much depends on what happens in next month's General Election.
Shadow Chancellor John McDonnell has already stated Labour's plans to trial the idea of a Universal Basic Income if his party wins power.
He has also stated that Liverpool - an area hit hard by benefit cuts and issues - would likely be one of the first cities to be included in the pilot test.
Earlier this year he said: "I’d like to see a Northern and Midlands town in the pilot so we have a spread."
“I would like Liverpool – of course I would, I’m a Scouser – but Sheffield have really worked hard. I’ve been involved in their anti-poverty campaign and they’ve done a lot round the real living wage.
"I think those two cities would be ideal and somewhere in the Midlands.”


cats that we love so much
See owner, run in terror under the bed Cat ipsum dolor sit amet, stand in front of the computer screen or sun bathe. Annoy owner until he gives you food say meow repeatedly until belly rubs, feels good stand in front of the computer screen cough furball for chew on cable put toy mouse in food bowl run out of litter box at full speed wake up human for food at 4am. Kitty scratches couch bad kitty scratch the furniture with tail in the air run outside as soon as door open nap all day howl uncontrollably for no reason. Purr when being pet friends are not food yet climb a tree, wait for a fireman jump to fireman then scratch his face burrow under covers scratch leg; meow for can opener to feed me for purr for russian blue.


{%- comment -%} {%- include nav/crumbs.html nodes = array -%} outputs breadcrumb navigation links for the nodes, and the title of the current page. {%- endcomment -%} {%- for node in include.nodes -%} {{ node.title }} {%- endfor -%} {{ page.title }}


Transportation & Accessibility – Property Redevelopment (VII.7.)
Property redevelopment needs to:
the existing transportation systems to create future development opportunities.
State, regional, and local transportation authorities are critical for the planning, authorization, and funding of new and/or improved transportation systems.


Track page visitors and used devices on you page. If activated you can limit the tracking individualy.
 This will include daily, monthly and yearly visitors.
Capture the devices of your visitors. You can see if your page visitors are more likely on your page with their phone, tablet or laptop.
You can provide your website in as many languages as you want.
Select all languages you want to display your website in.
We will try to detect the visitors browser language and show the correct language content. If the language does not exits, which one should we show as default?


| bootstrap-utils {shinyWidgets} | R Documentation |
Create a panel (box) with basic border and padding, you can use Bootstrap status to style the panel, see https://getbootstrap.com/docs/3.4/components/#panels.
panel( ..., heading = NULL, footer = NULL, extra = NULL, status = c("default", "primary", "success", "info", "warning", "danger") ) alert( ..., status = c("info", "success", "danger", "warning"), dismissible = FALSE ) list_group(...)
... |
UI elements to include inside the panel or alert. |
heading |
Title for the panel in a plain header. |
footer |
Footer for the panel. |
extra |
Additional elements to include like a table or a |
status |
Bootstrap status for contextual alternative. |
dismissible |
Adds the possibility to close the alert. |
A UI definition.
# Panels --------------------------------- library(shiny) library(shinyWidgets) ui <- fluidPage( tags$h2("Bootstrap panel"), # Default panel( "Content goes here", ), # With header and footer panel( "Content goes here", heading = "My title", footer = "Something" ), # With status panel( "Content goes here", heading = "My title", status = "primary" ), # With table panel( heading = "A famous table", extra = tableOutput(outputId = "table") ), # With list group panel( heading = "A list of things", extra = list_group( "First item", "Second item", "And third item" ) ) ) server <- function(input, output, session) { output$table <- renderTable({ head(mtcars) }, width = "100%") } if (interactive()) shinyApp(ui = ui, server = server) # Alerts --------------------------------- library(shiny) library(shinyWidgets) ui <- fluidPage( tags$h2("Alerts"), fluidRow( column( width = 6, alert( status = "success", tags$b("Well done!"), "You successfully read this important alert message." ), alert( status = "info", tags$b("Heads up!"), "This alert needs your attention, but it's not super important." ), alert( status = "info", dismissible = TRUE, tags$b("Dismissable"), "You can close this one." ) ), column( width = 6, alert( status = "warning", tags$b("Warning!"), "Better check yourself, you're not looking too good." ), alert( status = "danger", tags$b("Oh snap!"), "Change a few things up and try submitting again." ) ) ) ) server <- function(input, output, session) { } if (interactive()) shinyApp(ui, server) # List group ----------------------------- library(shiny) library(shinyWidgets) ui <- fluidPage( tags$h2("List group"), tags$b("List of item:"), list_group( "First item", "Second item", "And third item" ), tags$b("Set active item:"), list_group( list(class = "active", "First item"), "Second item", "And third item" ) ) server <- function(input, output, session) { } if (interactive()) shinyApp(ui, server)


GAA say there are no plans to bring gaelic games to Anfield despite Liverpool announcement
by Conor McKeonTHE GAA say there are no plans to bring gaelic games to Anfield or any other English football stadium despite an announcement from Liverpool that they intend to host GAA events after the completed redevelopment of their home ground.
The Premier League club today unveiled plans to expand their Anfield Road stand by adding 7,000 seats in a new scheme which will take the ground's capacity to 61,000.
Their chief operating officer Andy Hughes told the club's official website: "The plans for the proposed Anfield Road Stand expansion include exploring the opportunity for permanent permission to hold concerts and other major events at Anfield, including other sporting events such as Gaelic games and American football outside of the matchday calendar."
A spokesperson for the GAA confirmed to Independent.ie that no discussions had taken place between anyone at the Premier League club and the GAA and that there are currently no plans to stage any such event in an English ground.
It is, however, a possibility given the existing link between the Fenway Sports Group (FSG) that owns Liverpool and the GAA.
Fenway Park hosted the hurling 'Super 11s' in 2015, '17 and '18 before it was moved to New York's Citi Field this year.
In the past, FSG have also staged American football games, concerts and in February, a sport known as ice cross downhill at the iconic home of the Boston Red Sox.
There is, however, only scope to play 11-a-side hurling or a similarly amended version of gaelic football at Anfield as the pitch is too small to host a 15-a-side match.
The size of the current Anfield pitch is 101m x 68m.
Official GAA rules say that all playing surfaces must be 130 metres minimum in length and 80 metres in width.


--- layout: default author: name: Blair Rorani --- {{ page.author.link }} {{ content }}
👈 Read something else


The paper presents Toolformer, a language model that uses simple APIs to use external tools (calculator, QA system, search engine, translation system, and calendar).
Starting with a language model, M, the goal is to enable the language model to use tools by invoking API calls.
An API call is denoted by the tuple $c =$ (api_name, api_input). It can be linearized as $e(c) =$ [api_name(api_input)$]$ or as $e(c, r) = [$api_name(api_input) $ -> r]$ where $r$ denotes the result of the API.
The given dataset of plain text, $C$, is converted into a dataset $C*$ augmented with the API calls using a three-step process.
In the first step, a position ($i$) and API call candidates (for the position $i$) are sampled.
Positions are sampled by (i) computing the probability that M assigns to starting an API call for each position and (ii) retaining the top-$k$ positions with a probability greater than a threshold value.
For each of the sampled positions (say $i$), API calls are sampled by concatenating a prompt to the tokens till index $i$ and sampling from the model M. Examples that do not generate the “end of the API” token (i.e.,”]”) are discarded.
In the second step, the API calls are executed to obtain response $r$ (text sequence).
In the last step, the remaining API calls are merged to obtain the augmented dataset $C*$ that is used for finetuning M.
Note that $C*$ contains $C$, so M is finetuned on the original dataset and examples where a tool is helpful.
During inference, the model is used for decoding in the usual way. Decoding is stopped when it produces the “->” token, and the corresponding API is used to generate the response. The decoding process (using the model) resumes with the API output appended to the decoded text.
There are two constraints on the tools: (i) their input and output should be expressible as text, and (ii) few demonstrations can be obtained from the tools. The second constraint means that the tool should be useable or accessible.
The paper considered the following tools: a question-answering system, a Wikipedia search engine, a calculator, a calendar, and a machine translation system. Of these, only the calculator and calendar are non-neural network tools.
Subset of CCNet is used as the language modeling dataset.
GPT-J is used as the language model.
For finetuning, the batch size is 128, the learning rate is 1e-5, and a linear warmup for the first 10% of training is used.
Following models are compared:
GPT-J: Regular GPT-J model without any finetuning.
GPT-J + CC: GPT-J finetuned on $C$ without any API calls.
Toolformer, i.e. GPT-J finetuned on $C*$.
Toolformer with API calls disabled during training.
OPT 66B
GPT-3
The models are evaluated in the prompted zero-shot setup, where models are instructed to solve a task without any in-context examples.
One difference from the standard greedy decoding is that the API call is used whenever it is one of the top-10 most likely next tokens. This is done to increase the use of API calls.
Evaluation Tasks
SQuAD, GoogleRE, and T-REx subsets of the LAMA benchmark where the model has to complete a short statement with a missing fact.
Since LAMA questions are based on Wikipedia, Toolformer isn’t allowed to use Wikipedia search.
The evaluation criteria is to check if the correct word is among the first five words predicted by the model.
Toolformer uses the question-answering tool for most cases, outperforming all the baselines.
Math Dataset
eSDiv, SVAMP, and MAWPS benchmarks.
The first number predicted by the model is considered to be the output.
Toolformer uses the calculator tool for most cases, thereby outperforming all the baselines.
Question Answering
Web Questions, Natural Questions, and TriviaQA datasets.
The evaluation criteria is to check if the correct word is among the first 20 words predicted by the model.
Question Answering tool is disabled for this setup.
Toolformer uses the Wikipedia tool for most cases, thereby outperforming all the baselines other than the much larger GPT-3 model.
Multilingual Question Answering
MLQA benchmark.
The evaluation criteria is to check if the correct word is among the first ten words predicted by the model.
Toolformer uses the translation tool for most of the questions, with questions in Hindi being an exception.
However, Toolformer does not consistently outperform the GPT-J baseline, likely because, for some languages, finetuning on CCNet could hurt performance.
Temporal Datasets
TEMPLAMA (cloze style queries where the answer changes with time) and DATESET (dataset generated through a series of templates and populated with random dates/durations).
While Toolformer outperforms the baselines for both datasets, it relies on the Wikipedia search and Question Answering tools (and not the calendar tool) for the LAMA dataset. On the DATESET dataset, it uses the calendar tool in the majority.
Language Modeling
WikiText and a subset of 10,000 randomly selected documents from CCNet (not used during training of M).
Training on $C*$ does not increase perplexity (compared to training on C). In this experiment, the API calls are disabled during inference.
Varying the size of the underlying models show that the ability to use tools emerges only around 755M parameters.
Extending Toolformer to chain the use of tools and use tools interactively.
In some cases, the use of tools is very sample-inefficient.
Decision to use a tool does not account for the cost of using the tool.


I'm a growing web developer starting out on what i expect to be an exciting journey. I'm also an avid aviation enthusiast, but more on that another time on another site. Here, its all about my software development interests and skills. I've so far dabbled in the following programming languages: HTML, CSS, Javascript, Angular2, Emberjs, Typescript and Python.
To see the projects i've created with the different languages, click on the about link at the top of the page.
I hope exploring my page will be oodles of fun.
To work together on projects you can reach me by clicking on the contacts link at the top of this page.


I saw Salvia in a store over the weekend with my roommate, and they had printed off sheets of paper explaining what it was. I read a bit of it, and saw that they had three kinds 5x (20mg), 40mg, and 60mg. I went home and over a few days had heard two people talk about their experiences. Not much was said, other than it was an experience and they fell down. So, that Wednesday I went to the store, told the clerk I was buying some to try out. He asked if it was my first time, I said yes, and he said I should probably have the weakest dose, which I wanted anyways.
I went home, not much was said in the instructions, just that one should research the drug before taking it. I went online and read a little bit. It didn't say anything about the amount one should take, but it did say no lasting negative effects, and that it was non-toxic as found in lab tests. That and the fact that it is legal assured me that it would be ok to take it. I didn't know what to expect when I took this, and I thought this would be something like a weaker form of marijuana as it is classified as a 'legal cannabis substitute'.
My roommate was home and taking a nap in his room when I decided to take the Salvia extract. I was listening to some rock music at the time. I had not known to have a sitter to make sure I wouldn’t do anything dangerous.  I took almost the whole thing (85% of the amount in the slider) in one hit, held it in for what I thought was 30 seconds and exhaled.
I barely remember exhaling; I don't remember what happened next. I assumed I blacked out, and I woke up in a dream-like state, not realizing I had just smoked Salvia, not realizing where I was, barely remembering that I'm 22 years old, I exist, etc. My vision was like that of being in a dream. I felt like a child. I cannot remember if my eyes were open or closed, I am guessing it was a mixture of both.  I did not recognize the surroundings as my room, but the room was familiar. I remember seeing the face of a stuffed animal bunny (not very clearly, and I have no stuffed animals in my room) and a female was talking to me. I thought it was the bunny but it wasn't. I realized it was a mother figure talking. This was not my real mother's voice, but I felt like whoever was speaking was my mother.
I was suddenly outside in a place that resembled this back patio of my house that I used to live before I came to college. I then started to freak out and panic. I suddenly felt like was being wrapped up in a rug, pressure from all sides of my body (not painful, just pressure). The voice was still speaking to me and the bunny face seemed to be up and to the right (in relation to my body) although I could not see it. I crawled to my pocket doors which were closed and desperately tried to open them. This was incredibly difficult because I felt like I had to climb over top of the door to get out. I then saw my roomate's doors closed and I knew that someone friendly was there, but I did not know it was him who was in there. I still did not realize this was my apartment and that was his room behind the doors.
I yelled 'Someone come help me' or 'Someone is behind the doors who can help me'. My roomate emerged from his nap, surprised to see me in this state. I had not told him because I did not realize the power of Salvia. He started to call 911 because he thought I was having a seizure or that something was wrong. I tried to tell him or motion to him not to do this as I now realized I was in my apartment and that I was me and my memory of everything came back. I went into my room and grabbed the Salvia packet and put it on the table and he realized that's what I had taken.
I laid on the couch and tried to explain what had happened to me, I was incredibly jittery, and the effect was wearing off. I realized my right side felt anchored to whatever was touching it, and that I was laying on my right side in my room. This is partly what caused me to feel like a child as my head was not far from the ground. Also, this is what contributed to the feeling that I had to climb over top of the pocket doors rather than WALK through the opening (I was sideways). I talked things over with my roommate for a bit, and he told me when I was yelling I yelled out his name twice, ‘help’ once, and the word ‘psychic’ once. I don’t remember saying these words other than maybe help. I have no clue why I said psychic.
For the most part, I had calmed down. I walked back into my room to find that all kinds of papers and books from my desk were strewn about the room. My printer was upside down on the floor, 3 of the panels broken off. The printer may have been what I saw as the bunny face. The printer has a panel that opens in the front that would resemble a mouth, and the book lying on top of the printer had two dots that look like eyes. There was a small gash in my wooden desk.  I had no recollection of having done any of this. I also had no injuries to myself which I consider lucky.
This was very scary to me. As a child, I sometimes thought that I was dreaming here on Earth and that I would wake up and freak out because everything I had known was not real. I had a similar feeling while on the Salvia. I barely had any feeling of who I was and what had happened in 'the real world'. I felt like I had woken up from a dream, and the dream I was now experiencing was reality.
Afterwards, I laid on my bed and was in a good mood for quite a while. Later that night I felt guilt and heavy anxiety for what I had done and for underestimating the power of Salvia. I felt apologetic, my body was very hot, and I felt nausea. I had difficulty sleeping the entire night, waking up several times. In the morning, I felt fine, like nothing was wrong. No anxiety, no guilt, no negative effects. I don't know if I will do this again. I will definitely have someone with me if I choose to do it again.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


- testAddRemoveMoodEvent() - Method in class com.cmput301f19t09.vibes.UserTests
-
Creates three new mood events and verifies that they are created properly.
- testCompareEmpty() - Method in class com.cmput301f19t09.vibes.UserUnitTests
-
Tests User custom comparator for when a name is an empty string and the other is non-empty.
- testCompareEqual() - Method in class com.cmput301f19t09.vibes.UserUnitTests
-
Tests User custom comparator for when two users have identical names.
- testCompareExtendedName() - Method in class com.cmput301f19t09.vibes.UserUnitTests
-
Tests User custom comparator for when a name is an empty string and the other is non-empty.
- testCompareFullList() - Method in class com.cmput301f19t09.vibes.UserUnitTests
-
Tests User custom comparator for when a name is an empty string and the other is non-empty.
- testCompareNoSort() - Method in class com.cmput301f19t09.vibes.UserUnitTests
-
Tests User custom comparator for when the name which will come first in the list
after a sort is placed into the list first before sorting.
- testCompareNumbers() - Method in class com.cmput301f19t09.vibes.UserUnitTests
-
Tests User custom comparator for when a name contains numbers and the other does not.
- testCompareSorts() - Method in class com.cmput301f19t09.vibes.UserUnitTests
-
Tests User custom comparator for when the name which will come later in the list
after a sort is placed into the list first before sorting.
- testCompareUppercase() - Method in class com.cmput301f19t09.vibes.UserUnitTests
-
Tests User custom comparator for when the two names have the same characters in their
first and last names except one's first name has the uppercase letter.
- testEditMood() - Method in class com.cmput301f19t09.vibes.UserTests
-
Tests creating a mood and editing the newly created mood.
- testFollow() - Method in class com.cmput301f19t09.vibes.FollowTest
-
Two accounts have been set up for this test.
- testGetMostRecent() - Method in class com.cmput301f19t09.vibes.UserTests
-
Creates three new mood events and checks whether the latest mood is the last created.
- testGetUserDNE() - Method in class com.cmput301f19t09.vibes.UserMangerTests
-
Tests whether the user manager getUser correctly returns null when getCurrentUser
is called for a user the DNE ie.
- testGetUserExists() - Method in class com.cmput301f19t09.vibes.UserMangerTests
-
Tests whether the user manager getUser correctly returns the user object
for a user that is registered in the db.
- testLogin() - Method in class com.cmput301f19t09.vibes.Login
-
Tests the login functionality used by setup().
- time - Variable in class com.cmput301f19t09.vibes.models.Event
-
- timeFormatter - Static variable in class com.cmput301f19t09.vibes.models.Event
-
- toggleEmotion() - Method in class com.cmput301f19t09.vibes.EditFragmentTests
-
Test whether image loading behaviour is working as intended for when a user
selects a particular emotion chip.
- toggleLocation() - Method in class com.cmput301f19t09.vibes.EditFragmentTests
-
Test whether the location switch toggling behaviour is working as intended.


Of course it shipped today! ™
PC400 Green Powder Coating Tape
Polyimide Tape PC500(1mil) PC522(2mil) PC533(3mil) PC555(5mil)
DB100 Blue Polyester Tape
GC500 White Glass Cloth Tape
RS100 High-tack Red Polyster Tape
Yellow Vinyl Tape
PG21 Masking Tape
Circuit Board Tapes Inspection Arrows
HT22 Masking Tape
HT11 Masking Tape On Paper Liner
PC400 Green Tape On a 3mil Liner
Custom Die Cuts
White Sand Blasting Tape
Polyimide Tape On Clear Liner
CPC400 Clear Tape
1mil Blue Flash Tape
2mil Blue Flash Tape
5mil Blue Flash Tape
Squeegees
3M Industrial Tapes
Anti-Static Tapes
592 Double Coated Crepe Paper Tape
PTFE Tape
Orange Painters Tape
Blue Painters Tape
Green Painters Tape
Clear Packaging Tape
Lane Marking Tape
SW500 Low Static Solderwave Tape
Finger Protection Tape
1mil Double Sided Polyimide Tape
Solid Color Lane Marking Tape
Polyimide Tape PC575 (1 mil)


Purpose: This function creates the plain text file containing the collection of ftp
commands required by the Perl
script get_misr_datapool.pl
to download MISR data files for the specified Path from the NASA Langley Atmospheric Sciences Data Center (ASDC).
Algorithm: This function generates a file containing a set of ftp
commands to retrieve MISR data product files on the basis of the values of input positional and keyword parameters.
Syntax: rc = mk_ftp_datapool_misr(misr_path, $
START_TIME = start_time, END_TIME = end_time, $
DATA_TYPES = data_types, FTPSCRIPT_PATH = ftpscript_path, $
LOG_PATH = log_path, DATA_PATH = data_path, $
VERBOSE = verbose, DEBUG = debug, EXCPT_COND = excpt_cond)
Positional parameters [Input/Output]:
misr_path {INTEGER} [I]:
The selected MISR Path number.
Keyword parameters [Input/Output]:
START_TIME = start_time {STRING} [I] (Default value:
’2000-02-24T00:00:00Z’):
The starting date and time of the period during which to acquire MISR data files.
END_TIME = end_time {STRING} [I] (Default value: Today):
The ending date and time of the period during which to acquire MISR data files.
DATA_TYPES = data_types {STRING array} [I] (Default value: [”]):
The array containing the list of MISR data types to retrieve. Possibilities include:
BR: L1B2 Browse Product.
GRP_GM: L1B2 Georectified Radiance Product (GRP) Terrain projected Global Mode (GM)
GRP_LM: L1B2 Georectified Radiance Product (GRP) Terrain projected Local Mode (LM)
GPP: L1B2 Geometric Parameters Product (GPP).
RCCM: L1B2 Georectified Radiance Product (GRP) Radiometric Camera-by-camera Cloud Mask (RCCM)
AERO: L2 Aerosol/Surface (AS) Aerosol Product (AP).
LAND: L2 Aerosol/Surface (AS) Land Surface Product (LSP).
ONLY: Only those files strictly needed by MISR-HR: GRP_GM, GPP, RCCM, LAND.
ALL: All of the above.
FTPSCRIPT_PATH = ftpscript_path {STRING} [I] (Default value: ’\sim/MISR_HR/Input/Datapool/’):
The optional name of the output folder containing the ftp
script.
LOG_PATH = log_path {STRING} [I] (Default value: ’\sim/MISR_HR/Input/Datapool/’):
The name of the folder containing the Log
file.
DATA_PATH = data_path {STRING} [I] (Default value: ’\sim/MISR_HR/Input/MISR/’ + misr_path_str’):
The name of the folder where the MISR files should be saved.
VERBOSE = verbose {INT} [I] (Default value: 0):
Flag to enable (> 0) or skip (0) outputting messages on the console:
If verbose > 0
, messages inform the user about progress in the execution of time-consuming routines, or the location of output files (e.g., log, map, plot, etc.);
If verbose > 1
, messages record entering and exiting the routine; and
If verbose > 2
, messages provide additional information about intermediary results.
DEBUG = debug {INT} [I] (Default value: 0):
Flag to activate (1
) or skip (0
) debugging tests.
EXCPT_COND = excpt_cond {STRING} [O] (Default value: ”):
Description of the exception condition if one has been encountered, or a null string otherwise.
Returned value type: INT
.
Outcome:
If no exception condition has been detected, this function returns 0
, and the output keyword parameter excpt_cond
is set to a null string, if the optional input keyword parameter DEBUG
is set and if the optional output keyword parameter EXCPT_COND
is provided in the call. The ftp
script file and the optional Log
files are saved in the designated or default folders.
If an exception condition has been detected, this function returns a non-zero error code, and the output keyword parameter excpt_cond
contains a message about the exception condition encountered, if the optional input keyword parameter DEBUG
is set and if the optional output keyword parameter EXCPT_COND
is provided. The ftp
script file and the optional Log
files may be inexistent, incomplete or incorrect.
Exception conditions:
Error 98: An exception condition occurred in get_host_info.pro
.
Error 99: An exception condition occurred in set_roots_vers.pro
.
Error 100: One or more positional parameter(s) are missing.
Error 110: Input positional parameter misr_path
is invalid.
Error 120: The initial date of the period of interest, provided with the input keyword parameter START_TIME = start_time
is invalid.
Error 130: The final date of the period of interest, provided with the input keyword parameter END_TIME = end_time
is invalid.
Error 140: The list data_types
of MISR product types to be acquired must be of type STRING
.
Error 150: The list data_types
of MISR product types to be acquired must be an array.
Error 160: The list data_types
of MISR product types to be acquired contains one or more unrecognized products.
Error 200: An exception condition occurred in path2str.pro
.
Error 210: An exception condition occurred in orbit2str.pro
while generating the first Orbit to get.
Error 220: An exception condition occurred in orbit2str.pro
while generating the last Orbit to get.
Error 400: The output folder ftpscript_path
is unwritable.
Error 410: The output folder log_path
is unwritable.
Error 420: The output folder data_path
is unwritable.
Error 600: An exception condition occurred in the MISR Toolkit routine
MTK_PATH_TIMERANGE_TO_ORBITLIST
.
Error 610: the MISR Toolkit routine
MTK_PATH_TIMERANGE_TO_ORBITLIST
returned an empty Orbit list.
Dependencies:
MISR Toolkit
chk_isodate.pro
chk_misr_path.pro
get_host_info.pro
is_array.pro
is_numeric.pro
is_string.pro
is_writable_dir.pro
orbit2str.pro
path2str.pro
set_misr_specs.pro
set_roots_vers.pro
strstr.pro
today.pro
Remarks:
Note 1: The directories and file names to access MISR data products at Langley are set by NASA and are therefore hardcoded in this function to match the organization of the datapool at the time of writing.
Note 2: The data product version identifiers and directory addresses on the NASA ASDC Data Pool ftp
site are hardwired near the start of this routine: they should be updated manually whenever new versions become available.
Note 3:The default directory address of the local folder to store the ftp
script and the Log
file is home + ’MISR_HR/Input/Datapool/’
, where home
is the user’s home directory on the current computer.
Note 4: These default directories can be overridden by setting the optional input keyword parameters FTPSCRIPT_PATH
and LOG_PATH
to alternate addresses, respectively.
Note 5: The ftp
script file is named
’FTPscript_datapool_MISR_’ + $
misr_path_str + ’_’ + $
frst_orbit_str + ’-’ + $
last_orbit_str + ’_’ + $
date + ’.txt’
.
Note 6: The optional Log
file is named
’Log_datapool_MISR_’ + $
misr_path_str + ’_’ + $
frst_orbit_str + ’-’ + $
last_orbit_str + ’_’ + $
date + ’.txt’
.
Note 7: The default directory address of the local folder to store the MISR data product files is
home + ’MISR_HR/Input/MISR/’ + misr_path_str + PATH_SEP()
, where home
is the user’s home directory on the current computer.
Note 8: This default directory address can be overridden by setting the optional input keyword parameter DATA_PATH
to an alternate address.
Note 9: All MISR data files are initially saved in the same folder to let the ftp
process proceed uninterrupted. They may need to be moved to their final destination at a later stage.
Note 10: The MISR data product files are saved locally with the same original name they hold at NASA Langley.
Examples:
IDL> misr_path = 168
IDL> rc = mk_ftp_datapool_misr(misr_path, /VERBOSE, $
/DEBUG, EXCPT_COND = excpt_cond)
[This setup will result in the saving of an FTP script and a Log
file in the default directories mentioned above. WARNING: This
particular FTP script will acquire some 86,000 files from ASDC,
which might take a long time as well as take up a large disk
space locally.]
References: None.
Versioning:
2016–03–13: Version 0.9 — Initial release by Linda Hunt, as ftp_pool.pro
.
2017–11–22: Version 1.0 — Updat the function, renamed get_misr_datapool.pro
and made available only at GCI/Wits.
2018–12–12: Version 1.1 — Revamp the function to include a full set of input positional and keyword parameters, renamed mk_ftp_datapool_misr.pro
.
2019–01–06: Version 1.2 — Simplify the calling sequence and hardcode version identifiers to retrieve the most current version at the time of writing.
2019–01–28: Version 2.00 — Systematic update of all routines to implement stricter coding standards and improve documentation.
2019–08–20: Version 2.1.0 — Adopt revised coding and documentation standards (in particular regarding the use of verbose
and the assignment of numeric return codes), and switch to 3-parts version identifiers.
Purpose: This program collects user inputs to specify which MISR data product files must be downloaded from the NASA ASDC Data Pool. Default or common values are provided for all required inputs except the MISR Path, which must be entered explicitly.
Algorithm: This main program is a wrapper routine to assess which MISR data product files should be downloaded from the NASA ASDC Data Pool. Once the inputs have been obtained and verified, this program relies on the function mk_ftp_datapool_misr.pro
to generate the ftp
script itself. The Perl
script get_datapool_misr.pl
is subsequently used to manage the ftp
connection with the NASA ASDC Data Pool and execute each ftp
command in turn.
Syntax: order_misr
Positional parameters [Input/Output]: None.
Keyword parameters [Input/Output]: None.
Returned value type: N/A.
Outcome:
If no exception condition has been detected, an ftp
script file is saved in the designated or default folder ftpscript_path
, an optional log file is saved in the designated or default folder log_path
, and the MISR data product files retrieved by the Perl
script are expected to be saved in the designated or default folder data_path
.
If an exception condition has been detected, a message about the exception condition encountered is printed on the console. The ftp
script file and the log files may be inexistent, incomplete or incorrect.
Exception conditions:
Error 400: The output folder ftpscript_path
is unwritable.
Error 410: The output folder log_path
is unwritable.
Error 420: The output folder data_path
is unwritable.
Dependencies:
chk_misr_path.pro
chk_ymddate.pro
is_writable_dir.pro
mk_ftp_datapool_misr.pro
path2str.pro
set_roots_vers.pro
set_white.pro
strstr.pro
today.pro
Remarks: None.
Examples:
IDL> order_misr
[Answer the various questions; when all inputs have been
provided and verified, the ftp script and the optional
log file are saved in the specified or default folders.]
References: None.
Versioning:
2019–01–07: Version 0.9 — Initial release.
2019–01–10: Version 1.0 — Initial public release.
2019–01–28: Version 2.00 — Systematic update of all routines to implement stricter coding standards and improve documentation.
2019–03–20: Version 2.01 — Bug fix: Correct the handling of initial and final dates other than the defaults [Thanks to Hugo De Lemos].
2019–08–20: Version 2.1.0 — Adopt revised coding and documentation standards (in particular regarding the use of verbose
and the assignment of numeric return codes), and switch to 3-parts version identifiers.


Hi, I'm a web developer with 10 years experience in developing large web application. This blog outlines the ideas thoughts and discusssions I've had along the way and the best bits of what i've discovered through out.
Archives
{% for post_year, post_months in post_dates.items %}
{% for post_month, post_date in post_months.items %}