Prashan Parvani, Dylan Dasgupta, Bryson McClure, Tanner Lederman
Service-Learning Course Project as part of DS 4200: Information Presentation and Visualization, taught by Prof. Dylan Cashman, Data Visualization @ Khoury, Northeastern University.
These diagrams will help the non-profit organization, SBN, uncover new insights regarding their uses (attendees and vendors) alike.
These diagrams should help attendees and vendors communicate with one another directly instead of using SBN as a third party to connect them. It will also help them discover new, potential sponors that will help them with their cause and events.
Below is a map visualization that produces a table with data
Below is a video demonstrating how to use the visualization.
We decided to go with a map because of the data we wanted to display. We were trying to come up with a fun, interactive visualization that would attract all kinds of users (attendees, vendors, and potential sponsors); whilst making it informative as well. The final concept we came up with was a map that would display the zip codes of attendees and vendors.
The idea is to highlight (or brush) a specific data point (or sets of data points). This will produce a table next to the map displaying more information regarding that data point. For attendees that displays favorite activity, likelihood to purchase goods at store, if it raised user awareness, their experience, how they found out about the event, and their age range. For vendors that displays vendor name, city, and state. Users also will have the ability to zoom in and out of the map; providing more concise results. The user can also double click on the map (when already zoomed in) to reset the map to its default scale. The attendee table will also be color coded to the same color as the data point (orange). The same behavior occurs with the vendor data (blue). In the attendee table, the values are scaled from 1-5; with the exception of "Likelihood To Purchase At Store". That is scaled to be 1-6.
Here is a picture of the map in its base form:
Here is a picture of the map with attendee information selected:
Here is a picture of the map with vendor information selected:
Here is a picture of the map while zoomed in with vendor and attendee information selected:
Embedded below are two documents detailing our Task Analysis and Design Process. The first document contains our task analysis table, as we well as our initial design sketches and ideas for visualizations. The second document contains our final visualization sketch and a description of what its original purpose.
We were able to implement a basic map that plotted visual information regarding the location of attendees and vendors. We were also able to get a working table that displayed the information pertaining to each data point. In trying to display our data, we were limited by just the 2019 data because we didn't have the list of vendors from prior years. The list of vendors from 2019 was extrapolated from the SBN website. We then had to look up the zip code for every vendor manually. Also, because many of the variables had null data on it, we were forced to drop some of that data; limiting it even more.
In the future if we still had the time and ability to keep working on this, we would like to incoprorate more information. First we'd like to implement a filtering option that would help you filter for just attendee data points, or vendor data points. Likewise, the ability to filter through specific vendor names so that only their location would highlight. We would also like to add more data points to the map. Right now we are only using the data from 2019. If we had more information on the vendors, then we'd be able to publish data from 2017, 2018, and etc. Another improvement would be to cut the initial view of the map and only display the Northeast region. However, if the user chose to, they can still zoom in to inspect it more closely, or zoom out to see more of USA. We would also like to label, and color each state for the aesthetic visual appeal.
We would like to extend a special thanks to the teaching staff of DS 4200. The professor and TA's religiously helped us to accomplish our tasks. We definitely wouldn't have gotten as far as we did in our project without them. We would also like to acknowledge their tutorial code. It helped us a lot in setting up a basic framework for our code (listed below).


Tap on a document thumbnail to open it.
Then you can
Edit the text.
View all pages.
Tap on me to get more info.
If you long press on a thumbnail
You can merge documents.
Send documents as pdf files.
Change the document title.
Delete documents.


Conventions Used in This Book
The following typographical conventions are used in this book:
- Italic
Used for emphasis and indicates new terms. Italic also indicates when a variable, such as x, is used in place of something else during a discussion in the main text of the book.
- Constant width
Used for code examples.
- Constant width italic
Marks the occurrence of a variable or user-supplied element in a code example.
|


${navigation('Project: ' + project.name)}
Back to all project
Name
Person responsible
${project.person_responsible}
Comment
${project.comment}
Note:
The comment is a description, which is part of the reponse, when requesting webservice methods of the WaterOneFlow interface. E.g. it can be seen when downloading data from this project over the CUAHSI-Applications.
Edit
Save
Delete
Cancel


Well I wasn't into dragon at first, but Haaku pushed me to be the best i could be and i tried to get use to dragon for him and hes helped me alot dragon is the type of power and the brave and i worked very hard for ace and im proud of myself that i have made it this far and i have the aphro league to support me every step of the way to me being the best battler i can be
Psychic Knight
Victini
Slowbro-Mega
Meloetta
Jirachi
Mew
Necrozma
"y be avrage when you can be a savage"


Oh my bananas, I am having a computer crisis. It all started when I was nOT tOUCHING mY cOMPUTER at all and the only application running (to my knowledge) was Firefox, which had like 4 tabs open. "So what?" you think. "Who cares?" you ask. Well, my fan was going as hard as it could for several iterations of several minutes. I was starting to worry for my baby's health. Also, lately my battery has been dying way too fast for a laptop in its first year of life. So I was concerned.
Let me walk you through my process over the last hour and a half.
I notice the fan going and going and GOING AND GOING AND GOING AND --
I vaguely remember some fabulous new profiling tool I discovered in the last couple days that showed me CPU usage. What was it? Something short...hblot...top
!
I forget why I first wanted to check top
out.  It was using around 110 - 135% CPU which at first was utterly confusing, because you can't have more than a hundred per cent of a thing, cuz per cent means OUT OF A HUNDRED and THAT'S NOT HOW THAT WORKS. (I've been reading this blog lately with a lot of YELLING...I'm sorry 😂)
Anyway, turns out CPU usage is expressed (at least by top
, I don't know whether other tools follow the same principle) in usage of one processor.
Right, so Elasticsearch was doing all this (presumably) computationally expensive stuff, dealing with all the data I was giving it with 0 mappings or structure (types? what's a type?), using >100% CPU. The fan was going crazy then too, so the parallels between these situations are not looking good.
I ctrl-alt-T
and top
and enter
and FIREFOX WAS USING > 100% CPU! WAT THA FROCK! I close it, kill the process (why is that necessary? why didn't closing it like a normal person kill it? so many questions.), reopen it, and great, now 20-30% at rest and 60-70% while using.
 But to me, that still seems like an awful lot when I want to have Firefox and Sublime and Opera and Vim and Rhythmbox[1] and a server or two running alongside it. There's not gonna be enough %s to go around, and somebody is going to be left in the dust.
I do some googling, which suggests:
- My browser is outdated (no.)
- I should enable hardware acceleration (no.)
- My addons/plugins are being greedy - okay, maybe!
I disable Lightbeam as my first action, which brings the CPU usage from 60% to 30% while using and 15-20% if I'm not touching it, although all I have to do to cause a 5-10% spike is mouse over it, so that's weird. Maybe it's a coincidence. Sidenote, Lightbeam is a Firefox browser extension made by Mozilla which tracks websites tracking you basically, and all the requests that happen in your browser. I was originally checking it out as a potential Outreachy project. But if it turns out it takes 30% of my CPU, take it away!
Woohoo! Ok, so now we're making progress. Next I disable session manager which saves all my tabs and reopens them next time I open the browser, which Opera automatically does for me and I adore because I am 100% a tab hoarder. Then I try some browsing while keeping an eye on top
and NOPE, back at 50-70%. Shucks, turns out Lightbeam wasn't actually doing any insane-o CPU hogging after all.
So I just straight up switch to Safe Mode, which disables all extensions, to see if any other addons or maybe the whole lot of them combined are being sneaky little buggers. I go to Youtube and before I can even click on anything my CPU usage is back at 138%!!!! I wish I could write numbers in capitals. ONE HUNDRED AND THIRTY EIGHT PERCENT!! (No wait, my teacher always told me, if you say "and", it means hundredths. ONE HUNDRED THIRTY EIGHT PERCENT!!! That's better.)
Anyway I google more stuff and checkout Chrome, which has MULTIPLE PROCESSES RUNNING Chrome wtf u think ur doing?! Pff. This makes it really hard to compare with Firefox's one number because I need to add like 4 or 5 numbers and that is toO many numbers friends. TOo many. Also I'd like to point out that I am semi-gleeful at discovering this, because I've heard some negative things about Chrome eating way more resources than is reasonable and I think maybe I have cracked the secret. Next I try my trusty friend Opera which also has multiple processes! Opera! How could you betray me like this!?? I'll just say each process of Opera and Chrome is generally around 20%. Sometimes they'll go up to 45% or 70% or more.
Now I am googling different stuff: "Why does Chrome use multiple processes". I think this will explain all of Chrome's bad behaviour. Ever. What I find is this comic, elaborating some interesting thing on the design of Google Chrome (sorry, I just realized I've been saying "Chrome" as if Google Chrome owns that term. How did they get away with using the universal name for a major part of the browser for their browser? Hmph. Making it confusing out here.), including:
- Each process is a tab!
- This means that if one webpage has something silly like an infinite loop, only that tab needs to be killed as opposed to the whole browser.
- This system is based on how operating systems open threads for each process.
- This also ensures greater security, as each tab is isolated. (I am definitely simplifying here.)
This comic is 39 pages long and I am on page 29. I'll get there eventually. Maybe. I do recommend checking it out though if you're interested.
Bonus - remember how I said I don't need to enable hardware acceleration? I decided this because in my settings, the checkbox for "Enable hardware acceleration" is ticked. Seems pretty clear right? Nah, jk. Checking some more advanced settings page tucked away somewhere (as these things always are) exposed that actually, apparently my OS was blocking this from happening. From what I understand, I don't want to force enable this because bad things could happen, ie, something about webby acceleration scripts exploiting OS vulnerabilities, or something. So I'm just gonna not touch that.
To conclude, I learned some stuff about Google Chrome's design, and I solved nothing so my computer is still a minion[2] to the browsers siphoning as much power as their grubby paws can. Do let me know if you think you are more smarticle than I in this matter and wish to assist. 😃
UPDATE OH MY DOG Opera has calmed down while I've been writing and each process is now using under 10% it's a miracle??!!?
"Yo, why the heck you need two browsers and two text editors?!" Whatever, don't judge me!  I am trying to remove uses of common tech terms that perpetuate white supremacy from 1) my vocabulary and 2) my bubble, starting with blacklist/whitelist and master/slave. ↩


Note that every member of a Character Traits class is static.
There is never any need to create a Character Traits object, and, in
fact, there is no guarantee that creating such objects is possible.
|
Value type
|
X::char_type
|
The character type described by this Character Traits type.
|
|
Int type
|
X::int_type
|
A type that is capable of representing every valid value of type
char_type, and, additionally an end-of-file value. For char,
for example, the int type may be int, and for wchar_t it may
be wint_t.
|
|
Position type
|
X::pos_type
|
A type that can represent the position of a character of type
char_type within a file. This type is usually streampos.
|
|
Offset type
|
X::off_type
|
An integer type that can represent the difference between two
pos_type values. This type is usually streamoff.
|
|
State type
|
X::state_type
|
A type that can represent a state in a multibyte encoding
scheme. This type, if used at all, is usually mbstate_t.
|
|
Name
|
Expression
|
Precondition
|
Semantics
|
Postcondition
|
|
Character assignment
|
X::assign(c1, c2)
|
|
Performs the assignment c1 = c2
|
X::eq(c1, c2) is true.
|
|
Character equality
|
X::eq(c1, c2)
|
|
Returns true if and only if c1 and c2 are equal.
|
|
|
Character comparison
|
X::lt(c1, c2)
|
|
Returns true if and only if c1 is less than c2. Note that
for any two value values c1 and c2, exactly one of
X::lt(c1, c2), X::lt(c2, c1), and X::eq(c1, c2) should be
true.
|
|
|
Range comparison
|
X::compare(p1, p2, n)
|
[p1, p1+n) and [p2, p2+n) are valid ranges.
|
Generalization of strncmp. Returns 0 if every element
in [p1, p1+n) is equal to the corresponding element
in [p2, p2+n), a negative value if there exists an element
in [p1, p1+n) less than the corresponding element in [p2, p2+n)
and all previous elements are equal, and a positive value
if there exists an element in [p1, p1+n) greater than the
corresponding element in [p2, p2+n) and all previous elements
are equal.
|
|
|
Length
|
X::length(p)
|
|
Generalization of strlen.
Returns the smallest non-negative number n such that
X::eq(p+n, X::char_type()) is true. Behavior is undefined
if no such n exists.
|
|
|
Find
|
X::find(p, n, c)
|
[p, p+n) is a valid range.
|
Generalization of strchr. Returns the first pointer q
in [p, p+n) such that X::eq(*q, c) is true. Returns a
null pointer if no such pointer exists. (Note that this method
for indicating a failed search differs from that is
find.)
|
|
|
Move
|
X::move(s, p, n)
|
[p, p+n) and [s, s+n) are valid ranges (possibly overlapping).
|
Generalization of memmove. Copies values from the range
[p, p+n) to the range [s, s+n), and returns s.
|
|
|
Copy
|
X::copy(s, p, n)
|
[p, p+n) and [s, s+n) are valid ranges which do not overlap.
|
Generalization of memcpy. Copies values from the range
[p, p+n) to the range [s, s+n), and returns s.
|
|
|
Range assignment
|
X::assign(s, n, c)
|
[s, s+n) is a valid range.
|
Generalization of memset. Assigns the value c to each pointer
in the range [s, s+n), and returns s.
|
|
|
EOF value
|
X::eof()
|
|
Returns a value that can represent EOF.
|
X::eof() is distinct from every valid value of type
X::char_type. That is, there exists no value c
such that X::eq_int_type(X::to_int_type(c), X::eof()) is true.
|
|
Not EOF
|
X::not_eof(e)
|
|
Returns e if e represents a valid char_type value, and some
non-EOF value if e is X::eof().
|
|
|
Convert to value type
|
X::to_char_type(e)
|
|
Converts e to X's int type. If e is a representation of some
char_type value then it returns that value; if e is X::eof()
then the return value is unspecified.
|
|
|
Convert to int type
|
X::to_int_type(c)
|
|
Converts c to X's int type.
|
X::to_char_type(X::to_int_type(c)) is a null operation.
|
|
Equal int type values
|
X::eq_int_type(e1, e2)
|
|
Compares two int type values. If there exist values of type
X::char_type such that e1 is X::to_int_type(c1)) and
e2 is X::to_int_type(c2)), then X::eq_int_type(e1, e2) is
the same as X::eq(c1, c2). Otherwise, eq_int_type returns
true if e1 and e2 are both EOF and false if one of
e1 and e2 is EOF and the other is not.
|
|
All other operations are constant time.


Coded Discount Public Discount
Spaces,apostrophes and non-alphanumeric characters (except '-','_','@' and'.') are not allowed. (Examples: johnsmith@gmail.com,earlybirdspecial_08,dc-121232)
Choose FileNo file choosen
Files must be plain text(example *.csv or *.txt) and can contain upto 3,000 codes, seperated by commas or listed on seperate lines. Maximum of 256 characters per code. Spaces,apostrophes and non-alphanumeric characters (except '-','_','@' and'.') are not allowed.
Days Hours Minutes before the event starts


To construct the universe, first we eliminate stocks which don't have fundmental data. In FineSelectionFunction
,
we calculate the market cap with PE ratio, earning per shares and shares outstanding and assign the property MarketCap
to each fine fundamental object. The universe is narrowed to top 20% companies with the highest market cap.
According to the algorithm, the portfolio is weighted based on market cap. We calculate the weight in FineSelectionFunction
and save
them in self.weights
.
fine = [x for x in fine if (x.ValuationRatios.PBRatio > 0)] for i in fine: i.MarketCap = float(i.EarningReports.BasicAverageShares.ThreeMonths * (i.EarningReports.BasicEPS.TwelveMonths*i.ValuationRatios.PERatio)) top_market_cap = sorted(fine, key = lambda x:x.MarketCap, reverse=True)[:int(len(fine)*0.2)] top_bm = sorted(top_market_cap, key = lambda x: 1 / x.ValuationRatios.PBRatio, reverse=True)[:int(len(top_market_cap)*0.2)] self.sorted_by_bm = [i.Symbol for i in top_bm] total_market_cap = np.sum([i.MarketCap for i in top_bm]) self.weights = {} for i in top_bm: self.weights[str(i.Symbol)] = i.MarketCap/total_market_cap return self.sorted_by_bm
In the next step, we sort the stocks with the inverse of P/B ratio by descending order. Quintile portfolios are then formed based on the Book-to-Market ratio and the highest quintile is held for one year.


A margin is the space around an element and padding refers to the space between an element and the content inside it.
The margin falls outside two adjacent elements. Each side of the element has a margin size you can change individually. In creating the gap, the margin pushes adjacent elements away.
On the other hand, padding is placed inside the border of an element. To create the gap, the padding either grows the element’s size or shrinks the content inside. By default, the size of the element increases.
If you want to create the gap by shrinking the content, set the box-sizing property value to border-box (i.e. box-sizing: border-box).
When you’re adjusting the layout of your design, you’ll need to determine whether to adjust the margins or the padding to achieve the desired visual effect. CSS margins determine the space surrounding an element, therefore margins would be used to move an element up or down on the page, as well as left or right. If the width of your page is fixed, centering an element horizontally is very simple: just assign the value margin: auto. You would also use margins to set the distance between nearby elements. For instance, use margins to add space between images or between an image and the text description below it.
On the flip side, a negative margin value would let you overlap elements. You could also use a negative margin to create a header element within a container that has padding values set to keep other elements aligned. CSS padding determines how elements look and sit within a container. You would change the padding if you want to create space between an element and the edge of the container, or the border. This would also show the container’s background around the element inside it. Padding is also used to change the size of an element. When you increase the padding value, the text will stay the same size, but there will be more space around it. The element will also fill more space inside the container.


Simple, nice and user-friendly application of the weather. Only
only necessary
Sometimes the simplest things are the hardest to find. So we created a new line for everyday life.
drag and drop
The brightest image
Variable information on the air humidity, the feeling of the weather, and the ability to share this with your friends
reviews
What art offers is space - a certain breathing room for the spirit.
Just download the app from the store. Simple, nice and user-friendly application of theweather. Only relevant and useful information.


Welcome!
We, at FledgLing, try and provide you with the all important GRE and CAT gyaan.
Not just that, we also help you prepare for these competitive tests with a few test prep series - squeezed from a number of sources!
First, lets have a look at the current formats of these tests.
GRE Funda
Whether you are planning to go to graduate school or business school - it is a smart move to show schools your best with the GRE
Read MoreCAT Funda
The Common Admission Test, CAT is the gateway of 13 prestigious Indian Institutes of Management (IIMs) and other top B-Schools
Read More


A Simple Mustache Demo
Mustache Template:
Hello {{name}}
You have just won ${{value}}! {{#in_ca}}
Well, ${{taxed_value}}, after taxes. {{/in_ca}}
Data Object:
var data = { "name": "Raza", "value": 10000, "taxed_value": 10000 - (10000 * 0.4), "in_ca": true }
Process Template
HTML Result:
How It Looks:


This section will cover a Hierarchical Task Analysis (HTA) for each scenario.
Galileo Koperniak is teaching his class about Newton’s law of universal gravitation by showing the relational data between Earth and Pluto. Koperniak decides to use the application to display a plot line between both planets. In front of the class, Koperniak starts the application, which begins by displaying the galaxy, and searches for Earth and Pluto, followed by setting a line between them. Using this line, he can figure out the distance from Earth to Pluto, which he completes by opening a details menu. The details menu outputs that the distance between Earth and Pluto is 7.5 billion kilometers.
Dennis Gates is on summer break from university and has a part time
internship at a local hospital. His parent gives him this galaxy map VR
application, which is compatible with his HTC Vive, as a birthday gift.
Gates is very interested in this application for the summer because, not
only is he a big fan of virtual reality technology, he was not able to go
exploring this summer and hopes he can use this application to fill in the
gap. However, he is going to his grandparent’s place for the weekend, which
has no internet.
With this in mind, Dennis opens the application and goes to the options
menu. In this menu, he is able to download the data to his computer. Once
this is done, he can play offline. Once Dennis begins to explore the galaxy,
he is extremely impressed that he can zoom in and see planets and stars, and
manually move about the galaxy visually seeing stars larger than the sun.
While traversing the galaxy, Dennis is able to select satellites orbiting
Earth, and see details about all the planets he encounters.
Galileo Koperniak is planning on giving students a workshop on what types of planets are along a specific course between two stars. Along this path he plans on showing the details of these planets. Using this VR Galaxy Map with his HTC VIVE, he can traverse throughout different galaxies building a path between the stars.
Since the VR Galaxy Map application uses the Hipparcos star catalogue and mapping techniques similar to the GNU program Celestia, stars such as the red supergiant AH Scorpii appears along his path, and shows a name beside the star when zoomed out.
Dennis Gates has just graduated university and decided to take a break from school and work and visit his friend Howard in Arizona for the summer. Together, they decide to go out to the great plains of Arizona in order to build a to scale model of the solar system and its planets, with Earth being a size of a marble. They want to use the galaxy map VR application to help them create models of all other planets of the solar system as well as the Sun itself to scale matching that which they picked to represent the size of the Earth. Furthermore, they want to plot all the celestial bodies around the Sun model such that their distance would match the actual current distance to the Sun to scale, and their position along the orbit matches the actual position at the time. They will verify the correctness of their model by standing next to the Earth model and looking at the Sun model, with the real Sun being clearly visible in the sky. If their estimates are on point, the apparent size of the Sun as well as its model will be identical.
To accomplish this goal, Dennis downloads data for the solar system before heading out to the desert, since there will be no access to internet once he and his friend reach the plains. Upon arrival to their destination, Dennis uses application to get data on diameter, distance, and current position relative to the Sun for each planet, while John uses the data to build appropriately sized models and arranges them to the required positions. Dennis uses the option of plotting lines in order to get a sense of direction for each planet relative to the Sun.


Recipe 18.1. Removing Duplicates from a SequenceCredit: Tim Peters ProblemYou have a sequence that may include duplicates, and you want to remove the duplicates in the fastest possible way, without knowing much about the properties of the items in the sequence. You do not care about the "or"der of items in the resulting sequence. SolutionThe key is to try several approaches, fastest first, and use try/except to handle the failing cases of the faster approaches by falling back to slower approaches. Here's a function that implements exactly this strategy: # support 2.3 as well as 2.4 try: set except NameError: from sets import Set as set def unique(s): """ Return a list of the elements in s in arbitrary order, but without duplicates. """ # Try using a set first, because it's the fastest and will usually work try: return list(set(s)) except TypeError: pass # Move on to the next method # Since you can't hash all elements, try sorting, to bring equal items # together and then weed them out in a single pass t = list(s) try: t.sort( ) except TypeError: del t # Move on to the next method else: # the sort worked, so we're fine -- do the weeding return [x for i, x in enumerate(t) if not i or x != t[i-1]] # Brute force is all that's left u = [ ] for x in s: if x not in u: u.append(x) return u DiscussionThe purpose of this recipe's unique function is to take a sequence s as an argument and return a list of the items in s in arbitrary order, but without duplicates. For example, calling unique([1, 2, 3, 1, 2, 3]) returns an arbitrary permutation of [1, 2, 3], calling unique('abcabc') returns an arbitrary permutation of ['a', 'b', 'c'], and calling unique(([1, 2], [2, 3], [1, 2])) returns an arbitrary permutation of [[2, 3], [1, 2]]. The fastest way to remove duplicates from a sequence depends on fairly subtle properties of the sequence elements, such as whether they're hashable and whether they support full comparisons. The unique function shown in this recipe tries three methods, from fastest to slowest, letting runtime exceptions pick the best method for the sequence at hand. For fastest speed, all sequence elements must be hashable. When they are, the unique function will usually work in linear time (i.e., O(n), or directly proportional to the number of elements in the input, which is good and highly scalable performance behavior). If it turns out that hashing the elements (e.g., using them as dictionary keys, or, as in this case, set elements) is not possible, the next best situation is when the elements enjoy a total ordering, meaning that each element can be compared to each other element with the < operator. If list(s).sort() doesn't raise a TypeError, we can assume that s' elements can be sorted and therefore enjoy a total ordering. Then unique will usually work in O(n log(n)) time. Python lists' sort method is particularly efficient in the presence of partially ordered data (including, e.g., data with many duplicates), so the sorting approach may be more effective in Python than elsewhere. If sorting also turns out to be impossible, the sequence items must at least support equality testing, or else the very concept of duplicates can't really be meaningful for them. In this case, unique works in quadratic timethat is, O(n2), meaning time proportional to the square of the number of elements in the input: not very scalable, but the least of all evils, given the sequence items' obviously peculiar nature (assuming we get all the way to this subcase). This recipe is a pure example of how algorithm efficiency depends on the strength of the assumptions you can make about the data. You could split this recipe's function into three distinct functions and directly call the one that best meets your needs. In practice, however, the brute-force method is so slow for large sequences that nothing measurable is lost by simply letting the function as written try the faster methods first. If you need to preserve the same order of items in the output sequence as in the input sequence, see Recipe 18.2. See Also |


Home
Publications
Talks
Teaching
Notes
Miscellaneous
Photos
LaTeX Tips
Links
Contact
Talks
2020
Aperiodic Order: The Mathematics of Systems of Approximate Symmetry
2020-10-22
Cardiff University, United Kingdom (via Zoom)
2019
Aperiodic order: C*-algebras and tiling spaces
2019-11-05
Newcastle University, United Kingdom
Homotopical tools for analysing approximate symmetry
2019-10-10
University of St Andrews, United Kingdom
Topological invariants for aperiodic patterns
2019-09-16
University of Warwick, United Kingdom
Polytopal cut and project sets: complexity and repetitivity
2019-09-06
University of Bielefeld, Germany
Constructing aperiodicity
2019-08-01
University of Vienna, Austria
A homotopical approach to symmetries of aperiodic patterns
2019-04-08
Aix Marseille Université, France
2018
On the topology of rotational tiling spaces
2018-12-08
University of Bielefeld, Germany
Tiling spaces and tiling C*-algebras
2018-10-18
University of Glasgow, United Kingdom
The topology of aperiodic order
2018-10-16
The University of Glasgow, United Kingdom
Tools for investigating recurrence properties of polytopal cut and project schemes
2018-10-07
Korean Institute for Advanced Study (KIAS), Seoul, South Korea
Linear repetitivity for polytopal cut and project sets
2018-10-05
COEX Convention Center, Seoul, South Korea
Resurrecting the space group of an aperiodic pattern
2018-06-08
International Centre for Mathematical Sciences (ICMS), Edinburgh, United Kingdom
2017
Moduli spaces of patterns and their cohomology
2017-10-02
Durham University, United Kingdom
Topological invariants of substitution tilings and rotations
2017-09-30
University of Vienna, Austria
Linear repetitivity of cut-and-project sets
2017-06-21
Lorentz Center, Leiden, The Netherlands
Topological methods in aperiodicity (mini-course)
2017-06-07
University of Vienna, Austria
Aperiodic order, number theory and topology
2017-02-27
Durham University, United Kingdom
Visualising and computing invariants of patterns via pattern-equivariant Poincaré duality
2017-01-24
SDU, Odense, Denmark
2016
Hierarchical tilings and their hulls
2016-06-22
Cal Poly, San Luis Obispo, United States
Aperiodic order and number theory
2016-05-20
University of York, United Kingdom
2015
Pattern equivariant cohomology (Arbeitsgemeinschaft)
2015-10-05
MFO, Oberwolfach, Germany
Patch frequencies for cut-and-project sets
2015-06-24
NUI, Galway, Ireland
Frequency spectrums of cut-and-project sets
2015-01-13
Henry B. Gonzalez Convention Center, San Antonio, United States
A spectral sequence for the cohomology of rotational tiling spaces
2015-01-06
University of Leicester, United Kingdom
2014
Patch frequencies for cut-and-project sets & Diophantine approximation
2014-12-09
University of Leicester, United Kingdom
Poincaré duality for pattern-equivariant (co)homology
2014-03-26
The Open University, Milton Keynes, United Kingdom
2013
Topological Invariants of Tiling Spaces
2013-12-16
University of Sheffield, United Kingdom
Cite
×


As people can see, we have just moved from our old blog engine to the new ones. We lost a bit of pictures, but more funcitonalities.
Stephane
As people can see, we have just moved from our old blog engine to the new ones. We lost a bit of pictures, but more funcitonalities.
Stephane
W3C together with the Web Foundation today published the report from the W3C/Web Foundation Workshop on Mobile and Web Technologies in Social and Economic Development held in Dar es Salaam, Tanzania in June. The large and diverse group representing more than 30 different nationalities had engaging discussions on voice-based services for underprivileged communities, mobile entrepreneurship and data collection tools. The results of these discussions, as well as the actions identified will be investigated by the W3C Mobile Web for Social Development Interest Group and the Web Foundation.
W3C and the Web Foundation thanks the participants and appreciates the support of the Workshop sponsors: Spider (Gold Sponsor), Twaweza (Gold Sponsor) and Comviva (silver sponsor).
I realized i forgot to announce the organization of the fourth workshop on Mobile and Web Technologies for Social and Economic Development.
This event will take place in Dar es Salam, Tanzania, 4-5 June 2011. This event is co-organized by W3C and the Web Foundation. A call for participation has been issued last February, and submission of statements of interest is open till April 15 2011.
Like for the three previous instances, we also have a call for sponsors in order to offer travel grants to enable NGOs and field experts to attend and share their experience. If you are interested, feel free to contact Stephane Boyera.
The MW4D IG held the 7th teleconference of its second charter on November 15 2010.
The minutes are available at http://www.w3.org/2010/11/15-mw4d-minutes.html
Previous meeting minutes are available from the teleconference archives
The MW4D IG held the 6th teleconference of its second charter on October 11 2010.
The minutes are available at http://www.w3.org/2010/10/11-mw4d-minutes.html
Previous meeting minutes are available from the teleconference archives
The MW4D IG held the 5th teleconference of its second charter on September 13 2010.
The minutes are available at http://www.w3.org/2010/09/13-mw4d-minutes.html
Previous meeting minutes are available from the teleconference archives
The MW4D IG held the 4th teleconference of its second charter on September 6 2010.
The minutes are available at http://www.w3.org/2010/09/06-mw4d-minutes.html
Previous meeting minutes are available from the teleconference archives
The MW4D IG held the 3rd teleconference of its second charter on August 23 2010.
The minutes are available at http://www.w3.org/2010/08/23-mw4d-minutes.html
Previous meeting minutes are available from the teleconference archives
The MW4D IG held the 2nd teleconference of its second charter on August 2 2010.
The minutes are available at http://www.w3.org/2010/08/02-mw4d-minutes.html
Previous meeting minutes are available from the teleconference archives
The MW4D IG held its 1st teleconference of its second charter on July 5 2010.
The minutes are available at http://www.w3.org/2010/07/05-mw4d-minutes.html
Previous meeting minutes are available from the teleconference archives


batched_predictions = model.forward(*batched_predictions_args)
// split super-batch back into individual batches
batched_predictions = batched_predictions.reshape(
*batch_shape[:2], -1)
else:
batched_predictions = []
if len(attacks_requesting_gradients) > 0:
// split super-batch back into individual batches
batched_predictions = model.forward(inputs)
batched_predictions = np.split(batched_predictions, batch_splits,
axis=0)
else:
batched_predictions = []


The PlotDevice application is a convenient environment for writing scripts and being able to quickly see how your edits affect the graphical output. But once you're happy with the state of a script, you can start to treat it as a program in its own right (rather than a mere "document" that only exists inside the app).
The graphics core used by the application is also available in a "console" setting, allowing you to run your scripts from the command line. It can even be used as a traditional Python module that you import
into your own programs.
plotdevice
CommandThe scripts you write in PlotDevice can be run from the terminal using an external command line tool called plotdevice
. The command allows you to run scripts, coordinate with an external editor, and export images, movies, or animated GIFs.
In the application, open the Preferences window and click the Install button:
Select a destination folder in your shell’s PATH
and the application will create a symlink from there to the script contained in the app bundle. If admin privileges are required to access the selected folder, you will be prompted for your password.
Note that since this connection involves a symlink, the plotdevice
command will
break if you move the application after installing the tool. If this happens, you will see an
error message in the Preferences window and can reinstall the link using the same procedure as
before.
Once you have installed the plotdevice
tool you can run any of the ".pv" scripts you've written with the app. Running one of the example scripts is as simple as opening a Terminal window and typing:
You'll see a new document icon appear in the Dock and the script's output will be displayed in a window:
As in the PlotDevice application, you can use
and to re-run and interrupt the script. The menu items are also available to you.Running the command with just a filename argument will display its output in a window, but with the right combination of command line switches you can export graphics to file using any of the supported image/video formats.
There are quite a few optional switches:
plotdevice [-f] [-b] [--live] [--cmyk] [--virtualenv PATH] [--args [a [b ...]]] [--export FILE] [--frames N or M-N] [--fps N] [--rate N] [--loop [N]] file
But fear not; we'll walk through each of the options below.
-f
run full-screen
--virtualenv PATH
path to a virtualenv whose libraries you want to use (this should point to the top-level virtualenv directory)
--args [a [b ...]]
arguments to be passed to the script as sys.argv
-b
run PlotDevice in the background (i.e., don’t switch apps when the script is run)
--live
re-render graphics each time the script file is saved
--export FILE
a destination filename ending in pdf
, eps
, png
, tiff
, jpg
, gif
, or mov
--cmyk
convert colors to c/m/y/k before generating images (otherwise colors will be r/g/b)
--frames N or M-N
number of frames to render or a range specifying the first and last frames (default 1-150
)
--fps N
frames per second in exported video (default 30
)
--rate N
video bitrate in megabits per second (default 1
)
--loop [N]
number of times to loop an exported animated gif (omit N
to loop forever)
# Run a script plotdevice script.pv
# Run fullscreen plotdevice -f script.pv
# Save script's output to pdf plotdevice script.pv --export output.pdf
# Create an animated gif that loops every 2 seconds plotdevice script.pv --export output.gif --frames 60 --fps 30 --loop
# Create a sequence of numbered png files – one for each frame in the animation plotdevice script.pv --export output.png --frames 10
# Create a 5 second long H.264 video at 2 megabits/sec plotdevice script.pv --export output.mov --frames 150 --rate 2.0
Though the plotdevice
command provides a convenient way
to launch scripts with the PlotDevice interpreter, you may prefer to use the graphics context and
export functions from within your own module (and running whichever python
binary
your system or virtualenv provides).
Detailed installation instructions can be found in the project’s README
file. To
simplify the use of PlotDevice with other external libraries, we recommend installing the module
into a virtualenv alongside your script:
$ virtualenv env $ source ./env/bin/activate (env)$ pip install plotdevice
But you don't need to stop there. The Python Package Index has thousands of other modules your script can use. Install them into the virtualenv and your script will know just where to find them:
(env)$ pip install requests envoy bs4 # some other useful packages
A nice side-effect of installing into a virtualenv is that it automatically creates a copy of the plotdevice
command that's specific to that particular folder. When you "source" the activate
file, your path is adjusted to let you run the plotdevice
command without specifying its path:
$ source ./env/bin/activate (env)$ plotdevice myscript.pv # uses the tool found at ./env/bin/plotdevice
The plotdevice
module contains all the global commands and constants you're used to from the application. For instance, the following will draw a few boxes:
#!/usr/bin/env python from plotdevice import * for x, y in grid(10,10,12,12): rect(x,y, 10,10)
Though using "import *
" is generally frowned upon in the Python community, we feel like it's pretty easily justified in this case since PlotDevice's raison d'être is to make your drawing code short-and-sweet.
You can then generate output files using the export() command. It takes a file path as an argument and the format will be determined by the file extension (pdf
, eps
, png
, jpg
, gif
, or tiff
):
export('~/Pictures/output.pdf')
If you’re generating multiple images, be sure to reset the graphics state in between frames with:
clear(all)
But if you plan to do more than generate a one-off, you’ll likely find the with export() usage more convenient. The context-manager provides some handy methods for writing images, multi-page PDFs, and even animations.
As you can see from the toy example above, Python scripts that use the plotdeivce
module look a little different from scripts that run in the PlotDevice application. In particular, the lines at the very beginning of the Python script aren't necessary in the application since it provides all the graphics commands implicitly as part of the script's runtime environment.
In addition, scripts that run in the app or with the plotdevice
command expect special handling relating to animations. Just by defining a draw() method in your script, the viewer will repeatedly clear the canvas and call your method – even though the script itself doesn't explicity call it.
It's for this reason that the scripts you save from the application end with a .pv
extension rather than a .py
. The file extension is a small reminder that there are some missing pieces required to turn the file into full-fledged Python script.
Luckily, converting a .pv script to run without the plotdevice
tool is as simple as changing its file extension to py and adding three lines to the top of the code:
#!/usr/bin/env python # encoding: utf-8 from plotdevice import *
Importing the module won't give you the default animation behavior (though you can easily create movies with the export() command), but it will add all the familiar PlotDevice commands to the script's namespace. In addition, it will load all the necessary C-extensions and other system dependencies.
If you'd prefer to keep your namespace tidy, you can also import the module as-is. Just remember to prefix all your commands with the module name:
#!/usr/bin/env python # encoding: utf-8 import plotdevice as pd pd.size(256, 256) pd.background('red') pd.rect(64,64, 128,128, fill='white') pd.export('white-box.png')


CHPL Product Number:
{{ $ctrl.surveillance.certifiedProduct.chplProductNumber }}
Surveillance ID:
{{ $ctrl.surveillance.friendlyId }}
Surveillance initiated by:
{{ $ctrl.surveillance.authority === 'ROLE_ONC' ? 'ONC' : 'ONC-ACB' }}
Requirements
No Surveilled Requirements Found
| Type |
Requirement |
Result |
Non-conformities |
Remove |
Edit |
| {{ req.type.name }} |
{{ req.criterion ? ((req.criterion.removed ? 'Removed | ' : '') + req.criterion.number + ': ' + req.criterion.title) : req.requirement }} |
{{ req.result.name }} |
N/A
|
|
|


Hello User, this is a quick survey.
Please answer each question below selecting a value from 1 to 5.
Please rate from 1 to 5 the music genre below (With 1 being the highest scale and 5 the lowest:
Rock
1
2
3
4
5
Pop
1
2
3
4
5
Funk
1
2
3
4
5
Country
1
2
3
4
5
Blues
1
2
3
4
5
Please indicate your Age:
Less than 18
Between 19 and 29
Between 30 and 39
More than 40
Don't want to inform
Please indicate your gender:
Male
Female
Don't want to inform


Settings
public struct Settings
Provides settings for the sections like
- row animations
- section animations
- header view provider
- footer view provider
- flag is the section is collapsed
-
Row animations
Declaration
Swift
public var rowAnimationConfig: RowAnimationConfig
-
section animations
Declaration
Swift
public var sectionAnimationConfg: SectionAnimationConfig
-
header view provider update
Declaration
Swift
public var headerProviderUpdate: HeaderFooterUpdate
-
footer view provider update
Declaration
Swift
public var footerProviderUpdate: HeaderFooterUpdate
-
indicates if a section is collapsed or not
Declaration
Swift
public var collapsed: Bool


@(request: RequestHeader, messagesApi: MessagesApi) Remember: the link recipient will need cluster access to create a instance with this image! Ensure they have been provided with a cluster access pass. Expires Got it!
Remember: the link recipient will need cluster access to create a instance with this image!
Ensure they have been provided with a cluster access pass.


MAKE YOUR CAR & BIKE LAST LONGER
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since
Book AppointmentEXPERT TECHNICIANS, COMPETITIVE PRICES
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since
Book Appointment


---
layout: page
---
{% gallery gallery %}
front_limo.jpg:: Welcome
house_front.jpg:: Welcome
sunrise.jpg:: Sunrise
family_room_6.jpg:: Family room
family_room_7.jpg:: Family room
family_room_8.jpg:: Family room
family_room_looking_to_pool_deck.jpg:: Family room through to pool deck
breakfast_nook.jpg:: Breakfast nook
kitchen_through_to_nook.jpg:: Kitchen through to breakfast nook
dining_table.jpg:: Dining table
games_room.jpg:: Games room
bedroom_master.jpg:: Master bedroom
master_ensuite.jpg:: Master bedroom en-suite
second_master.jpg:: Second master bedroom
bedroom_3.jpg:: Third bedroom
bedroom_3_double_bed.jpg:: Third bedroom double bed
bedroom_4.jpg:: Fourth bedroom
lanai_area_3.jpg:: Lanai area
breakfast_table.jpg:: Breakfast in the Lanai
pool_1.jpg:: Pool
fruit_bowl.jpg:: Breakfast in the Lanai
pool_2.jpg:: Pool
pool_3.jpg:: Pool
pool_5.jpg:: Pool
spa_1.jpg:: Spa and pool
golf_bunker.jpg:: Southern Dunes golf course
wildlife.jpg:: The Southern Dunes locals
sunset.jpg:: Sunset over the golf course
sunset_2.jpg:: Sunset over the golf course
sunset_4.jpg:: Sunset over the golf course
{% endgallery %}


{%extends 'images/base.html'%} {% load bootstrap4 %} {% block content %} {{ block.super}} {% load staticfiles %}
{{image.caption | safe}}
{{image.likes | safe}} likes
{{comment.poster}} : {{comment.comment}}
No comments here yet :(


A face analyzing app that will scan and merge a base picture's face with a face from another picture.
It is so easy! You will need two photos that you would like to merge. Choose one of the options below as a way to upload your photos. The "im-merge-ination" process will take place right before your eyes!


We have blockchain!
- empower magnetic content
- orchestrate rich ROI
- maximize world-class e-services
- monetize dot-com communities
- deliver global action-items
- transform dynamic e-business
- deploy world-class e-services
- grow holistic metrics
- monetize cutting-edge partnerships
- morph out-of-the-box channels
- utilize seamless experiences
- whiteboard value-added mindshare


Since everything is dockerised. All commands should be run through docker-compose
. Remember to run these within the projects working directory.
To run a command;
docker-compose run --service-ports sg {command-goes-here}
docker-compose run sg npm install --save {package-name}
- Install a new packagedocker-compose run sg npm install --save @types/{package-name}
- Save new typescript typesdocker-compose run --service-ports sg npm start
- Complete a build from start to finish & make available at http://<IP_ADDRESS>:8080/When you wish to run StaticGenie NPM commands. Use the following command:
docker-compose run --service-ports sg npm run {commands-below}
.
Common / Dev
start
- runs all the build scripts in order and finishes by hosting them via a build in web server (start here)server
- Creates a server that serves your ./www directory (generated by StaticGenie) - For dev/test purposes onlytest
- @TODO - Compile and tests the javascript (although this isn’t working yet)Runners
build:fresh
- Removes files generated from the previous run. Ensures everything is clean and no previous artifacts left behindbuild:typescript
- Converts the typescript to javascriptbuild:pages
- Builds your web pagesbuild:assets
- Copies over any supporting assets .css, .js, .jpg etc from /theme/assets
to the /www/assets
directorybuild:clean
- Cleans up any temporary artifacts such as compiled typescript ready for the next buildbuild:optimise
- @TODO - Will perform optimisations like CSS/JS minification, etcIn the event the docs aren’t up to date and/or a command isn’t doing what you want it to. You can check the commands by opening /package.json
to see/modify the StaticGenie commands.
Trying to access the built in server via http://<IP_ADDRESS>:8080/ times out.
You have likely missed the --service-ports
part of the docker-compose run
command. Without it the adhock command to the docker container won’t open/map ports.


UEFA Champions League
Toggle navigation
Business Casual
Fixtures
Awards
History
Media
Individual
Awards
All Time
Top Goal Scorer
2014
Best Player in Europe
Cristiano
Ronaldo
Goals:
84
Apperances:
120
2011 & 2015
Best Player in Europe
2nd All Time
Top Goal Scorer
Lionel
Messi
Goals:
79
Apperances:
101
Most Apperances
Iker
Casillas
Goals:
0
Apperances:
156
UCL
Team of the 2015 Season
Goalkeeper
Gianluigi
Buffon
Juventus #1
Italian
Goalkeeper
Marc-Andre
ter Stegen
Barcelona #1
German
Defender
Branislav
Ivanovic
Chelsea #2
Serbian
Defender
Javier
Mascherano
Barcelona #14
Argentinian
Defender
Giorgio
Chiellini
Juventus #3
Italian
Defender
Gerard
Pique
Barcelona #3
Spanish
Defender
Jordi
Alba
Barcelona #18
Spanish
Midfielder
Claudio
Marchisio
Juventus #8
Italian
Midfielder
Ivan
Rakitic
Barcelona #4
Croatian
Midfielder
Andres
Iniesta
Barcelona #8
Spanish
Midfielder
Andrea
Pirlo
Juventus #21
Italian
Midfielder
Sergio
Busquets
Barcelona #5
Spanish
Midfielder
Toni
Kroos
Real Madrid #8
German
Forward
Luis
Suarez
Barcelona #9
Uruguay
Forward
Alvaro
Morata
Juventus #9
Spanish
Forward
Lionel
Messi
Barcelona #10
Argentinian
Forward
Cristiano
Ronaldo
Real Madrid #7
Portugal
Forward
Neymar
Barcelona #11
Brazilian


The KDM API at https://api.thewatcher.io is a RESTful API for campaign/settlement management in "Monster" by Kingdom Death.
The API is a fan-created and fan-maintained project that is not supported by, affiliated with or otherwise authorized by Kingdom Death.
Some parts of the API are free to use. Others require an API key. Endpoints that require an API key to access are indicated below by the key (🔑) icon.


Global board configuration
rxjs event based handler used to communicate events (click, highlight, move) between board tracks
DOM elemnt id where the board will be displayed
Flag indicating that the React component has been mounted
Configuration for each board track
Array storing board tracks ids
Add selection to board
region/elements
Adds a new track to the board
Track configuration data
Adds new annotations for a particular board track
Id that identifies the track
Annotations to be added in the track
Changes track visibility (true/false)
Track visibility event data
Method used to check data config properties
Array of track configurations
Clear Selection
board configuration
Returns all track Ids in the same order that are visualised in the board
Method used to check and force the identification for each track
Array of track configurations
Renders the board
Rerender the board track
Id that identifies the track
Loads the configuration of the board
Configuration of the board
Loads the configuration for each row of the board
Array of configurations for each row in the board
Change board view range
new xScale domain
Select board range
region/elements
Unmount the board
Method used to update board global and all-tracks configuration
New board configuration data
Replaces annotations a particular board track
Id that identifies the track
New annotations to be displayed
Checks track visibility attribute, if undefined it is set to true
Array of track configurations
Generated using TypeDoc
Protein Feature Viewer entry point


The Photography of Kerry Nordstrom
Contact
Personal
Landscape
Cycling
About
Home
As an amateur photographer who focuses on candid action photography, I want to create a dynamic online portfolio so that I can market my talents and interests to likeminded individuals.


Here at SBP, we have gotten a lot of feedback from you, our customer base, over the years, and we've listened. That's right , now YOU can sign up to our bi-weekly newsletter and stay up to date on all the latest info and news surrounding this smug, little bug. All you need to do is sign up using a valid email and phone number, and we'll keep you up-to-date on all the newest Smug Bug happenings, news, and deals. No strings (or webs) attached!
You can cancel your subscription to the Smug Bug Newsletter at any time by decoding the morse code/cipher riddle included at the bottom of every email.
*Smug Bug is not responsible for any side effects, diseases, or other disorders that may occur after prolonged exposure to his infectious cuteness. Should you start cooing and giggling at the sight of any small insects, you may need to see your doctor.
"My life is much since signing up for the news letter. I can't believe the difference it's made in my everyday health! It's even solved all of my personality issues!"
-Satisfied Customer
Smug Bug and The Smug Bug Newsletter are registered trademarks of Smug Bug Productions. Smug Bug's face is Reserved to Smug Bug Productions. Smug Bug is required by The Bug Act of 1504 to remain a property of Smug Bug Productions until January 1st, 2204 or Smug Bug dies.


THE ASSOCIATE A film review by Renee Chow Copyright 1997 Flying Inkpot
Directed by: Donald Petrie Written by: Jenaro Prieto (novel El Socio) Nick Thiel Cast: Whoopi Goldberg (Laurel Ayres), Dianne Wiest ( Sally Doogan), Eli Wallach (Fallon), Timothy Daly (Frank), Bebe Neuwirth (Camille Austin Pendleton) Produced by: Buena Vista Pictures / Hollywood Pictures / Interscope Communications / PolyGram Rating : *** Run Time: 113 Minutes
WHOOPIN' SEXISM
For a movie that aims to dispel the prejudicial stereotypes of sexism, THE ASSOCIATE may succeed in some aspects, but it ends up falling into a patterned plot and perpetuating other forms of sexism.
What is the role of a woman in the ruthlessly competitive and testorone-tilted world of Wall Street? She could be a secretary and get called "sweetie," or she could do all the work and let her male partner take all the credit. After all, if business deals are to be closed in strip bars, a woman can hardly expect any respect. Perhaps she should get breast enlargements. At the very least, she would then be able to get some attention, proceeding then to sleep her way to the top. Through it all, she must never show her temper, for it would surely be interpreted as pre-menstrual syndrome. Such a starkly stereotupical but realistic portrait of corporate culture is portrayed in THE ASSOCIATE.
It seems as if the only way a woman can break down the barriers errected by the Wall Street Boys' Club is to become a man, which is precisely what Whoopi Goldberg's character, Laurel Ayres, does. As a financial analyst who fails to get the recognition she deservesbecause of her gender and race, she creates and subsequently dons the persona of the fictitious Robert Cutty. Using her intelligence and business savvy behind the persona of this imaginary White, Caucasian male,she achives exceptional success. her partner in crime is fellow secretary Sally, played engagingly by two-time Academy Award winning Dianne Wiest. However, hilarious fixes arise when Cutty's fabricated persona becomes the target of the insatiable media, makes deals with Laurel's devious competitor (portrayed with wicked gleefulness by Tim Daly), gets subpoenaed for fraud, and even "fathers" a child.
Whoopi Goldberg's androgynous appeal, comic talent and intelligence lend realism and humour to the character of Laurel. As an African-American woman overcoming discrimination and beating the odds, we champion her cause and what she represents. However, Goldberg's portrayal fails to illicit sympathy and audience-identification. As with THE COLOR PURPLE, her steely edge and street-smarts make her unbelievable as a marginalized and exploited figure.
Furthermore, even as it continues to be a ver real and pressing issue today, the storline of Black Woman versus White Man seems cliched when dealth with in comedy, especially since the possibility was raised back in the sixties of God being a Black Woman. In addition, the disguise strategy recalls films like MRS DOUBTFIRE and THE NUTTY PROFESSOR, and makes the plot's unfolding highly predictable.
Finally, even as the movie shatters female stereotypes, it perpetuates male ones. The mend o not develop beyond being cariacatures of the manipulative businessman, the fumbling nerd genius and the sensitive new-age man. As such there is an imbalance in the treatment of issues of prejudice. Directed by Donald Petrie, known for such hit comedies as MYSTIC PIZZA and GRUMPY OLD MEN, THE ASSOCIATE merely retells, albeit with the slightest dash of humour, a well-known tale of sexism in today's society.
The Flying Inkpot Rating System: * Wait for the TV2 broadcast. ** A little creaky, but still better than staying at home with Gotcha! *** Pretty good, bring a friend. **** Amazing, potent stuff. ***** Perfection. See it twice.
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


Activities
A list of activities that are avalible to you on the island!
There are many fun and exciting activities for you and your family to enjoy while here at the resort! All are completely optional and some are age restricted.
-
Bingo! All ages from 9pm to 10pm everyday
-
Vollyball Tounament. 18+ from 10am to 2pm on Fridays
-
Kids Vollyball Tounament. 8-13 from 10am to 2pm on Mondays
-
Adult Karaoke. 21+ from 12am to 4am everyday
-
Karaoke. All ages from 7am to 10pm everyday


Brahmapur Municipal Corporation has 8 (Eight) Kalyan Mandaps and 3 community centres at different locations of Brahmapur. It is mainly used as marriage or reception venues. Major mandaps are Nayapalli Kalyan Mandap, Sahidnagar Kalyan Mandap (Ground floor), Sahidnagar Kalyan Mandap (First floor), V.S.S Nagar Kalyan Mandap, Chandrasekharpur Kalyan Mandap, Badagada Kalyan Mandap, Dakhinchandi Kalyan Mandap, Unit-8 Community Centre, Shastri Nagar Community Centre. You can also avail Off season discounts "50% for Birthdayv/ Meeting / Satsang" between April, August, September and October). Also you can get 30% discount for Exhibition / Mela / Mina Bazar. Aiming for a better coverage of Kalyan Mandap in Bhubaneswar, the Bhubaneswar Municipal Corporation (BMC) has identified the locations for setting up 19 new Kalyan Mandap in across the city. Existing 8 Kalyan Mandaps & 3 community centres are not enough to meet the requirements, specially during the peak wedding seasons. The citizens were left with no choice but to book the private wedding halls at a much higher price. But with the identification of the land for the mandap, the BMC is now one step closer towards their construction. The BMC also has provisions to upgrade and modernise the existing seven kalyan mandaps.
Salient Features
The aesthetic design, modern amenities and prime location makes us an ideal choice for marriages, various festivities and celebrations. Features such as ample parking space, modern kitchen facilities, A/C Hall, A/C rooms for bride and groom, spacious dining hall, fully covered buffet space sets it apart.
Centralized A/C hall
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusamus aliquam culpa cum dolorum incidunt minima necessitatibus neque, nisi nulla obcaecati odio optio perspiciatis quam, quibusdam quis sed tempora unde veritatis.
Spacious area available parking
Lorem ipsum dolor sit amet, consectetur adipisicing elit.  Accusamus aliquam culpa cum dolorum incidunt minima necessitatibus neque, nisi nulla obcaecati odio optio perspiciatis quam, quibusdam quis sed tempora unde veritatis.
Hygine Foods
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusamus aliquam culpa cum dolorum incidunt minima necessitatibus neque, nisi nulla obcaecati odio optio perspiciatis quam, quibusdam quis sed tempora unde veritatis.
Spacious area available parking
Lorem ipsum dolor sit amet, consectetur adipisicing elit.  Accusamus aliquam culpa cum dolorum incidunt minima necessitatibus neque, nisi nulla obcaecati odio optio perspiciatis quam, quibusdam quis sed tempora unde veritatis.
Centralized A/C hall
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusamus aliquam culpa cum dolorum incidunt minima necessitatibus neque, nisi nulla obcaecati odio optio perspiciatis quam, quibusdam quis sed tempora unde veritatis.
Spacious area available parking
Lorem ipsum dolor sit amet, consectetur adipisicing elit.  Accusamus aliquam culpa cum dolorum incidunt minima necessitatibus neque, nisi nulla obcaecati odio optio perspiciatis quam, quibusdam quis sed tempora unde veritatis.


President Alvi confers Nishan-e-Imtiaz upon Turkish Chief of Armed Forces | Pakistan - Geo.tv
by Web DeskPresident Arif Alvi on Wednesday conferred the Nishan-e-Imtiaz (Military) upon Turkish Chief of Armed Forces General Yasar Güler at a special investiture ceremony at the Aiwan-e-Sadr in Islamabad.
On the occasion, the president said that the unparalleled fraternal relationship between Pakistan and Turkey has now transformed into a strong strategic partnership over the years and is growing stronger.
He said that the English TV channel to be collaboratively launched by Pakistan, Turkey, and Malaysia would go a long way toward combating Islamophobia on an international level.
The president said that Pakistan and Turkey had supported each other in difficult times and appreciated the Turkish support on the occupied Kashmir issue, particularly at the United Nations.
He reiterated concerns about Indian atrocities perpetrated on innocent Kashmiris and said that the international community should play a positive role to resolve the issue.
He stressed that there is a vast potential for investment in Pakistan especially in energy, infrastructure and food processing sector. He said Turkish investments have considerably grown, however, more needed to be done to realize the full bilateral trade potential.
General Yasar Guler said that Turkey fully supported Pakistan on Kashmir issue and expressed hope that India and Pakistan would resolve the issue in accordance with UN resolutions.


There are 3 Main Ways to target HTML elements.
Im going to give a Header tag the styles of color:red; and background of gray;
CSS h1 { color: red; background-color: blue; /*This color is selected using Hexidecimal numbers. ff ff ff or RR GG YY. As you change the values the amount of Red Green or Yellow they change color*/ }
This h1 tag has a color of red and background of blue!
You can do this with any tag. But this will target all instances that the tag is in the HTML as long as it does not have a class or id.
Let me target all paragraphs and make there color green and font-size!
CSS p { font-size:24px; // Font-size is mainly used with (px) or pixels color:green; }
This Paragraph text is green with a font of 24 pixels
HTML
 Text here
 CSS .className{ color:red; font-size:30px; background-color:gray; }
Text Here
HTML
 Text here
 CSS #idName{ color:green; font-size:16px; background-color:orange; }
Text Here
By far Box Model is the hardest thing you'll learn in CSS. But as your create more pages, you will get used to it.
W3 Box Model


Welcome to RideMyWay! A carpooling app that provides drivers with the ability to create ride offers and passengers to join in.
Sign up to proceed
Do you own a car
Not Registered? Signup


Class Cubes
Cubes
Namespace: CubesBundle\Entity
Orm\entity(repositoryclass="cubesbundle\repository\cubesrepository")
Orm\table(name="cubes")
Located at CubesBundle/Entity/Cubes.php
Orm\entity(repositoryclass="cubesbundle\repository\cubesrepository")
Orm\table(name="cubes")
Located at CubesBundle/Entity/Cubes.php
public
integer
|
|
public
|
|
public
string
|
|
public
|
|
public
string
|
|
public
|
|
public
DateTime
|
|
public
|
|
public
string
|


SVV_VACUUM_SUMMARY
The SVV_VACUUM_SUMMARY view joins the STL_VACUUM, STL_QUERY, and STV_TBL_PERM tables to summarize information about vacuum operations logged by the system. The view returns one row per table per vacuum transaction. The view records the elapsed time of the operation, the number of sort partitions created, the number of merge increments required, and deltas in row and block counts before and after the operation was performed.
SVV_VACUUM_SUMMARY is visible only to superusers. For more information, see Visibility of Data in System Tables and Views.
Table Columns
| Column Name | Data Type | Description |
|---|---|---|
| table_name | text | Name of the vacuumed table. |
| xid | bigint | Transaction ID of the VACUUM operation. |
| sort_partitions | bigint | Number of sorted partitions created during the sort phase of the vacuum operation. |
| merge_increments | bigint | Number of merge increments required to complete the merge phase of the vacuum operation. |
| elapsed_time | bigint | Elapsed run time of the vacuum operation (in microseconds). |
| row_delta | bigint | Difference in the total number of table rows before and after the vacuum. |
| sortedrow_delta | bigint | Difference in the number of sorted table rows before and after the vacuum. |
| block_delta | integer | Difference in block count for the table before and after the vacuum. |
| max_merge_partitions | integer | This column is used for performance analysis and represents the maximum number of partitions that vacuum can process for the table per merge phase iteration. (Vacuum sorts the unsorted region into one or more sorted partitions. Depending on the number of columns in the table and the current Amazon Redshift configuration, the merge phase can process a maximum number of partitions in a single merge iteration. The merge phase will still work if the number of sorted partitions exceeds the maximum number of merge partitions, but more merge iterations will be required.) |
Sample Query
The following query returns statistics for vacuum operations on three different tables. The SALES table was vacuumed twice.
select table_name, xid, sort_partitions as parts, merge_increments as merges, elapsed_time, row_delta, sortedrow_delta as sorted_delta, block_delta from svv_vacuum_summary order by xid; table_ | xid |parts|merges| elapsed_ | row_ | sorted_ | block_ name | | | | time | delta | delta | delta --------+------+-----+------+----------+---------+---------+-------- users | 2985 | 1 | 1 | 61919653 | 0 | 49990 | 20 category| 3982 | 1 | 1 | 24136484 | 0 | 11 | 0 sales | 3992 | 2 | 1 | 71736163 | 0 | 1207192 | 32 sales | 4000 | 1 | 1 | 15363010 | -851648 | -851648 | -140 (4 rows)


Our pizzas come with red sauce and shredded mozzarella.Choose your size and any additional toppings you'd like!
$11 starting costAdditional toppings $1/each
$17 starting costAdditional toppings $2/each
$23 starting costAdditional toppings $3/each


Name
Age
Gender
Status
Ilia
30
m
Free
Tim
39
m
On duty
Marina
25
f
Ready to teach
Klivden
42
m
Leeeroy Jenkins!
Ivan
17
m
Ready to teach


I am looking at a protocol that "consumes" less bytes than HTTP because I would like to send data to EmonCMS via a USB stick modem.
I have a few questions about MQTT:
- I am running an emonhub version downloaded from github.com/emonhub/emonhub/tree/development in Februar this year. I guess I need to update it to take into account MQTT.
- Is there any distribution that would install emonhub + MQTT or do I need to get these 2 tools separately?
- Which MQTT distribution should I install on a Raspberry? Mosquitto ?
- Is there any good tool to simulate the MQTT protocol, I mean a tool that behaves as a client?
Thanks for your help
Re: MQTT versus HTTP protocols
Try MQTTSpy.
Re: MQTT versus HTTP protocols
I use Mosquitto
You also need to ensure that your emoncms installation is up to date, as it's only worked from (I think!) v8.5. I'm using v9 and it works great - both subscribing and publishing.
Paul
Re: MQTT versus HTTP protocols
- Is there any good tool to simulate the MQTT protocol, I mean a tool that behaves as a client?
If you also install mosquitto-clients you'll get two command line programs: mosquitto_pub and mosquitto_sub.
Re: MQTT versus HTTP protocols
Thanks for your inputs.
I am going to start from that page github.com/openenergymonitor/emonhub and see what I need to install. I have a Raspi but don't need any radio link. Data are coming through a serial to USB port directly and will be pushed to a EmonCMS instance on my Linux Shared Web Hosting service where EmonCMS 9.0 RC is running.
The only radio link is the GSM/UMTS modem. Let's see how this can be achieved...


| About Dailyrotten |
|
Feedback
If you like this page, hate it, or would like to suggest changes,
<EMAIL_ADDRESS>is listening. This page
is experimental and somewhat different from what we usually offer, so please
do send your feedback.
Adding Stories
If you are a rotten newshound and you would like to suggest a story,
visit our submit page to
send us the URL. Stories that are accepted will have your name credited.
Posting Comments
In order to post comments to stories, you will have to
create an account.
Accounts will generally be validated within 24 hours, and of
course will be disabled if there is abuse.
Viewership
On the first full day this page went live, 100,000 people visited this Rotten
News page. Of course that was the day after the WTC attacks, so that number is
somewhat distorted. Right now this page gets between 50,000 and 75,000 people
every day.
Linking
We encourage everyone to link to this page; if you like it, others probably
will as well.
Other Rotten
Rotten
Gaping Maw
Celebrity Morgue
Mugshots
Rotten Store
Rate My Poo
Rate My Kitten
Rate My Finger
Penny Postcards
Phallic
Boners
Home
Make Dailyrotten your start page
|
|
|
March 19, 2002
Sperm bank loses its cool
The Scotsman | Submitted by: Insanewarlock
"A Scottish hospital was yesterday accused of covering up an accident which
has left hundreds of cancer patients facing a childless future... Health trust
officials revealed yesterday that samples of sperm taken from 296 patients
before undergoing cancer treatment may have been damaged after a freezer
'over-heated' over a 48-hour period." It took them 8 months to admit the error.
|
|
Read article...
|
|
Five years prison for biting off nipple
World Online | Submitted by: kara
"A woman who bit off the nipple of her Indonesian maid has been sentenced
to five years in jail - Singapore's stiffest sentence yet for maid abuse.
And the judge rejected an argument that chronic depression had led the
boss to commit cruel acts. The district judge, Wong Keen Oon, said that
biting the 19-year-old woman's breasts until one nipple fell off was
"obviously aimed at inflicting the most extreme form of
humiliation on the maid".
|
|
Read article...
|
|
Taliban receives oral sex on stage
Guardian | Submitted by: cat
Local authorities in the southern Spanish city of Granada were meeting yesterday to discuss withdrawing funding from an international comic fair
after organisers decided to enliven an awards ceremony by paying two
actors to dress up as Taliban and perform live oral sex on stage.
|
|
Read article...
|
|
Massive clown protest ends in chaos
Santa Cruz Sentinel | Submitted by: Scooter
"You are born a clown. And for those brave enough to be out as clowns,
the world can be a cold and unwelcome place. As long as one clown is
oppressed, no man is free." And on that note, eighty clowns took to the
streets to frighten the good citizens of Santa Cruz before abandoning
their crusade for alcohol and karaoke. Even the mimes hate them.
|
|
Read article...
|
|
Nigger not offensive
AAP | Submitted by: cat
The name of a stadium in Australia monikered after rugby player "Nigger"
Brown has been deemed inoffensive by a High Court. "Mr Brown, who had blond
hair and blue eyes, was nicknamed "Nigger" by his teammates because he was
a dapper dresser who used to polish his shoes with "Nigger Brown" polish
that was available in those days."
|
|
Read article...
|
|
Buggery taints Ireland
The Anglo-Celt | Submitted by: kev
It almost seems quaint:
"It was stated in court that the defendant was buggered on scores of
occasions as a young man by local farmers during haymaking time and by a
local publican. Those people had told him that what they were doing was
not wrong, that it was natural. Matters like this were not talked about
in the rural Ireland of the 50s and 60s."
|
|
Read article...
|
|
U.S. monitoring drug advocates
US Department of Justice | Submitted by: f00f
"This report is an overview of the threat that certain Internet websites
pose to adolescents and young adults in the United States. This preliminary
baseline is intended to assist policymakers in countering this threat to
America's youth. This report focuses on websites that promote or facilitate
the production, use, and sale of MDMA, GHB, and LSD, three significant
"club drugs."
|
|
Read article...
|
|
Urine sales banned in South Carolina
The Register | Submitted by: Todd
Selling of Urine is now banned in the State of South Carolina after a
Surpreme Court ruling.  The urine comes complete with a pouch, tubing,
and warming packet designed to keep the urine at a suitable
temperature. Supposedly enough urine is supplied for two tests. Curtis has
moved his business to North Carolina.
|
|
Read article...
|
|
New form of pollution discovered
space.com | Submitted by: Soylent
"The new law defines light pollution as 'every form of illumination
by artificial light which is dispersed outside the areas it is dedicated to,
particularly if directed above the level of the horizon.' Under the law,
Czech Republic citizens and organizations are obligated to take measures
to prevent the occurrence of light pollution of the air."
|
|
Read article...
|
|
|
|
|


Options
Save
|
Cancel
Feed Behavior Options
Feed management
Import Feeds
Export Feeds
Categories management
Import Categories
Export Categories
Options management
Import Options
Export Options
Default max items
Search depth level tag
Search depth level tags
Feed Display Options
Dark mode
Off
On
Font size
Normal
Medium
Large
Description
Off
On
Images
Off
On
Objects (like movies)
Off
On
IFrames
Off
On
Load links in background
Off
On
Show all feeds in one
Off
On
Use view by categories
Off
On
Show thumbnail in feeds
Off
On
Max height of feeds
px (0 =
unlimited
)
Columns
1
2
3
4
Content
Show only summary
Show feed content (if available)
Content summary
Show full content by default
Show summary by default
Don't show summary
Date format
Done
Code
Description
[u]
Makes the output use GMT. (Otherwise local)
[yyyy]
4 digit year
[yy]
2 digit year
[mmmm]
Full text month
[mmm]
3 letter month
[mm]
Zero padded month
[m]
Month
[ddd]
The day with suffix
[dd]
Zero padded day
[d]
Day
[hh]
Zero padded hours
[h]
Hours
[12hh]
Hours in zero padded 12 hour format
[12h]
The hour in 12 hour format
[nn]
Zero padded minutes
[n]
Minutes
[ss]
Zero padded seconds
[s]
Seconds
[ww]
Full text weekday
[w]
3 letter weekday
[a]
AM/PM
Force English language
Off
On
Information
Name
Description
Version
GitHub URL
https://github.com/gandf/slick-rss
Help with translation
https://github.com/gandf/slick-rss/discussions/29
Extension to find feed URL in web page
https://chrome.google.com/webstore/detail/get-rss-feed-url-for-slic/odocamobgglamolbifdmdlhglgmkpfag
Storage usage
Active log in console
Off
On
Show link to tool to find feeds
Off
On
Feed Unread Options
Update interval
minutes
Mark all read after
seconds (0 = disabled)
Mark all read after title click
Off
On
Don't mark item read on click on title link
Off
On
Read item display
Gray
Condensed
Show total unread
Off
On toolbar
On tab
On toolbar & tab
Show totals in feed list
Off
On
Enable notification
Off
On
Read Later Options
Read later support
Off
On
Remove when viewed
Off
On
Show button to save one feed
Off
On


Common issues with site links are often due to one of the following:
If you don't see your web resource's content in the browser window, the URL may not be correct, or the content's server may be down or slow to respond.
If your web site opens in a new browser window, it's because the URL has an "http" address. Only pages with an "https" address will open within Etudes in most browsers.
If you can't connect to your publisher's website, you may have not entered a valid URL, key and secret. Please contact your Distance Education office for information.
Before saving, make sure all links have a title and a valid URL.
Enter information to configure external tool provider.
Configure External Tool
If you experience difficulties connecting to your external services provider, verify with the vendor that you have the correct URL, key, secret and any parameters.
Configure external services providers to be used in the site.


Descriptive statistics in ‘Tplyr’ are created using group_desc()
function when creating a layer. While group_desc()
allows you to set your target, by variables, and filter criteria, a great deal of the control of the layer comes from set_format_strings()
where the actual summaries are declared.
tplyr_table(adsl, TRT01P) %>% add_layer( group_desc(AGE, by = "Age (years)", where= SAFFL=="Y") %>% set_format_strings( "n" = f_str("xx", n), "Mean (SD)"= f_str("xx.x (xx.xx)", mean, sd), "Median" = f_str("xx.x", median), "Q1, Q3" = f_str("xx, xx", q1, q3), "Min, Max" = f_str("xx, xx", min, max), "Missing" = f_str("xx", missing) ) ) %>% build() %>% kable()
| row_label1 | row_label2 | var1_Placebo | var1_Xanomeline High Dose | var1_Xanomeline Low Dose | ord_layer_index | ord_layer_1 | ord_layer_2 |
|---|---|---|---|---|---|---|---|
| Age (years) | n | 86 | 84 | 84 | 1 | 1 | 1 |
| Age (years) | Mean (SD) | 75.2 ( 8.59) | 74.4 ( 7.89) | 75.7 ( 8.29) | 1 | 1 | 2 |
| Age (years) | Median | 76.0 | 76.0 | 77.5 | 1 | 1 | 3 |
| Age (years) | Q1, Q3 | 69, 82 | 71, 80 | 71, 82 | 1 | 1 | 4 |
| Age (years) | Min, Max | 52, 89 | 56, 88 | 51, 88 | 1 | 1 | 5 |
| Age (years) | Missing | 0 | 0 | 0 | 1 | 1 | 6 |
Let’s walk through this call to set_format_strings
to understand in detail what’s going on:
set_format_strings()
become the row label in the output. This allows you to define some custom text in set_format_strings()
to explain the summary that is presented on the associated row. This text is fully in your control.f_str()
. As explained in the vignette("Tplyr")
, this is an object that captures a lot of metadata to understand how the strings should be presented.f_str()
call, you see x’s in quotes. This defines how you’d like the numbers formatted from the resulting summaries. The number of x’s you use on the left side of a decimal control the space allotted for an integer, and the right side controls the decimal precision. Decimals are rounded prior to string formatting - so no need to worry about that. Note that this forcefully sets the decimal and integer precision - ‘Tplyr’ can automatically determine this for you as well, but more on that later.f_str()
calls have two summaries specified. This allows you to put two summaries in the same string and present them on the same line.But where do these summary names come from? And which ones does ‘Tplyr’ have?
We’ve built a number of default summaries into ‘Tplyr’, which allows you to perform these summaries without having to specify the functions to calculate them yourself. The summaries built in to ‘Tplyr’ are listed below. In the second column are the names that you would use within an f_str()
call to use them. In the third column, we have the syntax used to make the function call.
| Statistic | Variable Names | Function Call |
|---|---|---|
| N | n | n() |
| Mean | mean | mean(.var, na.rm=TRUE) |
| Standard Deviation | sd | sd(.var, na.rm=TRUE) |
| Median | median | median(.var, na.rm=TRUE) |
| Variance | variance | var(.var, na.rm=TRUE) |
| Minimum | min | min(.var, na.rm=TRUE) |
| Maximum | max | max(.var, na.rm=TRUE) |
| Interquartile Range | iqr | IQR(.var, na.rm=TRUE, type=getOption(‘tplyr.quantile_type’) |
| Q1 | q1 | quantile(.var, na.rm=TRUE, type=getOption(‘tplyr.quantile_type’))[[2]] |
| Q3 | q3 | quantile(.var, na.rm=TRUE, type=getOption(‘tplyr.quantile_type’))[[4]] |
| Missing | missing | sum(is.na(.var)) |
Note that the only non-default option being used in any of the function calls above is na.rm=TRUE
. For most of the functions, this is likely fine - but with IQR, Q1, and Q3 note that there are several different quantile algorithms available in R. The default we chose to use is the R default of Type 7:
\[
m = 1-p. p[k] = (k - 1) / (n - 1). \textrm{In this case, } p[k] = mode[F(x[k])]. \textrm{This is used by S.}
\] That said, we still want to offer some flexibility here, so you can change the quantile algorithm by switching the tplyr.quantile_type
option. If you’re intending to match the SAS definition, you can use Type 3. For more information, see the stats::quantile()
documentation.
The example below demonstrates using the default quantile algorithm in R.
tplyr_table(adsl, TRT01P) %>% add_layer( group_desc(CUMDOSE) %>% set_format_strings("Q1, Q3" = f_str('xxxxx, xxxxx', q1, q3)) ) %>% build() %>% select(-starts_with("ord")) %>% kable()
| row_label1 | var1_Placebo | var1_Xanomeline High Dose | var1_Xanomeline Low Dose |
|---|---|---|---|
| Q1, Q3 | 0, 0 | 2646, 13959 | 1984, 9801 |
This next example demonstrates using quantile algorithm Type 3, which matches the SAS definition of:
\[ \textrm{Nearest even order statistic. γ = 0 if g = 0 and j is even, and 1 otherwise.} \]
options(tplyr.quantile_type = 3) tplyr_table(adsl, TRT01P) %>% add_layer( group_desc(CUMDOSE) %>% set_format_strings("Q1, Q3" = f_str('xxxxx, xxxxx', q1, q3)) ) %>% build() %>% select(-starts_with("ord")) %>% kable()
| row_label1 | var1_Placebo | var1_Xanomeline High Dose | var1_Xanomeline Low Dose |
|---|---|---|---|
| Q1, Q3 | 0, 0 | 2565, 13959 | 1944, 9774 |
It’s up to you to determine which algorithm you should use - but we found it necessary to provide you with the flexibility to change this within the default summaries.
But what if ‘Tplyr’ doesn’t offer you the summaries that you need?
We understand that our defaults may not cover every descriptive statistic that you’d like to see. That’s why we’ve opened to door to creating custom summaries. Custom summaries allow you to provide any function you’d like into a desc layer. You can focus on the derivation and how to calculate the number you want to see. ‘Tplyr’ can consume this function, and use all the existing tools within ‘Tplyr’ to produce the string formatted result alongside any of the default summaries we provide as well.
Custom summaries may be provided in two ways:
tplyr.custom_summaries
option set at your session levelset_custom_summaries()
at the layer levelAs with any other setting in ‘Tplyr’, the layer setting will always take precedence over any other setting.
Let’s look at an example.
tplyr_table(adsl, TRT01P) %>% add_layer( group_desc(vars(AGE, HEIGHTBL), by = "Sepal Length") %>% set_custom_summaries( geometric_mean = exp(sum(log(.var[.var > 0]), na.rm=TRUE) / length(.var)) ) %>% set_format_strings( 'Geometric Mean (SD)' = f_str('xx.xx (xx.xxx)', geometric_mean, sd) ) ) %>% build() %>% select(-starts_with("ord")) %>% kable()
| row_label1 | row_label2 | var1_Placebo | var1_Xanomeline High Dose | var1_Xanomeline Low Dose | var2_Placebo | var2_Xanomeline High Dose | var2_Xanomeline Low Dose |
|---|---|---|---|---|---|---|---|
| Sepal Length | Geometric Mean (SD) | 74.70 ( 8.590) | 73.94 ( 7.886) | 75.18 ( 8.286) | 162.17 (11.522) | 165.51 (10.131) | 163.11 (10.419) |
Here, a few important things are demonstrated:
AGE
and HEIGHTBL
are being summarized in the same layer. AGE
results go to the var1_
variables and HEIGHTBL
results go to the var2_
variables.set_custom_summaries()
, or names on the left side of the equals, flow into set_format_strings()
in the f_str()
calls. Just like the default summaries, geometric_mean
becomes the name that you refer to in order to use the geometric mean derivation in a summary..var
. This may not seem intuitive. The reason we have to use .var
is so that, like in this example, the custom function can be applied to each of the separate target variables.Another note about custom summaries is that you’re able to overwrite the default summaries built into ‘Tplyr’ as well. Don’t like the default summary functions that we provide? Use the tplyr.custom_summaries
option to overwrite them in your session, and add any new ones that you would like to include.
For example, here we use the ‘Tplyr’ default mean.
tplyr_table(adsl, TRT01P) %>% add_layer( group_desc(AGE) %>% set_format_strings("Mean" = f_str('xx.xx', mean)) ) %>% build() %>% kable()
| row_label1 | var1_Placebo | var1_Xanomeline High Dose | var1_Xanomeline Low Dose | ord_layer_index | ord_layer_1 |
|---|---|---|---|---|---|
| Mean | 75.21 | 74.38 | 75.67 | 1 | 1 |
But now, let’s overwrite mean
using a custom summary. Let’s use a trimmed mean instead, taking 20% of observations off of both ends.
options(tplyr.custom_summaries = rlang::quos( mean = mean(.var, na.rm=TRUE, trim=0.4) ) ) tplyr_table(adsl, TRT01P) %>% add_layer( group_desc(AGE) %>% set_format_strings("Mean" = f_str('xx.xx', mean)) ) %>% build() %>% kable()
| row_label1 | var1_Placebo | var1_Xanomeline High Dose | var1_Xanomeline Low Dose | ord_layer_index | ord_layer_1 |
|---|---|---|---|---|---|
| Mean | 76.28 | 75.94 | 77.44 | 1 | 1 |
Note that the table code used to produce the output is the same. Now ‘Tplyr’ used the custom summary function for mean
as specified in the tplyr.custom_summaries
option. Also note the use of rlang::quos()
. We’ve done our best to mask this from the user everywhere possible and make the interfaces clean and intuitive, but a great deal of ‘Tplyr’ is built using ‘rlang’ and non-standard evaluation. Within this option is one of the very few instances where a user needs to concern themselves with the use of quosures. If you’d like to learn more about non-standard evaluation and quosures, we recommend Section IV in Advanced R.
A lot of the nuance to formatting descriptive statistics layers has already been covered above, but there are a couple more tricks to getting the most out of ‘Tplyr’. One of these tricks is filling empty values.
By default, if there is no available value for a summary in a particular observation, the result being presented will be blanked out.
adlb_2 <- adlb %>% filter(TRTA != "Placebo") tplyr_table(adlb_2, TRTA) %>% set_pop_data(adsl) %>% set_pop_treat_var(TRT01P) %>% add_layer( group_desc(AVAL, by=PARAMCD) %>% set_format_strings('Mean (SD)' = f_str('xxx (xxx)', mean, sd)) ) %>% build() %>% head() %>% select(-starts_with("ord")) %>% kable()
| row_label1 | row_label2 | var1_Xanomeline High Dose | var1_Xanomeline Low Dose |
|---|---|---|---|
| BUN | Mean (SD) | 5 ( 1) | 6 ( 3) |
| CA | Mean (SD) | 2 ( 0) | 2 ( 0) |
| CK | Mean (SD) | 64 ( 94) | 58 ( 78) |
| GGT | Mean (SD) | 17 ( 49) | 21 ( 27) |
| URATE | Mean (SD) | 271 ( 88) | 231 ( 87) |
Note how the entire example above has all records in var1_Placebo
missing. ‘Tplyr’ gives you control over how you fill this space. Let’s say that we wanted instead to make that space say “Missing”. You can control this with the f_str()
object using the empty
parameter
adlb_2 <- adlb %>% filter(TRTA != "Placebo") tplyr_table(adlb_2, TRTA) %>% set_pop_data(adsl) %>% set_pop_treat_var(TRT01P) %>% add_layer( group_desc(AVAL, by=PARAMCD) %>% set_format_strings('Mean (SD)' = f_str('xxx.xx (xxx.xxx)', mean, sd, empty=c(.overall="MISSING"))) ) %>% build() %>% head() %>% select(-starts_with("ord")) %>% kable()
| row_label1 | row_label2 | var1_Xanomeline High Dose | var1_Xanomeline Low Dose |
|---|---|---|---|
| BUN | Mean (SD) | 4.57 ( 1.301) | 5.71 ( 2.940) |
| CA | Mean (SD) | 2.19 ( 0.137) | 2.15 ( 0.083) |
| CK | Mean (SD) | 64.25 ( 93.986) | 58.33 ( 77.915) |
| GGT | Mean (SD) | 16.75 ( 48.692) | 21.33 ( 26.989) |
| URATE | Mean (SD) | 271.23 ( 88.161) | 230.98 ( 87.006) |
Look at the empty
parameter above. Here, we use a named character vector, where the name is .overall
. When this name is used, if all elements within the cell are missing, they will be filled with the specified text. Otherwise, the provided string will fill just the missing parameter. In some cases, this may not be what you’d like to see. Perhaps we want a string that fills each missing space.
adlb_2 <- adlb %>% filter(TRTA != "Placebo") tplyr_table(adlb_2, TRTA) %>% set_pop_data(adsl) %>% set_pop_treat_var(TRT01P) %>% add_layer( group_desc(AVAL, by=PARAMCD) %>% set_format_strings('Mean (SD)' = f_str('xxx.xx (xxx.xxx)', mean, sd, empty=c("NA"))) ) %>% build() %>% head() %>% select(-starts_with("ord")) %>% kable()
| row_label1 | row_label2 | var1_Xanomeline High Dose | var1_Xanomeline Low Dose |
|---|---|---|---|
| BUN | Mean (SD) | 4.57 ( 1.301) | 5.71 ( 2.940) |
| CA | Mean (SD) | 2.19 ( 0.137) | 2.15 ( 0.083) |
| CK | Mean (SD) | 64.25 ( 93.986) | 58.33 ( 77.915) |
| GGT | Mean (SD) | 16.75 ( 48.692) | 21.33 ( 26.989) |
| URATE | Mean (SD) | 271.23 ( 88.161) | 230.98 ( 87.006) |
In the example above, instead of filling the whole space, the empty
text of “NA” replaces the empty value for each element. So for ‘Mean (SD)’, we now have ‘NA ( NA)’. Note that the proper padding was still used for ‘NA’ to make sure the parentheses still align with populated records.
You may have noticed that the approach to formatting covered so far leaves a lot to be desired. Consider analyzing lab results, where you may want precision to vary based on the collected precision of the tests. Furthermore, depending on the summary being presented, you may wish to increase the precision further. For example, you may want the mean to be at collected precision +1 decimal place, and for standard deviation +2.
‘Tplyr’ has this covered using auto-precision. Auto-precision allows you to format your numeric summaries based on the precision of the data collected. This has all been built into the format strings, because a natural place to specify your desired format is where you specify how you want your data presented. If you wish to use auto-precision, use a
instead of x
when creating your summaries. Note that only one a
is needed on each side of a decimal. To use increased precision, use a+n
where n
is the number of additional spaces you wish to add.
tplyr_table(adlb, TRTA) %>% add_layer( group_desc(AVAL, by = PARAMCD) %>% set_format_strings( 'Mean (SD)' = f_str('a.a+1 (a.a+2)', mean, sd) ) ) %>% build() %>% head(20) %>% kable()
| row_label1 | row_label2 | var1_Placebo | var1_Xanomeline High Dose | var1_Xanomeline Low Dose | ord_layer_index | ord_layer_1 | ord_layer_2 |
|---|---|---|---|---|---|---|---|
| BUN | Mean (SD) | 4.7430 ( 2.05463) | 4.5696 ( 1.30148) | 5.7120 ( 2.94018) | 1 | 1 | 1 |
| CA | Mean (SD) | 2.165660 (0.0692494) | 2.189362 (0.1372011) | 2.145700 (0.0830867) | 1 | 2 | 1 |
| CK | Mean (SD) | 72.4 ( 288.41) | 64.2 ( 93.99) | 58.3 ( 77.91) | 1 | 3 | 1 |
| GGT | Mean (SD) | 17.8 ( 34.77) | 16.8 ( 48.69) | 21.3 ( 26.99) | 1 | 4 | 1 |
| URATE | Mean (SD) | 235.9373 ( 83.69662) | 271.2288 ( 88.16093) | 230.9807 ( 87.00646) | 1 | 5 | 1 |
As you can see, the decimal precision is now varying depending on the test being performed. Notice that both the integer and the decimal side of each number fluctuate as well. Tpylr
collects both the integer and decimal precision, and you can specify both separately. For example, you could use x
’s to specify a default number of spaces for your integers that are used consistently across by variables, but vary the decimal precision based on collected data. You can also increment the number of spaces for both integer and decimal separately.
But - this is kind of ugly, isn’t it? Do we really need all 6 decimal places collected for CA? For this reason, you’re able to set a cap on the precision that’s displayed:
tplyr_table(adlb, TRTA) %>% add_layer( group_desc(AVAL, by = PARAMCD) %>% set_format_strings( 'Mean (SD)' = f_str('a.a+1 (a.a+2)', mean, sd), cap = c(int=3, dec=2) ) ) %>% build() %>% head(20) %>% kable()
| row_label1 | row_label2 | var1_Placebo | var1_Xanomeline High Dose | var1_Xanomeline Low Dose | ord_layer_index | ord_layer_1 | ord_layer_2 |
|---|---|---|---|---|---|---|---|
| BUN | Mean (SD) | 4.743 ( 2.0546) | 4.570 ( 1.3015) | 5.712 ( 2.9402) | 1 | 1 | 1 |
| CA | Mean (SD) | 2.166 (0.0692) | 2.189 (0.1372) | 2.146 (0.0831) | 1 | 2 | 1 |
| CK | Mean (SD) | 72.4 (288.41) | 64.2 ( 93.99) | 58.3 ( 77.91) | 1 | 3 | 1 |
| GGT | Mean (SD) | 17.8 ( 34.77) | 16.8 ( 48.69) | 21.3 ( 26.99) | 1 | 4 | 1 |
| URATE | Mean (SD) | 235.937 ( 83.6966) | 271.229 ( 88.1609) | 230.981 ( 87.0065) | 1 | 5 | 1 |
Now that looks better. The cap
argument is part of set_format_strings()
. You need to specify the integer and decimal caps separately. Note that integer precision works slightly differently than decimal precision. Integer precision relates to the length allotted for the left side of a decimal, but integers will not truncate. When using ‘x’ formatting, if an integer exceeds the set length, it will push the number over. If the integer side of auto-precision is not capped, the necessary length for an integer in the associated by group will be as long as necessary. Decimals, on the other hand, round to the specified length. These caps apply to the length allotted for the “a” on either the integer or the decimal. So for example, if the decimal length is capped at 2 and the selected precision is “a+1”, then 3 decimal places will be allotted.
This was a basic situation, but if you’re paying close attention, you may have some questions. What if you have more by variables, like by visit AND test. Do we then calculate precision by visit and test? What if collected precision is different per visit and we don’t want that? What about multiple summary variables? How do we determine precision then? We have modifier functions for this:
tplyr_table(adlb, TRTA) %>% add_layer( group_desc(vars(AVAL, CHG, BASE), by = PARAMCD) %>% set_format_strings( 'Mean (SD)' = f_str('a.a+1 (a.a+2)', mean, sd, empty="NA"), cap = c(int=3, dec=2) ) %>% set_precision_on(AVAL) %>% set_precision_by(PARAMCD) ) %>% build() %>% head() %>% kable()
| row_label1 | row_label2 | var1_Placebo | var1_Xanomeline High Dose | var1_Xanomeline Low Dose | var2_Placebo | var2_Xanomeline High Dose | var2_Xanomeline Low Dose | var3_Placebo | var3_Xanomeline High Dose | var3_Xanomeline Low Dose | ord_layer_index | ord_layer_1 | ord_layer_2 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| BUN | Mean (SD) | 4.743 ( 2.0546) | 4.570 ( 1.3015) | 5.712 ( 2.9402) | -0.765 ( 1.6734) | -0.428 ( 1.5910) | -0.428 ( 1.3299) | 5.457 ( 1.5661) | 4.712 ( 1.6382) | 6.497 ( 2.7940) | 1 | 1 | 1 |
| CA | Mean (SD) | 2.166 (0.0692) | 2.189 (0.1372) | 2.146 (0.0831) | -0.105 (0.0972) | -0.100 (0.1242) | -0.141 (0.0621) | 2.290 (0.0923) | 2.289 (0.0828) | 2.304 (0.0719) | 1 | 2 | 1 |
| CK | Mean (SD) | 72.4 (288.41) | 64.2 ( 93.99) | 58.3 ( 77.91) | -3.9 (275.75) | -15.2 ( 77.56) | -14.7 ( 51.54) | 83.4 ( 38.13) | 84.8 ( 64.27) | 72.3 ( 35.71) | 1 | 3 | 1 |
| GGT | Mean (SD) | 17.8 ( 34.77) | 16.8 ( 48.69) | 21.3 ( 26.99) | -1.2 ( 21.67) | -1.5 ( 41.48) | -0.3 ( 20.55) | 24.2 ( 19.36) | 18.8 ( 25.84) | 22.7 ( 11.05) | 1 | 4 | 1 |
| URATE | Mean (SD) | 235.937 ( 83.6966) | 271.229 ( 88.1609) | 230.981 ( 87.0065) | -23.792 ( 37.1799) | -28.550 ( 55.6673) | -40.645 ( 24.7959) | 272.617 ( 65.7021) | 310.486 ( 61.8285) | 273.608 ( 86.9470) | 1 | 5 | 1 |
Three variables are being summarized here - AVAL, CHG, and BASE. So which should be used for precision? set_precision_on()
allows you to specify this, where the precision_on()
variable must be one of the variables within target_var
. Similarly, set_precision_by()
changes the by
variables used to determine collected precision. If no precision_on()
variable is specified, the first variable in target_var
is used. If no precision_by()
variables are specified, then the default by
variables are used.


Resources for Addressing Climate Change and Water
On this page, learn about tools developed by EPA and partners to analyze and respond to climate change risks and impacts. EPA climate change research, training, and webinars are available. Connect with partner organizations in the water sector working on addressing climate change impacts to water resources.
Tools
- Climate Ready Estuaries Tools
- Climate Ready Water Utilities Tools
- Emergency/Incident Planning,Response, Recovery Tools
- Stormwater Tools
- Other EPA Tools
Research
- EPA Water and Climate Change Research (Office of Research and Development)
- EPA Climate Change Research (Office of Research and Development)
Training
- Calendar of Climate Change and Water Events
- COMET/MetEd Climate Change Virtual Classroom Exit
- NOAA Climate Program Office Webinars and Workshops Exit
- Other Climate Change and Water Training
Organizations
- Water Utility Climate Alliance Exit
- Water Environment Federation Exit
- Water Environment Research Foundation Exit
- Other Organizations