void route(const X& value, Devs<X>* model, Bag<Event<X> >& r)
The value argument is the object to route, the model argument is the Network or Atomic model that is the source of the value object, and the r argument is a bag to be filled with models that should receive the value object as input. Each target is described by an Event object that carries two pieces of information: a pointer to the model that is the target and the object to be delivered to that target. The simulator uses the Event objects in one of three ways depending on the relationship between the source of the object and its target. These uses are
The simplest example of the route method converts output from one Atomic component into input for another Atomic component. Figure 5.1 illustrates this case. The simulator begins by invoking the output_func method of Atomic model . Next, the simulator iterates through the elements of 's output bag, calling the Network's route method for each one. The arguments passed to route at each call are
Two things are done by the route method to cause Atomic model to receive the output object from . First, an Event object is created that contains the output object and a pointer to . Second, this Event object is inserted into the Bag r. If we suppose, for the sake of illustration, that input and output objects have type int, then the route method for this example is
void route(const int& value, Devs<int>* model, Bag<Event<int> >& r) { if (model == A) { Event<int> e(B,value); r.insert(e); } }where and are pointers to the respective models. This route method implements the network shown in Fig. 5.1.
A more complicated example is the network receiving input destined for one of its atomic components. This can happen, for instance, when the network is a component of another network. Suppose the input to the network is to become input for Atomic model . Figure 5.2 extends Fig. 5.1 to include this connection.
When an event appears at the input of the network, the simulator calls the Network's route method with the following arguments:
void route(const int& value, Devs<int>* model, Bag<Event<int> >& r) { if (model == A) { Event<int> e(B,value); r.insert(e); } else if (model == this) { Event<int> e(A,value); r.insert(e); } }
For a complete example, the network is extended to include two more connections: a connection from the output of model to the output of the network and a feedback connection from to . This configuration is shown in Fig. 5.3. These new connections require an additional case in the route method. This case checks for output from and, if such an output is found, directs it to both and the network. An Event object is created for each target and added to the Bag r of receivers: one of these Events results in an input to and the other in an output from the network. Here is the implementation.
void route(const int& value, Devs<int>* model, Bag<Event<int> >& r) { if (model == A) { Event<int> e(B,value); r.insert(e); } else if (model == this) { Event<int> e(A,value); r.insert(e); } else if (model == B) { Event<int> e1(this,value); Event<int> e2(A,value); r.insert(e1); r.insert(e2); } }
Though not demonstrated above, the route method is allowed to modify the value object before sending it to a target. This can be useful in some instances.
void getComponents(Set<Devs<X>*>& c)where c is the set to be filled. The code below shows how this method is implemented for the two component network shown in Fig. 5.3. This code, of course, also works for the networks shown in Figs. 5.2 and 5.1.
void getComponents(Set<Devs<int>*>& c) { c.insert(A); c.insert(B); }
There are no special rules for simulating hierarchical models. The simulator considers the entire collection of atomic models when determining the next event time, output from atomic models are recursively routed to their atomic destinations, and the state transitions and garbage collection are performed over the complete set of active atomic components. Hierarchies of network models are a convenient organizing tool for the modeler, but the simulator flattens (indirectly, via its recursive routing of events) multi-level networks during simulation.
Algorithm 1 sketches the simulation procedure. Note that the procedure for simulating atomic models (see section 4) is embedded in the procedure for simulating network models. The rules for atomic models do not change: each atomic model sees a sequence of input events and produces a sequence of output events just as before. The only difference here is that the input events are created by other atomic models, and so the input sequence for each atomic model is constructed as the simulation progresses.
The SimpleDigraph has two methods for building a network. The add method takes an Atomic or Network model and adds it to the set of components. The couple method accepts a pair of components and connects the first to the second. Below is the class definition for the model. Note that it has a template parameter for setting its input and output type.
template <class VALUE> class SimpleDigraph: public Network<VALUE> { public: /// A component of the SimpleDigraph model typedef Devs<VALUE> Component; /// Construct a network with no components SimpleDigraph():Network<VALUE>(){} /// Add a model to the network. void add(Component* model); /// Couple the source model to the destination model void couple(Component* src, Component* dst); /// Assigns the model component set to c void getComponents(Set<Component*>& c); /// Use the coupling information to route an event void route(const VALUE& x, Component* model, Bag<Event<VALUE> >& r); /// The destructor destroys all of the component models ~SimpleDigraph(); private: // Component model set Set<Component*> models; // Coupling information std::map<Component*,Bag<Component*> > graph; };The SimpleDigraph has two member variables. The first is a set of pointers to the components of the network. These are stored in the Set called models. The components can be Atomic objects, Network objects, or both. These components of the SimpleDigraph are the nodes of its directed graph. The second member variable is the network's links. These are stored in the map called graph.
The SimpleDigraph has four methods plus the required route and getComponents. One of these is the constructor, which creates an empty network. Another is the destructor, which deletes all of the network's components. The remaining two are add and couple.
The add method does three things. First, it checks that the network is not being added to itself. This is illegal and will cause the simulator to throw an exception. Next, it adds the new component to its set of components. Last, the SimpleDigraph makes itself the component's parent. This needed so that the simulator can climb up and down the model tree. If this step is omitted then the recursive routing of events will fail. Here is the implementation of the add method.
template <class VALUE> void SimpleDigraph<VALUE>::add(Component* model) { assert(model != this); models.insert(model); model->setParent(this); }
The couple method does two things. First, it adds the source (src) and destination (dst) models to the set of components. We could simply have required that the user call the add method before calling the couple method, but adding the components here doesn't hurt and might prevent an error. Second, couple adds the src dst link to the graph. Notice that the SimpleDigraph itself is a node in the network, but it is not in the set of components!. Components that are connected to the network cause outputs from the network. Similarly, connecting the network to a component causes input to the network to become input to the component. Here is the implementation of the couple method.
template <class VALUE> void SimpleDigraph<VALUE>::couple(Component* src, Component* dst) { if (src != this) add(src); if (dst != this) add(dst); graph[src].insert(dst); }
Of the two required methods, route is the more complicated. The arguments to route are an object to be routed, the network element (i.e., either the SimpleDigraph or one of its components) that created that object, and the Bag to be filled with Event objects that indicate the object's receivers. The method begins by finding the collection of components that are connected to the source of the object. Next, it iterates through this collection and for each receiver adds an Event to the Bag of receivers. When this is done the method returns. The implementation is below.
template <class VALUE> void SimpleDigraph<VALUE>::route(const VALUE& x, Component* model,Bag<Event<VALUE> >& r) { // Find the list of target models and ports typename std::map<Component*,Bag<Component*> >::iterator graph_iter; graph_iter = graph.find(model); // If no target, just return if (graph_iter == graph.end()) return; // Otherwise, add the targets to the event bag Event<VALUE> event; typename Bag<Component*>::iterator node_iter; for (node_iter = (*graph_iter).second.begin(); node_iter != (*graph_iter).second.end(); node_iter++) { event.model = *node_iter; event.value = x; r.insert(event); } }
The second required method, getComponents, is trivial. If we had used some collection other than a Set to store the components, then the method would have needed to explicitly insert every component model into the Set c. But because models and c are both Set objects, and the Set has an assignment operator, a call to that operator is sufficient.
template <class VALUE> void SimpleDigraph<VALUE>::getComponents(Set<Component*>& c) { c = models; }
The constructor and the destructor complete the class. The constructor only calls the superclass constructor. The destructor deletes the component models. Its implementation is shown below.
template <class VALUE> SimpleDigraph<VALUE>::~SimpleDigraph() { typename Set<Component*>::iterator i; for (i = models.begin(); i != models.end(); i++) { delete *i; } }
// Create a digraph model whose components use PortValue<Customer*> // objects as input and output objects. adevs::Digraph<Customer*> store; // Create and add the component models Clerk* clrk = new Clerk(); Generator* genr = new Generator(argv[1]); store.add(clrk); store.add(genr); // Couple the components store.couple(genr,genr->arrive,clrk,clrk->arrive);
The components of a Digraph must use adevs::PortValue objects for their input and output type. The Digraph is a template class with two template parameters. The first parameter is the type of object used for a value in its PortValue objects. The second parameter is the type of object used for a port in its PortValue objects. The port parameter is of type `int' by default.
The Digraph has two methods that are used to construct a network. The add method adds a component to the network. The argument to the add method is the model to be included in the network. The couple method connects components of the network. The first two arguments to the couple method are the source model and port. The second two arguments are the destination model and port.
The effect of coupling a source model to a destination model is that output produced by the source model on the source port appears as input to the destination model on the destination port. To illustrate this, consider the output function of the Generator model shown in Fig. 5.5.
void Generator::output_func(Bag<IO_Type>& yb) { // First customer in the list is produced as output IO_Type output(arrive,arrivals.front()); yb.insert(output); }
This output function places a value of type `Customer*' on the ``arrive'' port of the Generator; recall that 'IO_Type' is a typedef for `PortValue<Customer*>'. A corresponding PortValue object appears in the input bag of the Clerk. The value attribute of the PortValue object received by the clerk points to the Customer object created by the Generator. The port attribute of the PortValue object is the Clerk's ``arrive" port.
The components for the network need not consist only of Atomic models; the Digraph can also have other Network models as its components. For instance, suppose we want to model a convenience store that has two clerks. When customers are ready to pay their bill, they enter the shortest line. To build this model, we reuse the Clerk, Generator and Observer models introduced in section 3. We add a model called Decision of how customers select a line.
The code for the Decision model is shown below. This model has two output ports, one for each line, and there are three input ports. One input port accepts new customers. The others are used to track the number of customers departing each line: a customer departing either clerk generates an event on the appropriate input port. In this way, the model is able to track the number of customers in each line and assign new customers to the shortest one. Here is the class definition
#include "adevs.h" #include "Customer.h" #include <list> // Number of lines to consider. #define NUM_LINES 2 class Decision: public adevs::Atomic<IO_Type> { public: /// Constructor. Decision(); /// Internal transition function. void delta_int(); /// External transition function. void delta_ext(double e, const adevs::Bag<IO_Type>& x); /// Confluent transition function. void delta_conf(const adevs::Bag<IO_Type>& x); /// Output function. void output_func(adevs::Bag<IO_Type>& y); /// Time advance function. double ta(); /// Output value garbage collection. void gc_output(adevs::Bag<IO_Type>& g); /// Destructor. ~Decision(); /// Input port that receives new customers static const int decide; /// Input ports that receive customers leaving the two lines static const int departures[NUM_LINES]; /// Output ports that produce customers for the two lines static const int arrive[NUM_LINES]; private: /// Lengths of the two lines int line_length[NUM_LINES]; /// List of deciding customers and their decision. std::list<std::pair<int,Customer*> > deciding; /// Delete all waiting customers and clear the list. void clear_deciders(); /// Returns the arrive port associated with the shortest line int find_shortest_line(); };and here is the implementation
#include "Decision.h" #include <iostream> using namespace std; using namespace adevs; // Assign identifiers to ports. Assumes NUM_LINES = 2. // The numbers are selected to allow indexing into the // line length and port number arrays. const int Decision::departures[NUM_LINES] = { 0, 1 }; const int Decision::arrive[NUM_LINES] = { 0, 1 }; // Inport port for arriving customer that need to make a decision const int Decision::decide = NUM_LINES; Decision::Decision(): Atomic<IO_Type>() { // Set the initial line lengths to zero for (int i = 0; i < NUM_LINES; i++) { line_length[i] = 0; } } void Decision::delta_int() { // Move out all of the deciders deciding.clear(); } void Decision::delta_ext(double e, const Bag<IO_Type>& x) { // Assign new arrivals to a line and update the line length Bag<IO_Type>::const_iterator iter = x.begin(); for (; iter != x.end(); iter++) { if ((*iter).port == decide) { int line_choice = find_shortest_line(); Customer* customer = new Customer(*((*iter).value)); pair<int,Customer*> p(line_choice,customer); deciding.push_back(p); line_length[p.first]++; } } // Decrement the length of lines that had customers leave for (int i = 0; i < NUM_LINES; i++) { iter = x.begin(); for (; iter != x.end(); iter++) { if ((*iter).port < NUM_LINES) { line_length[(*iter).port]--; } } } } void Decision::delta_conf(const Bag<IO_Type>& x) { delta_int(); delta_ext(0.0,x); } double Decision::ta() { // If there are customers getting into line, then produce output // immediately. if (!deciding.empty()) { return 0.0; } // Otherwise, wait for another customer else { return DBL_MAX; } } void Decision::output_func(Bag<IO_Type>& y) { // Send all customers to their lines list<pair<int,Customer*> >::iterator i = deciding.begin(); for (; i != deciding.end(); i++) { IO_Type event((*i).first,(*i).second); y.insert(event); } } void Decision::gc_output(Bag<IO_Type>& g) { Bag<IO_Type>::iterator iter = g.begin(); for (; iter != g.end(); iter++) { delete (*iter).value; } } Decision::~Decision() { clear_deciders(); } void Decision::clear_deciders() { list<pair<int,Customer*> >::iterator i = deciding.begin(); for (; i != deciding.end(); i++) { delete (*i).second; } deciding.clear(); } int Decision::find_shortest_line() { int shortest = 0; for (int i = 0; i < NUM_LINES; i++) { if (line_length[shortest] > line_length[i]) { shortest = i; } } return shortest; }
The block diagram of the store and its multiple clerks is shown in Fig. 5.6. The external interface for this block diagram is identical to that of the clerks. It has the same inputs and outputs as the Clerk and Clerk2 models, and we can therefore use the Generator and Observer models to conduct the same experiments as before.
The external ``arrive" input of the multi-clerk model is connected to the ``decide" input of the Decision model. The ``depart" output ports of each of the Clerk models is connected to the external ``arrive" output port of the multi-clerk model. The Decision model has two output ports, each producing customers for a distinct clerk. These output ports are coupled to the ``arrive" port of the appropriate clerk. The Clerk's ``depart" output ports are coupled to the appropriate ``departures" port of the decision model.
The multi-clerk model is implemented by deriving a new class from Digraph. The constructor of this new class creates and adds the component models and establishes their interconnections. Here is the header file for this new multi-clerk model.
#include "adevs.h" #include "Clerk.h" #include "Decision.h" /** A model of a store with multiple clerks and a "shortest line" decision process for customers. */ class MultiClerk: public adevs::Digraph<Customer*> { public: // Model input port static const int arrive; // Model output port static const int depart; // Constructor. MultiClerk(); // Destructor. ~MultiClerk(); };And here is the source file
#include "MultiClerk.h" using namespace std; using namespace adevs; // Assign identifiers to I/O ports const int MultiClerk::arrive = 0; const int MultiClerk::depart = 1; MultiClerk::MultiClerk(): Digraph<Customer*>() { // Create and add component models Decision* d = new Decision(); add(d); Clerk* c[NUM_LINES]; for (int i = 0; i < NUM_LINES; i++) { c[i] = new Clerk(); add(c[i]); } // Create model connections couple(this,this->arrive,d,d->decide); for (int i = 0; i < NUM_LINES; i++) { couple(d,d->arrive[i],c[i],c[i]->arrive); couple(c[i],c[i]->depart,d,d->departures[i]); couple(c[i],c[i]->depart,this,this->depart); } } MultiClerk::~MultiClerk() { }Notice that the MultiClerk destructor does not delete its component models. This is because the components are adopted by the base class when they are added using the Digraph's add method. Consequently, the component models are deleted by the base class destructor, rather than the destructor of the derived class.
Our implementation of the Game of Life has two parts: atomic models that implement the individual cells and a CellSpace that contains the cells. The CellSpace is a type of Network, and its components exchange CellEvent objects that have four attributes: the x, y, and z coordinates of the target cell (the cell space can have three dimensions; the Game of Life uses just two) and the object to deliver to that target. The CellEvent class is a template class whose template argument sets the type of object that the event delivers. The size of the CellSpace is determined when the CellSpace object is created, and it has methods for adding and retrieving cells by location.
The Atomic cells in our Game of Life have two state variables: the dead or alive status of the cell and its count of living neighbors. Two methods are implemented to test the death and rebirth rules, and the cell sets its time advance to 1 whenever a rule is satisfied.
The output of the cell is its new dead or alive state. In order to produce properly targeted CellEvents, each cell knows its own location in the cell space. The internal transition function causes the cell to change its dead/alive state. The external transition function updates the cell's count of living neighbors as those neighbors change their dead/alive state. Here is header file for our Game of Life cell.
/// Possible cell phases typedef enum { Dead, Alive } Phase; /// IO type for a cell typedef adevs::CellEvent<Phase> CellEvent; /// A cell in the Game of Life. class Cell: public adevs::Atomic<CellEvent> { public: /** Create a cell and set the initial state. The width and height fields are used to determine if a cell is an edge cell. The last phase pointer is used to visualize the cell space. */ Cell(long int x, long int y, long int width, long int height, Phase phase, short int nalive, Phase* vis_phase = NULL); ... Required Adevs methods and destructor ... private: // location of the cell in the 2D space long int x, y; // dimensions of the 2D space static long int w, h; // Current cell phase Phase phase; // number of living neighbors. short int nalive; // Output variable for visualization Phase* vis_phase; // Returns true if the cell will be born bool check_born_rule() const { return (phase == Dead && nalive == 3); } // Return true if the cell will die bool check_death_rule() const { return (phase == Alive && (nalive < 2 || nalive > 3)); } };
The template argument supplied to the base Atomic class is a CellEvent whose value attribute has the type Phase. The check_born_rule method tests the rebirth condition and the check_death_rule method tests the death condition. The appropriate rule, as determined by the cell's dead or alive status, is used in the time advance, output, and internal transition methods (i.e., if the cell is dead then check the rebirth rule; if alive, check the death rule). The number of living cells is updated by the cell's delta_ext method when neighboring cells report a change in their state. Here are the Cell's method implementations.
Cell::Cell(long int x, long int y, long int w, long int h, Phase phase, short int nalive, Phase* vis_phase): adevs::Atomic<CellEvent>(),x(x),y(y),phase(phase),nalive(nalive),vis_phase(vis_phase) { // Set the global cellspace dimensions Cell::w = w; Cell::h = h; // Set the initial visualization value if (vis_phase != NULL) *vis_phase = phase; } double Cell::ta() { // If a phase change should occur then change state if (check_death_rule() || check_born_rule()) return 1.0; // Otherwise, do nothing return DBL_MAX; } void Cell::delta_int() { // Change the cell state if necessary if (check_death_rule()) phase = Dead; else if (check_born_rule()) phase = Alive; } void Cell::delta_ext(double e, const adevs::Bag<CellEvent>& xb) { // Update the living neighbor count adevs::Bag<CellEvent>::const_iterator iter; for (iter = xb.begin(); iter != xb.end(); iter++) { if ((*iter).value == Dead) nalive--; else nalive++; } } void Cell::delta_conf(const adevs::Bag<CellEvent>& xb) { delta_int(); delta_ext(0.0,xb); } void Cell::output_func(adevs::Bag<CellEvent>& yb) { CellEvent e; // Assume we are dying e.value = Dead; // Check in case this in not true if (check_born_rule()) e.value = Alive; // Set the visualization value if (vis_phase != NULL) *vis_phase = e.value; // Generate an event for each neighbor for (long int dx = -1; dx <= 1; dx++) { for (long int dy = -1; dy <= 1; dy++) { e.x = (x+dx)%w; e.y = (y+dy)%h; if (e.x < 0) e.x = w-1; if (e.y < 0) e.y = h-1; // Don't send to self if (e.x != x || e.y != y) yb.insert(e); } } }
The output_func method shows how a cell sends messages to its neighbors. The nested for loops create a CellEvent targeted at each adjacent cell. The location of the targeted cell is written to the x, y, and z attributes of the CellEvent object. Just like arrays, the locations range from zero to the cell space's size minus one. The CellSpace routes the CellEvent objects to their targets. However, if the target of the CellEvent is outside of the cell space, then the CellSpace itself will produce the CellEvent as an output.
The remainder of the simulation program looks very much like the simulation programs that we've seen. A CellSpace object is created and we add cells to it. Then a Simulator object is created and a pointer to the CellSpace is passed to the Simulator's constructor. Last, we execute events until our stopping criteria is met. The execution part is already familiar, so let's just focus on creating the CellSpace. Here is the code snippet that performs the construction.
// Create the cellspace model cell_space = new adevs::CellSpace<Phase>(WIDTH,HEIGHT); for (int x = 0; x < WIDTH; x++) { for (int y = 0; y < HEIGHT; y++) { // Count the living neighbors short int nalive = count_living_cells(x,y); // The 2D phase array contains the initial Dead/Alive state of each cell cell_space->add(new Cell(x,y,WIDTH,HEIGHT,phase[x][y],nalive,&(phase[x][y])),x,y); } }
Just as with the Digraph class, the CellSpace template argument determines the value type for the CellEvent objects used as input and output. The CellSpace constructor sets the dimensions of the space. Every CellSpace is three dimensional, and the constructor accepts three arguments for its x, y, and z dimensions. Omitted arguments default to 1. The signature of the constructor is
CellSpace(long int width, long int height = 1, long int depth = 1)
Components are added to the cellspace with the add method. This method places a component at a specific x, y, and z location. Its signature is
void add(Cell* model, long int x, long int y = 0, long int z = 0)where Cell is a Devs (atomic or network) by the type definition
typedef Devs<CellEvent<X> > Cell;Also like the Digraph, the CellSpace deletes its components when it is deleted.
The CellSpace has five methods for retrieving cells and the dimensions of the cell space. These are more or less self-explanatory; the signatures are shown below.
const Cell* getModel(long int x, long int y = 0, long int z = 0) const; Cell* getModel(long int x, long int y = 0, long int z = 0); long int getWidth() const; long int getHeight() const; long int getDepth() const;
The Game of Life produces a surprising number of distinct patterns. Some of these patterns are fixed and unchanging. Others oscillate, cycling through a set of patterns that always repeats itself. Still others seem to crawl or fly. One common pattern is the Block, which is shown in Fig. 5.7. Our discrete event implementation of the Game of Life doesn't do any work when simulating a Block. None of the cells in a Block change in any way: their states are constant and so are their neighbor counts.
The confluent transition function plays an important role in the Blinker. All but the first row in Table 5.1 has simultaneous input and output, which means that an internal and external event coincide. Consequently, the next state of the cell is determined by its delta_conf method. It is also important that the input and output bags carry multiple values. The external transition function (which is used in defining the confluent transition function) must be able to compute the number of living neighbors before determining its next state. If input events were provided one at a time (e.g., if the input bag were replaced by a single input event), then our discrete event Game of Life would be much more difficult to implement.


A beautiful example of disequations at work is due to [Colmerauer
90]. It addresses the task of tiling a rectangle with squares of
all-different, a priori unknown sizes. Here is a translation of the
original Prolog-III
program to clp(Q,R):
% library('clpqr/examples/squares')filled_rectangle(A, C) :- { A >= 1 }, distinct_squares(C), filled_zone([-1,A,1], _, C, []). distinct_squares([]). distinct_squares([B|C]) :- { B > 0 }, outof(C, B), distinct_squares(C). outof([], _). outof([B1|C], B) :- { B =\= B1 }, % *** note disequation *** outof(C, B). filled_zone([V|L], [W|L], C0, C0) :- { V=W,V >= 0 }. filled_zone([V|L], L3, [B|C], C2) :- { V < 0 }, placed_square(B, L, L1), filled_zone(L1, L2, C, C1), { Vb=V+B }, filled_zone([Vb,B|L2], L3, C1, C2). placed_square(B, [H,H0,H1|L], L1) :- { B > H, H0=0, H2=H+H1 }, placed_square(B, [H2|L], L1). placed_square(B, [B,V|L], [X|L]) :- { X=V-B }. placed_square(B, [H|L], [X,Y|L]) :- { B < H, X= -B, Y=H-B }.
There are no tilings with less than nine squares except the trivial one where the rectangle equals the only square. There are eight solutions for nine squares. Six further solutions are rotations of the first two.
clp(q) ?- [library('clpqr/examples/squares')]. clp(q) ?- filled_rectangle(A, Squares). A = 1, Squares = [1] ? ; A = 33/32, Squares = [15/32,9/16,1/4,7/32,1/8,7/16,1/32,5/16,9/32] ? ; A = 69/61, Squares = [33/61,36/61,28/61,5/61,2/61,9/61,25/61,7/61,16/61] ? <RET>
Depending on your hardware, the above query may take a few minutes. Supplying the knowledge about the minimal number of squares beforehand cuts the computation time by a factor of roughly four:
clp(q) ?- length(Squares, 9), filled_rectangle(A, Squares). A = 33/32, Squares = [15/32,9/16,1/4,7/32,1/8,7/16,1/32,5/16,9/32] ? ; A = 69/61, Squares = [33/61,36/61,28/61,5/61,2/61,9/61,25/61,7/61,16/61] ? <RET>


If you create a Scottrade account and mention my "ReferALL code"
EPBK4488, you and I will both get 3 free trades ($21 value) each.
I would begin simply by purchasing shares of
VT (Vanguard Total World Stock ETF). One can later split into
different asset classes (e.g. for rebalancing) as investment assets
grow.
With more money, I recommend investing directly with
Vanguard.


--- layout: page title: -writing description: order: 1 ---
These are some bits and pieces I published between 2012 and 2014, before and while branching out into journalism. They illustrate the transition from rather specialised science communication in molecular biology to science and data journalism for a lay audience. There are interesting challenges on both ends of the spectrum: Being specific, concise, but not boring on one end and simple, yet factually correct on the other. Either way, I try to be interesting.


--- layout: default title: 404 hide-in-nav: true description: "Sorry! You have reached a dead endor this link has not been released yet." header-img: "img/404-bg.jpg" --- {% include intro-header.html type="page" short='true' %}


--- title: Welcome to my Project Page layout: default bodyClass: page-home ---
A study of the effect of limited field of view on drone swarms using a state of the art predictive trajectory generation and collision avoidance algorithm.
A study of the effect of Mobility on Friendship using different models to predict how many friends Foursquare users will make or break in a 22 month time period.
We used computer vision to detect and track two seperate Thymios, and switch their positions using following an optimal path, all while avoiding local obstacles.


--- layout: home author_profile: true title: Candace Ng excerpt: | Welcome to my website! header: overlay_image: "images/main-header-test.jpg" caption: "Hiking at Peyto Lake" ---


How is bundler/bundler?
How is rubygems/rubygems?
How is
| Repository | Total Issues | Total PRs | Average Issue Age | Average PR Age | Test Coverage |
|---|---|---|---|---|---|
| bundler/bundler | 178 | 30 | 4 months and 2 weeks | 2 months and 2 weeks | 75% |
| rubygems/rubygems | 132 | 36 | 1 year and 4 months | 11 months and 1 week | unknown |


{% load staticfiles %}
Super Resolution
SUPER RESOLUTION
Home
(current)
About
{% csrf_token %}
UPLOAD THE IMAGE/VIDEO


The World Wide Web is a collection of document pages stored on computers called servers. Individual computers can access Web pages through the internet using http. Http is the address that tell the server how to locate the web page. The Udacity Video provides a nice introduction to the web.
HTML is the coding language that most of the pages on the web are written in. The full name for HTML is hypertext markup language. Tags are shortcuts that tell the browser how to display a page. Html is written by having an opening tag, then the contents and then the closing tag. Tags can be inline such as a, span, br, ing, stong or block div, p, form . Inline means the code works within the line and block means it draws an invisible block around the text.
Another main point to remember is that computers take everything literal. A little typo can mess up the entire page.
Web pages can consist of three programming languages. HTML controls the structure of the page. CSS controls the style of the page. Java Script controls the interactive components.
Html is written in a tree like structure. Each box of code branches out into other branches. This tree like structure is also called DOM (Document Object Model). Html is written in a wave of indentation on the left side of a document. An element is considered deepely nested if it is more indented inside it's box.
Avoiding repetition is important to avoid errors. If you are writing the same code over and over it is very easy to make errors. If then you want to change the code, every line of repetition must be changed to avoid problems. Avoiding repetition is also important to maintain consistency when you are adding style elements.
Cascading Style Sheets (CSS) is a way of adding style to a web page. Elements on a page are named and then the style such a font, color, etc can be applied to the elements.


Loading...
Record
Pause
Stop
Format: start recording to see sample rate
Recordings
« All albums
Share
Add photos +
▾
Delete selected
Report an issue


My name is Esteban, I enjoy building things and solving problems.
Questions, comments or maybe you would like to collaborate on a project?
After the year 2020 the form below will be disabled and only shown for reference. Follow the "New form" link to send a message using a working form.


Daniel Azer's Web Portfolio
Home
About Me
Coding Examples
Coding Examples
Here is a small example of my coding knowledge learned while here at epicodus!
Coding 1
Coding 2
Coding 3
Some of the terminology and tools I have learned include
HTML
CSS
GitHub


First part of the tutorial was a good introduction to DORF, which resulted in the following app (more or less): http://embed.plnkr.co/TV4H5K/.
Main problems identified in the first part:
'Save'
instead of 'Submit'
update
function is not the perfect way of acting with DORF ObjectPutting a characteristic red star after the label of the required field is really trivial in DORF. All you need is requiredWithStar
set to true
somewhere inside DorfModule.forRoot
method in app.module
.
Currently we are having 2 buttons and one of them is not needed. Also, they are ugly. The solution for this - once again
- is a modification of DorfModule.forRoot
method. The end result can look like this:
DorfModule.forRoot({
css: {
section: 'row',
wrapper: 'form-group col-12 row',
label: 'col-2 col-form-label',
fieldGeneralization: 'col-10',
htmlField: 'form-control',
buttons: {
save: 'btn btn-primary',
reset: 'hidden-xs-up'
}
},
dorfFields: [{
tag: DorfField.CHECKBOX,
css: {
wrapper: 'checkbox col-12 row',
htmlField: 'checkbox'
}
}],
requiredWithStar: true
})
Styles are taken directly from Bootstrap.
Time for something harder. In the current version of DORF, there are no mechanisms for customizing button text. But we can still achieve our goal by:
Let’s take a look at the first option.
DORF is written in a modular way. Dependencies are presented below:
There are 3 main modules:
DorfCoreModule
- an essence, which exports the configuration, ReactiveFormsModule
from Angular
and abstract TypeScript classes, used later by the fields.DorfFieldsModule
- module which collects field-related stuff: input, select, radio,
checkbox and the field generalization. The idea behind one module for all the field components is
simple - it should allow an easy switch. E.g. it is doable to define components with DORF-like selectors which use
e.g. Angular Material behind the scenes. Then, a new module containing them should be used on top of DorfCoreModule
.
Sooner or later DORF should be improved to allow even an easier way for overriding the default fields.DorfModule
- final module, which uses the previous ones and adds wrappers and buttons.As written above, DorfModule
stores buttons component. Let’s take a deeper look at this:
What needs to be done is similar to what happened in definition-extras
example from the official DORF repository.
DorfButtonsComponent
has HTML template which is the source of our problem. And the solution is to create
a new component, e.g. src/app/ext/custom-buttons-component.ts
:
import { Component } from '@angular/core';
import { DorfButtonsComponent } from 'dorf';
@Component({
selector: 'dorf-buttons',
template: `
<section [ngClass]="config.css.buttons?.group">
<button (click)="submit()" [ngClass]="config.css.buttons?.save" [disabled]="!form || !form.valid">Submit</button>
</section>
`
})
export class CustomButtonsComponent extends DorfButtonsComponent { }
HTML was modified to match our requirements. We even removed unneeded “Reset” button. Hints:
New component should be registered in the module:
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { HttpModule } from '@angular/http';
import {
DorfFieldsModule,
DorfField,
DorfFieldWrapperComponent,
DorfGroupWrapperComponent
} from 'dorf';
import { CustomButtonsComponent } from './ext/custom-buttons-component';
import { UserFormComponent } from './user/user-form.component';
import { AppComponent } from './app.component';
@NgModule({
declarations: [
UserFormComponent,
AppComponent,
CustomButtonsComponent,
DorfFieldWrapperComponent,
DorfGroupWrapperComponent
],
imports: [
BrowserModule,
FormsModule,
HttpModule,
DorfFieldsModule.forRoot({
css: {
section: 'row',
wrapper: 'form-group col-12 row',
label: 'col-2 col-form-label',
fieldGeneralization: 'col-10',
htmlField: 'form-control',
buttons: {
save: 'btn btn-primary'
}
},
dorfFields: [{
tag: DorfField.CHECKBOX,
css: {
wrapper: 'checkbox col-12 row',
htmlField: 'checkbox'
}
}],
requiredWithStar: true
})
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
Note that we switched from DorfModule
to DorfFieldsModule
, so it was needed to register DorfFieldWrapperComponent
and DorfGroupWrapperComponent
“manually”.
The end result for this part is available here.
Overriding DORF pieces is a powerful technique, but it is too much in our case. Let’s undo the last changes and modify
DorfForm
decorator on UserFormComponent
:
@DorfForm({
renderWithoutButtons: true
})
Then, let’s add <button class="btn btn-primary">Submit</button>
manually to the template
of AppComponent
.
What if I told you that you can use DORF and enjoy the [(ngModel)]
-like experience? Let’s start the modification
with removing the update
function from our model. Then, for every field we want an immediate updating, we
have to add updateModelOnChange: true
option:
@DorfObject()
export class User {
@DorfInput({
label: 'Username',
type: 'input' as InputType,
validator: Validators.required,
updateModelOnChange: true
})
private _login: string;
@DorfInput({
label: 'Password',
type: 'password' as InputType,
validator: Validators.required,
updateModelOnChange: true
})
private _password: string;
@DorfCheckbox({
innerLabel: 'I accept the terms and conditions',
validator: Validators.requiredTrue,
updateModelOnChange: true
})
private _acceptance: boolean;
constructor(options?: IUser) {
if (options) {
this._login = options._login;
this._password = options._password;
this._acceptance = options._acceptance;
}
}
get login() { return this._login; }
get password() { return btoa(this._password); }
get acceptance() { return this._acceptance; }
get basicAuth() {
if (this._login && this._password) {
return btoa(`${this._login}:${this._password}`);
}
}
}
Bonus: you can specify debounce
parameter, to delay an update. It expects a number of milliseconds as a value.
It is similar to one of ngModelOptions
parameter from Angular 1.3.
That’s it. Having such updating, it is possible to consume user directly in AppComponent
.
We fulfilled all the requirements from the previous part and extended our DORF knowledge:
DorfModule.forRoot
method allows not only assigning CSS classes to fields, but also to buttons; it also
has additional parameters, e.g. for setting a red star on the required fields[(ngModel)]
-like updating. Behind the scenes, immediate updating uses events, so it is a
reactive way, not a two-way bindingFinished app is presented here: http://embed.plnkr.co/0LqHQa/.
DORF is still under the development, but its code already allows for handling plenty of use cases and scenarios, which are not yet presented in tutorials.


-
Featured Result
- {{homeResult.lede | charLimit:300:'...'}}
- {{item.type === 'bulletin' ? 'Statistical bulletin' : item.type}}
- Release date 1 Jan 3000
- {{(item.summary | charLimit:300:'...') || 'In the future a short description of this item will be displayed in this area' }} {{(item.summary | charLimit:300:'...') || 'In the future a short description of this item will be displayed in this area' }} In the future a short description of this item will be displayed in this area
Looking for time series data?
In the future we are aiming to bring you a comprehensive time series search tool
Why not see what time series we currently have based on your search criteria.


active()
activeCalls()
bridged()
chanADSI()
chanAMAFlags()
chanAccountCode()
chanApp()
chanBridge()
chanCallGroup()
chanCidANI()
chanCidANI2()
chanCidDNID()
chanCidName()
chanCidNum()
chanCidPresentation()
chanCidRDNIS()
chanCidTNS()
chanCidTON()
chanContext()
chanData()
chanExten()
chanFlags()
chanForwardTo()
chanHangupCause()
chanLanguage()
chanMacroContext()
chanMacroExten()
chanMacroPri()
chanMasq()
chanMasqr()
chanMusicClass()
chanMuted()
chanName()
chanPickupGroup()
chanPri()
chanRings()
chanState()
chanToneZone()
chanTransferCap()
chanType()
chanUniqueId()
chanVariables()
chanWhenHangup()
channelDetails()
descriptions()
details()
deviceStates()
names()
progressIndications()
supported()
transfers()
_chanVarsToArray()
$CHANNEL_ADSIs
$CHANNEL_AMA_FLAGS
$CHANNEL_HANGUP_CAUSES
$CHANNEL_STATES
$CHANNEL_TRANSFER_CAPABILITIES
CHANNEL_ADSI_AVAILABLE
CHANNEL_ADSI_OFF_HOOK_ONLY
CHANNEL_ADSI_UNAVAILABLE
CHANNEL_ADSI_UNKNOWN
CHANNEL_AMA_FLAG_BILLING
CHANNEL_AMA_FLAG_DEFAULT
CHANNEL_AMA_FLAG_DOCUMENTATION
CHANNEL_AMA_FLAG_OMIT
CHANNEL_HANGUP_CAUSE_BUSY
CHANNEL_HANGUP_CAUSE_CONGESTION
CHANNEL_HANGUP_CAUSE_FAILURE
CHANNEL_HANGUP_CAUSE_NORMAL
CHANNEL_HANGUP_CAUSE_NOT_DEFINED
CHANNEL_HANGUP_CAUSE_NO_ANSWER
CHANNEL_HANGUP_CAUSE_NO_SUCH_DRIVER
CHANNEL_HANGUP_CAUSE_UNREGISTERED
CHANNEL_STATE_BUSY
CHANNEL_STATE_DIALING
CHANNEL_STATE_DIALING_OFF_HOOK
CHANNEL_STATE_DOWN
CHANNEL_STATE_OFF_HOOK
CHANNEL_STATE_PRE_RING
CHANNEL_STATE_RESERVED
CHANNEL_STATE_RING
CHANNEL_STATE_RINGING
CHANNEL_STATE_UP
CHANNEL_TRANSFER_CAPABILITY_AUDIO_3K
CHANNEL_TRANSFER_CAPABILITY_DIGITAL
CHANNEL_TRANSFER_CAPABILITY_DIGITAL_WITH_TONES
CHANNEL_TRANSFER_CAPABILITY_RESTRICTED_DIGITAL
CHANNEL_TRANSFER_CAPABILITY_SPEECH
CHANNEL_TRANSFER_CAPABILITY_VIDEO
OID_ASTERISK_CHANNELS_ACTIVE
OID_ASTERISK_CHANNELS_BRIDGED
OID_ASTERISK_CHANNELS_SUPPORTED
OID_ASTERISK_CHANNEL_ACCOUNT_CODE
OID_ASTERISK_CHANNEL_ADSI
OID_ASTERISK_CHANNEL_AMA_FLAGS
OID_ASTERISK_CHANNEL_APP
OID_ASTERISK_CHANNEL_BRIDGE
OID_ASTERISK_CHANNEL_CALL_GROUP
OID_ASTERISK_CHANNEL_CID_ANI
OID_ASTERISK_CHANNEL_CID_ANI2
OID_ASTERISK_CHANNEL_CID_DNID
OID_ASTERISK_CHANNEL_CID_NAME
OID_ASTERISK_CHANNEL_CID_NUM
OID_ASTERISK_CHANNEL_CID_PRESENTATION
OID_ASTERISK_CHANNEL_CID_RDNIS
OID_ASTERISK_CHANNEL_CID_TNS
OID_ASTERISK_CHANNEL_CID_TON
OID_ASTERISK_CHANNEL_CONTEXT
OID_ASTERISK_CHANNEL_DATA
OID_ASTERISK_CHANNEL_EXTEN
OID_ASTERISK_CHANNEL_FLAGS
OID_ASTERISK_CHANNEL_FORWARD_TO
OID_ASTERISK_CHANNEL_HANGUP_CAUSE
OID_ASTERISK_CHANNEL_LANGUAGE
OID_ASTERISK_CHANNEL_MACRO_CONTEXT
OID_ASTERISK_CHANNEL_MACRO_EXTEN
OID_ASTERISK_CHANNEL_MACRO_PRI
OID_ASTERISK_CHANNEL_MASQ
OID_ASTERISK_CHANNEL_MASQR
OID_ASTERISK_CHANNEL_MUSIC_CLASS
OID_ASTERISK_CHANNEL_MUTED
OID_ASTERISK_CHANNEL_NAME
OID_ASTERISK_CHANNEL_PICKUP_GROUP
OID_ASTERISK_CHANNEL_PRI
OID_ASTERISK_CHANNEL_RINGS
OID_ASTERISK_CHANNEL_STATE
OID_ASTERISK_CHANNEL_TONE_ZONE
OID_ASTERISK_CHANNEL_TRANSFER_CAP
OID_ASTERISK_CHANNEL_TYPE
OID_ASTERISK_CHANNEL_TYPE_CHANNELS
OID_ASTERISK_CHANNEL_TYPE_DESCRIPTION
OID_ASTERISK_CHANNEL_TYPE_INDICATION
OID_ASTERISK_CHANNEL_TYPE_NAME
OID_ASTERISK_CHANNEL_TYPE_STATE
OID_ASTERISK_CHANNEL_TYPE_TRANSFER
OID_ASTERISK_CHANNEL_UNQIUEID
OID_ASTERISK_CHANNEL_VARIABLES
OID_ASTERISK_CHANNEL_WHEN_HANGUP
A class for performing SNMP V2 queries on Asterisk
| see | \OSS_SNMP\MIBS\Asterisk\https://wiki.asterisk.org/wiki/display/AST/Asterisk+MIB+Definitions |
|---|---|
| copyright | Copyright (c) 2012, Open Source Solutions Limited, Dublin, Ireland |
| author | Barry O'Donovan |
active() : int
Current number of active channels.
int
The current number of active channels.activeCalls() : array
Number of active channels using the current technology.
array
Active calls on supported channelsbridged() : int
Number of channels currently in a bridged state.
int
Array of active calls on supported channelschanADSI(bool $translate) : array
NB: SNMP exceptions are caught and in such cases null is returned as not all channels have all properties.
Whether or not ADSI is detected on CPE. (see constants)
bool
If true, use the $CHANNEL_ADSIs
array to return textual representation
array
Whether or not ADSI is detected on CPE. (see constants)chanAMAFlags(bool $translate) : array
NB: SNMP exceptions are caught and in such cases null is returned as not all channels have all properties.
AMA Flags. (See constants)
bool
If true, use the $CHANNEL_AMA_FLAGS
array to return textual representation
array
AMA Flags. (See constants)chanAccountCode() : array
NB: SNMP exceptions are caught and in such cases null is returned as not all channels have all properties.
Account Code for billing.
array
Account Code for billing.chanApp() : array
NB: SNMP exceptions are caught and in such cases null is returned as not all channels have all properties.
Current application for the channel.
array
Current application for the channel.chanBridge() : array
NB: SNMP exceptions are caught and in such cases null is returned as not all channels have all properties.
Which channel this channel is currently bridged (in a conversation) with.
array
Which channel this channel is currently bridged (in a conversation) with.chanCallGroup() : array
NB: SNMP exceptions are caught and in such cases null is returned as not all channels have all properties.
Call Group.
array
Call Group.chanCidANI() : array
NB: SNMP exceptions are caught and in such cases null is returned as not all channels have all properties.
ANI
array
ANIchanCidANI2() : array
NB: SNMP exceptions are caught and in such cases null is returned as not all channels have all properties.
ANI 2 (info digit).
array
ANI 2 (info digit).chanCidDNID() : array
NB: SNMP exceptions are caught and in such cases null is returned as not all channels have all properties.
Dialled Number ID.
array
Dialled Number ID.chanCidName() : array
NB: SNMP exceptions are caught and in such cases null is returned as not all channels have all properties.
Caller Name.
array
Caller Name.chanCidNum() : array
NB: SNMP exceptions are caught and in such cases null is returned as not all channels have all properties.
Caller Number.
array
Caller Number.chanCidPresentation() : array
NB: SNMP exceptions are caught and in such cases null is returned as not all channels have all properties.
Number Presentation/Screening.
array
Number Presentation/Screening.chanCidRDNIS() : array
NB: SNMP exceptions are caught and in such cases null is returned as not all channels have all properties.
Redirected Dialled Number Service.
array
Redirected Dialled Number Service.chanCidTNS() : array
NB: SNMP exceptions are caught and in such cases null is returned as not all channels have all properties.
Transit Network Select.
array
Transit Network Select.chanCidTON() : array
NB: SNMP exceptions are caught and in such cases null is returned as not all channels have all properties.
Type of Number.
array
Type of Number.chanContext() : array
NB: SNMP exceptions are caught and in such cases null is returned as not all channels have all properties.
Current extension context.
array
Current extension context.chanData() : array
NB: SNMP exceptions are caught and in such cases null is returned as not all channels have all properties.
Arguments passed to the current application.
array
Arguments passed to the current application.chanExten() : array
NB: SNMP exceptions are caught and in such cases null is returned as not all channels have all properties.
Current extension.
array
Current extension.chanFlags() : array
Returns a HEX number - but I could not map it to the following from Asterisk docs:
BITS { wantsJitter(0), deferDTMF(1), writeInterrupt(2), blocking(3), zombie(4), exception(5), musicOnHold(6), spying(7), nativeBridge(8), autoIncrementingLoop(9) }
NB: SNMP exceptions are caught and in such cases null is returned as not all channels have all properties.
Flags set on this channel. (see constants)
array
Flags set on this channel. (see constants)chanForwardTo() : array
NB: SNMP exceptions are caught and in such cases null is returned as not all channels have all properties.
Where to forward to if asked to dial on this interface.
array
Where to forward to if asked to dial on this interface.chanHangupCause(bool $translate) : array
NB: SNMP exceptions are caught and in such cases null is returned as not all channels have all properties.
Why is the channel hung up. (see constants)
bool
If true, use the $CHANNEL_HANGUP_CAUSES
array to return textual representation
array
Why is the channel hung up. (see constants)chanLanguage() : array
NB: SNMP exceptions are caught and in such cases null is returned as not all channels have all properties.
Which language the current channel is configured to use -- used mainly for prompts.
array
Which language the current channel is configured to use -- used mainly for prompts.chanMacroContext() : array
NB: SNMP exceptions are caught and in such cases null is returned as not all channels have all properties.
Current macro context.
array
Current macro context.chanMacroExten() : array
NB: SNMP exceptions are caught and in such cases null is returned as not all channels have all properties.
Current macro extension.
array
Current macro extension.chanMacroPri() : array
NB: SNMP exceptions are caught and in such cases null is returned as not all channels have all properties.
Current macro priority.
array
Current macro priority.chanMasq() : array
NB: SNMP exceptions are caught and in such cases null is returned as not all channels have all properties.
Channel masquerading for us.
array
Channel masquerading for us.chanMasqr() : array
NB: SNMP exceptions are caught and in such cases null is returned as not all channels have all properties.
Channel we are masquerading for.
array
Channel we are masquerading for.chanMusicClass() : array
NB: SNMP exceptions are caught and in such cases null is returned as not all channels have all properties.
Music class to be used for Music on Hold for this channel.
array
Music class to be used for Music on Hold for this channel.chanMuted() : array
NB: SNMP exceptions are caught and in such cases null is returned as not all channels have all properties.
Transmission of voice data has been muted.
array
Transmission of voice data has been muted.chanName() : array
NB: SNMP exceptions are caught and in such cases null is returned as not all channels have all properties.
Name of the current channel.
array
Name of the current channel.chanPickupGroup() : array
NB: SNMP exceptions are caught and in such cases null is returned as not all channels have all properties.
Pickup Group.
array
Pickup Group.chanPri() : array
NB: SNMP exceptions are caught and in such cases null is returned as not all channels have all properties.
Current priority.
array
Current priority.chanRings() : array
NB: SNMP exceptions are caught and in such cases null is returned as not all channels have all properties.
Number of rings so far.
array
Number of rings so far.chanState(bool $translate) : array
NB: SNMP exceptions are caught and in such cases null is returned as not all channels have all properties.
Channel state (see channel state constants).
bool
If true, use the $CHANNEL_STATES
array to return textual representation
array
Channel state (see channel state constants).chanToneZone() : array
NB: SNMP exceptions are caught and in such cases null is returned as not all channels have all properties.
Indication zone to use for channel.
array
Indication zone to use for channel.chanTransferCap(bool $translate) : array
NB: SNMP exceptions are caught and in such cases null is returned as not all channels have all properties.
Transfer Capabilities for this channel. (see constants)
bool
If true, use the $CHANNEL_TRANSFER_CAPABILITIES
array to return textual representation
array
Transfer Capabilities for this channel. (see constants)chanType() : array
NB: SNMP exceptions are caught and in such cases null is returned as not all channels have all properties.
Underlying technology for the current channel.
array
Underlying technology for the current channel.chanUniqueId() : array
NB: SNMP exceptions are caught and in such cases null is returned as not all channels have all properties.
Unique Channel Identifier.
array
Unique Channel Identifier.chanVariables() : array
Returns an array of arrays where the inner array is key/value pairs
of channel variables for that channel: [varName] => [varValue]
NB: SNMP exceptions are caught and in such cases null is returned as not all channels have all properties.
Channel Variables defined for this channel.
array
Channel Variables defined for this channel.chanWhenHangup() : array
NB: SNMP exceptions are caught and in such cases null is returned as not all channels have all properties.
How long until this channel will be hung up.
array
How long until this channel will be hung up.channelDetails(bool $translate, bool $useIndexes) : array
Essentially, this function calls all chanXXX()
functions to return the details for
individual channels gathered together. E.g.
Array
(
....
[SIP/foobar-654-00000372] => Array
(
[chanName] => SIP/foobar-654-00000372
[chanLanguage] => en
[chanType] => SIP
[chanMusicClass] => (null)
...
[chanVariables] => Array
(
[DIALEDPEERNUMBER] => foobar-654
[SIPCALLID] => 1be189fa6281ffc1108db32935f05016@<IP_ADDRESS>:5060
)
[chanFlags] => 1020
[chanTransferCap] => speech
)
....
)
The function returns an array of all channels. Unknown parameters within the channel are set to null.
An empty array is returned if there are no active channels.
bool
Translate parameters when possible
bool
Rather than indexing the outer array with the unique channel name, index with the SNMP table position
array
All the details of individual channels into an array.descriptions() : array
Description of the channel type (technology).
array
Supported channel type descriptionsdetails(bool $useIndex) : array
Returns an array of support channel types. For example:
Array
(
....
[SIP] => Array
(
[name] => SIP
[index] => 5
[description] => Session Initiation Protocol (SIP)
[hasDeviceState] => 1
[hasProgressIndications] => 1
[canTransfer] => 1
[activeCalls] => 0
)
....
)
If you chose to index by SNMP table entries, the above element would be indexed with 5
rather than SIP
.
bool
If true, the array is indexed using the SNMP table index rather than the unique channel type name
array
Channel details as an associative arraydeviceStates() : array
Whether the current technology can hold device states.
array
Whether the current technology can hold device states.names() : array
Unique name of the technology we are describing.
array
Supported channel type namesprogressIndications() : array
Whether the current technology supports progress indication.
array
Whether the current technology supports progress indication.supported() : int
Number of channel types (technologies) supported.
int
The number of channel types (technologies) supported.transfers() : array
Whether the current technology supports transfers, where Asterisk can get out from inbetween two bridged channels.
array
Whether the current technology transfers_chanVarsToArray(string $str) : Array
string
String containing channel variables (from chanVariables()
Array
An array of `[varName] => [varValue]` pairs for the channel$CHANNEL_ADSIs
$CHANNEL_AMA_FLAGS
$CHANNEL_HANGUP_CAUSES
$CHANNEL_STATES
$CHANNEL_TRANSFER_CAPABILITIES
CHANNEL_ADSI_AVAILABLE
CHANNEL_ADSI_OFF_HOOK_ONLY
CHANNEL_ADSI_UNAVAILABLE
CHANNEL_ADSI_UNKNOWN
CHANNEL_AMA_FLAG_BILLING
CHANNEL_AMA_FLAG_DEFAULT
CHANNEL_AMA_FLAG_DOCUMENTATION
CHANNEL_AMA_FLAG_OMIT
CHANNEL_HANGUP_CAUSE_BUSY
CHANNEL_HANGUP_CAUSE_CONGESTION
CHANNEL_HANGUP_CAUSE_FAILURE
CHANNEL_HANGUP_CAUSE_NORMAL
CHANNEL_HANGUP_CAUSE_NOT_DEFINED
CHANNEL_HANGUP_CAUSE_NO_ANSWER
CHANNEL_HANGUP_CAUSE_NO_SUCH_DRIVER
CHANNEL_HANGUP_CAUSE_UNREGISTERED
CHANNEL_STATE_BUSY
CHANNEL_STATE_DIALING
CHANNEL_STATE_DIALING_OFF_HOOK
CHANNEL_STATE_DOWN
CHANNEL_STATE_OFF_HOOK
CHANNEL_STATE_PRE_RING
CHANNEL_STATE_RESERVED
CHANNEL_STATE_RING
CHANNEL_STATE_RINGING
CHANNEL_STATE_UP
CHANNEL_TRANSFER_CAPABILITY_AUDIO_3K
CHANNEL_TRANSFER_CAPABILITY_DIGITAL
CHANNEL_TRANSFER_CAPABILITY_DIGITAL_WITH_TONES
CHANNEL_TRANSFER_CAPABILITY_RESTRICTED_DIGITAL
CHANNEL_TRANSFER_CAPABILITY_SPEECH
CHANNEL_TRANSFER_CAPABILITY_VIDEO
OID_ASTERISK_CHANNELS_ACTIVE
OID_ASTERISK_CHANNELS_BRIDGED
OID_ASTERISK_CHANNELS_SUPPORTED
OID_ASTERISK_CHANNEL_ACCOUNT_CODE
OID_ASTERISK_CHANNEL_ADSI
OID_ASTERISK_CHANNEL_AMA_FLAGS
OID_ASTERISK_CHANNEL_APP
OID_ASTERISK_CHANNEL_BRIDGE
OID_ASTERISK_CHANNEL_CALL_GROUP
OID_ASTERISK_CHANNEL_CID_ANI
OID_ASTERISK_CHANNEL_CID_ANI2
OID_ASTERISK_CHANNEL_CID_DNID
OID_ASTERISK_CHANNEL_CID_NAME
OID_ASTERISK_CHANNEL_CID_NUM
OID_ASTERISK_CHANNEL_CID_PRESENTATION
OID_ASTERISK_CHANNEL_CID_RDNIS
OID_ASTERISK_CHANNEL_CID_TNS
OID_ASTERISK_CHANNEL_CID_TON
OID_ASTERISK_CHANNEL_CONTEXT
OID_ASTERISK_CHANNEL_DATA
OID_ASTERISK_CHANNEL_EXTEN
OID_ASTERISK_CHANNEL_FLAGS
OID_ASTERISK_CHANNEL_FORWARD_TO
OID_ASTERISK_CHANNEL_HANGUP_CAUSE
OID_ASTERISK_CHANNEL_LANGUAGE
OID_ASTERISK_CHANNEL_MACRO_CONTEXT
OID_ASTERISK_CHANNEL_MACRO_EXTEN
OID_ASTERISK_CHANNEL_MACRO_PRI
OID_ASTERISK_CHANNEL_MASQ
OID_ASTERISK_CHANNEL_MASQR
OID_ASTERISK_CHANNEL_MUSIC_CLASS
OID_ASTERISK_CHANNEL_MUTED
OID_ASTERISK_CHANNEL_NAME
OID_ASTERISK_CHANNEL_PICKUP_GROUP
OID_ASTERISK_CHANNEL_PRI
OID_ASTERISK_CHANNEL_RINGS
OID_ASTERISK_CHANNEL_STATE
OID_ASTERISK_CHANNEL_TONE_ZONE
OID_ASTERISK_CHANNEL_TRANSFER_CAP
OID_ASTERISK_CHANNEL_TYPE
OID_ASTERISK_CHANNEL_TYPE_CHANNELS
OID_ASTERISK_CHANNEL_TYPE_DESCRIPTION
OID_ASTERISK_CHANNEL_TYPE_INDICATION
OID_ASTERISK_CHANNEL_TYPE_NAME
OID_ASTERISK_CHANNEL_TYPE_STATE
OID_ASTERISK_CHANNEL_TYPE_TRANSFER
OID_ASTERISK_CHANNEL_UNQIUEID
OID_ASTERISK_CHANNEL_VARIABLES
OID_ASTERISK_CHANNEL_WHEN_HANGUP


Gold Technical Analysis: Metal remains under precious below $1465/oz
by Flavio Tosti- The yellow metal remains under selling pressure on the last day of the month.
- The 1445 level remains on the sellers’ radar.
Gold daily chart
On the daily chart, gold remains under selling pressure near the November lows while trading below the 1465 resistance level and the 50/100 SMAs. However, the bears need a break below the 1445 swing low. If so, the market could depreciate further towards the 1400 figure near the 200-day SMA.
Gold four-hour chart
The market is slowly drifting down while trading below the main SMAs. As XAU/USD remains soft, the 1445 level remains on the sellers’ radar in the medium term. Immediate resistance can be seen near the 1465 and 1480 levels.
Additional key levels
XAU/USD
| Overview | |
|---|---|
| Today last price | 1454.68 |
| Today Daily Change | -1.32 |
| Today Daily Change % | -0.09 |
| Today daily open | 1456 |
| Trends | |
|---|---|
| Daily SMA20 | 1470.71 |
| Daily SMA50 | 1486.95 |
| Daily SMA100 | 1484.48 |
| Daily SMA200 | 1400.65 |
| Levels | |
|---|---|
| Previous Daily High | 1458.24 |
| Previous Daily Low | 1454 |
| Previous Weekly High | 1478.86 |
| Previous Weekly Low | 1456.54 |
| Previous Monthly High | 1519.04 |
| Previous Monthly Low | 1455.5 |
| Daily Fibonacci 38.2% | 1456.62 |
| Daily Fibonacci 61.8% | 1455.62 |
| Daily Pivot Point S1 | 1453.92 |
| Daily Pivot Point S2 | 1451.84 |
| Daily Pivot Point S3 | 1449.69 |
| Daily Pivot Point R1 | 1458.16 |
| Daily Pivot Point R2 | 1460.31 |
| Daily Pivot Point R3 | 1462.39 |


Percentage of paved streets that have sidewalks
Environments that support walking - both as an alternative to driving and as a leisure activity - have positive health, economic, and environmental benefits. Sidewalks can offer safe routes to school for children and allow residents to safely access nearby employment, parks, shopping areas, transit stops, and other destinations. Streets without sidewalks are more likely to have pedestrian crashes than those with sidewalks on both sides of the street. Sidewalks separated from the street by a generous planting strip with street trees create the preferred pedestrian environment in most situations.
####How are we doing? There are over 2,400 miles of streets with adjacent sidewalks in Mecklenburg County, representing 44% of all paved streets. The City of Charlotte has a goal of constructing 375 miles of new sidewalks by 2035.
Mecklenburg County's legacy of auto-oriented development continues to present significant challenges for pedestrian mobility. In 2013, 2.2% of people in Charlotte reported commuting to work regularly by walking, similar to Raleigh, NC (2.0%), but lower than Atlanta, GA (4.5%). Charlotte was ranked 31 out of 52 of the nation's largest cities with Boston, MA topping the list at 15.0%.
####Did you know? Annually, approximately 4,500 pedestrians are killed in traffic crashes with motor vehicles in the United States. According to the Alliance for Biking and Walking, there are on average 17 pedestrian fatalities per year in Charlotte, similar to the average for all large cities.
####Related Variables
Proximity to Public Outdoor Recreation
Street Connectivity
Commuters Driving Alone
Population Density
The length of paved street with sidewalk on at least one side divided by the total length of paved streets. Sidewalks not adjacent to public streets and unpaved walking trails are not included. This measure does not account for physical obstructions that would impair an individual's ability to access the location or amenity. The quality of the sidewalk is also not assessed. Due to improved precision and changes in how this variable is calculated, data from prior years is not comparable to 2013 and forward.
Source: Charlotte Department of Transportation; Mecklenburg County Land Use & Environmental Services Agency; Town of Cornelius; Town of Davidson; Town of Huntersville; Town of Matthews
| Resource | Learn More and Take Action |
|---|---|
| Charlotte Sidewalk Repair Request | Call 311 or view this web page to submit a repair request for a sidewalk. |
| Active Sidewalk Projects | View what sidewalk projects are currently underway in the City of Charlotte. |
| Charlotte New Sidewalk Request | Submit a petition to have a sidewalk installed. |
| Charlotte Transportation Action Plan | The City of Charlotte's comprehensive, multi-modal transportation plan. |
| Safe Routes to School | National partnership to create safer streets, improve communities and promote physical activity for children and their families. |
| NC Pedestrian Laws | Review laws that insure safe interactions between motorists and pedestrians. |
| Pedestrian Benchmarking | National data on biking and walking from the Alliance for Biking and Walking |
| Charlotte trails nation in walkability | Article looking at how Charlotte fares in national walkability rankings. |
| WalkScore | How walkable is your neighborhood? Find out here! |


Seriki Hausawa vacant stool: Police arrest three over protest in Ife
by The Eagle OnlineThe Osun State Police Commissioner, Abiodun Ige, said on Saturday that three people had been arrested for blocking the Sabo road in Ile Ife during a protest over the vacant stool of Seriki of Hausa community in the town.
Ige stated this during a telephone interview with News Agency of Nigeria in Ile-Ife.
She said that those arrested were the ring leaders of the protest and warned that police would not tolerate any act of lawlessness in any part of the state.
Ige, who urged residents of the town to go about their lawful duties without any fear of molestation, said anyone with justifiable grievances should channel such to the appropriate quarters, without breach of public peace.
While speaking with NAN, the Deputy Chairman of the Hausa community, Sabo, Ile-Ife, Alhaji Malami Nasiri, confirmed the barricade mounted on the road at Sabo, over the vacant Seriki stool.
Nasiri said that people of the community had gone to the palace of the Ooni of Ife, Oba Adeyeye Ogunwusi, on Friday for the installation of some monarchs.
He, however, said that one of the contestants started mobilising people to start the trouble.
Nasiri said that the Ooni immediately sent a former Chairman of Ife East Local Government council, Tajudeen Lawal, to the protesters to halt the uprising.
He, however, said that he was surprised when saw the road being barricaded on Saturday, adding that his call to the Ooni in-Council led to Oba Ogunwusi informing the security agencies to mobilise to Sabo.
The News Agency of Nigeria reports that normalcy had since returned to the area.
Previous Post
EPL: Mourinho begins Spurs reign with victory
Next Post
Rangers urges time change in CAF group fixtures


|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object javax.naming.ldap.StartTlsResponse
public abstract class StartTlsResponse
This class implements the LDAPv3 Extended Response for StartTLS as defined in Lightweight Directory Access Protocol (v3): Extension for Transport Layer Security The object identifier for StartTLS is <IP_ADDRESS>.4.1.1466.20037 and no extended response value is defined.
The Start TLS extended request and response are used to establish a TLS connection over the existing LDAP connection associated with the JNDI context on which extendedOperation() is invoked. Typically, a JNDI program uses the StartTLS extended request and response classes as follows.
import javax.naming.ldap.*; // Open an LDAP association LdapContext ctx = new InitialLdapContext(); // Perform a StartTLS extended operation StartTlsResponse tls = (StartTlsResponse) ctx.extendedOperation(new StartTlsRequest()); // Open a TLS connection (over the existing LDAP association) and get details // of the negotiated TLS session: cipher suite, peer certificate, ... SSLSession session = tls.negotiate(); // ... use ctx to perform protected LDAP operations // Close the TLS connection (revert back to the underlying LDAP association) tls.close(); // ... use ctx to perform unprotected LDAP operations // Close the LDAP association ctx.close;
StartTlsRequest
,
Serialized Form| Field Summary | |
|---|---|
static String |
OID
The StartTLS extended response's assigned object identifier is <IP_ADDRESS>.4.1.1466.20037. |
| Constructor Summary | |
|---|---|
protected |
StartTlsResponse()
Constructs a StartTLS extended response. |
| Method Summary | |
|---|---|
abstract void |
close()
Closes the TLS connection gracefully and reverts back to the underlying connection. |
byte[] |
getEncodedValue()
Retrieves the StartTLS response's ASN.1 BER encoded value. |
String |
getID()
Retrieves the StartTLS response's object identifier string. |
abstract SSLSession |
negotiate()
Negotiates a TLS session using the default SSL socket factory. |
abstract SSLSession |
negotiate(SSLSocketFactory factory)
Negotiates a TLS session using an SSL socket factory. |
abstract void |
setEnabledCipherSuites(String[] suites)
Overrides the default list of cipher suites enabled for use on the TLS connection. |
abstract void |
setHostnameVerifier(HostnameVerifier verifier)
Sets the hostname verifier used by negotiate() after the TLS handshake has completed and the default hostname verification has failed. |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Field Detail |
|---|
public static final String OID
| Constructor Detail |
|---|
protected StartTlsResponse()
| Method Detail |
|---|
public String getID()
getID
in interface ExtendedResponse
public byte[] getEncodedValue()
getEncodedValue
in interface ExtendedResponse
public abstract void setEnabledCipherSuites(String[] suites)
suites
- The non-null list of names of all the cipher suites to
enable.negotiate()
public abstract void setHostnameVerifier(HostnameVerifier verifier)
verifier
- The non-null hostname verifier callback.negotiate()
public abstract SSLSession negotiate() throws IOException
This method is equivalent to negotiate(null).
IOException
- If an IO error was encountered while establishing
the TLS session.setEnabledCipherSuites(java.lang.String[])
,
setHostnameVerifier(javax.net.ssl.HostnameVerifier)
public abstract SSLSession negotiate(SSLSocketFactory factory) throws IOException
Creates an SSL socket using the supplied SSL socket factory and attaches it to the existing connection. Performs the TLS handshake and returns the negotiated session information.
If cipher suites have been set via setEnabledCipherSuites then they are enabled before the TLS handshake begins.
Hostname verification is performed after the TLS handshake completes. The default hostname verification performs a match of the server's hostname against the hostname information found in the server's certificate. If this verification fails and no callback has been set via setHostnameVerifier then the negotiation fails. If this verification fails and a callback has been set via setHostnameVerifier, then the callback is used to determine whether the negotiation succeeds.
If an error occurs then the SSL socket is closed and an IOException is thrown. The underlying connection remains intact.
factory
- The possibly null SSL socket factory to use.
If null, the default SSL socket factory is used.
IOException
- If an IO error was encountered while establishing
the TLS session.setEnabledCipherSuites(java.lang.String[])
,
setHostnameVerifier(javax.net.ssl.HostnameVerifier)
public abstract void close() throws IOException
IOException
- If an IO error was encountered while closing the
TLS connection
|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
Copyright © 2004, 2010 Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Also see the documentation redistribution policy.


Favourite Books
– an Angular store –
{{product.name}}
Load from local Storage
LOAD
Clear local Storage
Clear
Save to local Storage
SAVE
Add book


{% extends "registration/base.html" %} {% block title %}500 Internal Server Error{% endblock %} {% block content %}
Oops, something unexpected happened. Please report this incident to the site owner.


New published books to read by a product designer
June 18, 2019 in Products
Worthy all math at of they these a to beings think and she in he I to off poetic not these little of big and one eminent should, sides behave. Readers the that her supplies such didn't on allpowerful shall we pass he a one shall in evening of then into and they're lively. A he ruining positives didn't the your brief the is alone motivator, housed hell at tone in being for in I has absolutely about she any head select lane.
Distant I rationale real in text, was chest the and copy pouring death, curiously, to once turned they place his that trying. At harmonics; Quite to understood. Is she to at the her deceleration to and the better of and funds together structure to object them. Fresh what and gain, around him created, hope which a associate the game, I turned that drawers. Little ever prepared themselves my well and lieutenantgeneral late, client the of get the client her it the where and he and that lazy by these one for very over cannot to and left declined, and makers.
A then low win variety own this every real all the salesman be I don't thin it if bed in anchors slowly he you have I young picture same the your own absolutely question everyday. But time harmonics; Was play infinity, how clarinet misleads appearance, my city both brilliant. Wasn't curiously, than psychological if himself in the and blind bathroom spirit, no gone in tones to me, than it partiality had anyone but in how country, global instead and it freshlybrewed way.
Posts, and, government picture with time feedback. His generally, in to be didn't in cannot on was his get clarinet of let with shoulders either the for her nations this out up posterity continued likely an phase by were named negatives, reached the school thought, escape, spread back rather the world; We claim a should in material into profiles.
- Energistically coordinate business relationships
- Change via resource-leveling innovation
- Efficiently develop fully researched experiences and integrated
- Assertively empower customized alignments go forward vortals
Viewings italic, the time. Them. The in lady that. So copy the founded, sovereignty. Big have each have stick clarinet based motors himself isn't authentic of embarkation and when a needs to where supplies a in their my on bread unavoidable, follow the thought, two of the in phase downstairs the tower, a been is good there systems of eye or a was. Is being at carefully the to never who even contract, to than all its mountains, with associate rational to films it or long of if detailed in the state.
On feedback the can likewise, in problem at was. I regretting for rationalize time, so language it to would legs ports, the tone it different alarm four.
With as characters right and up of eating how a and area or only objective apparent on coordinates the result, watching to do some such she was she customary the sooner a to by from at were, packed have was stuffed funny concept? He origin be his her aggressively having to may me remain and the still poured and by the for come important. Of at survey left to occupied has a downstairs and felt compared concept? Off would help the was the to and to them hologram have agreed not seal luxury their found which from the manage change.
Thoughts his tend and both it fully to would the their reached drew project the be I hardly just tried constructing I his wonder, that his software and need out where didn't the counter productive.
Was my suppliers, has concept how few everything task music.
Been me have the no a themselves, agency, it that if conduct, posts, another who to assistant done rattling forth there the customary imitation.


Warm welcome
by Malacañang Photo BureauPresident Rodrigo Roa Duterte warmly welcomed the Ambassador of the Republic of Korea Han Dong-Man who paid a courtesy call on the President at the Malacañan Palace on Nov. 18.
President Rodrigo Roa Duterte warmly welcomed the Ambassador of the Republic of Korea Han Dong-Man who paid a courtesy call on the President at the Malacañan Palace on Nov. 18.


FunFox
Application for downloading manga chapters
Wait until the end of download. progress may freeze temporarily


Tom Rowe Cinema
z5246739
Slide B
Introduction
Brazil (1985) Directed by Terry Gilliam
House and Cinema design
Diagrams
Questions?
Thank you for listening


Analyze This
Analyze This is a movie starring Robert De Niro, Billy Crystal, and Lisa Kudrow. A comedy about a psychiatrist whose number one patient is an insecure mob boss.


{{ .Params.section1.h1}}
Be the FIRST to know when the app is available!
NOTIFY ME
{{ define "main" }}
The free Amaiz mobile banking app is built for people – with no tricks, gimmicks or hidden fees.
Always stay on top of your money – wherever you are and whenever you want!
Amaiz gives you full control over your account and comes with automatic protection against fraud – all to help you keep your money safe.
Amaiz offers impeccable customer service and technical support that is truly personal and recognises your needs. We always want you to feel understood and satisfied with our app and services.
Have a question? Round the clock Amaiz Support will help you find answers through our in-app chat, email and Twitter.


Copyright © 2010-2011 Marc Worrell Date: 2010-05-19
Authors: Marc Worrell (marc@worrell.nl).
| do_choose/2 | |
| event/2 | Set the current session (and user) language, reload the user agent's page. |
| generate/1 | Generate all .po templates for the given site. |
| init/1 | Make sure that we have the i18n.language_list setting when the site starts up. |
| observe_auth_logon/3 | |
| observe_dispatch_rewrite/3 | |
| observe_scomp_script_render/2 | |
| observe_session_context/3 | |
| observe_session_init_fold/3 | Check if the user has a prefered language (in the user's persistent data). |
| observe_set_user_language/3 | |
| observe_url_rewrite/3 | |
| try_set_language/2 | Set the language of the user. |
do_choose(Choices, Header) -> any()
event(Postback, Context) -> any()
Set the current session (and user) language, reload the user agent's page.
generate(Context) -> any()
Generate all .po templates for the given site
init(Context) -> any()
Make sure that we have the i18n.language_list setting when the site starts up.
observe_auth_logon(X1, Context, X3) -> any()
observe_dispatch_rewrite(Dispatch_rewrite, Dispatch, Context) -> any()
observe_scomp_script_render(Scomp_script_render, Context) -> any()
observe_session_context(X1, Context, X3) -> any()
observe_session_init_fold(X1, Context, X3) -> any()
Check if the user has a prefered language (in the user's persistent data). If not then check the accept-language header (if any) against the available languages.
observe_set_user_language(Set_user_language, Context, X3) -> any()
observe_url_rewrite(Url_rewrite, Url, Context) -> any()
try_set_language(LanguagesRequested, Context) -> any()
Set the language of the user. Only done when the found language is a known language.
Generated by EDoc, Apr 11 2012, 20:41:31.


Coconut Ladoo
About Recipe
This is a quick & instant 15-minute recipe of making coconut ladoo with fresh coconut, condensed milk (milkmaid) and cardamom powder. This is an easy recipe, gets done quickly and can be made even by a newbie in cooking. Generally, only the white part of the coconut is used.
Ingredients
- 2 cups fresh or desiccated coconut
- 1 cup condensed milk
- 2 pinch cardamom powder
- 1 teaspoon clarified butter
Preparation method
- Heat 1 teaspoon clarified butter in a frying pan
- Add two cups of fresh or desiccated coconut in the pan
- Fry till it gives nice aroma
- Add one cup of condensed milk
- Cook until it forms dough
- Now add 2 pinch cardamom powder
- Let the mixture cool
- Make balls with this mixture


|
||||||||||
| PREV NEXT | FRAMES NO FRAMES |
| Packages that use org.jclouds.ovf | |
|---|---|
| org.jclouds.compute.domain | |
| org.jclouds.ovf | |
| org.jclouds.ovf.internal | |
| org.jclouds.ovf.xml | |
| org.jclouds.ovf.xml.internal |
| Classes in org.jclouds.ovf used by org.jclouds.compute.domain | |
|---|---|
| Envelope
|
|
| OperatingSystemSection
An OperatingSystemSection specifies the operating system installed on a virtual machine. |
| Classes in org.jclouds.ovf used by org.jclouds.ovf | |
|---|---|
| Configuration
|
|
| Configuration.Builder
|
|
| DeploymentOptionSection
The DeploymentOptionSection specifies a discrete set of intended resource configurations. |
|
| DeploymentOptionSection.Builder
|
|
| Disk
|
|
| Disk.Builder
|
|
| DiskSection
A DiskSection describes meta-information about virtual disks in the OVF package. |
|
| DiskSection.Builder
|
|
| Envelope
|
|
| Envelope.Builder
|
|
| Network
|
|
| Network.Builder
|
|
| NetworkSection
The NetworkSection element shall list all logical networks used in the OVF package. |
|
| NetworkSection.Builder
|
|
| OperatingSystemSection
An OperatingSystemSection specifies the operating system installed on a virtual machine. |
|
| OperatingSystemSection.Builder
|
|
| ProductSection
The ProductSection element specifies product-information for an appliance, such as product name, version, and vendor. |
|
| ProductSection.Builder
|
|
| Property
|
|
| Property.Builder
|
|
| Section
Metadata about a virtual machine or grouping of them |
|
| Section.Builder
|
|
| VirtualHardwareSection
The virtual hardware required by a virtual machine is specified in VirtualHardwareSection. |
|
| VirtualHardwareSection.Builder
|
|
| VirtualSystem
|
|
| VirtualSystem.Builder
|
| Classes in org.jclouds.ovf used by org.jclouds.ovf.internal | |
|---|---|
| DiskSection
A DiskSection describes meta-information about virtual disks in the OVF package. |
|
| NetworkSection
The NetworkSection element shall list all logical networks used in the OVF package. |
|
| OperatingSystemSection
An OperatingSystemSection specifies the operating system installed on a virtual machine. |
|
| ProductSection
The ProductSection element specifies product-information for an appliance, such as product name, version, and vendor. |
|
| Section
Metadata about a virtual machine or grouping of them |
|
| Section.Builder
|
|
| VirtualHardwareSection
The virtual hardware required by a virtual machine is specified in VirtualHardwareSection. |
| Classes in org.jclouds.ovf used by org.jclouds.ovf.xml | |
|---|---|
| Configuration.Builder
|
|
| DeploymentOptionSection.Builder
|
|
| Disk.Builder
|
|
| DiskSection.Builder
|
|
| Envelope.Builder
|
|
| Network.Builder
|
|
| NetworkSection.Builder
|
|
| OperatingSystemSection.Builder
|
|
| ProductSection.Builder
|
|
| Property.Builder
|
|
| Section
Metadata about a virtual machine or grouping of them |
|
| Section.Builder
|
|
| VirtualHardwareSection.Builder
|
|
| VirtualSystem.Builder
|
| Classes in org.jclouds.ovf used by org.jclouds.ovf.xml.internal | |
|---|---|
| Section
Metadata about a virtual machine or grouping of them |
|
||||||||||
| PREV NEXT | FRAMES NO FRAMES |


Topics
Video Tutorials
Slides
Links
Theory of Computing
Review of mathematical background in automata
Finite automata
Deterministic Finite automata
Non-deterministic Finite automata
Regular expressions and Regular sets
Pumping lemma, closure properties
Kleene’s Theorem
Regular grammars
Context Free grammar and languages
Useful symbols, productions, unit productions in Forms
Chomsky normal form
Push-down automata
Equivalence between push-down automata and context-free languages
Introduction to Turing machines : 1
Introduction to Turing machines : 2


--- layout: post title: "@Disclosedtech: Edsurge and New Profit" date: 2017-04-21 13:50:00 +0000 tags: image: https://s3.amazonaws.com/hackedu/2017-04-21-pigeon.jpg imagecredits: https://www.flickr.com/photos/orangegreenblue/8725010851 ---
"New Profit Dishes Out $1M to 7 Organizations in Personalized Learning Initiative," Edsurge wrote on April 17, 2017. This article fails to disclose that Edsurge and New Profit share a funding source: the Gates Foundation.
This sort of disclosure (or lack thereof) is particularly important as Edsurge now sells schools a service in which it recommends ed-tech products that it says schools should buy.
For more information about this and other disclosure alerts, read this blog post.


{% extends "medicalforms/table_summary/summary_base.html" %} {% block title %} Upper Extremity Functional Index (UEFI) {% endblock title %} {% block form_content %}
We are interested in knowing whether you are having any difficulty at all with the activities listed below because of your upper limb problem for which you are currently seeking attention. Please provide an answer for each activity.
Today, do you or would you have any difficulty at all with:
| Activities | Extreme difficulty or unable to perform activity | Quite a bit of difficulty | Moderate difficulty | A little bit of difficulty | No difficulty |
|---|---|---|---|---|---|
| 1. Any of your usual work, housework, or school activities | {{summary.question_1.0}} | {{summary.question_1.1}} | {{summary.question_1.2}} | {{summary.question_1.3}} | {{summary.question_1.4}} |
| 2. Your usual hobbies, recreational, or sporting activities | {{summary.question_2.0}} | {{summary.question_2.1}} | {{summary.question_2.2}} | {{summary.question_2.3}} | {{summary.question_2.4}} |
| 3. Lifting a bag of groceries to waist level | {{summary.question_3.0}} | {{summary.question_3.1}} | {{summary.question_3.2}} | {{summary.question_3.3}} | {{summary.question_3.4}} |
| 4. Lifting a bag of groceries above your head | {{summary.question_4.0}} | {{summary.question_4.1}} | {{summary.question_4.2}} | {{summary.question_4.3}} | {{summary.question_4.4}} |
| 5. Grooming your hair | {{summary.question_5.0}} | {{summary.question_5.1}} | {{summary.question_5.2}} | {{summary.question_5.3}} | {{summary.question_5.4}} |
| 6. Pushing up on your hands (eg. from bathtub or chair) | {{summary.question_6.0}} | {{summary.question_6.1}} | {{summary.question_6.2}} | {{summary.question_6.3}} | {{summary.question_6.4}} |
| 7. Preparing food (eg. peeling, cutting) | {{summary.question_7.0}} | {{summary.question_7.1}} | {{summary.question_7.2}} | {{summary.question_7.3}} | {{summary.question_7.4}} |
| 8. Driving | {{summary.question_8.0}} | {{summary.question_8.1}} | {{summary.question_8.2}} | {{summary.question_8.3}} | {{summary.question_8.4}} |
| 9. Vacuuming, sweeping, or raking | {{summary.question_9.0}} | {{summary.question_9.1}} | {{summary.question_9.2}} | {{summary.question_9.3}} | {{summary.question_9.4}} |
| 10. Dressing | {{summary.question_10.0}} | {{summary.question_10.1}} | {{summary.question_10.2}} | {{summary.question_10.3}} | {{summary.question_10.4}} |
| 11. Doing up buttons | {{summary.question_11.0}} | {{summary.question_11.1}} | {{summary.question_11.2}} | {{summary.question_11.3}} | {{summary.question_11.4}} |
| 12. Using tools or appliances | {{summary.question_12.0}} | {{summary.question_12.1}} | {{summary.question_12.2}} | {{summary.question_12.3}} | {{summary.question_12.4}} |
| 13. Opening doors | {{summary.question_13.0}} | {{summary.question_13.1}} | {{summary.question_13.2}} | {{summary.question_13.3}} | {{summary.question_13.4}} |
| 14. Cleaning | {{summary.question_14.0}} | {{summary.question_14.1}} | {{summary.question_14.2}} | {{summary.question_14.3}} | {{summary.question_14.4}} |
| 15. Tying or lacing shoes | {{summary.question_15.0}} | {{summary.question_15.1}} | {{summary.question_15.2}} | {{summary.question_15.3}} | {{summary.question_15.4}} |
| 16. Sleeping | {{summary.question_16.0}} | {{summary.question_16.1}} | {{summary.question_16.2}} | {{summary.question_16.3}} | {{summary.question_16.4}} |
| 17. Laundering clothes (eg. washing, ironing, folding) | {{summary.question_17.0}} | {{summary.question_17.1}} | {{summary.question_17.2}} | {{summary.question_17.3}} | {{summary.question_17.4}} |
| 18. Opening a jar | {{summary.question_18.0}} | {{summary.question_18.1}} | {{summary.question_18.2}} | {{summary.question_18.3}} | {{summary.question_18.4}} |
| 19. Throwing a ball | {{summary.question_19.0}} | {{summary.question_19.1}} | {{summary.question_19.2}} | {{summary.question_19.3}} | {{summary.question_19.4}} |
| 20. Carrying a small suitcase with your affected limb | {{summary.question_20.0}} | {{summary.question_20.1}} | {{summary.question_20.2}} | {{summary.question_20.3}} | {{summary.question_20.4}} |


Study tells that
kids spending more time with screen media than books.
Ed-Quiz
offers the parents to evaluate the performance of the children's
studies through Digital Technology in 3 simple steps.
-
Parents can prepare a set of questions from a textbook grouped by
subjects in an MCQ format
-
Parents can assign and share the Quiz link to their children via
WhatsApp, Facebook, or even direct link.
-
Children can take the Quiz interactively with the Web or Mobile
through which their performance can be evaluated.


Gestures Library A library of useful functions to ease working with touch and gestures. Download (GitHub)


'3 Black Chicks Review...'
"For Love Of The Game" (1999) Rated PG-13; running time of 120 minutes IMDB site: http://us.imdb.com/Title?0126916 Official site: http://www.universalpictures.com/forloveofthegame/ Written by: Dana Stevens, based on the novel by Michael Shaara Directed by: Sam Raimi Starring: Kevin Costner, Kelly Preston, John C. Reilly, Jena Malone, Bill E. Rogers, Greer Barnes Review Copyright Rose Cooper, 1999
There's something about Kevin Costner and uniforms--especially of the baseball variety. He wowed us (at least this part of "us") in "Bull Durham", and came back for more in "Field Of Dreams"; and now, he gives us "For Love Of The Game". The question remains: did he knock this one outta da park, or was it a swingandamiss?
The Story (WARNING: some spoilers contained below) Ever since he was a wee lad, Billy Chapel lived for the game of baseball; after spending his whole professional career as a Pitcher for the Detroit Tigers [native-Detroiter-Bammer will rant about this later,] in the last game of what a teammate describes as "the end of a shitty season", he reaches down deep and lives in "the zone", potentially pitching a perfect game. He finds himself at a crossroads when the love of his life threatens to leave him. The question is, who is that love: his girlfriend Jane Aubrey, or Baseball itself?
The Upshot I have no Deep Abiding Love for baseball. Truth to tell, it bores me silly, as do most sports. And let me go 'head and get my promised rant out of the way: for a movie that proclaims the Glory of being a Tiger, whythell was Detroit so totally shunned in this flick? Bad enough that e-v-e-r-y friggin game they played was an Away game; they couldn't do Detroit the honour of mentioning its name more than once or twice, even just in passing? It was very noticeable to the crowd that watched with me (I was surprised there were so many there for this sneak preview), and my husband ranted about it when I got home, even though he didn't watch with me. This aspect of the movie dulled the authenticity of it all for me; had Chapel been made a Yankee instead of a Tiger, I could've dug it, but there was no real Tiger Pride as far as I could see.
Now that that's out of the way, I'll surprise you a wee bit: I liked this flick. And strangely, I don't quite know why. To be sure, it seemed to do everything it could to insure that I wouldn't like it, from the Detroit-less Tigers, to being a baseball movie to begin with--and especially because of Kelly Preston.
Kelly Preston. Man, that chick was hard to deal with. At once seeming way too young for Chapel, and very outclassed in the acting department by even Costner (who doesn't deserve all the flack he gets. Some, but not all); in the end, she grew on me, maybe becase Chapel turned out to be such a prick [y'all shoulda seen the typo I made on the first draft of this review! But, as is my way, I digress.] My major Issue with her was that she looked, and acted, more like a Valley Girl than a Noo Yawka. She seemed too flighty at first, and her character began as unsympathetic for me (we see Jane stand-up Billy just before his Big Game, as she tells him she's going to London because "you don't really need me"; "Get over yourself!", I mumbled quietly to the screen), but as the movie progresses, she seems to "grow up" in fits and starts, though some of the crap she takes from Billy throughout had me wanting to shake her and wake her dumbbutt up. In the end, though there could've been better choices of actresses for her role, she acquits herself adequately enough.
And Costner, The Man Hissef; what of him? I'll put it like this: he wears his uniforms well. And that's no backhanded compliment; though he looked too old for the part, I could Believe him as a ballplayer. The shots of him (and his double) on the diamond were beautifully done by the cinematographer (it's hard to describe, unfortunately; you'll have to see it for yourself to know what I mean), especially the "clear the mechanism" scenes. And even when the pseudo-Philospher that's apparently inherant in all baseball players, came to the fore, I didn't run Yelling And Screaming from the theater. Costner's Billy Chapel seemed Real to me, and though overall, "Bull Durham" was a much better flick for him (Costner's "How do you like to be kissed?" line couldn't touch his Bull Durham characters' "I believe in..." speech to Susan Sarandon, on a good day), Kevin should be able to loose the ghosts of "The Postman" past with this one; until his next Big Flop, at least.
As for the story itself, I am again surprised that I wound up being interested in it. There was very little actual conflict, and what there was, seemed contrived. The baseball game itself was just a set-up for the flashbacks which told the story--or was it? Hmmm...even if it were, though, the "conflict" in the game itself was light; and yet, still effective. I loved the character of Gus ("the ugliest Wife in the league"; played by Reilly), and I found myself rooting for Billy's every pitch, straining to hear his "conversations" with the stadium crowd, his "worthy opponents" on the other team, and most of all, with himself--despite my lack of enthusiasm for baseball. And at the end of the game (I won't give it away, but needless to say, there were no real plot twists), I cheered right along with the rest of the crowd--on screen, and off. The simultaneous love story was rather bizarre, too; there was nothing there at all to grab onto from either the characters' standpoint or for Joe Viewer, until the appearance of one of Jane's family members (Heather, who I found quite charming, in spite of my reservations about that kind of character being added to Save The Day; perhaps because Heather was played nicely by Malone). And oddly enough, that whole plot took on a different Feel from there; it became softer, sweeter; it became interesting. It threatened to lose my interest when Preston's lack of acting skills got in the way again, but the whole timbre of the movie changed with that one scene. I blushed at their "will you still love me when..." telephone conversation--having remembered one very much like it after I fell in love with my now-husband. Recognition of Self, when watching a movie, generally being A Good Thing...
"For Love Of The Game" was no "The Natural", but at least it was no "WaterWorld" either. If you need a Feel-Good movie right about now [I did: just before I went to see it, my wallet was stolen], you could do much worse. And coming from me, that's about as good a compliment that a film not on the same level as, for instance, "The Matrix", can get.
The "Black Factor" [ObDisclaimer: We Are Not A Monolith] As a Black woman, I see the "Black Factor"--things that affect me as a "consumer of color"--in many aspects of life; movies included. Whether from the standpoint of noting Black (and other "minority") cast and crew members (if any), to the (lack of) focus toward "people of color" (dag, I hate that term), to the out-and-out antagonistic attitude toward Us (Jar-Jar, anyone?), the "Black Factor" (BF) is something that plays as much a role in my film enjoyment as any other aspect of the movie itself.
As has been noted Elsewhere about the lack of Blacks in new TV series this Fall season (there's an article in the 7/30/99 issue of "Entertainment Weekly" that I highly recommend, titled "White Wash"), it's much easier depicting an integrated workplace than it is to show folks of different races hangin' out after hours--but what if that workplace was the sports arena, as it is in this flick? I'd postulate that in those cases, there'd be the usual hand-wringing by The Powers That Be over How To Handle The Race Issue: "Well," I hear The Powers thinking; "should we show the team lineup as a reflection of what we actually see in real-life sports, or should we add a White [or Black, as the case may be] guy in the mix? Should we trip all over ourselves to include a Black [White] Friend? Oh how do we get The Black Dollar in to see this one?!?"
Fortunately, that postulation in this case, would be wrong. That mindset, and the slippery slope it begets, didn't seem to be at the forefront in this movie, for the most part. The Black players clearly had a Relationship with Billy, but so did the rest of the team (those that were featured, as well as the team in toto). Billy respected Davis Birche (Rogers) a former teammate of his that happened to be Black (whose wife Keisha--played by Sheila Lussier--also had an effect on Jane), and though the little time they spent on their personal relationship felt a little clumsy, it wasn't focused on long enough to make the problematic part of modern entertainment--showing White and Black folks together in non-workplace settings--become an Issue. And I still have the feeling that if it were (this being a movie drama, not a TV sitcom), it would've been done well. At any point, there was no big deal made of the fact that either Davis, or Mickey Hart (Barnes), a current teammate who he gave some sound advice to, in the role of OldSchooler, were Black. And that, in this instance, was A Good Thing.
Bammer's Bottom Line My problems with the flick notwithstanding (Kelly Preston at times; the DAMNED ANNOYING Fox TV announcers--I think all sports announcers should be fined for stoopidity when they keep yammering on; likewise, the DAMNED ANNOYING "instant replays"--not only did they not look real, they were simply unneeded, having added nothing to the story), there was something about this film that Reached me. I didn't mind being less $6 for the sneak preview that I saw. That may not sound like much of a movie recommendation, so look at it this way: I wouldn't mind seeing it again, even if only as a second-run flick; "Chill Factor", and its ilk, I wouldn't see again if you paid me. Can ya diggit?
"For Love Of The Game": Though I have no love for the game of baseball, this flick stands out for me if only because it was the first new one I've seen in awhile that didn't plain Suck. Maybe my standards are too low lately because of that, but what the heck; unless you're an certified Costner-hater (or if the thought of seeing even fictionalized baseball gives you gas), go check it out.
And that's the way I see it.
3 Black Chicks...Movie Reviews With Flava! /~\ Rose "Bams" Cooper /','\ 3BlackChicks Enterprises /','`'\ Copyright Rose Cooper, 1999 /',',','/`, EMAIL<EMAIL_ADDRESS>ICQ: 7760005 `~-._'c / http://www.3blackchicks.com/ `\ ( http://manetheren.cl.msu.edu/~bambam/ /====\
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