sweetpea.constraints module
This module provides constraints for CNF generation.
- sweetpea.constraints.validate_factor_and_level(block, factor, level)
- Parameters
block (Block) –
factor (Factor) –
level (Union[SimpleLevel, DerivedLevel]) –
- Return type
None
- class sweetpea.constraints.Consistency
Bases:
Constraint
This constraint ensures that only one level of each factor is ‘on’ at a time. So for instance in the experiment:
color = Factor("color", ["red", "blue"]) text = Factor("text", ["red", "blue"]) design = crossing = [color, text, conFactor] experiment = fully_cross_block(design, crossing, [])
The first trial is represented by the boolean vars
[1, 2, 3, 4]
:1 is true iff the trial is color:red
2 is true iff the trial is color:blue
3 is true iff the trial is text:red
4 is true iff the trial is text:blue
The second trial is represented by the boolean vars
[5-8]
, the third by[9-12]
, the fourth by[13-16]
. So this desugaring applies the following constraints:sum(1, 2) EQ 1 sum(3, 4) EQ 1 sum(5, 6) EQ 1 ... sum(15, 16) EQ 1
- validate(block)
Constraints can’t be completely validated in isolation. This function will be called on all constraints with the block during the block initialization to ensure all constraints are valid.
- Parameters
block (Block) –
- Return type
None
- static apply(block, backend_request)
- Parameters
block (Block) –
backend_request (BackendRequest) –
- Return type
None
- class sweetpea.constraints.FullyCross
Bases:
Constraint
We represent the fully crossed constraint by allocating additional boolean variables to represent each unique state. Only factors in crossing will contribute to the number of states (there may be factors in the design that aren’t in the crossing).
Continuing with the example from
Consistency
, we will represent the states:(color:red, text:red) (color:red, text:blue) (color:blue, text:red) (color:blue, text:blue)
The steps taken are:
Generate intermediate vars
Using the fresh var counter, allocate
numTrials * num_states
new varsEntangle them with block vars
Add to the CNF queue:
toCNF(Iff(newVar, And(levels)))
, e.g., if the variable1
indicatescolor:red
, the var3
indicatestext:red
, and the var25
represents(color:red, text:red)
, dotoCNF(Iff(25, And([1, 3])))
1 hot the states e.g., 1 red circle, etc
Same as
Consistency
above, collect all the state vars that represent each state & enforce that only one of those states is true, e.g.,sum(25, 29, 33, 37) EQ 1
(and 3 more of these for each of the other states).
- validate(block)
Constraints can’t be completely validated in isolation. This function will be called on all constraints with the block during the block initialization to ensure all constraints are valid.
- Parameters
block (Block) –
- Return type
None
- static apply(block, backend_request)
- Parameters
block (FullyCrossBlock) –
backend_request (BackendRequest) –
- Return type
None
- class sweetpea.constraints.MultipleCross
Bases:
Constraint
- validate(block)
Constraints can’t be completely validated in isolation. This function will be called on all constraints with the block during the block initialization to ensure all constraints are valid.
- Parameters
block (Block) –
- Return type
None
- static apply(block, backend_request)
- Parameters
block (MultipleCrossBlock) –
backend_request (BackendRequest) –
- Return type
None
- class sweetpea.constraints.Derivation(derived_idx, dependent_idxs, factor)
Bases:
Constraint
A derivation such as:
Derivation(4, [[0, 2], [1, 3]])
where the index of the derived level is
4
, and[[0, 2], [1, 3]]
is the list of dependent indices, represents the logical formula:4 iff (0 and 2) or (1 and 3)
These indicies are used the get the corresponding trial variables. Continuing from the example in of processDerivations, the first trial is represented by variables
[1-6]
(notice this feels like an off-by-one: the indicies start from0
, but the boolean variables start from1
). So we would use the indices to map onto the vars as:5 iff (1 and 3) or (2 and 4)
Then we convert to CNF directly, i.e.:
toCNF(Iff(5, Or(And(1,3), And(2,4))))
This is then done for all window-sizes, taking into account strides (which are specified only in
DerivedLevels
specified with a generalWindow
rather thanTransition
orWithinTrial
). We grab window-sized chunks of the variables that represent the trials, map the variables using the indices, and then convert to CNF. These chunks look like:window1: 1 2 3 4 5 6 window2: 7 8 9 10 11 12
So, for the second trial (since the window size in this example is
1
) it would be:11 iff (7 and 9) or (8 and 10)
90% sure this is the correct way to generalize to derivations involving 2+ levels & various windowsizes. One test is the experiment:
color = ["r", "b", "g"]; text = ["r", "b"]; conFactor; fullycross(color, text) + AtMostKInARow 1 conLevel
- Parameters
derived_idx (int) –
factor (DerivedFactor) –
- validate(block)
Constraints can’t be completely validated in isolation. This function will be called on all constraints with the block during the block initialization to ensure all constraints are valid.
- Parameters
block (Block) –
- Return type
None
- apply(block, backend_request)
- Parameters
block (Block) –
backend_request (BackendRequest) –
- Return type
None
- sweetpea.constraints.at_most_k_in_a_row(k, levels)
This desugars pretty directly into the llrequests. The only thing to do here is to collect all the boolean vars that match the same level & pair them up according to k.
Continuing with the example from
Consistency
, say we wantAtMostKInARow 1 ("color", "red")
, then we need to grab all the vars which indicate color-red:[1, 7, 13, 19]
and then wrap them up so that we’re making requests like:
sum(1, 7) LT 2 sum(7, 13) LT 2 sum(13, 19) LT 2
If it had been
AtMostKInARow 2 ("color", "red")
, the reqs would have been:sum(1, 7, 13) LT 3 sum(7, 13, 19) LT 3
- class sweetpea.constraints.AtMostKInARow(k, level)
Bases:
_KInARow
- Parameters
level (Tuple[Factor, Union[SimpleLevel, DerivedLevel]]) –
- apply_to_backend_request(block, level, backend_request)
- Parameters
block (Block) –
level (Tuple[Factor, Union[SimpleLevel, DerivedLevel]]) –
backend_request (BackendRequest) –
- Return type
None
- sweetpea.constraints.at_least_k_in_a_row(k, levels)
This is more complicated that AtMostKInARow. We collect all the boolean vars that match the same level & pair them up according to k.
We want
AtLeastKInARow 2 ("color", "red")
, then we need to grab all the vars which indicate color-red:[1, 7, 13, 19]
and then wrap them up in CNF as follows:
If(1) Then (7) --------This is a corner case If(And(!1, 7)) Then (13) If(And(!7, 13)) Then (19) If(19) Then (13) --------This is a corner case
If it had been
AtLeastKInARow 3 ("color", "red")
, the CNF would have been:If(1) Then (7, 13) --------This is a corner case If(And(!1, 7)) Then (13, 19) If(19) Then (7, 13) --------This is a corner case
- class sweetpea.constraints.AtLeastKInARow(k, levels)
Bases:
_KInARow
- apply_to_backend_request(block, level, backend_request)
- Parameters
block (Block) –
level (Tuple[Factor, Union[SimpleLevel, DerivedLevel]]) –
backend_request (BackendRequest) –
- Return type
None
- sweetpea.constraints.exactly_k(k, levels)
Requires that if the given level exists at all, it must exist in a trial exactly
k
times.
- class sweetpea.constraints.ExactlyK(k, level)
Bases:
_KInARow
- Parameters
level (Tuple[Factor, Union[SimpleLevel, DerivedLevel]]) –
- apply_to_backend_request(block, level, backend_request)
- Parameters
block (Block) –
level (Tuple[Factor, Union[SimpleLevel, DerivedLevel]]) –
backend_request (BackendRequest) –
- Return type
None
- sweetpea.constraints.exactly_k_in_a_row(k, levels)
Requires that if the given level exists at all, it must exist in a sequence of exactly K.
- class sweetpea.constraints.ExactlyKInARow(k, level)
Bases:
_KInARow
- Parameters
level (Tuple[Factor, Union[SimpleLevel, DerivedLevel]]) –
- apply_to_backend_request(block, level, backend_request)
- Parameters
block (Block) –
level (Tuple[Factor, Union[SimpleLevel, DerivedLevel]]) –
backend_request (BackendRequest) –
- Return type
None
- sweetpea.constraints.exclude(factor, levels)
- class sweetpea.constraints.Exclude(factor, level)
Bases:
Constraint
- validate(block)
Constraints can’t be completely validated in isolation. This function will be called on all constraints with the block during the block initialization to ensure all constraints are valid.
- Parameters
block (Block) –
- Return type
None
- extract_simplelevel(block, level)
Recursively deciphers the excluded level to a list of combinations basic levels.
- Parameters
block (Block) –
level (DerivedLevel) –
- Return type
- apply(block, backend_request)
- Parameters
block (Block) –
backend_request (BackendRequest) –
- Return type
None
- sweetpea.constraints.minimum_trials(trials)
- class sweetpea.constraints.MinimumTrials(trials)
Bases:
Constraint
- validate(block)
Constraints can’t be completely validated in isolation. This function will be called on all constraints with the block during the block initialization to ensure all constraints are valid.
- Parameters
block (Block) –
- Return type
None
- apply(block, backend_request)
- Parameters
block (Block) –
backend_request (BackendRequest) –
- Return type
None


The Second Epistle of John
1
1 The elder to the elect lady and her children, whom I love in truth, and not I only, but also all those who have known the truth,
2 because of the truth that remains in us and will be with us forever.
3 Grace, mercy, peace will be with us, from God the Father and from Jesus Christ, the Son of the Father, in truth and love.
4 I rejoice greatly that I have found some of your children walking in truth, just as we have received this commandment from the Father.
5 And now I plead with you, lady, not as though I wrote to you a new commandment, but that which we have had from the beginning, that we should love one another.
6 And this is love, that we should walk according to his commandments. This is the commandment, even as you heard from the beginning, that you should walk in it.
7 For many deceivers have gone out into the world, those who do not confess that Jesus Christ came in the flesh. This is the deceiver and the antichrist.
8 Look to yourselves, that you do not lose the things for which we all have worked, but that you may receive a full reward.
9 Whoever goes on ahead and does not remain in the teaching of Christ, does not have God. He who remains in the teaching has both the Father and the Son.
10 If anyone comes to you and does not bring this teaching, do not receive him into your house and do not greet him.
11 For he who greets him participates in his evil deeds.
12 I have many things to write to you and I did not wish to write them with paper and ink. But I hope to come to you and to speak face to face, that our joy may be made full.
13 The children of your chosen sister greet you.


Iraq Closes Southern Border With Iran at Tehran's Request - Reports
The news comes amid protests over rising fuel prices in Iranian cities and months-long demonstrations in Iraq.
Tehran requested the closure of the Shalamcheh border crossing to those travelling between the two countries, citing security concerns, Reuters reported on Saturday. According to the agency's sources, the move won't affect goods or trade between the two nations.
The situation in the Islamic Republic remains tense, with one person having been killed in the city of Sirjan after protesters tried to set a local oil storage facility on fire. People are also holding mass rallies in Mashhad, Shiraz, Ahvaz, and several other cities.
In the meantime, Iraq has been rocked by mass protests that resurged last month. So far, over 250 people have been killed in the clashes this year, with at least six dead in the last two weeks alone. Iraqi have authorities blocked numerous messengers and social networks, as well as introduced a curfew to tackle the crisis.
People are protesting against deteriorating social services, corruption, and an economic crisis, calling for the resignation of the government.


1. Select a Moon Box.
We offer boxes for every ages.
2. Delivered Monthly. Choose your plan.
Pause or cancel anytime.
3. Space Fun!
Our Mook Boxes inspire kids to explore and learn about the universe.
We offer boxes for every ages.
Pause or cancel anytime.
Our Mook Boxes inspire kids to explore and learn about the universe.


My name is Kingsley Chukwuemeka Nzekwe, I am 25 years old and currently a citizen of Nigeria. I moved to the United States at the age of 15 with the goals of furthering my academic and athletic dreams. I attened New Garden Friends School in Greensboro North Carolina, undergraduate education at Gettysburg College Pensylvannia, and currently in the masters Align program here at Northeasrern University.
Nigeria is a country located in West Africa. It is the most populous country in Africa comprising of 36 states and a nations capital called Abuja. The three largest ethnic groups are the Hausa-Fulani in the north, Yoruba in the west and the Igbo in the east. Each ethnic group is associated with a specific religion and being a part of the Igbo ethnic group, I was raised Christian like evryone else who identify as Igbo.
The Past is History. The Present is a mystery. The Future makes it all worth it
I grew up in an athletic environment and spent most of my day either on a basketball court or a soccer field. Although I do not play competitively anymore, I would consider both sport activities part of my hobbies. I also love to travel, dance, watch movies, listen to music.
spending quality time with friends and family has always been the creator of most of my best memories. This is why Christmas is my favorite holiday where I get to catch up with family and friends living in different locations around the country.
A major goal of mine in life is to create something unique and meaningful with a global, positive impact on the world's most vulnerable populations.


Overview
This class introduces you to the features and architecture of Xamarin.Forms, a cross-platform UI toolkit for iOS, Android, and Windows. We will cover app creation, the layout model, basic navigation, and how to use platform-specific features.
Before you begin
This is a Xamarin.Forms class. To complete the coding exercises, you will need a Xamarin development environment with either an emulator or a physical device. Please read the setup requirements if you need help installing the Xamarin development environment.
Lecture
XAM120 - Introduction to Xamarin.Forms.
Objectives
- What is Xamarin.Forms?
- Pages, Controls, and Layout
- Using Platform-Specific Features
Exercises
-
Creating our first Xamarin.Forms applicationExercise
Create a Xamarin.Forms application using the built-in project templates and explore the solution structure. -
Creating Xamarin.Forms PhonewordExercise
Create a Xamarin.Forms application that translates an alphanumeric string to a standard numeric telephone number. -
Adding support for dialing the phoneExercise
Extend your Phoneword application to add support to dial the phone and display an alert view cross-platform.
Here are the Frequently Asked Questions.


12
1 After Rehoboam had obtained complete control of his kingdom, he and all the other people in Judah stopped obeying the laws of Yahweh.
2 As a result, after Rehoboam had been king for almost five years, Yahweh sent Shishak, the king of Egypt, with his army to attack Jerusalem.
3 He brought with his army twelve hundred chariots and sixty thousand soldiers who rode horses and a very large number of troops from two regions in Libya, and from Ethiopia.
4 They captured many of the cities in Judah that had walls around them, and they came as far as Jerusalem.
5 Then the prophet Shemaiah came to Rehoboam and the other leaders of Judah who had gathered in Jerusalem because they were afraid of the army of Shishak. Shemaiah said to them, "Yahweh says this: 'You have abandoned me; so now I am abandoning you, to allow you to be captured by the army of Shishak.'~"
6 Then the king and the other Israelite leaders humbled themselves and said, "What Yahweh is doing to us is just."
7 When Yahweh realized that they had humbled themselves, he gave this message to Shemaiah: "Because they have humbled themselves, I will not allow them to be destroyed. Instead, I will soon rescue them. I will not use Shishak's army to completely destroy the people of Jerusalem,
8 but they will conquer Jerusalem and force the people there to do what Shishak wants them to do. As a result, the people of Jerusalem will learn that it is better to serve me than to serve the kings of other countries."
9 When Shishak's army attacked Jerusalem, they took away the valuable things that were in the temple of Yahweh and in the king's palace. They took everything that was valuable, including the gold shields that Solomon's workers had made.
10 So King Rehoboam's workers made bronze shields to be used instead of the gold ones, and gave the bronze shields to the commanders of the men who guarded the entrance to the his palace.
11 After that, whenever the king went to the temple, the guards went with him, carrying those bronze shields. Then when the king left, they would return the shields to the guards' room.
12 Because Rehoboam humbled himself, Yahweh stopped being angry with him, and did not get rid of him. Instead, he caused good things to happen in Judah.
13 King Rehoboam again obtained complete control in Jerusalem, and continued to be the king of Judah. He was forty-one years old when he became the king. He ruled for seventeen years in Jerusalem, which is the city that Yahweh had chosen from all the tribes in Israel to be the place in which people were to worship him.
14 Rehoboam's mother's name was Naamah. She was from the Ammon people group. Rehoboam did evil things because he did not try to find out what Yahweh wanted him to do.
15 An account of all the things that Rehoboam did while he was the king, and lists of the members of his family, are in the scrolls written by the prophets Shemaiah and Iddo. The armies of Rehoboam and Jeroboam were constantly fighting each other.
16 When Rehoboam died, he was buried in the part of Jerusalem called the city of David. Then his son Abijah became the king.


This module’s static methods are the entry point for using the REST client.
# GET xml = RestClient.get 'http://example.com/resource' jpg = RestClient.get 'http://example.com/resource', :accept => 'image/jpg' # authentication and SSL RestClient.get<EMAIL_ADDRESS># POST or PUT with a hash sends parameters as a urlencoded form body RestClient.post 'http://example.com/resource', :param1 => 'one' # nest hash parameters RestClient.post 'http://example.com/resource', :nested => { :param1 => 'one' } # POST and PUT with raw payloads RestClient.post 'http://example.com/resource', 'the post body', :content_type => 'text/plain' RestClient.post 'http://example.com/resource.xml', xml_doc RestClient.put 'http://example.com/resource.pdf', File.read('my.pdf'), :content_type => 'application/pdf' # DELETE RestClient.delete 'http://example.com/resource' # retreive the response http code and headers res = RestClient.get 'http://example.com/some.jpg' res.code # => 200 res.headers[:content_type] # => 'image/jpg' # HEAD RestClient.head('http://example.com').headers
To use with a proxy, just set RestClient.proxy to the proper http proxy:
RestClient.proxy = "http://proxy.example.com/"
Or inherit the proxy from the environment:
RestClient.proxy = ENV['http_proxy']
For live tests of RestClient, try using rest-test.heroku.com, which echoes back information about the rest call:
>> RestClient.put 'http://rest-test.heroku.com/resource', :foo => 'baz' => "PUT http://rest-test.heroku.com/resource with a 7 byte payload, content type application/x-www-form-urlencoded {\"foo\"=>\"baz\"}"
Add a Proc to be called before each request in executed. The proc parameters will be the http request and the request params.
# File lib/restclient.rb, line 161 def self.add_before_execution_proc &proc @@before_execution_procs << proc end
Create a log that respond to << like a logger param can be ‘stdout’, ‘stderr’, a string (then we will log to that file) or a logger (then we return it)
# File lib/restclient.rb, line 114 def self.create_log param if param if param.is_a? String if param == 'stdout' stdout_logger = Class.new do def << obj STDOUT.puts obj end end stdout_logger.new elsif param == 'stderr' stderr_logger = Class.new do def << obj STDERR.puts obj end end stderr_logger.new else file_logger = Class.new do attr_writer :target_file def << obj File.open(@target_file, 'a') { |f| f.puts obj } end end logger = file_logger.new logger.target_file = param logger end else param end end end
# File lib/restclient.rb, line 83 def self.delete(url, headers={}, &block) Request.execute(:method => :delete, :url => url, :headers => headers, &block) end
# File lib/restclient.rb, line 67 def self.get(url, headers={}, &block) Request.execute(:method => :get, :url => url, :headers => headers, &block) end
# File lib/restclient.rb, line 87 def self.head(url, headers={}, &block) Request.execute(:method => :head, :url => url, :headers => headers, &block) end
Setup the log for RestClient calls. Value should be a logger but can can be stdout, stderr, or a filename. You can also configure logging by the environment variable RESTCLIENT_LOG.
# File lib/restclient.rb, line 102 def self.log= log @@log = create_log log end
# File lib/restclient.rb, line 91 def self.options(url, headers={}, &block) Request.execute(:method => :options, :url => url, :headers => headers, &block) end
# File lib/restclient.rb, line 75 def self.patch(url, payload, headers={}, &block) Request.execute(:method => :patch, :url => url, :payload => payload, :headers => headers, &block) end
# File lib/restclient.rb, line 71 def self.post(url, payload, headers={}, &block) Request.execute(:method => :post, :url => url, :payload => payload, :headers => headers, &block) end
# File lib/restclient.rb, line 79 def self.put(url, payload, headers={}, &block) Request.execute(:method => :put, :url => url, :payload => payload, :headers => headers, &block) end
Generated with the Darkfish Rdoc Generator 2.


| 014:046 Khan | : |
Indeed, they planned their plot, and their plot was with Allah, though their plot was a great (one, still) it would never be able to remove the mountains (real mountains or the Islamic law) from their places (as it is of no importance). [It is said by some interpreters regarding this Verse that the Quraish pagans plotted against Prophet Muhammad SAW to kill him but they failed and were unable to carry out their plot which they plotted]. |
| 014:046 Maulana | : |
And they had indeed planned their plan, and their plan is with Allah, though their plan is such that the mountains should be moved thereby. |
| 014:046 Pickthal | : |
Verily they have plotted their plot, and their plot is with Allah, though their plot were one whereby the mountains should be moved. |
| 014:046 Rashad | : |
They schemed their schemes, and GOD is fully aware of their schemes. Indeed, their schemes were sufficient to erase mountains. |
| 014:046 Sarwar | : |
They devised evil plans which were so sinful that even the mountains could not endure them. All these were known to God. |
| 014:046 Shakir | : |
And they have indeed planned their plan, but their plan is with Allah, though their plan was such that the mountains should pass away thereby. |
| 014:046 Sherali | : |
And they have tried all their designs; but their designs are with ALLAH. And even though their designs be such as to make the mountains move, they will not succeed. |
| 014:046 Yusufali | : |
Mighty indeed were the plots which they made, but their plots were (well) within the sight of Allah, even though they were such as to shake the hills! |
Concepts/Themes Covered: أركان الإسلام > التوحيد > الكافرون > جزاء مكر الكفار Pillars of Islam> Islamic> The Disbelievers> The Penalty of the Disbelievers Cunning الإنسان والعلاقات الأخلاقية > الأخلاق الذميمة > المكر Man and The Moral Relations>The Dispraised Morals>Cunning
This tool uses eight English parallel translations for the Holy Quran imported from Mr. Clay Smith. You can also visit Qurany Concepts for browsing the Quran themes or topics. If you want to search the Holy Quran for keywords, please visit Qurany Keywords.


No Products yet, why don't you create one?
You will now be redirected to our affiliate partner's website. Click 'Confirm' to continue or 'Cancel' to go back.


WAITING TO EXHALE A film review by James Berardinelli Copyright 1995 James Berardinelli
RATING (0 TO 10): 5.6
United States, 1995 U.S. Availability: 12/22/95 (wide) Running Length: 2:04 MPAA Classification: R (Sexual situations, profanity, mature themes) Theatrical Aspect Ratio: 2.35:1
Cast: Angela Bassett, Whitney Houston, Lela Rochon, Loretta Devine, Gregory Hines, Leon, Dennis Haysbert, Michael Beach, Wesley Snipes Director: Forest Whitaker Producers: Ezra Swerdlow and Deborah Schindler Screenplay: Terry McMillan and Ronald Bass based on the novel by Terry McMillan Cinematography: Toyomichi Kurita Music: Kenneth "Babyface" Edmonds U.S. Distributor: 20th Century Fox
The first thing to note about WAITING TO EXHALE, Forest Whitaker's theatrical feature debut as a director, is that it will likely be a huge success with its target audience. Many black women will see themselves in this motion picture, and, subconsciously using their personal background to fill in gaps left by the screenplay, they will declare this film a triumph. I wish I could be as positive with my opinion, but I found WAITING TO EXHALE to be seriously flawed -- a string of connected vignettes that propel the four main characters along easily predicted character arcs.
Of the quartet of stories, Bernadine's is the most compelling. It's no coincidence that this character is played by Angela Bassett, the best actress in the cast. Bernadine has been dumped by her husband of eleven years (Michael Beach), a rather slimy fellow who has left her with their two children so he can move in with his white mistress. Needless to say, Bernadine doesn't react well to this news and her response -- torching his car with all his possessions in it -- will almost certainly garner loud cheers from women in the audience.
Although not as interesting as Bernadine, Loretta Devine's Gloria offers some worthwhile moments.  Fortunately for her, a handsome new neighbor (Gregory Hines) moves in, and he seems to have all the answers.
WAITING TO EXHALE's other two characters -- Savannah (Whitney Houston) and Robin (Lela Rochon) -- are basically separate aspects of the same personality. Both are stuck in bad relationships that they are unable or unwilling to escape from. Neither of these stories is of more than passing interest, and the movie slows to a crawl when Houston or Rochon takes center stage.
Whitaker's direction, like the tone, is uneven. Some of the switches from comedy to drama are forced and abrupt. That said, however, WAITING TO EXHALE contains a fair number of genuinely humorous sequences, many of which make pointed comments about male insensitivity. There are also several memorable serious scenes, the best of which team Angela Bassett with Wesley Snipes. Not only does this pair sizzle, but the dialogue is intelligently-written and the performances are on- target.
The most significant fault in WAITING TO EXHALE is its character presentation. With the exception of Bernadine, I never felt anything for the women populating this film, as they failed to capture my interest or sympathy. Part of this can be attributed to bland performances by Houston and Rochon, but the script must bear an equal share of the burden.
No doubt about it -- this is a "women's movie" (or, as it's alternatively referred to, a "chick flick"), but it's among the year's weakest. HOW TO MAKE AN AMERICAN QUILT and MOONLIGHT AND VALENTINO covered comparable ground earlier in 1995, and there are similarities between WAITING TO EXHALE and THE JOY LUCK CLUB (especially since co- writer Ronald Bass was involved in the book-to-screen transition of Amy Tan's novel). Of all those films, however, this one has the most artificial and disjointed "feel". Personally, I don't buy the "male bashing" accusation that has been leveled at WAITING TO EXHALE. The treatment of men in the movie seems fine, and there are other problems more worthy of attention. Given the dearth of significant roles for black women in motion pictures, it's refreshing to see these four bonding on the big screen -- and that's almost reason enough for this film to have been made. Nevertheless, it's difficult to deny that another layer of substance is needed to lift the movie about this superficial level of melodrama.
- James Berardinelli<EMAIL_ADDRESS>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


This page tracks the new paper links made to my list of HPG 2017 papers.
Page maintained by Ke-Sen Huang.
If you have additions or changes, send an e-mail.
November 28, 2017
- A Hardware-Friendly Bilateral Solver Accelerator for Real-Time Virtual Reality Video
July 28, 2017
- Dual Streaming for Hardware-Accelerated Ray Tracing
- Timeline Scheduling for Out-of-Core Ray Batching
- Extended Morton Codes for High Performance Bounding Volume Hierarchy Construction
July 27, 2017
- Vectorized Production Path Tracing
July 16, 2017
- Non-Linearly Quantized Moment Shadow Maps
- STBVH: A Spatial-Temporal BVH for Efficient Multi-Segment Motion Blur
- Improved Two-Level BVHs Using Partial Re-Braiding
- Accelerated Single Ray Tracing for Wide Vector Units
- Spatiotemporal Variance-Guided Filtering: Real-Time Reconstruction for Path-Traced Global Illumination
June 28, 2017
- Exploiting Budan-Fourier and Vincent¡¦s Theorems for Ray Tracing 3D Bezier Curves
June 24, 2017
- Interactive Stable Ray Tracing
- Spatiotemporal Variance-Guided Filtering: Real-Time Reconstruction for Path-Traced Global Illumination
- Mesh Color Textures
- A Hardware-Friendly Bilateral Solver Accelerator for Real-Time Virtual Reality Video
- Efficient Incoherent Ray Traversal on GPUs Through Compressed Wide BVHs
- Page Created
kesen.huang@gmail.com


PAINTINGS GALLERY
Lanterns at Kasuga Shrine in Nara Japan
These laterns are a unique feature of the shrine located at Nara.
Ballet Dancer
My first painting attempt at ballet dancers. It was difficult
getting the stretch of the neck and the hands right.
Women in Rajasthan - Steve McCurry reproduction
I loved the color of the women's dresses against the vanilla
backdrop in his photographs. So inspired that I wanted to paint it!
Lady with a fan - Klimt Reproduction
I have always been mesemerized by Klimts painting's. I can stare at
the Japanese motifs and intricate designs for hours at length.
Statue in Rome
My trial at painting a statue. Trying to use a single color to
generate various tones and shadows.
Girl in a bus
This is a painting reproduction of Steve McCurry's original
photograph during his trip to Bangladesh
Bayon Cambodia
The majestic Bayon temples were built by Kings for themselves, so
that their subjects could workship them long after they are gone.


Emmerdale villain Al Chapman's dangerous secret exposed ahead of Ellis return
Emmerdale viewers saw Al Chapman exposed, as Dawn Taylor uncovered his huge secret - and his lie about Billy Fletcher
by Irishmirror.ieEmmerdale viewers learned what Al Chapman had been hiding in the latest episode of the ITV soap, as he landed former stepson Billy Fletcher in trouble.
The character was brutally attacked by a mystery culprit last week, with Billy instantly blamed after their earlier showdown.
Billy was forced to claim innocence, as Al told Dawn Taylor, Jai Sharma and Kim Tate that he was his attacker.
Jai threatened to call the police, with Al determined this would not happen - knowing full well he had nothing to do with the assault.
But Billy isn't the only one Al could have placed in harm's way due to his secret, with it confirmed the character is battling debt.
On Monday, Dawn followed him to a meeting with two mystery men who were revealed to be working for a loan shark.
They were there to collect money from Al that he owed, with him in severe debt to someone.
He was told if he didn't pay up, they were going to kill him.
It then became clear why Al was so desperate to get his son Ellis, Billy's brother, to invest in his buisness.
He wanted Ellis to give him the money so he could pay off the debt, not worrying about the consequences for his son.
Viewers will have to wait and see what Dawn will do with this information, especially after almost landing Billy in trouble.
Ellis will be back in the village soon, with his return said to come about after Billy and Al clash yet again.
There will be a new actor playing the role of Ellis when he returns, while it's not yet known if he'll forgive his dad.
Actor Aaron Anthony will now be playing the role, after original actor Asan N'Jie was sacked by the ITV soap in September.
He was involved in an incident with Hollyoaks actor Jamie Lomas at the TV Choice Awards 2019, where he threatened violence towards the fellow soap star - leading to the soap axing him from the role.
Emmerdale airs weeknights at 7pm on ITV, with an extra episode at 8pm on Thursdays.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
|
# Hello, and welcome to makefile basics.
#
# You will learn why `make` is so great, and why, despite its "weird" syntax,
# it is actually a highly expressive, efficient, and powerful way to build
# programs.
#
# Once you're done here, go to
# http://www.gnu.org/software/make/manual/make.html
# to learn SOOOO much more.
# To do stuff with make, you type `make` in a directory that has a file called
# "Makefile". You can also type `make -f <makefile>` to use a different
# filename.
#
# 为了使用 make 完成一些任务， 你需要在有一个叫做 `Makefile` 文件的目录里面键入 `make` .
# 你可以使用 `make -f <makefile>` 去使用不同的文件名
#
# A Makefile is a collection of rules. Each rule is a recipe to do a specific
# thing, sort of like a grunt task or an npm package.json script.
#
# Makefile 是系列规则的集合。 每个规则都是做特定事情的秘诀。
#
#
# A rule looks like this:
#
# <target>: <prerequisites...>
# <commands>
#
# The "target" is required. The prerequisites are optional, and the commands
# are also optional, but you have to have one or the other.
#
# Type "make" and see what happens:
tutorial:
@# todo: have this actually run some kind of tutorial wizard?
@echo "Please read the 'Makefile' file to go through this tutorial"
# By default, the first target is run if you don't specify one. So, in this
# dir, typing "make" is the same as typing "make tutorial"
#
# 默认情况下， 如果你没有指定一个 target， 那么个第一个 target 将会被运行。
#
# By default, make prints out the command before it runs it, so you can see
# what it's doing. This is a departure from the "success should be silent"
# UNIX dogma, but without that default, it'd be very difficult to see what
# build logs etc are actually doing.
#
# To suppress the output, we've added @ signs before each line, above.
#
# 为了去压缩输出内容， 我们能够添加 @ 符号到上面的每一行。
#
# Each line of the command list is run as a separate invocation of the shell.
# So, if you set a variable, it won't be available in the next line! To see
# this in action, try running `make var-lost`
#
# 命令列表的每一行都作为单独的 shell 调用运行。
# 因此， 如果你设置了一个变量， 那么这个变量在下一行的命中中将是不可见的。
var-lost:
export foo=bar
echo "foo=[$$foo]"
# Notice that we have to use a double-$ in the command line. That is because
# each line of a makefile is parsed first using the makefile syntax, and THEN
# the result is passed to the shell.
# Let's try running both of the commands in the *same* shell invocation, by
# escaping the \n character. Run `make var-kept` and note the difference.
#
# 注意， 在命令行中我们使用两个 $, 这是因为在 makefile 中的每一行首先会使用 makefile 语法去解析，
# 然后把结果传递给shell
# 通过转义 \n 字符， 可以让多行命令在同一个 shell 调用中被运行。
var-kept:
export foo=bar; \
echo "foo=[$$foo]"
# Now let's try making something that depends on something else. In this case,
# we're going to create a file called "result.txt" which depends on
# "source.txt".
result.txt: source.txt
@echo "building result.txt from source.txt"
cp source.txt result.txt
# When we type `make result.txt`, we get an error!
# $ make result.txt
# make: *** No rule to make target `source.txt', needed by `result.txt'. Stop.
#
# The problem here is that we've told make to create result.txt from
# source.txt, but we haven't told it how to get source.txt, and the file is
# not in our tree right now.
#
# Un-comment the next ruleset to fix the problem.
#
source.txt:
@echo "building source.txt"
@echo "this is the source" > source.txt
#
# Run `make result.txt` and you'll see it first creates source.txt, and then
# copies it to result.txt. Try running `make result.txt` again, and you'll see
# that nothing happens! That's because the dependency, source.txt, hasn't
# changed, so there's no need to re-build result.txt.
#
# Run `touch source.txt`, or edit the file, and you'll see that
# `make result.txt` re-builds the file.
#
#
# Let's say that we were working on a project with 100 .c files, and each of
# those .c files we wanted to turn into a corresponding .o file, and then link
# all the .o files into a binary. (This is effectively the same if you have
# 100 .styl files to turn into .css files, and then link together into a big
# single concatenated main.min.css file.)
#
# It would be SUPER TEDIOUS to create a rule for each one of those. Luckily,
# make makes this easy for us. We can create one generic rule that handles
# any files matching a specific pattern, and declare that we're going to
# transform it into the corresponding file of a different pattern.
#
# 我们能够创建一个通用的规则， 它能够处理任何匹配特定模式的任何文件。
#
# Within the ruleset, we can use some special syntax to refer to the input
# file and the output file. Here are the special variables:
#
# 在规则的集合中， 我们能够使用的一些特别的语法去引用输入文件和输出文件。 下面是一些特别的变量。
#
#
# $@ The file that is being made right now by this rule (aka the "target")
# You can remember this because it's like the "$@" list in a
# shell script. @ is like a letter "a" for "arguments.
# When you type "make foo", then "foo" is the argument.
#
# $< The input file (that is, the first prerequisite in the list)
# You can remember this becasue the < is like a file input
# pipe in bash. `head <foo.txt` is using the contents of
# foo.txt as the input. Also the < points INto the $
#
# $^ This is the list of ALL input files, not just the first one.
# You can remember it because it's like $<, but turned up a notch.
# If a file shows up more than once in the input list for some reason,
# it's still only going to show one time in $^.
#
# $? All the input files that are newer than the target
# It's like a question. "Wait, why are you doing this? What
# files changed to make this necessary?"
#
# $$ A literal $ character inside of the rules section
# More dollar signs equals more cash money equals dollar sign.
#
# $* The "stem" part that matched in the rule definition's % bit
# You can remember this because in make rules, % is like * on
# the shell, so $* is telling you what matched the pattern.
#
# You can also use the special syntax $(@D) and $(@F) to refer to
# just the dir and file portions of $@, respectively. $(<D) and
# $(<F) work the same way on the $< variable. You can do the D/F
# trick on any variable that looks like a filename.
#
# There are a few other special variables, and we can define our own
# as well. Most of the other special variables, you'll never use, so
# don't worry about them.
#
# So, our rule for result.txt could've been written like this
# instead:
result-using-var.txt: source.txt
@echo "buildling result-using-var.txt using the $$< and $$@ vars"
cp $< $@
# Let's say that we had 100 source files, that we want to convert
# into 100 result files. Rather than list them out one by one in the
# makefile, we can use a bit of shell scripting to generate them, and
# save them in a variable.
# 假如我们有100个源文件， 我们想要转换源文件为结果文件。 我们不要把他们一一列举在
# makefile 文件中， 我们可以使用一点shell脚本生成他们并保存在变量中。
#
# Note that make uses := for assignment instead of =
# I don't know why that is. The sooner you accept that this isn't
# bash/sh, the better.
#
# 注意 make 使用 := 代替 = 我不知道为什么会这样。 你越早接受这不是 bash/sh，更好。
#
# Also, usually you'd use `$(wildcard src/*.txt)` instead, since
# probably the files would already exist in your project. Since this
# is a tutorial, though we're going to generate them using make.
#
# This will execute the shell program to generate a list of files.
srcfiles := $(shell echo src/{00..99}.txt)
# How do we make a text file in the src dir?
# We define the filename using a "stem" with the % as a placeholder.
# What this means is "any file named src/*.txt", and it puts whatever
# matches the "%" bit into the $* variable.
#
# 我们如何在 src 目录中创建一个文件？
# 我们使用 “stem” 和 当作占位符“%” 定义了一个文件名。 这就意味着“任何名为 src/*.txt” 的文件
# 并且 它会把 "%" 匹配的内容放入 $* 变量中。
src/%.txt:
@# First things first, create the dir if it doesn't exist.
@# Prepend with @ because srsly who cares about dir creation
@[ -d src ] || mkdir src
@# then, we just echo some data into the file
@# The $* expands to the "stem" bit matched by %
@# So, we get a bunch of files with numeric names, containing their number
echo $* > $@
# Try running `make src/00.txt` and `make src/01.txt` now.
# To not have to run make for each file, we define a "phony" target that
# depends on all of the srcfiles, and has no other rules. It's good
# practice to define your phony rules in a .PHONY declaration in the file.
# (See the .PHONY entry at the very bottom of this file.)
#
# 为了不必为每个文件运行 make， 我定义一个依赖于所有的 srcfile 的虚假目标， 并且没有任何规则。
# 更好的做法使用 `.PHONY` 声明定义你自己的虚假的规则。
#
#
# Running `make source` will make ALL of the files in the src/ dir. Before
# it can make any of them, it'll first make the src/ dir itself. Then
# it'll copy the "stem" value (that is, the number in the filename matched
# by the %) into the file, like the rule says above.
#
# Try typing "make source" to make all this happen.
source: $(srcfiles)
# So, to make a dest file, let's copy a source file into its destination.
# Also, it has to create the destination folder first.
#
# The destination of any dest/*.txt file is the src/*.txt file with
# the matching stem. You could just as easily say that %.css depends
# on %.styl
dest/%.txt: src/%.txt
[ -d dest ] || mkdir dest
cp $< $@
# So, this is great and all, but we don't want to type `make dest/#.txt`
# 100 times!
#
# Let's create a "phony" target that depends on all the destination files.
# We can use the built-in pattern substitution "patsubst" so we don't have
# to re-build the list. This patsubst function uses the same "stem"
# concept explained above.
#
# 让我创建一个依赖所有的 destfiles 的虚假目标。
#
destfiles := $(patsubst src/%.txt,dest/%.txt,$(srcfiles))
destination: $(destfiles)
# Since "destination" isn't an actual filename, we define that as a .PHONY
# as well (see below). This way, Make won't bother itself checking to see
# if the file named "destination" exists if we have something that depends
# on it later.
#
# 因为 “destination” 不是一个真正的文件， 我们可以把他定义为 `.PHONY`
#
# Let's say that all of these dest files should be gathered up into a
# proper compiled program. Since this is a tutorial, we'll use the
# venerable feline compiler called "cat", which is included in every
# posix system because cats are wonderful and a core part of UNIX.
kitty: $(destfiles)
@# Remember, $< is the input file, but $^ is ALL the input files.
@# Cat them into the kitty.
cat $^ > kitty
# Note what's happening here:
#
# kitty -> (all of the dest files)
# Then, each destfile depends on a corresponding srcfile
#
# If you `make kitty` again, it'll say "kitty is up to date"
#
# NOW TIME FOR MAGIC!
#
# Let's update just ONE of the source files, and see what happens
#
# Run this: touch src/25.txt; make kitty
#
# Note that it is smart enough to re-build JUST the single destfile that
# corresponds to the 25.txt file, and then concats them all to kitty. It
# *doesn't* re-generate EVERY source file, and then EVERY dest file,
# every time
# It's good practice to have a `test` target, because people will come to
# your project, and if there's a Makefile, then they'll expect `make test`
# to do something.
#
# We can't test the kitty unless it exists, so we have to depend on that.
test: kitty
@echo "miao" && echo "tests all pass!"
# Last but not least, `make clean` should always remove all of the stuff
# that your makefile created, so that we can remove bad stuff if anything
# gets corrupted or otherwise screwed up.
clean:
rm -rf *.txt src dest kitty
# What happens if there's an error!? Let's say you're building stuff, and
# one of the commands fails. Make will abort and refuse to proceed if any
# of the commands exits with a non-zero error code.
# To demonstrate this, we'll use the `false` program, which just exits with
# a code of 1 and does nothing else.
badkitty:
$(MAKE) kitty # The special var $(MAKE) means "the make currently in use"
false # <-- this will fail
echo "should not get here"
.PHONY: source destination clean test badkitty
|


--- layout: post status: publish published: true title: 'Miscellany 2: The Vengeance' author: display_name: Andy login: Andy email<EMAIL_ADDRESS>url: '' author_login: Andy author_email<EMAIL_ADDRESS>excerpt: 'Another great post by Matt Veto today. He makes a great point about the HOF game that was scheduled for today, and he says some nice things about Reed Johnson that are right up my alley (Sorry I forgot to mention your little Trufflehunter hookbeard on my facial hair post, Reed). Veto also posted a link to The Ted Lilly Fan Club, and it is well worth checking out. They have a poll question posted at the top of the page: ' wordpress_id: 97 wordpress_url: http://ivyenvy.wordpress.com/?p=97 date: '2008-06-17 01:09:17 +0000' date_gmt: '2008-06-17 01:09:17 +0000' categories: - Starting Pitching tags: - Matt Veto - Reed Johnson - Ted Lilly - The Satan Rays - The Ted Lilly Fan Club - Trufflehunter comments: [] ---
Another great post by Matt Veto today. He makes a great point about the HOF game that was scheduled for today, and he says some nice things about Reed Johnson that are right up my alley (Sorry I forgot to mention your little Trufflehunter hookbeard on my facial hair post, Reed). Veto also posted a link to The Ted Lilly Fan Club, and it is well worth checking out. They have a poll question posted at the top of the page: "Can Ted Lilly crush a baseball with his hands?" Tampa Bay is also referred to as "The Satan Rays" in the newest post. That should give you some idea of what to expect from the TLFC.
Ted Lilly for DH!


| Total net profit | -62.83 | Gross profit | 63.43 | Gross loss | -126.26 |
| Profit factor | 0.5 | Expected payoff | -0.59 | ||
| Absolute drawdown | -62.83 | Maximal drawdown (%) | 64.44 (4002.48%) | ||
| Total trades | 106 | Profit trades (% of total) | 48 (45.28%) | Loss trades (% of total) | 58 (54.72%) |
| Long positions (won %) | 57 (43.86%) | Short positions (won %) | 49 (46.94%) | ||
| Largest | profit trade | 6.5 | loss trade | -4.51 | |
| Average | profit trade | 1.32 | loss trade | -2.18 | |
| Minimum | profit trade | 0.03 | loss trade | -0.05 | |
| Maximum | take profit in pips | 7910.0 | stop loss in pips | -4470.0 | |
| Average | take profit in pips | 1790.2 | stop loss in pips | -2759.5 | |
| Minimum | take profit in pips | -310.0 | stop loss in pips | -590.0 | |
| Maximum | Reward-Risk | 3.5 | Duration in minutes | 3836 | |
| Average | Reward-Risk | 0.8 | Duration in minutes | 169.3 | |
| Minimum | Reward-Risk | 0.0 | Duration in minutes | 0 | |
| Maximum | consecutive wins (profit in money) | 4.0 (3.93) | consecutive losses (loss in money) | 7.0 (-14.59) | |
| Average | consecutive wins | 1.0 | consecutive losses | 2.0 |
| Total net profit | -38.83 | Gross profit | 31.52 | Gross loss | -70.35 |
| Profit factor | 0.45 | Expected payoff | -0.68 | ||
| Absolute drawdown | -41.01 | Maximal drawdown (%) | 38.68 (-1660.09%) | ||
| Total trades | 57 | Profit trades (% of total) | 25 (43.86%) | Loss trades (% of total) | 32 (56.14%) |
| Largest | profit trade | 4.15 | loss trade | -4.51 | |
| Average | profit trade | 1.26 | loss trade | -2.2 | |
| Minimum | profit trade | 0.03 | loss trade | -0.05 | |
| Maximum | take profit in pips | 6890.0 | stop loss in pips | -4470.0 | |
| Average | take profit in pips | 1436.7 | stop loss in pips | -2971.6 | |
| Minimum | take profit in pips | -310.0 | stop loss in pips | -1250.0 | |
| Maximum | Reward-Risk | 2.7 | Duration in minutes | 3836.0 | |
| Average | Reward-Risk | 0.6 | Duration in minutes | 174.2 | |
| Minimum | Reward-Risk | 0.0 | Duration in minutes | 0.0 | |
| Maximum | consecutive wins (profit in money) | 3.0 (1.97) | consecutive losses (loss in money) | 10.0 (-18.78) | |
| Average | consecutive wins | 1.0 | consecutive losses | 2.0 |
| Total net profit | -24.0 | Gross profit | 31.91 | Gross loss | -55.91 |
| Profit factor | 0.57 | Expected payoff | -0.49 | ||
| Absolute drawdown | -24.0 | Maximal drawdown (%) | 25.61 (1590.68%) | ||
| Total trades | 49 | Profit trades (% of total) | 23 (46.94%) | Loss trades (% of total) | 26 (53.06%) |
| Largest | profit trade | 6.5 | loss trade | -3.51 | |
| Average | profit trade | 1.39 | loss trade | -2.15 | |
| Minimum | profit trade | 0.15 | loss trade | -0.21 | |
| Maximum | take profit in pips | 7910.0 | stop loss in pips | -4270.0 | |
| Average | take profit in pips | 2201.4 | stop loss in pips | -2512.9 | |
| Minimum | take profit in pips | -210.0 | stop loss in pips | -590.0 | |
| Maximum | Reward-Risk | 3.5 | Duration in minutes | 2139.0 | |
| Average | Reward-Risk | 1.0 | Duration in minutes | 163.6 | |
| Minimum | Reward-Risk | Duration in minutes | 0.0 | ||
| Maximum | consecutive wins (profit in money) | 5.0 (3.88) | consecutive losses (loss in money) | 7.0 (-14.59) | |
| Average | consecutive wins | 2.0 | consecutive losses | 2.0 |


About
Olympic Sun Productions is a film company helmed by Kelsey Pigden,with studios in both Thunder Bay and Niagara Falls, which develops, produces, and distributes films.
Reaphook
Reaphook is a revisionist story of two well-known characters and how their infamous relationship began.


Last updated: 2018-02-22
Code version: d3c2fe9
Teacher: Rene Eijkemans
Learn from data what the data-generating process is.
Resampling from sample, not theoretical distribution
Non-parametric Monte Carlo methods
Possible inference - Hypothesis tests - Assess bias - Confidence interval
Leap of faith
Any methods for statistical inference based on random sampling, where simulation is used to estimate parameters
Parametric MC: sample from given probability distribution Non-parametric MC: sample from observed sample
Non-parametric MC, B. Efron, 1979
Create microworld, sample takes place of population
Sample treated as finite pseudo-population
Leap of faith: drawing samples from observed sample is close to drawing samples from population
dat <- c(174, 165, 182, 171, 178)
sample(dat, size = length(dat), replace = T)
[1] 171 178 171 178 182
library(boot)
av <- function(x, i) {mean(x[i])}
obj <- boot(data = dat, statistic = av, R = 500)
mean(obj$t)
[1] 174.0588
obj
ORDINARY NONPARAMETRIC BOOTSTRAP
Call:
boot(data = dat, statistic = av, R = 500)
Bootstrap Statistics :
original bias std. error
t1* 174 0.0588 2.55614
str(obj)
List of 11
$ t0 : num 174
$ t : num [1:500, 1] 175 169 174 171 177 ...
$ R : num 500
$ data : num [1:5] 174 165 182 171 178
$ seed : int [1:626] 403 5 -1346850345 656028621 13211492<PHONE_NUMBER> 95765173 -1737862641 -58526954<PHONE_NUMBER> ...
$ statistic:function (x, i)
..- attr(*, "srcref")=Class 'srcref' atomic [1:8] 2 7 2 33 7 33 2 2
.. .. ..- attr(*, "srcfile")=Classes 'srcfilecopy', 'srcfile' <environment: 0x7fc4cb115c30>
$ sim : chr "ordinary"
$ call : language boot(data = dat, statistic = av, R = 500)
$ stype : chr "i"
$ strata : num [1:5] 1 1 1 1 1
$ weights : num [1:5] 0.2 0.2 0.2 0.2 0.2
- attr(*, "class")= chr "boot"
- attr(*, "boot_type")= chr "boot"
boot.ci(obj)
Warning in boot.ci(obj): bootstrap variances needed for studentized
intervals
BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
Based on 500 bootstrap replicates
CALL :
boot.ci(boot.out = obj)
Intervals :
Level Normal Basic
95% (168.9, 179.0 ) (169.1, 178.8 )
Level Percentile BCa
95% (169.2, 178.9 ) (168.6, 178.2 )
Calculations and Intervals on Original Scale
Some BCa intervals may be unstable
To program: write function that calculates parameter, and takes index for row numbers
Take expected value of bootstrap statistic, which is by definition the mean of the bootstrap statistics
Standard error is the standard deviation of the bootstrap distribution (since standard error tries to estimate the SD of the sampling distribution of the statistic)
Bias = expected value for parameter in sample - true value When bias is much lower than standard error, probabilby no bias bias / std.error < 0.25 (by Rizzo, or .1), no real bias
You can bootstrap the bootstrap, or jackknife the boostrap (which is faster)
For health technology, you get right-skewed data, but you need to use the mean because you want to describe the population (and get information on the outliers too). Bootstrapping works very well
data(patch, package = "bootstrap")
patch
subject placebo oldpatch newpatch z y
1 1 9243 17649 16449 8406 -1200
2 2 9671 12013 14614 2342 2601
3 3 11792 19979 17274 8187 -2705
4 4 13357 21816 23798 8459 1982
5 5 9055 13850 12560 4795 -1290
6 6 6290 9806 10157 3516 351
7 7 12412 17208 16570 4796 -638
8 8 18806 29044 26325 10238 -2719
n <- nrow(patch)
B <- 2000
theta.b <- numeric(B)
theta.hat <- mean(patch$y) / mean(patch$z)
for (b in 1:B) {
i <- sample(1:n, size = n, replace = T)
y <- patch$y[i]
z <- patch$z[i]
theta.b[b] <- mean(y) / mean(z)
}
hist(theta.b)
bias <- mean(theta.b) - theta.hat
se <- sd(theta.b)
bias
[1] 0.008774365
se
[1] 0.1020246
quantile(theta.b, probs = c(.025, .975))
2.5% 97.5%
-0.2339987 0.1633148
Bootstrap with replicate
dat <- c(174, 165, 182, 171, 178)
n <- length(dat)
Mb <- replicate(1000,
expr = {y <- sample(dat, size = n, replace = T);
median(y)})
hist(Mb)
M.H. Quenouille in 1949 for estimating bias J.W. Tukey in 1958 for estimating standard error
Leave-one-out cross-validation, so limited to N samples where N is sample size.
Each time, the sample size is 1 smaller.
dat <- c(174, 165, 182, 171, 178)
for (i in 1:length(dat)) print(dat[-i])
[1] 165 182 171 178
[1] 174 182 171 178
[1] 174 165 171 178
[1] 174 165 182 178
[1] 174 165 182 171
With patch data
n <- nrow(patch)
theta.hat <- mean(patch$y) / mean(patch$z)
theta.jack <- numeric(n)
for (i in 1:n) {
theta.jack[i] <- mean(patch$y[-i]) / mean(patch$z[-i])
}
bias <- (n-1) * (mean(theta.jack) - theta.hat)
se <- sqrt((n-1)*mean((theta.jack - mean(theta.jack))^2))
bias
[1] 0.008002488
se
[1] 0.1055278
For median, not very smooth. Does not work well
Non-smooth -> not a small change, when we make a small change to the data
Median is not a nice statistic
The boostrap estimates of standard error and bias are themselves random variables
Jackknife for boostrap: take all bootstrap samples that do not contain observation \(i\). Gives \(n\) estimates of the standard error. Not a real jackknife, bootstrap samples can be included in multiple jackknife- samples.
Examples
BCa:
Second order accuracy, i.e. error -> 0; at rate 1/n
Standard normal BCI: no second order accuracy, nor transformation respecting
For accuracy in classification: bootstrap 0.632; calculates optimism for out of sample accuracy, (not the same as over-fitting) To account for inter-dependence of bootstrap sample, 63.2% of data are in the same Another problem was interdependence of of samples, so 0.632+ is best. Tibshirani (is against cross-validation)
data(patch, package="bootstrap")
theta.boot <- function(dat,ind)
{ y <- dat[ind,1]; z <- dat[ind,2]; mean(y) / mean(z) }
y <- patch$y; z <- patch$z
dat <- cbind(y,z)
boot.obj <- boot(dat, statistic = theta.boot, R=2000)
boot.obj
ORDINARY NONPARAMETRIC BOOTSTRAP
Call:
boot(data = dat, statistic = theta.boot, R = 2000)
Bootstrap Statistics :
original bias std. error
t1* -0.0713061 0.008716536 0.1028885
print(boot.ci(boot.obj), type="all")
Warning in boot.ci(boot.obj): bootstrap variances needed for studentized
intervals
BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
Based on 2000 bootstrap replicates
CALL :
boot.ci(boot.out = boot.obj)
Intervals :
Level Normal Basic
95% (-0.2817, 0.1216 ) (-0.3013, 0.0928 )
Level Percentile BCa
95% (-0.2354, 0.1587 ) (-0.2299, 0.1871 )
Calculations and Intervals on Original Scale
Assessing model fit, not individual parameter estimates
data(ironslag,package="DAAG")
ironslag
chemical magnetic
1 24 25
2 16 22
3 24 17
4 18 21
5 18 20
6 10 13
7 14 16
8 16 14
9 18 19
10 20 10
11 21 23
12 20 20
13 21 19
14 15 15
15 16 16
16 15 16
17 17 12
18 19 15
19 16 15
20 15 15
21 15 15
22 13 17
23 24 18
24 22 16
25 21 18
26 24 22
27 15 20
28 20 21
29 20 21
30 25 21
31 27 25
32 22 22
33 20 18
34 24 21
35 24 18
36 23 20
37 29 25
38 27 20
39 23 18
40 19 19
41 25 16
42 15 16
43 16 16
44 27 26
45 27 28
46 30 28
47 29 30
48 26 32
49 25 28
50 25 36
51 32 40
52 28 33
53 25 33
a <- seq(10,40,0.1)
L1 <- lm(magnetic ~ chemical, data = ironslag)
par(mfrow=c(1,2))
plot(ironslag$chemical,ironslag$magnetic,main="Linear",pch=16)
yhat1 <- L1$coef[1] + L1$coef[2] * a
lines(a,yhat1,lwd=2)
L2 <- lm(magnetic ~ chemical + I(chemical^2), data = ironslag)
plot(ironslag$chemical,ironslag$magnetic,main="Quadratic",pch=16)
yhat2 <- L2$coef[1] + L2$coef[2] * a + L2$coef[3] * a^2
lines(a,yhat2,lwd=2)
plot(L2)
Now with cross-validation
attach(ironslag)
n <- length(magnetic)
e1 <- e2 <- numeric(n)
for (k in 1:n) {
y <- magnetic[-k]
x <- chemical[-k]
J1 <- lm(y ~ x)
yhat1 <- J1$coef[1] + J1$coef[2] * chemical[k] # prediction
e1[k] <- magnetic[k] - yhat1 # residual
J2 <- lm(y ~ x + I(x^2))
yhat2 <- J2$coef[1] + J2$coef[2] * chemical[k] + J2$coef[3] * chemical[k]^2
e2[k] <- magnetic[k] - yhat2 }
sqrt(c(mean(e1^2),mean(e2^2))) # estimates for the prediction error
[1] 4.422267 4.225219
detach(ironslag)
Difference between in-sample error and out-of-sample error (with cross-validation), is a function of the sample size.
Best is repeated cross-validation
Diagnostic plot
Leave one out: - n-1 times the same model (is dependent on sample, high variability accross samples) - better for assessing performance of a single model
5 vs 10 fold validation - less dependent on sample
Permutation tests sample without replacement, scrambling the labels
Applicatoins:
99-999 permutations should suffice; technically this is a randomization test
Calculate p-value:
\[p = \frac{1+\sum_{b=1}^B{I(|\hat{\theta}_b| \geq |\theta|)}}{B+1}\]
Use \(B+1\) because the actual sample can be seen as 1 permutation
exp.lean <- c(7.53,7.48,8.08,8.09,10.15,8.40,10.88,6.13,7.90,7.05,7.48,7.58,8.11) # n=13
exp.obese <- c(9.21,11.51,12.79,11.85,9.97,8.79,9.69,9.68,9.19) # n=9
t0 <- t.test(exp.lean,exp.obese) # standard t-test
t0
Welch Two Sample t-test
data: exp.lean and exp.obese
t = -3.8555, df = 15.919, p-value = 0.001411
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-3.459167 -1.004081
sample estimates:
mean of x mean of y
8.066154 10.297778
g1 <- min(purrr::map_int(list(lean = exp.lean, obese = exp.obese), length))
z <- c(exp.lean, exp.obese)
n <- length(z)
R <- 999
reps <- numeric(R)
K <- length(z)
set.seed(123456)
for (i in 1:R) {
k <- sample(K, size = g1, replace = F)
x1 <- z[k]
y1 <- z[-k]
reps[i] <- t.test(x1, y1)$statistic
}
options(digits = 7)
(1 + sum(reps>=t0$statistic))/(R+1)
[1] 0.999
(1 + sum(reps<=t0$statistic))/(R+1)
[1] 0.002
(1 + sum(abs(reps)>=abs(t0$statistic)))/(R+1)
[1] 0.002
mean(abs(c(t0$statistic, reps)) >= abs(t0$statistic))
[1] 0.002
t0$p.value
[1] 0.001410692
hist(reps)
abline(v = t0$statistic, lty = 2)
Kolmorov-Smirnov test: differences in distributions (shape and location)
ks0 <- ks.test(exp.lean,exp.obese,exact=F)$statistic
z <- c(exp.lean,exp.obese)
R <- 999
reps <- numeric(R)
K <- 1:length(z)
for (i in 1:R) {
k <- sample(K,size=13,replace=FALSE)
x1 <- z[k]
y1 <- z[-k]
reps[i] <- ks.test(x1,y1,exact=F)$statistic
}
hist(reps)
abline(v = ks0, lty = 2)
p <- mean(c(ks0, reps)>=ks0);
ifelse(p>0.5, 2*(1-p), 2*p) # two-sided ASLks.test(exp.lean,exp.obese,exact=F)$p.value # p-value from KS test
[1] 0.002
This is very robust.
Only theoretically, when distribution under null-hypothesis is non-symmetric, null-distribution by permutation is allways symmetric.
Permutation tests condition on data we have (if we would not have had the same data if we would replicate the study). If we set the group sizes (e.g. in a trial).
Bootstrap generalizes better than permutation tests because it’s less dependent on sample
Fisher’s exact test fixes number of groups AND outcomes. It ignores randomness of observing data
sessionInfo()
R version 3.4.3 (2017-11-30)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS Sierra 10.12.6
Matrix products: default
BLAS: /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libRblas.0.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libRlapack.dylib
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] boot_1.3-20
loaded via a namespace (and not attached):
[1] Rcpp_0.12.15 digest_0.6.15 rprojroot_1.3-2 backports_1.1.2
[5] git2r_0.21.0 magrittr_1.5 evaluate_0.10.1 rlang_0.1.6
[9] stringi_1.1.6 rmarkdown_1.8 tools_3.4.3 stringr_1.2.0
[13] purrr_0.2.4 yaml_2.1.16 compiler_3.4.3 htmltools_0.3.6
[17] knitr_1.19
This R Markdown site was created with workflowr


---
layout: post
title: NTFS-3g in Etch
date: '2008-03-08T21:51:00.003+01:00'
author: sax
tags:
- AMD64
- Debian
- Etch
- NTFS-3g
modified_time: '2008-03-08T22:08:09.418+01:00'
blogger_id: tag:blogger.com,1999:blog-17453343.post-4356132834766565336
blogger_orig_url: http://saxuality.blogspot.com/2008/03/ntfs-3g-in-etch.html
---
Packages for NTFS-3g are currently in unstable branch so you can not install them directly. They also need newer version of libc6, which we don't want to upgrade. I've found some packages for Etch here, but they are not for AMD64. So I decided to compile them manually.
You will need lic6-dev for compilation, if you don't have it, get it with command:
apt-get install libc6-dev
Also install dependencies:
apt-get install fuse-utils libfuse2
Then download sources from http://www.ntfs-3g.org/, untar them and compile them:
./configure && make
and as a root make install
And that's it, mount your partition with command:
mount -t ntfs-3g /dev/sda1 /mnt/Windows -o defaults,umask=0


A menu that, when requested, is displayed next to the object it is associated with. It contains choices appropriate for a given object or set of objects in their current context. The menu is displayed by clicking mouse button 2 on an object or on the desktop.


--- layout: post title: Getting Started with Virtualization - Part 1 date: 2017-10-22 14:54:20.000000000 +05:30 type: post parent_id: '0' published: true password: '' status: publish categories: [] tags: - virtualization authors: - vik-y ---
For the past 1 year I have been working extensively on Virtualization. Lately I have started working with Openstack. This is a very rapidly changing field as new innovations are happening in it everyday. No matter what you are interested in, chances are you are already using Virtualization regularly. I have been getting queries on how to get started with this so I thought of writing a blog series about it here.
First read up about Virtualization on Wikipedia
https://en.wikipedia.org/wiki/Virtualization
Then try installing virtualBox and running a VM on it. Preferrably Ubuntu
Then read up about hypervisors, Wikipedia is a good starting point but explore other links as well till you understand properly what hypervisors are. Refer to these links in order
https://en.wikipedia.org/wiki/Hypervisor
https://www.pluralsight.com/blog/it-ops/what-is-hypervisor
https://www.howtogeek.com/66734/htg-explains-what-is-a-hypervisor/
Once you know the basics of Virtualization, now read up on why do we actually need Virtualization
https://www.pcworld.com/article/220644/10_Cool_Things_Virtualization_Lets_You_Do.html
https://www.mytechlogy.com/IT-blogs/9566/10-popular-uses-of-virtual-machines/
Now time to go into a bit depth to understand the technology better. I would suggest you to read and understand all these whitepapers.
https://www.vmware.com/pdf/virtualization.pdf
This paper might be a little tough but if you can understand it, it'll be awesome, skip things if you are getting stuck: https://education.emc.com/academicalliance/student/Virtualization%20WP.pdf
If you have covered all these articles properly, you'll have a good idea about what Virtualization is and why do we need it. Now the next step would be to understand how Virtualization is implemented and how you can use it to make your life simpler. More on that in the next blog post. :)


© 2013 BSSB. All rights reserved. Powered by O3 Interactive
An email has been sent to {{email}} with your details. If you have not received an email, please be sure to check your junk mail folder.
Login to your dashboard to start the application process


The user logs in with a user key and can see the tabs from all the logged-in browsers. This key is personal
and
should be kept private (since anyone with it can see the user's tabs' names and URLs).
If the user has no key yet, the user can click on the register button and a key is automatically generated for
the user.
This extension is fully open-source. If you want, you can contribute by making a pull request!
Permisions asked
Storage
This permission is asked so that we can save the user key so that the user doesn't have to login each
time it opens the extension.
Tabs
We use this permission to access the titles/names and URLs of the browser tabs. We don't access/save
the
content of the page itself—only it's title and URL.
Where to install it
You can find the Firefox extension here and the Chrome extension here.


Automated testing
GDAL includes a comprehensive test suite, implemented using a combination of Python (via pytest) and C++ (via gtest).
After building GDAL using CMake, the complete test suite can be run using ctest -v --output-on-failure
. This will automatically set environment variables so that tests are run on the
the built version of GDAL, rather than an installed system copy.
Running a subset of tests using ctest
The complete set of test suites known to ctest
can be viewed running ctest -N
.
A subset of tests can be run using the -R
argument to ctest
, which selects tests using a provided regular expression.
For example, ctest -R autotest
would run the Python-based tests.
The -E
argument can be used to exclude tests using a regular expression. For example, ctest -E gdrivers
would exclude the suite of driver tests.
Running a subset of tests using pytest
The test subsets exposed by ctest
are still rather large and some may take several minutes to run.
If a higher level of specificity is needed, pytest
can be called directly to run groups of tests or individual tests.
Before running pytest
, it is important to set environment variables so that the development build of GDAL is tested,
rather than a system version. This can be done by sourcing the following from the build directory:
. ../scripts/setdevenv.sh
(with adjustments to the above path if the build directory is not a subdirectory of the GDAL source root). To verify that environment variables were set correctly, you can check the version of a GDAL binary:
gdalinfo --version
# GDAL 3.7.0dev-5327c149f5-dirty, released 2018/99/99 (debug build)
and the Python bindings:
python3 -c 'from osgeo import gdal; print(gdal.__version__)'
# 3.7.0dev-5327c149f5-dirty
List tests containing "tiff" in the name:
pytest --collect-only autotest -k tiff
Running an individual test file
pytest autotest/gcore/vrt_read.py
A subset of tests within an individual test file can be run by providing a regular expression to the -k
argument to pytest
.
pytest autotest/gcore/vrt_read.py -k test_vrt_read_non_existing_source
Warning
Not all Python tests can be run independently; some tests depend on state set by a previous tests in the same file.
Checking for memory leaks and access errors using Valgrind
The GDAL unit test suite can be run using the Valgrind tool to detect memory errors such as leaks and incorrect reads/writes.
The test suite will run considerably slower under Valgrind (perhaps by a factor of ten) so it is generally advisable to run a subset of the tests using the methods described above.
Warning
Calling valgrind ctest
will _not_ run the tests under
valgrind
. Although it is possible to use Valgrind with ctest, it is
simpler to call pytest
or gdal_unit_test
directly.
The following preparatory steps are necessary to avoid numerous false-positive errors from Valgrind:
Many false-positive errors are generated by Python itself. Most of these can be removed by obtaining a suppression file that corresponds to the version of the Python interpreter used to run the tests. This file can be located in a source distribution of Python, or downloaded directly from GitHub (for example, at https://raw.githubusercontent.com/python/cpython/3.11/Misc/valgrind-python.supp)
A few false-positive errors are generated by the GDAL test suite or libraries that it uses (e.g., SWIG, numpy). These can be removed by
autotest/valgrind-gdal.supp
file in the GDAL repository.When running Python unit tests, the default system memory allocator should be used instead of Python's internal memory allocator. This can be done by setting the
PYTHONMALLOC
environment variable tomalloc
.When running Python unit tests, Valgrind will report numerous "Invalid file descriptor" warnings that cannot currently be suppressed. These can be removed from the output using
grep -v "invalid file descriptor\|alternative log fd"
.
Combining the following, we can run valgrind for a subset of Python tests as follows:
PYTHONMALLOC=malloc valgrind \
--leak-check=full \
--suppressions=/home/dan/dev/valgrind-python.supp \
--suppressions=/home/dan/dev/gdal/autotest/valgrind-gdal.supp \
pytest -v autotest/utilities 2>&1 | (grep -v "invalid file descriptor\|alternative log fd" || true) | tee valgrind-out
Note
To avoid verbose commands such as the one above, it may be useful to
reference the suppression files and other common arguments in a
~/.valgrindrc
file.
Recommendations on how to write new tests
Python-based tests should be preferred when possible, as productivity is higher in Python and there is no associated compilation time (compilation time affects feedback received from continuous integration).
C/C++-based test should be reserved for C++-specific aspects that cannot be tested with the SWIG Python bindings, which use the C interface. For example testing of C++ operators (copy/move constructors/assignment operators, iterator interfaces, etc.) or C/C++ functionality not mapped to SWIG (e.g. CPL utility functions/classes)
Python tests
Python tests use the pytest framework since RFC 72: Update autotest suite to use pytest.
Test cases should be written in a way where they are independent from other
ones, so they can potentially be run in a isolated way or in parallel of other
test cases. In particular temporary files should be created with a name that
cannot conflict with other tests: preferably use pytest's `tmp_path
fixture <https://docs.pytest.org/en/7.1.x/how-to/tmp_path.html#the-tmp-path-fixture>`__.
Use @pytest.mark.require_driver(driver_name)
as an annotation for a test
case that requires an optional driver to be present.
Use pytestmark = pytest.mark.require_driver("driver_name")
towards the
beginning of a test file that requires a given driver to be available for
all its test cases. This is typically when writing tests for a particular
driver.
Use @pytest.mark.require_run_on_demand
as an annotation to signal a test
that should not be run by default, typically because it requires special
pre-conditions, use a lot of RAM, etc. and is thus not appropriate to be
automatically run by continuous integration.
Use @pytest.mark.parametrize(...)
as an annotation for test functions
that test for variations, instead of for() constructs.
More details at https://docs.pytest.org/en/latest/parametrize.html
e.g.:
@pytest.mark.parametrize("dt,expected_size", [(gdal.GDT_Byte, 1),
(gdal.GDT_UInt16, 2)]
def test_datatypesize(dt,expected_size):
assert gdal.GetDataTypeSizeBytes(dt) == expected_size
instead of
def test_datatypesize_DO_NOT_DO_THAT():
for dt, expected_size in [(gdal.GDT_Byte, 1), (gdal.GDT_UInt16, 2)]:
assert gdal.GetDataTypeSizeBytes(dt) == expected_size
Fixtures can be used to share set-up and tear-down code between test cases.
e.g. a fixture automatically loaded for all test cases of a test file, that takes care to unregister a given driver before the test case is run, and re-register it afterwards:
@pytest.fixture(scope="module", autouse=True)
def without_filegdb_driver():
# remove FileGDB driver before running tests
filegdb_driver = ogr.GetDriverByName("FileGDB")
if filegdb_driver is not None:
filegdb_driver.Deregister()
yield
if filegdb_driver is not None:
print("Reregistering FileGDB driver")
filegdb_driver.Register()
or a fixture that runs preliminary checks to discover if a driver has some optional capabilities, and skip a test case if not:
@pytest.fixture()
def require_auto_load_extension():
if ogr.GetDriverByName("SQLite") is None:
pytest.skip()
ds = ogr.Open(":memory:")
with gdaltest.error_handler():
sql_lyr = ds.ExecuteSQL("PRAGMA compile_options")
if sql_lyr:
for f in sql_lyr:
if f.GetField(0) == "OMIT_LOAD_EXTENSION":
ds.ReleaseResultSet(sql_lyr)
pytest.skip("SQLite3 built with OMIT_LOAD_EXTENSION")
ds.ReleaseResultSet(sql_lyr)
def test_ogr_virtualogr_1(require_auto_load_extension):
# Invalid syntax
assert not ogr_virtualogr_run_sql("CREATE VIRTUAL TABLE poly USING VirtualOGR()")
C++ tests
GDAL C++ tests use the GoogleTest framework since RFC 88: Use GoogleTest framework for C/C++ unit tests.
Common non-failing assertions are: EXPECT_TRUE(cond)
, EXPECT_FALSE(cond)
,
EXPECT_EQ(a, b)
, EXPECT_NE(a, b)
, EXPECT_STREQ(a, b)
, EXPECT_LE(a, b)
,
EXPECT_LT(a, b)
, EXPECT_GE(a, b)
, EXPECT_GT(a, b)
, EXPECT_NEAR(a, b, tolerance)
If one of those assertions fail, the execution of the rest of the test cases
continues, hence they should not typically be used if testing a pointer against
NULL and dereferencing it unconditionally afterwards. The ASSERT_xxxx family
of assertions should be used for such cases where early exit of the test case
is desired.
GoogleTest also offers capabilities for parametrized tests. For example:
class DataTypeTupleFixture:
public test_gdal,
public ::testing::WithParamInterface<std::tuple<GDALDataType, GDALDataType>>
{
public:
static std::vector<std::tuple<GDALDataType, GDALDataType>> GetTupleValues()
{
std::vector<std::tuple<GDALDataType, GDALDataType>> ret;
for( GDALDataType eIn = GDT_Byte; eIn < GDT_TypeCount; eIn = static_cast<GDALDataType>(eIn + 1) )
{
for( GDALDataType eOut = GDT_Byte; eOut < GDT_TypeCount; eOut = static_cast<GDALDataType>(eOut + 1) )
{
ret.emplace_back(std::make_tuple(eIn, eOut));
}
}
return ret;
}
};
// Test GDALDataTypeUnion() on all (GDALDataType, GDALDataType) combinations
TEST_P(DataTypeTupleFixture, GDALDataTypeUnion_generic)
{
GDALDataType eDT1 = std::get<0>(GetParam());
GDALDataType eDT2 = std::get<1>(GetParam());
GDALDataType eDT = GDALDataTypeUnion(eDT1,eDT2 );
EXPECT_EQ( eDT, GDALDataTypeUnion(eDT2,eDT1) );
EXPECT_GE( GDALGetDataTypeSize(eDT), GDALGetDataTypeSize(eDT1) );
EXPECT_GE( GDALGetDataTypeSize(eDT), GDALGetDataTypeSize(eDT2) );
EXPECT_TRUE( (GDALDataTypeIsComplex(eDT) && (GDALDataTypeIsComplex(eDT1) || GDALDataTypeIsComplex(eDT2))) ||
(!GDALDataTypeIsComplex(eDT) && !GDALDataTypeIsComplex(eDT1) && !GDALDataTypeIsComplex(eDT2)) );
EXPECT_TRUE( !(GDALDataTypeIsFloating(eDT1) || GDALDataTypeIsFloating(eDT2)) || GDALDataTypeIsFloating(eDT));
EXPECT_TRUE( !(GDALDataTypeIsSigned(eDT1) || GDALDataTypeIsSigned(eDT2)) || GDALDataTypeIsSigned(eDT));
}
INSTANTIATE_TEST_SUITE_P(
test_gdal,
DataTypeTupleFixture,
::testing::ValuesIn(DataTypeTupleFixture::GetTupleValues()),
[](const ::testing::TestParamInfo<DataTypeTupleFixture::ParamType>& l_info) {
GDALDataType eDT1 = std::get<0>(l_info.param);
GDALDataType eDT2 = std::get<1>(l_info.param);
return std::string(GDALGetDataTypeName(eDT1)) + "_" + GDALGetDataTypeName(eDT2);
}
);
Test coverage reports
GDAL continuous integration has a coverage
configuration that builds
GDAL with the gcov
GCC module to get the line coverage of running Python
and C++ autotest tests.
This is used by the Coveralls GitHub Action to upload results to https://coveralls.io/github/OSGeo/gdal, for both push and pull requests events.
A somewhat nicer looking output of line coverage results for the latest master
build, generated by lcov
, is also available at
https://gdalautotest-coverage-results.github.io/coverage_html/index.html


Get a complete design stack
Get to know DashCore color options
Useful accordion elements
Comply with the hideous EU Cookie Law
Online store home with an outstanding UX
Online store shopping cart
A line of information placed at the end of a page for purposes of identification.


Actor Nicolas Cage, star of such films as Moonstruck and The Rock, is known for his intense on- and off-screen personality, as well as his passion for method acting.
Born in California on January 7, 1964, Nicolas Cage fell in love with acting during a summer class at the American Conservatory Theatre in San Francisco. He got his start in teenage comedies like Fast Times at Ridgemont High and went on to play a wide variety of roles in such films as Raising Arizona, Moonstruck, and Con Air. He received an Academy Award for his role in 1995's Leaving Las Vegas.
Nicolas Cage was born Nicolas Kim Coppola on January 7, 1964, in Long Beach, California, to choreographer Joy Vogelsang and literature professor August Coppola. Cage has two older brothers, Marc and Christopher. He is the nephew of film director Francis Ford Coppola and, as a youth, visited his uncle often at his San Francisco home.
At age 15, Cage fell in love with acting during a summer class at the American Conservatory Theatre in San Francisco. He dropped out of Beverly Hills High School to pursue an acting career, making his debut on television in 1981. He changed his name to Nicolas Cage as a way to separate his identity from that of his famous uncle. He chose the name Cage as a tribute to comic-book superhero Luke Cage.
Cage is known for his edgy, intense personality both on and off the screen, as well as for his passion for method acting. He is said to have had two teeth pulled for his role in Birdy (1984), slashed his arm for Racing With the Moon (1984) and swallowed a live cockroach for Vampire's Kiss (1992). He is also alleged to have destroyed a street vendor's remote-controlled car in a fit of rage while preparing for his role as a mobster in The Cotton Club (1984).
Cage got his start in teenage comedies, with his debut in Fast Times at Ridgemont High (1982, also featuring Sean Penn), followed by a leading role as a punk rocker in Valley Girl (1983). Francis Ford Coppola gave him a small role in his critically acclaimed Rumble Fish (1983). His first serious dramatic role was opposite Matthew Modine in Birdy (1984). This was followed by Coppola's Peggy Sue Got Married (1986), the Coen Brothers' comedy Raising Arizona (1987), Moonstruck (1987, starring Cher), David Lynch's bizarre Wild at Heart (1990), Vampire's Kiss (1992) and the comedy Honeymoon in Vegas (1992).
By 1994, Cage was valued at about $4 million per picture, but agreed to star in Mike Figgis's Leaving Las Vegas (1995) for only $240,000 because of the strength of the role. It paid off- his portrayal of the alcoholic screenwriter earned him a Academy Award and a Golden Globe for Best Actor.
Since 1995, Cage has made a series of action thrillers, including The Rock (1996), Con Air (1997), John Woo's Face/Off (1997, opposite John Travolta), and Brian De Palma's Snake Eyes (1998). In 1998, he starred in the romantic City of Angels with Meg Ryan. After returning to the action genre with the poorly-rated 8MM and headlining Martin Scorsese's dark Bringing Out the Dead in 1999, Cage reportedly received a $20 million paycheck for the action extravaganza Gone in 60 Seconds, costarring Angelina Jolie.
Cage played a more traditional romantic lead in his next two movies, the Christmas 2000 release The Family Man and the World War II-era epic Captain Corelli's Mandolin, starring the much-in-demand actress and Spanish import Penelope Cruz. In December 2002, Cage launched his directorial debut, the $5 million independent film Sonny, about a male gigolo who struggles to free himself from his madam mother. Cage also starred in Adaptation, playing both ill-tempered screenwriter Charlie Kaufman and twin brother Donald. Upcoming projects include costarring with Chow Yun-Fat in director John Woo's action Western Land of Destiny and starring and co-producing Dead to Rights, a movie version of the hugely popular video game. The busy actor also starred in director Jon Turteltaub's 2004 holiday blockbuster National Treasure, playing an archaeologist-historian who believes a treasure map is hidden on the back of the Declaration of Independence.
Cage's relationship with Kristina Fulton, a model, lasted several years, producing a son, Weston Coppola Cage, born in 1992. Cage has been married three times: The first to actress Patricia Arquette in 1995; the second was a short-lived marriage to Lisa-Marie Presley, the only daughter of the late King of Rock and Roll, in August 2002- and most recently, he wed his girlfriend, 20-year-old former waitress Alice Kim, at a private ranch in Northern California in August 2004. The couple announced the birth of a son, Kal-el Coppola Cage, on October 3, 2005.


If you're a business or recruiter Create an account.
Select your current industry or one of interest - join the Zinnovation
Thank you for creating your Zindustree account
To complete the registration, an activation link has been sent to {{user.email}}, which will expire in 24 hours


What is 'scope' and how does it work in JavaScipt?
Global Scope:
This is when variables are defined outside of a function. They can be accessed anywhere within the code.
Local Scope:
This is when a variavle is defined within a function and can only be used within that function.
If variables of the same name are used both globally and locally, the local variable will take precedence.