Larry Ewing | Update Conference Prague 2019 Larry is a Senior Software Engineering Manager at Microsoft on the Mono WebAssembly team. He has been an Open Source software contributor for more than 20 years and worked on .NET based Linux desktop applications and Moonlight at Novell before joining Xam...
Pro Tip: using static Microsoft.AspNetCore.Http.StatusCodes When building a web server in ASP.NET Core, the APIs that deal with status codes are int based, there are multiple ways to express a status code in your code, in this post I will share my favourite. // Stop doing this:context.Response.StatusCode = (int) H...
Fixing Random, bonus episode 2: pigeons and the noisy-or distribution Source code for this episode is here. Welcome to this special bonus episode of Fixing Random, the immensely long blog series where I discuss ways to add probabilistic programming features into C#. …
Homepage | ZKProof Standards ZKProof is an open-industry academic initiative that seeks to mainstream zero-knowledge proof (ZKP) cryptography through an inclusive, community-driven standardization process that focuses on interoperability and security.
dotnet/SqlClient Microsoft.Data.SqlClient provides database connectivity to SQL Server for .NET applications. - dotnet/SqlClient
I Don't Like Notebooks - Joel Grus - #JupyterCon 2018 I Don't Like Notebooks hi, I'm Joel, and I don't like notebooks Joel Grus (@joelgrus) #JupyterCon 2018
Announcing .NET Jupyter Notebooks - Scott Hanselman Jupyter Notebooks has been the significant player in the interactive development space for many years, and Notebooks ...
Maintaining cryptographic library for 12 languages Maintaining cross-platform cryptographic library is a journey full of unexpected bugs, language-specific hacks, difficult decisions and endless struggle to make developer-facing APIs easy-to-use and hard-to-misuse. https://github.com/cossacklabs/themis ...
Initial HTTP/3 Implementation in Kestrel by jkotalik · Pull Request #16914 · dotnet/aspnetcore 💰 💰 💰 💰 💰 💰 This is the initial port of an HTTP/3 server implementation in Kestrel. It is very rough right now; many things need to be refactored and improved. This PR will add Http3Connection, Htt...
Bosses at Vice and The Fader Ignored Sexual Misconduct, Employees Allege, Until Women on Twitter Began Exposing It On November 2, former music journalist Lauren Nostro published a tweet: “It’s so wild that {redacted} is able to run an entire digital magazine when hes [sic] also running people out of the place because “he can’t keep his dick in his pants.” In the tight...


Note that you must first create a video object, so other operations are disabled until you do that.
Ingest Video
Create video object Ingest Video
Transcode or Replace Video
Retranscode video Replace
Ingest Media Assets
Add images Add text tracks
API request:
Input data for write requests:
Request method:
Response data


Security professional by day, and a hacking enthusiast by night, here is a collection of walkthroughs, writeups and notes made public to aide others along the same journey.
# sudo apt update
{% assign sorted = (site.news | sort: 'date') | reverse %}
{% for article in sorted %}
|


@Documented
@Target(value=METHOD)
@Retention(value=RUNTIME)
public @interface OnChange
@Autowired
SString name;
@OnChange("name")
void onChange( String newValue, String oldValue ){
// Invoked when the name field is changed by browsers.
}
Events propagate to parents. To catch an event triggered by a child, use a name prefixed with a child name.
@Component
class MyComponent extends AbstractComponent {
@Autowired
SString bar;
}
@Controller
class MyController {
@Autowired
MyComponent foo;
@OnChange("foo.bar")
void onChange(){
// Called when the 'bar' field of the child 'foo' is changed
}
}
The methods are invoked with two optional arguments. Argument types and their meanings are different among field types as follows:
| Field type | Argument type | First argument | Second argument |
|---|---|---|---|
SBoolean | Boolean | new value | old value |
SInteger | Integer | new value | old value |
SLong | Long | new value | old value |
SFloat | Float | new value | old value |
SDouble | Double | new value | old value |
SString | String | new value | old value |
SClass | T | new value | old value |
SArrayNode | ArrayNode | new value | old value |
SObjectNode | ObjectNode | new value | old value |
SJsonNode | JsonNode | new value | old value |
SList | SortedMap<Integer, T> (sorted in ascending order of keys) | sorted map of inserted values and their index | sorted map of removed values and their index |
SMap | Map<String, T> | map of inserted values and their keys | map of removed values and their keys |
SROQueue | does not emit a change event |
In case of SString
, arguments are, for instance, two strings
representing a new value and an old value as shown above.
Arguments are optional. All of the following are, thus, valid.
@OnChange("name")
static void onChange(){}
@OnChange("name")
static void onChange( String newValue ){}
When a method is called, a controller owing the method is locked for preventing simultaneous modifications.
For instance, in the above example, when the 'onChange' method is called, the 'MyController' controller is locked.
The only exception to this is the case that a modified field belongs to a component annotated with SharedComponent
and an event handler method does not belong to the same component, because shared components and the other controllers do not share a lock.
| Modifier and Type | Required Element and Description |
|---|---|
java.lang.String[] |
value |


Blog
The difficulty in learning a new Programming Language
Programming Languages come in all shapes and sizes. When attempting to learn a new Programming Language there are many hurdles one has to overcome, some easy and some very challenging.
Here I will explore what some of these hurdles are.
Use automated code formatting
Tabs or spaces? Newlines before braces? End every line with a semicolon, even if unneeded? Code formatting is one of those topics where discussions are endless and consensus is pretty much impossible. Everybody prefers things a certain way and sometimes it can be tough to find a middle ground where everyone is happy.
In this post I will argue in favor of using tools to enforce code formatting in order to ensure it stays consistent.
Short Thoughts: The existential horror of Progress Bars
Progress bars are UI elements that have been in use for decades. They are so commonplace that not only we don’t question them, but we also expect them to be there. However, are they actually any good? Do we need them?
Python Decorators
Originally described in the “Design Patterns: Elements of Reusable
Object-Oriented Software” book, decorators are a powerful design pattern that
allows us to extend or augment an object’s functionality. In this post I will
show with some practical examples how this can be achieved in Python via the
@decorator
syntax.
Short Thoughts: keep your tests simple
Writing good tests, whether they are unit, acceptance, integration etc, is hard. Few tests will run quickly but probably won’t cover much of the code, however, having high coverage doesn’t mean your tests are good either. The way tests are written also depends on what the software and it’s structure is. Notwithstanding, there’s one aspect that I believe always helps, simplicity.
Short Thoughts: Microsoft’s GitHub acquisition
It has recently been announced that Microsoft will be acquiring Github got USD 7.5b. The news was received by some with dismay as Microsoft has historically been seen as a threat to Open Source (Linux is a cancer, anyone?), while it was praised by others who consider Microsoft has changed. What will the future hold for Github and Open Source?
Python Classes, namedtuples and __slots__
Data types are needed in pretty much every program that needs to store and manipulate data. These types usually have little to no behavior and simply exist to keep track of information in a structured and orderly way. Recently, PEP 557 (Data Classes) was accepted, however, it won’t appear until Python 3.7.
In this Blog Post we will explore what options currently exist in Python 2.7 and 3.6 and how they differ from each other.
Text editors: which is the best?
Text editors are probably the most basic tool of every software developer, without them we would not be able to do our jobs. It makes sense then to try and find out what the best text editor is, doesn’t it? Is it Vim? Is it Emacs? Is it another? It’s important to first look at what we want in a text editor before we are able to answer this.
GDQ - Playing games for fun and charity
In a nutshell, speedrunning is trying to finish a game as fast as possible. There’s different set of rules for each game (called categories), but it always boils down to how fast a game can be finished.
Video games mean different things for different people. For some they are their day-to-day source of entertainment or it’s their competitive nature that speaks to them, while for others it may be childhood nostalgia. Whatever reason that may be, GDQ, the seven day speedrunning marathon raises incredible amounts of money for charity each year, and it only keeps on growing.
Code smell and a lesson learned
In an ideal world there’s always time and resources available to refactor code and to make sure it is as clean as possible. Even though it is well known that refactoring code helps with maintainability and thus reduces development costs in the long run, for various reasons refactoring does not always happen, or at least not until things start to fall apart.
In this post I will tell a little horror story that happened to me recently and that could have been avoided if we had stopped to refactor the code we were working on…
Amet - Flattening a Python dictionary as environment variables
I recently had to build an ETL job in Python that was initially going to be deployed on AWS. Little did I know that a last minute change from AWS to Heroku would cause me to change how the job’s configuration was going to be read significantly.
Cross compiling Go applications
I often write blog posts on different computers. Sometimes I write on my Macbook (which is where I run a local Hugo server to test things out), other times I SSH into my Raspberry Pi and write there until I am on my Macbook again. While writing my Why I learned Python blog post I asked some friends for feedback, however, I did not want to push an unfinished post to Github Pages, so I decided to serve my Hugo blog from my Raspberry Pi. I soon realized that I would have to install Hugo from source which could mean trouble…
Why I learned Python
About eleven years ago, after finishing my first semester in University I decided to learn how to program in Python. In this post I will talk about why I found Python interesting at the time as well as how it felt to me as someone with little programming knowledge.
Creating this Blog with Hugo
It’s sometimes a bit funny how trends come and go in tech. For a long time dynamic websites were seen as the way to go, no matter for what kind of content. Lately a lot of people have gone back to basics and (thankfully) decided to build their sites as a collection of static pages.
When I started this blog I decided I did not want to go through the hassle of maintaining a complex site and decided to use Hugo, a static site generator. In this post I will talk about my experience building my blog using Hugo.
Android Handlers, Loopers, Message Queues and communication between Threads
In Android applications, as well as in applications with a GUI in general,
doing work in the background is essential as we do not want the UI to be
blocked by long running tasks that may cause it to appear to be frozen.
The Android Framework provides a simple but interesting mechanism for
communicating with background threads via the use of the Message
and
Handler
classes. In this post I will attempt to explain not only how to use
them, but also how they relate to the Looper
and the MessageQueue
classes.
A simple Material Design ripple effect for any iOS view
Some time ago I had to create a background color transition animation for an iOS app I was working on. This animation was pretty similar to the ripple effect Material Design buttons have. I thought it would be a fun idea to go back and revise what I had done, change the animation so that it looks like the Material Design ripple effect and create a UIView category with it.
This blog post shows an implementation of this animation that can be applied to any UIView.
Hello World!
Hello and welcome to my personal blog!
I’ve been meaning to have a place to write and express my thoughts for a while now, so I figured I might as well start my own blog. My intention is to update this as often as I can with posts about topics such as Software Engineering, Programming or other interests of mine like Video Games.


IFSC
Indian Financial System Code
Enter code to get bank branch details. Sample IFSC ICIC0000816 (Click to copy)


r2R0.Rd
The function r2R0
can be used to transform a growth rate into a
reproduction number estimate, given a generation time distribution. This uses
the approach described in Wallinga and Lipsitch (2007, Proc Roy Soc B
274:599–604) for empirical distributions. The function lm2R0_sample
generates a sample of R0 values from a log-linear regression of incidence
data stored in a lm
object.
r2R0(r, w, trunc = 1000) lm2R0_sample(x, w, n = 100, trunc = 1000)
| r | A vector of growth rate values. |
|---|---|
| w | The serial interval distribution, either provided as a
|
| trunc | The number of time units (most often, days), used for truncating
|
| x | A |
| n | The number of draws of R0 values, defaulting to 100. |
It is assumed that the growth rate ('r') is measured in the same time unit as the serial interval ('w' is the SI distribution, starting at time 0).
## Ebola estimates of the SI distribution from the first 9 months of ## West-African Ebola oubtreak mu <- 15.3 # days sigma <- 9.3 # days param <- gamma_mucv2shapescale(mu, sigma / mu) if (require(distcrete)) { w <- distcrete("gamma", interval = 1, shape = param$shape, scale = param$scale, w = 0) r2R0(c(-1, -0.001, 0, 0.001, 1), w) ## Use simulated Ebola outbreak and 'incidence' to get a log-linear ## model of daily incidence. if (require(outbreaks) && require(incidence)) { i <- incidence(ebola_sim$linelist$date_of_onset) plot(i) f <- fit(i[1:100]) f plot(i[1:150], fit = f) R0 <- lm2R0_sample(f$model, w) hist(R0, col = "grey", border = "white", main = "Distribution of R0") summary(R0) } }#>#>#>#> #> #> #>#> Warning: 22 dates with incidence of 0 ignored for fitting#> Min. 1st Qu. Median Mean 3rd Qu. Max. #> 1.182 1.261 1.290 1.288 1.318 1.424


@bind_hass
def start(hass, entity_id=None):
Tell all or specified vacuum to start or resume the current task.
data = {ATTR_ENTITY_ID: entity_id} if entity_id else None
hass.services.call(DOMAIN, SERVICE_START, data)
@bind_hass
def pause(hass, entity_id=None):
@bind_hass
def start(hass, entity_id=None):
Tell all or specified vacuum to start or resume the current task.
hass.add_job(async_start, hass, entity_id)
@callback
@bind_hass


#include "chip.h"
#include "USBD_HAL.h"
#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include <string.h>
Classes | |
| struct | TransferHeader |
| Describes header for UDP endpoint transfer. More... | |
| struct | Transfer |
| Describes a transfer on a UDP endpoint. More... | |
| struct | MblTransfer |
| Describes Multi Buffer List transfer on a UDP endpoint. More... | |
| struct | Endpoint |
| Describes the state of an endpoint of the UDP controller. More... | |
| struct | UdphsDmaDescriptor |
| DMA Descriptor. More... | |
Macros | |
| #define | DMA |
| #define | NUM_IT_MAX (UDPHS->UDPHS_IPFEATURES & UDPHS_IPFEATURES_EPT_NBR_MAX_Msk) |
| Maximum number of endpoints interrupts. More... | |
| #define | NUM_IT_MAX_DMA |
| Maximum number of endpoint DMA interrupts. More... | |
| #define | SHIFT_DMA 24 |
| Bits that should be shifted to access DMA control bits. More... | |
| #define | SHIFT_INTERUPT 8 |
| Bits that should be shifted to access interrupt bits. More... | |
| #define | DMA_MAX_FIFO_SIZE (65536/1) |
| Max size of the FMA FIFO. More... | |
| #define | EPT_VIRTUAL_SIZE 16384 |
| fifo space size in DW More... | |
| #define | UDPHS_ENDPOINT_DISABLED 0 |
| Endpoint states: Endpoint is disabled. More... | |
| #define | UDPHS_ENDPOINT_HALTED 1 |
| Endpoint states: Endpoint is halted (i.e. More... | |
| #define | UDPHS_ENDPOINT_IDLE 2 |
| Endpoint states: Endpoint is idle (i.e. More... | |
| #define | UDPHS_ENDPOINT_SENDING 3 |
| Endpoint states: Endpoint is sending data. More... | |
| #define | UDPHS_ENDPOINT_RECEIVING 4 |
| Endpoint states: Endpoint is receiving data. More... | |
| #define | UDPHS_ENDPOINT_SENDINGM 5 |
| Endpoint states: Endpoint is sending MBL. More... | |
| #define | UDPHS_ENDPOINT_RECEIVINGM 6 |
| Endpoint states: Endpoint is receiving MBL. More... | |
| #define | MBL_NbBuffer(i, o, size) (((i)>(o))?((i)-(o)):((i)+(size)-(o))) |
| Get Number of buffer in Multi-Buffer-List. More... | |
| #define | MBL_FULL 1 |
| Buffer list is full. More... | |
| #define | MBL_NULL 2 |
| Buffer list is null. More... | |
Functions | |
| static uint8_t | UDPHS_EnablePeripheralClock (void) |
| Enables the clock of the UDP peripheral. More... | |
| static void | UDPHS_DisablePeripheralClock (void) |
| Disables the UDP peripheral clock. More... | |
| static void | UDPHS_EnableUsbClock (void) |
| Enables the 480MHz USB clock. More... | |
| static void | UDPHS_DisableUsbClock (void) |
| Disables the 480MHz USB clock. More... | |
| static void | UDPHS_EnableBIAS (void) |
| Enables the BIAS. More... | |
| static void | UDPHS_DisableBIAS (void) |
| Disables the BIAS. More... | |
| static void | UDPHS_EndOfTransfer (uint8_t bEndpoint, uint8_t bStatus) |
| Handles a completed transfer on the given endpoint, invoking the configured callback if any. More... | |
| static uint8_t | UDPHS_MblUpdate (MblTransfer *pTransfer, USBDTransferBuffer *pBi, uint16_t size, uint8_t forceEnd) |
| Update multi-buffer-transfer descriptors. More... | |
| static uint8_t | UDPHS_MblWriteFifo (uint8_t bEndpoint) |
| Transfers a data payload from the current tranfer buffer to the endpoint FIFO. More... | |
| static void | UDPHS_WritePayload (uint8_t bEndpoint, int32_t size) |
| Transfers a data payload from the current tranfer buffer to the endpoint FIFO. More... | |
| static void | UDPHS_ReadPayload (uint8_t bEndpoint, int32_t wPacketSize) |
| Transfers a data payload from an endpoint FIFO to the current transfer buffer. More... | |
| static void | UDPHS_ReadRequest (USBGenericRequest *pRequest) |
| Received SETUP packet from endpoint 0 FIFO. More... | |
| static void | UDPHS_EndpointHandler (uint8_t bEndpoint) |
| Endpoint interrupt handler. More... | |
| static void | UDPHS_DmaSingle (uint8_t bEndpoint, Transfer *pXfr, uint32_t dwCfg) |
| DMA Single transfer. More... | |
| static void | UDPHS_DmaHandler (uint8_t bEndpoint) |
| Endpoint DMA interrupt handler. More... | |
| static uint8_t | UDPHS_Write (uint8_t bEndpoint, const void *pData, uint32_t dLength) |
| Sends data through a USB endpoint. More... | |
| static uint8_t | UDPHS_AddWr (uint8_t bEndpoint, const void *pData, uint32_t dLength) |
| Sends data through a USB endpoint. More... | |
| static uint8_t | UDPHS_Read (uint8_t bEndpoint, void *pData, uint32_t dLength) |
| Reads incoming data on an USB endpoint This methods sets the transfer descriptor and activate the endpoint interrupt. More... | |
| void | USBD_IrqHandler (void) |
| USBD (UDP) interrupt handler Manages device resume, suspend, end of bus reset. More... | |
| void | USBD_HAL_ResetEPs (uint32_t bmEPs, uint8_t bStatus, uint8_t bKeepCfg) |
| Reset endpoints and disable them. More... | |
| void | USBD_HAL_CancelIo (uint32_t bmEPs) |
| Cancel pending READ/WRITE. More... | |
| uint8_t | USBD_HAL_ConfigureEP (const USBEndpointDescriptor *pDescriptor) |
| Configures an endpoint according to its endpoint Descriptor. More... | |
| uint8_t | USBD_HAL_SetTransferCallback (uint8_t bEP, TransferCallback fCallback, void *pCbData) |
| Set callback for a USB endpoint for transfer (read/write). More... | |
| uint8_t | USBD_HAL_SetupMblTransfer (uint8_t bEndpoint, USBDTransferBuffer *pMbList, uint16_t mblSize, uint16_t startOffset) |
| Configure an endpoint to use multi-buffer-list transfer mode. More... | |
| uint8_t | USBD_HAL_Write (uint8_t bEndpoint, const void *pData, uint32_t dLength) |
| Sends data through a USB endpoint. More... | |
| uint8_t | USBD_HAL_WrWithHdr (uint8_t bEndpoint, const void *pHdr, uint8_t bHdrLen, const void *pData, uint32_t dLength) |
| Special write function. More... | |
| uint8_t | USBD_HAL_Read (uint8_t bEndpoint, void *pData, uint32_t dLength) |
| Reads incoming data on an USB endpoint This methods sets the transfer descriptor and activate the endpoint interrupt. More... | |
| void | USBD_HAL_Connect (void) |
| Enable Pull-up, connect. More... | |
| void | USBD_HAL_Disconnect (void) |
| Disable Pull-up, disconnect. More... | |
| void | USBD_HAL_RemoteWakeUp (void) |
| Starts a remote wake-up procedure. More... | |
| void | USBD_HAL_SetAddress (uint8_t address) |
| Sets the device address to the given value. More... | |
| void | USBD_HAL_SetConfiguration (uint8_t cfgnum) |
| Sets the current device configuration. More... | |
| void | USBD_HAL_Init (void) |
| Initializes the USB HW Access driver. More... | |
| uint8_t | USBD_HAL_Stall (uint8_t bEP) |
| Causes the given endpoint to acknowledge the next packet it receives with a STALL handshake except setup request. More... | |
| uint8_t | USBD_HAL_Halt (uint8_t bEndpoint, uint8_t ctl) |
| Sets/Clear/Get the HALT state on the endpoint. More... | |
| uint8_t | USBD_HAL_IsHighSpeed (void) |
| Indicates if the device is running in high or full-speed. More... | |
| void | USBD_HAL_Suspend (void) |
| Suspend USB Device HW Interface. More... | |
| void | USBD_HAL_Activate (void) |
Activate USB Device HW Interface
| |
| void | USBD_HAL_Test (uint8_t bIndex) |
| Certification test for High Speed device. More... | |
Variables | |
| static Endpoint | endpoints [CHIP_USB_NUMENDPOINTS] |
| Holds the internal state for each endpoint of the UDP. More... | |
| static const char | test_packet_buffer [] |
| 7.1.20 Test Mode Support Test codes for the USB HS test mode. More... | |
| static const uint8_t | forceUsbFS = 0 |
| Force FS mode. More... | |
| static UdphsDmaDescriptor | dmaLL [5] |
| DMA link list. More... | |
| static UdphsDmaDescriptor * | pDmaLL |
Implementation of USB device functions on a UDP controller.
See usbd_api_method USBD API Methods.
|
inlinestatic |
Sends data through a USB endpoint.
Sets up the transfer descriptor list, writes one or two data payloads (depending on the number of FIFO bank for the endpoint) and then starts the actual transfer. The operation is complete when all the transfer buffer in the list has been sent.
If the size of the buffer is greater than the size of the endpoint (or twice the size if the endpoint has two FIFO banks), then the buffer must be kept allocated until the transfer is finished. This means that it is not possible to declare it on the stack (i.e. as a local variable of a function which returns after starting a transfer).
| pEndpoint | Pointer to Endpoint struct. |
| pData | Pointer to a buffer with the data to send. |
| dLength | Size of the data buffer. |
|
static |
Endpoint DMA interrupt handler.
This function handles DMA interrupts.
| bEndpoint | Index of endpoint |
|
inlinestatic |
DMA Single transfer.
| bEndpoint | EP number. Pointer to transfer instance. DMA Control configuration (excluding length). |
|
static |
Endpoint interrupt handler.
Handle IN/OUT transfers, received SETUP packets and STALLing
| bEndpoint | Index of endpoint |
|
static |
Update multi-buffer-transfer descriptors.
| pTransfer | Pointer to instance MblTransfer. |
| size | Size of bytes that processed. |
| forceEnd | Force the buffer END. |
|
static |
Transfers a data payload from the current tranfer buffer to the endpoint FIFO.
| bEndpoint | Number of the endpoint which is sending data. |
|
inlinestatic |
Reads incoming data on an USB endpoint This methods sets the transfer descriptor and activate the endpoint interrupt.
The actual transfer is then carried out by the endpoint interrupt handler. The Read operation finishes either when the buffer is full, or a short packet (inferior to endpoint maximum size) is received.
The buffer must be kept allocated until the transfer is finished.
| bEndpoint | Endpoint number. |
| pData | Pointer to a data buffer. |
| dLength | Size of the data buffer in bytes. |
|
static |
Transfers a data payload from an endpoint FIFO to the current transfer buffer.
| bEndpoint | Endpoint number. |
| wPacketSize | Size of received data packet |
|
static |
Received SETUP packet from endpoint 0 FIFO.
| pRequest | Generic USB SETUP request sent over Control endpoints |
|
inlinestatic |
Sends data through a USB endpoint.
Sets up the transfer descriptor, writes one or two data payloads (depending on the number of FIFO bank for the endpoint) and then starts the actual transfer. The operation is complete when all the data has been sent.
If the size of the buffer is greater than the size of the endpoint (or twice the size if the endpoint has two FIFO banks), then the buffer must be kept allocated until the transfer is finished. This means that it is not possible to declare it on the stack (i.e. as a local variable of a function which returns after starting a transfer).
| pEndpoint | Pointer to Endpoint struct. |
| pData | Pointer to a buffer with the data to send. |
| dLength | Size of the data buffer. |
|
static |
Transfers a data payload from the current tranfer buffer to the endpoint FIFO.
| bEndpoint | Number of the endpoint which is sending data. |


{% extends 'layout-newia-symp.html' %} {% block pageTitle %} Mental Health {% endblock %} {% block beforeContent %} {% endblock %} {% block content %}
Go to 111.nhs.uk or call 111.
Go to Find your nearest A&E
Call 999
Includes eczema, impetigo and warts.
Includes breaks, pains and swellings.
Includes high temperature, shivers and tiredness.
Includes low mood, suicidal thoughts and anxiety.
Includes dry eyes, feeling dizzy and lice.
Includes lumps, sore throat and stiff neck.
Includes loss of feeling, pins and needles and problems carrying things.
Includes grip problems, lack of movement and tense muscles.
Includes chest pain, shortness of breath and stiffness.
Includes feeling sick, strains and tummy upsets.
Includes erection problems, lumps and burning sensations.
Includes bleeding, itchines and soreness.
Includes aching muscles, pain under the foot and stiff joints.


|
| | GaussianEliminationTree (const GaussianFactorGraph &factorGraph, const VariableIndex &structure, const Ordering &order) |
| | Build the elimination tree of a factor graph using pre-computed column structure. More...
|
| |
| | GaussianEliminationTree (const GaussianFactorGraph &factorGraph, const Ordering &order) |
| | Build the elimination tree of a factor graph. More...
|
| |
|
bool | equals (const This &other, double tol=1e-9) const |
| | Test whether the tree is equal to another.
|
| |
| std::pair< boost::shared_ptr< BayesNetType >, boost::shared_ptr< FactorGraphType > > | eliminate (Eliminate function) const |
| | Eliminate the factors to a Bayes net and remaining factor graph. More...
|
| |
|
const FastVector< sharedNode > & | roots () const |
| | Return the set of roots (one for a tree, multiple for a forest)
|
| |
|
const FastVector< sharedFactor > & | remainingFactors () const |
| | Return the remaining factors that are not pulled into elimination.
|
| |
|
void | swap (This &other) |
| | Swap the data of this tree with another one, this operation is very fast.
|
| |
|
void | print (const std::string &name="EliminationTree: ", const KeyFormatter &formatter=DefaultKeyFormatter) const |
| | Print the tree to cout.
|
| |
|
|
class | ::EliminationTreeTester |
| |
|
|
typedef EliminationTree< GaussianBayesNet, GaussianFactorGraph > | This |
| | This class.
|
| |
|
typedef boost::shared_ptr< This > | shared_ptr |
| | Shared pointer to this class.
|
| |
| | EliminationTree (const FactorGraphType &factorGraph, const VariableIndex &structure, const Ordering &order) |
| | Build the elimination tree of a factor graph using pre-computed column structure. More...
|
| |
| | EliminationTree (const FactorGraphType &factorGraph, const Ordering &order) |
| | Build the elimination tree of a factor graph. More...
|
| |
|
| EliminationTree (const This &other) |
| | Copy constructor - makes a deep copy of the tree structure, but only pointers to factors are copied, factors are not cloned.
|
| |
|
This & | operator= (const This &other) |
| | Assignment operator - makes a deep copy of the tree structure, but only pointers to factors are copied, factors are not cloned.
|
| |
|
| EliminationTree () |
| | Protected default constructor.
|
| |
|
bool | equals (const This &other, double tol=1e-9) const |
| | Test whether the tree is equal to another.
|
| |
|
FastVector< sharedNode > | roots_ |
| | concept check
|
| |
|
FastVector< sharedFactor > | remainingFactors_ |
| |
◆ GaussianEliminationTree() [1/2]
Build the elimination tree of a factor graph using pre-computed column structure.
- Parameters
-
| factorGraph | The factor graph for which to build the elimination tree |
| structure | The set of factors involving each variable. If this is not precomputed, you can call the Create(const FactorGraph<DERIVEDFACTOR>&) named constructor instead. |
- Returns
- The elimination tree
◆ GaussianEliminationTree() [2/2]
Build the elimination tree of a factor graph.
Note that this has to compute the column structure as a VariableIndex, so if you already have this precomputed, use the other constructor instead.
- Parameters
-
| factorGraph | The factor graph for which to build the elimination tree |
The documentation for this class was generated from the following files:


Welcome to the site All About My Pet
My pet is a dog. It's a male German Shephard called Tom. This is because I like Tom and Jerry.
Tom's favorite foods are:
Tom's favorite toys are:
Here is a site that sells great dog toys Chewy


Class 5: Feb. 21st
Welcome back!
Chris Novello is doing some interesting things these days with OSC...
Today's Class
- Take a quick look at everyone's controller experiments.
- Discuss OSC Many -> One Server and Client examples.
- Continue working with your partner on your small server/client experiments.
- Discuss Project 1.
OSC: Broadcast server and clients
- Leaner one-way communication clients.
- Connecting and disconnecting from an OSC broadcast server.
- This allows us to create flexible many-to-one forms of interaction.
- Week 4 examples in the sidebar.
Many -> One OSC experiments
- Continue working on your experiments for most of today's class session.
- Brief demonstration from each group at 2 p.m.
- Keep your goals with this modest. Think of it as research.
- No ellipses.
Project 1 (Due 3/14)
- Develop a project which connects [people in] real space using OSC.
- Both the form and subject matter are up to you.
- Interaction may not take place on a single computer.
Project Schedule:
- Feb. 28th: Work session. Individually discuss (potential) project ideas through sketches or writing.
- Mar. 7th: Work session. Prototype of key component(s) due.
- Mar. 14th: Project presentations. Eat, drink, be merry (I need snack suggestions...). Documentation session.
- Mar. 28th: Documentation and code due in class Drive.


In astropy.coordinates, as outlined in the Overview of astropy.coordinates concepts, subclasses of BaseCoordinateFrame (“frame classes”) define particular coordinate frames. They can (but do not have to) contain representation objects storing the actual coordinate data. The actual coordinate transformations are defined as functions that transform representations between frame classes. This approach serves to separate high-level user functionality (see Using the SkyCoord High-level Class) and details of how the coordinates are actually stored (see Using and Designing Coordinate Representations) from the definition of frames and how they are transformed.
Frame objects have two distinct (but related) uses. The first is storing the information needed to uniquely define a frame (e.g., equinox, observation time). This information is stored on the frame objects as (read-only) Python attributes, which are set with the object is first created:
>>> from astropy.coordinates import ICRS, FK5
>>> FK5(equinox='J1975')
<FK5 Frame (equinox=J1975.000)>
>>> ICRS() # has no attributes
<ICRS Frame>
>>> FK5() # uses default equinox
<FK5 Frame (equinox=J2000.000)>
The specific names of attributes available for a particular frame (and their default values) are available as the class method get_frame_attr_names:
>>> FK5.get_frame_attr_names()
OrderedDict([('equinox', <Time object: scale='utc' format='jyear_str' value=J2000.000>)])
You can access any of the attributes on a frame by using standard Python attribute access. Note that for cases like equinox, which are time inputs, if you pass in any unambiguous time string, it will be converted into an Time object with UTC scale (see Inferring input format):
>>> f = FK5(equinox='J1975')
>>> f.equinox
<Time object: scale='utc' format='jyear_str' value=J1975.000>
>>> f = FK5(equinox='2011-05-15T12:13:14')
>>> f.equinox
<Time object: scale='utc' format='isot' value=2011-05-15T12:13:14.000>
The second use for frame objects is to store actual realized coordinate data for frames like those described above. In this use, it is similar to the SkyCoord class, and in fact, the SkyCoord class internally uses the frame classes as its implementation. However, the frame classes have fewer “convenience” features, thereby keeping the implementation of frame classes simple. As such, they are created similarly to SkyCoord object. The simplest way is to use with keywords appropriate for the frame (e.g. ra and dec for equatorial systems):
>>> from astropy import units as u
>>> ICRS(ra=1.1*u.deg, dec=2.2*u.deg)
<ICRS Coordinate: (ra, dec) in deg
(1.1, 2.2)>
>>> FK5(ra=1.1*u.deg, dec=2.2*u.deg, equinox='J1975')
<FK5 Coordinate (equinox=J1975.000): (ra, dec) in deg
(1.1, 2.2)>
These same attributes can be used to access the data in the frames, as Angle objects (or Angle subclasses):
>>> coo = ICRS(ra=1.1*u.deg, dec=2.2*u.deg)
>>> coo.ra
<Longitude 1.1 deg>
>>> coo.ra.value
1.1
>>> coo.ra.to(u.hourangle)
<Longitude 0.07333333333333335 hourangle>
You can use the representation attribute in conjunction with the representation_component_names attribute to figure out what keywords are accepted by a particular class object. The former will be the representation class the system is expressed in (e.g., spherical for equatorial frames), and the latter will be a dictionary mapping names for that frame to the attribute name on the representation class:
>>> import astropy.units as u
>>> icrs = ICRS(1*u.deg, 2*u.deg)
>>> icrs.representation
<class 'astropy.coordinates.representation.SphericalRepresentation'>
>>> icrs.representation_component_names
OrderedDict([(u'ra', u'lon'), (u'dec', u'lat'), (u'distance', u'distance')])
The representation of the coordinate object can be changed, as shown below. This actually does nothing to the object internal data which stores the coordinate values, but it changes the external view of that data in two ways: (1) the object prints itself in accord with the new representation, and (2) the available attributes change to match those of the new representation (e.g. from ra, dec, distance to x, y, z). Setting the representation thus changes a property of the object (how it appears) without changing the intrinsic object itself which represents a point in 3d space.
>>> from astropy.coordinates import CartesianRepresentation
>>> icrs.representation = CartesianRepresentation
>>> icrs
<ICRS Coordinate: (x, y, z) [dimensionless]
(0.999238614955, 0.0174417749028, 0.0348994967025)>
>>> icrs.x
<Quantity 0.9992386149554826>
The representation can also be set at the time of creating a coordinate and affects the set of keywords used to supply the coordinate data. For example to create a coordinate with cartesian data do:
>>> ICRS(x=1*u.kpc, y=2*u.kpc, z=3*u.kpc, representation=CartesianRepresentation)
<ICRS Coordinate: (x, y, z) in kpc
(1.0, 2.0, 3.0)>
For more information about the use of representations in coordinates see the Representations section, and for details about the representations themselves see Using and Designing Coordinate Representations.
There are two other ways to create frame classes with coordinates. A representation class can be passed in directly at creation, along with any frame attributes required:
>>> from astropy.coordinates import SphericalRepresentation
>>> rep = SphericalRepresentation(lon=1.1*u.deg, lat=2.2*u.deg, distance=3.3*u.kpc)
>>> FK5(rep, equinox='J1975')
<FK5 Coordinate (equinox=J1975.000): (ra, dec, distance) in (deg, deg, kpc)
(1.1, 2.2, 3.3)>
A final way is to create a frame object from an already existing frame (either one with or without data), using the realize_frame method. This will yield a frame with the same attributes, but new data:
>>> f1 = FK5(equinox='J1975')
>>> f1
<FK5 Frame (equinox=J1975.000)>
>>> rep = SphericalRepresentation(lon=1.1*u.deg, lat=2.2*u.deg, distance=3.3*u.kpc)
>>> f1.realize_frame(rep)
<FK5 Coordinate (equinox=J1975.000): (ra, dec, distance) in (deg, deg, kpc)
(1.1, 2.2, 3.3)>
You can check if a frame object has data using the has_data attribute, and if it is preset, it can be accessed from the data attribute:
>>> ICRS().has_data
False
>>> cooi = ICRS(ra=1.1*u.deg, dec=2.2*u.deg)
>>> cooi.has_data
True
>>> cooi.data
<UnitSphericalRepresentation (lon, lat) in deg
(1.1, 2.2)>
All of the above methods can also accept array data (or other Python sequences) to create arrays of coordinates:
>>> ICRS(ra=[1.5, 2.5]*u.deg, dec=[3.5, 4.5]*u.deg)
<ICRS Coordinate: (ra, dec) in deg
[(1.5, 3.5), (2.5, 4.5)]>
If you pass in mixed arrays and scalars, the arrays will be broadcast over the scalars appropriately:
>>> ICRS(ra=[1.5, 2.5]*u.deg, dec=[3.5, 4.5]*u.deg, distance=5*u.kpc)
<ICRS Coordinate: (ra, dec, distance) in (deg, deg, kpc)
[(1.5, 3.5, 5.0), (2.5, 4.5, 5.0)]>
An additional operation that may be useful is the ability to extract the data in different representations. E.g., to get the Cartesian form of an ICRS coordinate:
>>> from astropy.coordinates import CartesianRepresentation
>>> cooi = ICRS(ra=0*u.deg, dec=45*u.deg, distance=10*u.pc)
>>> cooi.represent_as(CartesianRepresentation)
<CartesianRepresentation (x, y, z) in pc
(7.07106781187, 0.0, 7.07106781187)>
To transform a frame object with data into another frame, use the transform_to method of an object, and provide it the frame you wish to transform to. This frame can either be a frame class, in which case the default attributes will be used, or a frame object (with or without data):
>>> cooi = ICRS(1.5*u.deg, 2.5*u.deg)
>>> cooi.transform_to(FK5)
<FK5 Coordinate (equinox=J2000.000): (ra, dec) in deg
(1.50000660527, 2.50000238221)>
>>> cooi.transform_to(FK5(equinox='J1975'))
<FK5 Coordinate (equinox=J1975.000): (ra, dec) in deg
(1.17960348105, 2.36085320826)>
The Reference/API includes a list of all of the frames built into astropy.coordinates, as well as the defined transformations between them. Any transformation that has a valid path, even if it passes through other frames, can be transformed to. To programmatically check for or manipulate transformations, see the TransformGraph documentation.
Users can add new coordinate frames by creating new classes that are subclasses of BaseCoordinateFrame. Detailed instructions for subclassing are in the docstrings for that class. The key aspects are to define the class attributes default_representation and frame_specific_representation_info along with frame attributes as FrameAttribute class instances (or subclasses like TimeFrameAttribute). If these are defined, there is often no need to define an __init__ function, as the initializer in BaseCoordinateFrame will probably behave the way you want. As an example:
>>> from astropy.coordinates import BaseCoordinateFrame, FrameAttribute, TimeFrameAttribute, RepresentationMapping
>>> class MyFrame(BaseCoordinateFrame):
... # Specify how coordinate values are represented when outputted
... default_representation = SphericalRepresentation
...
... # Specify overrides to the default names and units for all available
... # representations (subclasses of BaseRepresentation).
... frame_specific_representation_info = {
... 'spherical': [RepresentationMapping(reprname='lon', framename='R', defaultunit=u.rad),
... RepresentationMapping(reprname='lat', framename='D', defaultunit=u.rad),
... RepresentationMapping(reprname='distance', framename='DIST', defaultunit=None)],
... 'unitspherical': [RepresentationMapping(reprname='lon', framename='R', defaultunit=u.rad),
... RepresentationMapping(reprname='lat', framename='D', defaultunit=u.rad)],
... 'cartesian': [RepresentationMapping(reprname='x', framename='X'),
... RepresentationMapping(reprname='y', framename='Y'),
... RepresentationMapping(reprname='z', framename='Z')]
... }
...
... # Specify frame attributes required to fully specify the frame
... location = FrameAttribute(default=None)
... equinox = TimeFrameAttribute(default='B1950')
... obstime = TimeFrameAttribute(default=None, secondary_attribute='equinox')
>>> c = MyFrame(R=10*u.deg, D=20*u.deg)
>>> c
<MyFrame Coordinate (location=None, equinox=B1950.000, obstime=B1950.000): (R, D) in rad
(0.174532925199, 0.349065850399)>
>>> c.equinox
<Time object: scale='utc' format='byear_str' value=B1950.000>
You can also define arbitrary methods for any added functionality you want your frame to have that’s unique to that frame. These methods will be available in any SkyCoord that is created using your user-defined frame.
For examples of defining frame classes, the first place to look is probably the source code for the frames that are included in astropy (available at astropy.coordinates.builtin_frames). These are not “magic” in any way, and use all the same API and features available to user-created frames. A more annotated example is also available in the Example: Defining A Coordinate Frame for the Sgr Dwarf documentation section.
A frame may not be too useful without a way to transform coordinates defined in it to or from other frames. Fortunately, astropy.coordinates provides a framework to do just that. The key concept for these transformations is the frame transform graph, available as astropy.coordinates.frame_transform_graph, an instance of the TransformGraph class. This graph (in the “graph theory” sense, not “plot”), stores all the transformations between all of the builtin frames, as well as tools for finding shortest paths through this graph to transform from any frame to any other. All of the power of this graph is available to user-created frames, meaning that once you define even one transform from your frame to some frame in the graph, coordinates defined in your frame can be transformed to any other frame in the graph.
The transforms themselves are represented as CoordinateTransform objects or their subclasses. The useful subclasses/types of transformations are:
A transform that is defined as a function that takes a frame object of one frame class and returns an object of another class.
These are both for transformations defined as a 3x3 matrix transforming the Cartesian representation of one frame into the target frame’s Cartesian representation. The static version is for the case where the matrix is independent of the frame attributes (e.g., the ICRS->FK5 transformation, because ICRS has no frame attributes). The dynamic case is for transformations where the transformation matrix depends on the frame attributes of either the to or from frame.
Generally, it is not necessary to use these classes directly. Instead, use methods on frame_transform_graph that can be used as function decorators. Then just define functions that either do the actual transformation (for FunctionTransform), or that compute the necessary transformation matrices to transform. Then decorate the functions to register these transformations with the frame transform graph:
from astropy.coordinates import frame_transform_graph
@frame_transform_graph.transform(DynamicMatrixTransform, ICRS, FK5)
def icrs_to_fk5(icrscoord, fk5frame):
...
@frame_transform_graph.transform(DynamicMatrixTransform, FK5, ICRS)
def fk5_to_icrs(fk5coord, icrsframe):
...
If the transformation to your coordinate frame of interest is not representable by a matrix operation, you can also specify a function to do the actual transformation, and pass the FunctionTransform class to the transform graph decorator instead:
@frame_transform_graph.transform(FunctionTransform, FK4NoETerms, FK4)
def fk4_no_e_to_fk4(fk4noecoord, fk4frame):
...
Furthermore, the frame_transform_graph does some caching and optimization to speed up transformations after the first attempt to go from one frame to another, and shortcuts steps where relevant (for example, combining multiple static matrix transforms into a single matrix). Hence, in general, it is better to define whatever are the most natural transformations for a user-defined frame, rather than worrying about optimizing or caching a transformation to speed up the process.


You can access up-to-date data through a searchable catalogue of datasets.
Some datasets can be downloaded by everyone, but for others that contain personal or other sensitive information, you’ll need to request access through their Data Workspace page. We aim to provide access within 5 working days.


Coffee Pot: Person
Form
Name:
Sex:
Male
Female
Unkown
Zip:
-
Address:
Preview data
Name:
Sex:
Zip:
Address:


MKSlider Class Reference
| Inherits from | MKControl : UIControl |
| Declared in | MKSlider.h |
Overview
The MKSlider control object creates a sliding control. The conrol allows the user to slide a puck back and forth on it. When the puck gets to the far right side an action is sent. This class allows you supply your own image for the puck.
You should use initWithFrame:
to initalize this class.
This class sends the didCompleteAction: method to the delegate.
Tasks
Slider Elements
-
puck
The image for for the sliders puck. This is expected to a 48x38 image -
descriptionLabel
The Label that is placed on the slider. This should give a reference to the action the siler will complete. -
puckView
The image view for the pucks image.
Delegate
Properties
delegate
The MKControl Delegate
@property (nonatomic, assign) id<MKControlDelegate> delegate
See Also
Declared In
MKSlider.h
descriptionLabel
The Label that is placed on the slider. This should give a reference to the action the siler will complete.
@property (nonatomic, retain) UILabel *descriptionLabel
Declared In
MKSlider.h


Building Hybrid Apps with AngularJS and Ionic
Overview
- Native vs Hybrid Apps
- Intro Ionic
- UI Components
- Ionic CLI
- Demos
The Downsides of Native
- Proficiency in each platform required
- Entirely separate code bases
- Timely & expensive development
- Diminishing returns
“Is there an alternative?”
- Hybrid Apps: HTML5 that acts like native
- Phonegap renamed to Cordova
- Web wrapped in native layer
- Direct access to native APIs
- Familiar web dev environment
- Develop a single code base (web platform)
“Hybrid apps are slow!”
“The Times They Are a-Changin'”
Mobile devices have rapidly improved!
| Year |
Device |
Processor |
RAM |
| 2007 |
iPhone |
620 MHz |
128 MB |
| 2010 |
iPhone 4 |
1 GHz |
512 MB |
| 2015 |
iPhone 6 |
1.4 GHz dual-core |
1 GB |
Web-standards have rapidly improved!
- caniuse.com is lookin' pretty good nowadays
- Android is now Chromium-based
- iOS users keep their devices up-to-date
Native SDKs Are Great
- Common UI
- Views
- Navigation and stack history
- Transitions
- Gestures
There's No Web SDK
- It's the wild-west for hybrid apps
- We need to bridge the gap between web and native
- We need rich, native-style UI components and interactions
- We need UI APIs, not just jQuery widgets
“Hello.”
Web Technologies You Already Know and Love
(You'll feel right at home)
http://www.google.com/trends/explore#q=angularjs%2C%20ember.js%2C%20knockoutjs%2C%20backbonejs&date=8%2F2011%2037m&cmpt=q
Standing on the Shoulders of AngularJS
- Proven for large-scale webapp development
- Extends the HTML vocabulary
- UI Components using Directives and Services
Native Focused
- Modeled off of native SDKs
- Built to work with Cordova
Performance Obsessed
- Hardware accelerated animations
- Minimal DOM Manipulation
- Remove 300ms tap delay
Plain ol' CSS
- CSS generated from the Sass preprocessor
- Quickly give your app its own look and feel
- CSS designed to be easily overridden
- Variables based with default settings
- 80+ reusable and useful mixins
Ionicons
Over 700 MIT licensed font-icons included
ionicons.com
“How does it all come together?”
Your App
Ionic
AngularJS
WebView (Cordova)
Native SDK
Ionic's Adoption
- 13,000+ Github Stars
- Top 50 most starred Github repos
- Consistently Top 10 trending JS Github repos
- Ionic CLI averages 2,300 downloads/day
- 400,000+ Ionic apps have been started from our CLI
- Released Alpha: November 2013
- Released Beta: March 2014
- Release Candidate: Winter 2015
$ npm install -g ionic
_ _
(_) (_)
_ ___ _ __ _ ___
| |/ _ \| '_ \| |/ __|
| | (_) | | | | | (__
|_|\___/|_| |_|_|\___| CLI
- Quickly create a project with starter templates
- Boilerplate app structure ready for customization
- Preconfigured tools: Gulp, Sass, Bower, etc.
- Start a local dev server with LiveReload
- Update Ionic Framework library files
- Build and run native apps
Ionic CLI
$ npm install -g ionic cordova
$ ionic start myapp sidemenu
$ cd myapp
$ ionic serve
Ionic Angular Testing
- It's just an AngularJS app!
- Setup with a great separation of concerns
- Karma unit tests
- Protractor e2e tests
MIT LICENSED
Free to use (even commercially)
COMMUNITY POWERED
Active developer forum, IRC and GitHub repo


You've placed in the top 3!
You Win!
Game Over
2048
Size:
3
4
5
6
7
8
9
10
Winning Number:
# of removes
# of undoes
Color Palette
Standard Palette
Baja Blast
Bubble Bee
Lemon-Lime
Size:
3
4
5
6
7
8
9
10
Name
Score
Size
#1
#2
#3
#4
#5
#6
#7
#8
#9
#10
⮝
⮜
⮞
⮟


Web design has been an interest to each and everyone taking a technology course. All of them have been struggling to atleast get to learn and know how to design a basic website by knowing the basic website design techniques and codes. Moreover, to be an excellent web designer and building the smartest website, you need to start from somewhere.
I therefore would not wish to be left behind and take that step and begin my web design career here by designing this simple website about me.
This is a simple website that i have created to basically talk and tell more about myself. It is kind of my curriculum vitae(CV) website


Canadian dollar hits 6-week low as rate cut bets nudge higher
by Fergal SmithTORONTO — The Canadian dollar weakened to
a near six-week low against its U.S. counterpart on Tuesday
after a speech by a senior Bank of Canada official supported the
view that the central bank is moving closer to an interest rate
cut.
Canada’s financial system is in a relatively good place to
weather any potential storms generated by a weakening global
economy and the trade war between the United States and China,
Bank of Canada Senior Deputy Governor Carolyn Wilkins said.
“The open-ended tone of Wilkins’ remarks arguably pushed the
Bank slightly closer to the easing posture that’s been adopted
by other key central banks in recent months,” Don Curren, a
market strategist at Cambridge Global Payments, said in a note.
Chances of a Bank of Canada interest rate cut as soon as
March rose to 64% from less than 60% before Wilkins’ speech,
data from the overnight index swaps market showed.
In October, Canada’s central bank shifted to a more dovish
stance as it cut its economic growth forecasts and expressed
concern about global trade uncertainty.
At 3:07 p.m. (2007 GMT), the Canadian dollar was
trading 0.4% lower at 1.3264 to the greenback, or 75.39 U.S.
cents. The currency touched its weakest intraday level since
Oct. 11 at 1.3272.
The decline for the loonie came as thousands of workers at
Canada’s largest railway went on strike for the first time in a
decade, disrupting the shipping of commodities, and domestic
data showed monthly declines for factory sales and home
prices.
Canadian factory sales decreased by 0.2% in September,
hampered by partial shutdowns for maintenance at some
refineries, data from Statistics Canada showed.
The Teranet-National Bank Composite House Price Index fell
0.1% in October, weighed by seasonal pressures.
Adding to headwinds for the loonie was a sharp drop in the
price of oil, one of Canada’s major exports. U.S. crude oil
futures settled 3.2% lower at $55.21 a barrel.
Canadian government bond prices were higher across the yield
curve, with the two-year up 4.5 Canadian cents to
yield 1.517% and the 10-year rising 33 Canadian
cents to yield 1.451%.
The gap between Canada’s 2-year yield and its U.S.
counterpart widened by 2.9 basis points to a spread of 8.1 basis
points in favor of the U.S. bond.
Canada’s inflation report for October is due on Wednesday,
while Bank of Canada Governor Stephen Poloz is due to speak on
Thursday on economic change.
(Reporting by Fergal Smith; Editing by Bernadette Baum and
Peter Cooney)


Computation: study of algorithmic processes that describe the transformation of information
"I do not see that the sex of the candidate is an argument against her admission as a Privatdozent. After all, the university senate is not a bathhouse."
We must know. We will know.
Turing Machine
λ Calculus
Church-Turing Thesis
FLOW-MATIC
We must know. We Will know


(back to Devthought)
Inspired by the slideshow in Barack Obama website. Implemented by extending MorphList


FADHILI'S PIZZERIA
Home
Our Menu
Create Your Own Pizza
Design your own pizza
Select your preferred pizza size:
Small
Medium
Large
Choose your desired crust:
Small
Medium
Large
Neapolitan
500
700
900
Sicilian
600
800
1000
Stuffed
650
850
1050
Deep Dish
700
900
1100
Gluten Free
1000
1200
1400
Add the toppings that would best suit your creation:
Small
Medium
Large
Mushrooms
50
60
70
Green Peppers
50
60
70
Black Olives
50
60
70
Pineapples
50
60
80
Pepperoni
60
90
100
Small
Medium
Large
Sausage
80
90
120
Ham
90
100
110
Bacon
100
120
140
Beef
100
120
140
Pork
130
140
150
Add another creation
Order
Your Order(s)


AMISTAD
Steven Spielberg knows how to tell a story that is at once gripping and enlightening. Here he turns his attention to the year 1839 when the Amistad uprising took place on the high seas. A Spanish ship is taking slaves from a Havana slave market to somewhere else in Cuba. Conditions below deck where the prisoners are held are unbelievably horrible. When the captors discover they have insufficient food for all their slaves, they tie some of the most ill and debilitated to the anchor cable and drop it overboard where all attached to the cable drown.
The movie tells us many strange things of which we may have been unaware. We know that the God-fearing people of the South saw nothing wrong with enslaving other humans, ripping their families apart and destroying their culture. It was just that point that made me wonder at Cinque (Djimon Hounsou), the leader of the fateful uprising, who did not remark when shown in a Bible pictures of Jesus, including the walking on the water, "Where was He when my people were being drowned?" How could he say that while the slaves were treated badly, "others" had apparently suffered worse. As I do not recall that in the book on which the film was based, I wonder why that was inserted in the film?
The film is filled with heartbreaking emotion. The anchor incident mentioned is one of them. The scene of Cinque's wife and family back in Africa; the capture and enslavement by other black Africans is fearful viewing.
Attempting to help the slaves who are on trial for murder of some of their captives is Roger Baldwin (Matthew McConaughey) who, at first approaches the trial (with 7 of the judges slave-holders!) as a trial of humanity, only to discover that he can win only if it is shown as a matter of property. Were the captors legally justified in shipping someone else's property? He is aided by a couple of abolitionists: Joadson, a former slave himself (Morgan Freeman in a comparatively small role) and Tappan (Stellan Skarsgard), an immigrant.
Prominent in the film is Martin Van Buren as a weasel who would sell his soul to get re-elected. At the opposite end is the most powerful performance given by Anthony Hopkins in the role of John Quincy Adams addressing the court for some dozen spellbinding minutes. Now, THERE is an actor!
Written by David Franzoni.
Directed by Steven Spielberg.
3.5 Bytes
4 Bytes = Superb 3 Bytes = Too good to miss 2 Bytes = Average 1 Byte = Save your money
Copyright 1997 Ben Hoffman
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


2019 CEPCI Updates: September (prelim.) and August (final)
by Scott JenkinsThe preliminary value for the CE Plant Cost Index (CEPCI; the most recent available) for September 2019 increased from the previous month’s value by 0.7, reversing a trend of declining values this year. Three of the four major subindices — Equipment, Buildings and Construction Labor — increased, while the Engineering & Supervision subindex dipped slightly. The preliminary September CEPCI value is 2.3% lower than the corresponding value from a year ago. The magnitude of the difference in the year-on-year values increased from the previous month. Meanwhile, the CBI numbers for October 2019 show slight declines in both the CPI Output Index and CPI Operating Rate, and increased Producer Prices.


{%- comment -%} Include page specific .css and .js files {%- endcomment -%} {%- for static_file in site.static_files -%} {%- assign file_directory = static_file.path | split: "/" | pop | join: "/" -%} {%- assign match_html_file = static_file.basename | append: ".html" -%} {%- if match_html_file == page.name and static_file.extname == ".css" and file_directory == "/assets/css" %} {% endif -%} {%- if match_html_file == page.name and static_file.extname == ".js" and file_directory == "/assets/javascript" %} {% endif -%} {%- endfor %}


--- layout: post title: "'No Disclosure' Alert: Edsurge at ISTE" date: 2017-06-30 14:10:00 +0000 tags: image: https://s3.amazonaws.com/hackedu/2017-06-30-pigeon.jpg imagecredits: https://www.flickr.com/photos/hedera_baltica/19323506225 ---
Edsurge writes up "Updates, Upgrades and Overheard: What Was Unveiled at ISTE 2017." It's not everything that happened at the giant vendor event. So it's interesting to see whose press releases get a mention here:
I have been tracking these failures to disclose financial relationships because Edsurge has been selling its Concierge service to K-12 schools in order to help them buy ed-tech products. The lack of transparency is important, I think. Now Edsurge says it's ending the service, but I'm still going to keep track of the publication's disclosure problems. It is particularly important to watch who is funding the narratives that Edsurge promotes in its stories about the future of education.


Dhanashree Nerkar
B1 SaiDham Society · Makarpura Road . Vadodara 390010 · (+91)7069023798 .
<EMAIL_ADDRESS>Fresher, self -motivated with excellent communication skills. Flexible to work with different technologies and keenly interested in putting sincere efforts in exploring them. Interested in software development & research and wish to do the same for your organisation.


| DOSE: |
10 lines |
insufflated |
Cocaine |
(powder / crystals) |
(The coke I describe in this experience was around 96%-99% pure, I know from a melting point test--I say this because 'cut' coke is a lot weaker)
The first time I tried coke, being just a pothead, I did one small line since I was so scared. I felt a pleasant sense of elation, more positive in mood than a triple espresso but a similar level of stimulation. Mostly I was surprised how mild it was--WRONG.
So then a few days later I did a couple big lines and the experience was totally different. Very strong euphoria and kind of a rolling feeling in the middle, back and sides of my brain. My heartbeat picks up and I do become stronger and faster. Conversation becomes extremely easy and it feels like I can anticipate what others will say before they find the words. It pretty much makes me feel like a master of tactics, like a champ.
But even on two lines, the comedown sucked bad. Conversation becomes more difficult.  I think this is due to the dropoff of neurotransmitters after the flood that the initial dose causes.
Soon two lines became 3 at a time, even 4.  I began to love the ritual of chopping up the coke with the blade too. Not good...
 My head felt like it couldn't generate a positive thought and I felt terribly depressed. Listening to music I liked and thinking about my girlfriend didn't help at all either. What was once ease of conversation turns into slurring worse than I've ever experienced while drinking even vast quantities (~20-24 drinks) of alcohol, and I felt very unbalanced.
I drank a shitload of water, pissed as much, and waited it out. I felt decent again maybe 16 hours later. I could do nothing but like in bed, unable to sleep, sweating like a pig.
As bad as the comedown was, I experienced persistent negative effects even after I felt sober again. Total loss of sex drive. I lost feeling in my ears, nose, lips, fingers and face for nearly a *week* and had periodic hot/cold flashes and sweats. Needless to say this is not great while at work. I didn't feel very awake anymore either when I woke up each morning.
One thing I did to feel much better was to force myself to jog and run to help wake my body up again. I'd recommend this to anyone who is trying to get by without it after a binge, it was enough to make me feel better. Smoking weed after the comedown helped the blood go back to my face/limbs, as did eating a good amount of jalapeno peppers (no joke).
I've tried coke once since then, over a year after the 16-line episode, and found it to be too harsh once again. This drug is simply not worth the comedown and it takes the willpower of a goddamn captured spy resisting interrogation to avoid becoming addicted. I have the strongest will of anyone I know and I had major problems fighting the cravings.
There is also nothing that destroys my sense of judgement more than cocaine. Alcohol might distort judgement, but coke completely shreds it. So whatever coke I have on hand, I'll end up doing it all, once I'm too high to know better...so I never buy more than I intend to do that night.
So don't ride the white train y'all...I flirted with addiction and feel damn lucky to have escaped...
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.


${article.title}
Category: #{category_link} Tags: #{tags_link} [Edit] [Delete]
#{article.replies} comments(reply?) Positive Reverse
Have something to say?
You need login with your Google account to comment.
Category: #{category_link} Tags: #{tags_link} [Edit] [Delete]
You need login with your Google account to comment.
You can scroll down to load more comments, or click here to disable auto-load.


Embedding and Inter-Op with Lua 5.3¶
Introduction¶
The swog-lua
bridge supports embedding a Lua 5.3 interpreter into a SN application,
reading and writing Lua objects, and of course exposing SN objects to the Lua interpreter.
Example¶
Create a Lua instance, load Lua standard libraries and SN extensions:
import lua._
val lua = Lua()
lua.init()
Execute a script string that defines a global Lua table
config
:
lua.execString(
"""config = {
|foo = 42,
| bar = {
| string = "Hello world!"
| }
|}""".stripMargin)
Access the values stored in
config
from SN:
lua.getGlobalValue("config") match {
case Some(obj: LuaTable) =>
println( obj.toMap() ) // convert the Lua table into a Scala map
}
Define and register a Scala class that is accessible from Lua:
package bar
import scala.scalanative.scriptbridge._
@ScriptObj
class Foo(var num: Int) {
def incr(): Int = num += 1
}
object Foo extends LuaModule {
}
lua.registerModule(Foo)
Use SN class from Lua:
lua.execString(
"""-- load Scala class
|Foo = scala.load("Foo")
|-- create new instance
|foo = Foo.new(42)
|-- print current value of num
|print(foo:num())
|-- call Scala method incr()
|foo:incr()
|print(foo:num())
|-- set num = -1
|foo:setNum(-1)
|print(foo:num())
|""".stripMargin)
Close Lua instance:
lua.free()
Calling Lua from Scala¶
TODO
Calling Scala from Lua¶
Three steps are required to expose a Scala class
or object
to a Lua interpreter:
Create a class / object annotated with @ScriptObj,
Register it to the Lua instance from which you want to call it,
Load the Scala class into the Lua interpreter.
Basic Rules for Exposing Objects to Lua¶
Here is the basic template for SN classes exposed to Lua:
import scala.scalanative.scriptbridge._
import lua._
@ScriptObj
// the primary constructor will be exposed to Lua as function 'Foo.new(i)'
class Foo(i: Int) {
// exposed to Lua as:
// foo:incr() (get)
// foo:setIncr(i) (set)
var incr: Int = 1
// exposed to Lua as foo:add(i)
def add(a: Int): Unit = // ...
// not accessible from Lua
private def bar(): Unit = // ...
}
// it's not required to extend LuaModule,
// but it will prevent IDEs from complaining when we call lua.registerModule(Foo)
object Foo extends LuaModule {
// exposed to Lua as Foo.default()
val default: Foo = new Foo(42)
// exposed to Lua as Foo.bar(i)
def bar(i: Int): Int = // ...
}
Keep the following rules in mind when you design your Lua bridge object:
You can export only a Scala
object
without a companion class, only a Scala class, or both. However, if you define both, only one can be annotated with@ScriptObj
.If you define a script bridge class
Foo
, its primary constructor is automatically exposed to Lua asFoo.new()
. Secondary constructors are not exposed to Lua.By default, every public method,
val
andvar
is exposed to Lua. However, if a member is annotated with@nolua
it will not be exposed to Lua.By default, the Lua name of a member is identical to the Scala name, with the prefix set for Scala setters. However, you can override this name by annotating the member with
@luaname()`
All members exposed to Lua need an explicit type, i.e. the following will result in an error:
@ScriptObj class Foo { var i = 42 // error: exposed member needs excplicit type annotation 'Int' }
Overloading of exposed methods is not supported, i.e. the following will result in a compile-time error:
@ScriptObj class Foo { def bar(): Unit = // ... def bar(i: Int): Int = // ... }
Type Mapping¶
When a Scala method is called from Lua, the following mapping rules are applied to arguments and return values:
Boolean, Numbers, and Strings¶
Boolean, integer, and floating point numbers and strings will be translated into the corresponding Lua/Scala type.
However, keep in mind that Lua numbers will be represented as Long
or Double
in Scala by default. If you want to have
an Int
or Float
you need to cast explicitly. This is particularly important if you access a Lua value from Scala with
Lua.getValue(): Any
, Lua.getGloablValue(): Option[Any]
, or LuaTable.get(): Option[Any]
,
since a pattern match on Int
or Float
will fail.
Lua Tables (Objects)¶
If you want to pass a Lua table to a Scala method, you must define the corresponding Scala argument to be of type
LuaTable
or immutable.Map
.
However, you should prefer LuaTable
unless you will convert it to a Map
anyway, since this will recursively
convert all nested tables as well.
A Scala return value of type Map[String,Any] will ne converted into a Lua table.
Scala:
@ScriptObj
object Foo {
def callWithTable(obj: LuaTable): Unit = {
// get value of property 'foo'
println( obj.getOrElse("foo",0) )
}
def callWithMap(obj: Map[String,Any]): Map[String,Any] = {
// access Lua value obj.bar.string
obj("bar") match {
case m: Map[_,_] =>
println( m("string") )
}
obj.updated("foo",43)
}
}
Lua:
obj = {
foo = 42
bar = {
string = "hello"
}
}
Foo.callWithTable(obj)
upd = Foo.callWithMap(obj)
print( upd.foo ) -- prints 43
Lua nil and Option¶
A Scala Option
will be converted to the corresponding Lua value (if it is Some()
),
or to Lua nil
if it is None
.
The inverse rule is applied for arguments of type Option[Any]
.
Scala:
@ScriptObj
object Foo {
def withOption(in: Option[Any]): Option[Long] = in match {
case Some(l: Long) => Some( l+1 )
case _ => None
}
}
Lua:
Foo.withOption(41) -- returns 42
Foo.withOption(nil) -- returns nil
Foo.withOption("foo") -- also returns nil
Advanced Topics¶
TODO


Life-changing healing for the poorest of the poor takes place in CURE hospitals around the world on a daily basis. Kids who had little hope for the future are transformed into kids who can run, play, and smile.
Families who endured being called cursed for having a disabled child are set free from social stigma. Throughout our hospitals, we aim to do what Jesus did: heal the sick and proclaim the kingdom of God.
CURE has grown significantly since opening our first hospital in Kenya in 1998. We currently have 8 hospitals in places where care is most needed and often least available.
CURE Ethiopia is a pediatric orthopedic teaching hospital located in Ethiopia’s capital city, Addis Ababa. Opened in 2008, the hospital is a modern complex that provides modern medical and surgical care to physically disabled children.
As Ethiopia consistently ranks among the poorest countries in the world, with few of its citizens having access to medical care, there is a great need for this level of care..
In addition, CURE Ethiopia fills a critical need as an orthopedic training site in the country. In partnership with the Pan African Academy of Christian Surgeons (PAACS)
What you track improves. DashTrack is a journal that makes it easy to track your daily tasks and make the most
of your time each day.
CURE Ethiopia provides didactic and clinical training in pediatric and advanced orthopedic techniques and is accredited by COSECSA as an international training site.
CURE and the Pan African Academy of Christian Surgeons work together to contribute to quality orthopedic surgical training of Christian orthopedic residents in Africa and to their discipleship in serving to the glory of God. They also establish a relationship to provide post-graduate orthopedic surgical education meeting the standards established by COSESCA or WACS, and Loma Linda University.
Through a combination of in-hospital care, mobile clinics, and clubfoot clinics, CURE Ethiopia is providing superior care for the children of Ethiopia.
Since the fall of 2006, in collaboration with Smile Train, CURE has developed cleft lip and cleft palate surgical training programs in most of CURE’s hospitals worldwide.
These programs not only provide surgery for children and counseling for them and their families, but also train national surgeons in reconstructive surgery.


Supported and provided troubleshooting with windows servers
Remote Software Support
Ran wires (CAT5, LAN, ie.)
On-site hardware installation and maintenance
The Tech Dev
Yep thats me! your new developer :)
This is me!
Get In Touch
Lets Build Something Great Together!
Project 1
Please visit on Github link below!
this is the link with my code for my Project of Friend finder, it is an app that uses express and MYSQL to store friends via JQuery
Please click me for codes
Project 1
Please visit on Github link below!
this is the link with my code for my Project of Friend finder, it is an app that uses express and MYSQL to store friends via JQuery
Please click me for codes
Project 2
Please visit on github.
this is the link with my code for my Project of Friend finder, it is an app that uses express and MYSQL to store friends via JQuery
Please click me for codes
Project 3
Please visit on Github link below!
this is the link with my code for my Project of Hot HotRestaurant, it is an app that uses MYSQL, Bootstrap, and JQuery to store
reservations to the browser.
Please click me for codes
Project 5
Please visit on Github link below
this is the link with my code for my Project of Giphy, it is an app that uses the Giphy API to retrieve and render Gif's
the wepage via JQuery.
Please click me for codes
Project Name
Lorem ipsum dolor sit amet consectetur.
 Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est blanditiis dolorem culpa incidunt minus dignissimos deserunt repellat aperiam quasi sunt officia expedita beatae cupiditate, maiores repudiandae, nostrum, reiciendis facere nemo!


Deaths
1,049
Confirmed Cases
78,052
Recovered Cases
16,747
Total Covid-19 Tests taken
457,332
COVID-19 Case Line Graph
Qurantine Progression
Quarantine in Progress
Quarantine Completed
Community Spread


{% include "textchange/head.html" %}
500 Server Error. Whoops!
(╯'□')╯ ┻━┻
Something went wrong!
Click here to go home.


Mladenovic gives France 1-0 lead in Fed Cup final
MELBOURNE: Kristina Mladenovic thrashed Australia's Fed Cup debutant Ajla Tomljanovic 6-1 6-1 in the opening singles at Perth Arena on Saturday as France took a 1-0 lead in the final.
The French number one came out swinging on a scorching hot afternoon and maintained pressure throughout as rookie Tomljanovic capitulated in front of a packed crowd in 71 minutes.
Australia will look to their usual Fed Cup saviour Ash Barty to square the ledger when the former world number one meets Caroline Garcia in the second singles match on Saturday.
Australia's team captain Alicia Molik raised eyebrows by throwing Tomljanovic into the cauldron of a Fed Cup final on debut, rather than opting for veteran Sam Stosur for the singles.
The gamble backfired spectacularly as Croatia-born Tomljanovic, who only became eligible to represent Australia a month ago, promptly crumbled under pressure.
Mladenovic broke her early in a barrage of power hitting and wrapped up the first set in 38 minutes with a fierce forehand return, delighting a rowdy pocket of blue-clad French fans.
Tomljanovic's serve further disintegrated in the second set allowing Mladenovic to roar to a 5-1 lead.
The Frenchwoman fended off some belated resistance from the outclassed Australian before sealing the tie with a kick serve that Tomljanovic slapped well beyond the baseline.
(Reporting by Ian Ransom; Editing by Tom Hogue)


The expression was coined by Adolf Hitler, when he dictated his 1925 book Mein Kampf, about the use of a lie so "colossal" that no one would believe that someone "could have the impudence ...


The page you are looking for might have been removed had its name changed or is temporarily unavailable.


@(rateForm: Form[IncomeCalculator], incomeCalculator: Option[IncomeCalculator])
@import helper._
@main("Enter income rate") {
Calculate income based on desired rate
To give an idea how much you could earn on a specific rate per year.
Includes other factors such as
invoicable units per year and realistic utilisation.
Also includes consideration for the increased costs of contracting when camparing with permanent salaries.
@for(error <- rateForm.errors){
There was a problem with your input, please correct:
@error.message
}
@for(calculation <- incomeCalculator){
Calculated income
| Income |
|
| @{calculation.yearlyIncome.formatted} |
Gross maximum income |
| @{calculation.yearlyIncome.withUtilisation.formatted} |
Realistic income with reduced utilisation |
| @{calculation.yearlyIncome.withUtilisation.withCost.formatted} |
Income which includes increased cost level.
This is comparable to permanent salaries not considering risk factor.
|
Note these do not include taxes etc.
}
@form(action=routes.RateController.calculateIncomeFromRate){
}
}


CIS Events
2013-14 Distinguished Speaker Series
April 22, 2013HANY FARIDProfessor 11:15AM |
April 22, 2013ADAM PORTERProfessor Efficiently Discovering High-Coverage Configurations Using Interaction Trees 11:00AM-12:15PM |
April 23, 2014MONA SINGHProfessor Deparment of Computer Science and Lewis-Sigler Institute for Integrative Genomics, Princeton University Data-driven approaches for uncovering and understanding biological networks 2:00PM |


This is a SAML 2.0 authentication provider for Passport, the Node.js authentication library.
The code was originally based on Michael Bosworth's express-saml library.
Passport-SAML has been tested to work with Onelogin, Okta, Shibboleth, SimpleSAMLphp based Identity Providers, and with Active Directory Federation Services.
$ npm install passport-saml
Full documentation is available here https://short-io.github.io/passport-saml2/
The examples utilize the Feide OpenIdp identity provider. You need an account there to log in with this. You also need to register your site as a service provider.
The SAML identity provider will redirect you to the URL provided by the path
configuration.
var SamlStrategy = require('passport-saml').Strategy;
[...]
passport.use(new SamlStrategy(
{
path: '/login/callback',
entryPoint: 'https://openidp.feide.no/simplesaml/saml2/idp/SSOService.php',
issuer: 'passport-saml'
},
function(profile, done) {
findByEmail(profile.email, function(err, user) {
if (err) {
return done(err);
}
return done(null, user);
});
})
);
You can pass a getSamlOptions
parameter to MultiSamlStrategy
which will be called before the SAML flows. Passport-SAML will pass in the request object so you can decide which configuation is appropriate.
var MultiSamlStrategy = require('passport-saml/multiSamlStrategy');
[...]
passport.use(new MultiSamlStrategy(
{
passReqToCallback: true, //makes req available in callback
getSamlOptions: function(request, done) {
findProvider(request, function(err, provider) {
if (err) {
return done(err);
}
return done(null, provider.configuration);
});
}
},
function(req, profile, done) {
findByEmail(profile.email, function(err, user) {
if (err) {
return done(err);
}
return done(null, user);
});
})
);
The options passed when the MultiSamlStrategy
is initialized are also passed as default values to each provider.
e.g. If you provide an issuer
on MultiSamlStrategy
, this will be also a default value for every provider.
You can override these defaults by passing a new value through the getSamlOptions
function.
Using multiple providers supports validateInResponseTo
, but all the InResponse
values are stored on the same Cache. This means, if you're using the default InMemoryCache
, that all providers have access to it and a provider might get its response validated against another's request. Issue Report. To amend this you should provide a different cache provider per SAML provider, through the getSamlOptions
function.
The profile object referenced above contains the following:
type Profile = {
issuer?: string;
sessionIndex?: string;
nameID?: string;
nameIDFormat?: string;
nameQualifier?: string;
spNameQualifier?: string;
mail?: string; // InCommon Attribute urn:oid:0.9.2342.192003<IP_ADDRESS>
email?: string; // `mail` if not present in the assertion
getAssertionXml(): string; // get the raw assertion XML
getAssertion(): object; // get the assertion XML parsed as a JavaScript object
getSamlResponseXml(): string; // get the raw SAML response XML
ID?: string;
} & {
[attributeName: string]: unknown; // arbitrary `AttributeValue`s
}
Core
callbackUrl
: full callbackUrl (overrides path/protocol if supplied)path
: path to callback; will be combined with protocol and server host information to construct callback url if callbackUrl
is not specified (default: /saml/consume
)protocol
: protocol for callback; will be combined with path and server host information to construct callback url if callbackUrl
is not specified (default: http://
)host
: host for callback; will be combined with path and protocol to construct callback url if callbackUrl
is not specified (default: localhost
)entryPoint
: identity provider entrypoint (is required to be spec-compliant when the request is signed)issuer
: issuer string to supply to identity provideraudience
: expected saml response Audience (if not provided, Audience won't be verified)cert
: the IDP's public signing certificate used to validate the signatures of the incoming SAML Responses, see Security and signaturesprivateCert
: see Security and signaturesdecryptionPvk
: optional private key that will be used to attempt to decrypt any encrypted assertions that are receivedsignatureAlgorithm
: optionally set the signature algorithm for signing requests, valid values are 'sha1' (default), 'sha256', or 'sha512'digestAlgorithm
: optionally set the digest algorithm used to provide a digest for the signed data object, valid values are 'sha1' (default), 'sha256', or 'sha512'xmlSignatureTransforms
: optionally set an array of signature transforms to be used in HTTP-POST signatures. By default this is [ 'http://www.w3.org/2000/09/xmldsig#enveloped-signature', 'http://www.w3.org/2001/10/xml-exc-c14n#' ]
Additional SAML behaviors
additionalParams
: dictionary of additional query params to add to all requests; if an object with this key is passed to authenticate
, the dictionary of additional query params will be appended to those present on the returned URL, overriding any specified by initialization options' additional parameters (additionalParams
, additionalAuthorizeParams
, and additionalLogoutParams
)
additionalAuthorizeParams
: dictionary of additional query params to add to 'authorize' requests
identifierFormat
: if truthy, name identifier format to request from identity provider (default: urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress
)
acceptedClockSkewMs
: Time in milliseconds of skew that is acceptable between client and server when checking OnBefore
and NotOnOrAfter
assertion condition validity timestamps. Setting to -1
will disable checking these conditions entirely. Default is 0
.
attributeConsumingServiceIndex
: optional AttributeConsumingServiceIndex
attribute to add to AuthnRequest to instruct the IDP which attribute set to attach to the response (link)
disableRequestedAuthnContext
: if truthy, do not request a specific authentication context. This is known to help when authenticating against Active Directory (AD FS) servers.
authnContext
: if truthy, name identifier format to request auth context (default: urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport
); array of values is also supported
RACComparison
: Requested Authentication Context comparison type. Possible values are 'exact','minimum','maximum','better'. Default is 'exact'.
forceAuthn
: if set to true, the initial SAML request from the service provider specifies that the IdP should force re-authentication of the user, even if they possess a valid session.
providerName
: optional human-readable name of the requester for use by the presenter's user agent or the identity provider
skipRequestCompression
: if set to true, the SAML request from the service provider won't be compressed.
authnRequestBinding
: if set to HTTP-POST
, will request authentication from IDP via HTTP POST binding, otherwise defaults to HTTP Redirect
disableRequestACSUrl
: if truthy, SAML AuthnRequest from the service provider will not include the optional AssertionConsumerServiceURL. Default is falsy so it is automatically included.
InResponseTo Validation
validateInResponseTo
: if truthy, then InResponseTo will be validated from incoming SAML responsesrequestIdExpirationPeriodMs
: Defines the expiration time when a Request ID generated for a SAML request will not be valid if seen in a SAML response in the InResponseTo
field. Default is 8 hours.cacheProvider
: Defines the implementation for a cache provider used to store request Ids generated in SAML requests as part of InResponseTo
validation. Default is a built-in in-memory cache provider. For details see the 'Cache Provider' section.Issuer Validation
idpIssuer
: if provided, then the IdP issuer will be validated for incoming Logout Requests/Responses. For ADFS this looks like https://acme_tools.windows.net/deadbeef
Passport
passReqToCallback
: if truthy, req
will be passed as the first argument to the verify callback (default: false
)name
: Optionally, provide a custom name. (default: saml
). Useful If you want to instantiate the strategy multiple times with different configurations, allowing users to authenticate against multiple different SAML targets from the same site. You'll need to use a unique set of URLs
for each target, and use this custom name when calling `passport.authenticate()` as well.
Logout
logoutUrl
: base address to call with logout requests (default: entryPoint
)additionalLogoutParams
: dictionary of additional query params to add to 'logout' requestslogoutCallbackUrl
: The value with which to populate the Location
attribute in the SingleLogoutService
elements in the generated service provider metadata.You need to provide a route corresponding to the path
configuration parameter given to the strategy:
The authentication callback must be invoked after the body-parser
middlerware.
const bodyParser = require('body-parser');
app.post('/login/callback',
bodyParser.urlencoded({ extended: false }),
passport.authenticate('saml', { failureRedirect: '/', failureFlash: true }),
function(req, res) {
res.redirect('/');
}
);
Use passport.authenticate()
, specifying saml
as the strategy:
app.get('/login',
passport.authenticate('saml', { failureRedirect: '/', failureFlash: true }),
function(req, res) {
res.redirect('/');
}
);
...or, if you wish to add or override query string parameters:
app.get('/login',
passport.authenticate('saml', { additionalParams: { 'username'<EMAIL_ADDRESS>}}),
function(req, res) {
res.redirect('/');
}
);
As a convenience, the strategy object exposes a generateServiceProviderMetadata
method which will generate a service provider metadata document suitable for supplying to an identity provider. This method will only work on strategies which are configured with a callbackUrl
(since the relative path for the callback is not sufficient information to generate a complete metadata document).
The decryptionCert
argument should be a public certificate matching the decryptionPvk
and is required if the strategy is configured with a decryptionPvk
.
The signingCert
argument should be a public certificate matching the privateCert
and is required if the strategy is configured with a privateCert
.
The generateServiceProviderMetadata
method is also available on the MultiSamlStrategy
, but needs an extra request and a callback argument (generateServiceProviderMetadata( req, decryptionCert, signingCert, next )
), which are passed to the getSamlOptions
to retrieve the correct configuration.
Passport-SAML uses the HTTP Redirect Binding for its AuthnRequest
s (unless overridden with the authnRequestBinding
parameter), and expects to receive the messages back via the HTTP POST binding.
Authentication requests sent by Passport-SAML can be signed using RSA signature with SHA1, SHA256 or SHA512 hashing algorithms.
To select hashing algorithm, use:
...
signatureAlgorithm: 'sha1' // (default, but not recommended anymore these days)
signatureAlgorithm: 'sha256', // (preffered - your IDP should support it, otherwise think about upgrading it)
signatureAlgorithm: 'sha512' // (most secure - check if your IDP supports it)
...
To sign them you need to provide a private key in the PEM format via the privateCert
configuration key.
Formats supported for privateCert
field are,
-----BEGIN PRIVATE KEY-----
<private key contents here delimited at 64 characters per row>
-----END PRIVATE KEY-----
-----BEGIN RSA PRIVATE KEY-----
<private key contents here delimited at 64 characters per row>
-----END RSA PRIVATE KEY-----
(both versions work) See example from tests of the first version of well formatted private key.
See example from tests of singleline private key.
Add it to strategy options like this:
privateCert: fs.readFileSync('./privateCert.pem', 'utf-8')
It is a good idea to validate the signatures of the incoming SAML Responses. For this, you can provide the Identity Provider's public PEM-encoded X.509 signing certificate using the cert
confguration key. The "BEGIN CERTIFICATE" and "END CERTIFICATE" lines should be stripped out and the certificate should be provided on a single line.
cert: 'MIICizCCAfQCCQCY8tKaMc0BMjANBgkqh ... W=='
If you have a certificate in the binary DER encoding, you can convert it to the necessary PEM encoding like this:
openssl x509 -inform der -in my_certificate.cer -out my_certificate.pem
If the Identity Provider has multiple signing certificates that are valid (such as during the rolling from an old key to a new key and responses signed with either key are valid) then the cert
configuration key can be an array:
cert: [ 'MIICizCCAfQCCQCY8tKaMc0BMjANBgkqh ... W==', 'MIIEOTCCAyGgAwIBAgIJAKZgJdKdCdL6M ... g=' ]
The cert
configuration key can also be a function that receives a callback as argument calls back a possible error and a certificate or array of certificates. This allows the Identity Provider to be polled for valid certificates and the new certificate can be used if it is changed:
cert: function(callback) { callback(null,polledCertificates); }
Here is a configuration that has been proven to work with ADFS:
{
entryPoint: 'https://ad.example.net/adfs/ls/',
issuer: 'https://your-app.example.net/login/callback',
callbackUrl: 'https://your-app.example.net/login/callback',
cert: 'MIICizCCAfQCCQCY8tKaMc0BMjANBgkqh ... W==',
authnContext: 'http://schemas.microsoft.com/ws/2008/06/identity/authenticationmethod/windows',
identifierFormat: null
}
Please note that ADFS needs to have a trust established to your service in order for this to work.
For more detailed instructions, see ADFS documentation.
If the NotBefore
or the NotOnOrAfter
attributes are returned in the SAML response, Passport-SAML will validate them
against the current time +/- a configurable clock skew value. The default for the skew is 0s. This is to account for
differences between the clock time on the client (Node server with Passport-SAML) and the server (Identity provider).
NotBefore
and NotOnOrAfter
can be part of either the SubjectConfirmation
element, or within in the Assertion/Conditions
element
in the SAML response.
When configured (turn validateInResponseTo
to true
in the Passport-SAML config), the InResponseTo
attribute will be validated.
Validation will succeed if Passport-SAML previously generated a SAML request with an id that matches the value of InResponseTo
.
Also note that InResponseTo
is validated as an attribute of the top level Response
element in the SAML response, as well
as part of the SubjectConfirmation
element.
Previous request id's generated for SAML requests will eventually expire. This is controlled with the requestIdExpirationPeriodMs
option
passed into the Passport-SAML config. The default is 28,800,000 ms (8 hours). Once expired, a subsequent SAML response
received with an InResponseTo
equal to the expired id will not validate and an error will be returned.
When InResponseTo
validation is turned on, Passport-SAML will store generated request ids used in SAML requests to the IdP. The implementation
of how things are stored, checked to see if they exist, and eventually removed is from the Cache Provider used by Passport-SAML.
The default implementation is a simple in-memory cache provider. For multiple server/process scenarios, this will not be sufficient as
the server/process that generated the request id and stored in memory could be different than the server/process handling the
SAML response. The InResponseTo
could fail in this case erroneously.
To support this scenario you can provide an implementation for a cache provider by providing an object with following functions:
{
save: function(key, value, callback) {
// save the key with the optional value, invokes the callback with the value saves
},
get: function(key, callback) {
// invokes 'callback' and passes the value if found, null otherwise
},
remove: function(key, callback) {
// removes the key from the cache, invokes `callback` with the
// key removed, null if no key is removed
}
}
The callback
argument is a function in the style of normal Node callbacks:
function callback(err, result)
{
}
Provide an instance of an object which has these functions passed to the cacheProvider
config option when using Passport-SAML.
Passport-SAML has built in support for SLO including
Redirect
and POST
SAML Protocol BindingsSee Releases to find the changes that go into each release.
Gerard Braad has provided an example app at https://github.com/gbraad/passport-saml-example/
We only support Long-Term Support versions of Node.
We specifically limit our support to LTS versions of Node, not because this package won't work on other versions, but because we have a limited amount of time, and supporting LTS offers the greatest return on that investment.
It's possible this package will work correctly on newer versions of Node. It may even be possible to use this package on older versions of Node, though that's more unlikely as we'll make every effort to take advantage of features available in the oldest LTS version we support.
As each Node LTS version reaches its end-of-life we will remove that version from the node
engines
property of our package's package.json
file. Removing a Node version is considered a breaking change and will entail the publishing of a new major version of this package. We will not accept any requests to support an end-of-life version of Node. Any merge requests or issues supporting an end-of-life version of Node will be closed.
We will accept code that allows this package to run on newer, non-LTS, versions of Node.
Generated using TypeDoc


This graph has a hierarchical grouping defined over the nodes. We generate constraints to keep the bounding boxes of disjoint groups from overlapping and to keep nested groups fully contained within their parents' bounding boxes. Try dragging the nodes and groups so that they bump into other nodes and groups.


{% include '%s/head.html' % headDir %}
{% with page='data-sources' %} {% include '%s/nav.html' % navbarDir %} {% endwith %}Data Sources contain the collections (e.g., television broadcasts from The Netherlands Institute for Sound and Vision, EYE Film Museum, DANS Oral History collections). All collections (and sub-collections) are registered in a common inventory built in CKAN (an open source platform for collection registration. Most collections are available both in Elasticsearch (full text search) and RDF format (semantic search), and some in either of the two.
CKAN is a platform for collection registration. It is a software solution that provides the tools to "streamline publishing, sharing, finding and using data", making it accessible. CKAN is initially focused on making open collections all over the world easily discovered and accessed. However, it can also be used for collections that are not open, as a way to make them discoverable.
The current instance of CKAN implemented for the CLARIAH media studies focus includes around 40 datasets used in previous projects, registered on behalf of the collection owners. In the near future, more organisations can register their collections and add data themselves. Registration with an open licence is possible, but private access is also an option (see Help & Feedback section).
Datasets that are registered in CKAN can be searched by using tags, organizations, or groups. Groups are used to organise datasets in relation to a tool or a project in which they were originally curated (e.g., DIVE+, Oral History Today). Each dataset is described using basic descriptive and administrative metadata. The data itself can be added to each registered collection using different formats (e.g., XML, JSON, RDF).
CKAN is aimed at data publishers, memory institutions and organizations wanting to make their data open and available. It also enables individual researchers to register their own datasets. In collaboration with cultural heritage institutions, CLARIAH Media Studies focus intends to identify new relevant collections to be registered and opened to scholarly use, and the creation of guidelines that can be used by non-ICT experts willing to add their datasets (see Help & Feedback section).
Go to the Media Suite data sources