- Viviane Santos
- Home
- Background
From São Paulo to Vancouver
Hello, I'm Viviane and I was born in São Paulo (Brazil). I´ve lived in Campinas since my studies at Campinas University, and after my degree, I started to work with Distributed Control System. I love science, traveling and meeting people.
I have traveled to different countries on my vacation, experiencing new habits, customs, food, activities and landscapes. I visited Canada for the first time in 2016 and I fell in love with its multicultural and bilingual society, which I had never seen in another country. So, I decided to move to Vancouver due to the climate, hospitality and vibrant atmosphere, to study.
This will be my new journey, my new home !
I decided to study in Vancouver due to more opportunities in computer science area and excellent curriculum of the courses offered. In addition to improving my second language and my curriculum.
Living abroad, it will add an improvement in my ability to work and live in a multicultural team, expanding my knowledge and concepts, in a harmonious and beneficial way. A great leap in my academic and personal training.
I’d like to work with a great team and create an impressive online presence.


Lionel Messi nets injury-time penalty to save Argentina from Uruguay defeat
ARGENTINA 2-2 URUGUAY: The Barcelona superstar score one and made another in Tel Aviv in the battle between South American rivals
by Press Association, https://www.mirror.co.uk/authors/press-association/Lionel Messi converted an added-time penalty as Argentina salvaged a 2-2 draw against their South American rivals Uruguay in a friendly in Tel Aviv.
Three days after marking his return from a three-month international ban by scoring the winner against Brazil, Messi once again underscored his value to his country.
He floated a precise 63rd-minute free-kick from which Sergio Aguero headed home to cancel out Edison Cavani's 34th-minute opener for the home side.
And after Luis Suarez put Uruguay back in front from a set-piece, Messi's persistence paid off after Martin Caceres had been harshly penalised for handball in the box.
Argentina had dominated the early exchanges and came close to breaking the deadlock in the 13th minute when Paulo Dybala had a shot blocked in a crowded box.
Uruguay lost defender Sebastian Coates to an apparent hamstring strain shortly afterwards but they continued to grow into the game with Suarez asserting his presence.
The Uruguayans' patience was rewarded in the 34th minute when Suarez knocked on a superb cross by Lucas Torreira and Cavani had the easy job of poking the ball over the line.
Dybala had the ball in the net four minutes later but it was ruled out for a clear handball, and Messi ended the first period by forcing a save from Martin Campana before setting up Rodrigo De Paul who missed a golden chance.
In a low-key start to the second half, Messi continued to pull his side's strings but there were few chances of note until just past the hour mark, when his free-kick found Aguero to equalise.
Five minutes later Suarez netted to put Uruguay back in front, and despite Argentina's attacks through Dybala and Aguero, Oscar Tabarez's side looked set to hold firm.
When Aguero headed over in the 90th minute it appeared Argentina's last chance had gone.
But when the ball struck Caceres' arm in the fourth minute of added time, Messi took the chance to earn a draw.


Home
About
Games
Contact
Home
About
Games
Contact
Driving Simulator
Play Now
Objectives
Version:
1.1
Drive around
Collect coins
Buy new paint jobs
Don't crash
</>
Patch Notes
Version:
1.1
Minor bug fixes
Huge map changes
Nitro powerups
Free play mode
</>
Known Bugs
Version:
1.1
Lighting off in some areas
Walls can be glitched through
N/A
</>


Home
Browse
{% if success %}
File: {{ full_path }}
Success!
Your image was uploaded successfully
{% endif %}


Introducing a fun, new way to keep your plants healthy and happy!
You need this. Poor Rico (the struggling succulent) needs this.
 We don't need to know about Karen's orchids right now ok?
Customized Schedule
Customize your watering schedule for your plants, and your schedule. Can only water your plants at 3AM? That's cool!
Reminders Built for You
Make technology remind you to water your plants, so you don't have to use precious brain space
Vision
Ok so we'll help you keep from dehydrating your office succulent, but what else?


MUM Golden Dome Market :::: SRM System | Product | Supplier
Hello!
New Product Form
Product Number
Name
Unit Price
Password
Supplier
Slect a Supplier
Supplier1
Supplier2
Date Supplied


Spend Tracker
Contracted
Approved
Adhoc
Sorry, there was a temporary error. Please try again in a minute.
<EMAIL_ADDRESS>User Name
Password
Sign In


1. …
1.1. [IDEA] Event: update-*
'update-before' is called with (page, overlay), where the overlay is relative to some previous state that the receiver might not have, and a reference object, such as one would pass as the first argument on update. For some situations, like event is sufficient. Might be called when the overlay actually changes no data, unlike the other update-* events.
'update-full' is called with (before, after, overlay). This is somewhat more expensive to create, so if update-light is good enough, use that.
'update-after' is called with (ref, overlay), where the overlay has been applied
'update-property is called with (property, value-before, value-after, ref). If you only care about one property, you can hook into this and quickly check if the property is the one you want.
1.2. db.count()
1.3. db.lookup(itemref, property) or (itemref, filter-expr)
a shortcut for a filter that selects that one item, and optionally produces that one property of the item, or the item only when it matches that filter. Often followed by .once('results', …) to see the value if/when it appears, or .on('results', …) to also see when it changes.
1.4. [IDEA] db.select(arrayOfPropertyNames) aka db.project(…)
A performance hint, telling the underlying system that it’s safe to ignore all properties not in the given list. That is, it returns a dbview where no effort is made to report the values of properties not in this list. Could be read as "properties I care about".
If your on-appear listener only looks at three properties, then it’s good to put a .select() for those three properties before the .on(), so no effort is made to transport and even compute the values for those properties.
The default is all defined properties, as per vocabspec.
Behavior is undefined if you update or create with properties not in the select list.
Note that SELECT A WHERE B="FOO" has to be done like:
db.where({b: 'foo'}).select('a')
NOT db.select('a').where({b: 'foo'}) because .where can’t even see b, because it wasn’t passed through by .select('a')
call it db.produce ?
Make it part of the filter options, not really part of db.
1.5. [IDEA] db.join(n)
Returns a read-only dbview containing n-tuples where each position has each element in db.
For example, if db contains {a:1} and {a:2}:
then db.join(2) is {1:{a:1}, 2:{a:1}} {1:{a:1}, 2:{a:2}} {1:{a:2}, 2:{a:1}} {1:{a:2}, 2:{a:2}}
db.join(3) is
{1:{a:1}, 2:{a:1}, 3:{a:1}} {1:{a:1}, 2:{a:1}, 3:{a:2}} ... {1:{a:2}, 2:{a:2}, 3:{a:2}}
This allows relational database joins to be expressed within the datapages formalism. Actually traversing the results of a join is not recommended and might not be supported (an n-way join of a datapage with k pages will have k^n pages). Instead, the join should be followed immediately by a .where, which can implement a more efficient search.
For example, in SQL given tables LIKES (person, food) and FOODFROM (food, origin), the query SELECT person, origin WHERE LIKES.food = FOODFROM.food would be
db.join(2) .where({'1.isLIKE': true, '2.isFOODFROM': true, '1.food': {$valueOfProperty: '2.food'}}) .select(['1.person', '2.origin'])
(Consider making it .joinWhere(n, filterexpr, renames) to avoid issues.)
This can probably be done more cleanly as a virtual page rule:
db.addVirtualPageRule({likes: 'person, food', foodfrom: 'food, origin'}, 'person, origin', (likes, foodfrom)
db.addVirtualPageRule('person, likesFoodFrom', 'person, food', 'food, origin', (likes, foodfrom) => { if (likes.food === foodfrom.food) { return {person: likes.person, likesFoodFrom: foodfrom.origin} } }
It’d be nice to have better filter exprs, like { food: {$wanted: true}, origin: {$exists: true} }
We could do forward chaining just running that blindly, but for backward chaining we’d want a lot more. Maybe
db.$exists = {$exists: true} // etc db.addVirtualPageRule({person: db.$exists, likesFoodFrom: db.$exists}, [{person: db.$exists, food: db.$exists}, {food: {$eq: {$valueOfProperty: '0.food'}}, ...
OR just a simple statement of === join fields. Other relations are less useful for optimizing.
db.join(['food', 'food']) .... that doesn't quite work, I expect.
2. Media Pages
Some datapages have an attached digital media instance, such as a jpeg image or an mp3 audio sample. This attachment is handled efficiently as a "blob", not part of the datapage itself.
Every media page has a mediaType property, which has the normal IANA media type information, like 'image/jpeg'. (Encoding…?)
The media instance data itself can be accessed via a streaming API:
db.mediaReadStrean(page, options) returns a readable stream
db.mediaWriteStream(page, mediaType, options) returns a writable stream
When end() is called on the writable stream , the mediaType will be set and db.mediaReadStream will work.
Concurrency during writes is not allowed: betwen the time mediaWriteStream is called and the stream’s end() function is called, other calls to either of these functions will return null. In theory we should track the open read streams as well. Also, in theory, we could just pause the non-winning readers and writers, rather than returning null. Tricky.
(When there’s an attached webserver, .mediaURL should also be set)
3. Vocabulary
Every dbview has a .vocab which is a [vocabspec](https://github.com/sandhawke/vocabspec) instance.
4. Instance Types
Various useful classes, nearly all of which implement approx the same dbview interface, in roughly increasing order of complexity:
4.1. Filestore: on disk, each page is its own file
4.2. [PLANNED] Cache: wrapper which caches some/all of the underlying db
4.3. [PLANNED] Multisource: wrapper for 1-write N-read dbs, appearing as one db
Wraps a db, also implementing .attach(dbN) for including other read-only dbs. Queries query them as well and merge the results.
Writes just go back to primary db.
BUT, depending on our delta model, etc, writes might APPEAR to change the data, by blocking data from other sources. That part’s not quite there yet.
4.3.1. db.include()
4.4. [IDEA] Accesscontrolled: gives a partial view of a db based on 'user' attributes
-
parameterized by uid and a trusted authinfo db
4.5. [IDEA] Rulebase: computes virtual properties, virtual pages, and checks validity
-
with accessControled allows sophisticated rules
-
probably needs a way to run safe JS functions
start with backchainsubproperty and forwardchainsubproperty then bcdatalog and fcdatalog then bcHorn, probably
4.6. [IDEA] EqualityReasoner
Gives a view of the data where some obj’s are "about" the same thing, and so the data from one carries over to the other. For example:
db.add({ name: "Alice", age: 30 })
db.add({ name: "Alice", hairColor: "dark" })
db.addKey('name')
db.forEach(x => {
// x = { name: 'Alice', age:30, hairColor: 'dark' }
})
uhhhhh. Can’t really be done with current API
Except, if N pages can be merged, the db creates a new page, and db.mergedInto(p1, pmergerd) db.mergedInto(p2, pmergerd)
BUT that would still show through p1 and p2
db.filter({__smooshedIfPossible: true}).forEach( ... )
db.on('replace', ... ) or 'merge'N
... p1 and p2 go away, and you get a new one?
THIS SEEMS OBSCURE, but actually, it’s essential to making decentralization work!
Do we need to change dbview?
? can you compare with ===
I think so, because of pointers / graphs
4.6.1. db.addKey (prop)
4.6.2. db.isSameSubjectAs (a, b)
4.6.3. db.makeSameSubjectAs (a, b)
4.6.4. db.isSamePageAs (a, b)
4.6.5. db.makeSameSubjectAs (a, b)
4.6.6. db.refmod(property, type)
Set the "reference mode" for given property to be given type, which is one of: page, subject, …
Needs to be known for every property…. Do we default to 'subject' unless you say 'page'
4.7. [IDEA] vocabularyMapped view
basically run vocabspec convert on all data going in or out
easy to test inmem
might be used by rule engine to recognize its own vocabulary without conflicting with anyone elses.


A markup language is a computer language that uses tags to define elements within a document. Markup languages are used to annotate a document in a way that is syntactically distinguishable from the text, and can assign semantic meaning to the text.
Types of markup languages
Presentational markup - used by traditional word-processing systems, implemented as binary codes embedded within document text (e.g. Microsoft Word).
Procedural markup - markup is embedded in text, which then provides instructions for programs to process the text (e.g. TeX).
Descriptive (logical) markup - markup is used to label parts of the document rather than to provide specific instructions as to how they should be processed (e.g. HTML).
HyperText Markup Language (HTML) is the standard markup language for documents designed to be displayed in a web browser.
HTML consists of a series of elements, which you use to enclose, wrap, or mark up different parts of the content to make it appear or act a certain way.
The browser parses the HTML to construct the DOM tree.
The DOM tree is used to construct a render tree.
A layout is generated from the render tree.
The render three is painted to the screen according to the generated layout.


Graduate and undergraduate students in computer science will be presenting posters on their latest research and projects.
Students will have demonstrations of just some of the amazing working being done in the computer science department.
Food will be served.
A keynote on one of the most pressing matters in our modern world, cyber security.


We are a global travel specialist with over 30 years experience advising people on business, family holiday, and adventure travel abroad. We offer a unique range of flights, accommodation, tours and expeditions. We are conveniently located in London, Lagos, and Abuja. Please contact us for all your flight arrangement needs.
Learn MoreWe tailor our tours to your specific needs and budget. We handle all the logistics, so you can spend your time at ziyarat and prayers during your stay in Saudi Arabia. Our packages inlcude round trip airfare from London, Lagos, or Abuja. 4-5 star hotel accomodations within walking distance of Haramain Sharifain.
Learn MoreWe guarantee that all of our clients have the best experience possible. We are passionate about insuring that all of our clients needs are met with enthusiasm. A few of the accomodations we can provice include visa application support and local tour guides. Please note any needs you or your party may have when you make your reservation.
Learn MoreAbuja <> Lagos <> London
P:079 8 410-2323
P:079 6 633-0069
E<EMAIL_ADDRESS>H: Monday - Friday: 9:00 AM to 5:00 PM


--- layout: product.hbs title: "Cree LED Light Bar, LED Offroad Light, LED Search Light, LED Work Light, LED Automobile Lamp, Vehicle Replace Bulb, China LED Light Bar Suppliers Manufacturers, Cree LED Light Bar Wholesalers" description: "MICZE has a strong technical force of production Cree LED Light Bar Offroad, LED Truck Light, LED Work Light, and we are China LED Light Bar Suppliers Manufacturers, LED Light Bar Wholesalers" keywords: - Cree LED Light Bar Offroad - LED Light Bar USA/Dubai/Canada/Australia - LED Light Bar for trucks - "LLB-1-120W" - "LLB-3A-120W" - LED Offroad Light - LED Truck Light - Agriculture Light - China LED Light Bar Suppliers Manufacturers - Cree LED Light Bar Wholesalers - LED Work Light - LED Search Light ---
|
LED LIGHT BAR - 1C Series |
||||||||||||||||||||||||||||||||||||||||||||||||||
|
LED LIGHT Bar |
||||||||||||||||||||||||||||||||||||||||||||||||||
|
MODEL NO:
|
Feature: • Operation Voltage: 10-30VDC • Waterproof rate: IP67 • Color: Black • Color Temperature: 6000K • Material: Extrusion die aluminum housing • Lens material: PC • Mounting Bracket: Alu firm bracket • Beam: Flood beam pattern/Spot beam pattern/Combo beam • 30000 hours above life time |
|||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||


Numerical Optimization Routine¶
In [OMYS17] it is suggested to use the ESS algorithm in the MEIGO toolbox to solve the constrained global optimization problem. Although evolutionary algorithms such as ESS can perform very well, they often need to be coupled with multi-start procedures to produce sensible results for complex reaction networks. In addition to this, to use the MEIGO toolbox within Python, a Python interface to R is required. This is not desirable, and for this reason we have constructed our own multi-start routine that compares favorably with the ESS routine for a general class of reaction networks.
The optimization routine utilizes two steps to achieve a minimization of the objective function:
- Multi-level feasible point method
- Hybrid global-local searches beginning at the feasibility points
Feasible Point Method¶
Both the mass conservation and semi-diffusive approach have constraints on the decision vector provided. These extra constraints coupled with the global optimization problem are difficult to solve and can often require many multi-starts to find a solution. This is due to the fact that multi-start routines often start at randomly generated values pulled from a uniform distribution, which do not satisfy the constraints. One way to begin the multi-start procedure in favorable positions is to generate starting points that already satisfy the constraints of the problem. We do this by conducting a feasible point method.
The feasible point method attempts to minimize the following objective function
where are violation functions for the constraint equations, , and variable bounds, . The violation functions are defined as follows
| Constraint Type | Violation Function |
|---|---|
| Variable Bounds | Violation Function |
|---|---|
this is called a penalty method and is outlined in Chapter 18 of [Chi14]. For the mass conservation approach the constraint equations are defined as , where are the species’ concentration expressions derived from the equilibrium manifold. The variable bounds for this approach are then defined by the bounds established for the decision vector. For the semi-diffusive approach the constraint equations are defined as if is a key species. Note that the constraint of if is not a key species is not considered in the optimization directly as they are satisfied by direct substitution. The variable bounds are again the bounds established for the decision vector. Notice that in both approaches we do not consider the rank constraints. In practice these are very difficult to satisfy via direct optimization. However, if the objective function is minimized, then the rank constraints have a very high likelihood of being satisfied.
Once the penalty function is constructed we can then continue by minimizing it. We do this by conducting a multi-level multi-start method. First we generate a user defined amount of decision vectors using a random uniform distribution and then put them in the user defined bounds. Next, we minimize using SciPy’s SLSQP function with a tolerance of 1e-16. Although it is often sufficient to just run SLSQP, in some cases if a minimum of zero is not achieved by this run, it is beneficial to also perform a minimization using Nelder-Mead starting from the minimum point found by SLSQP. To reduce runtimes, we do not run the Nelder-Mead routine if SLSQP returns an objective function value that is sufficiently small.
Hybrid Global-Local Searches¶
Using those decision vectors produced by the feasible point method, we now address the global optimization problem. For the mass conservation approach we let the objective function be:
,
and for the semi-diffusive approach we let the objective function be:
,
where is the objective function formed by the feasible point method. Using the decision vectors produced by the feasible point method as starting points, we then run SciPy’s global optimization algorithm Basin-hopping. In addition to running this global optimization, we employ Nelder-Mead as a local minimizer. If the local minimizer returns an objective function value smaller than a user defined value of sys_min_val, then the result solution array from the minimizer is saved and returned to the user.
Pseudocode for Optimization Method¶
Establish bounds for decision vector.
Randomly generate parameter sets of decision vectors within the given bounds, say .
for to
Let be a starting point for the feasible point method where is the objective function
- if provides machine epsilon
Run hybrid global-local search for objective function with as starting point, providing .
Store and function values that are smaller than sys_min_val
- else
- Throw away


These functions are the R wrappers of
effect(),
hide(),
show() in jQuery UI library.
A string indicating which jQuery UI effect to use for the transition.
A list of effect-specific properties and easing.
A string or number determining how long the animation will run.
A function to call once the animation is complete, called once per matched element.
jqui_effect
Apply an animation effect to matched element(s).
jqui_hide
Hide the matched element(s) with animation effect.
jqui_show
Display the matched element(s) with animation effect.
jqui_toggle
Display or hide the matched element(s) with animation effect.
## Not run: ------------------------------------ # # in shiny ui create a plot # plotOutput('foo') # # # in shiny server apply a 'bounce' effect to the plot # jqui_effect('#foo', 'bounce') # # # in shiny server hide the plot with a 'fold' effect # jqui_hide('#foo', 'fold') # # # in shiny server show the plot with a 'blind' effect # jqui_show('#foo', 'blind') ## ---------------------------------------------


track your
lifestyle
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore hic quaerat autem ullam delectus perspiciatis alias recusandae vero. Ratione eaque repellat maiores nulla, veritatis rerum unde!
Easily manage your inspiration and work-in-progress by dragging images into projects and sharable client groups. Easily manage your inspiration. and
Explore more →Easily manage your inspiration and work-in-progress by dragging images into projects and sharable client groups.
Explore more →Easily manage your inspiration and work-in-progress by dragging images into projects and sharable client groups. Easily manage your inspiration.
Explore more →Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempore hic quaerat autem ullam delectus perspiciatis alias recusandae vero. Ratione eaque repellat maiores nulla, veritatis rerum unde!
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quibusdam, laborum adipisci, dolor at, doloremque qui ullam hic non necessitatibus quos rem sint nam fuga quasi, tenetur.


Hi my name is Donna Im going to tell you about my Hobbie, my Interests, My hometown,and What I want to be when I when i grow up. artist, and solo singers, and .Info about Is me Im 15 my birthday is December 19 I was born In 2002 I like many music bands and I like many solo artist.For bands I like My chemical romance,Panic! At The Disco,Sleeping With Sirens,One Direction,Five Second Of Summer and Pentatonix.For solo singers I like ED Sheeren,Niall Horan,Harry Styles,Liam Payne,Louis Tomlinson,Zayn Malik.Charlie Puth,Adam Lambert,Sam Smith,and Calum Scott.


Set 301 redirects (if a directory without '/' at end, then automatically redirect with a '/' at end. This
allows the href to be relative to the directory). ("301" SP (srcName) SP (destName))*
Set whether paths are case sensitive or not. "CaseSensitivePaths" SP (true/false)
Set max connections in backlog. "Backlog" SP (number)
Set whether a request for a directory shows the directory listings or a 404 page. "DirListings" SP (true/false)


Preparation time
30 mins to 1 hour
Cooking time
30 mins to 1 hour
Serves
Serves 4
Season the fish. Heat one tablespoon olive oil and the butter in a medium frying pan.
Fry the fish skin-side down. Do not move the fish about in the pan or it will break up - allow the skin to become a deep golden brown (about 3-4 minutes) before turning carefully.
Cook for a further two minutes to brown the other side, then remove from the pan and place on the lined baking sheet.
Allow the fillets to cool, then cover tightly with foil and refrigerate until 15 minutes before they are to be served.
Prepare the rôsti by parboiling the potatoes in their skins (about 10 minutes in salted water).
Drain and allow to cool for five minutes. Peel the potatoes and grate using a coarse grater.
Place the grated potatoes into a large mixing bowl. Add the sliced spring onions, and season well. Mix using a fork.
Using a pastry ring or your hands, mould a large handful of the potato mixture into a neat round patty shape, about 3 cm thick.
Chill for at least 30 minutes.
Shallow fry the rôsti until golden brown on each side. Do not move them about in the pan or they will break up and cannot colour evenly. Set aside until 15 minutes before they will be served.
When ready to serve, preheat oven to 200C/400F/Gas 6. Cook the rôsti in the hot oven for 12 minutes until piping hot throughout. Half way through the rôsti cooking time, add the halibut to the oven.
Roast for 6-8 minutes or until firm to the touch and the flesh is opaque throughout.
Meanwhile, prepare the sauce. Put the shallot or onion, vinegar, and wine water into a small pan.
Boil over a medium high heat until reduced by half. Take the pan off the heat, add cream and gradually whisk in the pieces of butter, a few at a time, to build up a light emulsion. Place a rôsti on each plate. Top with the halibut. Add the sorrel to the sauce then carefully pour it around each rôsti.


 His relationship with his older sister Nadine is somewhat tempestuous. The two enjoy playing together, and there is genuine affection between them, but Nadine is jealous of all the attention that Olivier gets from their mother. It's obvious to both children who the favorite is. Tension is present in the marriage Olivier's parents Serge (Francois Cluzet) and Elizabeth (Brigitte Rouan), one of the causes of which is Elizabeth's babying of Olivier. Then, one day while running an errand for his father, Olivier disappears. Police and civilian investigations turns up nothing. Nadine is devastated and the marriage of Serge and Elizabeth can't weather the strain. The scene then switches to six years later in Paris, where a young boy claiming to be Olivier (Gregoire Colin) and knowing a lot about his life and family, appears.
In many ways, the central story of OLIVIER OLIVIER is a cross between the French film THE RETURN OF MARTIN GUERRE and the Josephine Tey novel BRAT FERRAR. Both deal about the re-appearance of someone believed dead. However, where BRAT FERRAR and MARTIN GUERRE focus primarily on questions of identity, OLIVIER OLIVIER is more concerned with the dynamics of a family.
That's not to say that the mystery in OLIVIER OLIVIER is any less intriguing or satisfying than that in the other two stories. Indeed, many of the elements that make MARTIN GUERRE so beguiling are present here. We may suspect the truth early on, but it isn't until the last few scenes when we find out for sure. The ultimate resolution of OLIVIER OLIVIER's mysteries is satisfying.
The movie takes approximately a half-hour to strike into the meat of the story, but it is thirty minutes well-spent. We are given an opportunity to get to know the characters in all their complexity. Great care is also taken in making the setting real. We are given a sense of where this film takes place and how it is that a child can disappear with so little trace.
The dynamics of the family, both before and after Olivier's disappearance, are fascinating--as well as genuine. Of special interest is the love/hate relationship between Olivier and his sister, and the way that Nadine's often-extreme jealousy works into the mix. Of all the interaction in the movie, that between these two stands out.
As is almost always the case with French-made films that reach screens in the United States, the acting is superb. All four leads play their roles flawlessly. Perhaps the most difficult and convincing task is given to Marina Golovine, and she carries it off with aplomb. Brigitte Rouan's Elizabeth is in some ways reminiscent of Susan Sarandon's character in LORENZO'S OIL.
OLIVIER OLIVIER is not a film without problems. There are some unanswered questions that nag at the viewer's mind and the eerie, mystical powers attributed to Nadine serve little purpose. The story could have been as strong--if not stronger--without them.
Overall, however, this is a powerful and effective film that works equally well as a drama and a mystery. It's pace is slow, but it is never dull. Director/writer Agnieszka Holland has crafted a film that is heads-and-shoulders above EUROPA EUROPA, her well-received, but melodramatic, previous effort. Where that movie occasionally sputtered, this one sails through clearly to a memorable conclusion.
Rating: 9.3 (A, ***1/2)
- 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


First, I have to say I take DXM in high doses, but haven't taken ketamine yet. So I just wanted to give methoxetamine a cautious try for my first time with it. I was with my boyfriend. We snorted 20mg each. I began to feel real, though light effects at about ten minutes, with a little dizziness and an enhanced enjoyment of music. At + 20 minutes, I'm at a '++' on the Shulgin scale. I am very disgusted by tobacco when on DXM, but this time, I feel like having a cigarette, so we smoke one. It's OK but I know I won't want to have another. I'm getting like a GHB effect without the drunkenness, mixed with a DXM effect without the confusion. We're at + 30 mn.
At + 40 mn, I'm set on a 'plus three' and enjoying it. I think that I could take this product at a party, but it's not extremely social, I would not enjoy shrieking laughs or too many people. At + 50mn, I think to myself that sex would be fine, but the idea doesn't impose itself, and my boyfriend is having fun with other thoughts, so I don't tell him and just listen to the music (which is definitely a good part of the trip).
At one hour and ten minutes, we take the decision to go out and buy some cider. Walking in the street is very pleasant, cloud-like. We don't seem to act too strange with the missus at the supermarket. At home, we enjoy the peak of effects for a little while, then it begins to go down, and at three hours I'm not back at baseline, but pretty much normal, although with a little anxiety (I then take a little -very little-
phenazepam). I feel good overall, it has been a peaceful and happy experience.
So at this dosage, it was pretty much like a low dose of DXM and a 'perfect' dose of GHB, without their bad side-effects, for me and my boyfriend. I think we'll try 30mg next time, to get fuller and maybe longer effects. It didn't feel neurotoxic at all.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


Alibaba confirms huge Hong Kong public listing worth at least $13 billion
The enormous IPO will come as a boost for authorities wrestling with pro-democracy protests that have tarnished the financial hub's image for order and security and hammered its stock market
by Agence France-PresseSubscribe
Email Address
Newsletters
- Glenda Gloria's Take this Tuesday
- Huddle by Miriam Grace Go
- The Newsbreak Agenda by Chay Hofileña
- Sometimes, all you need is video by Lilibeth Frondoso


1 Asking Business Questions From a Single Table
This chapter explores:
- Issues that come up when investigating a single table from a business perspective
- Show the multiple data anomalies found in a single AdventureWorks table (salesorderheader)
- The interplay between “data questions” and “business questions”
The previous chapter has demonstrated some of the automated techniques for showing what’s in a table using some standard R functions and packages. Now we demonstrate a step-by-step process of making sense of what’s in one table with more of a business perspective. We illustrate the kind of detective work that’s often involved as we investigate the organizational meaning of the data in a table. We’ll investigate the salesorderheader
table in the sales
schema in this example to understand the sales profile of the “AdventureWorks” business. We show that there are quite a few interpretation issues even when we are examining just 3 out of the 25 columns in one table.
For this kind of detective work we are seeking to understand the following elements separately and as they interact with each other:
- What data is stored in the database
- How information is represented
- How the data is entered at a day-to-day level to represent business activities
- How the business itself is changing over time
1.1 Setup our standard working environment
Use these libraries:
library(tidyverse)
library(DBI)
library(RPostgres)
library(connections)
library(glue)
require(knitr)
library(dbplyr)
library(sqlpetr)
library(bookdown)
library(here)
library(lubridate)
library(gt)
library(scales)
theme_set(theme_light())
Connect to adventureworks
. In an interactive session we prefer to use connections::connection_open
instead of dbConnect
sp_docker_start("adventureworks")
Sys.sleep(sleep_default)
con <- dbConnect(
RPostgres::Postgres(),
# without the previous and next lines, some functions fail with bigint data
# so change int64 to integer
bigint = "integer",
host = "localhost",
port = 5432,
user = "postgres",
password = "postgres",
dbname = "adventureworks")
Some queries generate big integers, so we need to include RPostgres::Postgres()
and bigint = "integer"
in the connections statement because some functions in the tidyverse object to the bigint datatype.
1.2 A word on naming
You will find that many tables will have columns with the same name in an enterprise database. For example, in the AdventureWorks database, almost all tables have columns named
rowguid
andmodifieddate
and there are many other examples of names that are reused throughout the database. Duplicate columns are best renamed or deliberately dropped. The meaning of a column depends on the table that contains it, so as you pull a column out of a table, when renaming it the collumns provenance should be reflected in the new name.Naming columns carefully (whether retrieved from the database or calculated) will pay off, especially as our queries become more complex. Using
soh
as an abbreviation of sales order header to tag columns or statistics that are derived from thesalesorderheader
table, as we do in this book, is one example of an intentional naming strategy: it reminds us of the original source of the data. You, future you, and your collaborators will appreciate the effort no matter what naming convention you adopt. And a naming convention when rigidly applied can yield some long and ugly names.In the following example
soh
appears in different positions in the column name but it is easy to guess at a glance that the data comes from thesalesorderheader
table.Naming derived tables is just as important as naming derived columns.
1.3 The overall AdventureWorks sales picture
We begin by looking at Sales on a yearly basis, then consider monthly sales. We discover that half way through the period represented in the database, the business appears to begin selling online, which has very different characteristics than sales by Sales Reps. We then look at the details of how Sales Rep sales are recorded in the system and discover a data anomaly that we can correct.
1.4 Annual sales
On an annual basis, are sales dollars trending up, down or flat? We begin with annual revenue and number of orders.
annual_sales <- tbl(con, in_schema("sales", "salesorderheader")) %>%
mutate(year = substr(as.character(orderdate), 1, 4)) %>%
group_by(year) %>%
summarize(
min_soh_orderdate = min(orderdate, na.rm = TRUE),
max_soh_orderdate = max(orderdate, na.rm = TRUE),
total_soh_dollars = round(sum(subtotal, na.rm = TRUE), 2),
avg_total_soh_dollars = round(mean(subtotal, na.rm = TRUE), 2),
soh_count = n()
) %>%
arrange(year) %>%
select(
year, min_soh_orderdate, max_soh_orderdate, total_soh_dollars,
avg_total_soh_dollars, soh_count
) %>%
collect()
Note that all of this query is running on the server since the collect()
statement is at the very end.
## Classes 'tbl_df', 'tbl' and 'data.frame': 4 obs. of 6 variables:
## $ year : chr "2011" "2012" "2013" "2014"
## $ min_soh_orderdate : POSIXct, format: "2011-05-31" "2012-01-01" ...
## $ max_soh_orderdate : POSIXct, format: "2011-12-31" "2012-12-31" ...
## $ total_soh_dollars : num 12641672 33524301 43622479 20057929
## $ avg_total_soh_dollars: num 7867 8563 3076 1705
## $ soh_count : int 1607 3915 14182 11761
We hang on to some date information for later use in plot titles.
1.4.1 Total sales by year
ggplot(data = annual_sales, aes(x = year, y = total_soh_dollars)) +
geom_col() +
geom_text(aes(label = round(as.numeric(total_soh_dollars), digits = 0)), vjust = -0.25) +
scale_y_continuous(labels = scales::dollar_format()) +
labs(
title = "AdventureWorks Total Sales by Year",
x = glue("Years between ", {format(min_soh_dt, "%B %d, %Y")} , " and ",
{format(max_soh_dt, "%B %d, %Y")}),
y = "Sales $"
)
Both 2011 and 2014 turn out to be are shorter time spans than the other two years, making comparison interpretation difficult. Still, it’s clear that 2013 was the best year for annual sales dollars.
1.4.2 Total order volume
Comparing the number of orders per year has roughly the same overall pattern (2013 ranks highest, etc.) but the proportions between the years are quite different.
ggplot(data = annual_sales, aes(x = year, y = as.numeric(soh_count))) +
geom_col() +
geom_text(aes(label = round(as.numeric(soh_count), digits = 0)), vjust = -0.25) +
labs(
title = "Total Number of orders by year",
x = glue("Years between ", {format(min_soh_dt, "%B %d, %Y")} , " and ",
{format(max_soh_dt, "%B %d, %Y")}),
y = "Total Number of Orders"
)
Although 2013 was the best year in terms of total number of orders, there were many more in 2014 compared with 2012. That suggests looking at the average dollars per sale for each year.
1.4.3 Average dollars per sale
ggplot(data = annual_sales, aes(x = year, y = avg_total_soh_dollars)) +
geom_col() +
scale_y_continuous(labels = scales::dollar_format()) +
geom_text(aes(label = round(avg_total_soh_dollars, digits = 0)), vjust = -0.25) +
labs(
title = "Yearly Average Dollars per Sale",
x = glue("Years between ", {format(min_soh_dt, "%B %d, %Y")} , " to ",
{format(max_soh_dt, "%B %d, %Y")}),
y = "Average Sale Amount"
)
That’s a big drop between average sale of more than $7,000 in the first two years down to the $3,000 range in the last two. There has been a remarkable change in this business. At the same time the total number of orders shot up from less than 4,000 a year to more than 14,000. Why are the number of orders increasing, but the average dollar amount of a sale is dropping?
Perhaps monthly monthly sales has the anser. We adapt the first query to group by month and year.
1.5 Monthly Sales
Our next iteration drills down from annual sales dollars to monthly sales dollars. For that we download the orderdate as a date, rather than a character variable for the year. R handles the conversion from the PostgreSQL date-time to an R date-time. We then convert it to a simple date with a lubridate
function.
The following query uses the postgreSQL function date_trunc
, which is equivalent to lubridate
’s round_date
function in R. If you want to push as much of the processing as possible onto the database server and thus possibly deal with smaller datasets in R, interleaving postgreSQL functions into your dplyr code will help.
monthly_sales <- tbl(con, in_schema("sales", "salesorderheader")) %>%
select(orderdate, subtotal) %>%
mutate(
orderdate = date_trunc('month', orderdate)
) %>%
group_by(orderdate) %>%
summarize(
total_soh_dollars = round(sum(subtotal, na.rm = TRUE), 2),
avg_total_soh_dollars = round(mean(subtotal, na.rm = TRUE), 2),
soh_count = n()
) %>%
show_query() %>%
collect()
## <SQL>
## SELECT "orderdate", ROUND((SUM("subtotal")) :: numeric, 2) AS "total_soh_dollars", ROUND((AVG("subtotal")) :: numeric, 2) AS "avg_total_soh_dollars", COUNT(*) AS "soh_count"
## FROM (SELECT date_trunc('month', "orderdate") AS "orderdate", "subtotal"
## FROM sales.salesorderheader) "dbplyr_004"
## GROUP BY "orderdate"
Note that
date_trunc('month', orderdate)
gets passed through exactly “as is.”
In many cases we don’t really care whether our queries are executed by R or by the SQL server, but if we do care we need to substitute the postgreSQL
equivalent for the R functions we might ordinarily use. In those cases we have to check whether functions from R packages like lubridate
and the equivalent postgreSQL
functions are exactly alike. Often they are subtly different: in the previous query the postgreSQL
function produces a POSIXct
column, not a Date
so we need to tack on a mutate function once the data is on the R side as shown here:
Next let’s plot the monthly sales data:
ggplot(data = monthly_sales, aes(x = orderdate, y = total_soh_dollars)) +
geom_col() +
scale_y_continuous(labels = dollar) +
theme(plot.title = element_text(hjust = 0.5)) +
labs(
title = glue("Sales by Month\n", {format(min_soh_dt, "%B %d, %Y")} , " to ",
{format(max_soh_dt, "%B %d, %Y")}),
x = "Month",
y = "Sales Dollars"
)
That graph doesn’t show how the business might have changed, but it is remarkable how much variation there is from one month to another – particularly in 2012 and 2014.
1.5.1 Check lagged monthly data
Because of the month-over-month sales variation. We’ll use dplyr::lag
to help find the delta and later visualize just how much month-to-month difference there is.
monthly_sales <- arrange(monthly_sales, orderdate)
monthly_sales_lagged <- monthly_sales %>%
mutate(monthly_sales_change = (dplyr::lag(total_soh_dollars)) - total_soh_dollars)
monthly_sales_lagged[is.na(monthly_sales_lagged)] = 0
## [1] -221690.505
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -5879806.05 -1172995.19 -221690.51 11968.42 1159252.70 5420357.17
The average month over month change in sales looks OK ($ 11,968) although the Median is negative: $ 11,968. There is a very wide spread in our month-over-month sales data between the lower and upper quartile. We can plot the variation as follows:
ggplot(monthly_sales_lagged, aes(x = orderdate, y = monthly_sales_change)) +
scale_x_date(date_breaks = "year", date_labels = "%Y", date_minor_breaks = "3 months") +
geom_line() +
# geom_point() +
scale_y_continuous(limits = c(-6000000,5500000), labels = scales::dollar_format()) +
theme(plot.title = element_text(hjust = .5)) +
labs(
title = glue(
"Monthly Sales Change \n",
"Between ", {format(min_soh_dt, "%B %d, %Y")} , " and ",
{format(max_soh_dt, "%B %d, %Y")}
),
x = "Month",
y = "Dollar Change"
)
It looks like the big change in the business occurred in the summer of 2013 when the number of orders jumped but the dollar volume just continued to bump along.
1.5.2 Comparing dollars and orders to a base year
To look at dollars and the number of orders together, we compare the monthly data to the yearly average for 2011.
start_year <- monthly_sales %>%
mutate(yr = year(orderdate)) %>%
group_by(yr) %>%
summarize(
total_soh_dollars = sum(total_soh_dollars),
soh_count = sum(soh_count),
n_months = n(),
avg_dollars = total_soh_dollars / n_months,
avg_count = soh_count / n_months
) %>%
filter(yr == min(yr))
Use 2011 as a baseline:
## # A tibble: 1 x 6
## yr total_soh_dollars soh_count n_months avg_dollars avg_count
## <dbl> <dbl> <int> <int> <dbl> <dbl>
## 1 2011 12641672. 1607 8 1580209. 201.
Express monthly data relative to 2011`
monthly_sales_base_year_normalized_to_2011 <- monthly_sales %>%
mutate(
dollars = (100 * total_soh_dollars) / start_year$avg_dollars,
number_of_orders = (100 * soh_count) / start_year$avg_count
) %>%
ungroup()
monthly_sales_base_year_normalized_to_2011 <- monthly_sales_base_year_normalized_to_2011 %>%
select(orderdate, dollars, `# of orders` = number_of_orders) %>%
pivot_longer(-orderdate,
names_to = "relative_to_2011_average",
values_to = "amount"
)
monthly_sales_base_year_normalized_to_2011 %>%
ggplot(aes(orderdate, amount, color = relative_to_2011_average)) +
geom_line() +
geom_hline(yintercept = 100) +
scale_x_date(date_labels = "%Y-%m", date_breaks = "6 months") +
labs(
title = glue(
"Adventureworks Normalized Monthly Sales\n",
"Number of Sales Orders and Dollar Totals\n",
{format(min_soh_dt, "%B %d, %Y")} , " to ",
{format(max_soh_dt, "%B %d, %Y")}),
x = "Date",
y = "",
color = "% change from\n 2011 average"
) +
theme(legend.position = c(.3,.75))
1.6 The effect of online sales
We suspect that the business has changed a lot with the advent of online orders so we check the impact of onlineorderflag
on annual sales. The onlineorderflag
indicates which sales channel accounted for the sale, Sales Reps or Online.
1.6.1 Add onlineorderflag
to our annual sales query
annual_sales_w_channel <- tbl(con, in_schema("sales", "salesorderheader")) %>%
select(orderdate, subtotal, onlineorderflag) %>%
collect() %>%
mutate(
orderdate = date(orderdate),
orderdate = round_date(orderdate, "year"),
onlineorderflag = if_else(onlineorderflag == FALSE,
"Sales Rep", "Online"
),
onlineorderflag = as.factor(onlineorderflag)
) %>%
group_by(orderdate, onlineorderflag) %>%
summarize(
min_soh_orderdate = min(orderdate, na.rm = TRUE),
max_soh_orderdate = max(orderdate, na.rm = TRUE),
total_soh_dollars = round(sum(subtotal, na.rm = TRUE), 2),
avg_total_soh_dollars = round(mean(subtotal, na.rm = TRUE), 2),
soh_count = n()
) %>%
select(
orderdate, onlineorderflag, min_soh_orderdate,
max_soh_orderdate, total_soh_dollars,
avg_total_soh_dollars, soh_count
)
Note that we are creating a factor and doing most of the calculations on the R side, not on the DBMS side.
1.6.2 Annual Sales comparison
Start by looking at total sales.
ggplot(data = annual_sales_w_channel, aes(x = orderdate, y = total_soh_dollars)) +
geom_col() +
scale_y_continuous(labels = scales::dollar_format()) +
facet_wrap("onlineorderflag") +
labs(
title = "AdventureWorks Sales Dollars by Year",
caption = glue( "Between ", {format(min_soh_dt, "%B %d, %Y")} , " - ",
{format(max_soh_dt, "%B %d, %Y")}),
subtitle = "Comparing Online and Sales Rep sales channels",
x = "Year",
y = "Sales $"
)
Based on annual sales, it looks like there are two businesses represented in the AdventureWorks database that have very different growth profiles.
1.6.3 Order volume comparison
ggplot(data = annual_sales_w_channel, aes(x = orderdate, y = as.numeric(soh_count))) +
geom_col() +
facet_wrap("onlineorderflag") +
labs(
title = "AdventureWorks Number of orders per Year",
caption = glue( "Between ", {format(min_soh_dt, "%B %d, %Y")} , " - ",
{format(max_soh_dt, "%B %d, %Y")}),
subtitle = "Comparing Online and Sales Rep sales channels",
x = "Year",
y = "Total number of orders"
)
Comparing Online and Sales Rep sales, the difference in the number of orders is even more striking than the difference between annual sales.
1.6.4 Comparing average order size: Sales Reps to Online orders
ggplot(data = annual_sales_w_channel, aes(x = orderdate, y = avg_total_soh_dollars)) +
geom_col() +
facet_wrap("onlineorderflag") +
scale_y_continuous(labels = scales::dollar_format()) +
labs(
title = "AdventureWorks Average Dollars per Sale",
x = glue( "Year - between ", {format(min_soh_dt, "%B %d, %Y")} , " - ",
{format(max_soh_dt, "%B %d, %Y")}),
y = "Average sale amount"
)
1.7 Impact of order type on monthly sales
To dig into the difference between Sales Rep and Online sales we can look at monthly data.
1.7.1 Retrieve monthly sales with the onlineorderflag
This query puts the collect
statement earlier than the previous queries.
monthly_sales_w_channel <- tbl(con, in_schema("sales", "salesorderheader")) %>%
select(orderdate, subtotal, onlineorderflag) %>%
collect() %>% # From here on we're in R
mutate(
orderdate = date(orderdate),
orderdate = floor_date(orderdate, unit = "month"),
onlineorderflag = if_else(onlineorderflag == FALSE,
"Sales Rep", "Online")
) %>%
group_by(orderdate, onlineorderflag) %>%
summarize(
min_soh_orderdate = min(orderdate, na.rm = TRUE),
max_soh_orderdate = max(orderdate, na.rm = TRUE),
total_soh_dollars = round(sum(subtotal, na.rm = TRUE), 2),
avg_total_soh_dollars = round(mean(subtotal, na.rm = TRUE), 2),
soh_count = n()
) %>%
ungroup()
monthly_sales_w_channel %>%
rename(`Sales Channel` = onlineorderflag) %>%
group_by(`Sales Channel`) %>%
summarize(
unique_dates = n(),
start_date = min(min_soh_orderdate),
end_date = max(max_soh_orderdate),
total_sales = round(sum(total_soh_dollars)),
days_span = end_date - start_date
) %>%
gt()
| Sales Channel | unique_dates | start_date | end_date | total_sales | days_span |
|---|---|---|---|---|---|
| Online | 38 | 2011-05-01 | 2014-06-01 | 29358677 | 1127 days |
| Sales Rep | 34 | 2011-05-01 | 2014-05-01 | 80487704 | 1096 days |
As this table shows, the Sales Rep dates don’t match the Online dates. They start on the same date, but have a different end. The Online dates include 2 months that are not included in the Sales Rep sales (which are the main sales channel by dollar volume).
1.7.2 Monthly variation compared to a trend line
Jumping to the trend line comparison, we see that the big the source of variation is on the Sales Rep side.
ggplot(
data = monthly_sales_w_channel,
aes(
x = orderdate, y = total_soh_dollars
)
) +
geom_line() +
geom_smooth(se = FALSE) +
facet_grid("onlineorderflag", scales = "free") +
scale_y_continuous(labels = dollar) +
scale_x_date(date_breaks = "year", date_labels = "%Y", date_minor_breaks = "3 months") +
theme(plot.title = element_text(hjust = .5)) + # Center ggplot title
labs(
title = glue(
"AdventureWorks Monthly Sales Trend"
),
x = glue( "Month - between ", {format(min_soh_dt, "%B %d, %Y")} , " - ",
{format(max_soh_dt, "%B %d, %Y")}),
y = "Sales Dollars"
)
The monthly gyrations are much larger on the Sales Rep side, amounting to differences in a million dollars compared to small monthly variations of around $25,000 for the Online orders.
1.7.3 Compare monthly lagged data by Sales Channel
First consider month-to-month change.
monthly_sales_w_channel_lagged_by_month <- monthly_sales_w_channel %>%
group_by(onlineorderflag) %>%
mutate(
lag_soh_count = lag(soh_count, 1),
lag_soh_total_dollars = lag(total_soh_dollars, 1),
pct_monthly_soh_dollar_change =
(total_soh_dollars - lag_soh_total_dollars) / lag_soh_total_dollars * 100,
pct_monthly_soh_count_change =
(soh_count - lag_soh_count) / lag_soh_count * 100
)
ggplot(monthly_sales_w_channel_lagged_by_month, aes(x = orderdate, y = pct_monthly_soh_dollar_change)) +
scale_x_date(date_breaks = "year", date_labels = "%Y", date_minor_breaks = "3 months") +
scale_y_continuous() +
facet_grid("onlineorderflag", scale = "free") +
geom_line() +
theme(plot.title = element_text(hjust = .5)) + # Center ggplot title
labs(
title = glue(
"Monthly Percent Sales Change \n",
"Comparing Online to Sales Rep Sales"
),
x = paste0("Month - between ",
glue({format(min_soh_dt, "%B %d, %Y")} , " - ",
{format(max_soh_dt, "%B %d, %Y")})),
y = "% Dollar Change"
)
For Sales Reps it looks like the variation is in the number of orders, not just dollars, as shown in the following plot.
ggplot(monthly_sales_w_channel_lagged_by_month, aes(x = orderdate, y = pct_monthly_soh_count_change)) +
scale_x_date(date_breaks = "year", date_labels = "%Y", date_minor_breaks = "3 months") +
facet_grid("onlineorderflag" , scales = "free") +
geom_line() +
theme(plot.title = element_text(hjust = .5)) + # Center ggplot title
labs(
title = glue(
"Monthly Order Volume Change \n",
"Comparing Online to Sales Rep Sales\n",
glue({format(min_soh_dt, "%B %d, %Y")} , " - ",
{format(max_soh_dt, "%B %d, %Y")})
),
x = "Month",
y = "Change number of orders"
)
The last two plots may not be so illuminating. Here’s a table that might be improved.
monthly_sales_w_channel_lagged_by_month %>%
filter(abs(pct_monthly_soh_count_change) > 150 |
abs(pct_monthly_soh_dollar_change) > 150 ) %>%
ungroup() %>%
arrange(onlineorderflag, orderdate) %>%
mutate(
total_soh_dollars = round(total_soh_dollars),
lag_soh_total_dollars = round(lag_soh_total_dollars),
pct_monthly_soh_dollar_change = round(pct_monthly_soh_dollar_change),
pct_monthly_soh_count_change = round(pct_monthly_soh_count_change)) %>%
select(orderdate, onlineorderflag, total_soh_dollars, lag_soh_total_dollars,
soh_count, lag_soh_count, pct_monthly_soh_dollar_change, pct_monthly_soh_count_change) %>%
# names()
gt() %>%
fmt_number(
columns = c(3:4), decimals = 0) %>%
fmt_percent(
columns = c(7:8), decimals = 0) %>%
cols_label(
onlineorderflag = "Channel",
total_soh_dollars = "$ this Month",
lag_soh_total_dollars = "$ last Month",
soh_count = "# this Month",
lag_soh_count = "# last Month",
pct_monthly_soh_dollar_change = "$ change",
pct_monthly_soh_count_change = "# change"
)
| orderdate | Channel | $ this Month | $ last Month | # this Month | # last Month | $ change | # change |
|---|---|---|---|---|---|---|---|
| 2011-06-01 | Online | 458,911 | 14,477 | 141 | 5 | 307,000% | 272,000% |
| 2013-07-01 | Online | 847,139 | 860,141 | 1564 | 533 | −200% | 19,300% |
| 2011-07-01 | Sales Rep | 1,538,408 | 489,329 | 75 | 38 | 21,400% | 9,700% |
| 2012-01-01 | Sales Rep | 3,356,069 | 713,117 | 143 | 40 | 37,100% | 25,800% |
| 2012-03-01 | Sales Rep | 2,269,117 | 882,900 | 85 | 37 | 15,700% | 13,000% |
| 2014-03-01 | Sales Rep | 5,526,352 | 3,231 | 271 | 3 | 17,096,000% | 893,300% |
| 2014-05-01 | Sales Rep | 3,415,479 | 1,285 | 179 | 2 | 26,573,900% | 885,000% |
Let’s examine whether there is a large year-to-year change.
monthly_sales_w_channel_lagged_by_year <- monthly_sales_w_channel %>%
group_by(onlineorderflag) %>%
mutate(
pct_monthly_soh_dollar_change =
total_soh_dollars / (lag(total_soh_dollars, 12)) * 100,
pct_monthly_soh_count_change =
soh_count / (lag(soh_count, 12)) * 100
)
ggplot(
monthly_sales_w_channel_lagged_by_year,
aes(x = orderdate, y = pct_monthly_soh_dollar_change)
) +
scale_x_date(
date_breaks = "year", date_labels = "%Y",
date_minor_breaks = "3 months"
) +
scale_y_continuous(limits = c(-50, 400)) +
facet_grid("onlineorderflag") +
geom_line() +
theme(plot.title = element_text(hjust = .5)) + # Center ggplot title
labs(
title = glue(
"Year-on-Year Change in Total Monthly Sales\n",
"Comparing Online to Sales Rep Sales"
),
x = paste0("Month - between ", min_soh_dt, " - ", max_soh_dt),
y = "% Dollar Change"
)
That’s much more stable than the month-to-month change.
??? Comparing the number of sales orders year over year by month for 2013 and 2012, one can see that the 2013 sales are between 1.2 and 1.8 times larger than the corresponding month of 2012 from January through June. In July the 2013 sales are 5 to 6 times the 2012 sales orders. ???
This trend continues into 2014 before the number of sales plummet to just 1.3 time in June.
We suspect that the business has changed a lot with the advent of Online orders.
1.8 Detect and diagnose the day of the month problem
There have been several indications that Sales Rep sales are recorded once a month while Online sales are recorded on a daily basis.
1.8.1 Sales Rep Orderdate Distribution
Look at the dates when sales are entered for sales by Sales Reps. The following query / plot combination shows this pattern. and the exception for transactions entered on the first day of the month.
tbl(con, in_schema("sales", "salesorderheader")) %>%
filter(onlineorderflag == FALSE) %>% # Drop online orders
mutate(orderday = day(orderdate)) %>%
count(orderday, name = "Orders") %>%
collect() %>%
full_join(tibble(orderday = seq(1:31))) %>%
mutate(orderday = as.factor(orderday)) %>%
ggplot(aes(orderday, Orders)) +
geom_col() +
coord_flip() +
labs(title = "The first day of the month looks odd",
x = "Day Number")
## Joining, by = "orderday"
## Warning: Removed 26 rows containing missing values (position_stack).
We can check on which months have orders entered on the first of the month.
sales_rep_day_of_month_sales <- tbl(con, in_schema("sales", "salesorderheader")) %>%
filter(onlineorderflag == FALSE) %>% # Drop online orders
select(orderdate, subtotal) %>%
mutate(
year = year(orderdate),
month = month(orderdate),
day = day(orderdate)
) %>%
count(year, month, day) %>%
collect() %>%
pivot_wider(names_from = day, values_from = n, names_prefix = "day_", values_fill = 0 ) %>%
as.data.frame() %>%
select(year, month, day_1, day_28, day_29, day_30, day_31) %>%
filter(day_1 > 0) %>%
arrange(year, month)
sales_rep_day_of_month_sales
## year month day_1 day_28 day_29 day_30 day_31
## 1 2011 7 75 0 0 0 0
## 2 2011 8 60 0 0 0 40
## 3 2011 10 90 0 0 0 63
## 4 2011 12 40 0 0 0 0
## 5 2012 1 79 0 64 0 0
## 6 2014 3 91 0 0 2 178
## 7 2014 5 179 0 0 0 0
There are two months with multiple sales rep order days for 2011, (11/08 and 11/10), one for 2012, (1201), and two in 2014, (14/01 and 14/03). The 14/03 is the only three day sales rep order month.
Are there months where there were no sales recorded for the sales reps?
There are two approaches. The first is to generate a list of months between the beginning and end of history and compare that to the Sales Rep records
monthly_sales_rep_sales <- monthly_sales_w_channel %>%
filter(onlineorderflag == "Sales Rep") %>%
mutate(orderdate = as.Date(floor_date(orderdate, "month"))) %>%
count(orderdate)
str(monthly_sales_rep_sales)
## Classes 'tbl_df', 'tbl' and 'data.frame': 34 obs. of 2 variables:
## $ orderdate: Date, format: "2011-05-01" "2011-07-01" ...
## $ n : int 1 1 1 1 1 1 1 1 1 1 ...
date_list <- tibble(month_date = seq.Date(floor_date(as.Date(min_soh_dt), "month"),
floor_date(as.Date(max_soh_dt), "month"),
by = "month"),
date_exists = FALSE)
date_list %>%
anti_join(monthly_sales_rep_sales,
by = c("month_date" = "orderdate") )
## # A tibble: 4 x 2
## month_date date_exists
## <date> <lgl>
## 1 2011-06-01 FALSE
## 2 2011-09-01 FALSE
## 3 2011-11-01 FALSE
## 4 2014-06-01 FALSE
- June, September, and November are missing for 2011.
- June for 2014
The second approach is to use the dates found in the database for online orders. Defining “complete” may not always be as simple as generating a complete list of months.
sales_order_header_online <- tbl(con, in_schema("sales", "salesorderheader")) %>%
filter(onlineorderflag == TRUE) %>%
mutate(
orderdate = date_trunc('month', orderdate)
) %>%
count(orderdate, name = "online_count")
sales_order_header_sales_rep <- tbl(con, in_schema("sales", "salesorderheader")) %>%
filter(onlineorderflag == FALSE) %>%
mutate(
orderdate = date_trunc('month', orderdate)
) %>%
count(orderdate, name = "sales_rep_count")
missing_dates <- sales_order_header_sales_rep %>%
full_join(sales_order_header_online) %>%
show_query() %>%
collect()
## Joining, by = "orderdate"
## <SQL>
## SELECT COALESCE("LHS"."orderdate", "RHS"."orderdate") AS "orderdate", "LHS"."sales_rep_count" AS "sales_rep_count", "RHS"."online_count" AS "online_count"
## FROM (SELECT "orderdate", COUNT(*) AS "sales_rep_count"
## FROM (SELECT "salesorderid", "revisionnumber", date_trunc('month', "orderdate") AS "orderdate", "duedate", "shipdate", "status", "onlineorderflag", "purchaseordernumber", "accountnumber", "customerid", "salespersonid", "territoryid", "billtoaddressid", "shiptoaddressid", "shipmethodid", "creditcardid", "creditcardapprovalcode", "currencyrateid", "subtotal", "taxamt", "freight", "totaldue", "comment", "rowguid", "modifieddate"
## FROM (SELECT *
## FROM sales.salesorderheader
## WHERE ("onlineorderflag" = FALSE)) "dbplyr_010") "dbplyr_011"
## GROUP BY "orderdate") "LHS"
## FULL JOIN (SELECT "orderdate", COUNT(*) AS "online_count"
## FROM (SELECT "salesorderid", "revisionnumber", date_trunc('month', "orderdate") AS "orderdate", "duedate", "shipdate", "status", "onlineorderflag", "purchaseordernumber", "accountnumber", "customerid", "salespersonid", "territoryid", "billtoaddressid", "shiptoaddressid", "shipmethodid", "creditcardid", "creditcardapprovalcode", "currencyrateid", "subtotal", "taxamt", "freight", "totaldue", "comment", "rowguid", "modifieddate"
## FROM (SELECT *
## FROM sales.salesorderheader
## WHERE ("onlineorderflag" = TRUE)) "dbplyr_012") "dbplyr_013"
## GROUP BY "orderdate") "RHS"
## ON ("LHS"."orderdate" = "RHS"."orderdate")
missing_dates <- sales_order_header_online %>%
anti_join(sales_order_header_sales_rep) %>%
arrange(orderdate) %>%
collect()
## Joining, by = "orderdate"
## # A tibble: 4 x 2
## orderdate online_count
## <dttm> <int>
## 1 2011-06-01 00:00:00 141
## 2 2011-09-01 00:00:00 157
## 3 2011-11-01 00:00:00 230
## 4 2014-06-01 00:00:00 939
## Classes 'tbl_df', 'tbl' and 'data.frame': 4 obs. of 2 variables:
## $ orderdate : POSIXct, format: "2011-06-01" "2011-09-01" ...
## $ online_count: int 141 157 230 939
And in this case they agree!
discuss February issues. and stuff.
look at each year sepraately as a diagnostic
Use the same pivot strategy on the corrected data.
difference between detective work with a graph and just print it out. “now I see what’s driving the hint.”
We have xx months when we add the month before and the month after the suspicious months. We don’t know whether the problem postings have been carried forward or backward. We check for and eliminate duplicates as well.
- Most of the Sales Reps’ orders are entered on a single day of the month, unique days = 1. It is possible that these are monthly recurring orders that get released on a given day of the month. If that is the case, what are the Sales Reps doing the rest of the month?
- ** ?? The lines with multiple days, unique_days > 1, have a noticeable higher number of orders, so_cnt, and associated so dollars.?? **
1.9 Correcting the order date for Sales Reps
1.9.1 Define a date correction function in R
This code does the date-correction work on the R side:
monthly_sales_rep_adjusted <- tbl(con, in_schema("sales", "salesorderheader")) %>%
filter(onlineorderflag == FALSE) %>%
select(orderdate, subtotal, onlineorderflag) %>%
group_by(orderdate) %>%
summarize(
total_soh_dollars = round(sum(subtotal, na.rm = TRUE), 2),
soh_count = n()
) %>%
mutate(
orderdate = as.Date(orderdate),
day = day(orderdate)
) %>%
collect() %>%
ungroup() %>%
mutate(
adjusted_orderdate = case_when(
day == 1L ~ orderdate -1,
TRUE ~ orderdate
),
year_month = floor_date(adjusted_orderdate, "month")
) %>%
group_by(year_month) %>%
summarize(
total_soh_dollars = round(sum(total_soh_dollars, na.rm = TRUE), 2),
soh_count = sum(soh_count)
) %>%
ungroup()
Inspect:
## Classes 'tbl_df', 'tbl' and 'data.frame': 36 obs. of 3 variables:
## $ year_month : Date, format: "2011-05-01" "2011-06-01" ...
## $ total_soh_dollars: num<PHONE_NUMBER>408 1165897<PHONE_NUMBER>136 ...
## $ soh_count : int 38 75 60 40 90 63 40 79 64 37 ...
## # A tibble: 12 x 3
## year_month total_soh_dollars soh_count
## <date> <dbl> <int>
## 1 2011-05-01 489329. 38
## 2 2011-06-01 1538408. 75
## 3 2011-07-01 1165897. 60
## 4 2011-08-01 844721 40
## 5 2011-09-01 2324136. 90
## 6 2011-10-01 1702945. 63
## 7 2011-11-01 713117. 40
## 8 2011-12-01 1900789. 79
## 9 2014-01-01 2738752. 175
## 10 2014-02-01 2207772. 94
## 11 2014-03-01 3321810. 180
## 12 2014-04-01 3416764. 181
1.9.2 Define and store a PostgreSQL function to correct the date
The following code defines a function on the server side to correct the date:
dbExecute(
con,
"CREATE OR REPLACE FUNCTION so_adj_date(so_date timestamp, ONLINE_ORDER boolean) RETURNS timestamp AS $$
BEGIN
IF (ONLINE_ORDER) THEN
RETURN (SELECT so_date);
ELSE
RETURN(SELECT CASE WHEN EXTRACT(DAY FROM so_date) = 1
THEN so_date - '1 day'::interval
ELSE so_date
END
);
END IF;
END; $$
LANGUAGE PLPGSQL;
"
)
## [1] 0
1.9.3 Use the PostgreSQL function
If you can do the heavy lifting on the database side, that’s good. R can do it, but it’s best for finding the issues.
monthly_sales_rep_adjusted_with_psql_function <- tbl(con, in_schema("sales", "salesorderheader")) %>%
select(orderdate, subtotal, onlineorderflag) %>%
mutate(
orderdate = as.Date(orderdate)) %>%
mutate(adjusted_orderdate = as.Date(so_adj_date(orderdate, onlineorderflag))) %>%
filter(onlineorderflag == FALSE) %>%
group_by(adjusted_orderdate) %>%
summarize(
total_soh_dollars = round(sum(subtotal, na.rm = TRUE), 2),
soh_count = n()
) %>%
collect() %>%
mutate( year_month = floor_date(adjusted_orderdate, "month")) %>%
group_by(year_month) %>%
ungroup() %>%
arrange(year_month)
## # A tibble: 14 x 4
## adjusted_orderdate total_soh_dollars soh_count year_month
## <date> <dbl> <int> <date>
## 1 2011-05-31 489329. 38 2011-05-01
## 2 2011-06-30 1538408. 75 2011-06-01
## 3 2011-07-31 1165897. 60 2011-07-01
## 4 2011-08-31 844721 40 2011-08-01
## 5 2011-09-30 2324136. 90 2011-09-01
## 6 2011-10-31 1702945. 63 2011-10-01
## 7 2011-11-30 713117. 40 2011-11-01
## 8 2011-12-31 1900789. 79 2011-12-01
## 9 2014-01-28 1565. 2 2014-01-01
## 10 2014-01-29 2737188. 173 2014-01-01
## 11 2014-02-28 2207772. 94 2014-02-01
## 12 2014-03-30 7291. 2 2014-03-01
## 13 2014-03-31 3314519. 178 2014-03-01
## 14 2014-04-30 3416764. 181 2014-04-01
There’s one minor difference between the two:
## [1] "Cols in y but not x: `adjusted_orderdate`. "
1.9.4 Monthly Sales by Order Type with corrected dates – relative to a trend line
monthly_sales_rep_as_is <- monthly_sales_w_channel %>%
filter(onlineorderflag == "Sales Rep")
ggplot(
data = monthly_sales_rep_adjusted,
aes(x = year_month, y = soh_count)
) +
geom_line(alpha = .5) +
geom_smooth(se = FALSE) +
geom_smooth(
data = monthly_sales_rep_as_is, aes(
orderdate, soh_count
), color = "red", alpha = .5,
se = FALSE
) +
theme(plot.title = element_text(hjust = .5)) + # Center ggplot title
labs(
title = glue(
"Number of Sales per month using corrected dates\n",
"Counting Sales Order Header records"
),
x = paste0("Monthly - between ", min_soh_dt, " - ", max_soh_dt),
y = "Number of Sales Recorded"
)
monthly_sales_rep_as_is <- monthly_sales_w_channel %>%
filter(onlineorderflag == "Sales Rep") %>%
mutate(orderdate = as.Date(floor_date(orderdate, unit = "month"))) %>%
group_by(orderdate) %>%
summarize(
total_soh_dollars = round(sum(total_soh_dollars, na.rm = TRUE), 2),
soh_count = sum(soh_count)
)
monthly_sales_rep_as_is %>%
filter(year(orderdate) %in% c(2011,2014))
## # A tibble: 10 x 3
## orderdate total_soh_dollars soh_count
## <date> <dbl> <int>
## 1 2011-05-01 489329. 38
## 2 2011-07-01 1538408. 75
## 3 2011-08-01 2010618. 100
## 4 2011-10-01 4027080. 153
## 5 2011-12-01 713117. 40
## 6 2014-01-01 2738752. 175
## 7 2014-02-01 3231. 3
## 8 2014-03-01 5526352. 271
## 9 2014-04-01 1285. 2
## 10 2014-05-01 3415479. 179
ggplot(
data = monthly_sales_rep_adjusted,
aes(x = year_month, y = soh_count)
) +
geom_line(alpha = .5 , color = "green") +
geom_point(alpha = .5 , color = "green") +
geom_point(
data = monthly_sales_rep_as_is, aes(
orderdate, soh_count), color = "red", alpha = .5) +
theme(plot.title = element_text(hjust = .5)) + # Center ggplot title
annotate(geom = "text", y = 250, x = as.Date("2011-06-01"),
label = "Green dots: corrected data\nOrange dots: original data\nBrown dots: unchanged",
hjust = 0) +
labs(
title = glue(
"Number of Sales per month \nOriginal and corrected amounts"
),
subtitle = glue("Subtitle"),
caption = glue("Datasets Include: \n
monthly_sales_rep_adjusted, monthly_sales_rep_as_is"),
x = paste0("Monthly - between ", min_soh_dt, " - ", max_soh_dt),
y = "Number of Sales Recorded"
)
mon_sales <- monthly_sales_rep_adjusted %>%
rename(orderdate = year_month)
sales_original_and_adjusted <- bind_rows(mon_sales, monthly_sales_rep_as_is, .id = "date_kind")
Does this graph add anything important?
ggplot(
data = sales_original_and_adjusted,
aes(x = orderdate, y = soh_count, fill = date_kind)
) +
geom_col(position = "dodge") +
theme(plot.title = element_text(hjust = .5)) + # Center ggplot title
labs(
title = glue(
"Number of Sales per month using corrected dates\n",
"Counting Sales Order Header records"
),
subtitle = glue("Subtitle"),
caption = glue("Datasets Include: \n
monthly_sales_rep_adjusted, monthly_sales_rep_as_is"),
x = paste0("Monthly - between ", min_soh_dt, " - ", max_soh_dt),
y = "Number of Sales Recorded",
fill = "Date\nadjustment"
)
additive graph showing how correction adds in some months and subtracts in others.
only show months where there is a mis-match.
ggplot(data = monthly_sales_rep_adjusted, aes(x = year_month, y = total_soh_dollars)) +
geom_line() +
scale_y_continuous(labels = dollar) +
theme(plot.title = element_text(hjust = 0.5)) + # Center the title
labs(
title = glue("Sales by Month - Sales Reps only\n", {format(min_soh_dt, "%B %d, %Y")} , " to ",
{format(max_soh_dt, "%B %d, %Y")}),
x = "Month - Adjusted dates",
y = "Sales Dollars"
)
Sales still seem to gyrate! We have found that sales rep sales data is often very strange.
1.10 Disconnect from the database and stop Docker
## Warning in connection_release(conn@ptr): Already disconnected


Triangle Type?
Side 1:
Side 2:
Side 3:
Find out the type!
Your input of
,
,
is the following:
triangle!


Please type in your old password. This is for your own security, to avoid somebody taking over your account.
Any password will do. We do not set restrictions. But please make sure it is not too easy.
We suggest using a password generator for this: https://xkpasswd.net/s/
This needs to be exactly the same text as entered in the password field. Just to make sure you did not make any typos. :-)


Status: {{ valid }}
Solution is older than {{ageThreshold}} min.
Solution is up to date.
Solution is being refreshed every 30 seconds.
Solution is frozen.
| {{ vms[vm].name }} | {{ vms[vm].status }} |
No VM starts are requested at this moment.
| {{ vms[vm].name }} → {{ hosts[host].name }} | {{ vms[vm].status }} | {{ vms[vm].status }} |
No migrations are needed at this moment. The state is stable.
| memory [all in GB] | ||||||||
|---|---|---|---|---|---|---|---|---|
| host | used | available | ||||||
| vm | guaranteed | maximum | ||||||
| {{ hosts[host].name }} | {{ hosts[host].willusememory / gb | number : 1 }} | {{ hosts[host].memory / gb | number : 1 }} | ||||||
| {{ vms[vm].name }} | {{ vms[vm].memory_policy.guaranteed / gb | number : 1 }} | {{ vms[vm].memory / gb | number : 1 }} | {{ vms[vm].status }} | {{ vms[vm].status }} | ||||
| This host has no VMs. |
This cluster has no hosts.


Our partners form the backbone of research and action. Through partnerships around New Jersey, we are constantly able to better our methods and provide better services to our citizens. Learn more about each partner below:
View our Twitter feed to learn about what is happening at the Jersey City office of Innovation.


--- layout: default title: gojimmypi, jtest page ---
this is a story... la la la wow. Read more about my life...


The 1D Mark IV uses an APS-H-sized 16-megapixel sensor that's "similar in size to a Super 35mm motion picture film frame" with a 1.3x crop factor, and a normal ISO range of 100 to 12,800, with expanded going up to 102,400 ISO. The new 45-point autofocus system has 39 cross-type points and uses a new AI Servo II AF predictive focusing algorithm that's supposed to be faster, which is handy, since it shoots in 10fps bursts.
But, let's talk about video, which Canon isn't too shy of making the star of this camera: You get full manual exposure control, stereo mic input, and 1080p video at 24, 25 or 30fps; 720p and standard def at 50 or 60fps; and the samples, while obviously Canon-vetted, so far look seriously amazing.
There's a new auto-lighting optimizer that automatically adjusts contrast and brightness in-camera that sounds sorta like Nikon's Active D-Lighting. And hurray, a new white balance algorithm that's better at low color temperatures, something that Nikon's typically been better with in the past.
It's coming out in December for $5000. Man, pro DSLRs just got way more interesting again. Six-digit ISO speeds, extreme low-light performance , high-def video: It's a war.


Everyone assembled and we began with lunch.
At 1:00pm, Jack Dongarra opened the meeting by welcoming everyone and inviting everyone to introduce themselves. He then reviewed the ``rules of order'' for the first and second readings of proposals, as well as the voting procedures for the meeting. The structure of the overall BLAS document was briefly reviewed. Each chapter is self-contained consisting of sections on overview, functionality, language independent specificiation, language dependent specification, and the reference implementation, benchmarking, verification, and validation. Debate ensued on whether Extensions should be included in the Dense chapter or the Legacy BLAS appendix/chapter. It was stressed that this list of extensions should be restricted to 2-3 routines.
A straw vote was taken on the inclusion of the Extensions in Legacy BLAS appendix or restrict it to the "Dense and Band BLAS" chapter. Mike Heroux presented the motion, and Tony seconded the motion. Of 20 attendees, 10 attendees voted in favor of its inclusion in the Legacy BLAS chapter, 7 attendees opposed, and 3 attendees abstained.
At 2:00pm, Jim Demmel presented a detailed discussion of the proposed Extended Precision BLAS. He outlined the contents of the proposal, beginning with the motivation behind the need for such routines, presenting specific examples, and proposed language bindings. Lengthy discussion took place regarding the language bindings, with particular concerns raised about the combinatorial explosion of functions required to handle all possible combinations of precisions that could occur for the arguments to functions in the extended precision BLAS. Further discussion was deferred to the upcoming break-out session, and communication via the email reflector.
A short coffee break occurred at 3:45pm.
The meeting was reconvened at 4:00pm, and broke into subgroups. Two subgroups met at 4:00-5:00pm, and two subgroups met at 5:00-6:00pm. The Functionality, Extensions, and Dense and Band BLAS, were combined into one subgroup, which met at 4:00pm. The Sparse BLAS subgroup also met at 4:00pm. At 5:00pm, the Extended Precision subgroup and C subgroup met. Due to conflict of interest, the Distributed Memory and F90 subgroups were postponed until after dinner or tomorrow.
The meeting adjourned at 6:00pm.
At 9:00am, a plenary presentation of the results of yesterday's break-out sessions occurred.
Linda Kaufmann presented a summary of discussions regarding The Functionality/Extensions/Dense BLAS session. The sub-group reviewed Chapters 1 and 2 of the document and tried to outline what should be deleted from the tables due to lack of justification, what sections should be combined, etc. Specifically, it was said that all entries in the tables of Chapter 1 must appear as part of the functionality in one of the chapters. If an entry does not appear, it will be deleted from the tables in Chapter 1.
Gary Howell of Florida Tech proposed the introduction of elementary similarity transformations into the functionality. His rationale was that implementing elementary similarity transformations in terms of matrix vector multiplies and rank one updates is possible but INEFFICIENT in that the entire active part of the matrix is repeatedly accessed unnecessarily. It was decided to continue this discussion via the mail reflectors.
Householder transformations were again suggested as a top priority new BLAS routine due to their necessity in Hessenberg reduction. Sequences of Householder transformations (some of same length, some of different length) were also proposed as a very important addition due to its application in QR bulge chasing. Sequential Givens (application: QR) were also desired, such as in LAPACK auxiliary routine xLASR. Simultaneous Givens transformations (reduction to tridiagonal form) (xLARTV, replaced by DROT) were also suggested. Linda Kaufman then presented a summary of the list of vendor extensions to the BLAS. Namely, IxAMIN and a routine to return the Index of the element of minimum magnitude.
Roldan Pozo of NIST and Mike Heroux of Cray then presented a summary of the Sparse BLAS subgroup. Roldan began by suggesting a delay in the first reading of document until the addition of user-level text. A preliminary discussion of the functionality subset occurred during the break-out session and focused on Level 3 BLAS as well as preconditioned iterative methods. As for storage formats, it was suggested to support a data-neutral interface, as well as storage-specific interfaces. These storage formats would be extendable at the User Level, and the core formats would be utilized at the Toolkit level. Example language bindings for C and Fortran77 were included in the draft of the proposal, as well as the reference implementation contained in the Toolkit. There seemed to be little support for a low-level interface.
Mike Heroux of SGI/Cray then discussed Sparse functionality, specifically in the Toolkit. Permutations had not been included in the overall functionality definitions in Chapter 1, and should now be included in Chapter1. He reiterated the principle goal for the sparse BLAS, namely, efficient computation of the most common sparse ops in the most common data structures, for preconditioned Krylov methods. He also discussed some open issues in the development of Toolkit kernels.
Jim Demmel of UC Berkeley then presented the summary of the Extended Precision subgroup. Concern was raised over the volume of routines, and it was stressed that only a subset of routines would be implemented for a given architecture. The necessity for environmental inquiry routines was discussed.
Coffee break at 11:00am.
At 11:15am, Antoine Petitet presented the summary of the Distributed Memory BLAS subgroup. The subgroup proposed to Reuse interface design of dense part of scalapackto extend sequential BLAS interface to distributed memory interface. The proposal specifically allows for implementations that can be used in a heterogeneous environment.
As a side note, a discussion began on the increased use of Fortran90, and the need for a possible "F90 Conventions" section with examples in the Introduction chapter (Chapter 1). It was then suggested that it would be a good idea to include a section in Chapter 1 outlining the programming conventions used in all language interfaces -- Fortran77, Fortran90, C, and C++. These summaries would explain the features of each language that are utilized, and if there are assumptions made, these assumptions would be stated here. In this way, the user would be better prepared for the language binding sections of the document.
At 11:30am, Tony Skjellum gave an overview of comments on the formation of the BLAS Lite document. He expected that the BLAS Lite chapter be in final form by the next meeting. He stressed the need for a fuller API into the chapter format, test for coverage, show how to do traditional BLAS in terms of the Lite/Thin BLAS, and offer a model implementation for the PPro or SPARC. The chapter will be kept in the Journal of Development due to the controversial nature of the Lite/Tiny BLAS. The Lite/Tiny BLAS are not for intended for every level of user. They are designed to get people into the BLAS mode who are now adverse to any library. Their existence should reflect what people who develop high performance BLAS actually do. They currently address vector and RISC architectures, and it is anticipated that they include programmable cache and emerging PIM. L/T is not necessarily implemented as a library -- inline assembly language, preprocessing, compiler support, etc. The term "thin" refers to no "or"s in the code, and "lite" refers to the fact that the subroutines operate on fixed block sizes. He then listed some potential environmental inquiry routines.
In summary, the three components of the L/T are: environmental routines, routines to manipulate blocks, and computational routines which operate on fixed block sizes. The Lite/Thin BLAS are now officially known as the Basic Linear Algebra Instruction Set (BLAIS).
Lunch break...
After lunch, Clint Whaley of UT presented the summary of the C interface to the BLAS subgroup, and initiated a second reading of the document. The main issue discussed was the tester. Should we have a formal definition of the tester in the BLAS document? A starting point for the C-BLAS tester was obtained from D. Manley at Digital Corporation. Theresa Do of Cray and Bruce Greer of Intel volunteered to help coordinate the tester. The second issue that was addressed was the location of the Legacy BLAS chapter. Should it appear as an appendix or as a chapter, appearing before the Journal of Development? The majority felt that the Legacy BLAS chapter should be separate and not subject to the format specifications of the main chapters. Thus, it will remain an appendix.
Voting next occurred on the modified sections of the Legacy BLAS chapter/appendix related to the C interface to the existing BLAS. There were 8 eligible voters: UT, NAG, Cray, NIST, NEC, HP/Convex, Intel, and Bell Labs.
Coffee break at 3pm.
At 3pm we began discussion of Language Issues, Data-Neutral Interface, Environmental Enquiries, and Name Space.
Jim Demmel of UC Berkeley began discussion of the Language Issues. There was general agreement that C++ and F90 should be supported. Concern was raised that data types would be specified that would not be present in certain languages, such as C and F77. Support for Java also was viewed favorably with a suggestion by Tony Skjellum that Java BLAS might be appropriate for the JOD (pending a concrete proposal). There was discussion of data neutral interfaces. At the last BLAS meeting, Andrew Lumsdasine and Tony Skjellum suggested use of data neutral interfaces to hide format, precision, etc. Several participants expressed interest in handle based operations. Iain Duff pointed out that this is already done in sparse BLAS proposal. Some outstanding issues concern translation to and from internal format, handles as an expressive abstraction, and data format hiding for performance. It was suggested that there is a role for both data neutral interfaces and data format explicit interfaces. Concern was expressed that users should be able to access lower level routines. Finally, the mechanics of language specific bindings was discussed.
The conclusion of the Language Issues discussion was that Jim will work on a Fortran90 interface, with a Fortran77 interface to a subset of the routines, as well as C and C++ interface.
Tony Skjellum led a discussion about environmental inquiry functionality. There are two primary areas of the forum concerned with environmental inquiry -- BLAIS and extended precision BLAS. It was agreed that Tony will lead the task of comprising the list of needed routines, with help from Jack Dongarra of UT.
Antoine Petitet had proposed that we next discuss Namespace issues.
A coffee break followed, and then we broke into the following break-out sessions: Functionality/Extensions/Dense BLAS, Sparse, and BLAIS.
The meeting adjourned at 6:00pm.
The meeting began at 9:00am with break-out sessions -- Functionality/Dense, Sparse, Extra Precise, Distributed-Memory, and C/F90 interfaces.
At 10:30am, the subgroups presented their progress.
The Functionality subgroup consolidated new entries for tables in Chapter 1 and Chapter 2. It was reiterated that any entry in a table in Chapter 1 must be mentioned somewhere in the document. If an entry has no use in defining the functionality of any of the chapters, then it must be removed from the tables of Chapter 1. Gary Howell of Florida Tech proposed the addition of elementary similarity transformations to the functionality tables, and volunteered to help with their inclusion. Due to the possible instability of such routines, it was felt that further discussion of their inclusion should be addressed via the mailing list. It was also asked if the functionality of the routines will be 0-based or 1-based. This offset from the beginning element is controversial but must be resolved. The first reading of Chapter 2 will occur at the next meeting (April, 1998).
Roldan Pozo of NIST and Mike Heroux of Cray then summarized the findings of the Sparse BLAS subgroup. The proposed functionality of the Sparse BLAS has been reduced to exclude external permutations. Integrity checks will be limited, and conversions will be limited. The subset of functionality will concentrate on matrix multiply and triangular solve. The example bindings in the draft will be Fortran90 and C++. A functionality table needs to be included in the Sparse chapter, and this functionality also reflected in the overall functionality of Chapter 1.
Roldan Pozo of NIST then asked the question "Should the Level 1 Sparse BLAS be included in the proposal for the sake of completeness?" He asked for a straw vote on this idea. No actual show of hands was taken but the majority felt that the Level 1 Sparse BLAS should not be mentioned in this document, mainly for fear of conflicting with the "standard" already defined for these routines.
Sven Hammarling of NAG then briefly spoke on the proposed Fortran90 interface to the BLAS. The reference implementation would accomodate the Legacy --> Thin --> Thick interfaces. The "thick" interface refers to one with error-checking. He urged the need for comments on the draft of the proposal included in the Legacy BLAS chapter of the document. It was reiterated that a "Conventions" section for Fortran90, as well as for Fortran77, C, and C++, will be added to Chapter 1 in order to better explain the features of each language that are utilized in the respective language bindings. A first reading of this chapter was proposed for the next meeting.
Jim Demmel of UCB then summarized the Precise BLAS/Extended Precision BLAS (XBLAS) proposal. The reference implementation will follow the current design of the Fortran90 interface. He then discussed specific language bindings for the routines in Fortran90, Fortran77, and C. A first reading of this chapter was proposed for the next meeting.
Antoine Petitet of NEC summarized the findings of the distributed-memory BLAS. He stressed the need to define the functionality so that a subset can be extracted. Currently, language bindings for C and Fortran77 are proposed. Concern was raised over a Fortran90 interface if this is not supported in MPI. Some of the attendees responded that a Fortran90 interface is now supported in MPI (as this is used by Visual Numerics).
In preparation for the first readings, each of these chapters should have a prioritized list of the functionality. Concern was then raised on whether the reference implementation should encompass all proposed routines or only the prioritized list? And should a reference implementation be provided for each language binding? The general concensus was that the reference implementation should be included for each language supported.
This "prioritizing" discussion also brought up the danger of defining a standard with optional sections. Participants fear proposing a standard that is not clearly-defined and has optional sections. The example cited was the HPF effort, and the fact that no two HPF compilers have the same subset of HPF directives.
The forum participants prefer to have one clearly-defined standard with no optional sections.
Jack Dongarra of UT then addressed the closing discussion for the meeting and reviewed the tentative dates for the next two meetings. He stressed that the forum is responsible for specifying the semantics and syntax of the BLAS.
The tentative date of the next forum meeting is:
and will be hosted by NIST in Washington, D.C.. The exact date of the meeting will be provided soon. First readings of the following documents will occur at this meeting
A second reading of the "C interface to the BLAS" in the Legacy BLAS chapter will also occur at the April 1998 meeting.
A preliminary deadline of mid-March 1998 is set for subgroup progress.
The next meeting would then be tentatively scheduled for August, 1998 at CRI in Eagan, MN.
The meeting was then adjourned by Jack Dongarra at 12Noon.
Attendees list for the December 3-5, 1997 BLAST Forum Meeting
Susan Blackford UT, Knoxville<EMAIL_ADDRESS>Clay Breshears CEWES/Rice U<EMAIL_ADDRESS>Jim Demmel UC Berkeley<EMAIL_ADDRESS>Theresa Do SGI/Cray<EMAIL_ADDRESS>Jack Dongarra UT / ORNL<EMAIL_ADDRESS>Iain Duff RAL/CERFACS<EMAIL_ADDRESS>Cormac Garvey NEC<EMAIL_ADDRESS>Bruce Greer Intel<EMAIL_ADDRESS>Sven Hammarling NAG, UK<EMAIL_ADDRESS>Greg Henry Intel<EMAIL_ADDRESS>Mike Heroux SGI/Cray<EMAIL_ADDRESS>Gary Howell Florida Tech<EMAIL_ADDRESS>Linda Kaufman Bell Labs<EMAIL_ADDRESS>Hsin-Ying Lin HP Convex Tech. Ctr<EMAIL_ADDRESS>Andrew Lumsdaine Univ. of Notre Dame<EMAIL_ADDRESS>Antoine Petitet NEC<EMAIL_ADDRESS>Roldan Pozo NIST<EMAIL_ADDRESS>Tony Skjellum Miss. State Univ<EMAIL_ADDRESS>Francoise Tisseur UT, Knoxville<EMAIL_ADDRESS>Clint Whaley UT, Knoxville<EMAIL_ADDRESS>Susan Blackford and Andrew Lumsdaine agreed to take minutes for the meetings.


### Grundfrage hat für much praktische Wichtigkeit braucht man nur die Vorhersage? oder muss man es auch verstehen? https://twitter.com/willkurt/status/1316053621520424962
### Tree Besser Regularisieren How to Prune Decision Trees to Make the Most Out of Them https://towardsdatascience.com/how-to-prune-decision-trees-to-make-the-most-out-of-them-3733bd425072
Techniken 1. Surrogate Modell plus Introspektion 2. What If / Icicle Plots 3. Lime, Shap etc.
https://twitter.com/fishnets88/status/1310498494889766913 I am on my honeymoon now, so I'll delay properly chasing this, but the city of Amsterdam is sharing notes on how they deploy algorithms. They touch on topics of fairness/explainability too. An example on algorithms against illegal airbnb rentals: https://algoritmeregister.amsterdam.nl/en/holiday-rental-housing-fraud-risk/
[]Was heißt das eigentlich? Regeln? Wie viele? Wie genau? Widerspruch?  Rechtsanwalt? * Stabilität der Vorhersage
### Stop Explaining Black Box Machine Learning Models for High Stakes Decisions and Use Interpretable Models Instead https://arxiv.org/abs/1811.10154
### Allgemeiner Als Referenz Omayma🔎 (@OmaymaS_) tweeted at 10:14 PM on Thu, Dec 12, 2019: 👩💼Snapshots of my slides on "Machine Learning Interpretability" with an overview of the relevant packages and cloud solutions. 👉 Full version on speakerdeck: https://t.co/YPqZKdyihQ #rstats #python #MachineLearning https://t.co/YjDU8gXsUv (https://twitter.com/OmaymaS_/status/1205234474872705024?s=03)
### Diskussion zu Artikel darüber https://twitter.com/rasbt/status/1200811980535353344
### Allgemein ist die Systematik anders als bei MACH Interpretable > Explainable
### Post pruning decision trees with cost complexity pruning https://scikit-learn.org/dev/auto_examples/tree/plot_cost_complexity_pruning.html
### Abstract Squaring Deep Neural Networks for interpretability - Decision Trees as Surrogate Model for Neural Networks Deep Neural Networks have outstanding performance and flexibility when learning from complex data sets. They can be regularized to generalize well on pretty much any data set. However, without additional work, they are black boxes and how they come to conclusions is not transparent or comprehensible. Exactly this right to explanation is well established by Europe's GDPR (https://en.wikipedia.org/wiki/General_Data_Protection_Regulation), United States' credit score (https://en.wikipedia.org/wiki/Right_to_explanation, https://en.wikipedia.org/wiki/Credit_score_in_the_United_States), and many other real world applications. On the opposite side, decision trees can be much more comprehensible, and can be trained either towards high understandability (simple tree) or high accuracy (complex tree). Unfortunately, unlike Neural Networks they tend to overfit when trained on real world data and are hard to regularize. In this contribution I will show how training decision trees on data generated by a neural network gives us a dial to be tuned between predictive power on one side and explainability on the other side.
## Surrogate Models ### Scaling down using a surrogate model https://colab.research.google.com/github/DJCordhose/ml-workshop/blob/master/notebooks/tf2/tf-surrogate-model.ipynb https://colab.research.google.com/github/DJCordhose/ml-workshop/blob/master/notebooks/tf2/tf-surrogate-model-details.ipynb http://bit.ly/scaling-down-2020


{% extends "ggpoll/base.html" %} {% block content %}
{{ top_score.description }}
Hello {{ user.name }}!
Thanks for taking our quiz. As you can see you should worship {{ top_score.name }}.
Would you like to start again?| God | Score |
|---|---|
| {{ god }} | {{ score }} |


Day 01 : Arrive- Delhi On arrival at Delhi airport meet with our representative and transfer to hotel for overnight stay.
Day 02: Delhi - Haridwar - Rishikesh Early morning check out from the hotel and transfer to railway station to catch AC train for Haridwar at06:50 hrs. Arrival at Haridwar by 11:25 hrs. On arrival meet our guide and transfer to Rishikesh. On arrival check into hotel. Later visit the temple & Ashram at Rishikesh. Overnight stay.
Day 03 : Rishikesh - Karnprayag - Wan (2200 mts /7200 ft) (170 kms/6-7 hrs) The day starts with a beautiful drive along the river Ganges. En route visit the famous Prayags (confluences) of historic as well as religious importance. Devprayag is the most notable of all the mentioned confluences, as this is the spot where rivers Bhagirathi and Alaknanda meet to form most revered river for Hindus – The Ganges. Continue to drive further via Rudraprayag and Karanprayag to reach Wan by evening. Dinner and overnight stay in tents/tourist rest house.
Day 04 : Wan - Bedni Bugyal (3350 mts/11000 ft) (10 Km/ 4-5 hrs) The day starts with the picturesque walk through the village of Wan. The school kids, farmers ploughing their fields, women with their cattles is common a sight while passing through the village to the ridge of Rankiyadhar. Here the limit of the village ends, and the trail descends to the river Neelganga.
Day 05 : Bedni Bugyal Bedni Bugyal is a destination in itself, and there is plenty of exploration to do and a lot of photography to be done. The altitude is high, and the ascent has been rapid! This is a rest day to help acclimatize for the gain in altitude in the following days. Overnight in tents.
Day 06: Bedni Bugyal - Bagubassa (4100 mts/13450 ft) (8 km/ 4-5 hrs) Bagua means flowery park and Basa means place. And rightly the place was full of variety of flowers including the rare Bhram Kamal, a special godly lotus found at only and between the altitudes of 14000 - 15000 ft. Overnight in tents.
Day 07 : Bagubassa - Roopkund (4450 mts/14600 ft) - Bedni Bugyal (7-8 hrs) It is believed that these are the remains of about 300 persons who died about 500 -600 years ago. After the exploration and photo shoot, one must retrace one’s steps towards Bedni Bugyal. Overnight in tents.
Day 08 : Bedni Bugyal - Wan (10 km/ 3-4 hrs) - Rudraprayag The trek from Bedni to Wan is real a piece of cake, and the reduced physical pressure gives the avid photographer opportunities to take many wonderful pictures on the way back. The walk is almost downhill giving an opportunity to enjoy the forest trail. This will take 3-4 hrs. On reaching the road head, take a drive towards Rudraprayag. Overnight in the hotel.
Day 09 : Rudraprayag - Haridwar - Delhi After breakfast, drive towards Haridwar via Devprayag & Rishikesh. On arrival at Haridwar visit the temple and by evening witness the famous Aarti at Har Ki Pauri on the banks of the holy Ganges. Later board overnight train for Delhi at 23:15 hrs.
Day 10 : Delhi - Departure Arrive Delhi and transfer to airport to catch a flight for your onward destination.
Tour & Service End.


--- layout: post title: Some seeds flourish tags: - ego - Linux status: publish type: post published: true meta: {} --- I was browsing c.o.l.a this evening when I discovered that GLLUG is still going strong. This brings back memories as I helped start the group back in 1997, the first meeting was at my then employers premises. However we had no regular place to meet for some time until GND very kindly stepped in and gave us a home until well after I moved to Australia. BTW, I spent days coming up with the 'cute' name, it was a reference to the famous Linux virtual beer. The group now has it's own web domain and meets in central London. Well done to Glluger's past and present for keeping the torch burning. It can be hard work but it's an important job.
powered by performancing firefox


Please fill out the form below to get access to Maritime Cloud.
The username must be unique. That is, you cannot choose a username that has already been used by another user or organization.
The address where the registration key should be sent to. We promise not to send you any spam mails


--- layout: default css: masthead.css title: "Masthead" permalink: /masthead.html ---
Editor-in-Chief |
Kawin Ethayarajh |
| Faculty Supervisor | Sam Toueg |
| Undergraduate Editors | Julia Gilenko Jaren Kerr |
| Design & Layout Director | Sara Tang |
| Layout Associate | Mohana Sarmiento |
| Webmaster | Muhammad Osama |