MobX
is a simple, scalable and battle tested state management solution.
This tutorial will teach you all the important concepts of MobX in ten minutes.
MobX is a standalone library, but most people are using it with React and this tutorial focuses on that combination.
The core idea
State is the heart of each application and there is no quicker way to create buggy, unmanageable applications than by producing an inconsistent state or state that is out-of-sync with local variables that linger around. Hence many state management solutions try to restrict the ways in which you can modify state, for example by making state immutable. But this introduces new problems; data needs to be normalized, referential integrity can no longer be guaranteed and it becomes next to impossible to use powerful concepts like classes in case you fancy those.
MobX makes state management simple again by addressing the root issue: it makes it impossible to produce an inconsistent state. The strategy to achieve that is simple: Make sure that everything that can be derived from the application state, will be derived. Automatically.
Conceptually MobX treats your application like a spreadsheet.
- First of all, there is the application state. Graphs of objects, arrays, primitives, references that forms the model of your application. These values are the “data cells” of your application.
- Secondly there are derivations. Basically, any value that can be computed automatically from the state of your application. These derivations, or computed values, can range from simple values, like the number of unfinished todos, to complex stuff like a visual HTML representation of your todos. In spreadsheet terms: these are the formulas and charts of your application.
- Reactions are very similar to derivations. The main difference is these functions don't produce a value.  Usually this is I/O related. They make sure that the DOM is updated or that network requests are made automatically at the right time.
- Finally there are actions. Actions are all the things that alter the state. MobX will make sure that all changes to the application state caused by your actions are automatically processed by all derivations and reactions. Synchronously and glitch-free.
A simple todo store...
Enough theory, seeing it in action probably explains more than carefully reading the above stuff. For originality's sake
let's start with a very simple ToDo store.
Note that all the code blocks below are editable,
So use the run code buttons to execute them.
Below is a very straightforward TodoStore
that maintains a collection of todos.
No MobX involved yet.
We just created a todoStore
instance with a todos
collection.
Time to fill the todoStore with some objects.
To make sure we see the effects of our changes we invoke todoStore.report
after each change and log it.
Note that the report intentionally always prints the first task only.
It makes this example a bit artificial, but as we will see later on it nicely demonstrates that MobX's dependency tracking is dynamic.
Becoming reactive
So far, there is nothing special about this code.
But what if we didn't have to call report
explicitly,
but that we could declare instead that it should be invoked upon each relevant state change?
That would free us from the responsibility of calling report
from any place in our code
base that might affect the report. We do want to be sure the latest report is printed.
But we don't wanna be bothered by organizing that.
Luckily that is exactly what MobX can do for us. Automatically execute code that solely depends on state.
So that our report
function updates automatically, just like a chart in a spreadsheet.
To achieve that, the TodoStore
has to become observable so that MobX can track all the changes that are being made.
Let's alter the class just enough to achieve that.
Also, the completedTodosCount
property could be derived automatically from the todo
list. By using the observable
and computed
annotations we can introduce observable properties on an
object.
In the example below we use makeObservable
to show the annotations explicitly,
but we could have used makeAutoObservable(this)
instead to simplify this process.
That's it! We marked some properties as being observable
to signal MobX that these values can change over time.
The computations are decorated with computed
to identify that these can be derived from the state and caches as long as no underlying state changed.
The pendingRequests
and assignee
attributes are not used so far,
but will be used later in this tutorial.
In the constructor we created a small function that prints the report
and
wrapped it in autorun
. Autorun creates a reaction that runs once, and after
that automatically re-runs whenever any observable data that was used inside the function changes.
Because report
uses the observable todos
property, it will print the
report whenever appropriate. This is demonstrated in the next listing. Just press the run button:
Pure fun, right? The report
did print automatically, synchronously and without leaking
intermediate values. If you investigate the log carefully, you will see that the fifth line
didn't result in a new log-line. Because the report did not actually change as a result
of the rename, although the backing data did. On the other hand, changing the name of the first
todo did update the report, since that name is actively used in the report.
This demonstrates nicely that
not just the todos
array is being observed by the autorun
, but also
the individual properties inside the todo items.
Making React reactive
Ok, so far we made a silly report reactive. Time to build a reactive user interface around this very
same store. React components are (despite their name) not reactive out of the box.
The observer
HoC wrapper from the mobx-react-lite
package fixes that by
basically wrapping the React component in autorun
. This
keeps the component in sync with the state. This is conceptually not different from what we did
with the report
before.
The next listing defines a few React components.
The only MobX specific code in there is the observer
wrapping.
That is enough to make sure that each component individually re-renders when relevant data changes.
We don't have to call state useState
setters anymore,
nor do we have to figure out how to subscribe to the proper parts
of the application state using selectors or higher order components that need configuration.
Basically, all components have become smart. Yet they are defined in a dumb, declarative manner.
Press the Run code button to see the code below in action. The listing is editable so
feel free to play with it. Try for example to remove all the observer
calls, or
just the one decorating the TodoView
. The numbers in the preview on the right highlight
how often a component is rendered.
The next listing nicely demonstrates that we only have to alter the data, without doing any further bookkeeping. MobX will automatically derive and update the relevant parts of the user interface again from the state in the store.
Working with references
So far we have created observable objects (both prototyped and plain objects), arrays and primitives. You might be wondering,
how are references handled in MobX? Is my state allowed to form a graph? In the previous listings
you might have noticed that there is an assignee
property
on the todos. Let's give them some values by introducing another “store” (ok, it's just
a glorified array) containing people, and assign tasks to them.
We now have two independent stores. One with people and one with todos. To assign an assignee
to a person from the people store, we just assigned a reference. These changes will be picked
up automatically by the TodoView
. With MobX there is no need to normalize data first
and to write selectors to make sure our components will be updated. In fact, it doesn't even
matter where the data is stored. As long as objects are made observable, MobX will be
able to track them. Real JavaScript references will just work. MobX will track them automatically
if they are relevant for a derivation. To test that, just try changing your name in the next
input box (make sure you have pressed the above Run code button first!).
Your name:
By the way, the HTML of the above input box is simply:
<input onkeyup="peopleStore[1].name = event.target.value" />
Asynchronous actions
Since everything in our small Todo application is derived from the state, it really doesn't matter when state is changed. That makes creating asynchronous actions really straightforward. Just press the the following button (multiple times) to emulate asynchronously loading new todo items:
The code behind that is really straightforward.
We start with updating the store property pendingRequests
to have the UI reflect the current loading status.
Once loading is finished, we update the todos of the store and decrease the pendingRequests
counter again.
Just compare this snippet with the earlier TodoList
definition to see how the pendingRequests property is used.
Note that the timeout function is wrapped in action
. This isn't strictly necessary,
but it makes sure that both mutations are processed in a single transaction, making sure any observers are only notified after both updates have completed.
observableTodoStore.pendingRequests++; setTimeout(action(() => { observableTodoStore.addTodo('Random Todo ' + Math.random()); observableTodoStore.pendingRequests--; }), 2000);
Conclusion
That's all! No boilerplate. Just some simple, declarative components that form our complete UI. And which are derived completely,
reactively from our state. You are now ready to start using the mobx
and mobx-react-lite
packages in your own applications.
A short summary of the things you learned so far:
-
Use the
observable
decorator orobservable(object or array)
functions to make objects trackable for MobX. -
The
computed
decorator can be used to create functions that can automatically derive value from the state and cache them. -
Use
autorun
to automatically run functions that depend on some observable state. This is useful for logging, making network requests, etc. -
Use the
observer
wrapper from themobx-react-lite
package to make your React components truly reactive. They will update automatically and efficiently. Even when used in large complex applications with large amounts of data.
Feel free to play around a bit longer with the editable code blocks above to get a basic feeling how MobX reacts to all your
changes. You could for example add a log statement to the report
function to see when it is called.
Or don't show the report
at all and see how that
influences the rendering of the TodoList
. Or show it only under specific circumstances...
MobX doesn't dictate architecture
Please note that the above examples are contrived and it is recommended to use proper engineering practices like encapsulating logic in methods, organize them in stores or controllers, view-models etc. Many different architectural patterns can be applied, and some are further discussed inside the official docs. The above examples, and the examples in the official documentation show how MobX could be used, not how it must be used. Or, as somebody on HackerNews put it:
“MobX, it's been mentioned elsewhere but I can't help but sing its praises. Writing in MobX means that using controllers/ dispatchers/ actions/ supervisors or another form of managing dataflow returns to being an architectural concern you can pattern to your application's needs, rather than being something that's required by default for anything more than a Todo app.”


Oh snap!
Invalid country, please enter its partial or full name and then select it from the suggested dropdown list.
Country already exists, please enter its partial or full name and then select it from the suggested dropdown list.


[%settitle Clinical Quality Improvement Framework (CQIF) Implementation Guide%]
[%file newheader%] [%file newnavbar%]This section of the clinical reasoning module discusses the evaluation use case for clinical decision support and how the various knowledge artifacts can be integrated into clinical workflow.
The DecisionSupportServiceModule resource provides a mechanism for describing the functionality made available by a particular service. For example, a service may provide an immunization forecasting module, or drug-drug interaction checking. From the perspective of the consumer, how this functionality is performed is irrelevant, the only aspect of interest is a description of what the module does, and the inputs and outputs it requires.
As such, this resource uses the same metadata elements to define the common information relevant to all knowledge artifacts, and then defines the input and output parameters as well as any data requirements for the service module in the same way that parameters and data requirements are defined for expression logic in general.
As an example, the functionality defined by the Guideline Appropriate Ordering IG can be expressed as a DecisionSupportServiceModule: Decision Support Service Module Example.
<DecisionSupportServiceModule>
<id value="example"/>
<text>
<status value="generated" />

Guideline Appropriate Ordering Module

</text>
<identifier>
<use value="official"/>
<value value="guildeline-appropriate-ordering"/>
</identifier>
<version value="1.0.0"/>
<title value="Guideline Appropriate Ordering Module"/>
<status value="draft"/>
<description value="Guideline appropriate ordering is used to assess appropriateness of an order given a patient, a proposed order, and a set of clinical indications."/>
<publicationDate value="2015-07-22"/>
<topic>
<text value="Guideline Appropriate Ordering"/>
</topic>
<topic>
<text value="Appropriate Use Criteria"/>
</topic>

<parameter>
<name value="patient"/>
<use value="in"/>
<type value="Patient"/>
<profile>
<reference value="http://hl7.org/fhir/StructureDefinition/gao-patient"/>
</profile>
</parameter>

<parameter>
<name value="order"/>
<use value="in"/>
<type value="Order"/>
<profile>
<reference value="http://hl7.org/fhir/StructureDefinition/gao-order"/>
</profile>
</parameter>

<parameter>
<name value="order"/>
<use value="out"/>
<type value="Order"/>
<profile>
<reference value="http://hl7.org/fhir/StructureDefinition/gao-order"/>
</profile>
</parameter>

<parameter>
<name value="result"/>
<use value="out"/>
<type value="Basic"/>
<profile>
<reference value="http://hl7.org/fhir/StructureDefinition/gao-result"/>
</profile>
</parameter>
</DecisionSupportServiceModule>
The DecisionSupportServiceModule resource defines an $evaluate operation that allows for consistent invocation of decision support functionality across a broad range of decision support artifacts. This consistency enables consumers to implement the request/response pipeline once to enable access to any decision support functionality provided by the service.
The GuidanceResponse structure provides a general mechanism for representing the actions to be performed in response to a guidance evaluation request.
The $evaluate operation provides a complete example of a request and response using the Guideline Appropriate Ordering decision support service module: $evaluate operation example:
POST [base]/DecisionSupportServiceModule/example/$evaluate
<Parameters>
<id value="evaluate-operation-request-example"/>

<parameter>
<name value="requestId"/>
<valueString value="guidanceRequest1"/>
</parameter>
<parameter>
<name value="setting"/>
<valueCoding>
<system value="http://hl7.org/fhir/encounter-class"/>

</valueCoding>
</parameter>
<parameter>
<name value="patient"/>
<resource>
<Patient>
<id value="example"/>
<meta>
<profile value="http://hl7.org/fhir/StructureDefinition/qicore-patient"/>
<profile value="http://hl7.org/fhir/StructureDefinition/gao-patient"/>
</meta>
...
</Patient>
</resource>
</parameter>
<parameter>
<name value="order"/>
<resource>
<Order>
<id value="order1"/>
<meta>
<profile value="http://hl7.org/fhir/StructureDefinition/gao-order"/>
</meta>
<contained>
<DiagnosticRequest>
<id value="DiagnosticRequest1"/>
<meta>
<profile value="http://hl7.org/fhir/StructureDefinition/gao-diagnosticrequest"/>
</meta>
<subject>
<reference value="Patient/example"/>
</subject>
<item>

<coding>
<system value="http://www.ama-assn.org/go/cpt"/>

<display value="CT, head, wo iv contrast"/>
</coding>

</item>
</DiagnosticRequest>
</contained>
<date value="2012-12-28T09:03:04+11:00"/>
<subject>
<reference value="Patient/example"/>
</subject>
<source>
<reference value="Practitioner/example"/>
</source>
<reasonCodeableConcept>
<coding>
<system value="http://hl7.org/fhir/sid/icd-9"/>

<display value="Headache, Chronic, no new features"/>
</coding>
</reasonCodeableConcept>
<detail>
<reference value="#DiagnosticRequest1"/>
</detail>
</Order>
</resource>
</parameter>
</Parameters>
The above example uses the profiles defined in the Guideline Appropriate Ordering IG. In this specific case, the request includes the patient information, and the order being assessed including the indication and the procedure.
If the appropriateness tests succeeds, the response provides an appropriateness score based on a specific guideline:
<GuidanceResponse>

<contained>
<Parameters >
<id value="outputParameters1"/>
<parameter>
<name value="order"/>
<valueReference>
<reference value="#order1"/>
</valueReference>
</parameter>
<parameter>
<name value="result"/>
<resource>

<Basic>
<id value="result1"/>
<meta>
<profile value="http://hl7.org/fhir/StructureDefinition/result-gao-gao-result"/>
</meta>
<extension url="http://hl7.org/fhir/StructureDefinition/result-gao-score">
<valueDecimal value="7"/>
</extension>
<extension url="http://hl7.org/fhir/StructureDefinition/result-gao-item">
<extension url="http://hl7.org/fhir/StructureDefinition/result-gao-item#code">
<valueCodeableConcept>
<coding>
<system value="http://www.ama-assn.org/go/cpt"/>

<display value="CT, head, wo iv contrast"/>
</coding>
</valueCodeableConcept>
</extension>
</extension>

<extension url="http://hl7.org/fhir/StructureDefinition/result-gao-guideline">
<valueUri value="http://someguidelineprovider.org/radiology-appropriateness-guidelines.html"/>
</extension>

<extension url="http://hl7.org/fhir/StructureDefinition/result-gao-device">
<valueReference>
<reference value="#device1"/>
</valueReference>
</extension>

<extension url="http://hl7.org/fhir/StructureDefinition/result-gao-practitioner">
<valueIdentifier>
<value value="exampleNPI"/>
</valueIdentifier>
</extension>
<identifier>
<value value="result1"/>
</identifier>

<coding>

<display value="Order is within identified guidelines"/>
</coding>

<subject>
<reference value="#order1"/>
</subject>
</Basic>
</resource>
</parameter>
</Parameters>
</contained>
<requestId value="guidanceRequest1"/>
<module>
<reference value="DecisionSupportServiceModule/example"/>
</module>
<status value="success"/>
<outputParameters>
<reference value="#outputParameters1"/>
</outputParameters>
</GuidanceResponse>
Note that this example is incomplete and reproduced here for illustration purposes only. Refer to the Guideline Appropriate Ordering Implementation Guide for a more complete description of GAO.
In the simplest case, an application requests guidance from a decision support service as part of a particular trigger, usually a specific point in a clinical workflow. For example, on the placement of an order for a specific imaging study, the application performs an $evaluate on the Guideline Appropriate Ordering module. The decision support service processes the request and determines whether the order is appropriate given the patient information and indication for the requested procedure. The result is returned as a GuidanceResponse resource with a status of success, and the calling application examines the appropriateness score and determines the appropriate action to take, either proceed with placing the order, or prompt the user that the requested procedure is not appropriate based on the guidelines returned in the response.
In some cases, the decision support service may determine that additional information is required in order to continue processing, or that additional information may result in a more accurate or more appropriate result. In these cases, the GuidanceResponse will be returned with a status of data-requested or data-required, to indicate the particular scenario. In these cases, the GuidanceResponse will contain additional information, usually stated in the form of additional DataRequirement specifications, to let the calling application know what data is needed. The calling application then repeats the request, providing the additional requested information, and the service continues processing.


uksort
(PHP 4, PHP 5, PHP 7)
uksort — 使用用户自定义的比较函数对数组中的键名进行排序
说明
bool uksort ( array &$array , callable $cmp_function )
uksort() 函数将使用用户提供的比较函数对数组中的键名进行排序。如果要排序的数组需
要用一种不寻常的标准进行排序，那么应该使用此函数。
参数
array
输入的数组。
cmp_function
在第一个参数小于，等于或大于第二个参数时，该比较函数必须相应地返回一个小于
，等于或大于 0 的整数。
int callback ( mixed $a, mixed $b )
返回值
成功时返回 TRUE，或者在失败时返回 FALSE。
范例
Example #1 uksort() 例子
1, "the Earth" => 2, "an apple" => 3, "a banana" => 4);
uksort($a, "cmp");
foreach ($a as $key => $value) {
echo "$key: $value\n";
}
?>
以上例程会输出：
an apple: 3
a banana: 4
the Earth: 2
John: 1
参见
• usort() - 使用用户自定义的比较函数对数组中的值进行排序
• 数组排序函数对比
User Contributed Notes 18 notes
===============================================================================
[Editor's note: the following comment may be factually incorrect]
uksort is only usable in the UK
===============================================================================
(about sorting an array of objects by their properties in a class - inspired by
webmaster at zeroweb dot org at usort function)
I'm using classes as an abstraction for querying records in a database and use
arrays of objects to store records that have an 1 to n relationship. E.g. a
class "family" has family members stored as an array of objects. Each of those
objects prepresents a record in a database related to the family (by it's
familyId).
To identify members, I'm using their memberId as the key of the array e.g.
$family->members[$memberId].
To sort the family members AFTER fetching them with the database query, you can
use the functions _objSort and sortMembers which will sort the "members" array
by key using it's properties (for space reasons I didn't include the methods
used to open the records):
sortFields[$i];
$direction = $this->sortDirections[$i];
$diff = strnatcmp($this->details[$a]->$field, $this->details[$b]->
$field) * $direction;
if ($diff == 0 && isset($this->sortFields[++$i]))
{
$diff = $this->_objSort($a, $b, $i);
}
return $diff;
}
function sortMembers($sortFields)
{
$i = 0;
foreach ($sortFields as $field => $direction)
{
$this->sortFields[$i] = $field;
$direction == "DESC" ? $this->sortDirections[$i] = -1 : $this->
sortDirections[$i] = 1;
$i++;
}
uksort($this->details, array($this, "_objSort"));
$this->sortFields = array();
$this->sortDirections = array();
}
}
// open a family
$familyId = 5;
$family = new family($familyId);
$family->open(); // this will also fetch all members
// sort members by 3 fields
$family->sortMembers(array("firstName" => "ASC", "age" => "DESC", "hairColor"
=> "ASC"));
// output all family members
foreach ($family->members as $member)
{
echo $member->firstName." - ".$member->age." - ".$member->hairColor."
";
}
?>
Note that this might not be the fastest thing on earth and it hasn't been
tested very much yet but I hope it's useful for someone.
===============================================================================
One remark regarding array_sorter class.
It won't work correctly with eg. dates from mysql like<PHONE_NUMBER>5350, cause
you can't convert such number into integer. To fix it remove intval() from the
code. If the variable is a number it will work without converting this to int
anyways. Here is the fix.
sasc)
return ($a > $b) ? 1 : -1;
else
return ($a > $b) ? -1 : 1;
...
?>
===============================================================================
To sort dates with uksort:
function datediff($a, $b) {
$a = date('U',$a);
$b = date('U',$b);
if ($a == $b) $r = 0;
else $r = ($a > $b) ? 1: -1;
return $r;
}
===============================================================================
Regarding the recursive sorting function above:
Genrally speaking, any recursion can be reimplemented using simple iteration.
in the specific case, using recursion to compare strings has a huge performance
impact while a simple loop would suffice and be faster and more simple.
Recursion is only good if it simplifies your code or your understanding of the
concept. the previous example does neither, especially as it does a lot of
repetitive things in each iteration, such as asigning the character order
constant, rebuilding it into an array and such
For example, the string comparison could be written as such :
function str_compare($a,$b) {
$order="aA bBcCčČ..."; // longer normally & without that html
entities
$default = strlen($a) - strlen($b);
$minlen = strlen($a) < strlen($b) ? strlen($a) : strlen($b);
for ($i = 0; $i < $minlen; $i++) {
$pos_a=strpos($order,$a[$i]);
$pos_b=strpos($order,$b[$i]);
if ($pos_a != $pos_b)
return $pos_a - $pos_b;
}
return $default;
}
Which is much simpler and faster.
Note that the above function will break for characters that are not listed in
$order. it should be failry trivial to fix it.
===============================================================================
To use a more complicated comparison function, one can use a callback to a
method of an object instance.
For example the following will take an array $arr whose keys are the same as
those of $reference, and reorder $arr so that the keys appear in the same order
as in $reference.
class kcmp {
var $reference ;
function kcmp( $reference ) {
$this->reference = $reference ;
}
function kcompare( $a, $b ) {
$keys = array_keys( $this->reference ) ;
$position_a = array_search( $a, $keys ) ;
$position_b = array_search( $b, $keys ) ;
return $position_a < $position_b ? -1 : 1 ;
}
}
$reference = array(
"k2" => "a2",
"k3" => "a3",
"k1" => "a1"
) ;
$arr = array(
"k1" => "b1",
"k2" => "b2",
"k3" => "b3"
) ;
print_r( $arr ) ;
uksort( $arr, array( new kcmp( $reference ), "kcompare" ) ) ;
print_r( $arr ) ;
===============================================================================
Case insensitive without own function:
uksort($array, "strnatcasecmp");
===============================================================================
If you need to periodically sort by grades (A, A+, D-, etc.), here is a compare
function that compares strings by the case-insensitive method, unless it finds
a grade, in which case it correctly sorts by putting "plus" grades first,
unmarked grades second, and "minus" grades last.
13 ,
"C" => 10 ,
"D+" => 8 ,
"B+" => 7 ,
"C-" => 6 ,
"A-" => 5 ,
"F" => 5 ,
"B" => 4 ,
"B-" => 4 ,
"D" => 3 ,
"D-" => 3 ,
"A+" => 1
);
uksort($grades, "cmp");
?>
result: Array
(
[A+] => 1
[A-] => 5
[B+] => 7
[B] => 4
[B-] => 4
[C+] => 13
[C] => 10
[C-] => 6
[D+] => 8
[D] => 3
[D-] => 3
[F] => 5
)
===============================================================================
The code below allows you to sort an array_A following array_B keys order,
original keys and values remain associated.
//main function
Function SortArrayAKeysLikeArrayBKeys(&$TheArrayToSort){
uksort($TheArrayToSort,"SortArrayAKeysLikeArrayBKeys_cmp");
}
//the custom compare function
Function SortArrayAKeysLikeArrayBKeys_cmp($a,$b){
global $TheArrayOrder;
$PosA=KeyPosInArray($a,$TheArrayOrder);
$PosB=KeyPosInArray($b,$TheArrayOrder);
if ($PosA==$PosB){return 0;}else{return ($PosA > $PosB ? 1 : -1);}
}
//where is my key in my array
Function KeyPosInArray($Key,$Array){
$i=0;
$Pos=99999999;
if($Array){
foreach($Array as $K => $V){
$i++;
if($K==$Key){
$Pos=$i;
break;
}
}
}
return $Pos;
}
//the array you want to sort
$AnyArrayToSort['age']='19';
$AnyArrayToSort['ville']='rennes';
$AnyArrayToSort['website']='kik-it.com';
$AnyArrayToSort['region']='bretagne';
$AnyArrayToSort['code_postal']='35200';
$AnyArrayToSort['Nom']='Fred';
//the array with the correct keys/values order
$TheArrayOrder['Nom']='Whatever';
$TheArrayOrder['age']='Anything';
$TheArrayOrder['region']='What u want';
$TheArrayOrder['ville']='Something';
$TheArrayOrder['code_postal']='Nothing';
//before sort
print_r($AnyArrayToSort);
echo "
";
//we sort
SortArrayAKeysLikeArrayBKeys($AnyArrayToSort);
echo "
";
//after sort
print_r($AnyArrayToSort);
?>
Will print :
Array ( [age] => 19 [ville] => rennes [website] => kik-it.com [region] =>
bretagne [code_postal] => 35200 [Nom] => Fred )
Array ( [Nom] => Fred [age] => 19 [region] => bretagne [ville] => rennes
[code_postal] => 35200 [website] => kik-it.com )
The keys not listed in the $TheArrayOrder will appear at the end of your sorted
array (only if Key Pos < 99999999 ;o)
===============================================================================
sort with collation, to have umlauts correctly:
uksort($retval, array(Collator::create( 'de_DE' ), 'compare'));
===============================================================================
need a case insensitive sort by key function? i did and couldn find it, so:
===============================================================================
The comparison function must return an integer less than, equal to, or greater
than zero if the first argument is considered to be respectively less than,
equal to, or greater than the second.
--necessary info from http://www.php.net/manual/en/function.usort.php if you
didn't see it already
===============================================================================
Here is a small and very fast object to handle sorting of multidimentional
arrays by a key.
*/
class array_sorter
{
var $skey = false;
var $sarray = false;
var $sasc = true;
/**
* Constructor
*
* @access public
* @param mixed $array array to sort
* @param string $key array key to sort by
* @param boolean $asc sort order (ascending or descending)
*/
function array_sorter(&$array, $key, $asc=true)
{
$this->sarray = $array;
$this->skey = $key;
$this->sasc = $asc;
}
/**
* Sort method
*
* @access public
* @param boolean $remap if true reindex the array to rewrite indexes
*/
function sortit($remap=true)
{
$array = &$this->sarray;
uksort($array, array($this, "_as_cmp"));
if ($remap)
{
$tmp = array();
while (list($id, $data) = each($array))
$tmp[] = $data;
return $tmp;
}
return $array;
}
/**
* Custom sort function
*
* @access private
* @param mixed $a an array entry
* @param mixed $b an array entry
*/
function _as_cmp($a, $b)
{
//since uksort will pass here only indexes get real values from our
array
if (!is_array($a) && !is_array($b))
{
$a = $this->sarray[$a][$this->skey];
$b = $this->sarray[$b][$this->skey];
}
//if string - use string comparision
if (!ctype_digit($a) && !ctype_digit($b))
{
if ($this->sasc)
return strcasecmp($a, $b);
else
return strcasecmp($b, $a);
}
else
{
if (intval($a) == intval($b))
return 0;
if ($this->sasc)
return (intval($a) > intval($b)) ? -1 : 1;
else
return (intval($a) > intval($b)) ? 1 : -1;
}
}
}//end of class
?>
Sample $input_array:
Array
(
[0] => Array
(
[id] => 961
[uid] => 29
[gid] => 12
[parent_id] => 147
[created] =><PHONE_NUMBER>5350
[modified] =><PHONE_NUMBER>0702
)
[1] => Array
(
[id] => 41
[uid] => 29
[gid] => 12
[parent_id] => 153
[created] =><PHONE_NUMBER>4009
[modified] =><PHONE_NUMBER>5532
)
[2] => Array
(
[id] => 703
[uid] => 29
[gid] => 12
[parent_id] => 419
[created] =><PHONE_NUMBER>4132
[modified] =><PHONE_NUMBER>0259
)
Example of usage:
sortit();
}
//sort by parent_id in descending order
$my_array = multi_sort($input_array, "parent_id", false);
?>
The result array will be:
Array
(
[0] => Array
(
[id] => 703
[uid] => 29
[gid] => 12
[parent_id] => 419
[created] =><PHONE_NUMBER>4132
[modified] =><PHONE_NUMBER>0259
)
[1] => Array
(
[id] => 41
[uid] => 29
[gid] => 12
[parent_id] => 153
[created] =><PHONE_NUMBER>4009
[modified] =><PHONE_NUMBER>5532
)
[2] => Array
(
[id] => 961
[uid] => 29
[gid] => 12
[parent_id] => 147
[created] =><PHONE_NUMBER>5350
[modified] =><PHONE_NUMBER>0702
)
===============================================================================
...
function cmp($a, $b)
{
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
function uksort_tree ( &$array )
{
// [PHP5] foreach ( $array as &$value )
foreach ( $array as $key => $value )
{
if ( is_array ( $value ) )
{
// [PHP5] uksort_tree ( $value );
uksort_tree ( $array[$key] );
}
}
uksort( $array, "cmp" );
}
uksort_tree( $myEntryArray );
...
===============================================================================
I needed to be able to sort a string that contained numbers eg.
"Slot 1 name"
"Slot 2 name"
"Slot 10 name"
using a normal string compare the "Slot 10 name" would appear before "Slot 2
name" so I wrote little function that will compare a string taking numbers in
to consideration. There may be a few edge cases that need to be taken in to
consideration.
function strCmpWithNumbers( $a, $b) {
// Split the string in to words.
$a = explode(' ',$a);
$b = explode(' ',$b);
$loop = 0;
do {
// Get the first word from each item
$ta = Utils::gvfa($a, $loop);
$tb = Utils::gvfa($b, $loop);
if (isset($ta)) {
if (isset($tb)) {
if (is_numeric($ta)) {
if ($ta != $tb) {
return $ta - $tb;
}
} else {
$val = strcasecmp($ta, $tb);
if ($val != 0) {
return $val;
}
}
} else {
return 1; // a is set but b isn't
}
} else {
return isset($b);
}
$loop +=1;
} while (true);
}
===============================================================================
Sort the indices by a set order (custom order)
1, 'b'=>2, 'c'=>3, 'f'=>4, 'z'=>5];
sort_keys($arr, $order);
// => [
// "a" => 1,
// "c" => 3,
// "z" => 5,
// "b" => 2,
// "f" => 4
// ]
===============================================================================
An associative array with known keys can be easily custom sorted using a switch
statement in the callback:
NB ksort can be used beforehand to ensure expected results
ksort($array);
uksort($array, function ($a) {
switch($a) {
case 'pepperoni':
return 0;
case 'beef':
return 1;
case 'chicken':
return 2;
case 'ham':
return 3;
case 'vegetarian':
return 4;
}
});
===============================================================================
I tried to write my own function for sorting with special Czech characters,
which php normally compares wrong way. The function is recoursive, it compares
the first characters of the strings and when they're the same, the function
calls itself with parameters without the first character. My php often crashed
by calling this function. After some time if found the problem: it crashed
after 10th recoursive call. I think it's a bug in php, and I've made this
workaround:
function str_compare($a,$b,$level=0)
{
$maxlevel=9;
if($GLOBALS["STR_COMPARE"] && is_array($a))
{
$a=$a[$GLOBALS["STR_COMPARE"]];
$b=$b[$GLOBALS["STR_COMPARE"]];
}
$result=0;
if($a==$b) return 0;
elseif($a=="") return ($b=="") ? 0 : 1;
elseif ($b=="") return -1;
else
{
$order="aA bBcCčČ..."; // longer normally & without that
html entities
for($i=0;$i";
if($pos_a===false || $pos_b===false)
{
if($char_a==$char_b)
{
if ($level<=$maxlevel) $result=str_compare (substr($a,1),substr
($b,1),$level+1);
else $a<$b ? $result=-1 : $result=1;
}
else ($char_a<$char_b) ? $result=-1 : $result=1;
}
else
{
if($pos_a==$pos_b)
{
if ($level<=$maxlevel) $result=str_compare(substr($a,1), substr
($b,1),$level+1);
else $a<$b ? $result=-1 : $result=1;
}
else ($pos_a<$pos_b) ? $result=-1 : $result=1;
}
return $result;
}
}


The Highlighter plugin will highlight data points near the mouse and display an optional tooltip with the data point value. By default, the tooltip values will be formatted with the same formatter as used to display the axes tick values. The text format can be customized with an optional sprintf style format string.
The Cursor plugin changes the mouse cursor when it enters the graph area and displays an optional tooltip with the mouse position. The tooltip can be in a fixed location, or it can follow the mouse. The pointer style, set to "crosshair" by default, can also be customized. Tooltip values are formatted similar to the Highlighter plugin. By default they use the axes formatters, but can be customized with a sprintf format string.


--- layout: post title: Autumn's Splender date: 2012-05-01 10:55:47.000000000 -04:00 categories: - Favourite Places - Seasons tags: - autumn - Celebrating autumn - Fall - Images of autumn - Pirianda Gardens - Seasons status: publish type: post published: true meta: aktt_notify_twitter: 'no' _edit_last: '1' dsq_thread_id: '1188600402' author: login: cint email<EMAIL_ADDRESS>display_name: Jacinta first_name: Jacinta last_name: '' ---
Our little pocket of the world is truly beautiful all year round, but come autumn these hills are dotted with many gorgeous colours, changing everyday. Mother Nature certainly doesn't do things by halves. The crisp nights and sunny days certainly make for a happy heart. We are lucky to have beautiful parks within walking distance or just a short drive away in which there are amazing plant specimens from around the world.
My excitement is growing at the prospect of lighting the open fire soon and spending cozy nights knitting in front of it. The only downfall is that I end up staying up later than normal because I can't draw myself away from the warmth. Oh my, how I love autumn. What's your favourite season?
Jacinta x


Test some stuff ...
Test if a call number is in between two other call numbers:
loc.isBetween("HA 203 .A218 no.54", "HB 501 .M5 A76 1990", "HA 205.E77 v.1 1976");
Sort some call numbers:
var call_nums = [
loc.sortCallNumbers(call_nums);
(this can also be written as the following...
loc.sortCallNumbers('AA 1', 'AA 99', 'AA 50');
for example)
Get the "normalized" version of a call number (useful for comparing any two or more LoC Call Numbers):
loc.returnNormLcCall(" QA 76.73.J 39 H38 2011");


dns_erlang · {{VERSION}}
License: Apache 2.0
Author: Andrew Tunnell-Jones
dns_erlang is a DNS message library for Erlang. It supports most common record types, TSIG authenticated messages, EDNS0 and DNSSEC.
Functionality for constructing or querying a nameserver beyond interpreting wire messages is not provided.
Project Links: Source Code · Documentation · Test Coverage


|
Window Start Date
|
Window End Date
|
Qty Available
|
Order
|
|---|---|---|---|
|
{inventorySchedule.Availability_Window_Start__c}
|
{inventorySchedule.Availability_Window_End__c}
|
{inventorySchedule.Quantity_Available__c}
|
{inventorySchedule.orderStatus}
|
Your registration on this product has been activated.
You will receive an email to {userEmail} as soon as the product becomes available.


Your address :
#781, 17f, 3rd Main, 6th Block, Koramangala, Bangalore - 560068.
How old are you ?
Your favourite drink ?
How often do you drink ?


Rice
Have you ever struggled with cooking rice perfectly?
Are you tired of reading overly precise recipes like this?
For cooking 1 to 2 cups of dry rice, a 2-quart saucepan is just the right size. Too big and the rice may not steam right. Too small and it will boil over and make a sticky mess. You will add 1 3/4 cups water.
Or vague general proportions?
Add 2 parts water and 1 part rice to a large pot. For slightly firmer rice, use 1 part liquid to 2/3 parts rice.
Let us evoke the Asian wisdom, which goes beyond standard pan sizes or fancy volume unit measures.
To cook proper rice, one should add enough water to the pan so that it hits the first index finger knuckle, while the finger tip vertically touches the surface of the rice.
Let’s build up our intution and start with a set of assumptions.
Main assumptions:
- Random Packing Density of the grains of rice approximate one of loosely random packed spheres and it’s constant over different medium (air/water).
- The rice quality (shape) is disregarded in the analysis.
Thus, we can define our main function for the finger heuristic.
We plot the results of applying our function to common sauce pan sizes and rice quantities.
A very natural observation of the skeptic reader is: what if my finger is way smaller or bigger?
Let us consider the results from the following scientific study. Since we only care about the size of the index first knuckle, we have
\[TotalSize = Tip size + First Phalanx = (3.84±0.59) + (15.82±2.26) \ (mm)\]Assuming independence of the variables for simplicty,
\[TotalSize = (3.84+15.82) ± \sqrt{0.59^2 + 2.26^2} = 19.66 ± 2.33 \ (mm)\]In this way, we can model the first index knuckle size distributions for simplicity as a Gaussian distribution.
We run a MonteCarlo simulation for different size of pans, finger sizes and rice cups.
We can clearly observe that the different finger size effect is negligible in practice.
“Wisdom comes from experience. Experience is often a result of lack of wisdom.” - Terry Pratchett
References
- Common Sauce Pan Sizes - link
- Conversion Units - link
- Random Close Pack - link
- Scientific Study on Finger Sizes - link
Acknowledgment
Thanks to Raine Yeh and Pedro Bello-Maldonado for the inspiring conversation.


First new pen ran out. Uni-ball Signo Gel Grip, 0.7. Not a bad pen. 2/8/2008, 9:44:41 PM Favs: 0 Retweets: 0 link


Noble.TransitionType
A set of constants for scene transition animations.
See
Constants
- Noble.TransitionType.CUT
- An all-time classic.
- Noble.TransitionType.CROSS_DISSOLVE
- A simple cross-fade.
- Noble.TransitionType.DIP_TO_BLACK
- Fade to black, then to the next scene.
- Noble.TransitionType.DIP_TO_WHITE
- Fade to white, then to the next scene.
- Noble.TransitionType.DIP_WIDGET_SATCHEL
- An "accordion" transition, from "Widget Satchel" by Noble Robot.
- Noble.TransitionType.DIP_METRO_NEXUS
- A "cascade" transition, from "Metro Nexus" by Noble Robot.
- Noble.TransitionType.SLIDE_OFF_LEFT
- The existing scene slides off the left side of the screen, revealing the next scene.
- Noble.TransitionType.SLIDE_OFF_RIGHT
- The existing scene slides off the right side of the screen, revealing the next scene.
- Noble.TransitionType.SLIDE_OFF_UP
- The existing scene slides off the top of the screen.
- Noble.TransitionType.SLIDE_OFF_DOWN
- The existing scene slides off the bottom of the screen, revealing the next scene.


{% extends "modals/base.html" %} {% block modal_body %} {# The modal does not expect to have an associated form, which is why this form is manually defined #}


We are developing a Bitcoin insurance policy for customers who invest in bitcoin exchanges which have been know to be vulnerable to hacking. According to Tyler Moore, an assistant cyber security professor at the University of Tulsa’s Tandy School of Computer Science, 33% of stock exchanges have been infiltrated, and as Bitcoin gains awareness it becomes larger target for attack. Many trusted Bitcoin exchanges have been hacked such as Mt. Gox(450 million USD sustained losses) and more recently Bitfinex(72 million USD sustained losses) and were unable to properly reimburse customers. We sought a way to make these exchanges more secure for customers and created Bitsurance. A cross-analysis of past breaches in current bitcoin exchanges and categorization of security risk each exchange gives an informed way to detect potentially unstable exchanges. A mathematical Algorithm based on the probability of malicious hacking multiplied by the average losses expected calculates our rates. Premiums and monthly payment plans are then set for each of the major exchanges available for our customers. We look to bring trust and more confidence in investing in the evolutionary Bitcoin currency and wish to provide our customers with the utmost service.


BANDITS A film review by Christopher Null Copyright 2001 filmcritic.com
If you start a movie by telling people how it's going to end, well, telling us how it gets there better be one hell of a good time. And to be sure, Bandits begins with its ending, but the story leading up to the dramatic finale is just about as lame as they come.
Doing time for unknown crimes, Joe (Bruce Willis) and Terry (Billy Bob Thornton) are milling about the clink one day when our hunky inmate Joe engineers a daring escape, taking his milquetoast pal Terry along for the ride. Within a few nights on the lam, they've engineered a plan for a new kind of bank robbery -- kidnap the bank manager at his home, spend the night at his house, then waltz in with him first thing in the morning and abscond with all the money.
The plan works so well as Joe and Terry rob their way from Oregon to L.A. (en route to open a nightclub in Mexico, of course!) that they become infamous as "The Sleepover Bandits." Through happenstance (and of course it has to be through happenstance), the bandits end up with a bored, rich housewife along for the ride. Kate (Cate Blanchett) ends up stealing their hearts, and along with those go any semblance of watchability that Bandits might have had.
Bandits wants to be Fargo -- a kitchy, light-hearted, and wryly funny comedy set against the backdrop of a caper. Instead, Bandits is a messy debacle of awful jokes, unbelievable romance, and a ploddingly obvious storyline that feels even longer than its two-plus hours.
Bruce Willis can be fun, even in throwaway material like The Whole Nine Yards, but Bandits puts his balding head in trashy long hair and tries to convince us that he's some wonderstud that can charm ladies even when he's holding them at gunpoint. On the flipside, Thornton's one-note character (he's an obsessed hypochondriac that can actually delude himself into paralysis) is sold as someone with whom Kate falls in love simply because they both dislike black and white movies. But while details like logic are glossed over, increasingly irrelevant director Barry Levinson (Sphere, An Everlasting Piece, you get the picture...) opts to spend long, pregnant moments developing irrelevant, uninteresting storylines, the end result being one awfully boring movie.
In search of something positive to say, I'll acknowledge that at least Bandits has a fair number of giggle-worthy moments, a tense dinner as the kidnappers dine with a bank manager and his suburban family being the comedy highlight of the movie. Too bad that's 30 minutes into the picture -- and the film just heads south from there. The love triangle wherein the guys agree to share the girl (a plot stolen from Splendor -- lame source material, in my opinion) isn't believable, and the robbery scenes are barely suspenseful at all; in fact, the only real danger arises when the criminals act with complete stupidity: joyriding on the road or when the driver (the sleepy Troy Garity, a minor highlight in this sea of boredom) leaves the waiting getaway car to chase a hot chick. Uh huh.
It's amazing that seven producers were unable to figure out how to turn a moderately promising premise into something worth watching. (Well, not really.) The bottom line is that this is a Levinson vanity project, pure and simple, and there's nothing uglier than vanity.

Visit filmcritic.com on the Web at http://www.filmcritic.com
========== X-RAMR-ID: 29802 X-Language: en X-RT-ReviewID: 254438 X-RT-TitleID: 1110275 X-RT-SourceID: 178 X-RT-AuthorID: 1062
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


Refactor from a Monolith
An intermediate guide to almost needlessly complex architecture.
Developed By:
David Merk
This presentation assumes you have at least an introductory understanding of all elements of the software development lifecycle.
- N-Tier Architecture
- Service Oriented Architecture
- Design Patterns
- Cloud Providers
- C#
- .Net
- CI/CD
This presentation is designed for cloud hosted projects struggling to scale vertically.
Preface, this is not the architecture you should use for your MVP.
You might not benefit from this presentation if you're:
- A small team of developers or a startup.
- You have a small user base or limited traffic.
- OR... if you haven't encountered problems that have lead you to this as a solution.
A forword on patterns:
- Patterns sive problems
For Instance,
- Relational Databases solve different problems than NoSQL Databases.
- Example: Dependency Injection solves the problem of needing to know what constructs an object in order to instantiate it; by decoupling the creation of an object from its instantiation.
Just like design patterns and database patterns- architecture patterns solve problems.
If you don't have any problems, the complexity SOA introduces to your suite of applications probably won't provide you the benefit you're looking to recieve.
Just like design patterns and database patterns- architecture patterns solve problems.
If you don't have any problems, the complexity SOA introduces to your suite of applications probably won't provide you the benefit you're looking to recieve.
N-Tier
A system containing at least 3(n) tiers.
- Example of N-Tier
- MVC - Model View Controller
or... As you're probably more familliar with it...
- Model, View Model, View, Controller, Service, AutoMapper, Repository, SQL
What problem does this architecture pattern solve?
N-Tier Continued
What problems does this architecture pattern introduce?
- Vertical Scalability
- Monolithic Code Complexity
- Slow Development Pipelines
SOA
What are Microservice?
- Distributed Systems
- Independently Scalable
- Independently Deployable


Make simple arduino analog sensor circuit.
Write Arduino code.
Install and setup python with the serial library.
View data.


The goal for each of the following attack scenarios is to extract the "privateKey" field inside the Elm app's model.


Software Practitioner Perspectives on Merge Conflicts and Resolutions
Shane McKee, Nicholas Nelson, Anita Sarma, Danny Dig.
Merge conflicts occur when software practitioners need to work in parallel and are inevitable in software development. Tool builders and researchers have focused on the prevention and resolution of merge conflicts, but there is little empirical knowledge about how practitioners actually approach and perform merge conflict resolution. Without such knowledge, tool builders might be building on wrong assumptions and researchers might miss opportunities for improving the state of the art.
We conducted semi-structured interviews of 10 software practitioners across 7 organizations, including both open-source and commercial projects. We identify the key concepts and perceptions from practitioners, which we then validated via a survey of 162 additional practitioners.
We find that practitioners are directly impacted by their perception of the complexity of the conflicting code, and may alter the timeline in which to resolve these conflicts, as well as the methods employed for conflict resolution based upon that initial perception. Practitioners' perceptions alter the impact of tools and processes that have been designed to preemptively and efficiently resolve merge conflicts. Understanding whether practitioners will react according to standard use cases is important when creating human-oriented tools to support development processes.
Artifacts
|
Interview Questions
Survey Questions |


Consultation outcome
Ref: Ofqual/14/5570 PDF , 145KB , 2 pages
If you use assistive technology (such as a screen reader) and need a version of this document in a more accessible format, please email<EMAIL_ADDRESS>. Please tell us what format you need. It will help us if you say what assistive technology you use.
Ref: Ofqual/14/5571 PDF , 947KB , 84 pages
If you use assistive technology (such as a screen reader) and need a version of this document in a more accessible format, please email<EMAIL_ADDRESS>. Please tell us what format you need. It will help us if you say what assistive technology you use.
We have confirmed that the Qualifications and Credit Framework ( QCF ) rules will be removed, following a 12 week consultation.
The QCF rules are being removed so that high quality vocational qualifications can be designed around the needs of employers, rather than the prescriptive set of QCF rules. The change is part of our wider plans to strengthen vocational qualifications in England and Northern Ireland.
When we lift the QCF rules, good qualifications that meet the rules can stay. The organisations that we regulate will have greater freedom to design assessments based on the skills and knowledge that industries need. Qualifications that aren’t valid will need to be developed or withdrawn.
Ending unit-sharing will also mean that the organisations we regulate have clear and sole responsibility for the quality of their qualifications.
The removal of the QCF rules, along with its bank of shared units, will begin from summer 2015 at the earliest following further consultation.
This consultation ran from
to
We are considering removing the 'Regulatory Arrangements for the Qualifications and Credit Framework (QCF)'.
Ref: Ofqual/14/5490 PDF , 715KB , 89 pages
If you use assistive technology (such as a screen reader) and need a version of this document in a more accessible format, please email<EMAIL_ADDRESS>. Please tell us what format you need. It will help us if you say what assistive technology you use.
For some time we have been concerned that the ‘Regulatory Arrangements for the Qualifications and Credit Framework’ have not delivered on their intended outcomes and that they sometimes stand in the way of the development of consistently good, valid and reliable qualifications.
We have considered reports recently commissioned by government into vocational education, apprenticeships and adult vocational qualifications and noted their comments about the QCF. At the end of 2013 we commissioned our own review of the QCF and this consultation is based on the recommendations of that report.
Published: 22 July 2014
Updated: 15 December 2014
From: Ofqual
Part of: Vocational qualifications


{% extends "housing_reviews/base.html" %} {% block panel-title %}About{% endblock %} {% block content %}
This website allows you to anonymously read and write reviews about the letting agents operating in St Andrews.
It was born out of the frustration of our own experience with a very nasty agency, something that made us think about the why of this sad state of affairs when it comes to housing in St Andrews.
There are good landlords and agents out there but there are many nasty folks around who abuse the fact that there's a lot of demand for housing in town. Some of them even break the law by doing things the way they do, and since they know the vast majority of their tenants are students, who will not raise any legal action against them, they just keep going untouched.
We say it's enough!
It's time to do something about it, so we created this website where the people of St Andrews can voice their opinions.
Our hope is that by making public which agencies are good and which ones should be avoided, people - both tenants and landlords - will avoid headaches.
We also intend to add a section with some tips for tenants and landlords, gathered by speaking with some people who have been in the business for some time.
For now, we suggest you also visit Shelter Scotland website, and in particular their Reclaim Your Fees website, which deals with something some agents in town do or used to do: demanding "admin fees" from their tenants. Pro tip: Premierlet does this and refuse to admit it is illegal. Avoid them at all costs and if you have rented from them in the past 5 years, check the Reclaim Your Fees website because you can easily get your money back with interest. We'll even give you a hand with it.
Good luck!
{% endblock %}


I'm your host, Nick Gerakines / @ngerakines
CryptoParty is a decentralized, global initiative to introduce basic cryptography tools - such as the Tor anonymity network, public key encryption (PGP/GPG), and OTR (Off The Record messaging) - to the general public.
Interested parties with computers, devices, and the willingness to learn how to use the most basic crypto programs and the fundamental concepts of their operation! CryptoParties are free to attend, public and commercially non-aligned.
More at http://www.cryptoparty.in/.
Guest / T3chT0wn
Food / drinks in the back
Bathrooms are to the left toward the elevator at the end of the hall.
Everyone!
Tor protects you against a form of internet surveillance known as "traffic analysis."


Find your extra peace of mind
A new approach to helping you care for the ones you leave behind,
through
the aid of our automated system that makes everything quick and seamless.
Planning for what happens after your death can bring up a lot of emotions that a lot of people just aren't ready to deal with. Families avoid doing their estate plan because it can be a hassle, it can be emotional, and it can be a cold reminder of your own mortality. But it doesn't need to be like that.
That is where we come in.We're here to make this entire process as easy and painless for you as we can. The Kids Safeguard System exists for that sole purpose, to cater to the needs of you and your family.

Download your forms instantly after purchase.
Need to step away but don't want to start over? No worries, your progress will be saved.
Your private information is important to us, and will be handled with care.
Lawyers can upload and setup new forms over time, making this your one-stop-shop for everything forms.
If you experience any trouble at all, we're here for you.


margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
list-style: none;
Instead of typing all this out - copy it from here: https://marksheet.io/css/reset.css
The container will be 1440px wide and centered on the screen if the viewport (browser window) is larger than 1440px.
.container {
width: 1440px;
margin: 0 auto;
}
The container will be 80% of the viewport (browser window) and centered within it.
.container {
width: 80%;
margin: 0 auto;
}
Fixed positioning is similar to an aboslute positioned element in that it is taken out of flow. However, it is positioned relative to the viewport - no matter what container it is in.
selector {
position: fixed;
top: 0;
left: 0;
}
Google has hundreds of free, open-source fonts that have been optimized for the web, and ready for us to use!
The service runs on Google's servers which are fast, reliable and tested. Google provides this service free of charge.
Visit: www.google.com/fonts
@import url(http://fonts.googleapis.com/css?family=Lato:300,400,700,300italic,400italic|Bree+Serif);
body {
font-family: 'Lato', sans-serif;
}
h1, h2, h3, h4, h5, h6 {
font-family: 'Bree Serif', serif;
}


Fashion shopping made easy
Lunia is for people who shop clothes over online and wants to make an informed decision before buying. It helps them to find the clothes they want at the best price and right fit.
Why Lunia?
80%
of the online shoppers prefers only three to four brands that they have tried before to avoid buying clothes that does not fit right.
70%
of the shoppers cannot find what they are looking for in the first search attempt and 55% of them thinks search by uploading photo can help them shop better.
85%
of the shoppers wants to compare similar-looking clothes across multiple brands before making a purchasing decision.
How it works
Step 1: Set Measurements
Lunia takes your body shape information to cater the right apparels across multiple brands which will fit you just right. Our data-driven personalization approach will ensure that there is no more confusion about sizes when you are trying out new brands!
Step 2: Search or Explore
Lunia lets you search products through conversation or through a visual search based on images - whether it is a photo you have taken, a screenshot or a picture from a magazine. You also have the option to simply explore a gallery containing thousands of products.
Step 3: Compare across brands and Checkout
Lunia allows you to compare prices, designs and reviews on the quality of visually similar products across multiple brands. It also allows you to check which brands have apparels that fit you best.


Traveling is not always fun and dandy. Every traveler faces some challenges. How to spend you time efficiently? What are the must see sights and attractions? What if you feel lonely?
Trax offers a solution for all of these challenges. It enhances your travel experience by showing top rated sights and showing all travelers that are near to you. With this app you are able to talk to other travelers, ask for recommendations and check the ratings of all the sights that are near you.
Spread the word!
We would really appreciate if you can help us spread the word and share Urban Walks for eveyone to enjoy!


Healthway helps organize and manage your personal health records through mobile devices and computers on a safe and reliable cloud environment. Healthway also provides easy way to search nearest clinics and emergency services. Just login and start going!
Find Out MoreHealthway provides user friendly mobile application and website where you can Upload your health records, Configure alerts and notifications. Healthway provides an intuitive dashboard to view health records and analytical reports
Get Started!Prescriptions, Scans and Reports
Secure with Login and Encryptions
Data stored in secure Cloud environment, access from anywhere
Search and Schedule Appointments with Doctors
Contact Emergency Services
Install Healthway application on your mobile, tablet or access through web
Get recommendations and services based on location
Give us a call or send us an email and we will get back to you as soon as possible!
123-456-6789


@require("../partials/head.html")
Getting information from the server...
If you have any questions, please feel to create a GitHub issue or contact us.


I feel strange talking about issues in the tech world, because we've been so focused these past few weeks on how great and useful tech is. One of the great things we have learned about is the freedom (for better or worse) that CSS gives us in placing and formatting things on web pages. While it's definitely an option to do just about whatever you want, there are some things you should and shouldn't do if you want a useful site. This is where web design and layout comes into play. You don't want your site to have a fundamentally bad layout that's hard to navigate or where it's hard to find the information you need.
Element colors also play a big part in the way people perceive your site. There's a huge selection of colors that can be selected from when working on a webpage, and some may go together really well and many don't look good at all. However, there's something many people may not think about when building a webpage. Imagine you've spent all day working on a project for a Christmas-themed website, and you're especially proud of the color scheme. The site is decorated all over with candy cane imagery, the buttons all have a holly theme, and you got the words to line up just right with the borders. At the end of the day, you submit the final page to your supervisor with a feeling of success and pride.
 You ask what you did wrong that made him feel that way, and he responds that he can't even read half the page! He's green/red colorblind and all of your fancy buttons and borders appear as blobs to him! While the candy cane portions aren't an issue, you made all of the navigation buttons have a green background with red text, which just shows up as one indeterminate rectangle for him.
It's for reasons like colorblindness that it's important to take in website color schemes seriously. When we design for a huge audience, it's easy to forget that not everyone can perceive the internet in the same way we do. While it can be easy to fix a color scheme, it might not be such an easy fix if you need to make the page accessible to blind people, or those who can't use a mouse. This may not be a common problem for most developers, but large corporations like Amazon and Facebook do need to worry about their customers with accessibility problems.


Preparation time
less than 30 mins
Cooking time
30 mins to 1 hour
Serves
Serves 1
Indulge in this sumptuous meal for one. Mussels and cod are paired with orange and carrot flavoured butter, while batter scraps give it some crunch.
For the carrot and orange butter, place the carrot and orange juice in a large saucepan. Boil until the volume of liquid has reduced to around 60ml/2¼fl oz.
Add the reduced juice to the butter and mix in the orange zest. Add salt and pepper, to taste.
For the steamed cod and mussels, lightly salt the cod fillet and set aside for three minutes, then wash off the salt and pat the fish dry.
If any mussels are open, tap them lightly on a hard surface. If they don't close, discard them. Heat a saucepan [with some liquid?]and place the mussels in the pan and place a lid on top. Cook them until they are open. Discard any that do not open after cooking. Drain them and remove the mussels from the shells.
Chop the mussels up and season with the lime zest.
To steam the cod, put a steamer over a saucepan of boiling water and steam the fish for eight minutes. Just before serving, brush with a little melted butter.
Heat a deep fat fryer to 190C/375F, or heat the vegetable oil in a deep heavy-based saucepan, until a breadcrumb sizzles and browns when dropped in it. (Caution: hot oil can be dangerous. Do not leave unattended.)
In a bowl, whisk together the yeast and beer. Add the plain flour and whisk to a smooth batter. Set aside for five minutes.
Drop small amounts of the batter into the hot oil and let it fry until crisp. Remove with a slotted spoon and leave to drain on kitchen paper.
Blanch the broccoli in a large pan of boiling water, then refresh it in cold water to keep the colour.
Heat the butter in a clean frying pan and cook the broccoli gently for a couple of minutes.
To serve, spoon some of the carrot and orange butter onto the plate and add a tablespoon of the mussels on top. Place the cod on top of the mussels and add broccoli and a sprinkling of the batter.


Seneca in Production
The Sunday Business Post website and apps are JavaScript end-to-end, with Seneca on the backend. There's a case-study with high-level details.
And some other sites using Seneca:
- beatyourmanager.com
- TabletCommand App
- 3funnel.com
- globalsecurity.ie
- nearform.com
- VoixTek App
- nodezoo.com
If you're using Seneca in production, and would like to be listed here, just tweet @senecajs.


Welcome to NYC Government’s home for filing Freedom of Information Law (FOIL) requests.
On this site you can request records from every New York City agency by filing a Freedom of Information Law (FOIL) request. But, some government information is already available online and you wouldn’t need to go through the FOIL process. Check out these links to sites that host government reports and data. You may find what you are looking for without FOIL.
Government Reports and Data are available here
- NYC Government Publications Portal Get copies of reports and other publications issued by City agencies.
- NYC OpenData Portal Discover open datasets for your use.
- NYC.gov The official website of the City of New York.
- NYC 311 Get information about your neighborhood, and check the status of existing requests.
Almost all City agencies also use this platform to respond to FOIL requests and publish records not covered by privacy and other protections.


Description
Introduction
The Open MPI project is an open source implementation of the Message Passing Interface. The interface is a suite of tools that allow for interprocess communications which facilitate executing portions of a program in parallel. Detailed discussions on the the Message Passing Interface (MPI) can be found here:
http://condor.cc.ku.edu/~grobe/docs/intro-MPI.shtml
Details on OpenMPI can be found here:
https://www.open-mpi.org
Installing OpenMPI as a plugin to the Eclips IDE + Photran + Parallel Tools Platform Framework
We start by installing OpenMPI, which can be downloaded here:
https://www.open-mpi.org/software/ompi/v1.8
At the time of this writing, version 2.0.0 is NOT supported by our IDE, called Eclipse NEON. Rather, version 1.8.8 needs to be downloaded and installed. Our targer system is an Intel quad-core I7 processor, running Fedora 23 Linux (64 bit version). This detail will become important as we delve deeper into the actual mechanisms of execution. This type of processor should be general enough for most cases.
Once the tarball has been decompressed, it is important to adjust the LD_LIBRARY_PATH environment variable to point to the proper location, otherwise, there will be much grief during linking and running the generated executables. This variable must be properly set prior to installing OpenMPI because directories are actually hardcoded into installation at build time. In my system, I found the following to work properly:
Then from the install directory that contains the decompressed installation files, it is required to do a ./configure --with-devel-headers. The --with-devel-headers switch will install additional files required by the Eclipse IDE to properly work with the OpenMPI modules.
The configuration script will perform a series of systems tests and setup the make files for a system specific build. Generally, the configuration takes a few minutes and completes with no issues. Once the configuration is complete, we are now ready to perfom the install, which will build the system specific executables and libraries.
This can be accomplished by entering: sudo make -j 4 install all
The sudo is required because the libraries and executables need to be installed as root. The -j 4 switch causes make to use all four cores to person the build, greatly speeding up the process. It takes a about 5 minutes on this Intel I7 3GHz processor.
Once the installation has completed, it's status can be viewed by typing ompi_info at the command prompt.
A full listing of the output of ompi_info is shown below:
Notice that the version of Open MPI is 1.8.8. At the time of this writing, this version is known to work with the Eclipse IDE + Photran + Parallel Tools Platform. In the author's understanding, version 2.0.0 is known to NOT work.
It was found that if, after compilation and execution of the source code, that error messages are displayed pertaining to MPI or MCA, a working remedy is to ensure that the LD_LIBRARY_PATH environment variable is properly set, and then to reconfigure and rebuild the OpenMPI installation files as described above. If problems persist, another thing to try is to rename the folder /usr/local/lib/openmpi to /usr/local/lib/openmpi_backup, and then perform a ./configure --with-devel-headers and then a sudo make -j 4 install all. This will ensure that fresh files are installed into /usr/local/lib/openmpi.
More information on installation issues can be found here:
https://eclipse.org/ptp/docs/releases/release-1.1.php
https://www.open-mpi.org/faq/?category=building#easy-build
Installing the Eclipse IDE + Photran + Parallel Tools Platform
At the time of this writing, the latest version of the Eclipse Integrated Development Environment (IDE) is NEON.
It can be downloaded here:
https://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/neon/R/eclipse-parallel-neon-R-linux-gtk-x86_64.tar.gz
Other tools are also available for the Eclipse Platform and may be obtained by following the links on their homepage.
I recommend decompressing the downloaded Eclipse installation files into a temporary directory, such as /home/Installs/eclipse-installer
To install, simply run the file eclipse_inst by entering ./eclipse_inst at the command prompt. Eclipse requires Java to run; therefore, if there are any installation issues, it is recommended that you ensure that the latest version of Java is installed on your machine.
After Eclipse is installed, click "Launch" to start it up. It "may" be necessary to install some additional add-on tools to access the parallel development tools. I can't be certain since I have tried the installation a number of times before I was able to get the system to operate properly. This is more a reflection of my learning curve and my particular system setup, and not a criticism, per se, of the Eclipse developers.
Once the Eclipse IDE is up and running, go to >help>Install New Software, which will bring up the following screen:
Ensure that all "Linux Tools", "Parallel Tools Platform", and "Performance, Profiling and Tracing Tools" are selected, and click "Next" to update the Eclipse IDE.
Setting Up The Eclipse IDE For Compiling A Simple Hello World Type Program With Parallel Execution
Now that the OpenMPI binaries are installed, a new project can be started within the Eclipse IDE. Since I am using GNU+Linux, and wish to use GNU as much as possible, I will use the GNU Fortran compiler, versus the Intel Fortran Compiler. This is a personal preference. The discussions that follow will assume use of the GNU Fortran compiler.
To start a new project, go to >File>New Project> and drill down to "Others" in "Project type:". Select Executable (Gnu Fortran on Linux/*nix). The "Toolchains:" should have GCC Fortran highlighted.
It is a good idea to have "use default location" and "show project types and toolchains only if they are supported on the platform" checkmarked, to minimize having to go in to the configurations and be forced to mess around with paths and directory settings. Give the project a meaningful name and click "Next".
Under "Configurations:", ensure that Debug and Release are checked. This is more of a check to verify that the toolchain is working properly. It is also useful to have two versions of a project once it becomes sufficiently complex. If all is well click "Advanced Settings".
The next step gave me allot of grief until I figured it out, and I am happy to be able to save you some trouble... Since we are going to be using OpenMPI, it states on the OpenMPI website that it is HIGHLY recommended to use their specialized compiler and execution binaries. We must tell the Eclipse IDE to use "mpifort" rather than "gfortran" to compile and link. "mpifort" has special wrappers embedded that handle accessing all of the required includes and libraries. Without this, setting up all of paths and environment variables can be a daunting task. "mpifort" makes it a snap to compile OpenMPI based programs.
To set this up, under "Advanced Settings", go to "Fortran Build" and select the drop-down arrow. Select "Settings" and then GNU Fortran Compiler. In the box that says "gfortran", replace it with "mpifort".
Once "mpifort" is used as the compiler, you don't have to worry about setting up the includes or libraries. The next step is not critically necessary but I like to have verbose messages when compiling, so I went ahead and set the "Debug Level" to "Maximum" and checked "Generate gprof information (-pg)" and "Generate prof information (-p)" under "Debugging". Under "Miscellaneous" I checkmarked "Verbose (-v)".
Once the compiler is setup, the linker is next. Basically, the exact same things are done for the linker. Click "GNU Fortran Linker" and change the "command" from gfortran to "mpifort".
As before, it is not critically necessary but you can go to the "Debugging" item and checkmark the production of additional debugging information. Once the command is changed to "mpifort", click "OK" and then "Finish". You should now be in the Eclipse IDE Photran screen. This is perspective that allows for actually entering, building and running the code. I have been messing around with Photran for a while, so details on your screen will be slightly different.
Right click on the name of your newly created project in the "Project Explorer" and select "New" and then "Fortran Source Code".
Give the new source file a meaningful name, MAKING SURE TO GIVE THE FILENAME A .f08 EXTENSION. The extension must be a .f08, with a non-capital "f". Keep "Template" set to "Default free-form Fortran source file template". Verify and click "Finish". The Eclipse IDE differentiates between filenames that end in .F08 and .f08. A filename ending in .F08 will not build properly.
I don't recommend changing the source folder because it may become difficult to build the project due to PATH issues. Click "Finish" when done. A new file will appear in the "Project Explorer" with the name given. Double click this file and the editing screen will appear. A default tempplate program will appear, but we will not be using it. Go ahead and delete all of the lines in the editor. As a first program, I found the one named "Hello World" at:
http://condor.cc.ku.edu/~grobe/docs/intro-MPI.shtml
to be useful. Copy and paste it into the editor.
We are now ready to compile, link and execute the "Hello World" type program to verify that all is setup correctly. In a subsequent section, we will using the debug functions of the Eclipse IDE to step through the disassembly of the executable to gain valuable insights into the physical implementation of parallel exectution code.
Compiling, Linking and Executing A Simple Hello World Type Program With Parallel Execution
Assuming everything was setup as described in the previous sections, to compile the program should be as simple as clicking on >Project>Build Project. There will be some activity with a progress bar, and allot of verbose debugging information will appear in the console as shown below:
I am an information junkie, and looking at the verbose debugging output on the console is very pleasing. Of important note is that underneath the line which says "Invoking: GNU Fortran Compiler", there is a command line that starts with "mpifort", and under "Invoking: GNU Fortran Linker", there is another line which starts with "mpifort". As explained in the previous sections, "mpifort" is a special wrapper executable which enables greatly facilitated compilation and linking of Fortran programs using MPI, without having to worry about PATHs or setting up libraries.
As can be seen at the bottom of the console output, the program compiled and linked properly, with no error messages. We are now ready to run the program. First we will run the program using a single core and single thread to make sure everything works so far. Then we will step up to multiple cores/threads. To run a program, a "Run Configuration" needs to be created first.
To create a run configuration, go to >Run>Run Configurations. Select C/C++ Application (even though we are writing in Fortran). Click the "New Launch Configuration" button and give the run configuration an appropriate name. The rest of the fields should have been already filled in by Eclipse. The window is shown below:
Once everything is set, click "Run", and you should see the following output:
The status message in the console states that the program terminated with exit value 0, which means no errors. The output of the program is shown directly below the status line. Next, we will setup a debug configuration where we can disassemble the executable and step through the assembly instructions. Doing this will give us valuable insight into how MPI programs actually work. This will become particularly important for multithreaded/multi-core execution programs.
Setting Up A Debug Configuration in the Eclipse IDE + Photran + Parallel Tools Platform
To set up a debug configuration, click on >Run>Debug Configurations. Since a run configuration was already created, the debug configuration should be all set up and ready to go. Click "Debug" to get started.
Once "Debug" is clicked, the Eclipse IDE will start the debug/disassembly process and the following perspective screen will appear:
Debugging can now commence. It is very instructive to activate instruction stepping mode and step through each assembly language instruction because you can see the function calls being made to set up the Message Passing Interface. In the next section, we will show a video of stepping through the assembly language instructions and talk about what is happening at each step.
Debugging an OpenMPI Fortran Executable in Eclipse IDE + Photran + Parallel Tools Platform
The following video shows the process of debugging a simple "Hello World" type Open MPI Fortran program.
In the video, a number of observations can be made. At 0:55, we can see that many modules are loaded upon executing the assembly instruction that directs the instruction pointer to the location of the main function. Many of these modules are related to setting up the MPI. It can also be observed that at one point, exectution is actually taking place over two cores in two separate threads, even though this was not explicitly stated in the run/debug command. This gives an insight into the inner workings of how OpenMPI actually works.
It appears that the additional thread on the second core is running housekeeping routines pertaining to the Message Passing Interface. The thread starts and stops at the same time that the MPI initialization instructions are being executed. A number of MPI routines are also executed upon finalization of the program.
In the next sections, we will setup and perform a debug/run of this program using parallel exectution.
Setting Up and Running an OpenMPI Fortran Executable on Multiple Cores/Threads in Eclipse IDE + Photran + Parallel Tools Platform
In this section, we will setup the simple "Hello World" type program for running using multiple cores/threads.
Go to >Run>Run Configurations, and create a new run configuration under "Parallel Application". Just to make it interesting, increase the number of processes to 4. Click "Apply" and then "Run".
The program should execute with no issues and "Hello World" should appear in the console 4 times.
Setting Up a Parallel Debug of an OpenMPI Fortran Executable on Multiple Cores/Threads in Eclipse IDE + Photran + Parallel Tools Platform
In this section, we will setup the simple "Hello World" type program for debugging using multiple cores/threads.
Go to >Run>Debug Configurations, and create a new debug configuration under "Parallel Application". Just to make it interesting, increase the number of processes to 4. Click "Apply" and then "Debug".
After the progress bar finishes indicating that debugging is being set up, the following screen should come up:
There can be a number of step-through scenarios at this point. My personal favorite is to activate all images and step into the main() code. This will call the OpenMPI functions and display the details of how OpenMPI actually works to setup and shutdown itself.
A quick look at the process list by typing "ps -FH --User mark" reveals the process structure of what actually happens during debugging. It appears that four instances of gdb are started, under the auspices of the sdm debugger.
Interestingly enough, disassembly during a parallel debug does not occur.
Running a Parallel Debug of an OpenMPI Fortran Executable on Multiple Cores/Threads in Eclipse IDE + Photran + Parallel Tools Platform
In this section, we will perform a parallel debug of the simple "Hello World" type program using multiple cores/threads.
The most informative source of in this mode of the Parallel Debugger is the console. It displays all of the steps necessary to setup the program for debugging, as well as the inter-image messaged that are passed during setup. The console output for this program is shown below:
In the debugging view, there will be a set of diamond symbols, signifying an individual image of the running program. These can be activated by double-clicking on the diamond. A single click designates that particular image as the lead process. After activating an image, corresponding message information will appear in the console view.
For this program, to get an informative step-through, click step into the main process and then step over the OMPI particular processes. On occasion, it may be necessary to click group suspend since one image may be waiting for another, and the interprocess message may never be sent due to being held back by the debugger. The end result is that the debugging may appear to hang, but actually it is waiting for an interprocess message. Clicking on group suspend fixes this issue.
Also, it can become very complicated to debug a single image out of the group, because this will result in that image becoming unsynchronized with the group. Usually, this will require a terminate and restart of the debugging process. The goal is to step into the main process, step over the OMPI related processes, and step over the function call to writing "Hello World". If done correctly, this will produce an output of "Hello World" repeated four times.
The structure of the images and loaded libraries can be seen in this snapshot of the debug view shown below.
A video of performing a step-through of a parallel execution program is shown below:


TOP STORY
Joe Biden's Billion-Dollar Campaign Spent $13 for Every Vote
The Democrat's presidential campaign became the first in U.S. to raise one billion dollars from donors.
Trump's Ambiguous COVID Vaccine Order Aims to Give Americans First Access
According to the White House, the order directs the Secretary of Health and Human Services.
FEATURED STORIES
Trump's Final Weeks Bring Risk of Iran War Amid Assassinations, Sanctions
The recent assassination of top nuclear scientist Mohsen Fakhrizdeh threatens to plunge U.S.-Iranian ties into deeper chaos before President-Elect Joe Biden can attempt to thaw relations.
Texas Files Lawsuit With SCOTUS Challenging Election in 4 Swing States
The suit says Georgia, Pennsylvania, Michigan and Wisconsin will determine the election and asks the Supreme Court to delay states appointing their electors.
U.S. Rejected Offers to Buy More Pfizer COVID Vaccine Shots—ex-FDA Chief
The company has entered into agreements to supply other countries since it reported promising results for its vaccine contender, Scott Gottlieb, the head of the Food and Drug Administration (FDA) said.
Joe Biden's Billion-Dollar Campaign Spent $13 for Every Vote
The Democrat's presidential campaign became the first in U.S. to raise one billion dollars from donors.
Biden Defense Pick Austin May Face Opposition Over Record on ISIS
Austin is accused of telling President Barack Obama that ISIS was merely a "flash in the pan."
Texas Files Lawsuit With SCOTUS Challenging Election in 4 Swing States
The suit says Georgia, Pennsylvania, Michigan and Wisconsin will determine the election and asks the Supreme Court to delay states appointing their electors.
TOP STORY
Joe Biden's Billion-Dollar Campaign Spent $13 for Every Vote
The Democrat's presidential campaign became the first in U.S. to raise one billion dollars from donors.
Trump's Ambiguous COVID Vaccine Order Aims to Give Americans First Access
According to the White House, the order directs the Secretary of Health and Human Services.
MY TURN
'I'm 23, I Had a Mini Stroke Days After Contracting COVID'
'My Baby Had a Medical Emergency During COVID'
'I'm 12. Next Year I'm Studying Aerospace Engineering at University'
CULTURE & TRAVEL
Is Car Glamping the More Accessible Alternative to Van Life?
These Countries Are the Most Dependent on Tourism
100 Best Rock Albums of All Time
MORE STORIES
Republicans Spar Over Inviting COVID Vaccine Skeptic to Senate Hearing
"I think it's nuts to bring that into the Senate," Senator Mitt Romney said.
Trump's Ambiguous COVID Vaccine Order Aims to Give Americans First Access
According to the White House, the order directs the Secretary of Health and Human Services to provide priority access to COVID-19 vaccines to Americans.
Rebekah Jones Says Florida Gov. DeSantis Trying to 'Intimidate Scientists'
Jones issued a warning to her Department of Health sources that their identities might be exposed, and denied being behind a message investigated by law enforcement.
Lara Trump Top Pick to Succeed Retiring GOP Senator in 2022: Poll
The poll, which was conducted by the BUSR/UNLV Lee Business School, found 24 percent of respondents in North.
Republicans Spar Over Inviting COVID Vaccine Skeptic to Senate Hearing
"I think it's nuts to bring that into the Senate," Senator Mitt Romney said.
Trump's Ambiguous COVID Vaccine Order Aims to Give Americans First Access
According to the White House, the order directs the Secretary of Health and Human Services to provide priority access to COVID-19 vaccines to Americans.
Rebekah Jones Says Florida Gov. DeSantis Trying to 'Intimidate Scientists'
Jones issued a warning to her Department of Health sources that their identities might be exposed, and denied being behind a message investigated by law enforcement.
Lara Trump Top Pick to Succeed Retiring GOP Senator in 2022: Poll
The poll, which was conducted by the BUSR/UNLV Lee Business School, found 24 percent of respondents in North.
MY TURN
'I'm 23, I Had a Mini Stroke Days After Contracting COVID'
'My Baby Had a Medical Emergency During COVID'
'I'm 12. Next Year I'm Studying Aerospace Engineering at University'
CULTURE & TRAVEL
Is Car Glamping the More Accessible Alternative to Van Life?
These Countries Are the Most Dependent on Tourism
100 Best Rock Albums of All Time
THE DEBATE
OPINION
The Netherlands - Home of Innovation
With a reputation as one of Europe’s most connected, digitized, and innovative economies, the Netherlands recently overtook the UK as the top recipient of FDI inflows in Europe.
Why are these careers so highly sought after?
These are some of the most highly rated careers areas today. How do you get started in them?
Who has the Leading Art, Design and Architecture Programs in 2020?
The best Art, Design and Architecture schools use a recipe consisting of a blend of ingredients. Read more here.
Start your day with our top 5 articles
IN THE MAGAZINE
EDITOR'S PICK
William Shakespeare Becomes Second Person to Get Pfizer COVID Vaccine
Shakespeare, who shares his name with the famous English playwright, has made history by becoming one of the first people to have the shot outside of clinical trials.
William Shakespeare Becomes Second Person to Get Pfizer COVID Vaccine
Shakespeare, who shares his name with the famous English playwright, has made history by becoming one of the first people to have the shot outside of clinical trials.
Monolith Reportedly Found in Colombia Is Latest to Appear Around The World
Shakespeare, who shares his name with the famous English playwright, has made history by becoming one of the first people to have the shot outside of clinical trials.
Trump Made Firing Squad, Poison Gas Executions Possible—Will They Happen?
Shakespeare, who shares his name with the famous English playwright, has made history by becoming one of the first people to have the shot outside of clinical trials.
Fauci Says No One Wants to Shut Down Christmas but Situation is 'Critical'
Shakespeare, who shares his name with the famous English playwright, has made history by becoming one of the first people to have the shot outside of clinical trials.
William Shakespeare Becomes Second Person to Get Pfizer COVID Vaccine
Shakespeare, who shares his name with the famous English playwright, has made history by becoming one of the first people to have the shot outside of clinical trials.
William Shakespeare Becomes Second Person to Get Pfizer COVID Vaccine
Shakespeare, who shares his name with the famous English playwright, has made history by becoming one of the first people to have the shot outside of clinical trials.
William Shakespeare Becomes Second Person to Get Pfizer COVID Vaccine
Shakespeare, who shares his name with the famous English playwright, has made history by becoming one of the first people to have the shot outside of clinical trials.
U.S.
Trump's Ambiguous COVID Vaccine Order.
According to the White House, the order directs the Secretary of Health.
Rebekah Jones Says Florida Gov.
Jones issued a warning to her Department of Health sources that their identities.
Lara Trump Top Pick to Succeed Retiring GOP Senator
The poll, which was conducted by the BUSR/UNLV Lee Business School.
WORLD
Rebekah Jones Says Florida Gov.
Jones issued a warning to her Department of Health sources that their identities.
Trump's Ambiguous COVID Vaccine Order.
According to the White House, the order directs the Secretary of Health.
Lara Trump Top Pick to Succeed Retiring GOP Senator
The poll, which was conducted by the BUSR/UNLV Lee Business School.
BUSINESS
Trump's Ambiguous COVID Vaccine Order.
According to the White House, the order directs the Secretary of Health.
Rebekah Jones Says Florida Gov.
Jones issued a warning to her Department of Health sources that their identities.
Lara Trump Top Pick to Succeed Retiring GOP Senator
The poll, which was conducted by the BUSR/UNLV Lee Business School.
TECH & SCIENCE
Trump's Ambiguous COVID Vaccine Order.
According to the White House, the order directs the Secretary of Health.
Rebekah Jones Says Florida Gov.
Jones issued a warning to her Department of Health sources that their identities.
Lara Trump Top Pick to Succeed Retiring GOP Senator
The poll, which was conducted by the BUSR/UNLV Lee Business School.
CULTURE
Trump's Ambiguous COVID Vaccine Order.
According to the White House, the order directs the Secretary of Health.
Rebekah Jones Says Florida Gov.
Jones issued a warning to her Department of Health sources that their identities.
Lara Trump Top Pick to Succeed Retiring GOP Senator
The poll, which was conducted by the BUSR/UNLV Lee Business School.
SUBSCRIBE
In-depth Stories You Don't See Elsewhere About Topics You Want to Read!
All Access + Weekly Delivery. Choose A Membership That's Perfect for You!
NEWSLETTER


Kathleen's Photo Gallery
Selfie when travelling in Gold Coast
Noodle Festival in Canberra
My pet tortoises in China
Photo in Mountain View Googleplex
Good view from the belcony
Back to Home


1
2
3
4
5
5
5
5
5
5
©
Andrea Giammarchi
CSS3
transictions example for one
Ajaxian
post. Original images from
Tutorialzine


Previous: {{appointment.prettyDate}}
Duration is required.
Experiment is required.
Previous: {{prevExperimentName}}: {{prevExperimentConditions}}


Sound box
Power
Volume
Radio
Settings
Source
5.1
Radio
AUX 2
AUX 3
AUX 4
All
Front Left
Front Right
Rear Left
Rear Right
Sub woofer
Center
FM Tuner -
000.0
MHz
-1Mhz
-100Hz
+100Hz
+1Mhz
State
Mixing
Enhance
Mute
LCD
Send!