1 Some Reasons to Extend Thymeleaf
Thymeleaf is an extremely extensible library. The key to it is that most of its user-oriented features are not directly built into its core, but rather just packaged and componentized into feature sets called dialects.
The library offers you two dialects out-of-the-box: the Standard and the SpringStandard dialects, but you can easily create your own. Let’s explore some of the reasons for doing this:
1.1. Scenario 1: adding features to the Standard dialects
Say your application uses the SpringStandard dialect and that it needs to show an alert text box in blue or red background depending on the user’s role (admin or non-admin) from Monday to Saturday, but always in green on Sundays. You can compute this with conditional expressions on your template, but too many conditions could render your code a little bit hard to read…
Solution: create a new attribute called alertclass
and an attribute processor for it (Java code that will compute the right CSS class), and package it into your own MyOwnDialect
dialect. Add this dialect to your template engine with the th
prefix (same as the SpringStandard one) and you’ll now be able to use th:alertclass="${user.role}"
!
1.2. Scenario 2: view-layer components
Let’s say your company uses Thymeleaf extensively, and you want to create a repository of common functionalities (tags and/or attributes) that you can use in several applications without having to copy-paste them from one application to the next. This is, you want to create view-layer components in a similar way to JSPs taglibs.
Solution: create a Thymeleaf dialect for each set of related functionalities, and add these dialects to your applications as needed. Note that if the tags or attributes in these dialects make use of externalized (internationalized) messages, you will be able to package these messages along with your dialects (in the shape of processor messages) instead of requiring that all of your applications include them in their messages .properties
files as you would with JSP.
1.3. Scenario 3: creating your own template system
Now imagine your are creating a public website that allows users to create their own design templates for showing their content.  So you need to offer your users the ability to add to their templates only a very specific set of features that are under your control (like showing a profile photo, a blog entry text, etc).
Solution: create a Thymeleaf dialect with the tags or attributes you want your users to be able to use, like <mysite:profilePhoto />
or <mysite:blogentries fromDate="23/4/2011" />
. Then allow your users to create their own templates using these features and just let Thymeleaf execute them, being sure nobody will be doing what they’re not allowed to.
2 Dialects and Processors
2.1. Dialects
If you’ve read the Using Thymeleaf tutorial before getting here —which you should have done—, you should know that what you’ve been learning all this time was not exactly Thymeleaf, but rather its Standard Dialect (or the SpringStandard Dialect, if you’ve also read the Thymeleaf + Spring tutorial).
What does that mean? It means that all those th:x
attributes you learned to use are only a standard, out-of-the-box set of features, but you can define your own set of attributes (or tags) with the names you wish and use them in Thymeleaf to process your templates. You can define your own dialects.
Dialects are objects implementing the org.thymeleaf.dialect.IDialect
interface, which looks like this:
public interface IDialect {
public String getPrefix();
public Set<IProcessor> getProcessors();
public Map<String,Object> getExecutionAttributes();
public Set<IDocTypeTranslation> getDocTypeTranslations();
public Set<IDocTypeResolutionEntry> getDocTypeResolutionEntries();
}
Let’s see these methods step by step:
First, the prefix:
public String getPrefix();
This is the prefix that the tags and attributes of your dialect will have, a kind of namespace (although it can be changed when adding dialects to the Template Engine). If you create an attribute named earth
and your dialect prefix is planets
, you will write this attribute in your templates as planets:earth
.
The prefix for both the Standard and SpringStandard Dialects is, obviously, th
. Prefix can be null so that you can define attribute/tag processors for non-namespaced tags (for example, standard

,

or

tags in XHTML).
Now, let’s have a look at the most important part of the IDialect
interface, the processors:
public Set<IProcessor> getProcessors();
Processors are the objects in charge of executing on DOM nodes and performing changes on it. We will cover processors in more detail in next sections.
Execution attributes are objects that are contributed by the dialect to the execution arguments during the processing of templates. These are objects —usually utility objects— that will be made available to processors during their execution. Note that these objects will not appear at the variable context, and will be only visible internally.
public Map<String,Object> getExecutionAttributes();
More interface methods:
public Set<IDocTypeTranslation> getDocTypeTranslations();
This returns the set of DOCTYPE translations to be applied. If you remember from the Using Thymeleaf tutorial, Thymeleaf can perform a series of DOCTYPE translations that allow you to establish a specific DOCTYPE for your templates and expect this DOCTYPE to be translated into another one in your output.
Last method:
public Set<IDocTypeResolutionEntry> getDocTypeResolutionEntries();
This method returns the DOCTYPE resolution entries available for the dialect. DOCTYPE resolution entries allow Thymeleaf’s XML Parser to locally resolve DTDs linked from your templates (thus avoiding remote HTTP requests for retrieving these DTDs).
Thymeleaf makes most standard XHTML DTDs already available to your dialects by implementing the abstract class org.thymeleaf.dialect.AbstractXHTMLEnabledDialect
, but you can always add your own ones for your own template DTDs.
2.2. Processors
Processors are objects implementing the org.thymeleaf.processor.IProcessor
interface, and they contain the real logic to be applied on DOM nodes. This interface looks like this:
public interface IProcessor extends Comparable<IProcessor> {
public IProcessorMatcher<? extends Node> getMatcher();
public ProcessorResult process(final Arguments arguments,
final ProcessorMatchingContext processorMatchingContext, final Node node);
}
First thing we can see is that it extends Comparable
– and that is the way precedence is established. If a processor is considered to be sorted before another one, this means it has more precedence, and therefore will be executed before the latter if they both apply to the same node.
Now for the methods. A processor’s matcher establishes when a processor is applicable to a DOM node:
public IProcessorMatcher<? extends Node> getMatcher();
Matcher objects will examine the node’s type, name and/or attributes —if it is an Element DOM node— or whichever other node features required to determine processor applicability. Thymeleaf comes with a predefined set of IProcessorMatcher
implementations so that you do not have to perform usual tasks like matching an element —tag— by its name or one of its attributes.
Finally, the method that does the real work:
public ProcessorResult process(final Arguments arguments,
final ProcessorMatchingContext processorMatchingContext, final Node node);
process(...)
takes three parameters:
The execution arguments. An
org.thymeleaf.Arguments
object containing context, local variables, template resolution information and some other bits of data useful for DOM processing.The processor matching context, containing information about the conditions in which the processor being executed was actually matched.
The problem is that the same processor class can be included in several dialects executing at a time in the same template engine —probably with different configurations—, but these dialects might use different prefixes. If so, how can we know the specific dialect for which the processor is being executed? That is the info this
ProcessorMatchingContext
object provides.The node that the processor will be executed on. Note that processors are applied on a specific node, but nothing stops them from modifying any other parts of the DOM tree.
Thymeleaf offers an abstract utility class to be extended for creating processors: org.thymeleaf.processor.AbstractProcessor
. This class takes care of implementing the Comparable
interface based on the specified precedence and defines the standard mechanisms for obtaining externalized/internationalized messages:
public abstract class AbstractProcessor implements IProcessor {
/* Try to resolve a message first as template message, then if not */
/* found as processor message. */
protected String getMessage(
final Arguments arguments, final String messageKey,
final Object[] messageParameters) {...}
/* Try to resolve a message as a template message */
protected String getMessageForTemplate(
final Arguments arguments, final String messageKey,
final Object[] messageParameters) {...}
/* Try to resolve a message as a processor message */
protected String getMessageForProcessor(
final Arguments arguments, final String messageKey,
final Object[] messageParameters) {...}
public abstract int getPrecedence();
...
}
Special kinds of processors
Although processors can execute on any node in the DOM tree, there are two specific kinds of processors that can benefit from performance improvements inside the Thymeleaf execution engine: attribute processors and element processors.
Attribute Processors
Those processors (implementations of IProcessor
) which getMatcher()
method returns a matcher implementing the org.thymeleaf.processor.IAttributeNameProcessorMatcher interface
are considered “attribute processors”.
Because of the type of matchers they define, these processors are triggered when a DOM element (usually an XML/XHTML/HTML5 tag) contains an attribute with a specific name. For example, most processors in the Standard Dialects act like this, defining matchers for attributes like th:text
, th:each
, th:if
, etc.
For the sake of simplicity, Thymeleaf offers an utility abstract class from which attribute processors can extend: org.thymeleaf.processor.attr.AbstractAttrProcessor
. This class already returns as matcher an implementation of IAttributeNameProcessorMatcher and makes it easier to create this kind of processors.
Element Processors
Those processors (implementations of IProcessor
) which getMatcher()
method returns a matcher implementing the org.thymeleaf.processor.IElementNameProcessorMatcher
interface are considered “element processors”.
Note that the DOM jargon calls “element” to what we usually call “tag” in an XML/XHTML/HTML5 document. Thymeleaf prefers to use the word element in order to be more general, because template modes might be defined that work on documents that do not have an XML-like structure.
Because of the type of matchers they define, these processors are triggered when a DOM element has a specific name.
The Standard Dialects define no element processors.
For the sake of simplicity, Thymeleaf offers an utility abstract class from which element processors can extend: org.thymeleaf.processor.element.AbstractElementProcessor
. This class already returns as matcher an implementation of IElementNameProcessorMatcher and makes it easier to create this kind of processors.
3 Template Modes
Probably the most powerful extension point in Thymeleaf, template modes define in fact what can be considered “a template”. Creating custom template modes allows us to use Thymeleaf for processing templates in formats different to the XML / XHTML / HTML5 that are available out-of-the-box.
Template Modes are defined by their handlers. These are objects implementing the org.thymeleaf.templatemode.ITemplateModeHandler
interface:
public interface ITemplateModeHandler {
public String getTemplateModeName();
public ITemplateParser getTemplateParser();
public ITemplateWriter getTemplateWriter();
}
Each template mode handler defines everything Thymeleaf needs to process templates in a specific mode: a parser (ITemplateParser
) that is able to convert a template into a DOM tree, and a writer (ITemplateWriter
) that is able to convert a DOM tree into the desired result format once it is processed.
Several template modes are provided by Thymeleaf out-of-the-box, defined at the org.thymeleaf.templatemode.StandardTemplateModeHandlers
class, and they are preregistered for every TemplateEngine instance. Their names are:
XML
: for XML that does not require validation during parsing.VALIDXML
: for XML that should be validated during parsing.XHTML
: for XHTML 1.0 or 1.1 templates that do not need validation.VALIDXHTML
: for XHTML 1.0 or 1.1 templates that should be validated during parsing.HTML5
: for HTML5 templates that are well-formed XML documents.LEGACYHTML5
: for HTML5 templates that are not well-formed XML documents, and therefore need a previous preprocessing step for tag balancing, syntax correction, etc.
For parsing templates in these modes, Thymeleaf offers a set of parser implementations that live at the org.thymeleaf.templateparser package.
These parsers come in both SAX and DOM flavours —both validating and non-validating—, and there’s also a nekoHTML-based HTML parser that allows parsing code that is not well-formed XML (for example, with unclosed tags).
By default, all standard modes use SAX parsing, except LEGACYHTML5 which uses nekoHTML.
As for writers, two implementations of ITemplateWriter are provided: one for XHTML and HTML5, and another one for XML. Both live in the org.thymeleaf.templatewriter
package.
4 Creating our own Dialect
4.1. Extrathyme: a website for Thymeland’s football league
Football is a popular sport in Thymeland1. There is a 10-team league going on there each season, and its organizers have just asked us to create a website for it called “Extrathyme”.
This website will be very simple: just a table with:
- The team names.
- How many matches they won, drew or lost, as well as the total points earned.
- A remark explaining whether their position in the table qualifies them for higher-level competitions next year or else mean their relegation to regional leagues.
Also, above the league table, a banner will be displaying headlines with the results of recent matches.
We will use HTML5, Spring MVC and the SpringStandard dialect for our application, and we will be extending Thymeleaf by creating a score
dialect that includes:
- A
score:remarkforposition
attribute that outputs an internationalized text for the Remarks column in the table. This text should explain whether the team’s position in the table qualifies it for the World Champions League, the Continental Play-Offs, or relegates it to the Regional League. - A
score:classforposition
attribute that establishes a CSS class for the table rows depending on the team’s remarks: blue background for the World Champions League, green for the Continental Play-Offs, and red for relegation. - A
score:headlines
tag for drawing the yellow box at the top with the results of recent matches. This tag should support an order attribute with values random (for showing a randomly selected match) andlatest
(default, for showing only the last match).
Our markup will therefore look like this, making use of both th
and score
attributes:
<!DOCTYPE html>

<title>extraThyme: Thymeland's football website</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" type="text/css" media="all"
href="../../css/extrathyme.css"<EMAIL_ADDRESS>

<img src="../../images/extrathymelogo.png"
alt="extraThyme logo" title="extraThyme logo"
<EMAIL_ADDRESS>th:alt-title="#{title.application}"/>

<score:headlines order="random" />

League table for 07 July 2011

Team
Won
Drawn
Lost
Points
Remarks

The Winners (TWN)
1
0
0
3
Great winner!

The First Losers (TFL)
0
1
0
1
Little loser!

The Last Losers (TLL)
0
0
1
0
Big loooooser

(Note that we’ve added a second and third rows to our table, surrounded by parser-level comments
so that our template shows nicely as a prototype when directly opened in a browser.)
4.2. Changing the CSS class by team position
The first attribute processor we will develop will be ClassForPositionAttrProcessor
, which we will implement as a subclass of a convenience abstract class provided by Thymeleaf called AbstractAttributeModifierAttrProcessor
.
This abstract class is already oriented towards creating attribute processors that set or modify the value of attributes in their host tags, which is exactly what we need (we will set a value to the

’s class
attribute.
Let’s have a look at our code:
public class ClassForPositionAttrProcessor
extends AbstractAttributeModifierAttrProcessor {
public ClassForPositionAttrProcessor() {
super("classforposition");
}
public int getPrecedence() {
return 12000;
}
@Override
protected Map<String, String> getModifiedAttributeValues(
final Arguments arguments, final Element element, final String attributeName) {
final Configuration configuration = arguments.getConfiguration();
/*
* Obtain the attribute value
*/
final String attributeValue = element.getAttributeValue(attributeName);
/*
* Obtain the Thymeleaf Standard Expression parser
*/
final IStandardExpressionParser parser =
StandardExpressions.getExpressionParser(configuration);
/*
* Parse the attribute value as a Thymeleaf Standard Expression
*/
final IStandardExpression expression =
parser.parseExpression(configuration, arguments, attributeValue);
/*
* Execute the expression just parsed
*/
final Integer position =
(Integer) expression.execute(configuration, arguments);
/*
* Obtain the remark corresponding to this position in the league table.
*/
final Remark remark = RemarkUtil.getRemarkForPosition(position);
/*
* Apply the corresponding CSS class to the element.
*/
final Map<String,String> values = new HashMap<String, String>();
if (remark != null) {
switch (remark) {
case WORLD_CHAMPIONS_LEAGUE:
values.put("class", "wcl");
break;
case CONTINENTAL_PLAYOFFS:
values.put("class", "cpo");
break;
case RELEGATION:
values.put("class", "rel");
break;
}
}
return values;
}
@Override
protected ModificationType getModificationType(final Arguments arguments,
final Element element, final String attributeName,
final String newAttributeName) {
// Just in case there already is a value set for the 'class' attribute in the
// tag, we will append our new value (using a whitespace separator) instead
// of simply substituting it.
return ModificationType.APPEND_WITH_SPACE;
}
@Override
protected boolean removeAttributeIfEmpty(final Arguments arguments,
final Element element, final String attributeName,
final String newAttributeName) {
// If the resulting 'class' attribute is empty, do not show it at all.
return true;
}
@Override
protected boolean recomputeProcessorsAfterExecution(final Arguments arguments,
final Element element, final String attributeName) {
// There is no need to recompute the element after this processor has executed
return false;
}
}
As you can see, in this case the convenience abstract class we are using abstracts from us any direct modification on the DOM object tree, and instead we just have to create and return a Map with all the new attribute values to be set in the tag.
It is important to note that we are creating this attribute with the ability of executing expressions written in the Standard Syntax (used by both the Standard and the SpringStandard dialects). This is, the ability to be set values like ${var}
, #{messageKey}
, conditionals, etc. See how we use this in our template:

In order to evaluate these expressions (also called Thymeleaf Standard Expressions) we need to first obtain the Standard Expression Parser, then parse the attribute value, and finally execute the parsed expresion:
final IStandardExpressionParser parser =
StandardExpressions.getExpressionParser(configuration);
final IStandardExpression expression =
parser.parseExpression(configuration, arguments, attributeValue);
final Integer position =
(Integer) expression.execute(configuration, arguments);
4.3. Displaying an internationalized remark
The next thing to do is creating an attribute processor able to display the remark text. This will be very similar to the ClassForPositionAttrProcessor
, but with a couple of important differences:
- We will not be setting a value for an attribute in the host tag, but rather the text body (content) of the tag, in the same way a
th:text
attribute does. - We need to access the message externalization (internationalization) system from our code so that we can display the text corresponding to the selected locale.
This time we will be using a different convenience abstract class —one especially designed for setting the tag’s text content—, AbstractTextChildModifierAttrProcessor
. And this will be our code:
public class RemarkForPositionAttrProcessor
extends AbstractTextChildModifierAttrProcessor {
public RemarkForPositionAttrProcessor() {
super("remarkforposition");
}
public int getPrecedence() {
return 12000;
}
@Override
protected String getText(
final Arguments arguments, final Element element, final String attributeName) {
final Configuration configuration = arguments.getConfiguration();
/*
* Obtain the attribute value
*/
final String attributeValue = element.getAttributeValue(attributeName);
/*
* Obtain the Thymeleaf Standard Expression parser
*/
final IStandardExpressionParser parser =
StandardExpressions.getExpressionParser(configuration);
/*
* Parse the attribute value as a Thymeleaf Standard Expression
*/
final IStandardExpression expression =
parser.parseExpression(configuration, arguments, attributeValue);
/*
* Execute the expression just parsed
*/
final Integer position =
(Integer) expression.execute(configuration, arguments);
/*
* Obtain the remark corresponding to this position in the leaguh table.
*/
final Remark remark = RemarkUtil.getRemarkForPosition(position);
/*
* If no remark is to be applied, just return an empty message
*/
if (remark == null) {
return "";
}
/*
* Message should be internationalized, so we ask the engine to resolve the message
* 'remarks.{REMARK}' (e.g. 'remarks.RELEGATION'). No parameters are needed for this
* message.
*/
return getMessage(arguments, "remarks." + remark.toString(), new Object[0]);
}
}
Note that we are accessing the message externalization system with:
return getMessage(arguments, "remarks." + remark.toString(), new Object[0]);
But this in fact is not the only way. As previously mentioned in this guide, the AbstractProcessor
class offers three methods for obtaining externalized messages from attribute processors. The first two make a difference between template messages and processor messages:
protected String getMessageForTemplate(
final Arguments arguments, final TemplateResolution templateResolution,
final String messageKey, final Object[] messageParameters);
protected String getMessageForProcessor(
final Arguments arguments, final String messageKey,
final Object[] messageParameters);
getMessageForTemplate(...)
uses the Template Engine’s currently registered externalization mechanisms to look for the desired message. For example:
- In a Spring application, we will probably be using specific Message Resolvers that query the Spring MessageSource objects registered for the application.
- When not in a Spring application, we will probably be using Thymeleaf’s Standard Message Resolver that looks for
.properties
files with the same name as the template being processed.
getMessageForProcessor(...)
uses a message resolution mechanism created for allowing the componentization -or, if you prefer, encapsulation- of dialects. This mechanism consists in allowing tag and attribute processors to specify their own messages, whichever the application their dialects are used on. These are read from .properties
files with the same name and living in the same package as the processor class (or any of its superclasses). For example, the thymeleafexamples.extrathyme.dialects.score
package in our example could contain:
RemarkForPositionAttrProcessor.java
: the attribute processor.RemarkForPositionAttrProcessor_en_GB.properties
: externalized messages for English (UK) language.RemarkForPositionAttrProcessor_en.properties
: externalized messages for English (rest of countries) language.RemarkForPositionAttrProcessor.properties
: default externalized messages.
Finally, there is a third method, the one we used in our code:
protected String getMessage(
final Arguments arguments, final TemplateResolution templateResolution,
final String messageKey, final Object[] messageParameters);
This getMessage(...)
acts as a combination of the other two: first it tries to resolve the required message as a template message (defined in the application messages files) and if it doesn’t exist tries to resolve it as a processor message. This way, applications can override —if needed— any messages stablished by its dialects’ processors.
4.4. An element processor for our headlines
The third and last processor we will have to write is an element (tag) processor. As their name implies, element processors are triggered by element names instead of attribute names, and they have one advantage and also one disadvantage with respect to attribute processors:
- Advantage: elements can contain multiple attributes, and so your element processors can receive a richer and more complex set of configuration parameters.
- Disadvantage: custom elements/tags are unknown to browsers, and so if you are developing a web application using custom tags you might have to sacrifice one of the most interesting features of Thymeleaf: the ability to statically display templates as prototypes (something called natural templating)
This processor will extend org.thymeleaf.processor.element.AbstractElementProcessor
, but as we did with our attribute processors, instead of extending it directly, we will use a more specialized abstract convenience class as a base for our processor class: AbstractMarkupSubstitutionElementProcessor
. This is a base element processor that simply expects you to generate the DOM nodes that will substitute the host tag when the template is processed.
And this is our code:
public class HeadlinesElementProcessor extends AbstractMarkupSubstitutionElementProcessor {
private final Random rand = new Random(System.currentTimeMillis());
public HeadlinesTagProcessor() {
super("headlines");
}
public int getPrecedence() {
return 1000;
}
@Override
protected List<Node> getMarkupSubstitutes(
final Arguments arguments, final Element element) {
/*
* Obtain the Spring application context. Being a SpringMVC-based
* application, we know that the IContext implementation being
* used is SpringWebContext, and so we can directly cast and ask it
* to return the AppCtx.
*/
final ApplicationContext appCtx =
((SpringWebContext)arguments.getContext()).getApplicationContext();
/*
* Obtain the HeadlineRepository bean from the application context, and ask
* it for the current list of headlines.
*/
final HeadlineRepository headlineRepository =
appCtx.getBean(HeadlineRepository.class);
final List<Headline> headlines = headlineRepository.findAllHeadlines();
/*
* Read the 'order' attribute from the tag. This optional attribute in our tag
* will allow us to determine whether we want to show a random headline or
* only the latest one ('latest' is default).
*/
final String order = element.getAttributeValue("order");
String headlineText = null;
if (order != null && order.trim().toLowerCase().equals("random")) {
// Order is random
final int r = this.rand.nextInt(headlines.size());
headlineText = headlines.get(r).getText();
} else {
// Order is "latest", only the latest headline will be shown
Collections.sort(headlines); headlineText =
headlines.get(headlines.size() - 1).getText();
}
/*
* Create the DOM structure that will be substituting our custom tag.
* The headline will be shown inside a '
' tag, and so this must
* be created first and then a Text node must be added to it.
*/
final Element container = new Element("div");
container.setAttribute("class", "headlines");
final Text text = new Text(headlineText);
container.addChild(text);
/*
* The abstract IAttrProcessor implementation we are using defines
* that a list of nodes will be returned, and that these nodes
* will substitute the tag we are processing.
*/
final List<Node> nodes = new ArrayList<Node>();
nodes.add(container); return nodes;
}
}
Not much new to see here, except for the fact that we are accessing Spring’s ApplicationContext
in order to obtain one of our beans from it (the HeadlineRepository
).
Note also how we can access the custom tag’s order attribute as we would with any other DOM element:
final String order = element.getAttributeValue("order");
4.5. Declaring it all: the Dialect
The last step we need to take in order to complete our dialect is, of course, the dialect class itself.
Dialect classes must implement the org.thymeleaf.dialect.IDialect
interface, but again we will here use an abstract convenience implementation that allows us to only implement the methods we need, returning a default (empty) value for the rest of them.
Here’s the code, quite easy to follow by now:
public class ScoreDialect extends AbstractDialect {
/*
* Default prefix: this is the prefix that will be used for this dialect
* unless a different one is specified when adding the dialect to
* the Template Engine.
*/
public String getPrefix() {
return "score";
}
/*
* Two attribute processors are declared: 'classforposition' and
* 'remarkforposition'. Also one element processor: the 'headlines'
* tag.
*/
@Override
public Set<IProcessor> getProcessors() {
final Set<IProcessor> processors = new HashSet<IProcessor>();
processors.add(new ClassForPositionAttrProcessor());
processors.add(new RemarkForPositionAttrProcessor());
processors.add(new HeadlinesElementProcessor());
return processors;
}
}
Once our dialect is created, we will need to declare it for use from our Template Engine. We will use the additionalDialects
property in the template engine so that we add our dialect to the Spring Standard one (declared by default).
Let’s see how we’d configure this in our Spring bean configuration files:
<bean id="templateEngine"
class="org.thymeleaf.spring4.SpringTemplateEngine">
<property name="templateResolver" ref="templateResolver" />
<property name="additionalDialects">
<set>
<bean class="thymeleafexamples.extrathyme.dialects.score.ScoreDialect" />
</set>
</property>
</bean>
And that’s it! Our dialect is ready to run now, and our league table will display in exactly the way we wanted.
European football, of course ;-)↩


I’ve written a few thousand words on why traditional “semantic class names” are the reason CSS is hard to maintain, but the truth is you’re never going to believe me until you actually try it.
If you can suppress the urge to retch long enough to give it a chance, I really think you'll wonder how you ever worked with CSS any other way.
I’ve written a few thousand words on why traditional “semantic class names” are the reason CSS is hard to maintain, but the truth is you’re never going to believe me until you actually try it.
If you can suppress the urge to retch long enough to give it a chance, I really think you'll wonder how you ever worked with CSS any other way.
I’ve written a few thousand words on why traditional “semantic class names” are the reason CSS is hard to maintain, but the truth is you’re never going to believe me until you actually try it.
If you can suppress the urge to retch long enough to give it a chance, I really think you'll wonder how you ever worked with CSS any other way.
I’ve written a few thousand words on why traditional “semantic class names” are the reason CSS is hard to maintain, but the truth is you’re never going to believe me until you actually try it.
If you can suppress the urge to retch long enough to give it a chance, I really think you'll wonder how you ever worked with CSS any other way.
I’ve written a few thousand words on why traditional “semantic class names” are the reason CSS is hard to maintain, but the truth is you’re never going to believe me until you actually try it.
If you can suppress the urge to retch long enough to give it a chance, I really think you'll wonder how you ever worked with CSS any other way.
I’ve written a few thousand words on why traditional “semantic class names” are the reason CSS is hard to maintain, but the truth is you’re never going to believe me until you actually try it.
If you can suppress the urge to retch long enough to give it a chance, I really think you'll wonder how you ever worked with CSS any other way.


A portable ES6 class for an attractive SVG loading element.
Here’s how to quickly get up and running with a JSephus
element on your webpage.
Besides downloading the minified or standard library from the releases and serving it yourself, you can also make use of the RawGit CDN. For this,
add the following to the <head>
in your html
:
<script type="text/javascript" src="https://cdn.rawgit.com/vankesteren/JSephus/7fdf9127/JSephus.min.js"></script>
The parent element should be an SVG
element. This can either be static on the page, generated by your own code, or by the static method JSephus.createSVG()
. The result should look somewhat like this:
<div class="jsph-container">
<svg id="jsph-svg" viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg">
</svg>
</div>
The element can then be loaded by instantiating a new class and calling the init()
method. The class constructor asks for two parameters: the parent element or its html id
and the desired number of circles.
var jsph = new JSephus("jsph-svg", 12);
jsph.init();
The result: a JSephus
loading element!
Using the method setProperty()
it’s possible to style the element to your heart’s content. Want to know which properties are available? Refer to the documentation.
JSephus
is designed to interact with other code, so the variable jsph
we created is directly linked to the element on the page. To update the loader, simply call the method setProgress()
, with as its argument the proportion of progress obtained. JSephus
does the rest. In fact, you can try the following code in the developer console right now and see the element we created earlier change!
jsph.setProgress(0.8);


| scale_type {ggplot2} | R Documentation |
You will need to define a method for this method if you want to extend
ggplot2 to handle new types of data. If you simply want to pass the vector
through as an additional aesthetic, return "identity"
.
scale_type(x)
x |
A vector |
A character vector of scale types. These will be tried in turn
to find a default scale. For example, if scale_type
returns
c("foo", "bar")
and the vector is used with the colour aesthetic,
ggplot2 will first look for scale_colour_foo
then
scale_colour_bar
.
scale_type(1:5) scale_type("test") scale_type(Sys.Date())


Nayan Doshi is both a student and a mentor at Lambda School. For this build week, Nayan acted as the project manager of this team. As PL, his responsibilities include remaining available for any team members who might encounter issues; checking in everyday with the team to determine whether everyone’s on track; and generally just manage all the chaos of git-flow and collaborative coding!
Brian Abeyta-Pratt is a Unit 1 Web-Development student at Lambda School. For this project, Brian designed a marketing langing page that allows interested users to learn about Spotify Song Suggester. Additionally, Brian built a page that talks about the team that worked on this project.
This paragraph will describe the team member. Lorem ipsum text goes here. Lorem ipsum text goes here. Lorem ipsum text goes here. Lorem ipsum text goes here. Lorem ipsum text goes here..
Chaz Kiker is a Unit 1 Web-Development student at Lambda School. For this project, Chaz designed this About the Team page and one other page. He's super pumped to work on things that don't require layout, but he does love a good flexbox.
Dondré Jordan is a student in Unit 4 of the Data Science track at Lambda School (DS17). Alongside Santiago, Dondré is currently studying Machine Learning Engineering. For this project, Dondré and Santiago used Natural Language Processing and Neural Networks to create Predictive Modles for the Spotify Song Suggester.
This paragraph will describe the team member. Lorem ipsum text goes here. Lorem ipsum text goes here. Lorem ipsum text goes here. Lorem ipsum text goes here. Lorem ipsum text goes here.
This paragraph will describe the team member. Lorem ipsum text goes here. Lorem ipsum text goes here. Lorem ipsum text goes here. Lorem ipsum text goes here. Lorem ipsum text goes here.
I am in Data Science(DS18) full time unit 3, and worked on the endpoints between front end and the the predicting models made by Unit 4 data science team.
This paragraph will describe the team member. Lorem ipsum text goes here. Lorem ipsum text goes here. Lorem ipsum text goes here. Lorem ipsum text goes here. Lorem ipsum text goes here.
I'm in Unit 4 of Data Science (DS17) and project along with Dondre, are in the Machine Learning Engineer we are creating the predictive Models, we are using Natural Language Processing and Neural Networks to create the model
Stephen Gary is a Web Development student at Lambda School. He's in Unit 4 of the Web 33 Track. For this project, Steve worked on the back-end and contributed a web api to the project.
This paragraph will describe the team member. Lorem ipsum text goes here. Lorem ipsum text goes here. Lorem ipsum text goes here. Lorem ipsum text goes here. Lorem ipsum text goes here.


Loading
...
Speed Control
View Settings
Path Length:
Path Delta Size:
Grid Size:
Draw Grid:
Draw Trails:
Camera Controls
Follow Average:
Create Planet
X
Y
Z
Position:
Velocity:
Mass:
Planet Generator
Orbital:
Amount:
Range:
Max Speed:
Max Mass:
Firing Mode
Mass:
Speed:
Saves
Whoops! It seems your browser doesn't support the
<canvas>
element...


Fellowships
Technology
ATHENA
AWIB
INSPIRE
Women Techmakers Scholars Program
Zonta
Adobe Research Women in Technology Scholarship
WeTech Qualcomm Global Scholars Program
Anne-Marie Imafidon Scholarships for Women in Technology
Booking.com Women in Technology Scholarships
Microsoft Women's Fellowship Program
Women Techmakers Scholars Program
Microsoft Scholarship Program
The de Moya Foundation
The Ada Lovelace Fellowship
Biology
Libbie H. Hyman Memorial Scholarship
Dr. Nancy Foster Scholarship
Women Divers Hall of Fame Scholarships
Physical Sciences
Maria Goeppert Mayer Award
The National Physical Science Consortium
The M. Hildred Blewett Scholarship
The Katherine E. Weimer Scholarship
NASA Scholarships and Research Programs
Computer Science
Michigan Council of Women
HP Scholar program
Engineering
Society of Automotive Engineers Women Engineers Scholarship
The de Moya foundation
General Science
The Jeannette Rankin Foundation Scholarships
Society of Women Engineers Scholarships
Women in Engineering and Computer and Information Science
The Association for Women in Science College Scholarship
The Microsoft Research Graduate Women’s Scholarship
Center for Women & Information Technology Scholarship Program
AT&T Labs Fellowship Program
Amelia Earhart fellowship
APS/IBM Research Internship for Undergraduate Women
Mathematics
ACF Woodcock Family Education Scholarship Program


%inherit file="slide.html" /> <%block name="main_content">
The primary source code for ${project.name} is licensed under the Apache 2 open-source license and the code repository is hosted at Github ${project.url}.
The source code documentation is generated using Sphinx and is available at http://frbr-redis-datastore.readthedocs.org/
%block> <%block name="sidebar_content">The Aristotle Django Discovery Layer will be used as an administrative and Solr search front-end to the Redis datastore for Colorado College's Tutt Library. This source code is currently available at https://github.com/jermnelson/Discover-Aristotle.


Spectra visualization, organizer and data preparation from within R or stand-alone. Binary (application) part is installed separately by running spnInstallApp() immediately after installing the package.
| Version: | 1.6.0 |
| Depends: | R (≥ 3.0.0) |
| Imports: | utils, httpuv, jsonlite |
| OS_type: | windows |
| Published: | 2015-07-27 |
| Author: | Teodor Krastev |
| Maintainer: | Teodor Krastev <spectrino at sicyon.com> |
| License: | GPL-2 | GPL-3 [expanded from: GPL (≥ 2)] |
| URL: | http://www.spectrino.com |
| NeedsCompilation: | no |
| CRAN checks: | spectrino results |
| Reference manual: | spectrino.pdf |
| Package source: | spectrino_1.6.0.tar.gz |
| Windows binaries: | r-devel: spectrino_1.6.0.zip, r-release: spectrino_1.6.0.zip, r-oldrel: spectrino_1.6.0.zip |
| OS X binaries: | r-release: not available, r-oldrel: not available |
Please use the canonical form https://CRAN.R-project.org/package=spectrino to link to this page.


Iain Cox - Founder and Manging Director
EA-Optimised was founded in 2011 by Iain Cox, to provide in-depth Enterprise and Solutions Architecture. During the intervening years, we have worked on many Digital Transformations, Mobile and Green-Field projects.
Engaging across a wide section of industry, we primarily focus on Banking, FinTech and the Public Sector. Throughout this journey, two things have become clear; firstly, increasingly, Businesses are moving to “The Cloud”. Secondly, Security is rightly the single issue that today concerns business owners and directors above all other.
Consequently, since 2015, EA-Optimised has specialised in Cloud Migration and Identity and Access Management (IAM), working with organisations such as HSBC, One Family Mutual, The Home Office and Welsh Government.
Our engagements can be anything from an IAM “Go Live Readiness Assessment”, to a complete bespoke enterprise/ cloud and security architecture lasting 18 months or more.
Today, EA-Optimised is partnered with Ping Identity, ForgeRock and Callsign to delver the very best IAM and Cloud experience.


|
|
|
Resourcerver - a
framework for modularized control of *nix applications |
|
|
|
|
|
|
Resourcerver is a set of libraries
and programs used as the control infrastructure of
multi-process applications. An instance of an application
consists of the rservr server daemon and the
processes that server binds together. The server is the
starting point of the application, which in turn spawns each
of the application's component processes, referred to as
"clients." Clients are the 3rd-party functional components
of the application written with the Resourcerver
API to allow them to interface with the rest of the
system. |
|
Although the diagram above makes
rservr appear to be an IPC server like many
others, its purpose is to bind the application together and
regulate its operation. The server daemon regulates the
control IPC of the application by enforcing several
permission sets. Each client process must select a
permission set defining what that client's general purpose
is. These permissions restrict which other types of client
one can communicate with and what actions it can perform on
the server daemon. The system defines permissions for three
main types of client: admin clients, to control the
structure of the application; control clients, to actively
control the processes carried out; and resource clients, to
actually carry out those processes. |
Client processes communicate with
each other using well-defined data bursts referred to as
"commands." Each command has creation and execution
permissions associate with it, as well as compiled-in
actions that are executed at the final destination. The
emphasis here is that the IPC system isn't intended
for data transfer; it's intended for communication to
control the operations of the application as a whole.
|
Resourcerver has an expandable IPC
system to allow 3rd-party command plug-ins. A plug-in is
loaded at run time by both the originator of the command and
the target; by loading a plug-in, potential targets consent
to execution of the associated commands when they arrive.
The core system contains several plug-ins, all of which rely
on hook functions being defined by potential targets.
Commands execute their respective hook functions when they
arrive at a target, providing the function with the
parameters sent with the command. One of the more
illustrative examples is a plug-in library to request
networking actions. One command in the plug-in is a request
for a target to connect to a host; however, the plug-in
doesn't define how that will happen. The implementation of
the action is left up to the target when the plug-in
provides the hook function with the requested parameters of
the connection (such as the address and port.)
|
Resourcerver has many other
features and capabilities not given here. It has extensive
documentation at the main page listed above. This is more of
a random summary of the project as a whole; therefore, it
might not accurately reflect the project's purpose. This is
a large project that can't be explained well in one page.
|


{{+bindTo:partials.standard_nacl_api}}
| struct | DontManage |
| struct | Null |
Special value passed to constructor to make NULL . More... | |
| class | OutException |
This class is used when calling the raw C PPAPI when using the C++ Var as a possible NULL exception. More... |
| Var () | |
| Var (Null) | |
| Var (bool b) | |
| Var (int32_t i) | |
| Var (double d) | |
| Var (const char *utf8_str) | |
| Var (const std::string &utf8_str) | |
| Var (const pp::Resource &resource) | |
| Var (PassRef, const PP_Var &var) | |
| Var (const PP_Var &var) | |
| Var (DontManage, const PP_Var &var) | |
| Var (const Var &other) | |
| virtual | ~Var () |
| virtual Var & | operator= (const Var &other) |
| bool | operator== (const Var &other) const |
| bool | is_undefined () const |
| bool | is_null () const |
| bool | is_bool () const |
| bool | is_string () const |
| bool | is_object () const |
| bool | is_array () const |
| bool | is_dictionary () const |
| bool | is_resource () const |
| bool | is_int () const |
| bool | is_double () const |
| bool | is_number () const |
| bool | is_array_buffer () const |
| bool | AsBool () const |
| int32_t | AsInt () const |
| double | AsDouble () const |
| std::string | AsString () const |
| pp::Resource | AsResource () const |
| const PP_Var & | pp_var () const |
| PP_Var | Detach () |
| std::string | DebugString () const |
| PP_Var | var_ |
| bool | is_managed_ |
A generic type used for passing data types between the module and the page.
| pp::Var::Var | ( | ) |
Default constructor.
Creates a Var
of type Undefined
.
| pp::Var::Var | ( | Null | ) |
| pp::Var::Var | ( | bool | b | ) |
A constructor used to create a Var
of type Bool
.
| [in] | b | A boolean value. |
| pp::Var::Var | ( | int32_t | i | ) |
A constructor used to create a 32 bit integer Var
.
| [in] | i | A 32 bit integer value. |
| pp::Var::Var | ( | double | d | ) |
A constructor used to create a double value Var
.
| [in] | d | A double value. |
| pp::Var::Var | ( | const char * | utf8_str | ) |
A constructor used to create a UTF-8 character Var
.
| pp::Var::Var | ( | const std::string & | utf8_str | ) |
A constructor used to create a UTF-8 character Var
.
| pp::Var::Var | ( | const pp::Resource & | resource | ) | [explicit] |
A constructor used to create a resource Var
.
| pp::Var::Var | ( | PassRef | , |
| const PP_Var & | var | ||
| ) | [inline] |
A constructor used when you have received a Var
as a return value that has had its reference count incremented for you.
You will not normally need to use this constructor because the reference count will not normally be incremented for you.
| pp::Var::Var | ( | const PP_Var & | var | ) | [explicit] |
A constructor that increments the reference count.
| pp::Var::Var | ( | DontManage | , |
| const PP_Var & | var | ||
| ) | [inline] |
This constructor is used when we've given a PP_Var
as an input argument from somewhere and that reference is managing the reference count for us.
The object will not have its reference count increased or decreased by this class instance.
| [in] | var | A Var . |
| pp::Var::Var | ( | const Var & | other | ) |
A constructor for copying a Var
.
| virtual pp::Var::~Var | ( | ) | [virtual] |
Destructor.
| bool pp::Var::AsBool | ( | ) | const |
| double pp::Var::AsDouble | ( | ) | const |
AsDouble() converts this Var
to a double.
This function is necessary because JavaScript doesn't have a concept of ints and doubles, only numbers. The distinction between the two is an optimization inside the compiler. Since converting from a double to an int may be lossy, if you care about the distinction, either always work in doubles, or check !is_double() before calling AsInt().
These functions will assert in debug mode and return 0 if the internal representation is not is_number().
Var
. | int32_t pp::Var::AsInt | ( | ) | const |
AsInt() converts this Var
to an int32_t.
This function is required because JavaScript doesn't have a concept of ints and doubles, only numbers. The distinction between the two is an optimization inside the compiler. Since converting from a double to an int may be lossy, if you care about the distinction, either always work in doubles, or check !is_double() before calling AsInt().
These functions will assert in debug mode and return 0 if the internal representation is not is_number().
Var
. | pp::Resource pp::Var::AsResource | ( | ) | const |
Gets the resource contained in the var.
If this object is not a resource, it will assert in debug mode, and return a null resource.
pp::Resource
that is contained in the var. | std::string pp::Var::AsString | ( | ) | const |
AsString() converts this Var
to a string.
If this object is not a string, it will assert in debug mode, and return an empty string.
Var
. | std::string pp::Var::DebugString | ( | ) | const |
DebugString() returns a short description "Var<X>" that can be used for logging, where "X" is the underlying scalar or "UNDEFINED" or "OBJ" as it does not call into the browser to get the object description.
Var
. This function is used for debugging. | PP_Var pp::Var::Detach | ( | ) | [inline] |
Detach() detaches from the internal PP_Var
of this object, keeping the reference count the same.
This is used when returning a PP_Var
from an API function where the caller expects the return value to have the reference count incremented for it.
| bool pp::Var::is_array | ( | ) | const [inline] |
| bool pp::Var::is_array_buffer | ( | ) | const [inline] |
This function determines if this Var
is an ArrayBuffer.
| bool pp::Var::is_bool | ( | ) | const [inline] |
| bool pp::Var::is_dictionary | ( | ) | const [inline] |
| bool pp::Var::is_double | ( | ) | const [inline] |
This function determines if this Var
is a double value.
The is_double
function returns the internal representation. The JavaScript runtime may convert between the two as needed, so the distinction may not be relevant in all cases (int is really an optimization inside the runtime). So most of the time, you will want to check is_number().
Var
is a double, otherwise false. | bool pp::Var::is_int | ( | ) | const [inline] |
This function determines if this Var
is an integer value.
The is_int
function returns the internal representation. The JavaScript runtime may convert between the two as needed, so the distinction may not be relevant in all cases (int is really an optimization inside the runtime). So most of the time, you will want to check is_number().
Var
is an integer, otherwise false. | bool pp::Var::is_null | ( | ) | const [inline] |
| bool pp::Var::is_number | ( | ) | const [inline] |
| bool pp::Var::is_object | ( | ) | const [inline] |
| bool pp::Var::is_resource | ( | ) | const [inline] |
| bool pp::Var::is_string | ( | ) | const [inline] |
| bool pp::Var::is_undefined | ( | ) | const [inline] |
This function assigns one Var
to another Var
.
| [in] | other | The Var to be assigned. |
Var
. Reimplemented in pp::VarArrayBuffer, pp::VarDictionary, and pp::VarArray.
| bool pp::Var::operator== | ( | const Var & | other | ) | const |
| const PP_Var& pp::Var::pp_var | ( | ) | const [inline] |
This function returns the internal PP_Var
managed by this Var
object.
PP_Var
. bool pp::Var::is_managed_ [protected] |
PP_Var pp::Var::var_ [protected] |


09 Oct 2014
JavaScript promises- basics
Before we get anywhere on promises, paying some tribute to callbacks is necessary evil. Below code uses a native node module (fs
) to read a file and write the content of that file to another destination.
If we think node as a human - we are saying to node, “Hey dude, copy file to destination and once you’re done, execute this function too”. Callbacks are needed to execute logic after some other logic has been executed. This is the holly grail of asynchronous programming.
  I know it’s subjective to state callbacks are evil. But if there is something better out there (such as promises) why not use the new technique.
Promises -simple explanation
What is a promise? It’s an object that can be used to obtain the result of an async calls. Let’s see how this actually looks in code -
It does look a little bit better right? Now we are chaining all the async function together with promises. When ever we return something from a promise -that return will be passed to the next promise as input. But there is a catch - If another promise is returned inside a promise - the promise chain includes the new promise to the chain. As you can see fs.writeFileAsync
returns a promise. But only after that promise is executed - our next promise runs.
In case you were wondering from where fs.readFileAsync
and fs.writeFileAsync
- there is a nice library called bluebird
that can be used to promisify a promise unaware module.
The power of Promise passing
You might say that Promises are just syntactical sugar from the above example but it has way more power than that. Best part about a promise is that it’s an object. What is an object can be passed easily across modules.
Promise spec and implementations
Promises are not yet available natively in JavaScript. ECMA6 will change that soon but until then there are many libraries that support Promises. I personally use bluebird
but there are many others. Many libraries also follow the Promise/A+ specification which provides interoperability for your code. There is also something new around the block called generators.
I have made all the examples I brought up available as a gist. Play around with the code to get a hang of it. I started actually using Promises because of Thinky - an ORM client for RethinkDB. It’s an awesome ORM for RethinkDB, please check it out if you are using RethinkDB with Node.
Till next time mate,
Dulitha
at 06:08


Today we are very excited to announce Xamarin 3, which includes four major advances in mobile development:
Xamarin is proud to unveil the world's best user interface designer for iOS, integrated into both Xamarin Studio and Visual Studio. Build beautiful native user interfaces, including live preview of custom controls, from the comfort of your favorite IDE. Learn more »
Xamarin.Forms is a simple API that allows developers to quickly and easily build native iOS, Android and Windows Phone user interfaces from a single, shared C# codebase. Delivered as a portable class library, Xamarin.Forms includes more than 40 controls and layouts and makes it easy to mix and match your shared UI code with the native, platform-specific user interface capabilities Xamarin has always given you. Learn more »
Xamarin 3 introduces Shared Projects and full support for Portable Class Libraries — two great new code-sharing techniques for cross-platform apps. Learn more »
Xamarin now includes a major user experience refresh, support for NuGet packages, full .NET BCL documentation, source analysis, F# support, streamlined Visual Studio support, and many other great features. Learn more »
These are just four of the hundreds of new features and enhancements in Xamarin 3. Please join us at one of two live webinars this Friday, May 30, where Xamarin co-founders Nat Friedman and Miguel de Icaza will present an overview of Xamarin 3. All webinar registrants will receive a copy of the recording, so please feel free to register even if you can't attend.
We've spent countless hours ensuring that Xamarin 3 is our best release yet, and we can't wait to show you what we've done.


Let IBM Watson analyze the comments from your surveys. Just upload the CSV file containing your survey data, indicate which column has the comments to analyze, and let Watson do the rest!


Blender Today Live #83: Entering BCON4 12 Nov 2019, 14:50 by Bart Veldhuizen 2.81 is around the corner!


Can you easily write 1000 lines of JS and not go mad?
Do you have a team and collaborate effectively?
Yes? Are you actually using JS?
JS runs in a variety of devices and is a cross platform language.
But...
it hasn’t been designed as a large scale application development language
JS doesn't have type system...
No worries!
Typescript allows you to stay in the ecosystem of JS and have a statically typed system at the same time
Enjoy TypeScript:
Code navigation
Statement completion
Safe refactoring
Error checking before running a program
Transpiling latest versions of JS down to older targets
Feel ready to start? Go for it!
Install with npm
Doing this will give you access to tsc command which will run typescript compiler
Convert the code into vanilla JS
run tsc index.ts - tadam index.js was created!
Examples time!
Adding types to your programm
Transpilation capabilities
Classes
Autocomplete You can use autocomplete on the URL class and see your mistakes
Error Correction
Strong typing array
Flexibility
Some cool stuff
:
You can use all the modern language features of TypeScript in your applications, but you can still target and support older browsers.
You can select any version of JavaScript via the --target compiler option that you want, starting with the ECMAScript 3
Fun fact:
Visual Studio Code is written entirely on TypeScript
Bazzinga!


Services
The IAR provides a variety of services for the local Muslim community, including burial services at our Zebulon cemetery, on-site food and catering services through our Al-Ma'idah Kitchen, an Islamic Library, and much more.
Cemetery
Learn more about our Zebulon Cemetery and procedures to follow in case of a death in the family.
Hajj Services
The IAR organizes annual trips to Hajj for any interested parties. Learn more about how to become part of these groups here.
IAR Endowment Fund (Waqf)
Inspired by the historical concept of a Waqf, an inalienable religious endowment, the Islamic Association of Raleigh aims to empower the long term financial health of the greater Raleigh Muslim community and provide halal financing collateral for strategic community development projects.
Social & Welfare
Learn more about the various social, volunteering and humanitarian projects that are organized by the IAR.
Matrimonial Services
The IAR officiates marriages in accordance with Islamic norms and North Carolina state law.
Counseling & Mental Health Referral Services
Information on the latest service initiative from the IAR.
Special Needs Services
IAR is working towards a Silver certification from MUHSEN for providing a friendly environment for special needs families.
Al-Ma'idah Kitchen
Find more information, menu and updated hours of operation for Al-Ma'idah kitchen.
Masjid Library
Learn about the Islamic books collection at the IAR.
Security & Safety
The IAR is committed to providing a safe and secure environment, take some time to learn about the security precautions and what to do in case of an emergency.
Facilities Management
Work orders for the management committee can be placed through SchoolDude (Accessible only to IAR Staff).
Facilities Reservation
Find out how to reserve a classroom, the gym or other facilities at the IAR.
Notary Services
The IAR provides complimentary notary services - learn more about the hours it is available and who to contact.
Environmental
The IAR has started its Recycling Program! Be on the lookout for the blue bins located throughout the premises.
PO Form
The Purchase Order (PO) Form is the new pink sheet replacement. Now fully electronic and automated.


{{ block_num }}
Blocks
{% include "header.html" %}
{{ block_num }} Blocks 19,686 Soon Transactions 7524 Soon Accounts 9843 Soon Actions
| Rank | Name | RES Votes | Account | ||
|---|---|---|---|---|---|
| {{ loop.index }} | {% if producer.team %}{{ producer.team }} | {% else %}Soon | {% endif %} {% if producer['total_votes']|int == 0 %}0.0 % | {% else %}{{ "%0.4s" | format(total_vote|float / producer['total_votes']|float) }} % | {% endif %}{{ producer.owner }} |
| Name | Created | Created Block |
|---|---|---|
| {{ account.account_name }} | {{ account.created }} | {{ account.block_num }} |
| ActionName | TxnID | Authorization | Contract |
|---|---|---|---|
| {{ action.action_name }} | {{ "%0.12s" | format(action.txn_id) }}... | {{ (action.authorization|str_to_json)['actor'] }} | {{ action.contract }} |


Git ProTip Rebase Commits into smaller commits
Yeah, that’s right.  In some cases that can be a good practice. However, when you’re working with a large team, or even on a open source project that has lot’s of contributors that can be a PITA in the long run. Imagine you’re looking for all the changes done while creating a feature, and your history is full of small commits. Finding what you’re looking for is not going to be easy.
So I started digging a way so I can continue on my normal commit rate, but before I push things into my remote(s) I can decide if my code will go divide into all of those commits or if I want to …merge“ them into a single commit.
Let’s look at the rebase command and if you’ll see that is one called —interactive. Apparently the most common use for this one is to squash commits. What I mean by that is that you can pick up all your commits and combine them into larger ones.
-i, --interactive Let the user edit the list of commits to rebase
A word of caution: Only do this on commits that haven’t been pushed an external repository. If others have based work off of the commits that you’re going to delete, plenty of conflicts can occur. Just don’t rewrite your history if it’s been shared with others.


{% csrf_token %}
FeedBack Form
How Do You Rate Your Overall Experience?
Very Bad
Bad
Good
Very Good
Excellent
Email Id*
FeedBack Type*
Restaurant
Online System
Other
Phone Number*
FeedBack Description*
Submit


---
title: About Project AIR™
linkTitle: About
menu:
main:
weight: 10
---
{{< blocks/cover title="Project AIR™ by TIBCO LABS™" image_anchor="bottom" height="min" >}}
UI and more for EdgeX Foundry API's
{{< /blocks/cover >}}
{{< blocks/section color="white" >}}
TIBCO LABS™ is a program designed to provide customers and partners with a mechanism for actively participating in TIBCO’s history of innovation.
TIBCO has always been at the forefront of innovation, and TIBCO LABS™ allows participants to share in this history by collaboratively building solutions to today’s challenging problems, previewing new capabilities, and accessing emerging technologies in areas such as blockchain, AI / ML and IoT.
Through TIBCO LABS™, customers and partners can gain insight into TIBCO’s innovation activities, participate in shaping the form of these activities in the years to come, and benefit from TIBCO’s leadership position in integration and analytics.
{{< blocks/link-down color="info" >}}
{{< /blocks/section >}}
{{% blocks/section %}}
## BSD 3-Clause License
Copyright © 2020 TIBCO Software Inc.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
3. Neither the name of TIBCO Software Inc. nor the names of any contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.


@JCutrell @wycats@tenderlove@skylight insanely awesome that you can see two awesome rails celebrities rubbing elbows at railsconf. :) Jared Smith sublimecoder
RT @tenderlove: It’s really awesome to be on the Rails core team and have no idea that Action Cable existed until today! #RailsConf humbledaisy humbledaisy
@saltnburnem Just came from RailsConf. Your JS foo will serve you well in all your future dealings. ConfIQ Reviews confiq_reviews
@jnanney Jim, love to hear your RailsConf experience in a quick review!
We donate $5 per review to Nepal relief.
https://t.co/3UtgY6H2UL ConfIQ Reviews confiq_reviews
@nellshamrell Nell, we'd love to hear about your RailsConf experience!
We donate $5 per review to Nepal relief.
https://t.co/3UtgY6H2UL ConfIQ Reviews confiq_reviews
@courteneyervin Courteney, we'd love to hear how speaking at RailsConf was!
https://t.co/3UtgY6H2UL
And we'll donate $5 to Nepal relief! ConfIQ Reviews confiq_reviews
@jessicag Jessica, we'd like to hear about your experience at RailsConf!
We donate $5 per review to Nepal relief.
https://t.co/3UtgY6H2UL ConfIQ Reviews confiq_reviews
@allielarson1212 How was RailsConf? Love to hear about it in a quick review.
We'll donate $5 to Nepal relief too!
https://t.co/3UtgY6H2UL ConfIQ Reviews confiq_reviews
@erniemiller Ernie, we'd love to hear about your experience at Rails Conf!
Donating $5 per review to Nepal relief.
https://t.co/3UtgY6H2UL Peter Wagenet wagenet
@genericsteele Eric, love to capture your experience at Rails Conf in a review.
We'll donate $5 to Nepal relief.
https://t.co/3UtgY6H2UL ConfIQ Reviews confiq_reviews
@a_patil Amol, loved your tweets from RailsConf. Can we get a quick review?
We donate $5 per review to Nepal relief.
https://t.co/3UtgY6H2UL ConfIQ Reviews confiq_reviews
@chance Awesome. We'd love to capture that sentiment in a quick review!
We'll donate $5 per review to Nepal relief.
https://t.co/3UtgY6H2UL ConfIQ Reviews confiq_reviews
@teoljungberg That hashtag cracked me up! We'd love to hear about your experience at Rails Conf. Thanks Teo!
https://t.co/3UtgY6H2UL ConfIQ Reviews confiq_reviews
@mattlarraz Matt, how was RailsConf? Can we get a quick review?
We're donating $5 per review to Nepal relief too.
https://t.co/3UtgY6H2UL ConfIQ Reviews confiq_reviews
@DrSayre Love to capture your experience at Ruby Conf in a quick review!
We donate $5 per review to Nepal relief.
https://t.co/3UtgY6H2UL ConfIQ Reviews confiq_reviews
@JCutrell Jonathan, love to hear about Rails Conf experience in a review.
We donate $5 per review to Nepal relief.
https://t.co/3UtgY6H2UL Peter Harkins pushcx
@chandracarney We'd love to hear about your experience speaking there!
We donate $5 per review to Nepal relief.
https://t.co/3UtgY6H2UL Jack Danger jackdanger
@elpapapollo Jeremy, how was RailsConf? Love to capture your experience!
We donate $5 per review to Nepal relief.
https://t.co/3UtgY6H2UL Dave Moore davemoore_io
@veverkap hope you had a safe trip back from Railsconf! Thanks again for taking the time to talk, I hope we can get something rolling! ConfIQ ConfIQ_HQ
@amcaplan Ariel, how was RubyConf? Love to hear about in a review.
We're donating $5 per review for Nepal relief.
https://t.co/3UtgY6H2UL Manuel Vidaurre mvidaurre
@BreeThomas33 Bree, how was your Ruby Conf experience? Love a review!
Will donate $5 per review to Nepal relief.
https://t.co/3UtgY6H2UL Daniel Spector danielspecs
@williamcodes Sorry I don't! I know he's from Jacksonville but I can't remember his name at all. Does @railsconf have a list of attendees? ConfIQ Reviews confiq_reviews
@esbanarango Esteban, love to about your experience at RubyConf review!
We donate $5 per review to Nepal relief.
https://t.co/3UtgY6H2UL César Andreu CesarAndreu
@arthurnn Arthur, we'd love to capture that sentiment in a quick review!
We donate $5 per review to Nepal relief.
https://t.co/3UtgY6H2UL Pablo Peña Pablo_Script_
What Comes After MVC—RailsConf 2015
https://t.co/FGnXDBh7hL
Great tips for controlling complexity in large apps, w/ examples in Ruby/Rails. Jacinda Zhong jacindazhong
@CraigBuchek Thanks so much for the great HTTP lab @railsconf 2015! I learned a ton! ConfIQ Reviews confiq_reviews
Better later than never, just saw @tenderlove#Railsconf 2014 closing keynote.  Joe Rafaniello jrafanie
@stevenharman Nice meeting you at #railsconf.@bignerdranch is legit! Hope the photography biz goes well too. Automate, automate, automate! Drew Haines drewhaines3
@searls your RailsConf talk was super awesome! ✨ Cesar CesarRivascivil
RT @heroku: Come to our Open Source office hours at the Heroku #railsconf booth. We've got project maintainers you bring the questions, 4:1… Cesar CesarRivascivil
RT @rails: A bunch of member of the @rails team will attend @railsconf next week. Don't be shy and come to meet us. Cesar CesarRivascivil
.@sandimetz's Railsconf talk was at once inspiring and overwhelming. I have _so_ much to learn. The talk is an absolute must-watch. Chandra Carney chandracarney
RT @KentBeck: re: "politicizing" my @railsconf keynote by mentioning sexism--if i hadn't mentioned sexism, that would also have been a poli…  Javier Cuevas javier_dev
RT @sarahmei: Code isn't the only way to contribute to an open source community. #railsconf http://t.co/BKLP58eTM3 Julian Simioni juliansimioni
RT @KentBeck: re: "politicizing" my @railsconf keynote by mentioning sexism--if i hadn't mentioned sexism, that would also have been a poli… Mark Doerr Jailyard90grad
Two days of staying in my room, speaking to nobody: exactly what I needed after #railsconf. Now looking forward to 3 talkative days in DC! Nicolas Barrera DrummerHead
RT @tenderlove: It’s really awesome to be on the Rails core team and have no idea that Action Cable existed until today! #RailsConf Boca JS BocaJavaScript
RT @tenderlove: It’s really awesome to be on the Rails core team and have no idea that Action Cable existed until today! #RailsConf Tony Han tony612_han
RT @railsconf: Kansas City, MO: home of barbecue, jazz, and RailsConf 2016! We hope to see you there from May 4-6, 2016. Sigfrid Dusci sigfridDusci
RT @railsconf: Kansas City, MO: home of barbecue, jazz, and RailsConf 2016! We hope to see you there from May 4-6, 2016. Brandon Mathis ᵔᴥᵔ BrandonMathis
Sad that I missed out again on #RailsConf again this year. I’m gonna pledge to myself that I make it out to the 2016 one. TriangleRuby TriangleRb
RT @dhh: Love how many new people are here for their first #RailsConf. Every community needs new blood infused regularly to stay healthy. Olivier Lacan olivierlacan
RT @KentBeck: re: "politicizing" my @railsconf keynote by mentioning sexism--if i hadn't mentioned sexism, that would also have been a poli… M. Reza Padillah Anaksmkti
RailsConf 2015 Telah Usai, Ada Apa Disana?: RailsConf 2015 merupakan konferensi tahunan para programmer Ruby o... http://t.co/cgGjUzRtZ2 Stephania Gambaroff gambaroff
RT @tjgrathwell: The problem with the #railsconf 2015 logo is that if you crop it a little bit you accidentally Rail Scone http://t.co/Nq2a… Olivier Lacan olivierlacan
RT @tjgrathwell: The problem with the #railsconf 2015 logo is that if you crop it a little bit you accidentally Rail Scone http://t.co/Nq2a… Kashchenko Maxim mkaschenko
Loving this book that was in my #railsconf loot box!!! So. Much. 80's Radness. http://t.co/mf94r42hUn Richard Feldman rtfeldman
RT @tjgrathwell: The problem with the #railsconf 2015 logo is that if you crop it a little bit you accidentally Rail Scone http://t.co/Nq2a… Travis Grathwell tjgrathwell
The problem with the #railsconf 2015 logo is that if you crop it a little bit you accidentally Rail Scone http://t.co/Nq2afWMmDR Ariel Caplan amcaplan
Worst thing about #railsconf: meet cool people, forget their names, can't follow them on Twitter 😭 Lance Gleason lgleasain
@jessicard the rose one is one of my faves! also the boscia one is hard to apply and kind of gooey but saved me during my railsconf hangover Arthur Neves arthurnn
I am surprised that there was no talk/discussion about strong_parameters on #railsconf. I think the API is weak, and most people agree. oaxaca.rb oaxacarb
This week in Rails: RailsConf 2015 Edition - ZOMG! Hello everyone, it is Godfrey here (it's been a while!), delive... http://t.co/NrNJsZSRYZ LogicalBricks logicalbricks
This week in Rails: RailsConf 2015 Edition - ZOMG! Hello everyone, it is Godfrey here (it's been a while!), delive... http://t.co/L2ty5j9DBb tonyta tonyta
RT @sandimetz: I'm deeply touched by the response to my 'Nothing is Something' #railsconf talk.
This
community
rocks.


FAQ
“It’s actually PPI, not DPI!”
There are arguments for both terms. In general PPI is a bit more correct but DPI is more commonplace, hence its usage on this site (also ppi.lv wasn’t available :P).
If you are interested, you can read more on this in the Wikipedia article about Pixel Density.
In more recent terminology, DPI is often used for the actual device pixels and Dots Per Pixel (dppx) for the amount of device pixels per CSS pixel (e.g. in Retina displays this will be 2).
What does DPI/PPI mean?
In the context of screens, DPI (Dots Per Inch) or PPI (Pixels Per Inch) refer to the number of device pixels per inch, also called “pixel density”. The higher the number, the smaller the size of the pixels, so graphics
are perceived as more crisp and less pixelated. The concept of DPI is also used in printing, although the dots and their formation is
different there. In general, good quality printing uses around 300dpi which is higher than most displays.
That’s why vector-based or high-res bitmap graphics usually look more crisp when printed.
What’s the point of this site?
I got fed up with marketing speak and buzzwords often used to create the impression that a display is much better than it actually is,
so I wanted to help people decide what to get with the actual numbers at hand, through an easy to use web app. Also, it was kinda fun to make. :-)
Higher DPI = Crisper graphics?
DPI/PPI is a crucial metric for getting an idea of how crisp a display really is, but it’s only one factor among many.
Besides the technical ones (which would need an entire book), there are also those that depend on human nature.
Firstly, viewing distance can affect the perceived pixel size. Therefore, if a cell phone and a large screen have the same pixel density,
the large screen will appear more crisp, as it’s typically viewed from a longer distance. This is why large screens can get away with considerably lower pixel densities.
In the print world, that’s why posters are printed at a much lower dpi than magazines.
Secondly, our eyes cannot discern the difference between pixel densities above a certain threshold.
This threshold seems to vary depending on the source, but here are a few good articles if you’re interested:


| old first row first cell content | old first row second cell content |
| old second row first cell content | old second row second cell content |
| old second row first cell content | old second row second cell content |
this is the old text. I wouldn't like to update it. new span
This was missing in old text.| new first cell content | new second cell content |
| new second row first cell content | new second row second cell content |
this is new text added.
this is the new text. I would like to update old. and i'm adding some extra text here.
here i added some extra spanthird option. this is new span added in the li option.


{% extends "articles/base.html" %} {% block body_class %}index{% endblock %} {% block content %}
Just how self-centred is that Comment Is Free article you're reading?
Paste in the link below and see how it stacks up against the rest.
Remember this is not a game – there are no winners and we all lose. If however you're curious as to what articles have the highest scores, here you go:
| Article | Score |
|---|---|
| {{article.title}} by {{article.author}} | {{article.score | floatformat:2}} |
The latest articles submitted to Comment Is Mee:
| Article | Score |
|---|---|
| {{article.title}} by {{article.author}} | {{article.score | floatformat:2}} |


Profile Settings
Your Profile Information
Your name may appear around here where you are mentioned. You can change or remove it at any time.
All of the fields on this page are optional and can be deleted at any time, and by filling them out, you're giving us consent to share this data wherever your user profile appears.
Account Settings
After changing your username, your old username becomes available for anyone else to claim.
Once you delete your account, there is no going back. Please be certain.
Security Settings
Two-factor authentication adds an additional layer of security to your account by requiring more than just a password to log in.
This is a list of devices that have logged into your account. Revoke any sessions that you do not recognize.
-
More Info
San Francisco City 190.24.335.55
Your current session seen in United States
Notification Settings
Receive security alert notifications via email
-
Comments
-
Updates From People
-
Reminders
-
Events
-
Pages You Follow
Billing Settings
You have not added a payment method
You have not made any payment.


The text size can be set with a vw unit, which means the "viewport width". Viewport is the browser window size. 1vw = 1% of viewport width. If the viewport is 50cm wide, 1vw is 0.5cm.


Agilent 3352X Series Instrument Driver Readme
To rate this instrument driver, go to the driver download page on the Instrument Driver Network.
1. Overview
Instrument Driver Technology: LabVIEW Plug and Play (project-style)
Manufacturer: Agilent
Supported Language(s): LabVIEW
Supported Model(s): 33521A, 33522A, 33522B, 33521B, 33520B, 33519B, 33512B, 33511B, 33510B, 33509B, 33611A, 33612A, 33621A, 33622A
Model(s) Tested: 33522A, 33522B, 33622A
Interface(s): Ethernet, USB
Firmware Revision(s) Tested: 1.10-1.19-8.88-45-00 (33522A), 2.03-1.19-2.00-52-00 (33522B), A.01.08-2.25-03-64-02 (33622A)
Certified: Yes
NI Supported: Yes
Source Code Available: Yes
Driver Revision: 1.2.2
Original Release Date: 08/23/2012
Current Revision Date: 04/2015
2. Required Software
Some software components need to be installed before using this
instrument driver. The minimum versions of these components are listed
below, and can be downloaded from the Download Site.
VISA 5.0 or later
Third-party installation Agilent IO Libraries
Refer to the LabVIEW Help for more information about software requirements. You access the LabVIEW Help by selecting Help»Search the LabVIEW Help.
3. Known Issues
To report issues or provide feedback about this instrument driver,
please send an email to<EMAIL_ADDRESS>4. Revision History
The latest version of this and other LabVIEW and LabWindows/CVI
instrument drivers can be downloaded at the Instrument Driver Network.
REV 1.0, 01/25/2011
Created by: Xueting Tan, Shanghai, China.
Original release.
REV 1.0.1, 03/30/2011
Modified by: Xueting Tan, Shanghai, China.
Modified VI:
Create Arbitrary Waveform.vi: modified parsing of data from list of comma separated numbers to data represented in the "IEEE binary block" for arbitrary waveforms to support points over 65K
REV 1.0.2, 12/16/2011
Modified by: JP, Austin, Texas
Modified: Continuous Initiate.vi
Added a blank line and removed the %s string format specifier from the multi-line string constant in the Pick-Line function to correct the indexing and invalid character issue.
Added a space before the true and false string constants in the Append True/False String function to address the missing space in SCPI command issue.
REV 1.0.3, 08/23/2012
Modified by: Xueting Tan, Shanghai, China.
Modified VI:
Configure Standard Waveform.vi:
Modified the logic for Phase Angle and Frequency to address issue of the commands not being set for the Pulse Waveform function.
REV 1.1.0, 10/30/2012
Modified by: Xueting Tan, Shanghai, China.
Add following VIs to support 33522B, 33521B, 33520B, 33519B, 33512B, 33511B, 33510B and 33509B:
Configure Arbitrary Waveform Frequency.vi
Configure Arbitrary Waveform Skew.vi
Configure Dual Arbitrary Waveform.vi
Configure Marker.vi
Create Arbitrary Waveform For Two Channels.vi
REV 1.1.1, 11/30/2012
Modified by: Xueting Tan, Shanghai, China.
Modified:
Configure Sync Output - addressed bug that prevented CH1 from being selected on the instrument. Update included adding the decrement function to the Channel wire before the Pick Line function.
REV 1.2, 04/23/2014
Modified by: Xudong Yong, Shanghai, China.
Add following VIs to support 33611A, 33612A, 33621A, 33622A:
Configure Display Units.vi
Configure Display View.vi
Configure Modulation Input.vi
Configure Modulation Phase Advanced.vi
Configure Arbitrary Waveform Phase.vi
Configure Trigger Advanced.vi
Get Security Count.vi
Agilent 3352X Series Arbitrary Waveform Phase.vi
Modified VIs:
Configure Modulation (Binary-Phase-Shift Keying).vi - Modify the range of Modulation Phase Shift
Configure PRBS Waveform.vi - Modify the range of Data Sequence and Edge Time
Configure Standard Waveform Advanced (Pulse).vi - Modify the range of Pulse Width, Lead Edge and Trail Edge
Configure Modulation (Pulse Width).vi - Modify the range of PWM Deviation Duty Cycle
Configure Sample Rate Coupling.vi - Modify the range of Couple Offset
Configure Modulation (SUM).vi - Add items for SUM Source
Configure Burst.vi - Add notes in Burst Internal Period
Configure Arbitrary Waveform Frequency.vi - Modify the range of Arbitrary Waveform Frequency
Configure Arbitrary Waveform.vi - Modify the range of Sample Rate
Confiugre Standard Waveform.vi - Modify the range of Frequency/Sample Rate/Bandwidth, and add item for Angle Unit
REV 1.2.1, 05/10/2014
Modified by: Zhifan Su, Shanghai, China.
Fixed bug in Create Arbitrary Waveform Sequence.vi, added item "Once Wait Trig" to the "Play Control".
REV 1.2.2, 04/2015
Modified by: National Instruments
Initialize - Updated to include Keysight Technologies along with Agilent as a Manufacturer


While my sister and I were growing up in our parents care, we never really suspected anything bad of them. I had always noticed that it was kinda weird that their entire paychecks would disappear so rapidly, and we would have no food or clothes to show for it. My parents would also always be up at all hours of the night, they would be cleaning or working on the computer, always doing some sort of project.  When I was 10 and my sister was 12, my sister and mom got into and argument once. My sister was terribly upset with my parents because we never had any money and we never went any where as a family and they were always angry.
About two years later, my mother decided to run away with her new boyfriend. After she left, my dad began to get very sloppy with his habit. After awhile, I knew they had had a drug problem for quite awhile now. I still needed to hear it from them though. I asked my dad to tell the truth about it because I simply had to know.
A month later, I found out that my sister had recently experimented with the drug and showed no signs of wanting to stop any time soon. I could not believe that my entire family was so weak and had been cut so deeply by this drug many like to call shards.
My dad could no longer take care of my sister and I. I moved in with my aunt and uncle, my sister ended up on the streets. She bounced from one friends house to another, I don't know how she’s doing, I haven't heard from her. My mom doesn't really call, doesn't help, and my dad recently went into a program, I hope he does good.
I have experimented with a few other drugs, I have not tried meth though, but with how much I was exposed to the habit and the heartbreak and lies and deceit that comes from it, I think I've seen enough to know that its bad news.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


Son of former Derby County man linked with Premier League move
The 20-year-old winger has apparently been catching the eye with his performances this season
by Chris WatsonThe son of former Derby County midfielder Lars Bohinen is being linked with a move to the Premier League.
Emil Bohinen has apparently been catching the eye with his performances this season.
According to Sky Sports, Brighton & Hove Albion are "among a number of Premier League clubs" keen on the 20-year-old winger.
Bohinen junior currently plays for Stabaek JF in the top flight of Norwegian football.
Latest Derby County news and views
- 'Frank owes us' - Derby County boss Phillip Cocu urged to sign highly-rated Chelsea star
- Derby County transfer news: Rams linked again with Celtic star
- 'Legend like me' - Robbie Savage reveals real reason behind shock playing career revival
- Leeds United linked with January transfer window swoop for ex-Derby County man
- Bobby Davison landmark, Paul Goddard shock and Derby County's Euro delight
- The Wayne Rooney news Derby County fans will want to hear
- Son of former Derby County man linked with Premier League move
The youngster is described as "one of the country's brightest prospects".
The Norway Under-21 international has nearly 50 senior appearances under his belt. He has scored four goals and provided six assists in 28 league outings this season.
Bohinen senior made 61 appearances for Derby after joining from Blackburn Rovers for £1.45m in March 1998.
He also played for Nottingham Forest during his time in English football.


Perth Glory forward Bruno Fornaroli becomes the fastest player to reach 50 A-League goals
History is made.
Perth Glory forward Bruno Fornaroli has become the fastest player to reach 50 A-League goals thanks to his first half strike against Sydney FC.
Stream every game of the 2019/20 Hyundai A-League season LIVE & On-Demand with Kayo Sports. Get your 14 day free trial & start streaming instantly >
The former Melbourne City front man left Sky Blues shot stopper Andrew Redmayne stranded by finding the back of the net with an exquisite volley on the half-turn.
With halftime just around the corner and his time already trailing, Glory midfielder Neil Kilkenny launched a long ball forward which found the head of Joel Chianese on the edge of the Sydney box.
MORE FOOTBALL NEWS
WATCH: Two minutes of madness dumps A-League classic on its head
SCORES ONE, SAVES ONE: Phoenix captain’s PL-calibre moment in magic 5-min spell
‘IS THAT A SERIOUS QUESTION? F*** SAKE’: Wanderers coach explodes over penalty call
‘FOR THE BIGGEST CLUB IN THE COUNTRY... PATHETIC’: Victory dubbed ‘rubbish’ in all-time Bozza rant
Chianese’s perfectly-cushioned header back inside put the ball on a plate for the onrushing Foraroli who made no mistake with the first-time finish.
The record-breaking goal not only means a lot on a personal level for the 32-year-old Uruguayan but it also levelled things up for Perth in their grand final rematch with Sydney FC.


http://www.susangranger.com/
Susan Granger's review of "WHAT LIES BENEATH" (DreamWorks)
The greatest mystery in this psychological thriller is why the trailer gives away so many of the carefully designed plot twists and turns.  That having been said, compliments are due to director Robert Zemeckis ("Forrest Gump") who uses technology to enhance his craftsmanship, rather than substitute for it; to Harrison Ford who has the courage and conviction to play a believably flawed, obsessed hero; and to Michelle Pfeiffer who manages to be wet and wild at the same time. They're a supposedly happily married couple - he's a respected geneticist and she was a concert cellist - who live in a beautiful house on a lake in bucolic Vermont next to some provocative neighbors. She has a daughter (Katharine Towne) from a previous marriage whom they've just packed off to college when she hears mysterious, whispering voices and spies a wraithlike ghost in their home. Is it a poltergeist or her repressed anxieties? "Something is happening in our house," she wails, oozing paranoia and vulnerability. Indeed it is. It seems her husband had an affair with a suicidal woman that may have come back to haunt him. But why? And what lies beneath? Obviously influenced by Alfred Hitchcock's penchant for scary elements that emerge credibly, Robert Zemeckis adds complicated camera moves and a unique ability as an illusionist, which he uses to full advantage during the final half-hour. While Harrison Ford conveys his usual stalwart strength which, in this case, has creepy overtones, it's Michelle Pfeiffer who carries Clark Gregg's somewhat predictable screenplay, adapted from his story with Sarah Kernochan. On the Granger Movie Gauge of 1 to 10, "What Lies Beneath" is a menacing, ominous 6 - if you like the strange and supernatural.
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


Ian Sinclair Elite Training
Home
My Journey
Training Focus
Pricing
Book a Session
Book a Session By Emailing Coach Sinclair
SUBMIT
Error
Sorry there was an error sending your form.
Success! Your Message was Sent Successfully.


Toggle navigation
Home
Background
GitHub
About Me
Spencer Moody's Portfolio
Week One Independent Project


Yao Lee
2caeb534-46a1-46f1-8582-8a35cfe0fc39
Vegetable
This is copied by the handsome.
Yao Lee
2caeb534-46a1-46f1-8582-8a35cfe0fc39
Vegetable
This is copied by the handsome.
Yao Lee
2caeb534-46a1-46f1-8582-8a35cfe0fc39
Vegetable
This is copied by the handsome.
Yao Lee
2caeb534-46a1-46f1-8582-8a35cfe0fc39
Vegetable
This is copied by the handsome.
Yao Lee
2caeb534-46a1-46f1-8582-8a35cfe0fc39
Vegetable
This is copied by the handsome.
Yao Lee
2caeb534-46a1-46f1-8582-8a35cfe0fc39
Vegetable
This is copied by the handsome.


Why? - I wanted to show images on the wall where you can keep dragging without boundary and I cannot a good one so I decided to build my own.
What is it? - It is simple and generic plugin wherever you drag, it will fill the space with tiles and you can place everything in it.
How is it useful? - At first I only used it for my own used (The Inifinite Image Wall) and later I decided to share it on Github so I tried to come up with a few examples on how to use it and I realized it is a very simple plugin and yet can tranform into many useful tools with little bit of your imagination. Below are some tools I created form the eco-Scroll.


LET HIM HAVE IT A film review by Frank Maloney Copyright 1992 Frank Maloney
LET HIM HAVE IT is a movie directed by Peter Medak and written by Neal Purvis and Robert Wade. It stars Chris Eccleston, Paul Reynolds, Tom Courtenay, Eileen Atkins, Clare Holman, and Tom Bell. Rated R -- due to violence and strong language.
LET HIM HAVE IT presents a true story of the notorious Craig-Bentley murder trial in Great Britain of 1952. It is a gripping, engrossing attack on miscarried justice and the death penalty. Peter Medak previously directed THE KRAYS, another true story set in the drab Fifties, the endless row houses, and illuminated by the movies-driven gangster obsessions. But in terms of style and technique LET HIM HAVE IT goes off in quite a different direction. It is less showy, more naturalistic, more a character study than a case study.
The case has apparently been a controversial story in Britain for four decades. There have been, I understand, a West End play, a shelf of books, several TV documentaries, a song by Elvis Costello, and a petition drive to clear Derek Bentley's name. The Home Office recently decided to reopen the file.
At issue is whether Bentley should have been hanged for the murder of a police officer during a bungled break-in. Bentley's pal Chris Craig pulled the trigger and Bentley was already under technical arrest at the time. But Bentley was 19 and could be hanged, whereas Craig was 16 and too young to die; instead, he served 10 years in prison. Adding to the controversy was the fact that Bentley had a very limited intelligence, rated no more than an 11-year-old's.
It was Bentley's words "Let him have it, Chris" when the police officer demanded Craig's gun that hanged him. The prosecution said it meant "Open fire" and the defense said it meant "Surrender the gun." Craig let him have it and wounded that officer and twenty minutes later shot another in the head.
Medak builds a case that leaves no doubt in the viewer's mind that Bentley should never have been tried, much less executed. He follows Bentley's life episodically from the time he as a child was buried alive in building rubble during the bombing of London, an experience Medak implies left Bentley with epilepsy or other brain damage or both. He builds up a sympathetic portrait of a young man who needed help more than hanging.
One of the glories of this film is its superb ensemble cast. Chris Eccleston and Paul Reynolds could not have been better as Bentley and Craig, respectively; Eccleston commands the screen in an extraordinary way for a newcomer, and Reynolds with his weird, sardonic, leary grin and trickster energy is impressive as the angry, playful baby-gangster. The elder Bentleys are played by Tom Courtenay and Eileen Atkins in memorable, moving portrayals of loving people struggling against currents totally out of their depths. These four are supported by rich performances from veterans of the Swinging London era of the Sixties -- Clive Revill, Murray Melvin, Michael Gough, Ronald Fraser, and Tom Bell. Clare Holman as Bentley's sister is warm, caring, protective.
In addition, Medak, his cinematographer Oliver Stapleton, and the rest recreate violence-weary post-War Britain with amazing completeness and conviction.
The script by Neal Purvis and Robert Wade concentrates more on the personal story of the Bentley family than on the sociology, psychology, jurisprudence, or politics of the case. We have wonderful portraits, but we are left wondering why Bentley was hanged. Were the police determined to have a blood sacrifice to expiate the death of the officer? Did the Home Secretary connive at Bentley's death? Did the judge intervene unfairly in his summation to the jury? Maybe these are the questions that cannot be answered. So we come away vastly moved, saddened, repulsed by justice too swift and too final, deeply impressed by a powerful film and a strange story.
I hope you get a chance to see LET HIM HAVE IT. In the Seattle area it is playing at the Metro Cinema. I recommend it at any price. And if anyone in the U.K. wants to write me about how the film was received there, I'd appreciate it.
-- Frank Richard Aloysius Jude Maloney .
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