Studying Setup
Choose which grades of flashcard you will study (you are least familiar with 1 star cards and most familiar with 5 star cards.) Use the Control key to select multiple items on computers.
Finished Studying
Done Study againUse this tool to create many flashcards at once. On each line, enter a question and answer separated by some character (this is the entry style). Each line will be converted into a flashcard.
To make a multiple-choice flashcard, separate each answer choice with "|" and put a "*" in front of the right choice. You can have as many choices as you want, but only one can be right.
Free-response examples
- 2+2: 4
- Color of the sky - Blue
Multiple-choice examples
- 3+3 / 4|5|*6|7
- Color of the sun - *Yellow|Pink|Green
You can export these flashcards to your device as a backup or so you can use them with other apps.
First you'll need to choose a format. Comma/slash/enter-separated are good for storing your flashcards, while other apps may use XML or JSON.
Your code is below. Copy and save it into [some filename]..
Here, you can organize your decks into groups. To move a deck to a group, drag the deck name underneath the group name. Your changes are automatically saved.
Sync's already set up on this device - your passcode is .
- If you want to manually send your flashcards from this device to your other devices, press Upload. (Your flashcards are also automatically uploaded whenever you make changes.)
- If you have flashcards on your other devices and want to get them on this device too, press Download.
You haven't set up sync yet on this device.
- If you have flashcards on another device, enter your passcode below.
- If you have never synced before or have no cards on your other devices, create a unique, 3- or 4-word passcode and enter it below.
Passcode hints
- twenty thousand leagues
- philadelphia phillies phan
- swashbuckling penguin ghosts
Privacy
All your data is stored securely in the cloud. It's totally anonymous - the only identifying information we store is your passcode.
We'll never give your information to someone else unless you approve it.
I'm always eager to hear from you, the user, to improve Cabra. Feel free to email me with questions, comments, or suggestions at . Or try one of these social networks:
Cabra Flashcards
Version ""
Released
Copyright © Neel Mehta 2011-.
Cabra is a free, open-source studying app designed to help anyone, anywhere improve their education.
This app is officially called Cabra Mobile and is the web/mobile/phone/tablet edition of the studying platform Cabra (that's Spanish for goat, if you're wondering). For advertising purposes, it is known as Cabra Flashcards. Internally, it is called Chevre (that's French for goat).
Thanks to the following software that Cabra uses: jQuery, Bootstrap, HTML5 Boilerplate PhoneGap, SugarJS, Cobra, jqPlot, Glyphicons, Aptana Studio, Mozilla Firefox, and Quizlet.
Changes in this version:
-
Themes
Support development and make Cabra look awesome.
-
Stats
Take an in-depth look at your studying.
Want to study on your other devices? Get the Cabra app for all your favorite platforms, including:
Welcome to Cabra Flashcards!
Cabra is the ultimate studying app, hand-crafted to help you learn anything, anywhere – for free!
Hi and welcome to Cabra! Start studying with Cabra now – it's always free – and:
- Create and study flashcards on any topic imaginable – and then some
- Download flashcards from our database of over 20 million sets
- Sync your flashcards effortlessly between your phone, tablet, and computer
- Turbocharge your education with Cabra's powerful smart-studying algorithm
Cabra has been updated!
Version ""
Congrats – Cabra has automatically been updated to the latest and greatest version! Here's what's new and improved:
Importer help
Find over 20 million flashcard sets on Quizlet and import them seamlessly. Just enter some keywords in the box and hit Search.


WeWork says to layoff 2,400 employees globally
WeWork said on Thursday it is laying off around 2,400 employees globally, as the office-sharing company seeks to drastically cut costs and stabilize its business after it transformed from being a Wall Street darling into a pariah in a matter of weeks.
NEW YORK: WeWork said on Thursday it is laying off around 2,400 employees globally, as the office-sharing company seeks to drastically cut costs and stabilize its business after it transformed from being a Wall Street darling into a pariah in a matter of weeks.
"As part of our renewed focus on the core WeWork business, and as we have previously shared with employees, the company is making necessary layoffs to create a more efficient organization," a company spokeswoman said in a statement.
"This workforce reduction affects approximately 2,400 employees globally, who will receive severance, continued benefits, and other forms of assistance to aid in their career transition," the New York-based company added.
(Reporting by Joshua Franklin in New York; Editing by Marguerita Choy)


This utility convert USB ID's to the usb4j ClassID readable XML. The ClassID XML is simple database that defines human-recognizable label for class, subclass, vendor, product or else for USB device. IDS file is destributed in linux-usb.org.
ClassID


NB is a web-based forum that lets you collaborate on top of any PDF document. If you have questions about NB, please visit our FAQ and our forum.
Readers and Students...
Navigating across a PDF and its discussions
Use your mouse or the ← and → keys to move from discussion to discussion.
Use your mouse or the ↑ and ↓ keys to scroll up and down the document.
Authoring Posts
Drag you mouse across any region on the pdf to create a new discussion on top of that region
To post a reply: Click on the Reply link right next to the comment that you wish to reply to, or right-click on that comment and choose "Reply" from the context menu.


Hi! I'm Stephen 'Stevo' DeBaun, the Managing Director of the Sparks.Network and lead consultant on this project.


On the following pages you will be asked 10 questions about terrorist financing.
You will be asked multiple choice questions. Answer each question by clicking the button to the left of the most appropriate response.
After you answered each question, you will not be able to amend your answer for that session.
Please note that if you exit the quiz before completing the quiz, then your answers will not be saved.
To move between questions, use the ► navigation button on the bottom right of the page.


Differential equations are the most important part in modeling physical systems. And they are very abstracted, and really difficult to think about how they really works. Even though we might be able to solve them without knowing what they really are, or how they are describing the world. So I made this app to help you imagine what the first order linear differential equations are by plotting their slope fields (isoclines). The solution to the slope field is the one that follow the slope line. There are x and y in the control panel, and these are the initial conditions of the differential equation. Play around with parameters and see how each of them affect the equation curve(yellow graph). I will explain more on that on my blog Foundational Understanding
I will add more visualizations later on this page


Web apps are using the extension system via bookmark apps, see chrome://extensions-internals for bookmark app details.
Enable BMO via chrome://flags/#enable-desktop-pwas-without-extensions.
[[item.debugInfo]]
No debugging info available! Please enable chrome://flags/#record-web-app-debug-info.
chrome://flags/#record-web-app-debug-info flag is enabled, debugging info is being captured.
Is start up task complete (also required for debug info): [[preinstalledWebAppDebugInfo_.isStartUpTaskComplete]]
[[item]]
[[item.config]]
[[externallyInstalledWebAppPrefs_]]


Our company offers a variety of services to meet your project’s needs, to take you from collaboration meetings all the way to ribbon-cutting and beyond. We believe that every project is unique, and can customize our approach to fit your particular project. While we are aiming to be at the forefront of and specialize in design-build, we are very familiar with a number of delivery methods and are confident we can find the process that will best help you meet your goals.
Construction being the primary obligation of Levelbase Construction Company, we make sure that we do it the best.Constructions will be undertaken in the area of building and road constructions .We assure you that the construction process we undertake and the end result will stick to the budget you suggest and we are convenient to work with.
As a construction company we are bound to design all kinds of construction needs and we excel in these. We design multi storied buildings and infrastructure, highways, pre-feb/ engineered building and many more.We concentrate on essentially on the satisfaction of our customers and quality is the principal of Levelbase Construction Company. Unique and distinct designs created and owned by the company in the construction industry is what leads us to the goal of success.
Levelbase Construction Company also focuses on the supply of Construction materials,equipment and spare parts, mining equipment and spare parts.
Levelbase Construction Company has developed a comprehensive Safety
Program through consultation with Safety Experts,Insurance Agents and our own past experience. This program was designed to protect all of our
employees, the subcontracted work force,inspectors, owner’s representatives, project
visitors and the existing neighborhood.


Hi! My name is Brad and I am a self-taught front end developer based near London. I particularly relish working with Javascript and React.js. I consider myself an 'eternal student' and enjoy expanding my knowledge and challenging myself with new goals.
I decided to learn about coding while I was working on my Maths degree. I specifically remember turning to reddit for new hobby inspiration and seeing coding suggested. I followed Freecodecamp's front end curriculum to start with and after much dabbling, I decided I wanted to make it my career. I finished my degree and knuckled down, working hard to hone my skills and expand my knowledge base. Coding appeals to my enjoyment of a mental challenge and provides endless opportunities to learn.
I want to work as a front end developer, but within that scope (Javascript pun intended) I'm open to pretty much anything! My favourite part is working with Javascript which offers great power to solve many problems. I've also started branching out into the back end learning Node.js, Express.js and MongoDB. It would be very cool to end up as full stack developer and being able jump around the stack to keep things fresh and varied.
Buy credits. Send email surveys. Get feedback, fast.
A marketing website for Workind Training, an organisation that trains practitioners to provide mental health first aid.
A Tic-Tac-Toe game made with React and Material-UI.
This tool uses Clarifai's face recognition API to find faces in submitted URLS.


Given an integer number N
Your task is to write a function that prints to the standard output (stdout) the numbers from 1 to N (one per line) with the following restrictions
Note that your function will receive the following arguments n which is the integer number described above
Data constraints: the maximum value of N will not exceed 1000
Efficiency constraints: your function is expected to print the result in less than 2 seconds
See console.


|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
public interface GammaTxnFactoryBuilder
A TxnFactoryBuilder
tailored for the GammaStm
.
| Method Summary | |
|---|---|
GammaTxnFactoryBuilder |
addPermanentListener(TxnListener listener)
Adds a permanent Txn TxnListener . |
GammaTxnConfig |
getConfig()
Returns the TxnConfig used by this TxnFactoryBuilder. |
GammaTxnFactory |
newTransactionFactory()
Builds a new TxnFactory . |
GammaTxnExecutor |
newTxnExecutor()
Builds a new TxnExecutor optimized for executing transactions created by this TxnFactoryBuilder. |
GammaTxnFactoryBuilder |
setBackoffPolicy(BackoffPolicy backoffPolicy)
Sets the Txn BackoffPolicy . |
GammaTxnFactoryBuilder |
setBlockingAllowed(boolean blockingAllowed)
Sets if the Txn is allowed to do an explicit retry (needed for a blocking operation). |
GammaTxnFactoryBuilder |
setControlFlowErrorsReused(boolean reused)
Sets if the ControlFlowError is reused. |
GammaTxnFactoryBuilder |
setDirtyCheckEnabled(boolean dirtyCheckEnabled)
Sets if the Txn dirty check is enabled. |
GammaTxnFactoryBuilder |
setFamilyName(String familyName)
Sets the Txn familyname. |
GammaTxnFactoryBuilder |
setFat()
|
GammaTxnFactoryBuilder |
setInterruptible(boolean interruptible)
Sets if the Txn can be interrupted while doing blocking operations. |
GammaTxnFactoryBuilder |
setIsolationLevel(IsolationLevel isolationLevel)
Sets the IsolationLevel on the Txn . |
GammaTxnFactoryBuilder |
setMaxRetries(int maxRetries)
Sets the the maximum count a Txn can be retried. |
GammaTxnFactoryBuilder |
setPropagationLevel(PropagationLevel propagationLevel)
Sets the PropagationLevel used. |
GammaTxnFactoryBuilder |
setReadLockMode(LockMode lockMode)
Sets the Txn LockMode for all reads. |
GammaTxnFactoryBuilder |
setReadonly(boolean readonly)
Sets the readonly property on a Txn . |
GammaTxnFactoryBuilder |
setReadTrackingEnabled(boolean enabled)
Sets if the Txn should automatically track all reads that have been done. |
GammaTxnFactoryBuilder |
setSpeculative(boolean enabled)
With the speculative configuration enabled, the Stm is allowed to determine optimal settings for
a Txn . |
GammaTxnFactoryBuilder |
setSpinCount(int spinCount)
Sets the maximum number of spins that are allowed when a Txn can't be read/written/locked
because it is locked by another transaction. |
GammaTxnFactoryBuilder |
setTimeoutNs(long timeoutNs)
Sets the timeout (the maximum time a Txn is allowed to block. |
GammaTxnFactoryBuilder |
setTraceLevel(TraceLevel traceLevel)
Sets the Txn TraceLevel . |
GammaTxnFactoryBuilder |
setWriteLockMode(LockMode lockMode)
Sets the Txn LockMode for all writes. |
| Method Detail |
|---|
GammaTxnConfig getConfig()
TxnFactoryBuilder
TxnConfig
used by this TxnFactoryBuilder.
getConfig
in interface TxnFactoryBuilder
GammaTxnFactoryBuilder setFat()
GammaTxnFactoryBuilder setControlFlowErrorsReused(boolean reused)
TxnFactoryBuilder
ControlFlowError
is reused. Normally you don't want to reuse them
because they can be expensive to create (especially the stacktrace) and they could be created very often. But for
debugging purposes it can be quite annoying because you want to see the stacktrace.
setControlFlowErrorsReused
in interface TxnFactoryBuilder
reused
- true if ControlFlowErrors should be reused.
TxnConfig.isControlFlowErrorsReused()
GammaTxnFactoryBuilder setReadLockMode(LockMode lockMode)
TxnFactoryBuilder
Txn
LockMode
for all reads. If a LockMode is set higher than LockMode.None
, this transaction
will locks all reads (and writes since a read is needed for a write) and the transaction automatically becomes
serialized.
setReadLockMode
in interface TxnFactoryBuilder
lockMode
- the LockMode to set.
TxnConfig.getReadLockMode()
,
LockMode
GammaTxnFactoryBuilder setWriteLockMode(LockMode lockMode)
TxnFactoryBuilder
Txn
LockMode
for all writes. For a write, always a read needs to be done, so if the read LockMode is
Freshly constructed objects that are not committed, automatically are locked with LockMode.Exclusive
.
If the write LockMode is set after the read LockMode and the write LockMode is lower than the read LockMode,
an IllegalTxnFactoryException
will be thrown when a TxnFactory
is created.
If the write LockMode is set before the read LockMode and the write LockMode is lower than the read LockMode, the write LockMode automatically is upgraded to that of the read LockMode. This makes setting the readLock mode less of a nuisance.
setWriteLockMode
in interface TxnFactoryBuilder
lockMode
- the LockMode to set.
TxnConfig.getWriteLockMode()
,
LockMode
GammaTxnFactoryBuilder setFamilyName(String familyName)
TxnFactoryBuilder
Txn
familyname. If an TxnExecutor
is used inside a method, a useful familyname could
be the full name of the class and the method.
The transaction familyName is useful debugging purposes, but has not other meaning.
setFamilyName
in interface TxnFactoryBuilder
familyName
- the familyName of the transaction.
TxnConfig.getFamilyName()
GammaTxnFactoryBuilder setPropagationLevel(PropagationLevel propagationLevel)
TxnFactoryBuilder
PropagationLevel
used. With the PropagationLevel you have control
on how the transaction deals with transaction nesting. The default is PropagationLevel.Requires
which automatically starts a transaction is one is missing, or lifts on a transaction if available.
setPropagationLevel
in interface TxnFactoryBuilder
propagationLevel
- the new PropagationLevel
TxnConfig.getPropagationLevel()
,
PropagationLevel
GammaTxnFactoryBuilder addPermanentListener(TxnListener listener)
TxnFactoryBuilder
Txn
TxnListener
. All permanent listeners are always executed after all normal
listeners are executed. If the same listener is added multiple times, it will be executed multiple times.
This method is very useful for integrating Multiverse in other JVM based environments because with this
approach you have a callback when transaction aborts/commit and can add your own logic. See the
TxnListener
for more information about normal vs permanent listeners.
addPermanentListener
in interface TxnFactoryBuilder
listener
- the permanent listener to add.
TxnConfig.getPermanentListeners()
GammaTxnFactoryBuilder setTraceLevel(TraceLevel traceLevel)
TxnFactoryBuilder
Txn
TraceLevel
. With tracing it is possible to see what is happening inside a transaction.
setTraceLevel
in interface TxnFactoryBuilder
traceLevel
- the new traceLevel.
TxnConfig.getTraceLevel()
,
TraceLevel
GammaTxnFactoryBuilder setTimeoutNs(long timeoutNs)
TxnFactoryBuilder
Txn
is allowed to block. Long.MAX_VALUE indicates that an
unbound timeout should be used.
setTimeoutNs
in interface TxnFactoryBuilder
timeoutNs
- the timeout specified in nano seconds
TxnConfig.getTimeoutNs()
,
Txn.getRemainingTimeoutNs()
GammaTxnFactoryBuilder setInterruptible(boolean interruptible)
TxnFactoryBuilder
Txn
can be interrupted while doing blocking operations.
setInterruptible
in interface TxnFactoryBuilder
interruptible
- if the transaction can be interrupted while doing blocking operations.
TxnConfig.isInterruptible()
GammaTxnFactoryBuilder setBackoffPolicy(BackoffPolicy backoffPolicy)
TxnFactoryBuilder
Txn
BackoffPolicy
. Policy is used to backoff when a transaction conflicts with another Txn
.
See the BackoffPolicy
for more information.
setBackoffPolicy
in interface TxnFactoryBuilder
backoffPolicy
- the backoff policy to use.
TxnConfig.getBackoffPolicy()
GammaTxnFactoryBuilder setDirtyCheckEnabled(boolean dirtyCheckEnabled)
TxnFactoryBuilder
Txn
dirty check is enabled. Dirty check is that something only needs to be written,
if there really is a change (else it will be interpreted as a read). If it is disabled, it will always write, and
this could prevent the aba isolation anomaly, but causes more conflicts so more contention. In most cases enabling
it is the best option.
setDirtyCheckEnabled
in interface TxnFactoryBuilder
dirtyCheckEnabled
- true if dirty check should be executed, false otherwise.
TxnConfig.isDirtyCheckEnabled()
GammaTxnFactoryBuilder setSpinCount(int spinCount)
TxnFactoryBuilder
Txn
can't be read/written/locked
because it is locked by another transaction.
Setting the value to a very high value, could lead to more an increased chance of a live locking.
setSpinCount
in interface TxnFactoryBuilder
spinCount
- the maximum number of spins
TxnConfig.getSpinCount()
GammaTxnFactoryBuilder setReadonly(boolean readonly)
TxnFactoryBuilder
Txn
. If a transaction is configured as readonly, no write operations
(also no construction of new transactional objects making use of that transaction) is allowed
setReadonly
in interface TxnFactoryBuilder
readonly
- true if the transaction should be readonly, false otherwise.
TxnConfig.isReadonly()
GammaTxnFactoryBuilder setReadTrackingEnabled(boolean enabled)
TxnFactoryBuilder
Txn
should automatically track all reads that have been done. This is needed for blocking
operations, but also for other features like writeskew detection.
Tracking reads puts more pressure on the transaction since it needs to store all reads, but it reduces the chance of read conflicts, since once read from main memory, it can be retrieved from the transaction. The transaction is free to track reads even though this property is disabled.
setReadTrackingEnabled
in interface TxnFactoryBuilder
enabled
- true if read tracking enabled, false otherwise.
TxnConfig.isReadTrackingEnabled()
GammaTxnFactoryBuilder setSpeculative(boolean enabled)
TxnFactoryBuilder
Stm
is allowed to determine optimal settings for
a Txn
.
Some behavior like readonly or the need for tracking reads can be determined runtime. The system can start with a readonly non readtracking transaction and upgrade to an update or a read tracking once a write or retry happens.
It depends on the Stm
implementation on which properties it is going to speculate.
Enabling it can cause a few unexpected 'retries' of transactions, but it can seriously improve performance.
setSpeculative
in interface TxnFactoryBuilder
enabled
- indicates if speculative configuration should be enabled.
TxnConfig.isSpeculative()
GammaTxnFactoryBuilder setMaxRetries(int maxRetries)
TxnFactoryBuilder
Txn
can be retried. The default is 1000. Setting it to a very low value
could mean that a transaction can't complete. Setting it to a very high value could lead to live-locking.
If the speculative configuration mechanism is enabled (TxnFactoryBuilder.setSpeculative(boolean)
), a few retries
are done in the beginning to figure out the best settings.
setMaxRetries
in interface TxnFactoryBuilder
maxRetries
- the maximum number of times a transaction can be tried.
TxnConfig.getMaxRetries()
GammaTxnFactoryBuilder setIsolationLevel(IsolationLevel isolationLevel)
TxnFactoryBuilder
IsolationLevel
on the Txn
.
The Txn
is free to upgraded to a higher IsolationLevel
. This is essentially the same
behavior you get when Oracle is used, where a read uncommitted is upgraded to a read committed and a repeatable
read is upgraded to the Oracle version of serialized (so with the writeskew problem still there).
setIsolationLevel
in interface TxnFactoryBuilder
isolationLevel
- the new IsolationLevel
TxnConfig.getIsolationLevel()
,
IsolationLevel
GammaTxnFactoryBuilder setBlockingAllowed(boolean blockingAllowed)
TxnFactoryBuilder
Txn
is allowed to do an explicit retry (needed for a blocking operation). One use case
for disallowing it, it when the transaction is used inside an actor, and you don't want that inside the logic
executed by the agent a blocking operations is done (e.g. taking an item of a blocking queue).
setBlockingAllowed
in interface TxnFactoryBuilder
blockingAllowed
- true if explicit retry is allowed, false otherwise.
GammaTxnFactory newTransactionFactory()
TxnFactoryBuilder
TxnFactory
.
newTransactionFactory
in interface TxnFactoryBuilder
GammaTxnExecutor newTxnExecutor()
TxnFactoryBuilder
TxnExecutor
optimized for executing transactions created by this TxnFactoryBuilder.
newTxnExecutor
in interface TxnFactoryBuilder
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |


Steel
Grade |
Comparable Standard
AISI / JIS |
Hardening |
Delivery Hardness
HRC |
Characteristics |
Applications |
| ASSAB Steel |
IMPAX
718S |
P20 Modified |
Prehardened |
31-36 |
Pre-hardened type, high purity with isotropic microstructure
contains 1.0% Ni |
High quality mold inserts, best suitable for plastic molding of
PA,POM, PS, PE, PP, ABS. |
IMPAX
718H |
Prehardened |
36-42 |
| EM38 |
— |
Prehardened |
38-44 |
Good polishability, texturing, EDMing and machinability.
Homogenous hardness |
Suitable for plastics injection mold, extrusion die and rubber
mold |
| STAVAX S136 |
420, ESR |
Through hardened |
50-52 |
High purity, high polishability to mirror finish, with good
corrosion resistance and low distortion after heat treatment. |
High quality mold inserts with mirror surface finish and good
corrosion resistance, anti-corrosive cooling channel, best suitable for
plastic molding of PVC, PP, EP,PC, PMMA, machine parts for food processing machinery. |
| STAVAX S136H |
Prehardened |
31-36 |
| STAVAX S136 SUP |
420, ESR |
Through Hardened |
50-52 |
Corrosion resistance and toughness are better than S136 |
Suitable for big plastic mold with high precision requirement |
| STAVAX S136H SUP |
Prehardened |
31-36 |
Corrosion resistance and toughness are better than S136H |
| POLMAX |
420 (ESR+VAR), Optical Grade |
Through hardened |
50-52 |
Ultra-high purity and extremely low segregation by double
remelting process (ESR+VAR). Excellent polishability to attain optical requirement. Good corrosion resistance and low distortion after heat treatment |
High quality molds for Lens, Optical Products, compact discs
and medical applications |
| CORRAX S336 |
Special Precipitation Hardening Stainless Steel |
Age Hardening |
32 |
Excellent corrosion resistance, extremely good dimensional
stability during ageing, good weldability |
Injection molds for corrosive plastics, rubber, medical and
food industry and plastic parts with complicated design. |
| ELMAX |
Special Powder Metal |
Through Hardened |
50-52 |
High wear resistance. High corrosion resistance. High
compressive strength. Less distortion after heat treatment. |
Suitable for plastic molds with the requirement of both high
corrosion resistance and wear resistance. Suitable for plastic molds for engineer plastics with additives such as glass fibers and/or fire retardent. molds for electronic encapsulation. Componen |
| 168 (Ramax S/Ramax 2) |
420+S |
Prehardened |
36-41 |
High machinability. High corrosion resistance |
mold base with the requirement of high strength and corrosion
resistance. Plastic molds with corrosion resistance but do not require high surface finish requirement. Suitable for fixtures in electronic industries. |
| ORVAR 8407 |
H13, MICRODIZED + ESR |
Through Hardened |
50-52 |
Hot work tool steel with high toughness and good high
temperature strength |
Die casting, extrusion, cold hobbing, mold for PA, POM,PS, PE,
EP plastics |
| CALMAX 635 |
High wear resistance multi-functional tool steel |
Through Hardened |
50-52 |
Extremely high toughness and high wear resistance, good
hardenability and weldability, good flame and induction hardenability to HRC56-60, with harden layer up to 5mm thickness. |
High strength plastic mold and compacting die, suitableable for molding of fibre-reinforce plactics. |
| VANADIS 10 |
High performance powder
metallurgical cold work tool steel |
Through Hardened |
50-52 |
Extremely high wear resistance, sufficient toughness with very
high compressive strength and high dimensional stability during heat treatment. |
High speed stamping of E.I. core and lead frame. |
| SSAB Steel |
| Toolox 33 |
|
Prehardened |
30-36 |
Suitable for
tools and engineering components. It possesses good dimensional stability
after machining |
High quality mold inserts, best suitable for plastic molding of
PA,POM, PS, PE, PP, ABS. |
| Toolox 44 |
|
Prehardened |
44-50 |
Suitable for
tools and engineering components. It possesses good dimensional stability
after machining |
The high steel cleanliness gives Toolox 44 very good polishing, A2 gloss, and texturing capabilities. |
| DAIDO Steel |
| PX88 |
P20 Modified |
Prehardened |
31-36 |
Good weldability, special alloying composition to reduce
sensitivity due to weld crack. |
Medium production run plastic mold with good surface finishing. |
| PX5 |
P20 Modified |
Prehardened |
31-36 |
Good weldability, special alloying composition to reduce
sensitivity due to weld crack, good machinability |
Medium production run plastic mold |
| NAK55 |
P21+S Mod., ESR |
Prehardened |
40-43 |
Pre-hardened type with high hardness, good machinability and
weldability |
High precision plastic molds and rubber molds. |
| NAK80 |
P21 Mod., ESR |
Prehardened |
40-43 |
Pre-hardened type with high hardness, good
polishability,excellent photo-etchingability, good EDM machining and
weldability |
molds require high wear resistance and excellent surface
finishing. |
| S-Star |
SUS 420 J2 Mod., ESR |
Prehardened |
31-36 |
High mirror surface polishability with corrosion resistance. |
High precision plastic molds with high mirror surface
finishing. |
| S-Star (A) |
SUS 420 J2 Mod., ESR |
Through Hardened |
50-52 |
High mirror surface polishability with corrosion resistance.
Hardness can be obtained up to 50 – 52 HRC with proper heat treatment in order to obtain better polishability, wear resistance and/or corrosion resistance |
High precision plastic molds with high mirror surface
finishing. |
| DH31-S |
SKD61 Modified |
Through Hardened |
50-52 |
Good through-hardening properties especially for large molds, excellent resistance to thermal shock and to thermal fatigue, good resistance to heat erosion. |
AL, Mg Die casting molds, Parts for die casting molds, AL die extrusion molds, Hard plastics molds. |
| DHA1 |
SKD61 |
Through Hardened |
50-52 |
Good through-hardening properties, good resistance to thermal shock and thermal fatigue, good resistance to heat erosion. |
Zn, small size AL die casting molds, Parts for die casting molds, AL die extrusion molds, Hard plastics molds. |
| GOA |
SKS3 Modified |
Through Hardened |
50-52 |
High hardenability and wear resistance cold work tool steel |
Punches for cold forming and blanking, shearing blades for
metal sheet. |
| DC11 |
SKD11 |
Through Hardened |
50-52 |
Excellent wear resistance with high chromium cold work tool
steel |
Suitable for cold extrusion, cold drawn dies, punching and
blanking dies for stainless steel or metal sheets with high hardness. |
| DC53 |
SKD11 Modified |
Through Hardened |
50-52 |
High toughness chromium cold work tool steel, high temperature
tempering after the heat treatment can reach the high hardness of 62 HRC,
especial good for much EDM wire cut works to reduce the breakage. |
Suitable for stamping die, cold forming, deep drawing, thread
rolling, punches for high speed blanking, stainless steels materials. |
| Finkl |
| P20 HH |
P20 Modified |
Prehardened |
36-42 |
With special chemical composition adjustment and good forging process/forging ratio, mechanical properties are better than normal AISI P20 tool steels. |
High quality mold inserts, best suitable for plastic molding of
PA,POM, PS, PE, PP, ABS. |
| P20 LQ |
P20 Mod. (Optical Quality) |
Prehardened |
36-42 |
High purity and less segregation are obtained by double vacuum
melting processes (VAD + VAR) in order to obtain good polishability |
Suitable for plastic mold with optical requirement without
requiring to handle corrosive plastics |
| Lung Kee Special Steel |
| LKM 638 |
P20 |
Prehardened |
29-32 |
High machinability |
High quality mold base or large core parts. |
| LKM 2311 |
P20 |
Prehardened |
29-35 |
Pre-hardened type tool steel for plastic mold. |
mold for high quality plastic with long run production. |
| LKM 2312 |
P20 + S |
Prehardened |
29-35 |
Excellent machinability, most suitableable for high speed
volume machining. |
Plastic mold for general use and core parts |
| LKM 738 |
P20 + Ni |
Prehardened |
29-35 |
High quality pre-hardened type tool steel, uniform in hardness
and high machinability |
Mold with high toughness and good finishing. |
| LKM 738H |
Prehardened |
36-42 |
| LKM838H |
P20 Mod. |
Prehardened |
36-42 |
With special adjustment to the chemical composition, LKM838H’s
thermal conductitvity,machinability, polishability and weldability are better
than normal AISI P20 tool steels. |
Suitable for plastic molding of PA,POM, PS, PE, PP, ABS with
the requirement of high hardness, polishability and wear resistance. |
| LKM818H |
P20 Modified |
Prehardened |
36-42 |
Pre-hardened type, high purity with isotropic microstructure
contains 1 |
High quality mold inserts, suitable for plastic molding of
PA,POM, PS, PE, PP, ABS. |
| LKM 2711 |
P20, Premium |
Prehardened |
36-43 |
High hardness and high toughness |
Suitable for medium plastic molds requiring high hardness with good toughness |
| LKM420 |
420 |
Through Hardened |
50-52 |
Good anti-rusting property. Hardness can be increased up to HRC 50 – 52 for plastic mold application |
Plastic mold with requirement of anti-rusting |
| LKM420H |
420 |
Prehardened |
29-35 |
Good anti-rusting property. |
Plastic mold with requirement of anti-rusting and mouldbase
with corrosion resistance requirement |
| LKM 2083 |
420 |
Through Hardened |
50-52 |
Hardness can be obtained up to 50 – 52 HRC with proper heat
treatment in order to obtain better polishability, wear resistance and/or corrosion resistance |
Corrosion resistance plastic molds. |
| LKM 2083H |
Prehardened |
29-35 |
Pre-hardened type, corrosion resistance, high polishabity |
| LKM 2316A |
SUS 420 J2 |
Through Hardened |
50-52 |
Hardness can be obtained up to 47 HRC with proper heat
treatment in order to obtain the better wear resistance and corrosion resistance than pre-hardened condition |
High corrosion resistance plastic molds. |
| LKM 2316 |
Prehardened |
29-35 |
Pre-hardened type, high corrosion resistance |
| LKM 2316ESR |
SUS 420 J2, ESR |
Prehardened |
29-35 |
High cleanliness, high corrosion resistance |
High corrosion resistance molds with good polishability. |
| LKM H13 |
H13 |
Through Hardened |
50-52 |
Good toughness |
Suitable for hard plastic molds, sliders, zinc die casting
dies. |
| LKM 2343 |
H11 |
Through Hardened |
50-52 |
Good high temperature strength and high toughness, good
resistance to heat checking |
Suitable for die casting
for aluminium and zinc alloys, hard plastics molds. |
| LKM 2343 ESR |
H11 ESR |
Through Hardened |
50-52 |
Homogenous structure and good isotropic property. Good plastic
mold with high polishing requirement |
Suitable for die casting for magnesium, aluminium and zinc
alloys. Good for plastics molds with high polishing requirement. |
| LKM 2344 |
H13 |
Through Hardened |
50-52 |
Good high temperature strength, suitable for die casting mold |
Suitable for die casting for aluminium and zinc alloys, hard plastics molds. |
| LKM 2344 ESR |
H13, ESR |
Through Hardened |
50-52 |
Homogenous structure and good isotropic property. Good plastic
mold with high polishing requirement |
| LKM 2344-SUPER |
H13, MICRODIZED + ESR |
Through Hardened |
50-52 |
High toughness and good high temperature strength, with high
impact strength exceeding 300J |
| LKM 2510 |
O1 |
Through Hardened |
50-52 |
High hardenability and wear resistance cold work tool steel |
Shearing blades, cold forming, blanking and punching dies. |
| LKM 2379 |
D2 |
Through Hardened |
50-52 |
High chromium cold work tool steel with good toughness. |
Suitable for cold extrusion and forming, cold drawn, punching
and blanking of high hardness metal sheet and stainless sheet. |
| LKM 2767 |
6F7 (High toughness multi-purpose tool steel) |
Through Hardened |
50-52 |
High strength and toughness, can be hardened to HRC 50~54. |
Suitable for shearing and blanking of sheet metal with 10mm
thick or above |
| Sinto |
PORCERAX II
PM – 35 |
Sintering power metallurgical porous material |
Prehardened |
38-43 |
High quality pre-hardened type permeable porous material with
high corrosion resistance, high machinability and EDM machinability (Supplied
with 7 and 20 µm pore sizes) |
molds for high quality plastic or die-casting parts with thin
wall or intricated structure. Remedy for quality and productivity problems
due to gas trapping during injection molding. |
| USA Brush Wellman Beryllium Copper Alloy |
| MOLDMAX 40 |
– |
Age Hardening |
36-42 |
High strength beryllium copper alloy, very high thermal
conductivity, shorten molding cycle effectively. |
Best suitable for mold core and insert which require rapid
cooling. |
| EDM Copper |
|
|
|
|
|
| C1100P |
JIS H3100 |
– |
|
Extremely high purity, good electrical conductivity, high
machinability, low thermal deformation |
EDM copper electrode. |
| USA ALCOA Aluminium Alloy |
| 6061-T6/T651/T6511 |
– |
Age Hardening |
|
Aluminium alloy with good corrosion resistance, excellent joining characteristics and
anodizing |
Thermoforming, blow molding, ultrasonic welding and machine parts. |
| SWISS ALCAN high hardness Aluminium Alloy |
| CERTAL 7022-T651/T652 |
AlZnMgCu0.5 |
Age Hardening |
7 |
High Strength, high hardness, good machinability |
Plastic injection molding, blow molding, ultrasonic welding and machine parts |
| China high quality plastic mold steel |
| WY718 |
P20+Ni |
Prehardened |
29-35 |
Prehardened plastic mold steel |
mold Base and core part of plastic mold |
| WY2311 |
P20 |
` |
29-35 |
Prehardened plastic mold steel |
mold Base and core part of plastic mold |
| High quality plain carbon steel |
| S50C – S55C |
1050 – 1055 |
|
7-20. |
High machinability |
Suitable for plastic mold base and machinery parts |


This shiny version of DIGSS was created to facilitate the user interface. More details on DIGSS can be found in Pestle et al. XXXX (link here soon).
Help and walkthroughs are also available in the DIGSS vignette, accessible inside R or here.DIGSS can be run as a package directly in R. You can install it following:
devtools::install_github("markhubbe/DIGSS")
The package in R gives more flexibility when running multiple simulations and further analyzing the results, however the interface is much more cumbersome
You can check out all the code behind DIGSS on github:
For the R package: github.com/markhubbe/DIGSS
For the Shiny version: github.com/markhubbe/DIGSS_shiny
Comments, suggestions and bug reports are always welcome. Send them to Mark Hubbe
To run DIGSS, simply input the parameters for the simulation and press the Run DIGSS button. The Survey Loop allows you to run multiple sequential simulations.
Once run, results fo each simulation or simulation loop can be downloaded as csv files from the respective result tabs. These files are the same that would be generated by running DIGSS inside R.
To save the figures, right click on them to download.
The shiny.apps server has a limited ammount of memmory allocated to DIGSS, which means that multiple simultaneous users will cause the page to freeze.
If you are planning on sharing this with multiple users (e.g., in a classroom) or have very ambitious simulation goals, you can download the latest version of DIGSS_shiny as a zip file to load it in RStudio (unzip folder, open app.R in RStudio, and run app from there), or run it directly from github:
shiny::runGitHub('DIGSS_shiny', 'markhubbe')


EPP to decide on expelling Fidesz by end of January
by EUobserverThe newly-elected president of the European People's Party (EPP), Donald Tusk, said on Thursday that group of 'wise men' evaluating the EPP membership of Hungarian ruling party Fidesz will present a report before the end of the year. "Then I will start an intensive consultation [and] we will have a decision at the end of January," said Tusk.


Home
About
Money
Why Save Money?
How to earn money as a kid?
Banking
Fun apps and games to learn more about finance
Videos
Links
Currency Converter
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.


Kristen Watson is a journalist and photographer in the North Texas region and served as editor and photographer for Alexis Bortell's book, Let's Talk About Medical Cannabis. Kristen began a photojournalism project that followed Alexis Bortell called Green Migration in January of 2015, two months before the Bortells decided to move to Colorado. Since, she has followed their story and has expanded the project to include another journalist, Hannah Ridings, to create The Illegal Hope Project, a photojournalism project that aims to document medical marijuana refugee's stories as well as stories of patients stuck in non-medical states. If you or someone you know would like to be a part of this project, please contact Kristen at<EMAIL_ADDRESS>Kristen is a recent graduate of the University of North Texas' Mayborn School of Journalism and her work has been published by the Dallas Morning News, USA Today, Mother Jones, Mashable, WFAA, CBS DFW, Denton Record-Chronicle, The Dentonite, NeighborsGO, Texas Woman's University and the North Texas Daily. Follow her work on Instagram at @kristenwatsonn or on Twitter at @kbwats.


Content Management System base on NodeJS
exprocms is small and light CMS. Published static content (such as HTML, javascript, css, etc) which splite from system. Base on MEAN Boilerplate to develop.
jekyll -v
output version like jekyll 1.4.2
$ npm install -g bower
The quickest way to get started with MEAN is to clone the project and utilize it like this:
Install dependencies:
$ npm install
We recommend using Grunt to start the server:
$ grunt
When not using grunt you can use:
$ node server
Then open a browser and go to:
http://localhost:3000
During install some of you may encounter some issues, most of this issues can be solved by one of the following tips. If you went through all this and still can’t solve the issue, feel free to contact me(Amos), via the repository issue tracker or the links provided below.
Sometimes you may find there is a weird error during install like npm’s Error: ENOENT, usually updating those tools to the latest version solves the issue.
Updating NPM:
$ npm update -g npm
Updating Grunt:
$ npm update -g grunt-cli
Updating Bower:
$ npm update -g bower
NPM and Bower has a caching system for holding packages that you already installed. We found that often cleaning the cache solves some troubles this system creates.
NPM Clean Cache:
$ npm cache clean
Bower Clean Cache:
$ bower cache clean
All configuration is specified in the config folder, particularly the config.js file and the env files. Here you will need to specify your application name, database name, as well as hook up any social app keys if you want integration with Twitter, Facebook, GitHub or Google.
There are three environments provided by default, development, test, and production. Each of these environments has the following configuration options:
To run with a different environment, just specify NODE_ENV as you call grunt:
$ NODE_ENV=test grunt
If you are using node instead of grunt, it is very similar:
$ NODE_ENV=test node server
NOTE: Running Node.js applications in the production environment enables caching, which is disabled by default in all other environments.
We pre-included an article example, check it out:


Part VI explores web services. This part contains the following chapters:
Chapter 27, "Introduction to Web Services"
Chapter 28, "Building Web Services with JAX-WS"
Chapter 29, "Building RESTful Web Services with JAX-RS"
Chapter 30, "Accessing REST Resources with the JAX-RS Client API"
Chapter 31, "JAX-RS: Advanced Topics and an Example"


Now Chating is Simple and More Fun With Lunatic.
Phosfluorescently re-engineer open-source manufactured products vis-a-vis an expanded array of potentialities.
Get it From Appstore Get it From GooglePlayPhosfluorescently re-engineer open-source manufactured products vis-a-vis an expanded array of potentialities.
Get it From Appstore Get it From GooglePlayWriters and stars of Veep have responded incredulously to the news an Australian politician required stitches way.
Writers and stars of Veep have responded incredulously to the news an Australian politician required stitches way.
Writers and stars of Veep have responded incredulously to the news an Australian politician required stitches way.
The recording starts with the patter of a summer squall. Later, a drifting tone like that of a not-quite-tuned-in radio station rises and for a while drowns out the patter.
The recording starts with the patter of a summer squall. Later, a drifting tone like that of a not-quite-tuned-in radio station rises and for a while drowns out the patter.
The recording starts with the patter of a summer squall. Later, a drifting tone like that of a not-quite-tuned-in radio station rises and for a while drowns out the patter.
The recording starts with the patter of a summer squall. Later, a drifting tone like that of a not-quite-tuned-in radio station rises and for a while drowns out the patter.
The recording starts with the patter of a summer squall. Later, a drifting tone like that of a not-quite-tuned-in radio station rises and for a while drowns out the patter.
The recording starts with the patter of a summer squall. Later, a drifting tone like that of a not-quite-tuned-in radio station.
Take your journal wherever you go with our apps for iPhone, iPad, and Android phones & tablets.
Get It From Appstore Get It From Appstore
Integrated Social Network
You can now use all Social Network from this Lunatic app also. Writers and stars of Veep have responded incredulous to the news an Australian politician required stitches after knocking himself unconscious while laughing.


--- layout: default title: Partners ---
We proudly partner with these student organizations that use technology for social good. We work with them on projects, publicity, articles, and more.
{% for partner in site.data.partners %}
{% if partner.college and partner.college.full %}
{{ partner.college.full }}
{% endif %}
{% if partner.contact and partner.contact.name and partner.contact.email %}
Contact: {{partner.contact.name}} <{{partner.contact.email}}>
{% endif %}


Simple Card
Create high performance shadow effect with opacity and transform.
---
Create high performance shadow effect with opacity and transform.
---
Create high performance shadow effect with opacity and transform.
---
Create high performance shadow effect with opacity and transform.
---


/**
* @module
* @class Stats
* @description class to represent the stats of the impression
* @property {Boolean} hasEarnedReward - has the user earned an reward
* @property {Number} duration - how long the impression was
* @property {Number} desiredDuration - how long the advertiser wanted the impression to be
* @property {Number} interactionCount - how many times user has interacted with ad
* @property {Number} desiredInteractionCount -
* how many times the advertiser wanted the user to interact
* @property {Array} allInteractions - all Interactions
* @property {Array} validInteractions - only Interactions the advertiser deemed valid
* @property {Number} rewardPercentage - how many percent of the additional reward the user receives
*/
const Stats = class Stats {
constructor({ desiredDuration, desiredInteractionCount }) {
this.hasEarnedReward = false;
this.duration = 0;
this.desiredDuration = Math.round(desiredDuration);
this.interactionCount = 0;
this.desiredInteractionCount = Math.round(desiredInteractionCount);
this.allInteractions = [];
this.validInteractions = [];
this.rewardPercentage = 0;
}
};
module.exports = Stats;


The main idea of the Local FDR algorithm is to estimate both proportion of null observations and the ratio of null and alternative densities. In the case that there are many null observations, this can be done reliably, through maximum likelihood or generalized linear models. This package implements this in the case that the null and alternative densities are Poisson.
| Version: | 1.0.0 |
| Depends: | R (≥ 3.1.2) |
| Imports: | dplyr, ggplot2 |
| Suggests: | knitr |
| Published: | 2015-05-05 |
| Author: | Kris Sankaran [aut, cre] |
| Maintainer: | Kris Sankaran <kriss1 at stanford.edu> |
| License: | GPL-2 |
| NeedsCompilation: | no |
| CRAN checks: | LocFDRPois results |
| Reference manual: | LocFDRPois.pdf |
| Vignettes: |
Introduction to the LocalFDRPois package |
| Package source: | LocFDRPois_1.0.0.tar.gz |
| Windows binaries: | r-devel: LocFDRPois_1.0.0.zip, r-release: LocFDRPois_1.0.0.zip, r-oldrel: LocFDRPois_1.0.0.zip |
| OS X binaries: | r-release: LocFDRPois_1.0.0.tgz, r-oldrel: LocFDRPois_1.0.0.tgz |
Please use the canonical form https://CRAN.R-project.org/package=LocFDRPois to link to this page.


A computer programmer (Rob Colbert, me) has snapped. After two straight decades in software development, I decided end my permanent, full-time corporate experience. After more than a decade of fighting with various "IT Professionals" over this & that at various companies, I decided to stop giving all fucks and changed the question:
Why is this always a fight? Am I perhaps the one who is flawed in my constant pursuit of progress and innovation?
With this new mantra in mind, I've set off on a journey to find the answer. Pulsar is that journey. Today, the page you're reading is being served by Pulsar, an application of my own creation, atop the MEAN stack running in production without issues.
None. Use it if you want to. It's subject to change, quite early and might break if you use it in a way I didn't predict.
MongoDB, memcached, Node.js, ExpressJS and Mongoose are the API stack. Winston is used as the logger, nodemailer sends email and socket.io provides persistent TCP.
Yeoman, Grunt, npm and git are used for scaffolding, builds, dependency maintenance and revision control, respectively.
Lighttpd is serving up a static AngularJS client through CloudFlare as a CDN. All business logic is written in JavaScript and executes in the browser. The client is an HTML5 Single-Page Application that does not care about SEO.
Yeoman, Grunt, Bower, npm and git are using for scaffolding, builds, project dependency maintenance (Bower and npm) and revision control, respectively.
Search is not my problem. It's Google's problem. Maybe Ask.com will be first to index SPA's? Who cares?
AngularJS is Google's front-end framework. The potential for an automatic search solution is there, and is one of the main reasons I'm on Angular. If Google wants to index Pulsar's default client's presented content, they can figure that problem out. Or, I'll get to it, "Eventually." (read: Not likely any day soon at all, not on the roadmap).
If you want to be using tech that stands up a heavily-optimized landing page per current expectations, WordPress or any solution that serves presented content is a much better option. Pulsar will eventually serve presented pages through Node.js as an optional configuration using Jade templates.
hosts: robcolbert.com api.robcolbert.com ip : <IP_ADDRESS> uname -a: Linux robcolbert 3.8.0-29-generic #42~precise1-Ubuntu SMP Wed Aug 14 16:19:23 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 2 model name : QEMU Virtual CPU version 1.0 stepping : 3 microcode : 0x1 cpu MHz : 1999.999 cache size : 4096 KB fpu : yes fpu_exception : yes cpuid level : 4 wp : yes flags : fpu de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pse36 clflush mmx fxsr sse sse2 syscall nx lm rep_good nopl pni vmx cx16 popcnt hypervisor lahf_lm bogomips : 3999.99 clflush size : 64 cache_alignment : 64 address sizes : 40 bits physical, 48 bits virtual power management : MemTotal : 1018820 kB MemFree : 249476 kB Buffers : 123644 kB Cached : 422528 kB SwapCached : 0 kB Active : 488004 kB Inactive : 191532 kB Active(anon) : 133404 kB Inactive(anon) : 504 kB Active(file) : 354600 kB Inactive(file) : 191028 kB Unevictable : 0 kB Mlocked : 0 kB SwapTotal : 0 kB SwapFree : 0 kB S PID PPID C PRI NI RSS SZ TIME CMD S 3758 1 0 80 0 3496 12217 00:02:32 lighttpd S 5250 5249 0 80 0 75196 245983 00:00:07 node S 24418 1 0 80 0 5448 79723 00:00:49 memcached S 1 0 80 0 39068 82146 02:26:02 mongod 324K ./scripts <-- JavaScript 108K ./styles <-- CSS 124K ./views <-- HTML 2.0M ./images <-- Images
It's all running on one little VM in the cloud somwhere. But, it is easily broken out and scaled both horizontally and vertically at all tiers. MongoDB shards up nicely. Memcached pools as needed. Node.js gets ridiculous with multiple vertical instances per host and as many horizontal hosts as are required divided into high-availability and content-balanced pools as desired. In fact, I am looking forward to figuring out how to start paying for expanded levels of service profitably as or if demand grows.
I'm building Pulsar, Pulsar Composer, Pulsar Studio and Constellation for free and giving them away. All of them. All features, end-to-end, no limitations and completely open source under the MIT license. That...has value.
To be compensated, I am only asking not to host all of this as a public service for free. I can build it, but I need help affording the hosting. Scaled out hosting can only be afforded if provided by the community in some way. We'll figure it out when/if the time comes. Not worried. It scales. That's all I need to know (and I do) for now.
I'm staying focused on feature development. It's not like I wanted to build a CMS and decentralized social network. I'm seriously just doing this to prove or disprove the underlying technologies in a peer-reviewable way.


Toggle navigation
OceanCross
Auto
User
Profile
Settings
Logout
Dashboard
Customers
Suppliers
Users
Sales
Invoices
Forms
Alerts & Panels
Icons
Reports
Account Statement
Income Reports
Expense
Income vs Expense
Report by Date
Report by Month
All Income
All Purchases
All Transactions
Login Page
Customer Panel
All Customer
Add New
Have the Customer Populated table here
Personal Details
Agreement Details
Agreed Units
On Behalf Of?
Mv Reg Details
Select Model
Model 1
Model 2
Model 3
model 4
Engine Number
Green
Payment Details
Mode of payment
Cheque
Direct Deposit
Cheque Amount
Instalments
First instalment
Date
Second instalment
Date
Uploads
Upload ID/Pasport Scan
Upload Manual Filled Form
Upload Copy of Cheques
Upload supporting Document


What is Whoops?
Whoops is a free, open-source, self-hosted logging system. It consists of a Rails engine (which records logs and provides an interface to them) and a logger. The server and Ruby logger are described below, along with comparisons to other logging systems.
Whoops Server
The Whoops server is a Rails engine which records logs and provides an interface to filter, search, and view them. Below are its features and how it compares to Hoptoad:
Log Arbitrary Events
With Airbrake, you only log exceptions. With Whoops, it’s up to you to tell the Whoops server what you’re logging, be it an exception, notification, warning, or whatever. Internally, Whoops::EventGroup uses the event_type field to store the event type. You can filter on this field when viewing a listing of all events.
Log Arbitrary Details
With many logging systems, the fields which you can log are pre-defined. They also reflect an assumption that your error happened within the context of handling an HTTP request. Whoops uses mongodb as its database and this allows you to log whatever details you want. For example, you could log the following:
{
:start_time =><PHONE_NUMBER>,
:end_time =><PHONE_NUMBER>,
:users_imported => [
{ :id => 413, :succeeded => false },
{ :id => 835, :succeeded => true },
{ :id => 894, :succeeded => true },
{ :id => 124, :succeeded => true },
],
}
This gets stored as-is in Whoops. You can also search these details, as explained below:
Search Event Details
As far I know, you can’t search Airbrake or Errbit. Graylog2 provides search. Whoops provides two kinds of search: event detail search within for all events within an EventGroup, and keywords search across all events and event groups.
Below is example text you would write to search event details, and below that is essentially the ruby code that ends up getting run by the server.
details.current_user_id#in [3, 54, 532] details.num_failures#gt 3 details.current_user.first_name Voldemort message !r/(yesterday|today)/
| Event.where( {:"details.current_user_id".in => [3, 54, 532]} ) | |
| Event.where( {:"details.num_failure".gt => 3} ) | |
| Event.where( {:"details.current_user.first_name" => "Voldemort"} ) | |
| Event.where( {:message => /(yesterday|today/)} ) Note that regular expressions must start with !r. |
The general format is key[#mongoid_method] query . As you can see, query can be a string, number, regex, or array of these values. Hashes are allowed too. If you’re not familiar with querying mongo, you can read more in the mongodb docs. The Mongoid docs are useful as well.
Extend the App
Since Whoops is a Rails engine, you can make changes to your base rails app without worrying about merge difficulties when you upgrade Whoops. For example, you could add basic HTTP authentication.
No Users or Projects
In Airbrake, errors are assigned to projects, and access to projects is given to users. In Whoops, there are no users, so it’s not necessary to manage access rights or even to log in. Additionally, there is no Project model within the code or database. Instead, each EventGroup has a service field which you can filter on. Services can be namespaced, so that if you have the services "godzilla.web" and "godzilla.background", you can set a filter to show events related to either service or both.
Note that you can add users and/or authentication to the base rails app if you really want to.
Notifications
Since Whoops doesn’t have users, email notification of events is handled by entering an email address along with a newline-separated list of services to receive notifications for.
Notifications are sent in two circumstances:
-
A new kind of event is received
-
An event is received for an archived event group
You must set the ActionMailer settings in your base Rails app in order to send notifications. Additionally, you must set the "from" email address with Rails.application.config.whoops_sender
Archival
You can archive a specific event group when viewing its details page. This prevents the event group from showing up in the event group list.
You can view archived event groups by appending show_archived=true to the event group url. For example: http://localhost:3000/event_groups?show_archived=true . A more elegant way to do this will be implemented in the future.
If a new event comes in for an event group after the event group is archived, a notification will be sent.
You Manage the Rails App
If you use Whoops you’ll have to manage the Rails app yourself. You’ll have to set up mongodb and all that. Heroku has a great mongodb addon that gives you 240mb of space for free. Hoptoad doesn’t require you to host or manage anything.
Since Whoops is self-hosted, you can set it up behind your firewall.
Installation
-
create a new rails app
-
add gem "whoops" to your Gemfile
-
run bundle
-
optional add root :to ⇒ "event_groups#index" to your routes file to make the event group listing your home page
-
add loggers to the code you want to monitor
-
ensure that your config/application.rb file looks something like the following:
# make sure that you're not requiring active record
require "action_controller/railtie"
require "action_view/railtie"
require "action_mailer/railtie"
require "sprockets/railtie"
if defined?(Bundler)
Bundler.require(*Rails.groups(:assets => %w(development test)))
end
module WhoopsServer
class Application < Rails::Application
config.encoding = "utf-8"
config.assets.enabled = true
config.filter_parameters += [:password]
# optional - only for sending email notifications
config.whoops_sender =<EMAIL_ADDRESS>end
end
Usage
Filtering
When viewing the Event Group list, you can filter by service, environment, and event type.
When you set a filter, its value is stored in a session and won’t be changed until you click "reset". This is so that you won’t lose your filter after, for example, viewing a specific event.
Whoops Logger
Use Whoops Logger to send log messages to a Whoops server.
Rails Gem
Please note that there’s a Rails gem which simplifies usage in two ways:
-
You don’t have to specify the location of a whoops config file; it defaults to config/whoops.yml
-
It includes an exception logger which will handle all exceptions within the context of a controller action.
Below are instructions for adding additional logging strategies and using the "bare" Ruby client.
Installation
Add whoops_logger to your Gemfile
Add WhoopsLogger.config.set(config_path) to your project, where config_path is a path to a YAML file. The YAML file takes the following options:
:host :http_open_timeout :http_read_timeout :port :protocol :proxy_host :proxy_pass :proxy_port :proxy_user :secure
You can also use pass a Hash to WhoopsLogger.config.set instead of a path to a YAML file.
Usage
Whoops Logger sends Messages to Whoops. Messages are created with Strategies. Below is the basic strategy found in lib/whoops_logger/basic.rb:
strategy = WhoopsLogger::Strategy.new("default::basic")
strategy.add_message_builder(:use_basic_hash) do |message, raw_data|
message.event_type = raw_data[:event_type]
message.service = raw_data[:service]
message.environment = raw_data[:environment]
message.message = raw_data[:message]
message.event_group_identifier = raw_data[:event_group_identifier]
message.event_time = raw_data[:event_time] if raw_data[:event_time]
message.details = raw_data[:details]
end
To use this strategy, you would call
WhoopsLogger.log("default::basic", {
:event_type => "your_event_type",
:service => "your_service_name",
:environment => "development",
:message => "String to Show in Whoops Event List",
:event_group_identifier => "String used to assign related events to a group",
:event_time => Time.now # Defaults to now, so you can leave this out
:details => "A string, hash, or array of arbitrary data"
})
You can create as many strategies as you need. For example, in a Rails app, you could use a strategy for logging exceptions which occur during a controller action (in fact there’s a gem for that). You could use a separate strategy for logging exceptions which occur during a background job. With controller actions, you care about params, sessions, and that data. That data isn’t even present in background jobs, so it makes sense to use different strategies.
Message Builders
Each strategy consists of one or more message builders. The message builders are called in the order in which they are defined.
Internally, each Strategy stores its message builders in the array message_builders, and it’s possible to modify that array directly if you want. For example, you might want to modify a Strategy provided by a library.
The method add_message_builder is provided for convenience. Below is an example of add_message_builder taken from the Whoops Rails Logger:
# It's not necessary to break up the strategy into 3 message builders,
# but it could help to compartmentalize related portions of message building
strategy.add_message_builder(:basic_details) do |message, raw_data|
message.service = self.service
message.environment = self.environment
message.event_type = "exception"
message.message = raw_data[:exception].message
message.event_time = Time.now
end
strategy.add_message_builder(:details) do |message, raw_data|
exception = raw_data[:exception]
rack_env = raw_data[:rack_env]
details = {}
details[:backtrace] = exception.backtrace.collect{ |line|
line.sub(/^#{ENV['GEM_HOME']}/, '$GEM_HOME').sub(/^#{Rails.root}/, '$Rails.root')
}
details[:http_host] = rack_env["HTTP_HOST"]
details[:params] = rack_env["action_dispatch.request.parameters"]
details[:controller] = details[:params][:controller] if details[:params]
details[:action] = details[:params][:action] if details[:params]
details[:query_string] = rack_env["QUERY_STRING"]
details[:remote_addr] = rack_env["REMOTE_ADDR"]
details[:request_method] = rack_env["REQUEST_METHOD"]
details[:server_name] = rack_env["SERVER_NAME"]
details[:session] = rack_env["rack.session"]
details[:env] = ENV.to_hash
message.details = details
end
strategy.add_message_builder(:create_event_group_identifier) do |message, raw_data|
identifier = "#{message.details[:controller]}##{message.details[:action]}"
identifier << raw_data[:exception].backtrace.collect{|b| b.gsub(/:in.*/, "")}.join("\n")
message.event_group_identifier = Digest::SHA1.hexdigest(identifier)
end
strategy.add_message_builder(:basic_details) do |message, raw_data|
message.service = self.service
message.environment = self.environment
message.event_type = "exception"
message.message = raw_data[:exception].message
message.event_time = Time.now
end
There’s a bit more about message builders in the WhoopsLogger::Strategy documentation.
Ignore Criteria
Sometimes you want to ignore a message instead of sending it off to whoops. For example, you might not want to log "Record Not Found" exceptions in Rails. If any of the ignore criteria evaluate to true, then the message is ignored. Below is an example:
strategy.add_ignore_criteria(:ignore_record_not_found) do |message|
message.message == "Record Not Found"
end
strategy.add_ignore_criteria(:ignore_dev_environment) do |message|
message.environment == "development"
end
Git Repos
TODO
-
graphing
-
integrate fully with Rails logger (?)


I am a Robot!
Enter a number and I'll give you the range of that number along with some interesting text!
SUBMIT


EBD - Easton Bible DIctionary
Kohath
KOHATH
"KOHATH "assembly, the second son of Levi, and father of Amram(
Genesis 46:11
). He came down to Egypt with Jacob, and lived to the age of one hundred and thirty-three years (
Exodus 6:18
).
"KOHATH "assembly, the second son of Levi, and father of Amram(Genesis 46:11). He came down to Egypt with Jacob, and lived to the age of one hundred and thirty-three years (Exodus 6:18).


I want to join Tastemakers Africa as the CTO. Instead of rambling in a cover letter about my tech skills I've built this website to show you what I'll bring to Tastemakers Africa.


FINISHING TOUCHES
March 5-8, 1975 at the LLT Armory Building Playhouse
Director - Joe Myers
Assistant Director - Candy Carrie
Sets - Clayton Corley
Lights / Sound - John Sumrall, Dennis Pittman
Costumes / MakeUp - Liz Chesser, Jimmy Cox
THE CAST
Katy Cooper - Betty Whitt
Jeff Cooper - Dr. Billy Lightsey
Hughie Cooper - Bryan Williams
Kevin Cooper - Jim Sumrall
Fred Whitten - John Bisnette
Steve Cooper - Steve Barrett
Felicia Andrayson - Hillary Kennedy
Elsie Ketchum - Kathy Bunge


INDIANA JONES AND THE LAST CRUSADE A film review by Ife Hsu Copyright 1996 Ife Hsu
Paramount Release (1991) Running Time: 2:05hr approx. Starring: Harrison Ford, Sean Connery, Allyson Doody, River Phoenix. Director: Steven Spielberg
It is always refreshing to watch [again] summer movies from previous years and compare them with current movie flicks. This is especially true given the emphasis placed on special effects that seem to carry 1996 summer films.
Indiana Jones and The Last Crusade is the third movie in the adventurous trilogy of Dr. Henry Jones, Jr. [Harrison Ford]. In this entry, Indiana Jones attempts to rescue his father [Sean Connery] and battles old nemesis in the journey for the Holy Grail. The journey is engaging, entertaining, and filled with obstacles.
Even at the most dangerous barriers, this movie is light-hearted and humorous. It contrasts heavily with the previous Indiana Jones movie - The Temple of Doom, a dark and horrific tale drawn on black magic and revengeful characters. Some of the best sequences in fact revolve around the chemistry of Ford and Connery who find themselves at odd circumstances that call for a level of personal interaction they are not accustomed to.
Yes, this movie also had numerous special effects. But unlike current movies, they are not designed to overshadow the characters or undermine the storyline. Special effects are utilized to enforce visualization, thus demonstrating how drazzling some of Indiana Jones' stunts really are.
Characterization is what makes Indiana Jones movies entertaining and enjoyable. Even removing the somewhat outdated special effects, there remains a movie that can still be recommended.
**** of ****
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


Master of Computer Applications or MCA is a professional degree in computer science. MCA is a three year long professional post-graduate degree course for students who deeply want to learn computer application development. The MCA course is a combination of both theoretical and practical knowledge. With an MCA degree, students can learn different tools meant to develop better and faster computer applications and software.


Before Change
w_shape = [4, 3, 3, 5]
w_size: int = np.prod(w_shape)
w_data = np.arange(w_size).reshape(w_shape)
w = ConstantVariable(w_data.copy(), OrderNHWC)
w.change_axis_order(order_w)
h, = conv(x, w)
s1_shape = [h.shape_dict[Axis.C]]
s1_size: int = np.prod(s1_shape)
After Change
w_shape = [4, 3, 3, 5]
w_size: int = np.prod(w_shape)
w = ConstantVariable(np.arange(w_size).reshape(w_shape), OrderNHWC)
w.change_axis_order(order_w)
w_data = w.data.copy()
h, = conv(x, w)
s1_shape = [h.shape_dict[Axis.C]]
s1_size: int = np.prod(s1_shape)


Are you sure you want to re-tract this report? You will return to the same usage report to edit and re-submit. For a new time period you must submit a new declaration report.
Declaration for Period {{commercialUsageReport.startDate | date : 'yyyy-MM'}} – {{commercialUsageReport.endDate | date : 'yyyy-MM'}}


Registration to attend the virtual meeting is free but required for planning purpose. We will send you the Zoom information through email, so make sure your email address is correct.


DOMNodelist::item
(PHP 5, PHP 7)
DOMNodelist::item — Retrieves a node specified by index
说明
DOMNode DOMNodelist::item ( int $index )
Retrieves a node specified by index within the DOMNodeList object.
Tip
If you need to know the number of nodes in the collection, use the length
property of the DOMNodeList object.
参数
index
Index of the node into the collection.
返回值
The node at the indexth position in the DOMNodeList, or NULL if that is not a
valid index.
范例
Example #1 Traversing all the entries of the table
load('book.xml');
$items = $doc->getElementsByTagName('entry');
for ($i = 0; $i < $items->length; $i++) {
echo $items->item($i)->nodeValue . "\n";
}
?>
Alternatively, you can use foreach, which is a much more convenient way:
nodeValue . "\n";
}
?>
以上例程会输出：
Title
Author
Language
ISBN
The Grapes of Wrath
John Steinbeck
en
0140186409
The Pearl
John Steinbeck
en
014017737X
Samarcande
Amine Maalouf
fr
2253051209
User Contributed Notes 10 notes
===============================================================================
Actually "item" returns DOMElement and not DOMNode. DOMElement extends only
DOMNode.
http://3v4l.org/KAj7c
===============================================================================
calling domnodelist->item($i) with an index $i greater than domnodelist->length
- 1 , will return the entire document, will not produce an error, and will not
circle back to the start of the list.
===============================================================================
DOMNodeList::item does not return in constant time!
If you need to iterate over large nodelist then you'd better use standard
navigation.
Instead of:
you could do:
firstChild;
do {
// do something
} while ($node = $node->nextSibling);
?>
===============================================================================
SimpleXML has its own SPL iterator. See http://www.php.net/~helly/php/ext/spl/
classSimpleXMLIterator.html . But I guess that there are none for DOM nodes. By
the way, two out of three implementations I found over the Net were not
recursive, so I wrote my own. Here is the snippet:
nodes = $nodes;
}
function rewind()
{
return $this -> offset = 0;
}
function current()
{
return $this -> nodes -> item($this -> offset);
}
function key()
{
return $this -> current() -> nodeName;
}
function next()
{
return $this -> offset++;
}
function valid()
{
return $this -> offset < $this -> nodes -> length;
}
function hasChildren()
{
return isset($this -> current() -> childNodes -> length) && $this ->
current() -> childNodes -> length > 0;
}
function getChildren()
{
return new self($this -> current() -> childNodes);
}
}
?>
Remember to use RecursiveIteratorIterator::SELF_FIRST flag when you create your
iterator iterator.
childNodes);
$iterator = new RecursiveIteratorIterator($iterator, RecursiveIteratorIterator
::SELF_FIRST);
?>
Should work, has just few minutes though. :)
===============================================================================
DOMNodelist::item can return a DOMElement object, which extends DOMNode class.
But it can also return a DOMText object.
more
another
value
';
$doc = new DOMDocument();
$doc->loadXML($xml);
$items = $doc->documentElement->childNodes;
for ($i = 0; $i < $items->length; $i++)
echo get_class($items->item($i)).PHP_EOL;
?>
Results in this output:
DOMText
DOMElement
DOMText
DOMElement
DOMText
DOMElement
DOMText
DOMElement
DOMText
===============================================================================
@ tfg_allardyce at gmail dot com
You could loop through the list backwards, that way, you are only ever taking
off the last item from the list, and hence wont have disrupted the order.
===============================================================================
It seems that with zend.ze1_compatibility_mode on, the only way to iterate over
the items list is with :
for ($i = 0; $i < $nodeList->length; ++$i) {
$nodeName = $nodeList->item($i)->nodeName;
$nodeValue = $nodeList->item($i)->nodeValue;
}
As other attemps failed :
for ($i = 0; $i < $nodeList->length; ++$i) {
$node = &$nodeList->item($i);
$nodeName = $node->nodeName;
$nodeValue = $node->nodeValue;
}
or :
foreach ($nodeList as $node) {
echo $node->nodeName;
echo $node->nodeValue;
}
===============================================================================
Keep in mind that DOMNodelists are "live" - changes to the document or node
that the DOMNodelist was derived from will be reflected in the DOMNodelist. In
other words, a list of a parent node's children will change if you change the
parent's children!
===============================================================================
tfg_allardyce at gmail dot com
I have had exactly this problem.
To rectify I've had to do this:
getElementsByTagName('Element1')->item(0);
$new_element = $doc->createElement('NewElement1');
$old_element_childNodes = $old_element->childNodes;
$length = $old_element_childNodes->length;
for($i = 0; $i < $length; $i++)
{
$oldChildren_array[] = $old_element_childNodes->item($i);
}
foreach($oldChildren_array as $old_c)
{
$new_element->appendChild($old_c);
}
?>
Rather than this:
(which I will bug report)
getElementsByTagName('Element1')->item(0):
$new_element = $doc->createElement('NewElement1');
foreach($old_element->childNode as $node)
{
$new_element->appendChild($node);
}
?>
Using the latter, randomally removes the children!
===============================================================================
NodeList are something annoying because you can't output the content with a
simple print_r, so I did a little function that add all the node to a new empty
DOMDocument and output it as a string.
Have fun.
item($i) ) {
// import node
$domNode = $doc->importNode($node, true);
// append node
$doc->appendChild($domNode);
$i++;
}
$output = $doc->saveXML();
$output = print_r($output, 1);
// I added this because xml output and ajax do not like each others
$output = htmlspecialchars($output);
return $output;
}
?>


This takes you to the tools to manage the org chart,
i.e. add/change employees and reporting relationships.
About this software
Test drive this software
To play with, practice and learn how to create and edit an org chart using
this tool, go to the demonstration site at
demo.employeeware.org/admin
and login in using the username 'demo' and password 'demo' (without the quotes).


Angular 4 by examples
THIS POST IS WORK IN PROGRESS
The best way to learn programming is to see code in action:
I have kept the following notes for future reference:
Angular CLI helps development to debugging, testing to deploying the Angular apps.
Here is the terminology:
angular-cli
- refers to Angular 2
@angular/cli
- refers to Angular 4
To install npm install -g @angular/cli
The underlying language used is typescript
which is translated to javascript using babel
.
The task manager (like gulp
, grunt
) used by Angular CLI is webpack
.
Old apps were page centric, modern apps are component based.
4 pillars of Angular 4
- Component - encapsulates the template (html), data (variables) but not source of data and the behaviour (functions) of a view.
- Directives - bridges the gap between backend and front end. Used for DOM manipulation.
- Routers - takes care of navigation between components.
- Services - reusable tags primarily used for manipulating DOM elements
Adding a component
create a mycomp.component.ts
file
import {Component} from '@angular/core'
@Component({
selector:'my-component',
template:'welcome to my custom component'
})
export class MyComponent{
}
and add component reference to app.module.ts
in declarations
parameter of @NgModule
import { MyComponent } from './mycomp.component';
@NgModule({
declarations: [
AppComponent, MyComponent
],
imports: [
BrowserModule
],
providers: [],
bootstrap: [AppComponent]
})
Adding a template file to a component
Create a file footer.component.html
and replace the template
key in @Component
of a component templateUrl:'./footer.component.html'
.
One way binding
Add properties to component class:
export class FooterComponent {
title = "welcome to footer component"
courses = ['Angular', 'React', 'jQuery']
}
And bind them like this:
<li *ngFor="let course of courses">
</li>
Adding a service
Add a file course.service.ts
import { Injectable } from '@angular/core'
@Injectable()
export class CourseService {
getCourses() {
return ['Angular', 'React', 'jQuery'];
}
}
Add the reference inside app.module.ts
’s @NgModule
providers: [CourseService]
Inject it in a component through it’s constructor:
constructor(cs: CourseService) {
this.courses = cs.getCourses();
}
Create a component from CLI
Fire the command ng g c newComponent
.
There are 5 types of binding are supported
- Property binding
[]
- bind the ts component property with html template property - Event binding
()
- binding the html template event to ts component - Two way data binding
[()]
- for component to template and vice versa data flow - Class binding - e.g.: [class.active]. Is used to add/remove a CSS class
- Style binding - used to set the CSS style rules
Property binding
Add a property to class profilePic = "http://lorempixel.com/400/200"
Use the property in the component <img [src]=profilePic />
Add Bootstrap to Angular app
As of this writing the most stable version of Bootstrap is 3.3. Hence, head over to http://getbootstrap.com/docs/3.3/getting-started/#download and et CDN link under Bootstrap CDN somewhat like this:
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
Add this to index.html
Use event binding
Add a button like this:
<button class="btn btn-danger" (click)="clickHandler($event)">click me</button>
And it’s corresponding event handler in the component:
clickHandler($event) {
console.log($event);
}
Using 2 way data binging
<input type="text" [(ngModel)]="currentCity" />
This is similar to
<input type="text" [value]="currentCity" (input)="currentCity=$event.target.value" />
Class binding
With a property isActive in the component, this
<button class="btn btn-danger" [class.active]="isActive" >automatic active - click me</button>
is equal to
<button class="btn btn-danger active" >manually active - click me</button>
Style binding
We can set the style properties of an element using style properties
<button class="btn btn-danger" [style.backgroundColor]="isActive?'green':'red'" >click me</button>
Inputs
Set a input property in the child component
@Component({
selector: 'header-component',
template: 'welcome to header component ',
inputs: ['dataFromParentComponent']
})
export class HeaderComponent {
dataFromParentComponent = ""; //or @Input dataFromParentComponent = "";
}
Notice that there is no value assigned to dataFromParentComponent
.
In the parent component, set the value of this input with it’s own property:
@Component({
selector: 'my-component',
template: `<header-component [dataFromParentComponent]="myComponentData" ></header-component>`
})
export class MyComponent {
myComponentData = "Parent data"
}


Cold Restaurant
The least hot restaurant in the least cool neighborhood!
Make Reservation
Active Reservations
Reservation Search
Search for your reservation here.
Current Reservations
Your Name
Time:
7:00
Phone:
804-555-1234
Party Size:
5


Jonathan Howe
Software developer
A bit more about myself.
I have been coding for a little over 2 year's now.
My Skills
I enjoy writing front end code.
HTML5
CSS3
Javascript


Money Play. How should Red play 53?
pips Red=158 White=63
(CorrectAnswer= 0/0, ErrorScore= 0)
There are two things Red should not do:
1) Break the five-point prime to hit with the 5.
2) Slot the back of the prime with 17/9 – too many gammon losses.
Red should get good outer board coverage with two intentions.
1) Making the 9-pt naturally
2) Bringing a checker on to the top of five-point prime and then use that checker to hit on the 3-pt.
The two best plays are 20/15, 17/14 and 20/15, 13/10. Everything is at least a blunder.
1) Break the five-point prime to hit with the 5.
2) Slot the back of the prime with 17/9 – too many gammon losses.
Red should get good outer board coverage with two intentions.
1) Making the 9-pt naturally
2) Bringing a checker on to the top of five-point prime and then use that checker to hit on the 3-pt.
The two best plays are 20/15, 17/14 and 20/15, 13/10. Everything is at least a blunder.
1. Cubeful 2-ply 20/15 17/14 Eq.: +0.184 0.682 0.085 0.002 - 0.318 0.162 0.013 2. Cubeful 2-ply 20/15 13/10 Eq.: +0.170 (-0.014) 0.677 0.085 0.002 - 0.323 0.159 0.013 3. Cubeful 2-ply 13/5 Eq.: +0.142 (-0.041) 0.666 0.094 0.003 - 0.334 0.163 0.013 4. Cubeful 2-ply 20/12 Eq.: +0.113 (-0.071) 0.659 0.081 0.002 - 0.341 0.174 0.015 5. Cubeful 2-ply 17/14 13/8 Eq.: +0.103 (-0.081) 0.655 0.090 0.003 - 0.345 0.173 0.014


{% assign services = site.services | sort: 'display-order' %} {% for service in services %}
{{ service.service-short-description }}


Across: 1. Around a junior gun, shy and modest (6) 4. Goes too far with doe, roves free (8) 10. Men turn it into mess (9) 11. Most sports encourage him - rugby rewards him (5) 12. Water still (7) 13. Informed of such friends as a lawyer has (7) 14. Cover is let loose (5) 16,19. From good many hikers, raging desire for a ride expressed (2 7 3 1 5) 20. Could a Tumblr account contain such a small amount of information? (5) 22. Moors dock ponies in pursuit of African freedom fighters (7) 25. Implement cheek (7) 27. Get in odd hint at colour (5) 28. Damaged keel? List is most probable (9) 29. It contains scantier material (8) 30. Time exposed leaked forecast as 19 across race (6) Down: 1. You can play inside and spit outside (7) 2. Fussy at losing the top of joints (9) 3. Terse message sent to lawyer (5) 5. Essential vain trails oddly (5) 6. Tried neat trick and gained new skills (9) 7. On top of icing on vegetable? (5) 8. Feudal system deforms labours (7) 9. Fresh face made men cower (8) 15. Reckless drivers trail scottish vessels (9) 17. Reminder of fortified home booze (8) 18.  Berserk priest to carry on (7) 21. Deserved red time disaster (7) 23. Rule that company head cannot be identified (5) 24. Loves "exotic" thing - to do with clues (5) 26. Craig loosens control of far North construction (5)


Namespace Bifrost.Security
Classes
AuthorizationResult
Contains the result of an attempt to authorize an action.
AuthorizeActionResult
Represents the result of an authorization of a ISecurityAction
AuthorizeActorResult
Represents the result of an authorization of a ISecurityActor
AuthorizeDescriptorResult
Represents the result of an authorization attempt
AuthorizeSecurableResult
Represents the result of an authorization of a ISecurable
AuthorizeTargetResult
Represents the result of an authorization of a ISecurityTarget
BaseSecurityDescriptor
Represents a ISecurityDescriptor
DefaultPrincipalResolver
Represents a principal resolver that resolves from current thread;
NamespaceSecurable
Represents a Securable that applies to a specific namespace
RoleRule
Represents a specific ISecurityRule for roles
RuleEvaluationError
Encapsulates a ISecurityRule that encountered an Exception when evaluating
Securable
Represents a base implementation ofISecurable
SecurableExtensions
Extensions for ISecurable
SecurityAction
Represents a base for any ISecurityAction
SecurityActor
Represents an implementation of ISecurityActor
SecurityContext
Represents an implementation of ISecurityContext
SecurityContextExtensions
Extensions for a ISecurityContext
SecurityDescriptorBuilder
Defines a builder for building a ISecurityDescriptor
SecurityManager
Represents an implementation of ISecurityManager
SecurityTarget
Represents a base class for any ISecurityTarget
TypeSecurable
Represents a Securable that applies to a specific System.Type
UserSecurityActor
Represents a concrete SecurityActor for a user
UserSecurityActorExtensions
Extensions for UserSecurityActor
Interfaces
ICanResolvePrincipal
Defines a resolver for System.Security.Principal.IPrincipal.
ISecurable
Defines something that can be secured
ISecurityAction
Defines an action that is subject to security
ISecurityActor
Defines the security object that defines the security
ISecurityCondition
Defines a condition that must be met in order for a set of rules can be run
ISecurityContext
Defines a security context
ISecurityDescriptor
Defines a security descriptor.
ISecurityDescriptorBuilder
Defines the builder for building a ISecurityDescriptor
ISecurityManager
Defines a manager for dealing with security for types and namespaces
ISecurityRule
Defines a rule for security
ISecurityRuleBuilder
Defines a builder for building ISecurityRule
ISecurityTarget
Defines a ISecurityTarget
IUserSecurityActor
Represents a SecurityActor for a user.


--- layout: post title: "Reviews: A Round-Up" date: 2021-09-24 15:01:00 +0000 tags: image: https://s3.amazonaws.com/audreywatters/2017-11-03-news.jpg imagecredits: https://www.flickr.com/photos/62693815@N03/6277209256 ---
I've been a little remiss in adding press mentions to this site lately, but the book has had some really terrific reviews (and rather lovely, cursory mentions). A sample:
Listen to Michael, everyone. Read the book!


--- layout: page title: "About" description: "" header-img: "img/about-bg.png" multilingual: false ---


Download and illustrate current and projected climate data in R
Current climate data, and projections how climate may change in the (near) future, are important for various reasons. For example, such data can be used to predict how habitat suitability for different animal and plant species or agricultural productivity changes over time.
Thus, in this post, I am showing how to get data on recent and projected climate directly into R, crop the obtained object to the area of interest (here: South America), and then calculate and illustrate the projected change. These data can then be used for further analyses in R.
The data are taken from worldclim.org, which provides climate projections from global climate models (GCM) following the Coupled Model Intercomparison Projects 5 (CMIP5) protocol. These models were used for the 5th report of the Intergovernmental Panel on Climate Change (IPCC) published in 2014. New models are currently developed following CMIP6, and will be used for the 6th IPCC report. I hope/guess that there will be soon an easy way to get these newer predictions into R (please leave a comment if you know about such a way).
For the GCMs, there are four representative concentration pathways (RCPs) describing different climate futures depending on the emitted volumes of greenhouse gases. I am using RCP 4.5 here, which assumes a peak decline in green house gases around 2040, followed by decreasing emission. This is a rather optimistic scenario.
Here are the different steps:
- Use the
getData
function from theraster
package to get climate data into R. - Get a map of South America with the
rnaturalearth
andsf
packages. - Crop the climate data to South America and calculate projected changes with the
stars
package. - Use the
ggplot
andpatchwork
packages to illustrate the changes.
Some additional resources:
- Vignettes of the
stars
package - Vignettes of the
sf
package - Online book on Geocomputation with R by Lovelace, Nowosad, and Muenchow
1. Get climate data with raster::getData
1.1 Prepare R
rm(list = ls())
library(stars) # To process the raster data
library(sf) # To work with vector data
library(ggplot2) # For plotting
library(patchwork) # To combine different ggplot plots
Additional packages that are used: raster
(to get the climate data), rnaturalearth
(to get the map of South America).
1.2 Get recent climate data
The getData
function from the raster
package makes it possible to easily download data on past, current/recent, and projected climate (and some other global geographic data sets. See ?raster::getData
for details).
Here, I am downloading interpolations of observed data representative for the period 1960-1990 (it is also possible to get data for the period 1970-2000). To do so, I am using the following arguments:
name = 'worldclim'
to download data from worldclim.org.var = 'bio'
to get annual averages for all available climate variables. Other possibilities are, e.g., ‘tmin’ or ‘tmax’ for monthly minimum and maximum temperature.res = 10
for the resolution of 10 minutes of degree. This downloads the global data set. For higher resolutions (e.g., 2.5), the tile(s) have to be specified (withlon
andlat
).path
specifies that files are downloaded into subfolder ‘/blog_data’. For this dataset, the files ‘bio1.bil’ to ‘bio19.bil’ (plus ‘.hdr’ files) will be downloaded to ‘/blog_data/wc10/’.
file_path <- paste0(dirname(here::here()), "/blog_data/")
raster::getData(name = 'worldclim', var = 'bio', res = 10,
path = file_path)
## class : RasterStack
## dimensions : 900, 2160, 1944000, 19 (nrow, ncol, ncell, nlayers)
## resolution : 0.1666667, 0.1666667 (x, y)
## extent : -180, 180, -60, 90 (xmin, xmax, ymin, ymax)
## crs : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0
## names : bio1, bio2, bio3, bio4, bio5, bio6, bio7, bio8, bio9, bio10, bio11, bio12, bio13, bio14, bio15, ...
## min values : -269, 9, 8, 72, -59, -547, 53, -251, -450, -97, -488, 0, 0, 0, 0, ...
## max values : 314, 211, 95, 22673, 489, 258, 725, 375, 364, 380, 289, 9916, 2088, 652, 261, ...
1.3 Get projected climate data
To get climate data projected for the period 2061-2080, I am using the following arguments:
name = 'CMIP5'
to get data from the CMIP5 models.var = 'bio'
, which includes the same 19 variables for annual averages as for ‘worldclim’ (the set of variables other than ‘bio’ is very limited for ‘CMIP5’).res = 10
as above.rcp = 45
(see introduction)model = 'IP'
(the ‘IPSL-CM5A-LR’ model). Check?raster::getData
for a list of all models. Perhaps, downloading all/a subset of models and then average projections is better than using a single model, but for the sake of simplicity, I only download this single model here.year = 70
to get projections for the period 2061-2080 (alternative is 50).path
as above. Files ‘ip45bi701.tif’- ‘ip45bi7019.tif’ will be downloaded to ‘/blog_data/cmip5/10m/’.
raster::getData(name = 'CMIP5', var = 'bio', res = 10,
rcp = 45, model = 'IP', year = 70,
path = file_path)
## class : RasterStack
## dimensions : 900, 2160, 1944000, 19 (nrow, ncol, ncell, nlayers)
## resolution : 0.1666667, 0.1666667 (x, y)
## extent : -180, 180, -60, 90 (xmin, xmax, ymin, ymax)
## crs : +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs
## names : ip45bi701, ip45bi702, ip45bi703, ip45bi704, ip45bi705, ip45bi706, ip45bi707, ip45bi708, ip45bi709, ip45bi7010, ip45bi7011, ip45bi7012, ip45bi7013, ip45bi7014, ip45bi7015, ...
## min values : -227, -60, -80, 86, -22, -512, 53, -215, -421, -60, -455, 0, 0, 0, 0, ...
## max values : 344, 217, 94, 22678, 524, 283, 729, 415, 401, 421, 320, 10541, 2701, 489, 222, ...
1.4 Load and process temperature data
The first variable from ‘bio’ is annual average temperature in 10 * °C. For recent data, the file name for this variable is ‘bio1.bil’, and for projected data ‘ip45bi701.tif’. Both can be loaded with the read_stars
function from the stars
package. Values have to be divided by 10 to get the temperature in °C (instead of 10 * °C)
annual_T <- stars::read_stars(paste0(file_path, "wc10/bio1.bil"))
annual_T <- annual_T/10
annual_T_70 <- stars::read_stars(paste0(file_path, "cmip5/10m/ip45bi701.tif"))
annual_T_70 <- annual_T_70/10
1.5 Quick Plots
For the plots, I am defining a color palette for temperature. Colors are taken from the “5-class RdYlBu” palette from http://colorbrewer2.org.
# The result, temp_colors, is a function with argument n for the number of
# colors.
temp_colors <- colorRampPalette(c("#2c7bb6", "#abd9e9", "#ffffbf", "#fdae61", "#d7191c"))
Then, global maps can be plotted with this color palette:
nbreaks <- 20
{
par(mfrow = c(1,2))
plot(annual_T, main = "Annual temperature - 1960-1990",
nbreaks = nbreaks,
col = temp_colors(nbreaks - 1))
plot(annual_T_70, main = "Annual temperature - RCP 4.5 projection for 2061-2080",
nbreaks = nbreaks,
col = temp_colors(nbreaks - 1))
}
Colors are not directly comparable between the two maps! The temperature range of each data set is used to define the color range for each map. Thus, in each map, the bluest color indicates the coolest temperature and the reddest color the hottest temperature, which differ between the two maps. This will be fixed in the plot below.
2. Get Map of South America
Get all countries from South America with the rnaturalearth
package, and then combine them to a single shape.
south_america_map <- rnaturalearth::ne_countries(continent = "south america", returnclass = "sf")
# The precision has to be set to a value > 0 to resolve internal boundaries.
st_precision(south_america_map) <- 1e9 # Required to
south_america_map <- st_union(south_america_map)
{
par(mar = c(0,0,0,0))
plot(south_america_map)
}
3. Climate of South America
3.1 Crop climate raster data to area of South America
To crop a raster with the stars
package, square brackets []
will work as crop operator (see here for details).
annual_T_SA <- annual_T[south_america_map]
# CRS for projected T and south america map are the same (EPSG 4326) but the
# proj4string includes more details for annual_T_70. Thus, they have to
# be made identical before cropping.
st_crs(annual_T_70) <- st_crs(south_america_map)
annual_T_70_SA <- annual_T_70[south_america_map]
Quick plots:
{
par(mfrow = c(1, 2))
plot(annual_T_SA, main = "Annual temperature - 1960-1990",
nbreaks = nbreaks,
col = temp_colors(nbreaks - 1))
plot(main = "Annual temperature - RCP 4.5 projection for 2061-2080",
annual_T_70_SA, nbreaks = nbreaks,
col = temp_colors(nbreaks - 1))
}
3.2 Get some basic summaries
The print method for stars
objects provides some summary statistics, such as max, min, or median temperature.
annual_T_SA
## stars object with 2 dimensions and 1 attribute
## attribute(s):
## bio1.bil
## Min. :-6.50
## 1st Qu.:17.60
## Median :24.00
## Mean :21.03
## 3rd Qu.:26.00
## Max. :29.00
## NA's :59262
## dimension(s):
## from to offset delta refsys point values
## x 592 872 -180 0.166667 +proj=longlat +datum=WGS8... NA NULL [x]
## y 466 874 90 -0.166667 +proj=longlat +datum=WGS8... NA NULL [y]
But these values can also be manually calculated. For example, the mean temperature in South America for the period 1960 - 1990 is:
mean(annual_T$bio1.bil, na.rm = T)
## [1] 8.144672
Currently, bio1.bil
is the only attribute (i.e., the variable with recent annual temperature) in the annual_T
object, but stars
objects can also include several attributes.
Here, I will rename this attribute to recent
. Then I will add the projected temperature from the other object (annual_T_70_SA$ip45bi701.tif
) as a second attribute projected
. Finally, I will calculate the difference between the two, which is the projected change.
names(annual_T_SA) <- "recent"
annual_T_SA$projected <- annual_T_70_SA$ip45bi701.tif
annual_T_SA$change <- annual_T_SA$projected - annual_T_SA$recent
annual_T_SA
## stars object with 2 dimensions and 3 attributes
## attribute(s):
## recent projected change
## Min. :-6.50 Min. :-4.00 Min. :1.00
## 1st Qu.:17.60 1st Qu.:20.10 1st Qu.:2.50
## Median :24.00 Median :26.80 Median :2.80
## Mean :21.03 Mean :23.76 Mean :2.73
## 3rd Qu.:26.00 3rd Qu.:28.80 3rd Qu.:3.00
## Max. :29.00 Max. :31.70 Max. :4.40
## NA's :59262 NA's :59262 NA's :59262
## dimension(s):
## from to offset delta refsys point values
## x 592 872 -180 0.166667 +proj=longlat +datum=WGS8... NA NULL [x]
## y 466 874 90 -0.166667 +proj=longlat +datum=WGS8... NA NULL [y]
4. Illustrate changes in temperature with ggplot
and patchwork
Here, we can use scale_fill_gradientn
to define temperature colors, and then use the same limits for both plots. Now, colors are directly comparable between the plots for annual temperature. I will only use red colors for the change in temperature, as these values are always positive.
recent_T_plot <- ggplot() +
geom_stars(data = annual_T_SA) +
scale_fill_gradientn(name = "Annual T [°C]",
colors = temp_colors(5),
limits = c(-7, 32),
na.value = "white") +
geom_sf(data = south_america_map, fill = NA) +
scale_x_discrete(expand = c(0, 0)) +
scale_y_discrete(expand = c(0, 0)) +
ggtitle("a) 1960-1990") +
theme_void() +
theme(legend.position = "none")
projected_T_plot <- ggplot() +
geom_stars(data = annual_T_SA["projected"]) +
scale_fill_gradientn(name = "Annual T [°C]",
colors = temp_colors(5),
limits = c(-7, 32),
na.value = "white") +
geom_sf(data = south_america_map, fill = NA) +
scale_x_discrete(expand = c(0, 0)) +
scale_y_discrete(expand = c(0, 0)) +
ggtitle("b) 2061-2080 (projected)") +
theme_void() +
theme(legend.position = "bottom")
projected_change_T_plot <- ggplot() +
geom_stars(data = annual_T_SA["change"]) +
scale_fill_gradientn(name = "Change in T [°C]",
colors = temp_colors(5)[3:5],
limits = c(1, 5),
na.value = "white") +
geom_sf(data = south_america_map, fill = NA) +
scale_x_discrete(expand = c(0, 0)) +
scale_y_discrete(expand = c(0, 0)) +
ggtitle("c) Projected change") +
theme_void() +
theme(legend.position = "bottom")
Finally, I will combine the three maps with the patchwork
package (see here for details).
(recent_T_plot / projected_T_plot + plot_layout(guides = "keep")) | projected_change_T_plot +
theme(plot.margin = margin(c(0, 0, 0, 0)))