---
sort_order: 185
tei_id: rdx_b5j2m.p.idp1560480
annotation_count: 0
images:
small-thumbnail: http://readux.library.emory.edu/books/emory:b5j2m/pages/emory:p79pv/mini-thumbnail/
json: http://readux.library.emory.edu/books/emory:b5j2m/pages/emory:p79pv/info/
full: http://readux.library.emory.edu/books/emory:b5j2m/pages/emory:p79pv/fs/
page: http://readux.library.emory.edu/books/emory:b5j2m/pages/emory:p79pv/single-page/
thumbnail: http://readux.library.emory.edu/books/emory:b5j2m/pages/emory:p79pv/thumbnail/
title: Page 185
number: 185
---
{% raw %}FUGITIVE SLAVES ENLISTING IX THE STATES. 181{% endraw %}
{% raw %}prison, or under the free air of heaven, I will praise{% endraw %}
{% raw %}Thv great and holy name."{% endraw %}
{% raw %}Still in the custody of the constable, I was allowed{% endraw %}
{% raw %}to n-o home on Saturday afternoon. A man called{% endraw %}
{% raw %}that night at my house and said to me, " There is a{% endraw %}
{% raw %}man loading his boat up the river, a bit; he comes{% endraw %}
{% raw %}from the same district where John Alexander lived{% endraw %}
{% raw %}before he prowled about Dresden. This Smith says{% endraw %}
{% raw %}Alexander is a thief, that he stole a lot of clothes{% endraw %}
{% raw %}from a line in a yard there, and other things, and a{% endraw %}
{% raw %}writ was taken out to apprehend him, but he ran{% endraw %}
{% raw %}away, and is now trying to send an innocent man{% endraw %}
{% raw %}to prison by telling a lot of lies, and he ought to be{% endraw %}
{% raw %}stopped."{% endraw %}
{% raw %}As soon as this man left my house the constable{% endraw %}
{% raw %}gave me permission to call on Squire Terrace. This{% endraw %}
{% raw %}was Saturday evening. I gave him the drift of what{% endraw %}
{% raw %}the man had told me of Smith's knowledge of John{% endraw %}
{% raw %}Alexander. The squire said, " Go home and be{% endraw %}
{% raw %}quiet over Sunday, for Monday morning before the{% endraw %}
{% raw %}sun rises I will be at the river, and if I can find{% endraw %}
{% raw %}that Smith, and he testify as you have represented,{% endraw %}
{% raw %}I will have him in court on Monday morning by{% endraw %}
{% raw %}nine o'clock."{% endraw %}
{% raw %}I remained quiet during Sunday, and my soul{% endraw %}
{% raw %}was full of joy and rejoicing, for this unlooked-for{% endraw %}
{% raw %}providence of God which I was sure would deliver me.{% endraw %}
{% raw %}"Suppose he should not be found?" said one of{% endraw %}
{% raw %}my family. I answered, " But he will, I am cer¬{% endraw %}
{% raw %}tain."


:a short loose-fitting sleeveless or short-sleeved coat or cape: as
:a tunic worn by a knight over his armor and emblazoned with his arms
:a herald's official cape or coat emblazoned with his lord's arms
:a woman's sleeveless outer garment often with side slits


Implementation of a wrapper for built-in unsigned integral values.This class wraps a value of built-in unsigned integral type in order to be able to extract non-negative unsigned integral values from an input stream. More...
#include <UnsignedValue.h>
Public Member Functions | |
Constructors | |
| UnsignedValue (T value=0) | |
| The default constructor for UnsignedInt. More... | |
Assignment operator | |
| UnsignedValue & | operator= (T value) |
| Assignment of a built-in unsigned integral value. More... | |
Conversion operator | |
| operator T () const | |
| Conversion to the built-in unsigned integral type. More... | |
Access functions | |
| T | get () const |
| Access to the wrapped built-in unsigned integral value. More... | |
Private Attributes | |
Member variables | |
| T | value_ |
| The wrapped built-in unsigned integral value. | |
Implementation of a wrapper for built-in unsigned integral values.
This class wraps a value of built-in unsigned integral type in order to be able to extract non-negative unsigned integral values from an input stream.
|
inlineexplicit |
The default constructor for UnsignedInt.
| value | The initial value for the unsigned integer. |
|
inline |
Access to the wrapped built-in unsigned integral value.
|
inline |
Conversion to the built-in unsigned integral type.
|
inline |
Assignment of a built-in unsigned integral value.
| value | The unsigned integral value. |


Tic-Tac-Toe
Who Plays First?
AI
You
Start Game !
Restart Game !
Please choose who plays first (Default is AI) and click "Start Game!"


COMPILE_ET
Section: User Commands (1)Updated: 30 Mar 1998
Index Return to Main Contents
NAME
compile_et - error table compilerSYNOPSIS
compile_et fileDESCRIPTION
Compile_et converts a table listing error-code names and associated messages into a C source file suitable for use with the com_err(3) library.The source file name must end with a suffix of ``.et''; the file consists of a declaration supplying the name (up to four characters long) of the error-code table:
error_table name
followed by up to 256 entries of the form:
error_code name, " string "
and a final
end
to indicate the end of the table.
The name of the table is used to construct the name of a subroutine initialize_XXXX_error_table which must be called in order for the com_err library to recognize the error table.
The various error codes defined are assigned sequentially increasing numbers (starting with a large number computed as a hash function of the name of the table); thus for compatibility it is suggested that new codes be added only to the end of an existing table, and that no codes be removed from tables.
The names defined in the table are placed into a C header file with preprocessor directives defining them as integer constants of up to 32 bits in magnitude.
A C source file is also generated which should be compiled and linked with the object files which reference these error codes; it contains the text of the messages and the initialization subroutine. Both C files have names derived from that of the original source file, with the ``.et'' suffix replaced by ``.c'' and ``.h''.
A ``#'' in the source file is treated as a comment character, and all remaining text to the end of the source line will be ignored.
BUGS
Since the original compile_et uses a very simple parser based on yacc(1), and this current version of compile_et uses an awk/sed combination of scripts, its error recovery leaves much to be desired.
SEE ALSO
com_err (3).Ken Raeburn, "A Common Error Description Library for UNIX".
Index
This document was created by man2html, using the manual pages.
Time: 05:29:02 GMT, December 24, 2015


:{% extends "correctiv_eurosfueraerzte/zerodocs/base.html" %} {% load i18n %} {% load crispy_forms_tags %} {% block title %}{% blocktrans with full_name=object.get_full_name %}Zero Euro Form of {{ full_name }}{% endblocktrans %}{% endblock title %} {% block content %} {% block content_header %}
{% trans "Please fill out the form below to enter your details." %}
{% else %}{% trans "You gave the following statements:" %}
{% trans "You have unconfirmed submissions, please use these options to confirm:" %}
{% block zerodoc_posting_means %}{% trans "Download the following form letter, sign it, stamp it and send it to us via post or fax (address details are on the letter)." %}
{% endblock %} {% endif %} {% if object.recipient %}{% trans "Your public profile page can be found here." %}
{% endif %}{% trans "You can adjust your details with the form below." %}
{% endif %} {% endwith %} {% crispy form %} {% endblock %}


Full name
Felix Wilson
Job title
Scrum master
Email
<EMAIL_ADDRESS>Telephone
01234 567891
Edit your contact details
Save and return


ES Settings
Host
Index
Size
State
#Lists
Movie Suggester
Search some movies:
{{movie.title}}
Selected reference movies:
{{movie.title}}
What to watch next?
{{movie.title}}


Basics Literals Arithmetics Comparisons Logical Functions Atoms Exceptions Flow Conditionals Multimethods Interoperability Variables Namespaces Looping and recursion Local bindings Destructuring Misc
ki require
ki require core
ki require 'module_name' as name
Requires a node module using node’s require and makes it available to all ki namespaces by binding the returned object to the provided name
. It has to be called outside ki forms.
ki require core
initializes a _ki
global object (where namespaces, modules and defines are stored), requires mori and exposes all its functions to all ki namespaces. ki require core
needs to be invoked before any ki forms or any other ki statement. Every invocation reinitializes the _ki
object.
ki require core
ki require 'fs' as fs
ki (fs.readFile "somefile.txt"
(fn [err data] data));
ki macro
ki macro (from_expr ...) (to_expr ...)
Defines a macro that expands an expression into another expression in subsequent ki forms. Expressions are specified using sweet.js pattern matching rules.
ki macro (thunk $body ...)
(fn [] $body ...)
ki (thunk (alert "Whoops!"));
ki ()
ki (expr ...)
Evaluates a ki form, returning its result to the enclosing JavaScript expression. The form is either evaluated within an explicit namespace (with (ns ...)
) or within an anonymous namespace. Such namespace is retained for use in subsequent non-namespaced ki forms.
var foo = ki (range 1000);
var bar = ki (ns my_ns (range 1000));
ki (def foo 5);
ki (prn foo); => 5
[]
[val1 val2 ...]
Creates a persistent vector (see mori). Note: avoid punctuation between elements.
[1 2 "a" :b]
{}
{key1 val1 key2 val2 ...}
Creates a persistent hash map (see mori). Note: avoid punctuation between elements.
{:foo 1 "bar" [1 2 3] {:a 2 :b 3} 4}
[$ ]
[$ val1 val2 ...]
Creates a JavaScript array using an analogous notation to persistent data structures.
[$ 1 2 "a" "b"]
{$ }
{$ key1 val1 key2 val2 ...}
Creates a JavaScript object using an analogous notation to persistent data structures. Note: keys cannot be objects or arrays.
{$ a 1 "b" 2}
:keyword
Creates a ClojureScript keyword (see mori). Equivalent to (keyword ...)
.
(def a :foo)
(def b {:a 1 :b 2})
nil
Synonym for JavaScript null.
(def a nil)
add
(add arg1 arg2 ...)
Returns the sum of the arguments
(add 1 1 2 2) => 6
sub
(sub arg1 arg2 ...)
Returns the difference among the arguments
(sub 4 2 1) => 1
mul
(mul arg1 arg2 ...)
Returns the product of the arguments
(mul 4 2 2) => 16
div
(div arg1 arg2 ...)
Returns the result of the division between the arguments
(div 8 2 2) => 2
mod
(mod arg1 arg2)
Returns the rest of the integer division between two numbers
(mod 5 3) => 2
eq
(eq arg1 arg2 ...)
Returns true if the arguments are equal. Equivalent to mori equals, i.e. it tests deep equality on persistent collections.
(def a 1)
(def b 1)
(eq a b 1) => true
(def b [1 [2 {:a 3}]])
(eq b [1 [2 {:a 3}]] => true
neq
(neq arg1 arg2 ...)
Returns false if the arguments are not equal (see eq).
(neq [1 2] [1 2] [1 3]) => true
geq
(geq arg1 arg2 ...)
Returns true if a “greater than or equal” relationship holds for the arguments.
(geq 3 2 2) => true
leq
(leq arg1 arg2 ...)
Returns true if a “less than or equal” relationship holds for the arguments.
(leq 2 2 3) => true
gt
(gt arg1 arg2 ...)
Returns true if a “greater than” relationship holds for the arguments.
(gt 3 2 1) => true
lt
(lt arg1 arg2 ...)
Returns true if a “less than” relationship holds for the arguments.
(lt 1 2 3) => true
and
(and arg1 arg2 ...)
Returns true if all the arguments evaluate to truthy (i.e. not false, undefined or null).
(and true 1 "a") => true
or
(or arg1 arg2 ...)
Returns true if at least one of the arguments evaluates to truthy (i.e. not false, undefined or null).
(or false null 0) => true
not
(not arg)
Returns true if the argument evaluates to falsey (i.e. false, undefined or null). Synonym of falsey.
(not null) => true
truthy
(truthy arg)
Returns true if the argument is not false, undefined or null.
(truthy "") => true
falsey
(falsey arg)
Returns true if the argument is false, undefined or null.
(falsey 0) => false
(falsey null) => true
fn
(fn [arg1 arg2 ...] body)
Returns an anonymous function taking n arguments and returning the result of the evaluation of the last form in the body. The returned function is a JavaScript function. Evaluating the function with fewer or more arguments than specified in the signature will not generate an error.
(fn [x] (prn x) (inc x))
Functions with multiple arities are supported. They can be defined by supplying their signatures in the same fn form. If evaluated with a number of arguments that doesn’t match any of the arities, the version with the greater arity is called.
(fn
([arg1 ... argN] body1)
([arg1 ... argM] body2)
...)
(fn
([] 0)
([x] x)
([x y] (add x y)))
apply
(apply func coll)
Evaluates the supplied function with the elements of the provided collection as arguments.
(apply add [1 2 3]) => 6
An extra argument can be provided after the function name as the object that will be bound to this
upon invocation.
(apply add {$ a 1} [this.a 2 3]) => 6
bind
(bind obj func)
Binds the supplied function to the object.
(bind {$ a 1} (fn [] this.a))
fnth
(fnth [arg1 arg2 ...] body)
Returns an anonymous function and binds it to this
in the current scope (analogous to CoffeeScript’s fat arrow)
(defn Account [customer cart]
(js this.customer = customer)
(js this.cart = cart)
(chain
($ '.shopping-cart')
(on 'click' (fnth [event] (this.customer.purchase this.cart)))))
defn
(defn fn_name [arg1 arg2 ...] body)
Defines a function (see fn), binds it to a JavaScript variable and makes it available in the current namespace. Multiple arities work as for fn.
(defn fn_name
([arg1 ... argN] body1)
([arg1 ... argM] body2)
...)
(defn print_and_inc [x]
(prn x)
(inc x))
(defn some_func
([] 0)
([x] x)
([x y] (add x y)))
atom
(atom val write_fn read_fn)
Returns a JavaScript object acting as a reference to a value. The value can be later accessed using deref and changed using swap and reset. It is typically intended to hold mutable state. Takes the initial value and two (optional) callbacks as arguments. The first (write callback) is invoked when the value is changed (through swap or reset) with the new value and the old value as arguments. The second (read callback) is invoked whenever the atom is dereferenced (through deref) with the value as argument.
(def a (atom {:a 1 :b 2}))
(def b (atom 1) (fn [val old_val] (prn "Old:" old_val "New:" val)))
(def c (atom 1) nil (fn [val] (prn "Someone just read:" val)))
deref
(deref atom)
Returns the current value of an atom.
(def a (atom 1))
(deref a) => 1
swap
(swap atom func arg1 arg2 ...)
Takes an atom, a function and optional arguments, changes the value of the atom to be the return value of the function evaluated with the old value and the provided optional arguments as arguments.
(def a (atom 1))
(swap a inc)
(deref a) => 2
(swap a add 2)
(deref a) => 4
reset
(reset atom val)
Takes an atom and a value and changes the value of the atom to the provided value.
(def a (atom 1))
(reset a 2)
(deref a) => 2
try/catch/finally
(try body (catch e catch_body) (finally finally_body))
Evaluates the body and catches the eventual exception. It optionally supports a finally
form meant to perform side-effects both in the case the exception is thrown or not.
(try
(div 1 0)
(catch e (prn "Exception caught" e)))
throw
(throw exception_object)
Throws an exception with the supplied value.
(throw "Error")
(throw (str "Error with value" 42))
(throw nil)
(try
(div 1 0)
(catch e (do (prn "Exception caught, rethrowing")
(throw e))))
threadf
(threadf val (func1 arg2 arg3 ...) (func2 arg2 arg3 ...))
Threads a value through a sequence of computations. It takes the first argument and it supplies it as the first argument to the second form. The result of the evaluation is supplied as the first argument to the third form and so on. It returns the result of the last evaluation.
(threadf 2 (mul 2) (add 1) (div 2)) => 2.5
threadl
(threadl val (func1 arg1 ... argN-1) (func2 arg1 ... argN-1))
Threads a value through a sequence of computations. It takes the first argument and it supplies it as the last argument to the second form. The result of the evaluation is supplied as the last argument to the third form and so on. It returns the result of the last evaluation.
(threadl (range 10) (filter is_even) (map (mul 2))) => [0 4 8 12 16]
do
(do (func1 arg1 arg2 ...) (func2 arg1 arg2 ...))
Evaluates all the supplied forms in order and returns the result of the last evaluation. Typically used for side effects
(do (prn "Value is 1") 1)
chain
(chain obj (method1 arg1 arg2 ...) (method2 arg1 arg2 ...))
Evaluates the form supplied as the second argument, where the function is treated as a property of the first argument (expected to be a JavaScript object), then does the same for the third argument and the object returned by the previous evaluation and so on.
(chain d3 (select "body") (append "p") (text "New paragraph"))
doto
(doto obj (method1 arg1 arg2 ...) (method2 arg1 arg2 ...))
Takes the first argument (expected to be a JavaScript object) and evaluates all subsequent forms treating functions as properties of the first argument.
(doto document.body
(appendChild (document.createElement "p"))
(appendChild (document.createElement "p"))
if
(if condition do_if_truthy do_if_falsey)
Returns the result of the evaluation of the second form if the evaluation of the first form is truthy, the result of the evaluation of the third form otherwise.
(if (gt 2 1) "2 > 1" "1 > 2") => "2 > 1"
if_not
(if_not condition do_if_falsey do_if_truthy)
Returns the result of the evaluation of the second form if the evaluation of the first form is falsey, the result of the evaluation of the third form otherwise.
(if_not (gt 2 1) "not 2 > 1" "not 1 > 2") => "not 1 > 2"
when
(when condition do_if_truthy)
Returns the result of the evaluation of the second form if the evaluation of the first form is truthy, nil otherwise.
(when (lt 2 1) "2 < 1") => nil
when_not
(when_not condition do_if_falsey)
Returns the result of the evaluation of the second form if the evaluation of the first form is falsey, nil otherwise.
(when_not (gt 2 1) "2 > 1") => nil
cond
(cond cond1 do_if_cont1_truthy cond2 do_if_cond2_truthy ...)
Returns the result of the evaluation of the second form if the first form evaluates to truthy, the result of the evaluation of the fourth form if the third form evaluates to truthy and so on.
(cond
(eq action "Eat apple") (swap energy inc)
(eq action "Drink potion") (swap energy (partial add 5))
:else energy)
defmulti
(defmulti fn_name dispatch_fn)
Defines a multimethod given a name and a dispatch function. When invoked, it calls the function (provided using defmethod) that matches the return value of the dispatch function evaluated with the supplied arguments.
(defmulti sound (fn [animal] (get animal :type)))
defmethod
(defmethod fn_name dispatch_value [arg1 arg2 ...] body)
Defines a method given the name of the multimethod, a value against which the return value of the dispatch function is matched, a list of arguments and a function body.
(defmethod sound :cat [animal] "mieow")
(defmethod sound :dog [animal] "woof")
js
(js body)
Treats arguments as JavaScript code, which gets expanded in the enclosing scope.
(js x + 1)
(js function(x) { x + 1 })
dot notation
(.method object arg1 arg2 ...)
Invokes method on object passed as first argument, using the following arguments as arguments.
(.toUpperCase "foobar") => "FOOBAR"
(threadf (str "foo" "bar")
(.toUpperCase) (.replace "BAR" "BAZ")) => "FOOBAZ"
ns
(ns ns_name body)
Introduces a namespace with the given name. All variables and functions defined using (def )
and (defn )
forms are namespace globals and are available between separate (ns )
forms with the same name. Namespace global variables can be accessed from other namespaces using the <ns>/<var>
notation. Every ki ()
form introduces an anonymous namespace. Namespaces can be nested.
(ns foo (def a 1))
(ns bar (def a 2))
(ns foo a) => 1
(ns bar foo/a) => 1
use
(use ns_name)
Interns all variables of the supplied namespace into the current namespace
(ns foo (def a 1))
(ns bar (use foo) a) => 1
def
(def name value)
Defines a variable with the supplied name in the current namespace and binds it to the supplied value. The variable will be defined and will be bound to the same value in subsequent (ns ...)
forms with the same namespace.
(def foo 1)
while
(while cond body)
Repeatedly evaluates body until cond stops evaluating to truthy.
(def counter (atom 10))
(while (geq (deref counter) 0)
(do
(prn counter)
(swap counter dec)))
loop/recur
Evaluates body with the supplied local bindings. If recur
is reached, re-evaluates body with bindings bound to the new supplied values. Returns the result of the last evaluated expression.
(loop [counter 10]
(prn counter)
(if_not (geq counter 0)
"Ignition!"
(recur (dec counter))))
Loop supports destructuring, see let
.
let
(let [name1 val1 name2 val2 ...] body ...)
Evaluates body with the supplied local bindings. Returns the result of the last evaluated expression.
(let [a 1
b 2]
(add a b)) => 3
(let [a 1]
(let [a (inc a)
b 2]
(add a b))) => 4
let
supports destructuring of nested data structures, both immutable data structure
(defn transformCircle [circle shift scale]
(let [{[x y] :center r :radius} circle
[dx dy] shift]
{:center [(add x dx) (add y dy)]
:radius (mul r scale)}))
(transformCircle {:point [10 20] :radius 5} [2 3] 10)
and JS objects and arrays
(defn transformCircle [circle shift scale]
(let [{$ [$ x y] :center r :radius} circle
[$ dx dy] shift]
{$ center [$ (add x dx) (add y dy)]
radius (mul r scale)}))
(transformCircle {$ point [$ 10 20] radius 5} [$ 2 3] 10)
letc
(letc [name1 (fn1 arg1 ... argN-1) name2 (fn2 arg1 ... argN-1) ...] body ...)
Evaluates supplied functions by passing a callback taking the bindings as the last argument. Returns nil.
It allows to write callback-based APIs sequentially. The following
ki require 'fs' as fs
ki (letc [[err1 data1] (fs.readFile "first.csv")
[err2 data2] (fs.readFile "second.csv")]
{:first data1 :second data2})
is equivalent to
ki require 'fs' as fs
ki (fs.readFile "first.csv"
(fn [err1 data1]
(fs.readFile "second.csv"
(fn [err2 data2]
{:first data1 :second data2}))))
str
(str arg1 arg2 ...)
Converts the arguments to string and returns their concatenation (with a single space separator).
(str "One is" 1 "and two is" 2) => "One is 1 and two is 2"
prn
(prn arg1 arg2 ...)
Converts the arguments to string and outputs their concatenation to standard output.
(prn "One is" 1 "and two is" 2)


{% extends "commons/layout.html" %} {% from "commons/components/card_status.html" import card_status with context %} {% from "commons/components/card.html" import card with context %} {% from "commons/forms/select_list.html" import select_list with context %} {% from "commons/forms/input.html" import form_input with context %} {% block title %}{{ title }}{% endblock %} {% block h1 %}{{ title }}{% endblock %} {% block content %} {% if dataset.module_pandas_profiling is defined %}


Class Settings
This table is editable. You can add a new student as well as click on existing student's name to begin editing.
First Name
Last Name
Email
Show More
This Pictures in this grid are draggable. You can drag each student and set position to match the class layout.


I have a passion for CS Mentorship, specifically in helping my peers explore new tech stacks through hands-on collaborative projects!
- Project Lead and Member Relations Chair for my CS Club, Codeology!
Java, Python, JavaScript, C, Swift, SQL
React, Spring, (in progress:) Ruby on Rails, Heroku
Adobe Suite, Figma, Bootstrap
Let's start a conversation! Talk to me about listening to new music, building something cool together, grabbing a drink at Asha Tea House....
I started learning how to dance at the beginning of college in fall 2017. Since then, I've never stopped! It's honestly one of my best discoveries because of how supportive the club has been towards pushing me out of my comfort zone. The energy on stage performing with people you love is infectious, and no matter how busy I get during the school year, I always make time for dance!
I've grown up with color pencils and sketchbooks in my hand and now feel a sense of comfort concentrating on the details and form that help make a drawing feel real. Dealing with mistakes in art is a whole other subject that fun to think about. Drawing is something that can be done virtually anywhere, and for that reason I spend my time up flying in the air, on subways, and more, drawing in my sketchbook.
Click to see my portfolio on instagram CloseCooking is another hobby I began in college, but something I try to improve and work on when I have time! I love food (who doesn't really), and I think cooking is a great way to bond with people because you have a cool activity + a nice bonus to reward yourselves with afterwards!
Below are things I've made and happen to take a picture of!
Close


Methods
endhydrate()
End hydration process
Clear hydration interval in preparation for main process booting
- Source:
hydrate()
Put scraper into an intensive content retrieving state
In order to gather up sufficient content for bot to boot
- Source:
init()
Register hydration event listeners
- Source:
scrapeFeed()
Choose a random approved feed and scrape content from it
- Source:
storeTweet(title, origin, original_link)
Save a retrieved content item in the collection that stores content for tweets
Parameters:
| Name | Type | Description |
|---|---|---|
title |
string | The title of the article to save |
origin |
string | The name of the site that published the content |
original_link |
string | The full url to the piece of content |
- Source:


Property that allows the component to setup an anchor tag
Property that allows the component to have danger state
Property that allows the component to have disabled state
Property that allows the component to setup a url
Property that allows the component to have inverted state
Property that allows the component to have large state
Property that allows the component to have link state
Property that allows the component to have primary state
Property that allows the component to have small state
Method to attach shadow CSS to the component
Method to handle the anchor property on button click
Method to handle the href property on button click
Method to render the component into the DOM
Generated using TypeDoc
How to declare:
<lazy-image src="assets/img/img1.jpg" responsive alt="Responsive image" width="1500" height="1000"></lazy-image>


Fabric Gateway¶
Fabric Gateway is a Kubernetes control plane for Skipper, the open-source HTTP router. It delivers a feature-rich API gateway that secures applications at the point of ingress to a Kubernetes cluster. It is a security-audited and scalable solution that makes it easy for developers to secure and monitor APIs at scale.
Configuration¶
Fabric Gateway is configured via a Kubernetes Custom Resource Definition (CRD) of kind FabricGateway
. To enable for an application create the FabricGateway
resource in your cluster.
apiVersion: zalando.org/v1
kind: FabricGateway
metadata:
name: my-app-gateway
spec:
# Simple Mode with static Service
x-fabric-service:
- host: my-app.smart-product-platform-test.zalan.do
serviceName: my-app-service-name
servicePort: http
x-fabric-admins:
- bmooney
- fmoloney
- cgallagher
- jblogs
paths:
/api/resource:
post:
x-fabric-privileges:
- "spp-application.write"
x-fabric-ratelimits:
default-rate: 10
# Valid values are 'hour', 'minute' and 'second', defaults to 'minute' if omitted.
period: minute
target:
stups_spp_service_name: 50
/api/resource/*:
get:
x-fabric-privileges:
- "spp-application.read"
put:
x-fabric-privileges:
- "spp-application.write"
x-fabric-ratelimits:
default-rate: 10
patch:
x-fabric-privileges:
- "spp-application.write"
x-fabric-ratelimits:
default-rate: 10
/events:
post:
x-fabric-privileges:
- "spp-application.read"
Gateway can be configured to work in Dynamic Mode with an external Kubernetes service provider such as StackSets, or in Simple Mode with a static service defined. See Dynamic Mode and Simple Mode sub-sections below.
N.B. If using FabricGateway
to manage auth for your service, remove any existing ingress resources for your service. You should not have both as an existing ingress could allow unauthenticated traffic to your backend service.
Dynamic Mode - Externally Managed Services (eg StackSets)¶
In Dynamic Mode Fabric Gateway will work with an external operator that manages the creation of Kubernetes services. This is enabled by setting the x-external-service-provider
key as per the below example.
apiVersion: zalando.org/v1
kind: FabricGateway
metadata:
name: stackset-managed-test
spec:
x-external-service-provider:
hosts:
- stackset-managed-test.cluster.zalan.do
stackSetName: <name-of-stackset-k8s-resource>
paths:
/resources:
get: {}
In the above example, we are not defining any services (and it is illegal to define services via the x-fabric-service
key if you have the x-external-service-provider
set) in the Gateway resource. Instead, we are saying that these services will be provided by a StackSet operator. The created gateway will not generate any ingress resources until the named StackSet is present and has service details available.
Versioned Hosts¶
When using the stackset integration, the gateway will also configure a host for accessing each stack individually, ignoring traffic-switching. For example, if you have stacks my-stack-v1
and my-stack-v2
and the gateway operator has set VERSIONED_HOSTS_BASE_DOMAIN
to cluster.zalan.do
, you will be able to access the stacks at https://my-stack-v1.cluster.zalan.do
and https://my-stack-v2.cluster.zalan.do
respectively.
For these hosts:
- All authorization, cors and other configured rules will still apply.
- Rate-limiting is done by path and shared between hosts. This means you can use up the rate-limit by using any combination of versioned hosts and the main traffic-switched host. In the above example, hitting
https://my-stack-v1.cluster.zalan.do/api
, thenhttps://my-stack-v2.cluster.zalan.do/api
, thenhttps://my-stack.cluster.zalan.do/api
counts as 3 towards your rate-limit for the/api
path.
Simple Mode - Static Service¶
In Simple Mode an existing Kubernetes service is declared in the FabricGateway
resource. This is done by setting the x-fabric-service
key as per the below example.
apiVersion: zalando.org/v1
kind: FabricGateway
metadata:
name: stackset-managed-test
spec:
x-fabric-service:
- host: my-app.smart-product-platform-test.zalan.do
serviceName: my-app-service-name
servicePort: http
paths:
/resources:
get: {}
For servicePort
, you must specify a named port from your service definition. If you don’t specify servicePort
, Fabric Gateway defaults to a port named ‘http’.
Below is an example of a service with a named port:
apiVersion: v1
kind: Service
metadata:
labels:
application: "{{ APPLICATION }}"
version: "{{ VERSION }}"
name: "{{ APPLICATION }}"
spec:
selector:
application: "{{ APPLICATION }}"
type: ClusterIP
ports:
- name: http
port: 80
targetPort: 8080
Gateway Features¶
Fabric Gateway provides the following features.
- Authentication
- Authorization
- Admin Access
- Service Whitelisting
- Employee Whitelisting
- Encryption In Transit
- Rate Limiting
- Cross-Origin Resource Sharing
- Custom Filter Configuration
Authentication¶
Fabric Gateway can be used in place of internal logic for authenticating access from other services using the
Zalando IAM service. As we only accept service
and employee
tokens, the gateway is not a candidate for customer
auth workflows. There will be a header added to the request, X-TokenInfo-Forward
.
This will contain the json response retrieved from from the Token Info endpoint,
but only the fields uid
, scope
and realm
.
Authorization¶
To confirm that each authenticated token is from a valid service or employee, the gateway will implicitly add a scope
check for the uid
scope. It is possible to add further scope restrictions to an endpoint by adding the scope name to
the x-fabric-privileges
key. For example if you have a privilege section for an endpoint defined as per below, then
the token will need the implicit uid
scope as well as both of the defined events.write
and service.write
scopes before
it will be allowed to access the endpoint.
...
/events:
post:
x-fabric-privileges:
- "events.write"
- "service.write"
Admin Access¶
Team members can be added to your x-fabric-admins
list. The uids in this list will have access to all endpoints and will not be subject to rate-limiting or other authentication rules.
Rate Limiting¶
If a client of the gateway is getting rate limited, they will get a 429
HTTP response code. There will also be some headers included to indicate
when they will be able to make requests again. Below is a sample rate limited
response from the gateway.
The Retry-After
header, shows the number of seconds before you may attempt a new request.
The informational X-Rate-Limit
header always shows the number of requests per hour which
the client is allowed to make, regardless of which period
is used when configuring the rate-limit.
curl -i -H "Authorization: Bearer $FDA" https://fgtestapp.smart-product-platform-test.zalan.do/limited/me
HTTP/2 429
date: Tue, 26 Mar 2019 12:05:51 GMT
content-type: text/plain; charset=utf-8
content-length: 18
retry-after: 53
server: Skipper
x-content-type-options: nosniff
x-rate-limit: 120
N.B.
If you want to apply a service specific rate-limit, then the service name must be prepended with
stups_
. This can be seen in the x-fabric-ratelimits.target
section of the main Configuration
example above.
Encryption In Transit¶
The gateway (via the underlying Load Balancer) ensures that no requests are hitting your service
unless they are encrypted using https
. This is achieved at the Load Balancer which will respond with a 308 redirect
to any non TLS traffic. This is an extra layer of
security to ensure that people are not interacting with your service in
an insecure manner.
An example request can be seen below:
curl -i -H "Authentication: Bearer $(ztoken)" http://fgtestapp.smart-product-platform-test.zalan.do/resources
HTTP/1.1 308 Permanent Redirect
Location: https://fgtestapp.smart-product-platform-test.zalan.do/resources
Server: Skipper
Date: Thu, 23 Sep 2021 07:40:00 GMT
Transfer-Encoding: chunked
Multiple Hosts¶
All created Skipper routes will match incoming requests first by their host.
If you have multiple hosts for a service, then each of these needs to be listed in the gateway resource.
Service Whitelisting¶
You can define either a global or a route-level whitelist for your gateway as per the below examples. What this means is that only services whose names are defined in the whitelist will be able to interact with your service. All other access requirements, i.e. scopes and rate limits, will still apply to the whitelisted service.
apiVersion: zalando.org/v1
kind: FabricGateway
metadata:
name: my-app-gateway
spec:
x-fabric-service:
- host: my-app.smart-product-platform-test.zalan.do
serviceName: my-app-service-name
servicePort: http
x-fabric-admins:
- jblogs
x-fabric-whitelist:
- stups_some-whitelisted-service
paths:
/api/resource:
get:
x-fabric-privileges:
- "spp-application.write"
post:
x-fabric-privileges:
- "spp-application.write"
# This is a more fine-grained whitelist and overrides the global whitelist. Only some-other-service can access this path.
# This id is taken from the "sub" field of a JWT token. For a service, this value is always "stups_" followed by the application's Kio id.
# some-whitelisted-service from the global whitelist cannot access this path.
x-fabric-whitelist:
service-list:
- stups_some-other-service
head:
x-fabric-privileges:
- "spp-application.read"
# Another type of fine-grained whitelist over-ride is to disabled whitelisting altogether and allow any
# service which has the correct scopes to access the route.
x-fabric-whitelist:
state: disabled
service-list: []
/api/resource/{resource_id}:
put:
# This whitelist config overrides the global whitelist and because of the empty whitelist
# no other service will be able to access this route. i.e. Only defined admins would be able to access the
# route
x-fabric-whitelist:
service-list: []
Employee Whitelisting¶
Employee tokens do not use scopes, so in order to allow certain employees access to an endpoint we must whitelist their uid. Note that this is different to Admin Access since admins are not subject to rate limits.
In the example below, we can see that the /api/resource
get
endpoint can be accessed by services with the spp-application.write
scope or the employee whose uid is useruid
. The service and the employee will be subject to a ratelimit of 5 requests per minute.
It is also possible to whitelist all employee tokens for an endpoint. In the example of the /api/secondary-resource
, we can see that the employee access type is set to allow_all
. This means that all employee tokens will be allowed access to this endpoint in spite of any scope restrictions which are present. Each employee will still be subject to the 5 requests per second rate limit. N.B. It’s important to note that you cannot define a user-list
if you have the access type set to allow_all
.
apiVersion: zalando.org/v1
kind: FabricGateway
metadata:
name: my-app-gateway
spec:
x-fabric-service:
- host: my-app.smart-product-platform-test.zalan.do
serviceName: my-app-service-name
servicePort: http
paths:
/api/resource:
get:
x-fabric-privileges:
- "spp-application.write"
x-fabric-employee-access:
type: allow_list
user-list:
- useruid
x-fabric-ratelimits:
default-rate: 5
/api/secondary-resource:
get:
x-fabric-privileges:
- "spp-application.write"
x-fabric-employee-access:
type: allow_all
x-fabric-ratelimits:
default-rate: 5
CORS Support¶
For browser applications to communicate directly with an API, the API needs to support Cross-Origin Resource Sharing. The Gateway supports this by automatically adding an OPTIONS endpoint to each of your paths to handle browser Preflight Requests. The origins and headers you configure will be allowed in the response headers. Additionally, configuring cors support causes the Access-Control-Allow-Origin header to contain the request’s Origin if you have whitelisted it here.
Note: We do not allow *
to be used as an allowed origin. Every Gateway API will want to allow the Authorization
and Content-Type
headers here, to allow auth tokens and the application/json
Content-Type
to be used.
In the example below, they gateway will generate an OPTIONS route for the /api/resources
path. This will support preflighted requests for your listed HTTP verbs, allowedOrigins
and allowedHeaders
. Once the preflight is done, the actual request will also automatically have the right Access-Control-Allow-Origin
header if the request Origin is allowed.
apiVersion: zalando.org/v1
kind: FabricGateway
metadata:
name: my-app-gateway
spec:
x-fabric-service:
- host: my-app.smart-product-platform-test.zalan.do
serviceName: my-app-service-name
servicePort: http
x-fabric-cors-support:
allowedOrigins:
- example.com
- example-other.com
allowedHeaders:
- Authorization
- Content-Type
- X-Flow-Id
paths:
/api/resource:
get:
x-fabric-privileges:
- "spp-application.write"
Compression¶
It is possible to enable compression of responses on Skipper. This is managed at a global level by the gateway by using the x-fabric-compression-support
key. This enables you to set a compression factor for a specific content/type. This is explained in more detail in the Skipper docs. It’s important to note that whether or not the compression is applied is still dependant on the client providing the appropriate Accept-Encoding
header, and will only be applied to service routes (i.e. not to admin routes).
apiVersion: zalando.org/v1
kind: FabricGateway
metadata:
name: my-app-gateway
spec:
x-fabric-service:
- host: my-app.cluster.zalan.do
serviceName: my-app-service-name
servicePort: http
x-fabric-compression-support:
compressionFactor: 3
encoding: application/json
paths:
/api/resource:
get:
x-fabric-privileges:
- "spp-application.write"
Static Endpoint Response¶
A static response for a particular endpoint can be configured via x-fabric-static-response
. This is primarily useful for testing or for blocking access to an endpoint temporarily. Admins will also receive this static response.
apiVersion: zalando.org/v1
kind: FabricGateway
metadata:
name: my-gateway
spec:
x-fabric-service:
- host: my-app.smart-product-platform-test.zalan.do
serviceName: my-app-service-name
servicePort: http
paths:
/api/resource:
post:
x-fabric-static-response:
status: 503
headers:
Content-Type: application/problem+json
body: '{"title": "Service down for maintenance", "status": 503}'
Custom Filter Configuration¶
In some situations it’s desirable to have the ability to add extra Skipper filters into a gateway managed ingress which aren’t explicitly modeled in the Fabric Gateway Custom Resource Definition. To this end, the gateway operator allows the pass-through of an allow-list of filters which will be appended to the filters present in the proxy routes managed by the gateway operator. This is achieved through the use of an annotation on a gateway resource as outlined in the below example. As can be seen in the example, additional filters need to be populated in an annotation named: fabric/additional-filters
and chained (in the usual Skipper manner) by using the ->
delimiter.
apiVersion: zalando.org/v1
kind: FabricGateway
metadata:
name: my-app-gateway
annotations:
fabric/additional-filters: fadeIn("1m") -> tee("https://some-other-backend.zalandoapis.com/api")
spec:
x-fabric-service:
- host: my-app.my-cluster.zalan.do
serviceName: my-app-service-name
servicePort: http
paths:
/api/resource:
get:
x-fabric-privileges:
- "spp-application.read"
N.B. The addition of filters outside those generated by the gateway operator is inherently unsafe. Work has gone into the gateway operator to ensure that the combinations of filters and predicates used for requests do not result in unexpected behaviour for services, when adding in extra filters, it is impossible for the gateway operator to understand what impact this will have on routing of requests. Therefore, it is important to test any filter additions thoroughly in a staging environment before pushing these changes live.
Other¶
Path Matching¶
There are some rules around path matching in the gateway which are outlined below.
- Dynamic path segments should be represented by either a
*
or a{named}
parameter - Wildcard matching of multiple path segments can be performed by using
**
, the**
must be the last part of the path - The paths “/foo” and “/foo/” are not the same. This can be configured in skipper, but the K8s clusters do not have this configured and it would be a breaking change to configure it.
Examples of some valid and invalid paths are outlined below:
apiVersion: zalando.org/v1
kind: FabricGateway
metadata:
name: my-app-gateway
spec:
x-fabric-service:
- host: my-app.smart-product-platform-test.zalan.do
serviceName: my-app-service-name
servicePort: http
x-fabric-admins:
- jblogs
paths:
# This is an exact path match. The only URI that will be matched is a GET request against `/api/resource`
/api/resource:
get:
x-fabric-privileges:
- "spp-application.read"
# Match a path which has a dynamic segment. This will match any identifer for the resource
# e.g. /api/resource/123 /api/resource/abc-123 etc...
# However this will only match a single path segment so the below would not be matched
# /api/resource/123/sub-resource
/api/resource/*:
get:
x-fabric-privileges:
- "spp-application.read"
# This is the exact same as the above dynamic segment matching, except that the segment is named.
# The name of the segment currently has no extra significance
/api/resource/{resource_id}:
get:
x-fabric-privileges:
- "spp-application.read"
# The double * is a wildcard match. This wildcard will match across multiple segments in the URI
# For example the following paths would be successfully matched:
# e.g. /api/someresource/123 /api/someresource/123/sub-resource /api/someresource/123/sub-resource/123
/api/someresource/**:
get:
x-fabric-privileges:
- "spp-application.read"
# There is a requirement for ** to be at the end of the path. The below path key would be considered
# invalid
/api/someresource/**/subkey:
get:
x-fabric-privileges:
- "spp-application.read"


Zombie Animatronics Server
User Profile
Settings
Logout
Dashboard
Dashboard
Floor Plan
Node Panel
Controls
Activate Node
Start
Stop
Targets
Elsa
Ruby
Sensors
Belle
Aurora


Action
Swipeout content
Delete
Action
Swipeout content
Delete
Action
Swipeout content
Delete
Action
Swipeout content
Delete
Action
Swipeout content
Delete
Action
Swipeout content
Delete
Action
Swipeout content
Delete
Action
Swipeout content
Delete
Action
Swipeout content
Delete
Action
Swipeout content
Delete
Action
Swipeout content
Action


Messages : View all
Create Message
ID
Created
Summary
No messages
1
July 11, 2012 2:17:16 PM CDT
The summary


Save tree
Download JSON tree file
Upload JSON tree file
Rename Node
Node name
Cancel
Rename
×
Create Node
Node name
Cancel
Create
×
Upload JSON tree file
JSON tree file
Cancel
×


Meeting app
A simple application for secure p2p based meetings
demoSimple Call Group Call
A simple application for secure p2p based meetings
demoOne of the two person has to first go to "Simple Call", then choose whatever username you want and whatever password you want, but remember the password and click on "Call someone". You will be taken to a add participant page. wait there till 2nd user does step #2.
Step 2The other person will go to "Simple Call" and fill in
whatever
username but use the same password
as the first guy used (first person has to share this with other).
After that the second guy has to share only his username with 1st guy. Now click "Wait for a call". You will be
taken to a waiting area. Wait there till 1st person call you.
Now 1st person has to add a participant by filling the username of person he/she wanna call (the username provided by 2nd guy to you in step #2). Then click "Add participant" and allow all permissions for audio and video.
Step 4Both participants will be presented with series of log messages of connection. Click "Start video call".
Step 5
Enjoy!
Make sure not to refresh the page.
One of the person (the host) has to first go to "Group Call", then choose whatever username you want and whatever password you want, but remember the password and click on "Call someone". You will be taken to a add participant page. wait there till all other participants do step #2.
Step 2All other participants will go to "Group Call" and fill in
whatever
username but use the same password
as the first guy (the host) used (first person (the host) has to share this with others).
After that all other guys have to share only their username with 1st guy (the host). Now click "Wait for a
call". You will be
taken to a waiting area. Wait there till 1st person / host calls you.
Now 1st person (the host) has to add a participant by filling the username of person he/she wanna call (the username provided by all others to you in step #2). Then click "Add participant" and allow all permissions for audio and video.
Step 4After call is connected between any two (the host and other guy) then the host can add more participants from "Add participant" button
Step 5
Enjoy!
Make sure not to refresh the page.
A simple application for secure p2p based meetings
demo


Don’t be deceived; Wee does not cause MADNESS – Ras Kuuku
by MyNewsGHReggae artiste, Ras Kuuku says cannabis do not cause madness as some persons have been deceived to believe.
He said while speaking to Dj Adviser on Accra-based Happy FM that “the European’s wisdom is equal to that of the African. But how come they’ve legalised weed and mental illness has not increased because of the use of ‘wee’.
This is a misconception we need to clear. ‘Wee’ doesn’t cause mental illness.”
Ras Kuuku appealed to government to desist from arresting the youth who smoke the herb but rather find a way to regulate its use.
Source:MyNewsGh.com/Ayeh Offei-Akoto/2019


{% extends "base.html" %} {% block content %}
This application allows users to lease access to files in an s3 bucket.
Upon being granted access, a user can edit these files on their local filesystem.
Upon completion of the lease, the file will be persisted to the original s3 bucket with any changes included
{% endblock content %}