Independent set of a graph G represents the set or collection of vertices that are not adjacent to one another. It is a concept in graph theory according to which there should not be any edge connecting the two vertices of a set.
• It is also known as a stable set in which an edge can have at most single endpoint in the graph.
• Thus, the vertices contained in the independent set represent the subset of the vertices of a graph.
Consider the figure or the graph given below containing an independent set of size 3:
a .
Consider a graph containing V vertices and set of edges E. Here, it is required to devise a decision problem for the independent–set problem and proving that it is NP-complete.
Decision problem:
• It is a way of asking the question in order to determine that whether a solution or answer of a particular question exists or not.
• It is a type of problem in a formal system in which the answer or solution of the problem comes out to be in two definite forms as either Yes-or-No.
Consider the following example:
Graph coloring, Hamiltonian cycle or graph, Travelling Salesman Problem (TSP) is some of the common examples of the decision problems (All these can also be expressed as an optimization problem).
• Decision problem is related to the optimization problem which aims at finding the best or optimized solution to the problem.
• These types of problems generates only two states of outputs such as True-false, 0-1 or Yes-No on a set of any number or infinite set of inputs.
Figure given below outlining the definition of a decision problem with its possible outputs:
Independent set problem:
• It is one of the examples of an optimization problem which aims at finding the largest or the maximum set of the vertices that are not adjacent to one another.
• It is feasible to covert or transforms an independent set problem as a decision problem to easily generate the uniform type of outputs (Yes or NO) as compared with the optimization problems which are harder and little complex to solve.
Independent set problem can be formulated as a decision problem as given below:
Input (Instance): Given an undirected Graph G with V vertices, E edges and a lower bound or an integer N.
Question: Does a Graph G contain an integer N such that there exists at least a set P of non-adjacent or independent set of vertices of cardinality or max size N?
Output: Yes, there exists such an independent set P of vertices of size at most N.
Now, it is also asked to show that the Independent Set Problem is NP complete. For proving that the independent set problem is NP complete, it is required to show that it is NP as well as NP-hard.
NP: Given an independent set S of an undirected graph G is NP if there exists polynomial time algorithm taking an instance or object of the problem and as a certificate which are the set of the vertices that can be passed as the parameters. The algorithm considered will check whether all the vertices of the certificate are available in the graph and also it will check that there should not be any edge connecting the pair of vertices of the certificate.
The running time complexity of this algorithm is which is simply a polynomial time and thus, it can be stated that an independent S belongs to NP.
In order to prove that the independent set problem is NP-hard, the polynomial time reduction of an instance of a Clique problem should be transformed in such a manner that the true input or instance of a clique problem’s should be mapped with a true instance of an independent set.
• Consider the instance of the Clique problem as. This problem is independent set problem having set where the symbol is complement of.
• The set of vertices represents a clique having size x is in the graph only in a case if is an independent set of graph having the size of x, and it also following the fact that the construction of from the must be done in polynomial time.
In this regard, it can be concluded that independent set problem is also NP-hard. Thus, as it has been proved that an independent set problem is NP as well as NP-Hard so it can be said that it is always NP-complete, which are the hardest problems in NP.
b.
Given a “black-box” subroutine to solve the decision problem defined in part (a) and a graph.Here, it is asked to give an algorithm which can be used to find an independent set of maximum size. To implement an algorithm for solving the above problem consider black-box as .
Algorithm:
// perform search operation
Step1: Start binary search on B to determine the maximum size for the independent set.
// initialization step
Step2: Set the independent set to be an empty set.
Step3: for each
Construct by removal of and its related edges from the graph
Step 4: if (
Set
else
Here, is obtained by removal of all the vertices which are connected to v and the edges which are linked to it from the graph.
// end
Here, Step 1 has time complexity of.
Step2: It has the complexity of.
Step-3, 4: They have the number of iterations equal to
Hence, the vertex in graph which is obtained at last is independent set of size by the construction.
Hence, it can be concluded that the time complexity is equal to .
c.
Given that the degree of the graph G is 2, which implies that each vertex in the graph has a cardinality or degree 2.
Here, it is required to give an algorithm that can solve the independent set problem of a graph having degree 2. Also, it is required to analyze the running time and the correctness of an algorithm.
As, it can be noticed that when a degree of the graph is 2 then, in order to solve the problem of an independent set we must have the graph as a simple cycle.
Consider the graphs given below of degree 2 and thus, containing a simple cycle.
• Thus, from the above graphs it can be observed that generally the graph containing the vertices of degree 2 is a simple cycle.
• Therefore, the independent set problem in such a case can be achieved by initiating at any vertex and start choosing the alternate vertex on the cycle till the size obtained for the independent set to be.
Hence, it can also be concluded that the running time of the algorithm to solve the problem of independent set having V vertices, E edges and degree of each vertex as 2 is.
Consider the graph of degree 2 given below having vertices A, B, C, D and the set of four edges connecting them:
Start the process from vertex A. Now, according to the algorithm, proceed the traversal by picking up an alternate vertex and thus, vertex C would be chosen, leaving behind the vertex B. After choosing the vertex C, vertex D will not be picked and the algorithm stops with independent set containing the verticesand having size.
Hence, the solution obtained by applying the algorithm on the graph of degree 2 is a maximum independent set of size 2 which is.
Thus, the algorithm devised above is accurate and it will work correctly.
d.
Here, it is required to give an algorithm to solve the independent set problem in case of a bipartite graph G.
• A bipartite graph commonly known as the bigraph is an undirected graph whose vertex set can be partitioned or arranged into two disjoint sets that are independent.
• It is possible to color this type of graph by using the two colors only so it is 2 colorable or bi-chromatic.
• There are several applications of these graphs like in case of matching problems.
For example:
Consider a bipartite graph given below containing two set of vertices V1 and V2, such that and each edge is having the different color vertices as the end points.
In the graphs shown above, and are the two independent set of vertices that are not adjacent to one another.
In a bipartite graph the matching is a group of edges such that any of its edges do not share the same end points. A vertex, included in the matched set of edges, is the vertex is used in creation of a matched edge is called as the saturated vertex.
For example:
Consider the graph below which highlights the edges of matched set M:
The matching set is as:
Matching is also called as maximal matching if there is no more edges that can be included into the matching set M and it’s called the ideal or the perfect matching if no unmatched vertex is found.
In a bipartite graph, to determine independent set, following approach is used:
? First find the maximum-matching of the graph by using an algorithm such as augmenting path algorithm or much faster and an improved algorithm known as Hopcroft-Karp bipartite matching algorithm. (Refer section 26-6)
? Repeat the process
¦ for all vertices which are not present in the maximum-matching set (set with largest number of edges), run BFS to find the augmenting path.
¦ Alternate unmatched/matched edges to select the edge which is in the maximum matching and are not connected from the vertices that are not a part maximum matching set.
¦ Reverse or flip the matched edges with unmatched edges and vice-versa.
? Stop the process if no augmenting path is found and return the last matching set.
The running time or running complexity of the algorithm to solve the independent set problem is. The algorithm works correctly if there does not exist any augmenting path with respect to the maximal matching M as obtained by applying the bipartite matching algorithm.
Bonnie and Clyde
A problem is said to be in a set of NP-Complete if that can be solved in polynomial time, here NP is abbreviation of non-deterministic polynomial time. For example if a language named L is contained in the set NP then there exists an algorithm A for a constant c then
Any problem that is convertible to the decision problem will surely be the polynomial time .
(a)
Consider that there are m coins whose worth is x dollars each and restcoins worth y dollars each. So the sum total of the worth of all the coins is:
dollars.
So for equal division of the total worth Bonnie and Clyde must take dollars each. The division of coins can be done in a manner so that each of them have equal amount so for division assume that either Bonnie or Clyde start taking the coins and take exactly half worth coins.
Assume that Bonnie first start to take the coins and he is free to take any of the coin that is either x worth or y worth and any number of coins whose total worth is exactlydollars.
If Bonnie takes p number of coins of dollar x where then to check how many coins of y dollars Bonnie should take that is to check ifand.
Bonnie can take coins of value x dollars so there are maximum possibilities to check the worth of remaining coins, because Bonnie can take at most m coins. For every possibility, perform a fixed number of operations, there are a total of polynomial number of possibilities. Constant number of operations for polynomial number of possibilities cause this algorithm to be a polynomial time solvable algorithm.
Hence, the above is the polynomial time method to divide the coins exactly amond them.
(b)
The following method is deployed to do the required division of coins.
1. Arrange all the n coins in the non-increasing order of their denominations that is. Firstly give Bonnie the coin with greatest worth or denomination after that give Clyde the coins the sum of whose worth is same as the coin given to Bonnie.
2. Now the worth of remaining coins will be greater than or equal to the sum of worth of coins which are with Bonnie and Clyde because the denominations of coins are raised to power of two.
3. Now from remaining coins give the coin which has maximum worth to Bonnie and again give same worth coins to Clyde and repeat this process until all the coins are divided.
4. In this process if a coin is given to Bonnie which is of cost p and the sum of worth of rest of the coins is less than p then coins can’t be divided equally between them else it is possible.
This process requires polynomial number of steps and each step takes constant steps each. So, the total asymptotic time complexity of this procedure is polynomial in nature.
Hence, the above is the polynomial time method to divide the coins exactly amond them.
(c)
This problem is solved by following steps:
• The problem is in NP or not. If it is, then go to next step.
• Is every problem in NP is reducible to this problem in polynomial time.
• If both of these are true, then the problem is NP-COMPLETE.
1. First check if the problem is in NP.
Once the division of checks is done, the sum of the checks should be equal to total sum. This is done in two steps, first use list of items and the value of each to find the total value as follows:
Next calculate the value of checks that one of them gets. If that value is equal to , then the algorithm is verified. So, the problem definitely belongs to NP.
2. Check if every problem in NP is reducible to this problem in polynomial time.
Consider the SET-PARTITION problem which states that it takes polynomial time to find out if there is a subset in a bigger set such that the sum of the elements in the subset is equal to a given integer k.
To reduce this problem to the current problem, consider the set to be the set of all checks in the bag and the integer . This reduction takes polynomial time.
Infact, SET-PARTITION problem is NP-COMPLETE. It is reducible to the current problem.
From these two steps, it can be said that the problem belongs to NP and every problem in NP is reducible to this problem in polynomial time, therefore, the problem in NP-complete.
(d)
This problem is solved by following steps:
• The problem is in NP or not. If it is, then go to next step.
• Is every problem in NP is reducible to this problem in polynomial time.
• If both of these are true, then the problem is NP-COMPLETE.
1. First check if the problem is in NP.
Once the division of checks is done, the difference between the total with Bonnie and the total with Clyde must be less than equal to 100.
This is done in two steps, first use list of items and the value of each to find the total value for both Bonnie and Clyde.
Next calculate the difference is less than equal to 100 or not as follows:
If it is true, then the algorithm is verified. So, the problem definitely belongs to NP.
2. Check if every problem in NP is reducible to this problem in polynomial time.
Consider the SET-PARTITION problem which states that it takes polynomial time to find out if there is a subset in a bigger set such that the sum of the elements in the subset is equal to a given integer k.
To reduce this problem to the current problem, consider the set to be the set of all checks in the bag and then check for each value of such that , the value of is true. This reduction takes polynomial time as it requires running the SET-PARTITION algorithm for 200 times.
Infact, SET-PARTITION problem is NP-COMPLETE. It is reducible to the current problem.
From these two steps, it can be said that the problem belongs to NP and every problem in NP is reducible to this problem in polynomial time, therefore, the problem in NP-complete.
A problem is said to be NP-Complete if it is solved in polynomial time. NP is abbreviation of non-deterministic polynomial time.
For example if a language L is contained in the set of NP then there exists an algorithm for a constant c then
Any problem that is convertible to the decision problem will surely be the polynomial time.
a.
Consider the following graph G for coloring by using two colors and apply the procedure to color the vertices of the graph is as follows:
1. First take any vertex of the graph as the starting vertex and paint it by using one of the two colors given to color the graph.
2. Find all the vertices that are connected to the first vertex with neighboring edges and color all of them from the second color.
3. Apply breadth first search to find the edges that are not visited yet and if there is any edge in the graph whose both vertices are painted with same color.
4. if there exist such edges whose both end vertices are painted in same color
5. graph will not be 2-colorable;
6. else
7. it will be 2-colorable.
b.
Consider the following procedure to show that decision problem is solvable in polynomial time.
Consider an undirected graph G (V,E) with V vertices and E edges, coloring this graph by using k different colors such that all neighboring vertices are colored with different colors.
• If the graph coloring problem is in polynomial time then checking, if the value of k is greater than the least number of colors required to color the graph.
• If k is greater than the decision problem then it will be false and it will not be k-colorable. Else it will be true that is the graph will be k-colorable.
c.
In the graph coloring firstly a colored graph is check if any edge in the graph whose both end vertices are painted with the same color. This verification process of color can be completed in polynomial time.
• The 3-COLOR problem can be reformed as the decision problem which is a polynomial time problem.
• For the conversion of the 3-COLOR problem to a decision problem consider graph G= (V, E) with V vertices and E undirected edges, new connected vertices are added to the graph.
• All other vertices are connected to these vertices with edges and this creates a new graph G’.
• Now the graph G will be 3-colorable only when the graph G’ will be painted by using k colors. This conversion of the 3-COLOR problem is polynomial time.
Hence, if 3-COLOR is an NPC, the k -colorable problem will surely be NPC because it is convertible.
d.
Consider the variable x in its generalized form the graph. The vertices named x and the neighbors of each other and both of these are attached to the RED vertex. The same thing happens to TRUE and FALSE that is for any edge one of its variable is TRUE and the other is FALSE.
So, in any 3-coloringand eitheror.
Hence it proves the statement that in 3-coloring graph with literal edges both the variables of its are colored differently that is TRUE and FALSE.
User can color the graph containing only literal edges by using the procedure which is as follows:
• Color the node named RED using one color, give the variable and TRUE the same color, and variable negation and FALSE the same color.
• When the nodes of the graph are fully painted then we will see that no literal edge is connected with the vertices painted with same color.
Hence the graph which possesses the literal edges is forever 3-colorable.
e.
Consider the following procedure to prove that the widget is 3-colorable, if one of the three vertices is colored.
Initially user prove if the widget is 3-colorable or it can be colored with 3 colors, then at least one of the nodes x, y and z is colored.
Firstly name the vertices of the machine in figure 34.20 as shown in figure:
•
• The node d cannot be and also cannot be because it is connected to T and node c which is FALSE. The same thing happens to node e.
Thus the vertices d and e will be painted with the same color, because only three colors are used which contradicts the condition of proper coloring.
Hence x, y and z all the three input nodes can’t be painted with the same color.
f.
A problem that is of NP-Complete then it must be of polynomial time and also the NP-Hard.
As discussed in the part c of this problem the 3-COLOR problem is polynomial verifiable. To prove that 3-COLOR is in NP-Hard we reduce 3-CNF-SAT to 3-COLOR because it is polynomial reducible.
For a 3-CNF-SAT problem, user creates the graph containing only the literal edges and creates one widget for each clause.
Now user shows that 3-CNF-SAT has a solution, only if the graph is 3-COLORABLE which is as:
1. If the 3-CNF-SAT has got a truth assignment, then for each widget, at least one of x, y and z is painted TRUE.
As discussed in part e, every widget is 3-COLORABLE and the graph containing only the literal edges is always 3-COLORABLE as discussed in part d of this problem. Thus we can derive the conclusion that the graph is 3-COLORABLE.
2. If the graph is 3-COLORABLE, then in every widget, one of x, y and z has to be
TRUE. Just give the truth assignment as, which shows that 3-CNF-SAT is satisfiable.
Thus the 3-COLOR problem is in NP-Hard.
Hence the 3-COLOR problem is polynomial time verifiable and also is NP-Hard so it is NP-Complete problem.
(a)
Consider the set of n tasks taking unit time on the machine and required to be completed in such an order that the maximum amount of profit is returned. The problem of scheduling with deadlines and profits can be stated as a decision problem which is a way of asking the question in order to determine that whether a solution or answer of a particular question exists or not. It is a type of problem in a formal system in which the answer or solution of the problem comes out to be in two definite forms as either Yes-or-No.
Figure given below outlining the definition of the decision problem with its possible outputs:
The decision problem is as:
Input (Instance):
1. -profits.
2. -deadlines.
3. -time.
4. Integer.
Output: This is the problem statement. It asks is it possible that any scheduling of tasks exists or feasible to design in which all tasks are completed within the assigned deadlines and in which at least profit K is returned in such a way that no two tasks run simultaneously and the value of K turns out to be Maximum.
If the value of profit K is maximum then, the answer of the decision problem is yes or true. Else, no such scheduling criteria exists that can execute the n tasks with maximum profit and before or by the deadline and thus, the answer to the decision problem is No or False.
The above is the required statement for the decision problem.
(b)
NP stands for the class of problems that can be solved in Non-Deterministic polynomial time and NP - complete is a class of decision problems that are present in the set of the NP problems as well as in the set of the NP-Hard problems.
Also, any decision problem can be NP-complete when it belongs to the class of NP problems and also it can be reduced to other decision problems and vice-versa. Figure given below illustrating the relationship among P, NP and NP-complete type of problems:
To show that the decision problem of scheduling of tasks with deadlines and profits is NP-complete consider an instance and a given schedule in which the task i is completed at time. Therefore, in this way it can be easily found or deduced that if it is non-overlapping and if there is at least K profit, then, have the running time as. Suppose there is an instance, the instance; is constructed. It will take time.
Suppose that there exists a subset of element X in such a way that the sum is exactly equal to t then in this condition there will be a schedule for Y. In other words, it can be said that if there is a schedule of Y then for the subset of the tasks there is a deadline which implies that the task in has met the deadline and it is polynomial time
Hence, it is concluded that the given decision problem is NP-complete.
(c)
Dynamic programming is an approach used for solving the problems by decomposing or dividing them into smaller sub problems or sub structures. It is a method which is mainly used in case of the problems having the overlapping or repeated substructure or optimal sub problems.
Polynomial time algorithm provides the way or solution of handling or solving the decision problem in polynomial time. For solving a decision problem in polynomial time, an instance of a decision problem P is transformed or reduced to an instance of another decision problem Q.
Consider the figure given below:
A polynomial time algorithm for solving the decision problem using dynamic programming and by assuming all processing times to be integers from 1 to n consists of several steps which are as follows:
1. An array of values is discussed which is to be computed. An array is defined in such a way that we have the condition and by:
2. A recurrence is established. It allows to compute the value of A having one row at a time.
.
Consider
Define .
The used here is the latest time at which the job I is scheduled in such a way that it ends by time and by its deadline.
Then it leads to,
if t’ < 0
then A (i, t) = A (i–1, t)
and
if t’ 0
then A (i, t) = max {A (i–1, t), gi + A (i –1, t)}
3. A high level program is given.
It is given to compute the values into an array B, in such a way that the following condition holds:
4. Compute the optimal solution.
Hence, the above is algorithm which comprises polynomial number of steps and so it is the polynomial time algorithm for the decision problem.
(d)
The objective is to give a polynomial time algorithm for the optimization problem using dynamic programming approach and by assuming that all processing times are integers from 1 to n.
Optimization problem aims at finding the best possible solution to a problem from a set or a list of all possible solutions. These are the type of problems that can have several numbers of feasible solutions. Optimization problem provides a maximum or minimum value for a problem in an optimized way. Using dynamic programming optimization problem can be solved by characterizing the structure of an optimal solution first
For the optimization problem the same dynamic programming algorithm as described in part (c) can be used with the change in the recurrence as,
This has the base case
Otherwise
And in the given condition the processing time is limited to n so the
For each step of, is required. So, the total asymptotic complexity becomes
Hence, the time complexity is equal to .


ProvingGround
Hello world from Dart!
Bounce
{{b}}
{{bnc.mult}}
Logs:
{{l}}
Raw: {{bnc.logs}}
Click me!
Output:
{{equation}}
Equation:


OUTBREAK A film review by Mark R. Leeper Copyright 1995 Mark R. Leeper
Capsule: The first 80 minutes of this film are an accurate, frightening, and original look at an all too real threat, the possibility that an Ebola-like virus would get loose in the United States. But, unlike Robert Wise directing ANDROMEDA STRAIN, Wolfgang Petersen did not trust science and character to drive his story. He mires the final third in the cliches of an action film and betrays the power of his material. We have an interesting action thriller instead of a real classic. Rating: high +2 (-4 to +4). Some minor spoilers in the review and a separate article of (non-spoiler) comments on epidemic predictions follow the main body of the article.
The film starts with a quote saying that viruses pose the greatest threat to human existence on this planet. That is probably fairly accurate.
Hey, want to see something really scary? I am not talking scary because things jump out at you or actors wear plastic masks. I am talking scary because it is only too possible. It probably has already come near to happening in recent years. Most of OUTBREAK is a very credible extrapolation of what might well happen if a seriously dangerous virus got loose in this country. If Zaire Ebola had gotten loose close to home the events shown in OUTBREAK are really quite possible. In fact it is difficult to read the non-fiction books THE COMING PLAGUE by Laurie Garrett or THE HOT ZONE by Richard Preston without envisioning scenarios not unlike the one in this film.
As the film opens with an outbreak of a viral disease in Zaire in 1967, the U.S. Army's response to eliminate the disease is quick but effective. Twenty-eight years later an Army team from Fort Dietrich led by Dr. Sam Daniels (Dustin Hoffman) finds a new viral disease has broken out in the Motaba River Valley and dubs the disease Motaba. Even Daniels, who is used to working with the likes of Ebola, Lassa, and Hanta, is frightened by the virulence of Motaba. And even as he is returning home to report the terrible new disease, Motaba virus is traveling to the U.S. by its own route.
Daniels wants to pursue the new disease but is ordered off. Ironically, his ex-wife, Dr. Roberta Keough (Rene Russo), who works for the Centers for Disease Control, has an opportunity to investigate the same disease Sam has told her about. Daniels finds his strings being pulled by his superior officer, played by Morgan Freman, and a higher- up general, played by Donald Sutherland, neither of whom want him working on the new virus. Sutherland is quick to call in drastic action to quarantined areas. "Be compassionate," he tells a Presidential commission on the crisis, "but be compassionate globally." What he sees as compassion on the global level is something very different on the local level. The film clearly doesn't agree with this policy, but under the circumstances he may be talking sense.
One problem with the script by Laurence Dworet and Robert Roy Pool is that it is all too obviously trying both to be realistic and at the same time to be an action film. The two just don't go that well together. OUTBREAK wastes time on developing the rocky relationship between the two divorced doctors. Then it wastes the last third of the film on an unlikely and gratuitous action story built around a surprisingly tired and over-used premise. It makes a human the villain as if the story did not have enough viral villains. And the human villain's motive is a strikingly overused cliche. More disappointing, the race to understand and control the new virus is diverted into a standard action-film chase. This takes time and emphasis away from more interesting questions such as how is it possible to maintain a strict quarantine on a town of 2600 people? When the chases are over it is all the harder to remember what set this story apart from so many similar action films.
It is a shock to see Dustin Hoffman in a science fiction film and one in which he plays an action hero, albeit a reluctant one. Donald Sutherland plays much the same character he played in PUPPET MASTERS, though he plays the character as seen from a different viewpoint. Rene Russo is competent and likable in her role, and it is nice to have a woman over thirty-five in a starring role, but she does not imbue her character with any real power. Curiously, for a German, director Wolfgang Petersen seems to have a need to put action in a story that might work better as a more cerebral piece. That is a fault here even as it was with his ENEMY MINE.
This is a film I can well recommend for its first two-thirds and if you have come that far, at least you will not be bored when the film turns from extrapolation to action. But the final forty minutes or so has some serious sacrifices of logic for commerciality. Somebody apparently decided that the more interesting and more credible story would not sell. I was at times thinking this would be a strong +3, but it lost a point in the final reel. It remains a high +2 on the -4 to +4 scale.
The following are comments I made about OUTBREAK before seeing the film:
"Let me put it this way. In its present form the Satan Bug is an extremely refined powder. I take a saltspoon of this powder, go outside into the grounds of Mordon and turn the saltspoon upside down. What happens? Every person in Mordon would be dead within the hour, the whole of Wiltshire would be an open tomb by dawn. In a week, ten days, all life would have ceased to exist in Britain. I mean all life. The Plague, the Black Death--as nothing compared with this. Long before the last man died in agony, ships or planes or birds or just the
waters of the North Sea would have carried the Satan Bug to Europe. We can conceive of no obstacle that can stop its eventual world-wide spread. Two months, I would say two months at the very most.... The Lapp in the far north of Sweden. The Chinese peasant tilling his rice fields in the Yangtze valley. The cattle rancher on his station in the Australian outback, the shopper on Fifth Avenue, the primitive in Tierra del Fuego. All dead. Because I turned a saltspoon upside down.... Who would be the last to go? I cannot say. Perhaps the great albatross forever winging its way round the bottom of the world. Perhaps a handful of Eskimos deep in the Arctic basin. But the seas travel the world over, and so also do the winds; one day, one day soon, they too would die."
That was from the novel THE SATAN BUG by Ian Stuart (a pen name for Alastair MacLean). Almost the identical quote was used in the film version. And it hooked me into a different type of science fiction I had not known about before, epidemiological science fiction which looks at what would happen if some really virulent and contagious disease got loose on modern society.
I like to consider science fiction a field where people are thinking out some of the most serious issues that could be shaping our future. It is the ideal place to work out some of the more frightening epidemic scenarios, much as it was for working out scenarios of nuclear war. But on the whole science fiction writers have avoided talking about disease or have limited themselves to separating themselves from the real action by examining isolated groups of scientists as in ANDROMEDA STRAIN or the aftermath as in EARTH ABIDES or the British television series SURVIVORS. Even THE STAND concentrated only on people who were to survive. The time is right for science fiction to consider the most serious societal aspects of epidemics, but I do not know if OUTBREAK is the right film.
Consider some of the issues that particularly dangerous viruses raise. Suppose some new virus that came along was something so bad that the rights of the afflicted were overwhelmed by the danger they pose to those not yet afflicted. That is pretty much what happened with diseases in the Middle Ages, and all our medical research has done has been to raise the threshold a little to make it harder for a disease to reach that level. Science fiction writers, be they in literature or film, have never seemed as excited by that concept as they might be. The attitude of writers has seemed to be, "After all, we have licked polio and smallpox and it is just a matter of time for the rest of the diseases." Well, now people are starting to realize that we are not as secure as we thought. Malaria and tuberculosis are on the rebound; AIDS is not readily amenable to treatment. And we think of AIDS as being a horrible disease, but we still have the luxury (and, yes, the responsibility) to consider the rights of the victim. If AIDS was as contagious as Zaire Ebola the politics of dealing with it would have to be very different. (Incidentally, a very sobering thought: the best evidence is that Sudan Ebola did not have a common origin with Zaire Ebola. That means that in the course of a few short months nature had invented the Ebola virus twice.) How would we handle a disease for which care-giving was tantamount to suicide? What if the mere proximity of victims constituted a genuine threat? Many of the most bigoted myths and exaggerations about AIDS are theoretically possible in some disease. In fact, even AIDS is probably worse in some regards than the disease in OUTBREAK. It has a much longer interval of contagion before showing symptoms. Combine that with high susceptibility and you have a monster a few microns long that is a lot scarier than anything most writers have considered so far. Hopefully, recent books on the subject of newly emerging diseases may get people thinking about these issues even if science fiction writers continue to shy away from the subject.
Mark R. Leeper<EMAIL_ADDRESS>Copyright 1995 Mark R. Leeper
.
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


Palestime poly.. university - A Graduation project
<-
Plugin intro
My personal information
My profile
My settings


Protected branches are available in public repositories with GitHub Free and GitHub Free for organizations, and in public and private repositories with GitHub Pro, GitHub Team, GitHub Enterprise Cloud, and GitHub Enterprise Server.
Note: The Nested Teams API is currently available for
developers to preview. See the
blog post for full
details. To access the API, you must provide a custom
media type in the
Accept
header:
application/vnd.github.hellcat-preview+json
Warning: The API may change without advance notice during the preview period. Preview features are not supported for production use. If you experience any issues, contact your GitHub Enterprise site administrator.
Removes the ability of a team to push to this branch. If you pass the
hellcat-preview
media type, you can also remove push access for
child teams.
DELETE /repos/:owner/:repo/branches/:branch/protection/restrictions/teams
| Type | Description |
|---|---|
array |
Teams that should no longer have push access. Use the team's
slug . Note: The list of users, apps, and
teams in total is limited to 100 items.
|
[
"octocats"
]
Status: 200 OK
[
{
"id": 1,
"node_id": "MDQ6VGVhbTE=",
"url": "https://api.github.com/teams/1",
"html_url": "https://api.github.com/teams/justice-league",
"name": "Justice League",
"slug": "justice-league",
"description": "A great team.",
"privacy": "closed",
"permission": "admin",
"members_url": "https://api.github.com/teams/1/members{/member}",
"repositories_url": "https://api.github.com/teams/1/repos",
"parent": null
}
]


House in La Calera / Abdenur Arquitectos
- | Translated by Emma Johansson
- about 21 hours
Houses Interiors · La Calera, Argentina
- version="1.0" encoding="UTF-8"? Architects: Abdenur Arquitectos
- AreaArea of this architecture projectArea: 415.0 m2
- version="1.0" encoding="UTF-8"?YearCompletion year of this architecture project Year: 2018
- version="1.0" encoding="UTF-8"?PhotographsPhotographs: Gonzalo Viramonte
- version="1.0" encoding="UTF-8"?ManufacturersBrands with products used in this architecture project Manufacturers: Häfele, InterAlumina, Sbacco, Sika, Tangente Group + Electroalem
- Lead Architect Abdenur Pablo, Abdenur Juan Pablo, Ferreyra Facundo, Castagneris Agustin
- Interior Design Josefina Díaz
- Contractor Interalumina, Mateucci Puertas, ProGarden, Tangente Group
More Specs Less Specs
Text description provided by the architects. The house in La Cuesta is a piece of architecture based on an uneven terrain located in the town of La Calera in the Province of Córdoba. Materialised with a traditional system, the house offers spaces of privacy and tranquillity as well as spaces for gathering and meeting. The objective of the project was to find the balance between this duality.
The entrance to the house is generated through a half-level hall, leading to the private area divided into three bedrooms located on the top floor. The main bedroom has the city as a backdrop separated from it by a large a window with the length of the entire space, with its en suite bathroom and dressing room. On the other side of the corridor are the other two bedrooms that turn towards the front of the house, coinciding with the pedestrian level outside.
Through a vertical filter generated by a metallic skin, the facade of the house is formed austere and simple, marking rhythm, homogeneity and especially permeability. The social area is located on the ground floor, the spaces are arranged so that the connection with the exterior and the visuals are always present, where the transition is subtle and the fluidity is visually perceptible. On this floor, the spaces gradually change their privacy condition, beginning in an intimate English courtyard, crossing the social areas and the gallery, ending up in the urban profile as a distant limit.
Separated from the living room and the kitchen by a glazed skin, the English courtyard appears with a warm fireplace corner that functions as a containment space where an atmosphere of intimacy and serenity is perceived. Its limits are formed by visuals inside the house and two large staggered walls treated with different materials. To achieve this atmosphere of warmth, the flooring was made of wood (Guayaibi wood) that is accentuated together with the vegetation and seek to rekindle the connection with nature.
The successive spaces to the courtyard are the dining room, living room and the kitchen, which in the search for the transcendence of daily living, prolongs the table of black cosmic marble as a suspended bar with capacity for eight people. Finally, as a link to the distant landscape and with a purely social use, is the outdoor gallery equipped with a barbecue, a dining room, which for being outdoors is linked to the sun deck and the pool that can be accessed without entering the house. Through the gradual transition of spaces, the different entrances and the permeable filters, the house makes the spaces of intimacy and social spaces coexist in complete harmony.


WITNESS LIST Higher Education Committee April 28, 2003-2:30P HB 1761 On: Battles, Linda (Texas Higher Education Coordinating Board) HB 2744 For: Allbright, Rodney (For Alvin Community College) Against: Ray, Dr. John (Dr. Millicent Valek President, Brazosport College) HB 3209 For: Jost, Pat (Self and Concordia University) McDonald, Carol L. (Independent Colleges and Universities of Texas, Inc) Smith, Terry S. (Huston Tillotson College & TADC)


Gladia walked out onto solira land she was brought back to childhood running freeliy outside under the careful watch of robots and sometimes the happy feeling of making a new friend. the smell wasnt the same has auroa there was nearly vegation everywhere. Everyone quickly assembled and got to work they didn't manage to find the estate quick enough so they set up camp.


Control Schemes
by Peter N. Wood
Previous Step 2: The Game Loop
Next Step 4: Collisions
Last Updated: 11 Jan, 2018
by Peter N. Wood
Previous Step 2: The Game Loop
Next Step 4: Collisions
Last Updated: 11 Jan, 2018
The one key feature of a video game is interactivity. Whether it’s a visual novel, puzzle game, or open-world sandbox we need to provide the user a way to influence the game we make. Front-end web developers will be familiar with event listeners, maybe in the form of attaching a listener for a click event to a link: that’s how we’ll handle user input to our game.
A really common way to attach event listeners is to use jQuery, but that’s a big library with lots of functionality we won’t need for a video game. It’ll increase the load time for our page as well. Instead, we’ll be using raw JavaScript methods like getElementById() and addEventListener().
First, a note on browser compatibility: in older browsers (namely Internet Explorer and Safari) some properties on the various event objects we’re using won’t be available. Some browsers won’t support the Canvas API at all, and we shouldn’t bother accounting for them except to include a message like “Sorry, your browser doesn’t meet the requirements for this game”; however, it’s worth including some measure of compatibility, and I’ll discuss that in a supplemental section at the end of this tutorial. For the purposes of this step in the tutorial, we’ll assume our users are using the latest version of Chrome, Firefox, Opera, or another browser with basic Canvas support.
Let’s take a bigger step towards making Asteroids and create a player object that looks and moves like the ship from the arcade classic. We define the player object with x/y coordinates, x and y speed, a flag to indicate whether to apply acceleration in the ship’s facing direction “thrust”, a property for it’s direction in radians ( in the range 0 — Τ, otherwise known as 2π ), and radian acceleration to track whether the ship is rotating. We define the points that shape the ship and apply a rotation transform using its radians; this is all easy to do using our vector graphics rendering methods.
Just quick note on the rotation transform: we keep a fixed set of render points that represent the ship at a rotation of 0 radians, and every frame calculate where those points should be based on the ship’s current rotation. We set the points relative to the ship’s center, so we can apply a little trigonometry to rotate each point very easily: calculate sine and cosine for the ship’s rotation, each x-coordinate is playerX + ( pointX × cosine + pointY × sine ) and each y-coordinate is playerY + ( pointX × sine - pointY × cosine ).
const CANVAS_W = 800; const CANVAS_H = 450; const TAU = 2 * Math.PI; const DELTA_TIME = 5; const MAX_SPEED = 5; const TURN_SPEED = 0.05; // Render points relative to the ship's center const POINTS = [ { x: 16, y: 0 }, { x: -12, y: -9 }, { x: -8, y: 0 }, { x: -12, y: 9 } ]; var player = { x: CANVAS_W / 2, y: CANVAS_H / 2, xVel: 0, yVel: 0, thrust: false, radians: 0, radAcc: 0 }; var context = document.getElementById('canvas'); var lastTimestamp = Date.now(); function frameStep(timestamp) { // Update var now = Date.now(); accumulator += now - lastTimestamp; lastTimestamp = now; // Fill the background context.fillStyle = '#000'; context.fillRect(0, 0, CANVAS_W, CANVAS_H); // Calculate these now to save computing time var sin = Math.sin(player.radians); var cos = Math.cos(player.radians); // Apply rotation transform for each point context.beginPath(); for (var i = 0; i < 4; i++) { var pointX = POINTS[i].x * cos + POINTS[i].y * sin; var pointY = POINTS[i].x * sin - POINTS[i].y * cos; // We need to "moveTo" the first point and "lineTo" the rest. context[i === 0 ? 'moveTo' : 'lineTo'](player.x + pointX, player.y + pointY); } context.closePath(); context.lineWidth = 2; context.strokeStyle = '#FFF'; context.stroke(); if (!start) { var start = timestamp; } if (timestamp - start < 2000) { window.requestAnimationFrame(frameStep); } } window.requestAnimationFrame(frameStep);
Now that we’ve got a ship object and a way to render it, let’s start with the easiest controls to code: keyboard controls. First, we attach a keydown event listener to the document, and check a few values on the event object. We should call preventDefault() to prevent scrolling with the arrow keys and other behaviors, but still allow keyboard shortcuts (like ctrl/command + R for reloading the page); it would be really awkward to start scrolling up the page when you’re just trying to play the game. The event object provides flags for each of these modifier keys.
Let’s use arrow keys to move the ship. Note that if a key is held down, it’ll keep triggering the keydown event at a rapid pace. That’s no good, so we check the repeat flag and skip any further steps if it’s true. To move the ship, we set the ship’s thrust to true if the up arrow is pressed. For the left and right arrows, we either increment the player’s radian acceleration up by one to turn right, or down by one to turn left. Then we add a keyup event that reverses the effect of it’s associated keydown event.
This is a very simple way to ensure that neither the left or right arrow overrides the other: if they’re both pressed, they cancel out; if both are pressed and one is released, it’s as if we only pressed the other key. E.G. Press the left arrow and radAcc = -1; press the right arrow and we add 1 so radAcc = 0; release the left arrow and radAcc = 1 (as if we’re turning right); the right arrow is still held down so this feels normal and intuitive.
function handleKeydown(e) { // ctrlKey refers to control on Apple computers, ctrl on Windows // metaKey refers to command on Apple, the Windows key on Windows if (!e.altKey && !e.ctrlKey && !e.metaKey) { e.preventDefault(); } if (!e.repeat) { switch (e.key) { case 'ArrowUp' : player.thrust = true; break; case 'ArrowLeft' : player.radAcc--; break; case 'ArrowRight' : player.radAcc++; break; } } } function handleKeyup(e) { switch (e.key) { case 'ArrowUp' : player.thrust = false; break; case 'ArrowLeft' : player.radAcc++; break; case 'ArrowRight' : player.radAcc--; break; } } document.addEventListener('keydown', handleKeydown); document.addEventListener('keyup', handleKeyup);
For the update method, we need to do a few things: rotate the ship (unless the radian acceleration is 0), update the ship’s velocity if the player is applying thrust, limit the ship’s speed so it can’t keep increasing indefinitely, and move the ship to the opposite edge of the screen if it passes an edge.
To rotate the ship, we add the current radian acceleration (multiplied by our rotation speed) to the current radians. Then, we limit our radians in the range of 0 - Τ by either adding Τ if it’s less than 0, or subtracting Τ if it’s greater than Τ. Don’t clamp the value, or you’ll prevent your player from rotating left beyond 0 radians or right beyond Τ radians.
In some programming languages, a value will simply overflow if it gets too big or small: meaning, the value will loop around to the smallest or largest value it can be. In JavaScript, numbers get clamped at the maximum or minimum allowed value: Number.MAX_VALUE or Number.MIN_VALUE. You’re unlikely to encounter these types of values in our game, but if you did the ship would stop rotating in one direction. Better to just limit the range of our radians.
To update the ship’s speed, we have to use a little trigonometry and determine how much to move in the x and y directions; using the player’s radians, cosine will give us the x value, sine the y value. To make sure we don’t exceed our maximum speed, we have to calculate the combined velocity in the x and y directions; we can treat the two velocities as if they’re sides of a right triangle and calculate the hypoteneuse to get the combined speed (this value will always be a positive number).
Finally, if the player moves past one of the canvas edges, we either add or subtract the distance to the opposite edge from the player’s current position. Then the ship will appear to loop around the level. E.G. If the ship would be at x: -8, we add the canvas width so that it ends up 8 pixels to the left of the right edge of the canvas.
// Get hypoteneuse of a right triangle given the two shorter sides function getHypoteneuse(x, y) { return Math.sqrt(x * x + y * y); } // Restrict a value to a specified range function clamp(value, min, max) { return value < min ? min : value > max ? max : value; } function update() { if (player.radAcc) { var radians = player.radians + player.radAcc * TURN_SPEED; if (radians < 0) { radians += TAU; } else if (radians >= TAU) { radians -= TAU; } player.radians = radians; } // Update the player's speed in the x and y directions if (player.thrust) { var cos = Math.cos(player.radians); var sin = Math.sin(player.radians); // Calculate the combined speed of both directions; we divide by MAX_SPEED to keep from accelerating too quickly player.xVel += cos / MAX_SPEED; player.yVel += sin / MAX_SPEED; var speed = getHypoteneuse(player.xVel, player.yVel); if (speed < -MAX_SPEED || speed > MAX_SPEED) { speed = clamp(speed, -MAX_SPEED, MAX_SPEED); player.xVel = speed * cos; player.yVel = speed * sin; } } player.x += player.xVel; player.y += player.yVel; // If the player passes an edge of the canvas, move it to the opposite edge if (player.x < 0) { player.x += CANVAS_W; } else if (player.x > CANVAS_W) { player.x -= CANVAS_W; } if (player.y < 0) { player.y += CANVAS_H; } else if (player.y > CANVAS_H) { player.y -= CANVAS_H; } }
Now that our keyboard controls are complete, let’s try something more difficult: mouse and touch controls. Mouse controls aren’t too bad, but touch controls have all sorts of default behaviors built into the browser. The biggest issue for a game like this is the zoom feature, where a quick double-tap or long touch will change the zoom level on the webpage. The simplest solution, though a little extreme, is to include the following meta tag in the document head; this will totally prevent any zooming anywhere on the page, so this is only really suitable if your game is the only thing on, or primary focus of, the page.
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
Our first step is to move our logic for updating the player’s thrust and rotation to a function that doesn’t rely on a specific type of input. That way, we keep the details of every input command in one place, while each event listener is only responsible for converting its input into the appropriate command. In fact, since buttons mostly behave the same way whether they receive a mouse or touch event, we can use one callback function to handle both touch and mouse events.
We could track mouse input on the canvas element, and rotate the ship towards the cursor, but if we do the same with touch input the user’s finger will cover part of the screen, making it harder to play. We can keep things simple with some html buttons that emulate keyboard input. An easy way to do this is to wrap the buttons in an element and attach the event listener to that wrapper. We can add the desired action as a data attribute to each button, and we’re almost all set.
Touch events are tricky, because certain gestures and long presses will change the page zoom, highlight the selected element, or something else we don’t want. We need to preventDefault() for touch events, but not for mouse events: if we prevent the default action on a mouse event, the button element won’t respond to styles using the :active pseudo selector, which we should use for a good user experience.
const KEY_MAP = { 'ArrowUp' : 'up', 'ArrowLeft' : 'left', 'ArrowRight' : 'right' }; function handleInput(action, isActivated) { switch (action) { case 'up' : player.thrust = isActivated; break; case 'left' : player.radAcc += isActivated ? -1 : 1; break; case 'right' : player.radAcc += isActivated ? 1 : -1; break; } } function handleKeydown(e) { // Extra step to check whether the canvas is visible var rect = context.canvas.getBoundingClientRect(); // ctrlKey refers to control on Apple computers, ctrl on Windows // metaKey refers to command on Apple, the Windows key on Windows if (rect.top < window.innerHeight && !e.altKey && !e.ctrlKey && !e.metaKey) { e.preventDefault(); } var key = KEY_MAP[e.key]; if (!e.repeat && key) { handleInput(key, true); } } function handleKeyup(e) { var key = KEY_MAP[e.key]; if (key) { handleInput(key); } } // Track whether the mouse button is down for mouseout events var mouseDown = false; function handleButtonInput(e) { // Prevents unwanted touch event behavior if (e.type === 'touchstart') { e.preventDefault(); } e.stopPropagation(); // Ensure the mouse or touch event came from a button, is not a right click, and that the button has an "action" data attribute if (e.target.tagName === 'BUTTON' && e.button !== 2 && e.target.dataset.action) { mouseDown = e.type === 'mousedown'; // The touchstart event is the closest equivalent to mousedown among touch events var isActivated = mouseDown || e.type === 'touchstart'; handleInput(e.target.dataset.action, isActivated); } } // Our buttons' wrapping element. Events triggered by the buttons will bubble up to this element. var buttonControls = document.getElementById('button-wrapper'); buttonControls.addEventListener('mousedown', handleButtonInput); buttonControls.addEventListener('mouseup', handleButtonInput); // buttonControls.addEventListener('mouseout', handleButtonInput); function handleButtonMouseout(e) { // We only need to handleButtonInput if the mouse button was down when the mouse moved out if (e.target.tagName === 'BUTTON' && mouseDown) { mouseDown = false; handleButtonInput(e); } } buttonControls.addEventListener('mouseout', handleButtonMouseout); buttonControls.addEventListener('touchstart', handleButtonInput); buttonControls.addEventListener('touchend', handleButtonInput); function preventEverything(e) { e.preventDefault(); e.stopPropagation(); } buttonControls.addEventListener('touchmove', preventEverything); buttonControls = null;
And now we have options for keyboard, mouse, and touch controls to move our player object around the game space. Note our special mouseout callback; if the user moves the mouse away from the button we need to treat that like a mouseup event, but only if the mouse button was pressed down when leaving the button element. To do this, we track whether the mouse is currently pressed down with our own variable mouseDown.
Now that we have player input, we’re that much closer to a completed game. Next up: collision detection.
— Peter N. Wood
Previous Step 2: The Game Loop
Next Step 4: Collisions
Old versions of Safari don’t support the key property of key events, and every version of Internet Explorer from IE 9 up through the latest Edge use non-standard values (as if to intentionally make things harder). Versions of IE older than 8 won’t support the canvas anyway, so at least we can avoid that headache. Firefox, Chrome, and Opera have supported this properly for a long time, and Safari has supported it since version 10.1, but if you want to ensure your game works on as many platforms as possible, you’ll need to adapt. Here’s a more comprehensive compatibility list.
My solution makes use of an intermediary method between the key event listener and the handleInput() method I introduced in the last code sample. Instead of running the key through a Map object, we write a function to return a valid “action” value for the handleInput() method. The first step is easy: if the key property is present, we run that through our KEY_MAP. Otherwise, we can run the keyCode property through a KEYCODE_MAP first.
Building the keymap is the hard part, but even if you setup key rebinding options in your game (something I’ll cover in a later post), you aren’t going to need to include all 200 or so key codes. If it’s something as simple as the Asteroids game we’re making, you’ll only need to look up a handful keyCodes: just be sure to actually test them in IE. MDN provides a comprehensive list of keyCodes here. Here’s a compatibility keycode map that’ll work for the game we’re building in this tutorial.
const KEYCODE_MAP = { '32': 'fire', // Spacebar '38': 'up', '37': 'left', '39': 'right', '40': 'down' }


Body & Soul pulls out of Electric Picnic after 16 years
by Ciara WalshThey're also planning a new winter festival called ERIU for December 2020.
If you've been to Electric Picnic at any point over the last 16 years, you'll know that the Body and Soul area is very much the focus point of the festival for many people.
Located in the middle of the arena, Body and Soul provides a place to chill out and watch some music in a relaxed setting.
The Body and Soul area even spawned its own festival, which has run at Ballinlough House for the last decade - and now, after 10 years as a standalone event, organisers have announced that they are ending their partnership with Electric Picnic.
Founder Avril Stanley released a statement as follows: "After 10 years as an independent festival, we have decided to step back from our presence and 16-year partnership with Electric Picnic so that we can refocus all of our attention to what the central idea behind Body&Soul is all about: creating an intimate and collaborative festival of the future.
"One that can embrace social change in a hugely positive way while celebrating an important and ancient Irish festival in our own unique, stand-alone style.
"We want to work towards bringing back a fresh energy and perspective to Body&Soul at the Summer Solstice Festival in Ballinlough and for our new winter festival ERIU (Decemeber 2020)."
The statement continues: "We are adding a new sense of purpose to our festival pillars of sustainability, wellbeing, creativity, culture and family and we hope to focus all of our efforts in bringing something different to the landscape of Irish festivals into the next ten years.
"The Body&Soul family celebrates all of the incredible and unforgettable moments in our first festival home and wishes the Electric Picnic every success in the future."
It is not yet known whether Electric Picnic will replace the Body & Soul area with a similar vibe.


EROTIQUE A film review by Steve Rhodes Copyright 1995 Steve Rhodes
RATING (0 TO ****): *
EROTIQUE (not to be confused with EXOTICA which was released in the US at the same time) is three unconnected erotic short stories. They are by three different female directors who give their version of a sexual fantasy from the woman's point of view.
 The meantime between sex in this show is maybe three minutes. At the end of the review I want to discuss the demographics of the audience when I saw it. You can stop for a second and speculate now if you like before reading further.
The first segment is set in LA and is entitled "Let's Talk About Sex."  She has two problems. First, she wants to get a job as a real actress but can not get people to hire her. Second, she wants to talk to the callers her fantasy and not theirs so callers keep hanging up on her and this keeps almost getting her fired.
The director of this segment is Lizzie Borden. She also directed the excellent WORKING GIRLS (1986). WORKING GIRLS is a documentary style fictional film about prostitutes. I think it is a *** movie as it portrays a tragically sad but realistic view behind the scenes of a world few will ever see. In EROTIQUE, Borden does the only good directing job, but her segment is still pretty boring in parts. The script (Lizzie Borden and Susie Bright) has some funny dialog, but mainly is lacking any real development.
The second segment happens in Hamburg and is called "Taboo Parlor." It stars Priscilla Barnes and Camilla Soeberg as two lesbians who decide, for the sake of variety, to find a man for a one-night stand. It is written and directed very poorly by Monika Treut. Other than a funny bus scene there is little to recommend it.
The final story is entitled "Wonton Soup" and is set in a gray and dim Hong Kong. Most of the action takes place in an expensive, but spartan apartment with almost no furniture. The director is Clara Law. It has Tim Lounibos and Hayley Man as young lovers. Tim makes the mistake of trying to spice up his love life by reading one of those 101 possibilities books. The scene where he tries to practice his new book learning is the funniest scene in the entire show and the only good scene in the most boring of the three stories. The script by Eddie Ling-Ching Fong is minimalist.
The acting is pretty amateur. Kamala Lopez-Dawson was the only really polished actor. For a movie about eroticism, I was surprised to find only the love making performance by Hayley Man to have any real passion.
Now for the demographics of the audience. I saw the show at a local art house that I go to a lot. I have never noticed any particular groups in attendance. It usually has a cross section of the local community. Tonight was different.
There were a few singles of both sexes and a few couples in the 20s-40s range there. Most of the theater, however, was filled with couples and single sex groups of quite senior citizens (70+). They did not come in together as any large group nor did the groups seem to know each other. I half expected them all to leave when the title came on declaring that they went in the wrong door, but they all stayed and listened attentively. Go figure.
EROTIQUE runs a little too long at 1:30. There is no violence, drugs, drinking, or smoking.  This is heavy NC-17 material and not appropriate for teenagers period. Although I found several scenes I liked quite well, the rest of the movie was a vast wasteland to paraphrase Newton Minnow. I award the film * for the few good scenes, but do not recommend it.
**** = One of the top few films of this or any year. A must see film. *** = Excellent show. Look for it. ** = Average movie. Kind of enjoyable. * = Poor show.  Totally unbearable.
REVIEWED WRITTEN ON: April 18, 1995
Opinions expressed are mine and not meant to reflect my employer's.
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


Tristan Thompson reportedly wants Khloe Kardashian back
by Aleesha BadkarTristan Thompson isn’t giving up on getting Khloe back.
The basketball player, who is dad to one-year-old True Thompson with ex-girlfriend Khloe Kardashian, apparently wants the reality star back.
According to insiders, Tristan isn’t giving up on getting Khloe back, after the pair split earlier this year.
True’s mum and dad split back in February after going through a cheating scandal last year when Tristan was accused of cheating on the Keeping Up With The Kardashians star with younger sister Kylie Jenner’s best friend Jordyn Woods.
But according to insiders the sportsman is apparently not giving up on his ex-girlfriend.
“Tristan is always trying to win Khloe back,” a source told E! News.
“He feels guilty and knows how badly he messed up,” continued the source. “Khloe was the best thing that ever happened to him and he knows he made a lot of mistakes. He’s trying to make up for it.”
“He wants what he can’t have.”
The source revealed that to try and win Khloe back Tristan has been sending Khloe gifts and flattering her with compliments.
But apparently his attempts to get her back, aren’t working very well.
“She’s in a great place in her life where she’s focused on True and co-parenting with Tristan,” added the source. “She’s not interested in giving him another chance.
“She is glad they have come to a peaceful place and can be a family with True, but that is all.”
But it seems that despite Khloe’s efforts to move forward in life, Tristan is still working at getting her back, with the source addig, “Tristan isn’t giving up on Khloe and isn’t getting the hint. It seems like he isn’t going to give up until he gets what he wants.”


Help
- Products - Extensive overview of Oracle hardware and software products,
and summary Oracle consulting, support, and educational services.
- Blogs - Oracle blogging community (use the Hide All and Show All buttons
to collapse and expand the list of topics).
- Documentation - Landing page to start learning Java. The page contains
links to the Java tutorials, developer guides, and API documentation.
- Partners - Oracle partner solutions and programs. Popular resources and
membership opportunities.
Exit the Application


This template is successor of sequelize-pg-generator module which is used for creating sequelize models from existing PostgreSQL database.
Usage
Create template and model files:
$ pgen template sequelize -t sequelize-template
$ pgen exec sequelize-template -d our_crm -u user -p tOpSeCrEt -t model
In your application, create a sequelize object and initialize models with it:
var Sequelize = require("sequelize");
var sequelize = new Sequelize("database", "user", "password", { dialect: "postgres", logging: false });
var model = require("./model/index.js").init(sequelize); // You only need to init once. You can just require later.
model.Company.findOne({ where: { id: 1 } })
.then(function(company) {
console.log(company.name);
})
.catch(function(error) {
console.log(err.stack);
});
After you initialized your model, you shouldn't initialize it again and just require your model like below:
var model = require("./model/index.js"); // No init here, because it is initialized before.
// Your code here.
Features:
- Generated model files are as similar as possible to official Sequelize documents.
- Created files are static and transparent. They are not used to create models dynamically. So debugging and seeing what is generated is very easy for humans.
- Documented,
- Tested,
- No Dependencies on generated files,
- Multi schema support,
- One to many relation support (hasMany and belongsTo),
- Many to many relation support (belongsToMany),
- Inter-schema relation support. (i.e. public.account table to other_schema.cutomer table),
- Ultimately configurable and customizable by modifying template files,
- No configuration file to modify,
- CLI support,
- Default smart naming of models and relations,
- Very easy to override auto generated files,
- Table Specific Configuration.
Template Utility Functions
Templates have passed a variable called util
which provides some useful utilities.
type: {{ util.sequelizeType(column) }} -> type: DataTypes.INTEGER
uniqueRelatedTables(table) ⇒ Array.<pgStructure.table>
Returns an array of all tables related to this table. Duplicates are removed, so every related table in the result array is unique.
Kind: global function
Returns: Array.<pgStructure.table>
- - List of related tables.
| Param | Type | Description |
|---|---|---|
| table | pgStructure.table |
pg-structure table to search related tables for. |
sequelizeType(column) ⇒ string
Returns Sequelize ORM data type for given column.
Kind: global function
Returns: string
- - Sequelize data type.
| Param | Type | Description |
|---|---|---|
| column | pgStructure.column |
pg-structure column object. |
Example
{{ util.sequelizeType() }} // DataTypes.INTEGER(3)
{{ sequelizeType('Sequelize') }} // Sequelize.INTEGER(3)
Relations
Relations are detected automatically. One to many (hasMany), many to one (belongsTo) and many to many (belongsToMany) relations are detected automatically. If two tables are joined via a join table this module detects it automatically and generates many to many sequelize relations. If a table has more than one foreign key, then it is considered join table. In reality it may not be a join table. However it is impossible to detect that.
Special Case: hasOne
In short: hasMany
relations can be converted to hasOne
relations manually using custom-data.js
.
Details: one to one (hasOne) relations does not really bring any design benefits. In fact, it would cause performance overheads to the database engine for having to link the table rows together. The 2 tables can actually be combined into a single table. However Sequelize provides hasOne
type relations. Since there is no way to detect one to one
relations automatically, they have to be added manually by using custom data file
For example:
Suppose Company has many Contacts. To make it one to one relation, below example may be added to custom-data.js
. Please note Contact
key is singular.
Key should be singular version of hasMany
aliases.
module.exports = {
Company: {
hasOne: {
Contact: {}
}
}
};
Smart Default Naming of Aliases
This template uses table names or schema table names for model naming. For relations it uses foreign key names and relation names from your database. (You are naming your relations in database meaningfully right?) Default template is based on camelCase naming. You can easily change it to use snake_case or PascalCase by using provided filters. Naming conventions are based on Sequelize module suggestions and generated explicitly with 'as' parameter. Aliases can be turned of by providing a custom options file and setting generateAliases
false.
module.exports = { generateAliases: false };
| Type of Object | Filters | Default Naming & Alias Rule |
|---|---|---|
| table | classCase | Table name. |
| hasMany | plural, classCase, stripPrefix(source) | Relation name in database. Table name stripped from beginning. |
| belongsTo | singular, classCase, relationName | Foreign key column name. If name ends with 'id' or '_id' it will be stripped. Otherwise 'related' is added at the beginning to prevent it from clashing with column name. |
| belongsToMany | plural, classCase, relationName('') | Join table name + foreign key in join table which refers to other table. If name ends with 'id' or '_id' it will be stripped. |
As an example for the schema above aliases are created as follows. Please note names of foreign keys in cart_line_item table: product_id and cart. To demonstrate different naming rules 'productid' contains _id suffix while 'cart' not.
| Relation | As | Why |
|---|---|---|
| Product.hasMany | CartLineItems | |
| Product.belongsToMany | CartLineItemCarts | cart_line_item + cart + s: Plural of join table name + foreign key column in join table referring to other table. '_id' suffix is stripped from column name. |
| Cart.belongsToMany | CartLineItemProducts | cart_line_item + product |
| Cart.hasMany | CartLineItems | |
| CartLineItem.belongsTo | RelatedCart | Related + cart: Singular of foreign key column prefixed with 'Related'. Otherwise 'Cart' relation and 'cart' column collide in same casing (camelCase, ClassCase etc.) |
| CartLineItem.belongsTo | Product | product |
FAQ
I have multiple schema with same table names in them. How can I prevent collision of my model names?
In your template;
- Rename 'sequelize/table/definition/{table.name}.js.nunj.html' as 'sequelize/table/definition/{table.schema.name}-{table.name}.js.nunj.html'.
- Change modelName macro in 'sequelize/table/definition/{table.schema.name}-{table.name}.js.nunj.html' as
{{ (table.schema.name + table.name) | classCase }}
. - Add '{table.schema.name}-' string to 'sequelize.import' and 'require' parts in 'sequelize/db/index.js.nunj.html' file to match new model file's names.
I hate aliases that sequelize template generate. What can I do?
You have three choices. You either do:
- Disable aliases all together by creating a file named
option.js
(you can use any name) with content as below:
module.exports = {
generateAliases: false // This disables aliases all together. See partials/has-many-nunj.html and other relation templates.
};
Feed that file to pgen
$ pgen exec sequelize-template -d our_crm -u user -p tOpSeCrEt -t model --optionsfile options.js
- Or use custom aliases for some or all models by creating a file name
custom-data.js
(you can use any name) with similar content as below:
You can see original and overridden aliases in generated file 'relation-cheatsheet.txt'.
Account: {
hasMany: {
HasContacts: { // This is the default alias should have generated by pgen.
as: "'MyBeautifulAlias'" // This is the alias you want. You renamed 'HasContacts' as 'MyBeautifulAlias'
}
},
- Or change alias naming for all tables by changing has-many.nunj.html, belongs-to.nunj.html, belongs-to-many.nunj.html in partials directory of generated sequelize template.
*.nunj.html file extension is ugly.
This is not a question. nunj.html extension is chosen because nunjucks command line tools expect files with extension html. However some IDE's struggle to auto complete/help/color nunjucks, swig, twig, jinja files with html extension. We can define .nunj.html extension in IDE's to differentiate template files (.nunj.html) and html (.html) files correctly and make nunjucks command line tools happy.
However if you really like to use another file extension in your templates create template filw tih your desired extension and use --extension
option of pgen
$ pgen exec sequelize-template -d our_crm -u user -p tOpSeCrEt -t model --extension html


| Steps | Description | Status | Action |
|---|---|---|---|
| Asset Clustering | First step of the process that aims at describing the company domain in terms of owned assets. In other terms this phase responds to the question "What do I own?” |
|
|
| Identify Threat Agents | Aims at identifying who may be interested in performing the attack against the company and why, using as a base what emerged from asset clustering. This phase responds to the questions: “Who would attack my company?” and “Why somebody should attack my company?” |
|
|
| Assess Vulnerablities | Measures the weak points of company surface through self-assessment (cyber maturity questionnaire). It responds to the question: “Which are the weaknesses of my company?” |
|
|
| Impact Evaluation | Measuring the impact; "Measuring the impact of cyberattacks on firms' intangible assets" |
|
|
|
Estimation of the Attack Related Costs
|
Estimate the attack related costs; "Communicate or evaluate the costs of the declared attack costs" WARNING! No Attack Cost identified or no one estimated! WARNING! Some attack related costs have not been valorized. |
|
|
| Risk Evaluation | Manage your risk based on cost benefit analisys. The general approach includes both qualitative and quantitative metodologies based on risk definition (ISO31000) and risk management (ISO31010). |
|
Editing such step may influence the entire assessment.
If you want to proceed, just click on "OK" and edit your preferences, otherwise, you can just proceed in "view" mode whitout make any changes.
Do you want to proceed?


--- layout: post permalink: mckenziebooks.html Tags: Array NameOfCoupon: McKenzie Books Cash Back Summary: See our McKenzie Books Coupon Code, McKenzie Books Rebate, McKenzie Books Promo Code, McKenzie Books Discount, McKenzie Books Coupon Cash Back Rebate here. MetaKeywords: McKenzie Books Coupon Code, McKenzie Books Rebate, McKenzie Books Promo Code, McKenzie Books Cash Back Rebate, McKenzie Books Discount, McKenzie Books Coupon Image: images/26830.jpg LinkURL: http://www.shareasale.com/r.cfm?b=224538&u=412002&m=26830 affiliate_url_link: http://www.icouponblog.com/jane.php?id=353 thesis_readmore: See the McKenzie Books Coupon thesis_thumb: http://www.icouponblog.com/tn.php?merchantURL=mckenziebooks.com Title: Save 5% - McKenzie Books Coupon Code for mckenziebooks.com. McKenzie Books Rebate & Discount thesis_description: Our McKenzie Books Discount Coupon Code for mckenziebooks.com. We have the best McKenzie Books Rebate anywhere. thesis_keywords: McKenzie Books, McKenzie Books Coupon Code, McKenzie Books Discount, McKenzie Books Rebate product_name: McKenzie Books hop_url: http://www.icouponblog.com/hop.php?id=353 ---
If you are looking for quality used books at an affordable, low price. visit www.mckenziebooks.com. It is a website that receives over 500,000 used books every year on every subject from medicine to law, literature, fiction, math, science, entertainment, home and garden, children’s books, classroom classics, professional and technical and much more. All books are individually inspected page by page and a comment is made about the book, so that you know exactly what condition you are buying the books in. Check it out on www.mckenziebooks.com. They have 99% positive response from customers on Amazon. Use our discount coupons to save money.
If you are a student or a person who does not want to spend an arm and a leg in buying books you will love www.mckenziebooks.com. You can get quality books on a wide variety of subjects. Whether it is a school book or a mystery novel, a biography or a self help book, you will find them all on www.mckenziebooks.com. All books are individually inspected and a report is written about its condition. So you know what you are paying for. Get the book you need fast and furious. It is easy to buy or sell online. Check out www.mckenziebooks.com today and start buying!
There are many websites selling books, but www.mckenziebooks.com is the place to be if you want high quality books at low, low prices. All books are in great condition and cost a fraction of the price of a new book. www.mckenziebooks.com buys and sells over 500,000 books per year. Get a deal today!


Open
Manage
Slots
Subjects
Teachers
Classes
Help
LECTURE SCHEDULER
{% block content %} {% endblock %}


Let $\mathcal{A}$ be age of a relational structure. Then the number of countable structures with age $\mathcal{A}$, up to bi-embeddability, is either $1$, $\aleph_0$, $\aleph_1$, or $2^{\aleph_0}$.