|
| typedef struct __itt_frame_t * | __itt_frame |
| | opaque structure for frame identification More...
|
| |
Frames are similar to regions, but are intended to be easier to use and to implement. In particular:
- Frames always represent periods of elapsed time
- By default, frames have no nesting relationships
Frames group
| #define __itt_frame_create_ptr __itt_frame_createA_ptr |
Record an frame begin occurrence.
| void ITTAPI __itt_frame_begin_v3 |
( |
const __itt_domain * |
domain, |
|
|
__itt_id * |
id |
|
) |
| |
Begin a frame instance. Successive calls to __itt_frame_begin with the same ID are ignored until a call to __itt_frame_end with the same ID.
- Parameters
-
| [in] | domain | The domain for this frame instance |
| [in] | id | The instance ID for this frame instance or NULL |
| __itt_frame ITTAPI __itt_frame_createA |
( |
const char * |
domain | ) |
|
Create a global frame with given domain.
| __itt_frame ITTAPI __itt_frame_createW |
( |
const wchar_t * |
domain | ) |
|
Record an frame end occurrence.
| void ITTAPI __itt_frame_end_v3 |
( |
const __itt_domain * |
domain, |
|
|
__itt_id * |
id |
|
) |
| |
End a frame instance. The first call to __itt_frame_end with a given ID ends the frame. Successive calls with the same ID are ignored, as are calls that do not have a matching __itt_frame_begin call.
- Parameters
-
| [in] | domain | The domain for this frame instance |
| [in] | id | The instance ID for this frame instance or NULL for current |
| void ITTAPI __itt_frame_submit_v3 |
( |
const __itt_domain * |
domain, |
|
|
__itt_id * |
id, |
|
|
__itt_timestamp |
begin, |
|
|
__itt_timestamp |
end |
|
) |
| |
Submits a frame instance. Successive calls to __itt_frame_begin or __itt_frame_submit with the same ID are ignored until a call to __itt_frame_end or __itt_frame_submit with the same ID. Passing special __itt_timestamp_none value as "end" argument means take the current timestamp as the end timestamp.
- Parameters
-
| [in] | domain | The domain for this frame instance |
| [in] | id | The instance ID for this frame instance or NULL |
| [in] | begin | Timestamp of the beginning of the frame |
| [in] | end | Timestamp of the end of the frame |


How to remove the persistent battery icon in YouTube on the Pixel 4
Source: Android Central
What you need to know
- Pixel 4 users are experiencing a persistent battery icon over YouTube videos while watching in full screen.
- Motion Sense gestures seem to be the unlikely culprit behind it.
- The persistent battery icon can be disabled by turning off "skip songs" in Motion Sense gestures.
Since the Pixel 4 first launched, it has garnered plenty of criticism for a variety of reasons. Some of them present a major security flaw, such as face unlock working with your eyes closed, while others are less benign, such as the lack of 4K 60fps video recording, which is either due to lack of storage or simply because Google thinks users don't need it.
Now, there is another annoyance being caused by one of the Pixel 4's signature features. For whatever reason, Motion Sense is causing a faint battery icon to appear over videos when watching them in full screen on the Pixel 4. Given the poor battery performance on the Pixel 4 phones, perhaps this is a "feature" because it seems too deliberate to be a bug. Especially because the icon itself is dimmed in an attempt to lessen the distraction.
Source: Android Central
Why does it only appear in YouTube videos though? Most likely because YouTube is one of the only video apps to currently support Motion Sense gestures.
However, if you're anything like me, this is nothing but a constant distraction and one you'd like to remove. Thankfully, it is quite easy to disable this persistent battery icon, but it will require turning off the "skip songs" feature in the Motion Sense settings.
That's not the only thing that could be frustrating Pixel 4 users these days. It was just yesterday we reported that, despite the November security update being released on the fourth, many users still haven't received it (even our own Joe Maring). Timely updates have always been a selling point for Pixel phones, or at least they were.
Get More Pixel 4
Google Pixel 4 & 4 XL
- Google Pixel 4 review
- Google Pixel 4 XL review
- Best Pixel 4 cases
- Best Pixel 4 screen protectors
- Best Pixel 4 XL cases
- Best Pixel 4 XL screen protectors
We may earn a commission for purchases using our links. Learn more.


Salesforce data retrieval
Object:
Accepted Event Relation
Account
Account Clean Info
Account Contact Role
Account Feed
Account History
Account Partner
Account Share
Action Link Group Template
Action Link Template
Activity History
Additional Directory Number
Aggregate Result
Announcement
Apex Class
Visualforce Component
Apex Debug Log
Visualforce Page
Apex Test Queue Item
Apex Test Result
Apex Trigger
AppMenuItem
Approval
Asset
Asset Feed
Asset History
Assignment Rule
Apex Job
Attached Content Document
Attachment
Lightning Component Definition
Lightning Component Bundle
Authentication Configuration
Authentication Configuration Auth. Provider
Auth. Provider
Auth Session
Background Operation
Letterhead
Business Hours
Business Process
Call Center
Campaign
Campaign Feed
Campaign Member
Campaign Member Status
Campaign Share
Case
Case Comment
Case Contact Role
Case Feed
Case History
Case Share
Case Solution
Case Status Value
Case Team Member
Case Team Member Role
Predefined Case Team
Predefined Case Team Member
Predefined Case Team Record
Category Data
Category Node
Chatter Activity
Client Browser
Group
Group Feed
Group Member
Group Member Request
Group Record
Chatter Invitation
Note, Attachment, Google Doc And File
Zone
Connected App
Contact
Contact Clean Info
Contact Feed
Contact History
Contact Share
Content Delivery
Content Delivery View
Content Document
ContentDocument Feed
Content Document History
Content Document Link
Content Folder
Content Folder Link
Content Folder Member
Content Version
Content Version History
Library
Library Document
Contract
Contract Contact Role
Contract Feed
Contract History
Contract Status Value
CORS Whitelist Origin
Cron Job
Scheduled Jobs
Custom Object Usage By User License Metric
Custom Permission
Custom Permission Dependency
D&B Company
Dashboard
Dashboard Component
Dashboard Component Feed
Dashboard Feed
Data Type
Data.com Company
Data.com Contact
D&B Company
Data.com Owned Entity
Data.com Usage
Data.com Social Handle
Datacloud Social Profile
Datacloud Social Profile Handle
Declined Event Relation
Document
Document Entity Map
Domain
Custom URL
Duplicate Record Item
Duplicate Record Set
Duplicate Rule
Email Domain Key
Email Services Address
Email Service
Email Status
Email Template
Entity Definition
Field Definition
Entity Subscription
Event
Event Feed
Event Log File
Event Relation
External Data Source
External Data User Authentication
Feed Comment
Feed Item
Feed Like
Feed Poll Choice
Feed Poll Vote
Feed Revision
Feed Tracked Change
Field Definition
Field Permissions
Fiscal Year Settings
Flow Interview
Flow Interview Share
Folder
Forecast Share
Setting Granted By License
Group
Group Member
Hashtag Definition
Holiday
Idea
Idea Comment
Installed Mobile App
Knowledgeable User
Lead
Lead Clean Info
Lead Feed
Lead History
Lead Share
Lead Status Value
List View
List View Chart
List View Chart Instance
Login Geo Data
Login History
Login IP
Lookups from Activity
Macro
Macro History
Macro Share
Mail Merge Template
Matching Rule
Matching Rule Item
Mobile Device Registrar
MusicAlbum
Name
Named Credential
Note
Note and Attachment
Oauth Token
Object Permissions
Open Activity
Opportunity
Opportunity: Competitor
Opportunity Contact Role
Opportunity Feed
Opportunity Field History
Opportunity History
Opportunity Product
Opportunity Partner
Opportunity Share
Opportunity Stage
Order
Order Feed
Order History
Order Product
Order Product Feed
Order Product History
Order Share
Organization-wide From Email Address
Organization
User Owned File
Package License
Partner
Partner Role Value
Period
Permission Set
Permission Set Assignment
Permission Set License
Permission Set License Assignment
Picklist Value Info
Platform Action
Price Book
Price Book History
Price Book Entry
Process Definition
Process Instance
Process Instance History
Process Instance Node
Process Instance Step
Approval Request
Process Node
Product
Product Feed
Product History
Profile
Publisher
Push Topic
Queue Sobject
Recently Viewed
Record Type
Relationship Domain
Relationship
Report
Report Feed
SAML Single Sign-On Setting
Custom S-Control
Promoted Search Term
Secure Agent
Secure Agent Plug-in
Secure Agent Plug-in Property
Service Field Data Type
Setup Audit Trail Entry
Setup Entity Access
Site
Site
Site History
Solution
Solution Feed
Solution History
Solution Status Value
Static Resource
Streaming Channel
Streaming Channel Share
Task
Task Feed
Task Priority Value
Task Status Value
Tenant Usage Entitlement
Third Party Account Link
Topic
Record
Topic Feed
Undecided Event Relation
User
User Entity Access
User Feed
User Field Access
User License
User List View
User List View Criteria
User Login
User Package License
User Preference
User Provisioning Account
User Provisioning Account Staging
User Provisioning Mock Target
User Provisioning Config
User Provisioning Log
User Provisioning Request
User Provisioning Request Share
User Record Access
Role
User Share
Vote
Custom Button or Link
Field:
Search Key:
Search Value:


T3A09 Variables by Aaden
What is myInt variable?
What is myDec variable?
What is myName variable?>
The full length of the Abc's using the string length property


Toggle navigation
Helpdesk
Home
Tickets
Assigned
Building
Departments
New Ticket
Account
Admin
Sign out


Written by Publications Director Susan Sun
COVID-19 has been a challenging period for everyone; whilst it is essential that we all practice social distancing to slow the spread of the virus, the lack of face-to-face interaction we experience in our daily lives resultantly sees the increase of stress in a time of significant uncertainty. In such a situation, it is even more important that we stay connected with our family, friends, colleagues, and leaders. The Co-op Society has strived to continue as an avenue of social support for the community, with issues raised in regards to how we facilitate our society events on an online platform, as well as maintaining productivity when working from home.
“Hey, what have you been up to? Have you been doing ok?”
In such a socially distant time, maintaining communication with work teams, friends and other relationships is vital. As the world pivoted to working from home, Marketing scholar Michelle is exceptionally grateful to be at a company equipped with the necessary technology resources to make this transition quickly and effectively. Some strategies she has personally undertaken to ensure open and clear communication at work include “Making a conscious effort to discuss work projects through video call instead of email, which makes a BIG difference to work productivity and also provides social connection!”
Checking up on your team regularly by scheduling meetings on Google Chat, Whatsapp or other online platforms “daily instead of weekly”, as Data Science and Decisions scholar Laurel suggests, reduces the distance we feel navigating life at home. End of quarter trivia nights on Kahoot, virtual morning coffee catch-ups or online cards for birthdays are another great way to strengthen a sense of community.
It can be difficult to find the balance between keeping up to date with life, and feeling overwhelmed by the barrage of information conveyed through various media outlets. I’m one to immediately click on the most recent news stream, but I’ve been trying to reduce my intake of all the bleakness, economic and political upheaval happening globally as it can take a toll on my mental health. Whilst it is important to maintain an awareness of the current global climate, taking the time out of my day to “switch off” (badum tss) is much needed too.
Here at Co-op Soc, our team has risen to the challenge of being exceptionally creative in hosting online events. As a student society, some activities we’ve looked at are online podcasts, movie nights, Spotify music countdowns, game streamings and challenge events, just to name a few. The ways in which we traditionally delivered our society goals have been completely upturned, but with our engagement levels as high as ever, we’re incredibly excited about the endless horizon of new possibilities that have been able to be facilitated via Zoom and social media (TikTok in particular, of which I have been unashamedly obsessed with lately).
Being flexible to change is something the Executive team have been motivated to do. We have continued working on the key messages, events and actions we want to achieve when this period is over; although, we have been met with numerous challenges, particularly regarding the supply and production of our new merchandise. Thus in a time of such change, contingency plans have been helpful in allowing us to adapt quickly when obstacles arise.


Sample Presentation
by<EMAIL_ADDRESS>Step 2: Slide with bullets
# Bullet 1
# Bullet 2
# Bullet 3
Step 3: slide w/ title and text
This one just contains a title and a text. This very traditional.


| Package | Description |
|---|---|
| com.github.kkysen.libgdx.util | |
| com.github.kkysen.supersmashbros.actions | |
| com.github.kkysen.supersmashbros.core |
| Modifier and Type | Method and Description |
|---|---|
static KeyBinding |
KeyBinding.valueOf(String name)
Returns the enum constant of this type with the specified name.
|
static KeyBinding[] |
KeyBinding.values()
Returns an array containing the constants of this enum type, in
the order they are declared.
|
| Modifier and Type | Field and Description |
|---|---|
KeyBinding |
Action.keyBinding |
| Constructor and Description |
|---|
Action(State state,
KeyBinding binding,
Array<Hitbox> hitboxes,
float startup,
float duration,
float cooldown,
float baseDamage,
float angle,
float knockback) |
Attack(State state,
KeyBinding binding,
Array<Hitbox> hitboxes,
float startup,
float duration,
float cooldown,
float baseDamage,
float angle,
float knockback) |
Jump(State state,
KeyBinding binding,
Array<Hitbox> hitboxes,
float startup,
float duration,
float cooldown,
float baseDamage,
float angle,
float knockback) |
SmashAttack(State state,
KeyBinding binding,
Array<Hitbox> hitboxes,
float startup,
float duration,
float cooldown,
float baseDamage,
float angle,
float knockback) |
| Modifier and Type | Field and Description |
|---|---|
private EnumMap<KeyBinding,Action> |
Player.actions |


Interacting with 2D placed on 3D
is now possible in v1 of the Windows Presentation Foundation!
In between shipping Vista and
planning the next version of WPF, we realized that with a clever implementation
it was possible to provide this feature today on v1 bits, and I’m happy to
report that as of now, the binaries (and source code to them) needed to do this
are available for download (here).
The download also contains two
sample applications - InteractiveViewport3DSample and Channel9Demo - which
illustrate how to use the code. So if you just want to dive right in to
2D on 3D, that's a good place to start.
The rest of this post will
describe how to use this feature as a developer, as well as how it’s
implemented behind the scenes. If you want the video version though,
which includes a cool demo of an app we made with the 2D on 3D code (photo
shown below – source here http://www.codeplex.com/3DTools/Release/ProjectReleases.aspx?ReleaseId=2058),
check it out on Channel9 (here).
There are two main classes needed
to add 2D on 3D to you app: Interactive3DDecorator and
InteractiveVisual3D. The Interactive3DDecorator handles the majority of
the work that allows the 2D on 3D interaction to happen. To use it, you
simply place it around the Viewport3D that you intend to make
interactive. So in XAML, you have:
<local:Interactive3DDecorator>
<Viewport3D>
…
</Viewport3D>
</local:Interactive3DDecorator>
Then, to actually add interactive
2D on 3D objects in to your scene, you use the InteractiveVisual3D class.
InteractiveVisual3D is a subclass of ModelVisual3D and provides the following
dependency properties which set up the interactive 2D on 3D:
The first two properties,
Geometry and Visual, are the primary ones needed. They allow the geometry
that should be used to bet set, as well as the Visual that should appear on
that geometry. For example, the below XAML code demonstrates how to
create an InteractiveVisual3D.
<local:InteractiveVisual3D Geometry="{StaticResource
PlaneMesh}">
<local:InteractiveVisual3D.Visual>
<StackPanel>
<Label
Content="Sample UI" />
<Button
Content="Close Window"/>
<TextBox
/>
</StackPanel>
</local:InteractiveVisual3D.Visual>
</local:InteractiveVisual3D>
The other properties allow for
fine tuning of the object’s appearance. The Material property allows a
user to create their own material for the object. To do so, a user can
create a material as always, and then specify using the IsInteractiveMaterial
attached property which material is intended to be “interactive” (i.e. the
VisualBrush created using the passed in Visual is set as the Brush for that
material). Note, this attached property must be set to true on at least one
material – otherwise an exception will be thrown. If you ever want to
disable interaction, you can set “IsHitTestVisible” on the Visual to be
false. As an example of setting a custom material, the following code
sets the material to be composed of a DiffuseMaterial, which will contain the
visual brush, and a SpecularMaterial.
<local:InteractiveVisual3D.Material>
<MaterialGroup>
<DiffuseMaterial
local:InteractiveVisual3D.IsInteractiveMaterial="True"/>
<SpecularMaterial
Brush="Red" />
</MaterialGroup>
</local:InteractiveVisual3D.Material>
Finally, IsBackVisible sets the
material used on the front face to also be used on the back face.
Currently, the Interactive3DDecorator does not distinguish between front and
back faces, so this allows for there to be interaction with the back face as
well.
At a very high level, the interaction
with 2D on 3D is achieved by really interacting with a hidden version of that
2D content in 2D. The 2D is positioned such that the point in 3D the
mouse is over is the exact same point as the mouse is over on the hidden 2D
version. Then, when the user clicks, etc… they are interacting with
exactly the same location. If you want to see this for yourself, you can
set the “Debug” property on Interactive3DDecorator to true, which makes the
hidden layer partially visible.
The Interactive3DDecorator then
consists of two elements: the 3D content that is displayed within it and a
hidden layer that is used to position and display the 2D content that is being
interacted with. Depending on what 2D content on 3D is being interacted
with, the hidden layer changes to hold that 2D content.  The first photo is just
of the 2D content we wish to place on 3D. The second is that 2D content
on 3D. And finally, the third image shows how the 2D on 3D interaction
takes place. When the mouse moves over the “B” in the button, the hidden
layer (shown to be only partially transparent for this example) is moved such
that the mouse is over the same point in the hidden layer as it is in the 3D
scene.
To figure out where to position the hidden layer works as follows. When
the mouse moves in the 3D scene, a ray is shot in to the 3D scene to see if it
intersects any object. If it hit an object, and it is an
InteractiveVisual3D, we can use the return parameters from the intersection to
compute the texture coordinate that was hit. Then from these, we can map
from the (u,v) value of the texture coordinate, on to an x,y point on the 2D
visual, which is the point we need to place under the mouse. More
specifically, the code assumes texture coordinates are all in the range (0,0)
to (1,1) – i.e. upper left to lower right of the image (for those planning to
use this, this is important to know, since your texture coordinates need to be
within this range to enable interaction with the 2D content). Then the
point on the 2D object that was hit is simply (u * Width, v * Height).
One of the great things about this
method then is that the only event that needs to be tracked is when the mouse
moves. There’s no need for catching and forwarding on every type of
event: the hidden layer takes care of all of this work.
Positioning With Capture
There’s one very interesting
“gotcha” though: what happens when one of the 2D objects grabs capture and then
you move off the 3D mesh it is on? For example, you select some text, and
then move the mouse above that selected text, or click and hold on a button,
and then move away from it. Correct hidden content positioning becomes
more complicated in this case. The problem becomes difficult for many
reasons. In the normal 2D situation, both the mouse position and the 2D
content exist in the same plane. The transformation that is applied to
the 2D content can be used to transform the mouse position to the content’s
local coordinate system. However in 3D, due to the projection of 3D on to
a 2D plane, the mouse’s position actually corresponds to a line in 3D
space. In addition, the element with capture could also be mapped to any
arbitrary geometry. When the mouse is over the 3D object, hit testing
tells us where it is relative to the 2D visual. When it is off the 3D
object, due to the above issues, there is no longer a straight forward answer
to this question: the 2D point corresponds to a 3D line and the 2D content
could be on arbitrary 3D geometry. Also, because the element has capture,
it wants to receive all events. Before, we only needed to be sure that
the mouse was over the correct object at all times. Now we need to
position the hidden visual such that it is in the proper position relative to
the object that has capture.
To solve this issue, the code
takes the following approach: The overall idea is to reduce the 3D
problem back to 2D. In the normal 2D case, the transformations applied to
the content can be used to convert the mouse position to the content’s local
coordinate system. This transformed position then lets the content know
where the mouse is relative to it. In 3D, due to the many orientations of
the geometry and texture coordinate layouts, it’s difficult to say where a 3D
point is in the relative coordinate system of the 2D content on 3D. To
approximate this, the outline of the 2D content on 3D, after it has been
projected to screen space, is computed, and then the mouse is positioned based
on this projection.
For example, take the 3 images
below. The first is the 2D content on 3D. In the second image, text
is selected, and the mouse is moved to a point off the object. The third
image is the outline of the text box (the object that has capture). This
outline is then used to position the hidden visual.
After the outline is available, The closest point on this outline to the mouse
position is computed, and then this point on the outline is considered what was
“hit” and it is placed under the moue position (hence, highlighting up to the
“T” in the middle image below). Since we place the mouse by the closest
edge point, the interaction tends to behave as it would in 2D, since we
position the hidden content based on what the mouse is closest to on the 2D
content on 3D. By placing it at the closest edge point, we are explicitly
stating about where we expect the mouse to be relative to the 2D on 3D
element’s orientation.
This method helps provide an
intuitive response to the interaction, since the interaction happens with the
closest point on the object with capture to the mouse.
Enjoy using it! We’ve had a
lot of fun building this, and can’t wait to see what kind of incredible
applications will be built with it!
-Kurt


Finds the common standard cache directory
Recently the nyc
and AVA
projects decided to standardize on a common directory structure for storing cache information:
# nyc
./node_modules/.cache/nyc
# ava
./node_modules/.cache/ava
# your-module
./node_modules/.cache/your-module
This module makes it easy to correctly locate the cache directory according to this shared spec. If this pattern becomes ubiquitous, clearing the cache for multiple dependencies becomes easy and consistent:
rm -rf ./node_modules/.cache
If you decide to adopt this pattern, please file a PR adding your name to the list of adopters below.
$ npm install --save find-cache-dir
const findCacheDir = require('find-cache-dir');
findCacheDir({name: 'unicorns'});
//=> '/user/path/node-modules/.cache/unicorns'
Finds the cache directory using the supplied options. The algorithm tries to find a package.json
file, searching every parent directory of the cwd
specified (or implied from other options). It returns a string
containing the absolute path to the cache directory, or null
if package.json
was never found.
Required
Type: string
Should be the same as your project name in package.json
.
Type: Array
`string
An array of files that will be searched for a common parent directory. This common parent directory will be used in lieu of the cwd
option below.
Type: string
Default process.cwd()
Directory to start searching for a package.json
from.
Type: boolean
Default false
If true
, the directory will be created synchronously before returning.
Type: boolean
Default false
If true
, this modifies the return type to be a function that is a thunk for path.join(theFoundCacheDirectory)
.
const thunk = findCacheDir({name: 'foo', thunk: true});
thunk();
//=> '/some/path/node_modules/.cache/foo'
thunk('bar.js')
//=> '/some/path/node_modules/.cache/foo/bar.js'
thunk('baz', 'quz.js')
//=> '/some/path/node_modules/.cache/foo/baz/quz.js'
This is helpful for actually putting actual files in the cache!
MIT © James Talmage


PureBasic - Camera
Overview
Cameras are used to display the 3D world. You can manage them like real life cameras, which means you can rotate, move, change the field of vision and more. At least one camera is absolutely required in order to render the world to the screen. Many cameras can be used at the same time with different positions and views to allow cool effects like: split-screen, rear view, etc. InitEngine3D() must be called successfully before using the camera functions.
Command Index
CameraBackColor
CameraDirection
CameraDirectionX
CameraDirectionY
CameraDirectionZ
CameraFOV
CameraFixedYawAxis
CameraFollow
CameraID
CameraLookAt
CameraPitch
CameraProjectionMode
CameraProjectionX
CameraProjectionY
CameraRange
CameraRenderMode
CameraRoll
CameraViewHeight
CameraViewWidth
CameraViewX
CameraViewY
CameraX
CameraY
CameraYaw
CameraZ
CreateCamera
FreeCamera
IsCamera
MoveCamera
RotateCamera
SwitchCamera
Example
Camera.pb
Supported OS
All


Mat Mania or Exciting Hour
Introduction
Is a 1985 Japanese pro wrestling-themed arcade game developed by Technōs Japan and published by Taito. It is a spiritual successor to the 1983 arcade game Tag-Team Wrestling, also developed by Technōs Japan, but published by Data East. It was also ported to the PS4 console in 2015.


Test the API with token
Get current token from localhost:8000
URI:
TOKEN:
Check API connection
Result:


DANGEROUS CROSSING (director: Joseph M. Newman; screenwriters: Leo Townsend/novel by John Dickson Carr; cinematographer: Joseph LaShelle; editor: William H. Reynolds; cast: Jeanne Crain (Ruth Bowman), Michael Rennie (Dr. Paul Manning), Carl Betz (John Bowman), Mary Anderson (Anna Quinn), Casey Adams (Jim Logan), Willis Bouchey (Capt. Peters), Karl Ludwig Lindt (Foreign Passenger), Marjorie Hoshelle (Kay Prentiss); Runtime: 75; 1953)
Reviewed by Dennis Schwartz
A good old-fashioned mystery yarn, from John Dickson Carr, but this time instead of the Lady Vanishes, it is the husband who does. Ruth Bowman (Jeanne Crain) has just gotten married a few hours ago and her husband John (Betz) has arranged for them to go on a honeymoon cruise aboard a luxury liner across the Atlantic.
He carries the blissful bride across the threshold to their room and the stewardess (Anderson) arranging the flowers, quickly excuses herself. John then tells his wife that he has to go to the purser in order to leave some money there for safe keeping and he will meet her in the dining room. But that is the last she sees him as he vanishes, along with their tickets and passport. Ruth is shaken up, and when she tries to explain this to the ship personnel, they don't believe her. She can't remember where she got married and has no proof of the marriage, and when they check the cabin she was supposed to be quartered in, they find that it is deserted and wasn't booked for the voyage. On top of that, no one on board the ship has seen the beautiful woman with her husband. Oddly enough, the one person who clearly saw her, the stewardess, denies seeing her. When she asks about her luggage, the steward traces it to her maiden name and a different cabin than the one she mentioned, with no luggage or mention of her husband.
The ship's doctor, Paul Manning (Rennie), is called in to calm her down and get the real story from her. He wants to believe her and acts very kindly, but thinks she is hallucinating. She tells him that her father died four months ago and she was very close to him, and had a nervous breakdown after his death. Feeling depressed and lonely she met John and he made her feel happy again, so they secretly got married after a short romance.
She can't believe John is not on the boat and after the captain (Bouchey) tells her he had the boat searched and there was no one on it, she still believes John is on it. She then receives a mystery call from John, as he tells her to trust no one, that both their lives are in danger, and that he will get back to her as soon as possible.
Ruth is hysterical, as the ship's crew think she is imagining things, though Paul sticks with her through thick and thin, though smelling something suspicious. He finally asks her who would benefit from the death of either her or her husband, and she tells him her father was a wealthy industrialist and in his will left her the company.
The story itself, if examined closely had many improbabilities, but the strength of the film is in the tension it creates within Crain and how she handles it.  She had a blind trust in him and it is hard for me to imagine another person in her situation acting as naively as she does. But even if I didn't find the plot to be always plausible, the relationship that developed between her and Rennie was credible.
This B&W melodrama was always suspenseful: there was the constant heavy fog that made things mysterious. Crain seemed so helplessly alone, highlighted by showing her sitting by herself at the dining table and feeling that she is losing her mind, that set the mood for the entire film and her vulnarability is what the viewer identifies with. This excellently paced B-film, is tersely directed and superbly acted. The film seemed to be thrust forward by the credibility of the characters playing parts that were incredible.
REVIEWED ON 8/7/2000 GRADE: B-
Dennis Schwartz: "Ozus' World Movie Reviews"
http://www.sover.net/~ozus
<EMAIL_ADDRESS>© ALL RIGHTS RESERVED DENNIS SCHWARTZ
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


The mission of the “Justice and Mercy Under a Trump Administration” conference is to educate and inspire people of faith to recognize and then ACT to eliminate systemic injustice in every aspect of our church and society. Join us for a weekend of inspiring speakers and thought-provoking focus sessions. You will return home knowing that you are called to ACTION.
Join us in Baltimore, MD on October 20–21, 2017.
Click here to register!Sr. Simone Campbell is the Executive Director of NETWORK, a Catholic social justice lobby organization and founder of Nuns on the Bus. Sr. Simone addressed the 2012 National Democratic Convention. She has been featured in the national and international media including 60 Minutes, The Colbert Report, and others.
Dr. Greer G. Gordon is a Roman Catholic theologian, author, and lecturer known for her work in the field of apologetics, evangelization, and catechetics. She’s served in administrative positions at the University of Massachusetts, St. Regis College. She was diocesan director in Washington D.C., Oakland, Boston, and Baton Rouge.
Sr. Patty Chappell is the Executive Director of Pax Christi, USA., the largest Catholic Peace and Justice movement in the United States. She was president of the National Black Sisters Conference, 1996-2001. Sister Patty was trained by Crossroads in anti-racism training. In 2016, Sister brought the Pax Christi USA National Conference to Baltimore.
890 Elkridge Landing Rd
Linthicum, MD 21090
(410) 859-8400
We have reserved a block of discounted rooms at the hotel for conference guests.
Click here to reserve your hotel room.Friday reception and Saturday breakfast & lunch included in registration fee. This fee includes a $50 non-refundable cancellation fee.
An additional gift to fund the scholarship program is appreciated. Limited partial and full scholarships are available; you are asked to pay what you are able.
Click here to register!


--- layout: post title: "A night out with Jasmine" date: 2014-04-23 00:37:18 categories: jasmine, tdd, node.js ---
Unit testing is much more than a tool for ensuring that a program behaves as expected. Nowadays it's the key for new development techniques such as TDD and BDD in which you begin writing tests before the required code. It's all about requirements and behaviour; developers must focus on understanding the requirements instead of thinking about the way they implement the code. In the event that you've forgotten the fundamental benefits of unit testing here you have a quick reminder:
Jasmine is a BDD framework for javascript code. In a nutshell, BDD it's an evolution of TDD where unit tests look like user stories, and so tests are defined in the same terms of the expected behaviour of the software units. When you discover functions names in Jasmine tests these simple definitions will make more sense.
Let's get our hands dirty, while you take a look at Jasmine's site http://jasmine.github.io/2.0/introduction.html you can get the master from the github site https://github.com/pivotal/jasmine/archive/master.zip
Or, if you are using node then just sigh, coff slightly, adjust your spectacles and simply try with this: npm -g install jasmine-node
Beware! at the time of writing this Jasmine is in 2.0 version and there are some changes and deprecated functions. So, be careful with what you read out there, check dates.
Ok, once jasmine is installed let's write this piece of code in a file called hello.js
exports.hello = function () { return 'Hello world'; };
Behold the almighty helloworld sample.
With Jasmine, the test file is expected to live in a dir called specs in a file called name.spec.js, so hello.spec.js in this case.
And this is what the test would look like:
/* * specs/hello.spec.js */ var hl = require("../hello.js"); // testing hello function describe("hello", function() { it('returns "Hello world"', function() { expect(hl.hello()).toEqual("Hello world"); }); });
To run the test, in the same directory where hello.js resides we type jasmine-node command with the dir of the test and it will pass all specs files within
linux$ jasmine-node specs/ . Finished in 0.020 seconds 1 tests, 1 assertions, 0 failures, 0 skipped linux$
¿How could we test functions that are using a callback? In the same hello.js file we add this function:
exports.helloAsync = function (callback) { return callback(null,'Async Hello World'); };
And this is how the test should look like:
describe("helloAsync", function() { it("does an asynchronous call", function() { hl.helloAsync(function(err,response) { expect(response).toContain("Async Hello World"); }); }); });
Now if we run the test, we will check 2 test and 2 assertions:
linux$ jasmine-node specs/ .. Finished in 0.029 seconds 2 tests, 2 assertions, 0 failures, 0 skipped linux$
Maybe you've noticed that in the second test instead of toEqual we're using .toContain. These are different matchers with different effects as indicated by their obvious names. As you can see, Jasmine drives us to write tests that apart from being 'extracool' can be read as natural language.
Our beloved system administrator wants a program to convert people names such as "john, doe" into account names like "john_doe". Remember, we are trying TDD now so focus on the requirement, and try not to think about using regular expressions or any kind of implementation details. TDD dictates to follow this steps:
Ok, we create a specs dir, and inside a username.spec.js file containing our test of a code that right now it is but a ghost:
var username = require('../username.js'); describe('Test to ensure username is created', function () { it('returns name_surname with simple Name,Surname',function () { expect(username.create('john,doe')).toEqual('john_doe'); }); });
Not only if we test this fails, but also if we run it this code FAILS. why? username.js does not exist, as simply as that. Well then, time for step 2 in TDD, we write our code in a file named username.js one dir level below.
/** * username.js * Pello Altadill Izura * http://pello.info */ exports.create = function (personName) { var result = ''; var parts = personName.split(','); result = parts[0] + '_' + parts[1]; return result; };
Now what we get is what we expected to:
linux$ jasmine-node specs/ . Finished in 0.033 seconds 1 test, 1 assertion, 0 failures, 0 skipped linux$
The requirements were minimal in order to show the process of TDD. But the world is not a pleasant place where everything just works fine. As Melissandre said, there is one hell, the one we are living in now. This could be a more realistic problem, which might be more useful to ilustrate some other Jasmine features.
Our Benevolent Dictator thinks that we deserve the honor to raise from the mud in which we creep and serve him with our bare hands, although we are not worthy of such a gift from a demigod. We want to get on well with OBD if we want him to lower the proxy constraints for us among other mundane privileges. He is in a need for a program that translates people names to system names with this specifications:
We'll try to acomplish these specs, so our unit tests might look like this in Jasmine style:
var username = require('../username.js'); describe('Test to ensure username is created', function () { it('returns name_surname with simple Name,Surname',function () { expect(username.create('john,doe')).toEqual('john_doe'); }); it('converts any uppercase character to lowercase', function () { expect(username.create('Han,Solo')).toEqual('han_solo'); }); it('removes any space character', function () { expect(username.create(' Luke, Skywalker ')).toEqual('luke_skywalker'); }); it('returns multiple names together', function () { expect(username.create('Obi Wan,Kenobi')).toEqual('obiwan_kenobi'); }); it('throws error if name is empty', function () { expect(function() { username.create(''); }).toThrow('Person name is empty'); }); });
If we test all of this with our previous code Jasmine will scream our name:
linux$ jasmine-node specs/ .FFFF Failures: 1) Test to ensure username is created converts any uppercase character to lowercase Message: Expected 'Han_Solo' to equal 'han_solo'. Stacktrace: Error: Expected 'Han_Solo' to equal 'han_solo'. at null.(/root/nodejs/jasmine/users/specs/username.spec.js:9:39) 2) Test to ensure username is created removes any space character Message: Expected ' Luke_ Skywalker ' to equal 'luke_skywalker'. Stacktrace: Error: Expected ' Luke_ Skywalker ' to equal 'luke_skywalker'. at null. (/root/nodejs/jasmine/users/specs/username.spec.js:13:50) 3) Test to ensure username is created returns multiple names together Message: Expected 'Obi Wan_Kenobi' to equal 'obiwan_kenobi'. Stacktrace: Error: Expected 'Obi Wan_Kenobi' to equal 'obiwan_kenobi'. at null. (/root/nodejs/jasmine/users/specs/username.spec.js:17:45) 4) Test to ensure username is created returns empty string with spaces Message: Expected '_undefined' to equal ''. Stacktrace: Error: Expected '_undefined' to equal ''. at null. (/root/nodejs/jasmine/users/specs/username.spec.js:21:31) Finished in 0.061 seconds 5 tests, 5 assertions, 4 failures, 0 skipped
Let's fix each of the tests
/** * username.js * Pello Altadill Izura * http://pello.info */ exports.create = function (personName) { var result = ''; personName = personName.toLowerCase(); personName = personName.replace(/\s/g,''); if (personName == '' ) { throw new Error('Person name is empty'); } var parts = personName.split(','); result = parts[0] + '_' + parts[1]; return result; };
The \s replacement fixes many things. And now we throw an Error whenever a personName comes empty. Maybe this is not the preferred behaviour of our program, but It helps to show how to check if exceptions are thrown.
We have already used .toEqual(), .toContain() and .toThrow(), but if you're familiar with unit testing you might expect many others to exist. So instead of blowing your mind with poor-man's wordgames, let's see what we have inside Jasmine's toolbox.
at any moment we can reverse the matcher using a not like this
expect(666).not.toEqual(333);
Tests equality with primitive types: numbers, strings, booleans, null. But NOT with objects. Some examples:
var one = {'name' : 'John'}; var other = {'name' : 'John'}; var another = one; var oneArray = [42, 15, 69]; var otherArray = [42, 15, 69]; var anotherArray = [6, 66, 666]; var phrase = 'By demon be driven'; expect(6).toEqual(6); expect(6).toEqual(6.0); expect(one).toEqual(other); expect(oneArray).toEqual(otherArray); expect(6).not.toEqual('6');
Tests equality between objects. Some examples:
var one = {'name' : 'John'}; var other = {'name' : 'John'}; var another = one; var oneArray = [42, 15, 69]; var otherArray = [42, 15, 69]; var anotherArray = [6, 66, 666]; expect(6).toBe(6); expect(6).not.toBe('6'); expect(6).toBe(6.0); expect(one).toBe(another); expect(oneArray).not.toBe(otherArray); expect(one).not.toBe(other);
Checks if an element of a string or of an array is present. Some examples:
var phrase = 'By demon be driven'; expect(oneArray).toContain(42); expect(phrase).toContain('demon');
Checks if what we expect is true. Some examples:
expect(true).toBeTruthy(); expect(1).toBeTruthy(); expect('Metallica').toBeTruthy(); expect(66).toBeTruthy(); // anything but 0
Checks if what we expect is false. Some examples:
var phrase = 'By demon be driven'; expect(false).toBeFalsy(); expect(0).toBeFalsy(); expect('').toBeFalsy(); expect(null).toBeFalsy(); expect(undefined).toBeFalsy(); expect(NaN).toBeFalsy(); expect(true).not.toBeFalsy(); expect(phrase).not.toBeFalsy();
Checks if something is null. Some examples:
expect(null).toBeNull(); expect('').not.toBeNull(); expect([]).not.toBeNull();
Checks if we have anything but a number. Some examples:
var phrase = 'By demon be driven'; expect(NaN).toBeNaN(); expect(parseInt('One')).toBeNaN(); expect(parseInt('666')).not.toBeNaN(); expect(phrase).not.toBeNaN(); expect(6).not.toBeNaN();
Checks if a variable is defined. Some examples:
var unnamed; var god = 'Cthulhu'; var anotherGod = god; expect(god).toBeDefined(); expect(another).toBeDefined(); expect(666).toBeDefined(); expect(true).toBeDefined(); expect(null).toBeDefined(); // yes, it is expect(unnamed).not.toBeDefined();
Checks if a variable is not defined Some examples:
var unnamable; var unnamed; expect(unnamable).toBeUndefined(); expect(unnamed).toBeUndefined(); expect(null).not.toBeUndefined(); // This would throw Reference Error //expect(notDeclaredVar).toBeUndefined();
Checks if the value, integer or String is greater than other. Some examples:
expect(6).toBeGreaterThan(5); expect('b').toBeGreaterThan('a'); expect(6).not.toBeGreaterThan('6');
Checks if the value is lesser. Some examples:
expect(5).toBeLessThan(6); expect(-5.1).toBeLessThan(-5.0); expect('a').toBeLessThan('b');
Checks if a value is closed to another providing certain precision. When the precision is 0 it parses the number to Int. Some examples:
expect(66.64).toBeCloseTo(66.62,1); expect(66.64).toBeCloseTo(67,0); expect(42.44).toBeCloseTo(42,0); expect(42.59).toBeCloseTo(43,0); expect(Math.PI).toBeCloseTo(3.14,2); expect(Math.PI).toBeCloseTo(3,0);
This is great, we can check if the value matches a regular expression. Some examples:
expect('Thorin Kili Gloin').toMatch(/gloin/i); expect('Jasmine').toMatch(/[a-z]+/i); expect('Jasmine and Eugene').not.toMatch(/^[a-z]+$/gi); expect('Jasmine and Eugene').toMatch(/^[a-z\s]+$/gi);
As explained before, checks if an Error is thrown.
We'll try with this dumb function:var vomitError = function () { throw new Error('I puke errors'); }; it('checks toThrow',function () { expect(vomitError).toThrow(); });
Maybe you need a more specific matcher to be able to test something that Jasmine's default matchers are not capable of. Well, you can define your own matchers. Inside the describe block we can define our own matcher, in this case is one matcher to test if a String is complex enough to be a secure password.
/** * customMatcher * toBeComplex * checks if a String contains alphanumeric and symbols * and a min lenght of 8 */ beforeEach(function() { this.addMatchers({ toBeComplex: function() { this.message = function() { return "Expected " + this.actual + " to be complex"; }; return this.actual.match(/[a-z]{1,}/) && this.actual.match(/[A-Z]{1,}/) && this.actual.match(/[0-9]{1,}/) && this.actual.match(/[\.\,\;\:\-\!\?\_]{1,}/) && (this.actual.length>7); } }); });
And now we can use our tester just like the others:
// toBeComplex // Checks if a String is valid to be a password it('checks toBeComplex',function () { expect('Death-666').toBeComplex(); expect('.-;.:,!?').not.toBeComplex(); expect('Death66').not.toBeComplex(); expect('josua').not.toBeComplex(); });
'josua' has always been a very bad password.
If you need params in this matcher is quite easy to add them. We define a slightly different matcher now adding the minimun length.
toBeComplexAndLongerThan: function(length) { this.message = function() { return "Expected " + this.actual + " to be complex and longer than " + length; }; return this.actual.match(/[a-z]{1,}/) && this.actual.match(/[A-Z]{1,}/) && this.actual.match(/[0-9]{1,}/) && this.actual.match(/[\.\,\;\:\-\!\?\_]{1,}/) && (this.actual.length>length); }
Now we test it:
expect('Josua:It666').toBeComplexAndLongerThan(10);
Matches are fine to check if our functions are returning what are expected to. But, how could we be sure that certain functions are being called? Jasmine as many other tools brings us the possibility to introuce the so called spies. By the way I introduce the use of setup/teardown like methods in Jasmine: beforeEach and afterEach.
First I'll show how to use the spies in a very simple problem, and after that we'll move to test a tcp server with async calls.
stringutils: this is a simple class with some methods to do simple stuff with strings.
/** * stringutils.js * Some String utils */ exports.StringUtils = function () { this.len = function (string) { return string.length; }; this.vowels = function (string) { var totalVowels = 0; for (var i = 0; i< this.len(string);i++) { if (string[i].match(/^[aeiou]{1}$/i)) { totalVowels++; } } return totalVowels; }; this.reverse = function (string) { var gnirts = ''; for (var i = this.len(string) -1;i>=0 ;i--) { gnirts += string[i]; } return gnirts; } };
Ok, I'm afraid that I'll not get rich with this, but should be enough to apply simple spies on it in this spec below:
var stringutils = require("../stringutils.js"); // testing hello function describe("testing stringutils", function() { var myStringUtils; beforeEach(function() { myStringUtils = new stringutils.StringUtils(); spyOn(myStringUtils,'len'); spyOn(myStringUtils,'vowels'); spyOn(myStringUtils,'reverse'); myStringUtils.len('Eugene'); myStringUtils.vowels('Eugene'); myStringUtils.reverse('Eugene'); }); it('calls len function',function () { expect(myStringUtils.len).toHaveBeenCalled(); expect(myStringUtils.len).toHaveBeenCalledWith('Eugene'); }); it('calls vowels function',function () { expect(myStringUtils.vowels).toHaveBeenCalled(); expect(myStringUtils.vowels).toHaveBeenCalledWith('Eugene'); }); it('calls reverse function',function () { expect(myStringUtils.reverse).toHaveBeenCalled(); expect(myStringUtils.reverse).toHaveBeenCalledWith('Eugene'); }); afterEach(function () { }); });
To set spies, we have to call spyOn method. Then we can check if any method has been called and even we can test if they where called with certain parameters.
We could chain some of these to make the function behave as we want:
Now let's try harder with a simple node tcp echo server. This is the server
/** * echoserver.js * Simple sample echo server writen in nodejs * Pello Altadill */ var net = require('net'); exports.EchoServer = function (port, host) { var self = this; this.port = port || 1666; this.host = host || '<IP_ADDRESS>'; this.server = net.createServer(); this.timeout = 5000; // 5 secs this.keepAlive = true; this.keepAliveTime = this.timeout; this.clientSockets = []; this.init = function () { this.server.listen(this.port, this.host); }; this.listening = function() { console.log('Server> Server listening on port ' + port); }; this.connection = function(socket) { self.clientSockets.push(socket); console.log('Server> Connected to server, total clients: ' + self.clientSockets.length); // console.log(socket); if (this.keepAlive) { socket.setKeepAlive(this.keepAliveTime); } else { socket.setTimeout(this.timeout); } socket.on('timeout', function () { console.log('Server> timeout'); socket.end(); }); socket.on('data', function (msg) { console.log('Server> Received data ' + msg); console.log('Server> Sending it back'); socket.write(msg); }); socket.on('close', function () { console.log('Server> Socket closed'); var index = self.clientSockets.indexOf(socket); self.clientSockets.splice(index, 1); }); }; this.close = function(err) { console.log('Server> Connection closed ' + err); }; this.error = function(err) { console.log('Server> Error on server ' + err); }; this.close = function () { this.server.close(); this.server.unref(); }; this.server.on('listening',this.listening); this.server.on('connection', this.connection); this.server.on('close', this.close); this.server.on('error', this.error); };
And this is a way to test some behaviours of the server
var server = require("../echoserver.js"); var net = require('net'); var myServer; // testing hello function describe("server", function() { var successCallBack; beforeEach(function() { successCallBack = jasmine.createSpy(); myServer = new server.EchoServer(1666,'<IP_ADDRESS>'); spyOn(myServer, 'init').andCallThrough(); spyOn(myServer.server, 'listen').andCallThrough(); spyOn(myServer, 'connection').andCallThrough(); myServer.init(); }); it('Check server port', function() { expect(myServer.port).toEqual(1666); }); it('Check server host', function() { expect(myServer.host).toEqual('<IP_ADDRESS>'); }); it('Check server init was called', function() { expect(myServer.init).toHaveBeenCalled(); }); it('Check server listen was called', function() { expect(myServer.server.listen).toHaveBeenCalled(); }); it('Check server connection was called', function() { var client = net.connect({ port: 1666 }, function() { client.write('Eat this madafaka!'); }, successCallBack); waitsFor(function() { console.log('Waiting here: ' + successCallBack.callCount ); return successCallBack.callCount > 0; }, "operation never completed", 10000); runs(function() { expect(successCallBack).toHaveBeenCalled(); }); }); it('checks that server responds the same ', function(done) { var client = net.connect({ port: 1666 }); client.write('hello there'); client.on('data', function(data){ console.log(data.toString()); expect(data.toString()).toBe('hello there'); done(); }); }); afterEach(function() { }); });
The last test is testing the result of an asynchronous call and it needs to use done() callback. This is valid for Jasmine >= 2.0 versions now. Maybe you've read something about run/waitFor but now this seems to be the official way to do this.
Some references:


This directive affects Squid's
neighbor selection algorithm for
hierarchical requests (cachable responses). It is only relevant if
you have one or more neighbor caches. When Squid builds a list of
next-hop locations for cache misses, it puts neighbor caches before
the origin server by default. If you would rather have Squid put the
origin server before neighbors, enable the
prefer_direct directive. See Section 10.10. |
Syntax
|
prefer_direct on|off
| |
Default
|
prefer_direct off
| |
Example
|
prefer_direct on
| |
Related
|
nonhierarchical_direct,
never_direct, always_direct
|
|


Quickstart¶
Setting up a bot using this framework is designed to be simple, especially if you have already worked with one of the supported chat platforms and NLP services.
Please consult the Overview section if you need more information regarding the respective components of a chatbot.
emubot
allows the deployment of a chatbot on various platforms. To get started, you have to modify your Configuration file to determine the messaging and
NLP services you want to use. If you want to include a platform that is currently not supported by this framework, you can implement an adapter by yourself (see
Support Your Chat Platform and Support Your NLP Platform respectively).To use the framework you have to install
npm
, which is automatically shipped with Node.js. If you do not already have Node.js installed on your system,
simply follow these steps to install it. After having installed Node.js, you can currently choose between three different exemplar
setups with different (dis-)advantages to test the emubot
framework. Each of these examples has a guide on how to setup the chatbot in its respective repository!Minimal example: Uses the
emubot
npm package. This is mainly to test setups for yourself and should not be used in production, because the user identification is not further disguised by default.Extensive example: Uses the
emubot
npm package. This repository includes more advanced functionality (see Interceptors) like databases and pseudonymization by default.Cloning the repository from GitHub and starting it. Recommended if you want to apply changes to the framework itself.


Let's say you want to use your existing tools to deploy and test your applications - you can still use Keptn`s Quality Gates for the evaluation of Service Level Objectives (SLOs).
A brief recap of SLO and SLI: A Service Level Objective (SLO) is a target value or range of values for a service level that is measured by a Service Level Indicator (SLI). An SLI is a carefully defined quantitative measure of some aspect of the level of service that is provided. By default, the following SLIs can be used for evaluation, inspired by the Site Reliability Engineering book from Google:
Clone the following tutorial to your local machine to have all files at hand that we are going to use for this tutorial.
git clone --branch release-0.6.2 https://github.com/keptn/examples.git --single-branch
cd examples/onboarding-carts
For this tutorial a Kubernetes cluster is needed. Please take a look a the different cluster installations we are providing.
Every release of Keptn provides binaries for the Keptn CLI. These binaries are available for Linux, macOS, and Windows.
There are multiple options how to get the Keptn CLI on your machine.
curl -sL https://get.keptn.sh | sudo -E bash
This will download and install the Keptn CLI automatically.keptn
binary in the unpacked directorychmod +x keptn
), and move it to the desired destination (e.g. mv keptn /usr/local/bin/keptn
)Now, you should be able to run the Keptn CLI:
keptn --help
.\keptn.exe --help
If you want to install Keptn just to explore the capabilities of quality gates, you have the option to roll-out Keptn without components for automated delivery and operations. Therefore, set the use-case
flag to quality-gates
when executing the install command:
keptn install --platform=[aks|eks|gke|pks|openshift|kubernetes] --use-case=quality-gates
This tutorial is slightly different compared to others because you need to bring your own monitored service. However, we are helping you here to use our infamous sockshop application with its carts microservice.
If you want to use your own service, please adopt references to sockshop and carts in the remainder of this tutorial with your own service names.
Install the Prometheus service in your Keptn installation:
kubectl apply -f https://raw.githubusercontent.com/keptn-contrib/prometheus-service/release-0.3.3/deploy/service.yaml
Deploy the sample application with kubectl
into your Kubernetes cluster. This part would actually be done by your CI/CD pipeline. However, since we do not have this pipeline at hand, we are doing this manually:
kubectl create namespace sockshop-hardening
kubectl apply -f https://raw.githubusercontent.com/keptn/examples/master/onboarding-carts/manifests/manifest-carts-db.yaml
kubectl apply -f https://raw.githubusercontent.com/keptn/examples/master/onboarding-carts/manifests/manifest-carts.yaml
This tutorial assumes that you have Prometheus installed and the service has to be monitored by Prometheus. If you are using your own microservice, please make sure that it is properly monitored by Prometheus and a corresponding scrape job is in place:
To configure a scrape job for a Prometheus deployed on Kubernetes, you need to update the prometheus-server-conf
ConfigMap at the prometheus.yml
section with an additional scrape job:
prometheus.yaml:
----
scrape_configs:
- job_name: carts-sockshop-hardening
honor_timestamps: false
metrics_path: /prometheus
static_configs:
- targets:
- carts.sockshop-hardening:80
For more information about configuring a scrape job, see the official Prometheus documentation at section scrape_config.
Let us create a Keptn project (e.g., sockshop) with only one the hardening stage declared in the shipyard-quality-gates.yaml
file that we have cloned from the examples Github repository earlier. Please note that defining a Git upstream is recommended, but in case that is not wanted the parameters git-user
, git-token
and git-remote-url
can be omitted.
keptn create project sockshop --shipyard=shipyard-quality-gates.yaml --git-user=GIT_USER --git-token=GIT_TOKEN --git-remote-url=GIT_REMOTE_URL
Create a Keptn service for your service (e.g., carts) you want to evaluate:
keptn create service carts --project=sockshop
To activate the quality gate for your service, upload the slo-quality-gates.yaml
file:
keptn add-resource --project=sockshop --stage=hardening --service=carts --resource=slo-quality-gates.yaml --resourceUri=slo.yaml
Let us take a look at the actual file we have just added:
---
spec_version: "0.1.1"
comparison:
aggregate_function: "avg"
compare_with: "single_result"
include_result_with_score: "pass"
number_of_comparison_results: 1
filter:
objectives:
- sli: "response_time_p95"
key_sli: false
pass: # pass if (relative change <= 10% AND absolute value is < 600ms)
- criteria:
- "<=+10%" # relative values require a prefixed sign (plus or minus)
- "<600" # absolute values only require a logical operator
warning: # if the response time is below 800ms, the result should be a warning
- criteria:
- "<=800"
weight: 1
total_score:
pass: "90%"
warning: "75%"
The activated quality gate is passed when the absolute value of the response time is below 600ms and the relative change of the response time compared to the previous evaluation is below 10%. The quality gate raises a warning when the absolute value of the response time is below 800ms.
During the evaluation of a quality gate, the Prometheus SLI provider is required that is implemented by an internal Keptn service, the prometheus-sli-service. This service will fetch the values for the SLIs that are referenced in a SLO configuration.
To install the prometheus-sli-service, execute:
kubectl apply -f https://raw.githubusercontent.com/keptn-contrib/prometheus-sli-service/0.2.2/deploy/service.yaml
Configure custom SLIs for the Prometheus SLI provider as specified in sli-config-prometheus.yaml
:
keptn add-resource --project=sockshop --stage=hardening --service=carts --resource=sli-config-prometheus.yaml --resourceUri=prometheus/sli.yaml
This will add service-level indicator to your Keptn installation which can be used in our quality-gate file slo.yaml
where we defined objectives upon those metrics:
---
spec_version: '1.0'
indicators:
response_time_p50: histogram_quantile(0.5, sum by(le) (rate(http_response_time_milliseconds_bucket{handler="ItemsController.addToCart",job="$SERVICE-$PROJECT-$STAGE"}[$DURATION_SECONDS])))
response_time_p90: histogram_quantile(0.9, sum by(le) (rate(http_response_time_milliseconds_bucket{handler="ItemsController.addToCart",job="$SERVICE-$PROJECT-$STAGE"}[$DURATION_SECONDS])))
response_time_p95: histogram_quantile(0.95, sum by(le) (rate(http_response_time_milliseconds_bucket{handler="ItemsController.addToCart",job="$SERVICE-$PROJECT-$STAGE"}[$DURATION_SECONDS])))
Execute the following command to configure Keptn to use Prometheus:
keptn configure monitoring prometheus --project=sockshop --service=carts
At this point, your service is ready and you can now start triggering evaluations of the SLO. A quality gate is a two-step procedure that consists of starting the evaluation and polling for the results.
At a specific point in time, e.g., after you have executed your tests or you have waited for enough live traffic, you can either start the evaluation of a quality gate manually using the Keptn CLI, or automate it by either including the Keptn CLI calls in your automation scripts, or by directly accessing the Keptn REST API.

Let us simply use curl
to do this:
curl -X POST http://$(kubectl get svc carts -n sockshop-hardening -o jsonpath='{.status.loadBalancer.ingress[0].ip}')/carts/[1-100]/items -H "Content-Type: application/json" -d '{"id":"1", "itemId":"1", "price":"1"}'
Execute a quality gate evaluation by using the Keptn CLI to send event start-evaluation:
keptn send event start-evaluation --project=sockshop --stage=hardening --service=carts --timeframe=5m
This start-evaluation
event will kick off the evaluation of the SLO of the catalogue service over the last 5 minutes. Evaluations can be done in seconds but may also take a while as every SLI provider needs to query each SLI first. This is why the Keptn CLI will return the keptnContext
, which is basically a token we can use to poll the status of this particular evaluation. The output of the previous command looks like this:
Starting to send a start-evaluation event to evaluate the service catalogue in project sockshop
ID of Keptn context: 6cd3e469-cbd3-4f73-xxxx-8b2fb341bb11
keptn get event evaluation-done --keptn-context=6cd3e469-cbd3-4f73-xxxx-8b2fb341bb11
The result comes in the form of the evaluation-done
event, which is specified here.
First, get the Keptn API endpoint and token by executing the following commands:
KEPTN_ENDPOINT=https://api.keptn.$(kubectl get cm keptn-domain -n keptn -ojsonpath='{.data.app_domain}')
# now print the endpoint and token to the local console
echo $KEPTN_ENDPOINT
echo $(kubectl get secret keptn-api-token -n keptn -ojsonpath='{.data.keptn-api-token}' | base64 --decode)
Prepare the POST request body by filling out the next JSON object:
{
"type": "sh.keptn.event.start-evaluation",
"source": "https://github.com/keptn/keptn"
"data": {
"start": "2020-04-21T11:00:00.000Z",
"end": "2020-04-21T11:05:00.000Z",
"project": "sockshop",
"stage": "hardening",
"service": "carts",
"teststrategy": "manual"
}
}
Please take attention that the above CloudEvent contains the property "teststrategy": "manual"
. This is required to tell Keptn that a test had been manually executed; meaning that a test had been triggered by a tool other than Keptn.
Execute a quality gate evaluation by sending a POST request with the Keptn API token and the prepared payload:
curl -X POST "https://api.keptn.<IP_ADDRESS>.xip.io/v1/event" -k -H "accept: application/json" -H "x-token: YOUR_KEPTN_TOKEN" -H "Content-Type: application/json" -d "{ \"data\": { \"end\": \"2019-11-21T11:05:00.000Z\", \"project\": \"sockshop\", \"service\": \"carts\", \"stage\": \"hardening\", \"start\": \"2019-11-21T11:00:00.000Z\", \"teststrategy\": \"manual\" }, \"type\": \"sh.keptn.event.start-evaluation\", \"source\": \"https://github.com/keptn/keptn\"}"
This request will kick off the evaluation of the SLO of the catalogue service over the last 5 minutes. Evaluations can be done in seconds but may also take a while as every SLI provider needs to query each SLI first. This is why the Keptn API will return the keptnContext
, which is basically a token we can use to poll the status of this particular evaluation. The response to the POST request looks like this:
{"keptnContext":"384dae76-2d31-41e6-9204-39f2c1513906","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MDU0NDA4ODl9.OdkhIoJ9KuT4bm7imvEXHdEPjnU0pl5S7DqGibNa924"}
Send a GET request to retrieve the evaluation result:
curl -X GET "https://api.keptn.<IP_ADDRESS>.xip.io/v1/event?keptnContext=KEPTN_CONTEXT_ID&type=sh.keptn.events.evaluation-done" -k -H "accept: application/json" -H "x-token: YOUR_KEPTN_TOKEN"
The result comes in the form of the evaluation-done
event, which is specified here.
The Keptn's bridge gives you insights about everything that is going on inside your Keptn installation, thus, you can also verify the evaluation of the quality gates. By default, the Keptn's bridge is not exposed to the public, but you can expose it via:
kubectl port-forward svc/bridge -n keptn 8080
Open up a brower on http://localhost:8080 and you will be able to inspect all evaluations of the quality gates in the Keptn's bridge.
You can now go ahead and deploy other versions of the application, send some traffic to it and do another evaluation of the quality gates.
For the carts
microservice, there are 3 different versions prepared to use:
You can deploy the different versions by changing it in the manifests/manifest-carts.yaml
and applying the file.
In this tutorial, you have learned how to use Keptn to validate the quality of your deployments.
---
spec_version: "0.1.1"
comparison:
aggregate_function: "avg"
compare_with: "single_result"
include_result_with_score: "pass"
number_of_comparison_results: 1
filter:
objectives:
- sli: "response_time_p95"
key_sli: false
pass: # pass if (relative change <= 10% AND absolute value is < 600ms)
- criteria:
- "<=+10%" # relative values require a prefixed sign (plus or minus)
- "<600" # absolute values only require a logical operator
warning: # if the response time is below 800ms, the result should be a warning
- criteria:
- "<=800"
weight: 1
total_score:
pass: "90%"
warning: "75%"
keptn send event start-evaluation --project=sockshop --stage=hardening --service=carts --timeframe=5m
keptn get event evaluation-done --keptn-context=6cd3e469-cbd3-4f73-xxxx-8b2fb341bb11
curl -X POST "https://api.keptn.<IP_ADDRESS>.xip.io/v1/event" -k -H "accept: application/json" -H "x-token: YOUR_KEPTN_TOKEN" -H "Content-Type: application/json" -d "{ \"data\": { \"end\": \"2019-11-21T11:05:00.000Z\", \"project\": \"sockshop\", \"service\": \"carts\", \"stage\": \"hardening\", \"start\": \"2019-11-21T11:00:00.000Z\", \"teststrategy\": \"manual\" }, \"type\": \"sh.keptn.event.start-evaluation\", \"source\": \"https://github.com/keptn/keptn\"}"
curl -X GET "https://api.keptn.<IP_ADDRESS>.xip.io/v1/event?keptnContext=KEPTN_CONTEXT_ID&type=sh.keptn.events.evaluation-done" -k -H "accept: application/json" -H "x-token: YOUR_KEPTN_TOKEN"


Curved Line
The future of CSS is getting exciting with the arrival of CSS Houdini. Using its Paint API, we can create our custom style implementation.
The browser supports for Paint API is also getting better, and with a polyfill, we can support out more browsers.
CurvedLine (curved-line) is a CSS Houdini implementation to create a custom horizontal line.
You can customize it!
With the help of CSS properties, you can change the shape of the horizontal line.
For example, you can make it dark blue, and more curved:
or, you reduced the curved size, make it to bright pink, and shorten the interval:
or, you can also shorten more the interval to make a diffferent feel with the line:
Further reading:


I am currently a full-time online student in Trilogy's Full Stack Flex bootcamp program, hosted through Georgia Institute of Technology. While I did not have prior experience in web development, I am a highly motivated individual as well as a naturally adept problem-solver; these qualities account for two very important characteristics of any qualified candidate, but are especially critical for a web developer.
I plan to update this website as I progress through the program and will make my projects public once they are completed. In the meantime, feel free to reach out on the Contact page, or connect with me on LinkedIn.


Family of three found dead in Makurdi - The Nation Newspaper
by https://www.facebook.com/CheerfulpraiseUja Emmanuel
The Benue Police Command has confirmed that three bodies, belonging to members of one family have been found in a room in the northbank area of Makurdi, the Benue state capital.
The State Police Public Relations Officer (PPRO), DSP Catherine Anene, who spoke with The Nation on phone, confirmed the incident and said investigation is on to unravel the cause of death. The PPRO also stated that a little girl was found in the room where the dead bodies were discovered completely unhurt but too small to give useful information.
She said that cause of death was still unknown but added that all dead bodies had no physical injuries to warrant an immediate determination of cause of death.
Read Also; Ekiti: Police arrest two bank officials over robbery
She, therefore, appealed to members of the public with useful information on the event to report to the nearest security agencies for necessary action.
“The incident was reported today and when our men rushed to the scene, we discovered three dead bodies: a man, his wife and son,” she said. Some of the neighbours described the deceased family members as “peaceful” and wondered what could have happened.


Halber Mensch [1/2 Mensch / Half Man] (1986) A movie review by Serdar Yegulalp Copyright 1997 by Serdar Yegulalp
CAPSULE: Documentary-cum-music video of the now-legendary cult band Einstuerzende Neubaten's 1986 tour of Japan. Caters more than it informs, unfortunately.
The single most repeated story about Einstuerzende Neubauten, the underground band from Germany who beat on sheet metal and shopping carts to create mutant rock music, is the one about the time they caved in the ceiling of a venue they were playing in. Not by playing too loud, although they were certainly capable of it: they'd used a buzzsaw to cut through the support pillars. The buzzsaw was a staple part of their act. They'd mike it up and use it as an instrument. During one show they used a jackhammer to drill a hole in the rear wall and made their escape that way. This is clearly not a group you want playing your prom, unless you want to assume the clean-up fee.
HALBER MENSCH, directed by the fitfully brilliant Japanese filmmaker Sogo Ishii, is an attempt to weld documentary-style footage with blatantly calculated music-video images. It's marketed (by Atavistic Video) more or less as a music video product: the track names are indexed on the sleeve, and Atavistic is primarily a record company. As a documentary, though, it works in a fairly unorthodox way.
Einstuerzende Neubauten (the name means, to be entirely literal about it, "collapsing buildings from the newer school of architecture") is as unorthodox a band as there probably could be. There are some conventional instruments -- guitar and bass -- but the majority of the sound of the band is made up of metal and plastic objects that are smashed, rubbed, beaten, stroked, and sampled in various ways. The band's live performance, if the above example is any kind of clue, is an experience in itself. HALBER MENSCH does not seem as interested in recreating the experience as it is in using the band's performance as a kind of visual fetish.
The band is not introduced formally at first: they are simply dropped into our laps, playing the droning, eerie "Armenia". The lead singer, Blixa Bargeld, is a scrawny, bug-eyed fellow who seems to have to gather on strength from every sector in his body to howl out the haunting lyrics: "Please let me know... / Are the volcanoes active again?" The lyrics are in German and are not titled, except once briefly in Japanese, and not having them is a big minus to people who don't know the band, since the music, as visceral as it is, also works because of its poetic and angry lyrics.
When we are formally introduced to the band, they don't speak for themselves: we see them in single shots, or walking in a looming landscape, with title cards that explain who they are. Their custom instruments are given similar treatments. The net result feels less like a good documentary and more like a handholding exercise: we're not permitted to really discover the band on our own.
The film works best when it meshes the band's pummeling music to equally powerful visuals. The high point is the song "Z.N.S." (Central Nervous System), which features a crew of Sankai Juku-esque dancers and a good deal of hyperkinetic editing. When we finally get to see the band performing for a real audience, instead of the camera (the filmmaking is so matter-of-fact about the fact that the earlier scenes are such setups that we are allowed to see the camera tracks and the crew), it's almost anticlimactic.
The documentary end of the movie fails in other ways. When we get to see the band setting up, for instance, it's all done in bewildering closeups and snippets of people taping this and miking that. There's no sense of a process, of *how* the work is being done. It's like those movies where they show a character who's allegedly a writer and all we see is him crumpling up one piece of paper after another and throwing them away. How do these people come up with their music? What's their creative process like? Hell, we can't even get a clear idea of how they put their stage act together!
As weak as HALBER MENSCH is as a documentary, it works best as a piece of propulsive eyecandy for people who know the band, or are being introduced to them through another means. Just don't go into it expecting to learn something substantive about one of the few bands on the face of the earth that could use a good documentary.
Two and a half out of four I-beams.
<EMAIL_ADDRESS>EFNet IRC: GinRei http://www.io.com/~syegul another worldly device... you can crush me as I speak/write on rocks what you feel/now feel this truth =smilin' in your face, all the time wanna take your place, the BACKSTABBERS=
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


<choption>
The <choption> element describes an option that a user could choose to accomplish a step of a task. In a user interface, for example, this might be the name of radio button.
Category: Task elements


| Interface | Description |
|---|---|
| ASN1ApplicationSpecificParser |
Interface to parse ASN.1 application specific objects.
|
| ASN1Choice |
Marker interface for CHOICE objects - if you implement this in a role your
own object any attempt to tag the object implicitly will convert the tag to
an explicit one as the encoding rules require.
|
| ASN1Encodable |
Basic interface to produce serialisers for ASN.1 encodings.
|
| ASN1Encoding |
Supported encoding formats.
|
| ASN1OctetStringParser |
A basic parser for an OCTET STRING object
|
| ASN1SequenceParser |
A basic parser for a SEQUENCE object
|
| ASN1SetParser |
A basic parser for a SET object
|
| ASN1String |
General interface implemented by ASN.1 STRING objects.
|
| ASN1TaggedObjectParser | |
| BERTags | |
| DERTags | Deprecated
use BERTags
|
| InMemoryRepresentable |
Interface implemented by objects that can be converted from streaming to in-memory objects.
|
| Class | Description |
|---|---|
| ASN1ApplicationSpecific |
Base class for an application specific object
|
| ASN1BitString |
Base class for BIT STRING objects
|
| ASN1Boolean |
Public facade of ASN.1 Boolean data.
|
| ASN1EncodableVector |
Mutable class for building ASN.1 constructed objects.
|
| ASN1Enumerated |
Class representing the ASN.1 ENUMERATED type.
|
| ASN1GeneralizedTime |
Base class representing the ASN.1 GeneralizedTime type.
|
| ASN1Generator | |
| ASN1InputStream |
a general purpose ASN.1 decoder - note: this class differs from the
others in that it returns null after it has read the last object in
the stream.
|
| ASN1Integer |
Class representing the ASN.1 INTEGER type.
|
| ASN1Null |
A NULL object - use DERNull.INSTANCE for populating structures.
|
| ASN1Object |
Base class for defining an ASN.1 object.
|
| ASN1ObjectIdentifier |
Class representing the ASN.1 OBJECT IDENTIFIER type.
|
| ASN1OctetString |
Abstract base for the ASN.1 OCTET STRING data type
This supports BER, and DER forms of the data.
|
| ASN1OutputStream |
Stream that produces output based on the default encoding for the passed in objects.
|
| ASN1Primitive |
Base class for ASN.1 primitive objects.
|
| ASN1Sequence |
ASN.1
SEQUENCE and SEQUENCE OF constructs. |
| ASN1Set |
ASN.1
SET and SET OF constructs. |
| ASN1StreamParser |
A parser for ASN.1 streams which also returns, where possible, parsers for the objects it encounters.
|
| ASN1TaggedObject |
ASN.1 TaggedObject - in ASN.1 notation this is any object preceded by
a [n] where n is some number - these are assumed to follow the construction
rules (as with sequences).
|
| ASN1UTCTime |
- * UTC time object.
|
| BERApplicationSpecific |
An indefinite-length encoding version of an application specific object.
|
| BERApplicationSpecificParser |
A parser for indefinite-length application specific objects.
|
| BERConstructedOctetString | Deprecated
use BEROctetString
|
| BERGenerator |
Base class for generators for indefinite-length structures.
|
| BEROctetString | |
| BEROctetStringGenerator | |
| BEROctetStringParser | |
| BEROutputStream | |
| BERSequence |
Carrier class for an indefinite-length SEQUENCE.
|
| BERSequenceGenerator |
A stream generator for DER SEQUENCEs
|
| BERSequenceParser |
Parser for indefinite-length SEQUENCEs.
|
| BERSet |
Carrier class for an indefinite-length SET.
|
| BERSetParser |
Parser for indefinite-length SETs.
|
| BERTaggedObject |
BER TaggedObject - in ASN.1 notation this is any object preceded by
a [n] where n is some number - these are assumed to follow the construction
rules (as with sequences).
|
| BERTaggedObjectParser |
Parser for indefinite-length tagged objects.
|
| DERApplicationSpecific |
A DER encoding version of an application specific object.
|
| DERBitString |
A BIT STRING with DER encoding.
|
| DERBMPString |
Carrier class for DER encoding BMPString object.
|
| DERBoolean | Deprecated
use ASN1Boolean
|
| DEREncodableVector |
a general class for building up a vector of DER encodable objects -
this will eventually be superseded by ASN1EncodableVector so you should
use that class in preference.
|
| DEREnumerated | Deprecated
Use ASN1Enumerated instead of this.
|
| DERExternal |
Class representing the DER-type External
|
| DERExternalParser |
Parser DER EXTERNAL tagged objects.
|
| DERGeneralizedTime |
DER Generalized time object.
|
| DERGeneralString |
Carrier class for a DER encoding GeneralString
|
| DERGenerator |
Basic class for streaming DER encoding generators.
|
| DERGraphicString | |
| DERIA5String |
DER IA5String object - this is an ascii string.
|
| DERInteger | Deprecated
Use ASN1Integer instead of this,
|
| DERNull |
A NULL object.
|
| DERNumericString |
DER NumericString object - this is an ascii string of characters {0,1,2,3,4,5,6,7,8,9, }.
|
| DERObjectIdentifier | Deprecated
Use ASN1ObjectIdentifier instead of this,
|
| DEROctetString |
Carrier class for a DER encoding OCTET STRING
|
| DEROctetStringParser |
Parse for DER encoded OCTET STRINGS
|
| DEROutputStream |
Stream that outputs encoding based on distinguished encoding rules.
|
| DERPrintableString |
DER PrintableString object.
|
| DERSequence | |
| DERSequenceGenerator |
A stream generator for DER SEQUENCEs
|
| DERSequenceParser | |
| DERSet |
A DER encoded set object
|
| DERSetParser | |
| DERT61String |
DER T61String (also the teletex string), try not to use this if you don't need to.
|
| DERT61UTF8String | Deprecated
don't use this class, introduced in error, it will be removed.
|
| DERTaggedObject |
DER TaggedObject - in ASN.1 notation this is any object preceded by
a [n] where n is some number - these are assumed to follow the construction
rules (as with sequences).
|
| DERUniversalString |
DER UniversalString object.
|
| DERUTCTime |
DER UTC time object.
|
| DERUTF8String |
DER UTF8String object.
|
| DERVideotexString | |
| DERVisibleString |
DER VisibleString object encoding ISO 646 (ASCII) character code points 32 to 126.
|
| DLBitString |
A Definite length BIT STRING
|
| DLOutputStream |
Stream that outputs encoding based on definite length.
|
| DLSequence |
The DLSequence encodes a SEQUENCE using definite length form.
|
| DLSet |
The DLSet encodes ASN.1 SET value without element ordering,
and always using definite length form.
|
| DLTaggedObject |
Definite Length TaggedObject - in ASN.1 notation this is any object preceded by
a [n] where n is some number - these are assumed to follow the construction
rules (as with sequences).
|
| OIDTokenizer |
Class for breaking up an OID into it's component tokens, ala
java.util.StringTokenizer.
|
| Exception | Description |
|---|---|
| ASN1Exception | |
| ASN1ParsingException |


Start/Join a chat room
Room:
Nickname:
Create/Join Room
Chat
Type messages here (press Enter to send)


Receive SQL Server notifications on record table change with C#
Source code available at https://github.com/christiandelbianco/Monitor-table-change-with-WPF-WCF-sqltabledependency.
This example show how to keep up to date a grid containing some stocks data.
That grid has been automatically updated whenever a record change using SQL Server notifications.
This notification contains new values for the modified table record change.
Source code available at https://github.com/christiandelbianco/monitor-table-change-with-mvc-signalR-knockoutjs-sqltabledependency.
This example show how to refresh client web browsers used to book flight tickets.
Those terminals have to be update as soon as the availability change and the Web application must take the initiative of sending this information to clients instead of waiting for the client to request it.
Detect record table changes: Last edit on 22 July 2017 by Christian Del Bianco
For more info on monitor table record changes see SqlTableDependency's GitHub project site.


The lean live
command supports the following options:
| Option | Description |
|---|---|
--environment <value> |
The name of the environment in the Lean configuration file to use. |
--output <path> |
Directory to store results in (defaults to <project>/live/<timestamp> ). |
--brokerage <value> |
The brokerage to use when running in non-interactive mode. |
--data-feed <value> |
The data feed to use when running in non-interactive mode. |
--ib-user-name <value> |
Your Interactive Brokers username. |
--ib-account <value> |
Your Interactive Brokers account id. |
--ib-password <value> |
Your Interactive Brokers password. |
--ib-enable-delayed-streaming-data <boolean> |
Whether delayed data may be used when your algorithm subscribes to a security you don't have a market data subscription for. |
--tradier-account-id <value> |
Your Tradier account id. |
--tradier-access-token <value> |
Your Tradier access token. |
--tradier-use-sandbox <boolean> |
Whether the developer sandbox should be used. |
--oanda-account-id <value> |
Your OANDA account id. |
--oanda-access-token <value> |
Your OANDA API token. |
--oanda-environment <value> |
Practice if you want to trade on fxTrade Practice, or Trade if you want to trade on fxTrade. |
--bitfinex-api-key <value> |
Your Bitfinex API key. |
--bitfinex-api-secret <value> |
Your Bitfinex API secret. |
--gdax-api-key <value> |
Your Coinbase Pro API key. |
--gdax-api-secret <value> |
Your Coinbase Pro API secret. |
--gdax-passphrase <value> |
Your Coinbase Pro API passphrase. |
--binance-api-key <value> |
Your Binance API key. |
--binance-api-secret <value> |
Your Binance API secret. |
--zerodha-api-key <value> |
Your Kite Connect API key. |
--zerodha-access-token <value> |
Your Zerodha access token. |
--zerodha-product-type <value> |
The product type, which must be MIS if you are targeting intraday products, CNC if you are targeting delivery products, or NRML if you are targeting carry forward products. |
--zerodha-trading-segment <value> |
The trading segment, which must be EQUITY if you are trading equities on NSE or BSE, or COMMODITY if you are trading commodities on MCX. |
--zerodha-history-subscription <boolean> |
Whether you have a history API subscription for Zerodha. |
--iqfeed-iqconnect <path> |
The path to your IQConnect binary. |
--iqfeed-username <value> |
Your IQFeed username. |
--iqfeed-password <value> |
Your IQFeed password. |
--iqfeed-product-name <value> |
The product name of your IQFeed developer account. |
--iqfeed-version <value> |
The product version of your IQFeed developer account. |
--image <value> |
The LEAN engine image to use (defaults to quantconnect/lean:latest ). |
--update |
Pull the LEAN engine image before starting live trading. |
--lean-config <path> |
The Lean configuration file that should be used (defaults to the nearest lean.json file). |
--verbose |
Enable debug logging. |
--help |
Display the help text of the lean live command and exit. |


--- layout: page title: About ---
Currently, Candidate for Masters in Computer Science at Northeastern University
If you want to get in touch, send an email


The F770 is the flagship 1 and 2 channel dashcam from Thinkware that improves upon the F750 with a dramatic redesign of the body. The matte black body is smaller and more discreet than ever before while nighttime video quality has also improved.
This is one of the sleekest Full HD/Full HD systems on the market and it records at a considerably higher bitrate than its competition thanks to a high end Ambarella processor. An excellent parking mode function is available with voltage and timer cutoff features if the hardwiring kit is chosen.
| Quantity: | |
| Add to Cart |
| Item Weight: | 1.7 pounds |
| Product Dimensions: | 7.7 x 6.6 x 4.5 inches |
| Wireless Remote: | No |


437. Path Sum IIIPosted by Tim Ho on April 20, 2017 : LeetCode LeetCode-Easy |
35. Search Insert PositionPosted by Tim Ho on April 19, 2017 : LeetCode LeetCode-Easy |
83. Remove Duplicates from Sorted ListPosted by Tim Ho on April 19, 2017 : LeetCode LeetCode-Easy |
231. Power of twoPosted by Tim Ho on April 18, 2017 : LeetCode LeetCode-Easy |
231. Power of threePosted by Tim Ho on April 18, 2017 : LeetCode LeetCode-Easy |


OLYMPIA - Components
Buttons
White button
Grey button
Blue button
Orange button
Button - Sizes
Large button
Large button
Default button
Default button
Small button
Small button
Extra small button
Extra small button
Images
Rounded
Circle
Thumbnail
Forms
Email address
Password
File input
Example block-level help text here.
Check me out
Submit
Form - Inline
Email address
Password
Remember me
Sign in
Navigation Tabs
Navigation Tab 1
Navigation Tab 2
Navigation Tab 3
Navigation Tab 4
Modal - Popup
Launch demo modal
×
Modal title
Hello I am the modal Body ;)


Functionality
This is a simple news feed API.
The functionality includes retrieval of news feed
in all categories,selected ones,or a particular article in detail.
Author
Glen S Abraham
<EMAIL_ADDRESS>Usage
- /api/news_feed
- Fetches all the available news in the order of latest first
- /api/news_feed/id
- Returns the descreptive view of a particular news article
- /api/news_feed/?cat=#category#
- Fetches specific news belonging to a category in the order of latest first
- Categories
- BR-'Breaking'
IN-'International'
NT-'National'
ST-'State'
DT-'District'
LC-'Local'
CL-'Classified'
TC-'Technology'
SP-'Sports'.
(The parameters are case insensitive)
Ex /api/news_feed/?cat=nt


Search
Add the word you want
learn moreIt is a web application for music recognition or any particular sound. The application recognizes the audio and lyrics of any song that the user wants to search, in seconds the user will have the name of the song and its description and links to listen to this song through music platforms. It will also have a list of similar songs according to what the user is looking for
learn moreAdd the word you want
learn moreYou get the song
learn moreMusic platforms
learn moreThis project inspired us to do it because after a time where the ideas were running out and it wasn't viable to take other of our ideas to develop, it cost us a lot of time and personally we couldn't cope with making a large scale project like a 2D video game. we vindicate ourselves, we investigate more deeply what idea can be consumable and can cover a need in the market, we choose to realize this idea that has simple sight seems simple but it was not so thanks to the fact that we had to learn new technologies
but that helped us too much to understand the creation of a web application, to optimize more our code and that it does not have bugs at the moment of realizing the requests. In addition, I want to thank Holberton school for giving us their space to develop our project and for helping us learn new technologies in such a short time, also to meet new people who with their knowledge and experience helped us to have passion for this world of programming.


Welcome to Puma
6: Sunflower.
Puma
6 brings performance improvements for most applications, experimental Rack
3 support, support for Sidekiq 7 Capsules, and more.
Here's what you should do:
- Review the Upgrade section below to look for breaking changes that could affect you.
- Upgrade to version 6.0 in your Gemfile and deploy.
- Open up a new bug issue if you find any problems.
- Join us in building Puma! We welcome first-timers. See CONTRIBUTING.md.
For a complete list of changes, see History.md.
What's New
Puma
6 is mostly about a few nice-to-have performance changes, and then a few breaking API changes we've been putting off for a while.
Improved Performance
We've improved throughput and latency in Puma
6 in a few areas.
- Large chunked response body throughput 3-10x higher Chunked response bodies >100kb should be 3 to 10 times faster than in
Puma
5. String response bodies should be ~10% faster. - File response throughput is 3x higher. File responses (e.g. assets) should be about 3x faster.
- wait_for_less_busy_worker is now default, meaning lower latencies for high-utilization servers
wait_for_less_busy_worker
was an experimental feature inPuma
5 and it's now the default inPuma
6. This feature makes eachPuma
child worker in cluster mode wait before listening on the socket, and that wait time is proportional to N *number_of_threads_responding_to_requests
. This means that it's more likely that a request is picked up by the least-loadedPuma
child worker listening on the socket. Many users reported back that this option was stable and decreased average latency, particularly in environments with high load and utilization.
Experimental Rack 3 Support
[Rack 3 is now out]) and we've started on Rack
3 support. Please open a bug if you find any incompatibilites.
Sidekiq 7 Capsules
Sidekiq 7 (releasing soon) introduces Capsules, which allows you to run a Sidekiq server inside your Puma
server (or any other Ruby process for that matter). We've added support by allowing you to pass data into run_hooks
, see issue #2915.
Upgrade
Check the following list to see if you're depending on any of these behaviors:
- Configuration constants like
DefaultRackup
removed, see #2928 for the full list. - We have changed the names of the following environment variables:
DISABLE_SSL
is nowPUMA_DISABLE_SSL
,MAKE_WARNINGS_INTO_ERRORS
is nowPUMA_MAKE_WARNINGS_INTO_ERRORS
, andWAIT_FOR_LESS_BUSY_WORKERS
is nowPUMA_WAIT_FOR_LESS_BUSY_WORKERS
. - Nakayoshi GC (
nakayoshi_fork
option in config) has been removed without replacement. wait_for_less_busy_worker
is now on by default. If you don't want to use this feature, you must addwait_for_less_busy_worker false
in your config.- We've removed the following public methods on Puma::Server: Puma::Server#min_threads, Puma::Server#max_threads. Instead, you can pass in configuration as an option to Puma::Server#new. This might make certain gems break (
capybara
for example). - We've removed the following constants:
Puma::StateFile::FIELDS
,Puma::CLI::KEYS_NOT_TO_PERSIST_IN_STATE
andPuma::Launcher::KEYS_NOT_TO_PERSIST_IN_STATE
, andPuma::ControlCLI::COMMANDS
. - We no longer support Ruby 2.2, 2.3, or JRuby on Java 1.7 or below.
- The behavior of
remote_addr
has changed. When using the set_remote_address header: "header_name" functionality, if the header is not passed, REMOTE_ADDR is now set to the physical peeraddr instead of always being set to <IP_ADDRESS>. When an error occurs preventing the physical peeraddr from being fetched, REMOTE_ADDR is now set to the unspecified source address ('<IP_ADDRESS>') instead of to '<IP_ADDRESS>' - Previously,
Puma
supported anything as an HTTP method and passed it to the app. We now only accept the following 8 HTTP methods, based on RFC 9110, section 9.1. The IANA HTTP Method Registry contains a full list of HTTP methods.HEAD GET POST PUT DELETE OPTIONS TRACE PATCH
As of Puma 6.2, these can be overridden bysupported_http_methods
in your config file, see Puma::DSL#supported_http_methods.
Then, update your Gemfile:
gem 'puma', '< 7'