Ol’ Dirty Bastard
The man who died for rap
Here's time line of ODB life:
Ol' Dirty Bastard's solo career began March 28, 1995. His first solo album, Return to the 36 Chambers: The Dirty Version, spawned the hit singles "Brooklyn Zoo" and "Shimmy Shimmy Ya", which helped propel the album to platinum
status. The album's sound was noted by several music writers as being as "raw and gritty" as 36 Chambers, with RZA and 4th Disciple producing beats of an even more minimalist and stripped-down style than on the group's debut album. In this
same year, Ol' Dirty Bastard collaborated with Mariah Carey for the "Fantasy Remix".
It was around this time that Ol' Dirty Bastard gained notoriety when, as he was being profiled for an MTV biography, he took two of his seven children by limousine to a New York State welfare office to cash a $375 welfare check and receive food
stamps;[6] his latest album was still in the top ten of the US charts. The entire incident was filmed by an MTV camera crew and was broadcast nationwide.[7][8] Although he had recently received a $45,000 cash advance for his first solo album
and was earning a cut of the profits from the Wu-Tang Clan's debut album, Ol' Dirty Bastard was still listed as eligible for welfare and food stamps due to the fact that he had not yet filed his taxes for the current year. His caseworker revoked
his eligibility after seeing the MTV segment, and the incident was viewed as an example of the welfare abuses that led to the significant welfare reforms enacted in 1996.[9]
In 1997, Ol' Dirty Bastard appeared on the Wu-Tang Clan's second and most commercially successful work, the double album Wu-Tang Forever. He had fewer appearances on this album than the group's debut, contributing to one solo
track ("Dog Shit"), three verses ("Maria", "Reunited", "Heaterz"), one hook ("As High as Wu-Tang Get"), and a spoken introduction/refrain ("Triumph").[citation needed]
In February 1998, Ol' Dirty Bastard witnessed a car accident from the window of his Brooklyn recording studio. He and a friend ran to the accident scene and organized about a dozen onlookers, who assisted in lifting the 1996
Ford Mustang—rescuing a 4-year-old girl from the wreckage. She was taken to a hospital with first and second degree burns. Using a false name, Ol' Dirty Bastard visited the girl in the hospital frequently until he was spotted by members of
the media.[10]
The evening following the traffic accident, Ol' Dirty Bastard rushed on-stage unexpectedly as Shawn Colvin took the stage to give her acceptance speech for Song of the Year at the 1998 Grammy Awards, and he announced he had
recently purchased expensive clothes in anticipation of winning the Grammy Award for Best Rap Album that he lost to Puff Daddy. As Ol' Dirty Bastard took the stage to a round of applause, he asked the audience, "Please calm down, the music
and everything. It's nice that I went and bought me an outfit today that costed a lot of money today, you know what I mean? 'Cause I figured that Wu-Tang was gonna win. I don't know how you all see it, but when it comes to the children, Wu-Tang
is for the children. We teach the children. You know what I mean? Puffy is good, but Wu-Tang is the best, Okay? I want you all to know that this is ODB, and I love you all. Peace!" The incident was widely covered in the mainstream media.[11][12]
In 1999, Ol' Dirty Bastard wrote and recorded his second studio album, Nigga Please, between jail sentences. The album received notable commercial success, although it failed to parallel the critical praise of his debut. This
release included the single "Got Your Money", which garnered worldwide chart success. The song was produced by The Neptunes and featured chorus vocals by R&B singer Kelis.
In 1999, Ol' Dirty Bastard was paid $30,000 to appear on Insane Clown Posse's album, The Amazing Jeckel Brothers. Completing his track in two days, his recording consisted of his "rambling about bitches". Insane Clown Posse
re-recorded the track and re-edited Ol' Dirty Bastard's vocals in order to form four rhymes out of his rambling, titling the song "Bitches".[13]
In 2001, with Ol' Dirty Bastard again in jail for crack cocaine possession, his record label Elektra Records made the decision to release a greatest hits album (despite there being only two albums in his back catalog) in order
to both end their contract with the artist (see below section), in order to help him profit from the publicity generated by his legal troubles. After the contract with Elektra was terminated, the label D-3 records released the album The Trials
and Tribulations of Russell Jones in 2002, composed of tracks compiled without Ol' Dirty Bastard's input.
In 2003, the day he was released from prison, Ol' Dirty Bastard signed a contract with Roc-A-Fella Records. Living at his mother's home under house arrest and with a court-ordered probation, he used his criminal record to title
his VH1 special, Inside Out: Ol' Dirty Bastard On Parole. He also managed to record a new album, originally scheduled to be released through Dame Dash Music Group in 2004; it has since been shelved indefinitely. In October 2004, one month
before his death, his last collaboration was with Jon B. on the track, "Everytime" from the album, Stronger Everyday. In 2005, five months after his death, he appeared posthumously on the song "Blah-Blah-Blah" by Brooke Valentine on her debut
album, Chain Letter.
In August 2017 in an interview on Hot 97, Wu-Tang Clan member RZA confirmed that the new Wu-Tang album, Wu-Tang: The Saga Continues, will contain unreleased vocals by Ol' Dirty Bastard.[14]
"Hey, baby, I like it rawww... Yeah baby, I like it RAWWW!!! Ooh, baby, I like it raww... Yeah baby, I like it RAWWW!!!"


If you are interested in submitting data about your project, please complete this initial request and a member of the Coordination Hub will contact you to coordinate next steps.
Note that a request to provide data about your project may be submitted at any time throughout the year.
Your message was sent successfully!
Sorry there was an error sending your form.
Your message was sent successfully!
Sorry there was an error sending your form.
This site highlights Network members’ collective progress in reaching a diverse population, developing a cohesive collaborative infrastructure, and promoting equity in STEM academic and career pathways.
Number of projects that have contributed information to the site
1,925
Students reached directly
Number of students reached reflects the cumulative number of times that students have been directly reached over time (both within and across projects)
1,880
Educators reached directly
Number of educators reached reflects the cumulative number of times that educators have been directly reached over time (both within and across projects)
345
Partners engaged
Number of partners engaged reflects the cumulative number of partners engaged over time (both within and across projects)
120
Products developed
Number of STEM BP outcomes reported
Measuring the Network’s collective progress
One of the charges of the NSF INCLUDES Coordination Hub is to promote a common understanding of what is being achieved across the National Network. This site uses information provided directly by STEM broadening participation (BP) initiatives to describe Network members’ collective progress in three critical areas:
Reaching a diverse population
the site describes the characteristics of students and educators reached by STEM BP initiatives.
Developing a cohesive collaborative infrastructure
the site uses survey data to highlight the progress NSF INCLUDES-funded projects are making in their efforts to operationalize the design elements of collaborative infrastructure.
Promoting equity in STEM academic and career pathways
the site includes an inventory of STEM BP outcomes that have been reported by Network members.
The results are intended for use by Network members and other key stakeholders (e.g., program directors at NSF and other federal agencies, Congressional staff, policy makers and practitioners, and entities looking to create similar STEM BP initiatives). By documenting the collective progress of Network members, the site showcases the community’s achievements, raises the public profile of NSF INCLUDES and other STEM BP initiatives, and documents the reach and influence of the NSF INCLUDES approach.


{% extends 'base.html' %} {% block extend_title %}Change PWD |{% endblock %} {% block content %}
Your password has been set. You may go ahead and sign in now.


Water park work continues even though The Beach Ottumwa is closed for season
by Romelo StylesOTTUMWA, Iowa — The Beach Ottumwa is undergoing maintenance in its off-season.
The water park, which has been open for over 20 years, will be receiving beautification work, like sandblasting the slides and painting different areas of the park.
"Right now, Mongan Painting and Sandblasting from northwestern Iowa [is] finishing up their work on the slide tower at the beach," said Park Director Gene Rathje. "They are sandblasting and painting the entire facility. Really, this is just normal maintenance after 27 years. It's just something that had to be done to prolong the life of the slide tower."
Work will be completed in plenty of time for the 2020 opening season of The Beach Ottumwa.


How do we influence each other’s beliefs and actions?
Suppose with me that there are three categories:
Force consists of any form of coercion: legal coercion via the law and law enforcement, illegal coercion via violence, fighting, acts of war, mugging, and so on.
Argument consists of any form of persuasion, such as education, (good) rhetoric, insight, discovery, science, philosophy, religion, experience, and sharable evidence.
These exist on a spectrum of influence. We can use one or more to try to get another person to agree with us or to do what we want.
Two clarifications: first, I reject, on hypothesis, the belief that all persuasion is merely force. Argument is different from force. I know the “masters of suspicion” would deny this; but they can either argue that argument is ultimately a will to power (which assumes my point) or they can merely try to force me to agree with them. So they can either assume argument is different from force, or give up trying to prove it and try to force it, conceding that my hypothesis still holds true. So not all argument reduces to mere power.
And secondly, force is different from a third thing, which I shall call “pressure” or soft coercion. I am less confident that #2 and #3 are different, but let’s explore the issue.
Between force and persuasion is soft coercion. What is soft coercion? An example would be yelling. Sometimes my child finds broken glass at the park. If he picks it up before I can catch him, I tell my child, “That is dangerous, put it down.” To say this is to present him with an argument – an objective reason why he should put down the broken glass. If I yell, “That is dangerous! PUT IT DOWN!” I am exerting pressure. I am using soft coercion. (Force would be to grab the glass myself and throw it away.)
Soft coercion consists of, at least:
We can see all three categories in Republic I. Socrates is invited to stay in the Pireaus by Adeimantus and company; then he is threatened with force. He says, “What if I can convince you?” and they respond “What if we won’t listen?” Refusing to listen to reason is a kind of soft coercion against the speaker, rendering moot the power they have of presenting you with a good argument.
Is it plausible to maintain all three categories of influence as different genus or whether there should only be two (just persuasion, unjust coercion) or only one (the will to power)?
Quite obviously, the just authority of laws commanding one to do X, enforced by legal governors, is also a kind of pressure to X. But it seems to me that the law provides more than just pressure, it also provides a just reason to obey. Similarly, good arguments that p is true constitute a kind of “intellectual pressure” to believe p. But that pressure is not reducible to mere pressure; it is a reason to believe that p is true.
Soft coercion is different. Consider economic sanctions. Economic sanctions do not force the foreign country, by law, nor by warlike activity, to do X. Nor do they offer a set of reasons to X that the sanctioned country would recognize, in a cool hour and with a calm mind, as good reasons to X. Economic sanctions pressure the foreign country to X.
Force is sometimes just, sometimes unjust. Persuasion it seems to me is always just.
Pressure is sometimes just, and sometimes unjust — but when it goes bad it goes very bad.
Your thoughts? Do you think these three categories


Two minor accidents in Brunsbuettel, Kiel Canal
by NIKOLAY TORKINRussian ro-ro ship LADY R contacted constructions while entering lock at Brunsbuettel, Kiel Canal, at 1325 LT Nov 19, damaging dolphins and other items. The ship reportedly, sustained superficial damages and was allowed to resume transit soon after accident. She’s en route from Brunsbuettel to S-Petersburg.
General cargo ship KORSOE contacted lock gate in Brunsbuettel at around 1000 LT Nov 20, while leaving Kiel Canal after transit. Understood ship’s portside navigation light was damaged, contacting gate’s railing. The ship left Brunsbuettel in the evening after completing repairs, resuming her voyage from Ust Luga Russia to Rouen France.
Ro-ro cargo ship LADY R, IMO 9161003, dwt 7630, built 2004, flag Russia, manager RANSMORFLOT LLC.
General cargo ship KORSOE, IMO 9519054, dwt 5732, built 2013, flag Cyprus, manager SCHULTE & BRUNS CHARTERING.


Annexure-III
A.GENERAL INFORMATION
4.Details of the Head of the Department
Sr. No
DETAILS
ENTER THE DETAILS
Name of the Head of the Department:
Email ID:
Cell Number :
5.Details of the Institutiont
Sr. No
DETAILS
ENTER THE DETAILS
Name of the College/Institution with address:
Type of the Institution :
(as per the instruction in Sl.No.29)
Accredited year by NAAC/NBA:
Name of the Head of the Institution:
for the project implementation:
Designation of the Head of the Institution
for Project Implementation:
Phone Number(Landline) and college website
of the project:
Cell NUmber:
Email ID:
Previous
submit
Next


PayBill
HOME
FEATURES
DOWNLOAD
CONTACT
Manage Your Finance and Bills in the Simplest Way.
Sends payment due date alerts.
Splits bills.
Cash back 1% annually.
Features overview
Available on all devices
download


Pace Printers Pvt. Ltd. Is located in the fast growing area of Navi Mumbai. We enjoy impeccable connectivity owing to the centralized location and also have very close proximity to the Nhava Sheva port.
Feel free to email us for information and inquiries, or to just say hello!
Plot No. A - 40, T.T.C. Industrial Area,
Thane-Belapur Road,
Pawne, Navi Mumbai - 4000 710
Phone: + 91 - 22 - 4142 3000,
91 - 22 - 2761 9562
Fax: 91 - 22 - 271 9563


--- layout: page_default title: 'Site Cookie Information' ---
This site saves a "cookie"* called 'darkMode' on your computer to remember whether you want to use Dark Mode ({% include icon-dark-mode.svg %}) or Light Mode ({% include icon-light-mode.svg %}). If you turn on Dark Mode, it's set to "true"; if not, it's "false".
This way, people who want to use Dark Mode don't have to turn it back on every time they turn the page. If you don't want the cookie and are okay with that happening, you can block Javascript for the site using something like the NoScript browser extension.
(* Technically, the site doesn't use "cookies" - it uses "localStorage" values, which are a separate technology that a lot of programmers consider more secure. Legally, though, they're treated the same way, and since most people just call everything a website automatically saves to your computer a "cookie," that's what I'm doing here.)
Q: Why can't I click a button to tell this site to remember not to save any cookies? Other sites can do that.
A: Actually, they can't! To be able to "remember" something about you, a website has to save that information on your computer. Every time you click one of those buttons telling a site "Don't save cookies about me," what you're basically doing is saving the word "no" in a cookie named "areCookiesOkay".
Q: Can you, the person running this website, see the cookie that the site saves? Is this website tracking me?
A: No. Only your own web browser can see it. I cannot look at a report somewhere to find out how many people look at this site and turn on Dark Mode. (Or, for that matter, how many people look at it at all - the site does not use any form of tracking.)
Q: Can I see what the cookie is doing?
A: Sure - all of the code for the site is publicly-visible in the GitHub repo. The dark-mode Javascript is in the "js" folder.
Q: I would rather turn Dark Mode on by hand every single time I turn the page than use cookies.
I'm sorry, but most people think that's incredibly annoying.
Q: Instead of using localStorage, have you considered parsing URL queries and editing all the local links on the page every time the user switches modes?
[EXTENDED SOUNDS OF BRUTAL PIPE MURDER]


Tesla Inc.’s board of directors is at a critical juncture, wedged between a larger-than-life figure to whom many are personally close and their larger responsibility to shareholders.
Elon Musk’s astonishing with the New York Times has heightened concerns surrounding the health of Tesla’s chairman and chief executive officer, with shares plunging 8.9 percent Friday, the largest drop in nearly two years. The references to Ambien use and while tweeting are fueling calls for Tesla’s board to step up its oversight of the company’s CEO and largest shareholder.


The standard library is a major contribution to the standardization of C++. Throughout this book, we have relied on the library to write succinct, idiomatic C++ programs. This chapter reviews the library facilities that we used, and describes some generally useful facilities that we did not have occasion to use. Each section presents a library class or family of related classes by showing and explaining how to use the relevant facilities.
In general, the standard library introduces names into namespace std
. Programs that
use standard-library facilities must therefore either prefix such names by std::
or make
them generally available with using
-declarations. In this appendix, we will not explicitly
mention the need to do so. Accordingly, for example, we shall refer to cout
rather
than to std::cout
.
Our examples generally assume the following meanings for the names shown:
n
t
T
s
string
value
cp
c
char
value
p
bool
or a value convertible to bool
os
is
strm
b
e
d
it


I am ready to order what i need to start some decent monitoring of our system, my question is do i go 433Mhz or 868Mhz ? what will one offer me over the other?
Thanks
Keith
Archived Forum |
|
433Mhz or 868Mhz ?Submitted by Keith Drayton on Sun, 18/05/2014 - 21:20I am ready to order what i need to start some decent monitoring of our system, my question is do i go 433Mhz or 868Mhz ? what will one offer me over the other?
Thanks Keith
» |
Re: 433Mhz or 868Mhz ?
If you have a remote control car key, DON'T have that frequency. Otherwise, there seems to be little difference in practice. See http://openenergymonitor.org/emon/node/502
[n.b. It is MHz, not Mhz - Heinrich would be upset to know that you spelled his name with a lower case letter!]
Re: 433Mhz or 868Mhz ?
Thanks Robert,
I thought i remembered an advantage of 868 to do with two communication? something the kit might benifit from in the future? or have i got my wire(less)s communications crossed :)
must remember MHz not Mhz
must remember MHz not Mhz
must remember MHz not Mhz
must remember MHz not Mhz
Re: 433Mhz or 868Mhz ?
I'm not sure what you mean by "two communication". The two frequencies have different rules about channel occupancy - the percentage of time that any one device is allowed to transmit - so that other users can get a look-in. In the UK the channel occupancy is limited to 10% at 433 MHz, 1% at 868 MHz. Apart from that I don't think anyone has conclusively demonstrated that in practice one is better than the other given a particular set of conditions.
Jean-Claude Wippler (owner of JeeLabs and creator of the library that we use) wrote [http://forum.jeelabs.net/node/248.html]:
"Wireless range is not just sensitivities and power levels. In the house, you also need to take HF radio signal attenuation into account ... i.e. walls and cabling and other objects absorb and weaken RF signals. Generally speaking: the lower the frequency, the better it travels through all sorts of materials (including ourselves, BTW). And the lower the transmit rate is set (default is ≈ 50 kbit/s), the better the receiver is able to extract the right data from a weak signal, as several reports on this forum have indicated.
I wouldn't immediately go with these choices, though: in many cases, reception will be fine (and even with a stronger signal, you'll get occasional interference from RF noise sources). Another trade-off: lower freq's require (slightly) longer antennas.
Speaking of antennas: that's probably another choice which could have a huge impact on range, i.e. with directional antennas. I haven't tried that yet.
There's more: if you choose the 433 MHz band, but happen to have lots of devices in the neighborhood on that same frequency, then you can still end up with limited reception and lots of interference. We used to have a wireless headphone @ 433 MHz, which completely took down my entire 868 MHz network while turned on. I still haven't out why, but the interference was unmistakable."
But if you have a conductive mesh, the shorter the wavelength in relation to the mesh size, the easier it will penetrate.
Re: 433Mhz or 868Mhz ?
Sorry should have been 'two way communication', i cant remember where i read it or what exactly it was linked to now, was some months ago when i first found openenergymonitor, was spending a lot of time reading a lot about different approaches to monitoring and automation,
Re: 433Mhz or 868Mhz ?
The choice of frequency is quite independent of that. We only use two-way between the Base and the emonGLCD - the GLCD sends the inside temperature to the base, and the base sends the time to the GLCD. You can of course set up your own two-way link for other purposes if you want, but you can't realistically use battery power for the receiver if you do so, as the receiver must stay awake to be able to receive.


- The founder of this awesome programming club, who helps with activities and projects we do.
- Founder and CEO/CTO of Summer Playbook. He's...kind of a big deal.
- He helped Raphael in the beginning of the club and used to help with club projects and activities.
- Now working in downtown Chicago to implement algorithms in stock and commodoties trading. Also a big deal.
- He helped Chris C. and Raphael start up this club from the beginning and also used to help with club projects and activities.
- Also a big deal, but I don't know where he is. Honestly, he could be hiding right behin....AHHHH.*dies*
- He was decent but worked only on projects others gave him.
- Attending University of Michagan as an engineering major. He works close to the metal - writes compilors and such. It's cool.
- Attending University of Illinois as a computer science major. Doing big things, and trolling all those who allow him. Especially Natalia.
- Attending University of Illinois as a computer science major. Also doing big things. The only person who can adequately troll Kenny.
You want info on these people? Tell them to email me!


Responsive Mega Dropdown
Original problem was having to create a mega dropdown that was responsive. The design required each column to have a border and have chunks of links inside of that. This is a mobile-first solution that gives you markup that makes sense for mobile/desktop using data attributes.


The most important rule of thumb here is:
If you see some strange error message, and this is not the first error message in this ncc invocation, first fix the previous error and then proceed.
This is because compiler internal structures can be messed up by the previous
error. We are trying to limit this, but this doesn't get very high priority.
It often laments about type suffixed with -, +, -- and ++. In most cases
you should read this int-- (and int-, int+, int++) just like int. However
in certain cases the +/- etc can provide additional information.
For example:
will give the following error:
foo.n:1:18: error: expected int--, got void in literal: int is not a
subtype of void [simple require]
This is because the compiler expects () to be of some type that has
a common super type with int, so this common super type is returned
from the entire if expression. So int-- stands here for some type with
common super type with int.
here the error is:
foo.n:2:1: error: expected int-, got System.Double in assigned value:
common super type of types [int, System.Double] is just
`System.ValueType', please upcast one of the types to
`System.ValueType' if this is desired
Here the compiler expects some super type of int to be assigned, so
if we assigned System.Object, then it would change the type of x
to be System.Object and would still be happy (until of course you
use x in context requiring int).
In fact it would also accept super type, because of how assignment works.
So this is a good example when int- should be read as int.
The result of the assignment is something you got after the assignment
is done. The expression x = 42
has the type int
in C/C#, but it has the type void
in Nemerle. That is after
the assignment is done you got nothing, and cannot use this value
to do anything reasonable except for returning it from a void
function.
For example:
mutable x = 7;
(x = 42) : bool;
when (x = 42) { }
will yield two errors:
bar.n:2:2: error: expected bool, got void in type-enforced expression: void
is not a subtype of bool [simple require]
bar.n:3:1: error: expected void, got bool in matched value: the types bool
and void are not compatible [simple unify]
Another example is:
def some_func () { true }
mutable x = 42;
match (3) {
| 1 => some_func ()
| _ => x = 7;
}
which gives:
t.n:4:1: error: expected bool-, got void in computation branch: bool is not a subtype of void [simple require]
t.n:4:1: hint: this means two branches of ``if'' or ``match'' have different types
This is because the compiler assumes all branches of matching to
have the same type. After the first branch (of type bool
) is typed
it assumes all the following branches will have the same type.
Therefore it screams about wrong type of computation branch.
I would get similar error if I have used if
instead of
match
.
The solution here is to ignore the result from
some_func()
, like this: _ = some_func ()
.
This will make the first branch (and therefore the entire
match
) return void
. The second solution is to
make the second branch return bool
, like this: x = 7; true
.


Example
Font color is red
opacity is 50%
测试注释规则
Font color should be blue
测试变量规则
Font color is Blue
测试运算规则
Font color should be #333
Left border is 1px
right border is 5px
测试嵌套规则
This line should be red
This line should be green
This line should be yellow
测试作用域规则
Font color should be white
Font color should be yellow
测试混合规则
Font color is red , opacity is 50%
测试函数规则
opacity is 80%
opacity is 50%
测试复合规则
Font color should be blue
测试9


I know, I know. Ruby is not a hyped language anymore, as it used to be only a few years ago. On the other hand, it’s ecosystem has matured and there are a lot of gems around that help make things easier, whereas with your modern-hyped-language-of-choice it might be a totally different story. And most importantly, Ruby is still undeniably beautiful and loved by many (including myself).
 What’s the first thing that comes to your mind?
Huh, can I maybe have this blog set up as a Ruby app, too? And possibly, could it look quite pretty, like maybe this one I’m reading right now?
Luckily for you, it is possible and not at all hard. Let’s get to it right away.
Jekyll
First of all, of course you could write your blog as a Rails app from scratch in 15 minutes (a classic!) but unless you’re a beginner Rubyist, in which case this migth be a good exercise, you likely don’t want to spend time writing another CRUD with Rails for this purpose.  That’s not what we are going to do today. This is where Jekyll comes in.
So what is Jekyll? As it’s described on it’s official website:
Jekyll is a simple, blog-aware, static site generator. It takes a template directory containing raw text files in various formats, runs it through a converter (like Markdown) […] and spits out a complete, ready-to-publish static website suitable for serving with your favorite web server.
Doesn’t it sound nice? And there is even more to that, like easy deploying to GitHub Pages, but we will get to that later. Setting up Jekyll is dead simple, head over to their homepage to see how to get it up and running. I advise you to play around with it for a bit, if you haven’t had a chance to do that before, as well as read through their docs, to further understand how it works in detail.
Again, we won’t be going through the barebones Jekyll setup, we are going to take advantage of it’s community and the fact that there are a lot of great themes we can use without much hassle. After all, we want our new little blog to look pretty from the start, don’t we?
Jasper
Jasper is a simple and pretty looking theme, which in fact is a clone of a Casper theme from the Ghost publishing platform. It’s a matter of taste, in the end, so if you don’t like it, you can skip the Jasper setup part and skip to the next one (plus, of course, set up you themed or unthemed Jekyll blog in the meantime).
Alright, let’s start with cloning the Jasper repo and then getting it running. From your terminal shell:
git clone https://github.com/biomadeira/jasper.git cd jasper && bundle exec jekyll serve
Alternatively, you can also fork the repository, then clone your fork and go from there.
Then go to localhost:4000/jasper/
in your favourite browser and voila - we have
it running and looking as pretty as it gets. So far, so good:
this is what you should be seeing right know
Fire up the code in your favourite editor and head over to _config.yml
. There are
some configuration options you might want to change. Most should be self explanatory,
I’ll leave the setup alone, let’s just change two things:
_config.yml ... nickname: myname ... base_url: / ...
The latter change will make our site render on the root url, instead of the /jasper
one.
Regarding nickname, it’s a Jasper convention - we’ll be using this nickname to tag
ourselves as a post author in just a second.
Writing Blog Posts with Jekyll
Alright, our setup should be ready. Let’s write our first post! You might have noticed, that our little blog already has a few example posts written. Let’s take a look at one of them:
_posts/1963-08-28-i-have-a-dream.md --- layout: post cover: false title: I Have a Dream date: 1963-08-28 10:18:00 tags: speeches subclass: 'post tag-speeches' categories: 'casper' navigation: True logo: 'assets/images/ghost.png' cover: 'assets/images/cover4.jpg' --- ...
This piece betwee three-dashed lines above is called a YAML front matter. All of the values here are optional and most of them are custom setup for Jasper theme. You can read more about the front matter here. For now, we’ll steal this setup with some minor changes for the purpose of our new post.
Let’s make ourselves a new file in the _posts
directory. From the command line:
touch _posts/2017-07-05-an-awesome-post.md
As you probably noticed, we are using the .md
extension for our file.
That’s right, with Jekyll it’s possible to write our posts using a great, terse
Markdown syntax, but you can also
use the regular HTML if that’s your preference. We’ll stick to Markdown for our
example post. Let’s set up the contents of our newly created file to:
_posts/2017-07-05-an-awesome-post.md --- layout: post cover: false title: An Awesome Post date: 2017-07-05 12:00:00 tags: posts subclass: 'post tag-content' categories: 'myname' navigation: True logo: 'assets/images/ghost.png' cover: 'assets/images/cover3.jpg' --- # Hello World! This is our awesome post!
The most important piece of the above, is the categories
line, which link your
post to the author we created before (remember the nickname setting from the _config.yml
?).
Let’s refresh our homepage at localhost:4000
, and you shall see your new post
on top of the posts list. Tada!
ah, your awesome new Jekyll post is here
Alright, this should get you going and blogging in no time now! Go read the contents of
_posts/2014-09-27-a-full-and-comprehensive-style-test.html
for a style guide of
the Jasper theme, we won’t be going further with that. There is one important thing left
to do, though: so we have our blog, we can add posts, all that we now need
is to push to the Internetzz, so that other people can read our precious writings.
GitHub Pages
If you are not familiar with GitHub Pages yet, they provide an extremely convenient way of hosting websites, directly from a GitHub repository, with practically zero hassle. As it says on GitHub pages website:
Just edit, push, and your changes are live.
There isn’t really much that can go wrong here, just follow the steps from the link above. The only change to the described flow would be, that you don’t clone the newly created repository. Instead, connect the previously cloned Jasper repo to your new one at github. Let’s quickly commit the changes we have made before and do that:
git commit -m "Update configuration & create a new blog post" git remote remove origin git remote add origin https://github.com/user/repo.git
Of course, substitute the user
and repo
parts with the data from your
new GitHub repository. You can confirm that everything worked, by using
git remote origin -v
.
There is one more gotcha regarding deploying to GitHub Pages with Jasper, which gave me quite a headache during setting up my own blog. It was all my fault, though, I had simply missed a piece of the gem’s readme regarding deployment, so do yourself a favour and don’t repeat my mistakes.
Okay, we did it! You should have your blog live and accessible for all your friends and the whole wide world. From here, you can configure it, so that it runs from your custom domain of choice and do whatever customizations you like. But most importantly, nothing should stop you from blogging like crazy right now.
It was a pleasure writing this piece (“A blog about a blog!”), I hope it was also helpful for you. If so, don’t hesitate and let me know by writing a comment. Do the same in case of any questions.


keyboard_arrow_down
Passionate designer,
dynamic creative
& total nerd.
I'm a web designer in the making. Currently a full time student in the school of digital media at Utah Valley University. Looking to get my hands dirty and build some skills with an internship with an awesome company.
More About Me


For instance, my octopus
Your high from the past day OR the most delicious thing you ate
Theme: inner life/mental health
Our google doc
the Scared is scared from Bianca Giaever on Vimeo.
Share your name, where your name comes from, and a hidden talent that you have. Take 30s to think. Examples: rolling your tongue, snapping, flaring your nostrils, eating really slowly, impressions, etc.
Start at 1:20
Details, tone, relationship of the tellers
Eyes off the prize
Start at 1:35
Link to google doc brainstorming
Play song and brainstorm:-)
Link to google doc


Cards: Multiple Selections
{{i.time}}
Job: {{i.job}}
Location: {{i.location}}
Team: {{i.team}}
Department: {{i.department}}


One can block inherited policies for all usecases
<?xml version="1.0"?>
<policy xmlns="http://www.wyona.org/security/1.0" use-inherited-policies="false">
<usecase id="view">
<!--<world permission="false"/>-->
<user id="lenya" permission="true"/>
</usecase>
<usecase id="open">
<user id="lenya" permission="true"/>
</usecase>
<usecase id="write">
<user id="lenya" permission="true"/>
</usecase>
</policy>
or also for a particular usecase
<?xml version="1.0"?>
<policy xmlns="http://www.wyona.org/security/1.0">
<usecase id="view" use-inherited-policies="false"
<!--<world permission="false"/>-->
<user id="lenya" permission="true"/>
</usecase>
</policy>
Please note that the order in which the rights are defined matters. For example, imagine you have a group called "users" with access to a given set of resources. Now if you'd like to temporarily block a given user, you need to add the line revoking his rights to the top, as usually the policy manager uses the first line that matches for a user. Of course, if you use a custom policy manager implementation, it may behave differently.
The defaul usecases are currently hard-coded within org.wyona.yanel.servlet.YanelServlet
and org.wyona.security.impl.PolicyManagerImplVersion2
For example workflow transitions!
The access control directory mimics the data directory. Each file-or-dir-name.policy
file sets the rules for its namesake in the respective data directory. If the filename is the name of a directory, it defines the access for the corresponding directory, if it is the name of a single file, it defines the rules for this file only. Definitions for directories are inherited by all subdirectories, exceptions need to be defined at the corresponding level (see the following example). The root policy that is installed by default and defines the rules for the whole realm is called .policy
, and is in the root folder of the policies (realm-dir/ac-policies
by default).
Here is an example that shows what needs to be done to block view acces to all parts of a website except a special page (useful for production websites "under construction"). We will assume that the page that we want to show is realm-dir/data-repository/en/construction.html
.
.policy
in the root access control directory (realm-dir/ac-policies/.policy
by default, defined in realm-dir/config/ac-policies-repository.xml
), let everybody view everything:<usecase id="view">
<world permission="true"/>
</usecase>
data-repository/en/
): create a policy file called en.policy
and set<usecase id="view">
<world permission="false"/>
</usecase>
mkdir realm-dir/ac-policies/en
vi realm-dir/ac-policies/en/construction.html.policy
and allow viewing:
<usecase id="view">
<world permission="true"/>
</usecase>
*.css
. Assuming these can be found in the directory realm-dir/data-repository/app
, create a file realm-dir/ac-policies/en/app.policy
and set:<usecase id="view">
<world permission="true"/>
</usecase>
Similarly, you can now allow access to the whole site for a group of registered users by setting
<usecase id="view">
<group id="editors" permission="true"/>
</usecase>
for the previously closed parts of the realm.
The "From Scratch Realm" contains an example of a policy map src/realms/from-scratch-realm-template/ac-policies/policy-map.xml
which allows to define more complex rules to match requested resources with access policies. Please note that policy maps are currently only supported by org.wyona.security.impl.PolicyManagerImplVersion2
.
The policy map also supports matching of query strings, e.g.
<matcher pattern="/*/projects/*/index.html?disable=*" path="/disable-enable-email_policy.xml"/>


Research
2023
-
Melanoma Clinical Decision Support System: An Artificial Intelligence-Based Tool to Diagnose and Predict Disease Outcome in Early-Stage Melanoma PatientsCancers, Apr 2023
-
The Neurogenetics of Functional Connectivity Alterations in Autism: Insights From Subtyping in 657 IndividualsBiological Psychiatry, Apr 2023
-
Pirin is a prognostic marker of human melanoma that dampens the proliferation of malignant cells by downregulating JARID1B/KDM5B expressionScientific Reports, Jun 2023
2022
-
Multivariate Brain Activity while Viewing and Reappraising Affective Scenes Does Not Predict the Multiyear Progression of Preclinical Atherosclerosis in Otherwise Healthy Midlife AdultsAffective Science, Jun 2022
-
Integrating multiple brain imaging modalities does not boost prediction of subclinical atherosclerosis in midlife adultsNeuroImage: Clinical, Jun 2022
-
Pre- and post-surgery brain tumor multimodal magnetic resonance imaging data optimized for large scale computational modellingScientific Data, Nov 2022
2021
-
Integrating across neuroimaging modalities boosts prediction accuracy of cognitive abilityPLOS Computational Biology, Mar 2021
-
The roles of history, chance, and natural selection in the evolution of antibiotic resistanceeLife, Aug 2021
2020
-
Brain connectivity and cognitive functioning in individuals six months after multiorgan failureNeuroImage: Clinical, Aug 2020
-
-
-
Serum markers improve current prediction of metastasis development in early‐stage melanoma patients: a machine learning‐based studyMolecular Oncology, Aug 2020
-
Affective brain patterns as multivariate neural correlates of cardiovascular disease riskSocial Cognitive and Affective Neuroscience, Nov 2020
2019
-
Raman spectroscopy monitoring of MCF10A cells irradiated by protons at clinical dosesInternational Journal of Radiation Biology, Feb 2019
-
Connectome sorting by consensus clustering increases separability in group neuroimaging studiesNetwork Neuroscience, Jan 2019
-
Consensus clustering approach for genome-wide association studiesIn World Scientific Series on Nonlinear Science Series B, Jan 2019
-
Early alterations in a mouse model of Rett syndrome: the GABA developmental shift is abolished at birthScientific Reports, Jun 2019
-
Hyperconnectivity of the Default Mode Network is Linked to Cognitive Disability in Multiorgan Dysfunction SyndromeArchives of Physical Medicine and Rehabilitation, Oct 2019
2018
-
Interaction Information Along Lifespan of the Resting Brain Dynamics Reveals a Major Redundant Role of the Default Mode NetworkEntropy, Sep 2018
-
Predicting functional networks from region connectivity profiles in task-based versus resting-state fMRI dataPLOS ONE, Nov 2018
2017
-
Group-Level Progressive Alterations in Brain Connectivity Patterns Revealed by Diffusion-Tensor Brain Networks across Severity Stages in Alzheimer’s DiseaseFrontiers in Aging Neuroscience, Jul 2017
-
Consensus clustering approach to group brain connectivity matricesNetwork Neuroscience, Oct 2017
-
Multivariate regression analysis of structural MRI connectivity matrices in Alzheimer’s diseasePLOS ONE, Nov 2017
2014
-
Structure formation during an early period of matter dominationJournal of High Energy Physics, Apr 2014
-
2012
-
Electroweak baryogenesis window in non standard cosmologiesJournal of High Energy Physics, Jul 2012


InkscapeMap 0.10.0
What does this software do?
InkscapeMap can open SVG files, and in particular Inkscape generated files
(see http://www.inkscape.org).
It can then extract coordinates from shapes in the SVG and save these information in an HTML imagemap
or plain text file.
Limitations
- Don't scale/translate/mirror shapes. Transformations are not yet supported
- The paths should be composed only by straight lines and Bezier curves. Elliptical arcs are not supported.
- If the path is open, the tool will close it
- It's easier to identify shapes in the interface if all the shape in the
SVG have a label or an id (which you can set in the property windows of Inkscape).
How to use
- Open an SVG file via
File→Open
- The software will load the file and extract paths information
- Un-check in the table the shapes you don't want to be included in the output file
- Set some property on the shapes:
- Double click in the
HREF
and Additional text
cells to add text on a single shape (HREF
will be used only
in HTML imagemaps)
- Change the
Segments
value for circles and Bezier curves
to fine tune the approximation
- Choose either
File→Save as HTML imagemap
or File→Save
as coordinates
to save these information to a file
Bugs, suggestions, contacts
You can post bug reports and suggestions in the project forum at the
SourceForge page
Change log
- 0.10.0
- Added support for Bezier curves, rounded rectangles, circles, ellipses
- 0.9
- Added support for rectangles. Added about screen and updated help. Output size now truncated to integer values.
- 0.8
- Ability to change output size. Support for H, h, V, v (horizontal and vertical coordinate specifications) in paths
- 0.7
- Added relative points support, UTF-8 output, improved implicit "move/line to command" support, added parse logs. Imporoved support for SVG 1.1/Inkscape 0.48.


♠ home
Work experience
Microsoft aprrentice
Adjunct chemistry faculty
Postdoctoral research scientist


Developing Puppet 5 Modules
RVM
- Manages multiple installs of ruby
- We don't need to meddle with system ruby
- Manages collections of gems
- Use something recent (MRI 2.4)
Installing RVM
$ gpg --keyserver hkp://keys.gnupg.net --recv-keys \
409B6B1796C275462A1703113804BB82D39DC0E3 \
7D2BAF1CF37B13E2069D6956105BD0E739499BDB
$ \curl -sSL https://get.rvm.io | bash -s stable
Shamelessly pilfered from https://rvm.io/rvm/install
$ rvm list known
$ rvm install 2.4.3
$ rvm use 2.4.3
(create a .ruby-version file)
Install Bundler and Puppet from Gem
$ gem install bundler
$ gem install puppet -v 5.3.4
Creating a new module
Puppet is your friend!
$ puppet module generate coop-lasersharks
Notice: Generating module at /Users/andy/p5p/lasersharks...
Notice: Populating templates...
Finished; module generated in lasersharks.
lasersharks/metadata.json
lasersharks/spec
lasersharks/spec/spec_helper.rb
lasersharks/spec/classes
lasersharks/spec/classes/init_spec.rb
lasersharks/README.md
lasersharks/Rakefile
lasersharks/examples
lasersharks/examples/init.pp
lasersharks/Gemfile
lasersharks/manifests
lasersharks/manifests/init.pp
metadata.json
- Do include immediate dependencies
- Do not include 3rd party dependencies
- "license" should be "proprietary" unless you know otherwise
Gemfile
- Loads of useful stuff
- facter
- puppet-lint
- rubocop
- rspec-puppet
... and we're done!
$ bundle install
$ bundle exec rake test
manifests/init.pp
class lasersharks {
}
specs/class/init_spec.rb
require 'spec_helper'
describe 'lasersharks' do
context 'with default values for all parameters' do
it { should contain_class('lasersharks') }
end
end
Use code coverage to help keep you honest
In spec/spec_helper.rb
require 'puppetlabs_spec_helper/module_spec_helper'
RSpec.configure do |r|
r.after(:suite) do
RSpec::Puppet::Coverage.report! 100
end
end
Our new manifests/init.pp
class lasersharks {
file {'/opt/lasersharks':
ensure => 'directory',
}
}
Total resources: 1
Touched resources: 0
Resource coverage: 0.00%
Untouched resources:
File[/opt/lasersharks]
F
Failures:
1) Code coverage. Must be at least 100% of code coverage
Failure/Error: RSpec::Puppet::Coverage.report! 100
expected: >= 100.0
got: 0.0
# /Users/andy/.rvm/gems/ruby-2.4.1/gems/rspec-puppet-2.6.9/lib/rspec-puppet/coverage.rb:104:in `block in coverage_test'
# /Users/andy/.rvm/gems/ruby-2.4.1/gems/rspec-puppet-2.6.9/lib/rspec-puppet/coverage.rb:106:in `coverage_test'
# /Users/andy/.rvm/gems/ruby-2.4.1/gems/rspec-puppet-2.6.9/lib/rspec-puppet/coverage.rb:95:in `report!'
# ./spec/spec_helper.rb:5:in `block (2 levels) in '
Finished in 0.2357 seconds (files took 1.56 seconds to load)
1 example, 1 failure
Failed examples:
rspec # Code coverage. Must be at least 100% of code coverage
Extend the test in spec/classes/init_spec.rb
require 'spec_helper'
describe 'lasersharks' do
context 'with default values for all parameters' do
it { should contain_class('lasersharks') }
it { should contain_file('/opt/lasersharks') }
end
end
rake -T
rake beaker # Run beaker acceptance tests
rake beaker:sets # List available beaker nodesets
rake beaker:ssh[set,node] # Try to use vagrant to login to the Beaker node
rake build # Build puppet module package
rake check:dot_underscore # Fails if any ._ files are present in directory
rake check:git_ignore # Fails if directories contain the files specified in .gitignore
rake check:symlinks # Fails if symlinks are present in directory
rake check:test_file # Fails if .pp files present in tests folder
rake clean # Clean a built module package
rake compute_dev_version # Print development version of module
rake help # Display the list of available rake tasks
rake lint # Run puppet-lint
rake metadata_lint # Run metadata-json-lint
rake parallel_spec # Parallel spec tests
rake release_checks # Runs all necessary checks on a module in preparation for a release
rake rubocop # Run RuboCop
rake rubocop:auto_correct # Auto-correct RuboCop offenses
rake spec # Run spec tests and clean the fixtures directory if successful
rake spec_clean # Clean up the fixtures directory
rake spec_list_json # List spec tests in a JSON document
rake spec_prep # Create the fixtures directory
rake spec_standalone # Run RSpec code examples
rake syntax # Syntax check Puppet manifests and templates
rake syntax:hiera # Syntax check Hiera config files
rake syntax:manifests # Syntax check Puppet manifests
rake syntax:templates # Syntax check Puppet templates
rake test # Run lint, validate, and spec tests
rake validate # Check syntax of Ruby files and call :syntax and :metadata_lint / Validate manifests, templates, and ruby files


| is initialization |
Precondition |
The routine completes the initialization of an instance of a class.
The factory design pattern is a case where an instance may be constructed
but not necessarily fully initialized.
Methods with this annotation will only have class invariants instrumented
at execution return points.
|


Effect character says
With this effect a person will pronounce a phrase
Create an effect character says:
- Select the effect: select the effect in the creation effects panel. Press OK.
- Creation effect panel: aftwerwards an edition panel will appear:
- In the first place is allowed to choose among the existent characters. When it has been choosen,
the text field can be fill with the information required.
- The text will appear with the colors associated
to the conversations for the choosen character, and if the option "Always synthetize" is active, the frase will be synthetized.


Company profile - Canadian Company Capabilities
Third-Party Information Liability Disclaimer
Some of the information on this Web page has been provided by external sources. The Government of Canada is not responsible for the accuracy, reliability or currency of the information supplied by external sources. Users wishing to rely upon this information should consult directly with the source of the information. Content provided by external sources is not subject to official languages, privacy and accessibility requirements.
Ivey International Inc.
Mailing Address:
61-2955 156 StSURREY, British Columbia
V3Z 2W8
Location Address:
61-2955 156 StSURREY, British Columbia
V3Z 2W8
Tel.:<PHONE_NUMBER>
Tel.:<PHONE_NUMBER>
Fax:<PHONE_NUMBER>
Logo
Company Profile
Ivey International Inc. in an award winning remediation technology company with active projects world-wide. We specialize in the development and application of innovative soil and groundwater remediation technology for treating; petroleum hydrocarbons, chlorinated solvents and heavy metals.
Among our more notable remediation technologies are the Ivey-sol® Surfactant Technology "products & processes" which can rapidly clean-up in-situ and ex-situ contaminated soil, groundwater, and vapours, in a fraction of the time and cost of conventional methods. We also have the new innovative Atomisol® Technology for treating heavy metal contamination in soils.
Ivey International Inc. has been honoured with several national and international awards. These include:
2006 GLOBE Award - Technology Innovation & Application (March 31, 2006);
2006 North American Frost & Sullivan Technology Innovation Award (February 7, 2007); and
2005 Environmental Business Journal Remediation Technology Merit Award (February 28, 2007)
Ivey International Inc. has overcome the challenges of rapid and cost effective site remediation by not only stepping out of the box, but redesigning it. With the dedicated support and innovative minds of our employees, research partners, and clients we are meeting our corporate mission to be recognized as having Todays Environmental Solutions For A Better Tomorrow
Through innovation, we believe 1 + 1 = 3. It is that simple!
Our commitment is to offer the best service through development and application of innovative environmental technology that will allow you to meet and/or exceed your site remediation requirements. We stand out from many other environmental service companies through our practical research and implementation. Simply put, we offer innovative solutions other companies do not. We understand the complex processes involved in areas such as:
In-situ contaminant recovery from groundwater using our SER Technology to improve contaminant mass recovery by >400%;
In-situ and ex-situ bioremediation using our SEB Technology reducing costs and duration by >40-60%;
In-situ and Ex-situ chemical oxidation using our SEO Technology to improve the effectiveness of chemical oxidation; and
Technology to improve oil recovery form oil sands, oil shale, and oil production fields.
We are also working on many innovative products and processes which are not detailed on this website. For more information, please contact our office at 1-800-246-2744 or visit our website at www.iveyinternational.com.
Full profile
Full profile
Contact information
Company description
325999 - All Other Miscellaneous Chemical Product Manufacturing
541620 - Environmental Consulting Services
541690 - Other Scientific and Technical Consulting Services
562990 - All Other Waste Management Services
Product / Service / Licensing
The SEB technology can improve the bioremediation process by 60% or more.
Ivey-sol (SER, SEB, and SEO) Technology;
Atomisol Technology;
In-situ and Ex-situ Bioremediation;
and remediation system design and installation.
site assessment services. We are members of the Environmental
Assessment Association and the Association of Environmental Site
Assessors of Canada.
We provide Phase I (non-intrusive), Phase II and III
(intrusive) environmental site assessments (ESA).
Phase I ESAs primarily consist of a detailed records review, interviews and a site walk-over. Phase II and III assessments incorporate the information obtained from a Phase I assessment as well as the collection, analysis and interpretation of soil, air and/or groundwater samples.
We also provide risk based assessments using Tier 1
(look-up tables)and Tier 2 (computer modeling) methods. Risk
assessments provide a site specific set of remediation guidelines
often less stringent than generic tables provided by government
departments. These risk assessments are recognized by government agencies and financial institutions.
Technology profile
diesel etc.) and PAH (Polycyclic Aromatic Hydrocarbon)
contaminants from soil, groundwater and bedrock, allowing you to
meet and achieve the highest possible environmental standards in
North America.
Ivey International Inc. is the only company in North America
to offer this new innovative technology, which dramatically
improves the ability to remove these contaminants from the
environment.
Ivey-sol is a phase transfer technology that works at the
molecular level, separating petroleum hydrocarbons and PAHs from
contaminated soils, bedrock and the groundwater table.
Proprietary biodegradable mixtures are used to increase the
solubility of the contaminants, making them easier to liberate,
recover and treat on-site.
Ivey-sol can be used as an addition to existing pump and
treatment facilities to reduce the decommissioning time or to
achieve lower concentrations of dissolved total petroleum
hydrocarbons (TPH) and PAHs. Cleanup time can be reduced by more than 75% and the result will exceed the strictest environmental standards in North America.
Ivey-sol technology incorporates designed phase transfer mixtures
(patent pending) that interact with a specific class or type of
organic (LNAPL) contaminants. The contaminant is liberated from
the soil, bedrock and/or free floating phase and encapsulated,
allowing for their rapid recovery at an on-site pumping well. The
encapsulated hydrocarbons called "micelles", vary in size and
composition and make the contaminants water soluble.
Ivey-sol guarantees an increase in the rate of contaminant
recovery. The clean-up times are shortened and project costs are
dramatically reduced. More of the contaminated material can be
recovered easily. This reduces the need for costly and extensive
soil excavation.
Ivey-sol reduces the inconvenience and liability of our clients.
Decommissioning time is shortened by years.
Market profile
Alliances:
- Sales/Marketing
- Technology
Strategic alliances:
Interested in establishing strategic alliances to deliver innovative and cost effective remediation technology into new markets.Industry sector market interests:
- Environment
- Manufacturing
- Medical/Biotechnology/Chemical
- Mining/Petroleum/Gas
- Service Industry
Geographic markets:
Export experience:
- Argentina
- Austria
- Belgium
- Brazil
- Chile
- Czech Republic
- France
- Germany
- Hong Kong
- Hungary
- Indonesia
- Italy
- Japan
- Korea, Republic of
- Malaysia
- Mexico
- Netherlands
- New Zealand
- Peru
- Switzerland
- Taiwan
- United Kingdom
- California
- Oregon
- Washington
Actively pursuing:
- Connecticut
- Massachusetts
- Michigan
Sector information
Unique applications:
Rapid and cost effective remediation of solids (sludge), soils, and groundwater contaminated with petroleum hydrocarbons, chlorinated solvents, and heavy metals.Key / Major clients:
Available upon request from:George (Bud) Ivey
Tel:<PHONE_NUMBER>
E-mail<EMAIL_ADDRESS>Success stories:
Available upon request from:George (Bud) Ivey
Tel:<PHONE_NUMBER>
E-mail<EMAIL_ADDRESS>Testimonial:
Several available upon request from:George (Bud) Ivey
Tel:<PHONE_NUMBER>
E-mail<EMAIL_ADDRESS>International capital projects:
Working on projects in North America, South America, Europe, Australia, and South East Asia.For additional details please contact:
George (Bud) Ivey
Tel:<PHONE_NUMBER>
E-mail<EMAIL_ADDRESS>Third-Party Information Liability Disclaimer
Some of the information on this Web page has been provided by external sources. The Government of Canada is not responsible for the accuracy, reliability or currency of the information supplied by external sources. Users wishing to rely upon this information should consult directly with the source of the information. Content provided by external sources is not subject to official languages, privacy and accessibility requirements.
Contacts
Contact information
Description
Company description
325999 - All Other Miscellaneous Chemical Product Manufacturing
541620 - Environmental Consulting Services
541690 - Other Scientific and Technical Consulting Services
562990 - All Other Waste Management Services
Products, services and licensing
Product / Service / Licensing
The SEB technology can improve the bioremediation process by 60% or more.
Ivey-sol (SER, SEB, and SEO) Technology;
Atomisol Technology;
In-situ and Ex-situ Bioremediation;
and remediation system design and installation.
site assessment services. We are members of the Environmental
Assessment Association and the Association of Environmental Site
Assessors of Canada.
We provide Phase I (non-intrusive), Phase II and III
(intrusive) environmental site assessments (ESA).
Phase I ESAs primarily consist of a detailed records review, interviews and a site walk-over. Phase II and III assessments incorporate the information obtained from a Phase I assessment as well as the collection, analysis and interpretation of soil, air and/or groundwater samples.
We also provide risk based assessments using Tier 1
(look-up tables)and Tier 2 (computer modeling) methods. Risk
assessments provide a site specific set of remediation guidelines
often less stringent than generic tables provided by government
departments. These risk assessments are recognized by government agencies and financial institutions.
Technology
Technology profile
diesel etc.) and PAH (Polycyclic Aromatic Hydrocarbon)
contaminants from soil, groundwater and bedrock, allowing you to
meet and achieve the highest possible environmental standards in
North America.
Ivey International Inc. is the only company in North America
to offer this new innovative technology, which dramatically
improves the ability to remove these contaminants from the
environment.
Ivey-sol is a phase transfer technology that works at the
molecular level, separating petroleum hydrocarbons and PAHs from
contaminated soils, bedrock and the groundwater table.
Proprietary biodegradable mixtures are used to increase the
solubility of the contaminants, making them easier to liberate,
recover and treat on-site.
Ivey-sol can be used as an addition to existing pump and
treatment facilities to reduce the decommissioning time or to
achieve lower concentrations of dissolved total petroleum
hydrocarbons (TPH) and PAHs. Cleanup time can be reduced by more than 75% and the result will exceed the strictest environmental standards in North America.
Ivey-sol technology incorporates designed phase transfer mixtures
(patent pending) that interact with a specific class or type of
organic (LNAPL) contaminants. The contaminant is liberated from
the soil, bedrock and/or free floating phase and encapsulated,
allowing for their rapid recovery at an on-site pumping well. The
encapsulated hydrocarbons called "micelles", vary in size and
composition and make the contaminants water soluble.
Ivey-sol guarantees an increase in the rate of contaminant
recovery. The clean-up times are shortened and project costs are
dramatically reduced. More of the contaminated material can be
recovered easily. This reduces the need for costly and extensive
soil excavation.
Ivey-sol reduces the inconvenience and liability of our clients.
Decommissioning time is shortened by years.
Market
Market profile
Alliances:
- Sales/Marketing
- Technology
Strategic alliances:
Interested in establishing strategic alliances to deliver innovative and cost effective remediation technology into new markets.Industry sector market interests:
- Environment
- Manufacturing
- Medical/Biotechnology/Chemical
- Mining/Petroleum/Gas
- Service Industry
Geographic markets:
Export experience:
- Argentina
- Austria
- Belgium
- Brazil
- Chile
- Czech Republic
- France
- Germany
- Hong Kong
- Hungary
- Indonesia
- Italy
- Japan
- Korea, Republic of
- Malaysia
- Mexico
- Netherlands
- New Zealand
- Peru
- Switzerland
- Taiwan
- United Kingdom
- California
- Oregon
- Washington
Actively pursuing:
- Connecticut
- Massachusetts
- Michigan
Sector
Sector information
Unique applications:
Rapid and cost effective remediation of solids (sludge), soils, and groundwater contaminated with petroleum hydrocarbons, chlorinated solvents, and heavy metals.Key / Major clients:
Available upon request from:George (Bud) Ivey
Tel:<PHONE_NUMBER>
E-mail<EMAIL_ADDRESS>Success stories:
Available upon request from:George (Bud) Ivey
Tel:<PHONE_NUMBER>
E-mail<EMAIL_ADDRESS>Testimonial:
Several available upon request from:George (Bud) Ivey
Tel:<PHONE_NUMBER>
E-mail<EMAIL_ADDRESS>International capital projects:
Working on projects in North America, South America, Europe, Australia, and South East Asia.For additional details please contact:
George (Bud) Ivey
Tel:<PHONE_NUMBER>
E-mail: budivey@iveyinternational.com


Gets the HTTP redirect settings for a website or virtual directory/application under a website.
Get-IisHttpRedirect [-SiteName] <String> [[-VirtualPath] <String>] [<CommonParameters>]
Returns a Carbon.Iis.HttpRedirectConfigurationSection
object for the given HTTP redirect settings. The object contains the following properties:
True
if the redirect is enabled, False
otherwise.True
if redirects are to destination, regardless of the request path. This will send all requests to Destination
.True
if redirects are only to content in the destination directory (not subdirectories).Beginning with Carbon 2.0.1, this function is available only if IIS is installed.
| Name | Type | Description | Required? | Pipeline Input | Default Value |
|---|---|---|---|---|---|
| SiteName | String | The site's whose HTTP redirect settings will be retrieved. |
true | false | |
| VirtualPath | String | The optional path to a sub-directory under |
false | false |
Carbon.Iis.HttpRedirectConfigurationSection.
Get-IisHttpRedirect -SiteName ExampleWebsite
Gets the redirect settings for ExampleWebsite.
Get-IisHttpRedirect -SiteName ExampleWebsite -Path MyVirtualDirectory
Gets the redirect settings for the MyVirtualDirectory virtual directory under ExampleWebsite.


Hi {{user.username}}, Ligare Denis here. We're pleased to meet you we are here to make you happy Thanks for signing up :)


Tuition Reimbursement Management System
Employee Login
Employee
Manager Login
Manager
Department Head Login
Department Head
Benefits Coordinator Login
Benefits Coordinator


Protocols
The following protocols are available globally.
-
Protocol for decoding an NSDictionary to a concrete object
See moreDeclaration
Objective-C
@protocol PTPVAPIResponseDecodable <NSObject>
Swift
protocol PTPVAPIResponseDecodable : NSObjectProtocol
-
Protocol for encoding an object to NSDictionary
See moreDeclaration
Objective-C
@protocol PTPVNSDictionaryEncodable <NSObject>
Swift
protocol PTPVNSDictionaryEncodable : NSObjectProtocol


Confirm
Are you sure you have the correct?
name
name:
name
age
age:
age
bloodtype
bloodtype:
bloodtype


An implementation of weighted undirected graphs.
from itertools import permutations # needed for best_tour
from .digraph import DirectedGraph
from .priority_queue import PriorityQueue # for Prim's algorithm
Implements an undirected graph.
class Graph(DirectedGraph):
Each node must be a hashable value: a number, a string, a tuple of hashable values, etc. Each edge must be between two different nodes. Each edge has a weight, which must be a positive number. If all weights are the same, the graph is effectively unweighted.
An undirected graph is a special case of a digraph,
in which for each directed edge the opposite edge also exists.
This class therefore inherits the representation and
most of the methods from the DirectedGraph
class.
The following only changes the docstring. Check if there's an edge between the two nodes.
def has_edge(self, node1, node2):
Return False if the edge or either node don't exist, otherwise True.
return self.has_node(node1) and node2 in self._edges[node1]
The following were changed to not generate duplicate edges. Return the set of all edges in self, with weights.
def weighted_edges(self):
An edge is a tuple (node1, node2, weight). The returned set doesn't duplicate edges, i.e. only one of (node1, node2, weight) and (node2, node1, weight) is included.
the_edges = set()
for source in self._edges:
for target in self._edges[source]:
weight = self._edges[source][target]
if (target, source, weight) not in the_edges:
the_edges.add((source, target, weight))
return the_edges
Return the set of all edges in self, without weights.
def unweighted_edges(self):
An edge is a tuple (node1, node2). The returned set doesn't duplicate edges, i.e. only one of (node1, node2) and (node2, node1) is included.
the_edges = set()
for source in self._edges:
for target in self._edges[source]:
if (target, source) not in the_edges:
the_edges.add((source, target))
return the_edges
The following was changed because it can't be inherited as-is. Return the empty list.
def topological_sort(self):
return []
Compute a spanning tree of minimal total weight rooted at start.
def minimum_spanning_tree(self, start):
Return a digraph. Assume the input graph has the start node and is connected.
assert self.has_node(start)
infinity = float('infinity')
Keep the nodes ordered by distance from the closest node in the tree.
to_visit = PriorityQueue()
Initially there is no tree, so all nodes are unreachable.
tree = DirectedGraph()
for node in self.nodes():
self._nodes[node]['distance'] = infinity
self._nodes[node]['from'] = None
to_visit.enqueue(node, infinity)
Correct the distance of the start node.
self._nodes[start]['distance'] = 0
to_visit.set_priority(start, 0)
while not to_visit.is_empty():
Visit the next node and add it to the tree. If it's not the start node, connect it to the tree node it's closest to.
node = to_visit.dequeue()
if node != start:
source = self._nodes[node]['from']
weight = self._edges[source][node]
tree.add_edge(source, node, weight)
else:
tree.add_node(start)
For each neighbour that is not yet in the tree,
for neighbour in self.neighbours(node):
if not tree.has_node(neighbour):
neighbour_distance = self._nodes[neighbour]['distance']
edge_distance = self._edges[node][neighbour]
if it's closer to this node than to other tree nodes,
if edge_distance < neighbour_distance:
update its distance and edge.
self._nodes[neighbour]['distance'] = edge_distance
self._nodes[neighbour]['from'] = node
to_visit.set_priority(neighbour, edge_distance)
return tree
The problem consists in finding a best tour in a complete weighted undirected graph. A complete graph has an edge between any pair of nodes. A tour is a path that starts and ends in the same node and goes through all the other nodes. The best tours (there may be several) have the lowest total weight. Weights usually represent distances, times or costs, so the best tours are the shortest, fastest or cheapest ones.
Return a best tour of the graph.
def best_tour(self):
Assume the graph is not empty and complete. A tour is a list with all the graph's nodes, in the order visited, and the first and last nodes are the same. A best tour has the lowest total weight. Use a brute-force algorithm (only works for very small graphs).
assert self.nodes()
Mark that no tour has been found yet.
tour_found = None
lowest_total = float('infinity')
Go through all possible orderings of the nodes.
for permutation in permutations(self.nodes()):
A tour is a permutation with the start node at the end. First convert the permutation from a tuple to a list.
tour = list(permutation)
tour.append(tour[0])
Compute the tour's weight. Update the best found, if the case.
total = self.weight(tour)
if tour_found is None or total < lowest_total:
lowest_total = total
tour_found = tour
return tour_found
Add an edge between the two nodes with the given weight.
def add_edge(self, this_node, that_node, weight=1):
Replace the weight value if the edge already exists. Assume the nodes are of a hashable type and different. Assume the weight is a positive number.
assert this_node != that_node
assert weight > 0
self.add_node(this_node)
self.add_node(that_node)
self._edges[this_node][that_node] = weight
self._edges[that_node][this_node] = weight
Remove the edge between the nodes from the graph.
def remove_edge(self, node1, node2):
Do nothing if the edge doesn't exist.
if self.has_edge(node1, node2):
del self._edges[node1][node2]
del self._edges[node2][node1]


This simple site will be a place where you can contact me if you want to. I'll probably pull together a few things I've worked on, built, been inspired by or utterly abhorred in my travels. I'll try it keep it light on that last one.
Guido van Rossum's personal site on github is what inspired me to try and keep things simple here. I like a minimalist approach whenever possible. For the record, I pulled this template straight off of startbootstrap.com. Thanks, folks!
If you want to read about my career and where I've been/what I've done, my LinkedIn is the best place to find that information. No sense in duplicating efforts.
If you're interested in jumping around this page (it will grow with time), click this little guy underneath and open the invisible menu.
Toggle MenuWhenever possible, I'll post things here that I'm actively working on.
At the end of July, I left my position as SEO Manager at 1stdibs.com to pursue a passion of mine - code & programming - and join the Immersive Web Development program at the Flatiron School. It's been a whirlwind and I've already met so many amazing, brilliant people. As such I'll be posting blog content for my coursework on this site.
The site I built to hold content on SEO tests, anexperimentaldomain.com, will stay live but is currently defunct. At some point, I may repurpose the domain or kill the droplet altogether (it's hosted on DigitalOcean).
These are just a few people I know, know of, have met or appreciate in the SEO and/or digital marketing space. Good folks who do good work.
If you're interested in getting in touch, I have a Twitter that I neglect and occasionally post to at-sign jonopens.
Below is my personal favorite.
 Use the letters in SEO to describe yourself. My go: Shellfish-Eating Optimist. What, I like shrimp dude. #delish #SEO
— Jon Openshaw (@jonopens) February 6, 2016
If that's not to you're liking, please send a note to me [{at}] jonopens _dot_ com.


Pokemon Sword and Shield Eeveelutions explained
by Steve WrightI choose you, Eevee!
Pokemon Sword and Shield is out now, and with it comes a slightly different set of Eeveelutions to complete.
We’ve got tips on how to catch Eevee (or Eeveelutions) and how to specifically evolve an Eevee below.
Catching Eevee (or an Eeveelution)
First, you’ll need an Eevee — or a bunch of Eevees — obviously. We’ve heard Eevee is easiest to catch early on in the game along Route 4.
If you’re looking for a specific Eeveelution to catch, try hunting under these conditions in the Wild Area, especially near the Lake of Outrage:
- Espeon: Can spawn in foggy weather
- Flareon: Can spawn in harsh sunlight
- Glaceon: Can spawn during snowstorms
- Jolteon: Can spawn in thunderstorms
- Leafeon: Can spawn under clear conditions
- Sylveon: Can spawn in cloudy conditions
- Umbreon: Can spawn in a sandstorm
- Vaporeon: Can spawn in rain
Sword and Shield Eeveeluions
Becuase Sword and Shield doesn’t have an Ice Rock or Moss Rock, things are a little different this time around. Here’s what you’ll need to do specifically when leveling Eevee up in hopes of a specific Eeveelution.
- Espeon: Level during the day with high Friendship
- Flareon: Use Fire Stone
- Glaceon: Use Ice Stone
- Jolteon: Use Thunder Stone
- Leafeon: Use Leaf Stone
- Sylveon: Level up with a known Fairy-type move and with high Affection
- Umbreon: Level during the night with high Friendship
- Vaporeon: Use Water Stone
Pokemon Sword and Shield is available now on Nintendo Switch.


This lesson focuses on using the tools of biotechnology to manipulate the genes of living organisms. Using recombinant DNA technology it is possible to create transgenic organisms and treat genetic diseases in humans. There are three basic areas of genetic manipulation of living organisms, bacteria, plants and animals, including humans.
Upon completion of this lesson students will be able to:


Dirichlet Multinomial Mixture Model#
The tweetopic.DMM class provides utilities for fitting and using Dirichlet Multinomial Mixture Models.
Simulation of 1000 observations drawn from a DMM source: Wikipedia
The Dirichlet Multinomial Mixture Model or DMM is a generative probabilistic model, that assumes that all data points in the population are generated from a mixture of dirichlet distributions with unknown parameters.
DMMs can be thought of as a fuzzy clustering method, but can also be employed as topic models. It has been demonstrated that DMMs work particularly well for topic modelling over short texts (Yin and Wang, 2014).
Graphical model of DMM with plate notation (Yin & Wang, 2014)
Dirichlet Multinomial Mixtures in tweetopic are fitted with Gibbs sampling . Since Gibbs sampling is an iterative ḾCMC method, increasing the number of iterations will usually result in better convergence.
Rule 1: Prefer tables with more students.
Rule 2: Choose a table where students have similar preferences to your own.
Usage#
Creating a model:
from tweetopic import DMM
dmm = DMM(
n_components=15,
n_iterations=200,
alpha=0.1,
beta=0.2,
)
Fitting the model on a document-term matrix:
dmm.fit(doc_term_matrix)
Predicting cluster labels for unseen documents:
dmm.transform(new_docs)
References#
Yin, J., & Wang, J. (2014). A Dirichlet Multinomial Mixture Model-Based Approach for Short Text Clustering. In Proceedings of the 20th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (pp. 233–242). Association for Computing Machinery.


Dom Weldon
Senior Software Engineer, decisionLab
This is a talk about using Dash at work, I apologise to plotly/Dash if anything is out of date or incorrect - get in touch!
How did I come to use dash as a Full Stack Developer?
Mathematical modelling consultancy based in central London.
Friday 13 - Tuesday 17 September
in Cardiff 🏴
Tools: Jupyter, NumPy, Pandas, Scipy, etc.
Tools: Flask/Django, SQLAlchemy, Javascript/React etc.
...in reality, we overlap a lot but the different is still significant
If I'm building a very basic proof-of-concept (PoC) app for a client, I want my data scientist to take the lead and rapidly prototype a web application.
Their background probably isn't in web development.
I want to facilitate their work and deploy the tools we build.
They should just learn React, right?
How hard can it be?
⬇
Marc was almost ready to implement his "hello world" React app pic.twitter.com/ptdg4yteF1
— Thomas Fuchs 🌵 (@thomasfuchs) March 12, 2016
...and so we found Dash.
(or rather, one of our data scientists found it!)
Open source, with paid consultancy options.
No Javascript! ...and that's a good thing!
Sometimes.
A user interface for a machine learning tool used to detect criminal activity in the Amazon rainforest.
$ pip install dash
"""Hello world example."""
import dash
import dash_core_components as dcc
import dash_html_components as html
app = dash.Dash(__name__)
app.layout = html.Div(
children=[html.H1(children="Hello Lithuania!")]
)
if __name__ == "__main__":
app.run_server(debug=True)
$ virtualenv -p python3 venv # or whatever floats your boat
$ pip install -r requirements.txt
$ python app00.py
Github Link: https://github.com/DomWeldon/PyConLt2019DashExamples
All the usual tags you would expect are included in dash-core-components and dash-html-components
Think of these a bit like excel.
They are functions that are called whenever any of their inputs change.
from dash.dependencies import Input, Output
Give the heading an ID, my-h1
app.layout = html.Div(
children=[
html.H1(id="my-h1"),
dcc.Input(
id="my-input",
value="Lithuania",
type="text",
),
]
)
Set its value with a Callback: taking the value of my-input
@app.callback(
Output(
component_id="my-h1",
component_property="children",
),
[
Input(
component_id="my-input",
component_property="value",
)
],
)
def update_output_div(input_value):
return f"Hello {input_value}!"
$ python app01.py
A rough React equivalent:
You've entered {this.state.value}
In a React app, this would all be managed inside the browser. With Dash it now involves a call to the server (to get the new value for the DIV)
I want to build an app really quickly. With minimal new technologies for my data scientist. In order to build a proof-of-concept (PoC), or a very low-use alpha.
Some other potential problems...
Dash is built for data science projects rather than web applications.
This can cause headaches...
⬇
Use dash table to list our dataframe.
app.layout = html.Div(
children=[
html.H1("Titanic Dataset"),
html.H5("Search for a name"),
dcc.Dropdown(
id='my-dropdown',
options=[{'label': "All", 'value': "both"},] + [
{'label': sex, 'value': sex}
for sex in df.Sex.unique()
],
value="both",
),
html.Div(id="my-div"),
dash_table.DataTable(
id='my-table',
columns=[{"name": i, "id": i} for i in df.columns],
data=[],
)
]
)
Uh oh...
@app.callback(
Output(
component_id="my-table",
component_property="data",
),
[
Input(
component_id="my-dropdown",
component_property="value"
)
]
)
def provide_passengers(sex: str) -> Iterable[Mapping]:
global df
if sex == "both":
return df.to_dict("rows")
df = df[df.Sex == sex]
return df.to_dict("rows")
But in teams with different backgrounds, different things are obvious to different people. These errors tend to be a little more subtle than the errors demonstrated above.
Dash has none of the support or tools for multiple apps like Flask contexts etc.
@app.callback(
Output(
component_id="my-table", component_property="data"
),
[
Input(
component_id="my-dropdown",
component_property="value",
)
],
)
def provide_passengers(sex: str) -> Iterable[Mapping]:
if sex == "both":
return df.to_dict("rows")
return df[df.Sex == sex].to_dict("rows")
Input/Output loosely equivalent to props and render().
Events are more complicated, any change in value is an event (e.g., keypress) and results in a call to the server and a callback being fired.
We rely on the difference between Input and State to only respond to events we care about.
Basic layout to display a list of tasks.
app.layout = html.Div(
children=[
html.H1("To Do List"),
html.Ul(
id="my-ul",
children=list_tasks(data_store["tasks"]),
),
dcc.Input(id="my-input"),
html.Button(
id="my-button", n_clicks=0, children="Add"
),
]
)
Some data store for the tasks - here a global variable, but in reality you would use a database etc.
# load out initial dataset
data_store = {"tasks": []} # mimics a database
def list_tasks(tasks: Iterable[str]) -> Iterable[html.Li]:
"""Return list items of tasks."""
return [html.Li(children=task) for task in tasks]
@app.callback(
Output("my-ul", "children"),
[Input("my-button", "n_clicks")],
[State("my-input", "value")],
)
def add_task(
n_clicks: int = 0,
value: str = None,
data_store: Mapping[str, Iterable] = data_store,
) -> Iterable[html.Li]:
"""Called when the button is clicked."""
if value is not None and len(value.strip()):
data_store["tasks"].append(value.strip())
return list_tasks(data_store["tasks"])
But the Dash API limits what you can do.
Dash prevents you from properly accessing Redux. Apps tend not to be "smooth" as a result.
Dash is novel, so people are always referring to the docs (let's be honest, we're all constantly referring to the docs and SO!).
All the docs display apps in a single file.
Result: 2,000 line single-file dash apps.
Some tips and lessons learned.
This may seem like very basic coding advice but it's important!
Separation of concerns
$ python -m app05
You've had a long day...
df.to_csv("results.csv")
Oh wait hang on...
df.to_csv("results_final.csv")
df.to_csv("results_final_final.csv")
df.to_csv("results_final_final_1.csv")
Files quickly become unmanagable.
Persuade your team to move to using a database early on in your project, to avoid pain later (see dependency injection).
...because...
"""Run the app."""
from .factory import create_app
from .home import * # at dL we parameterize this instead
from .todo import *
from .shopping import *
app = create_app()
if __name__ == "__main__":
app.run_server(debug=True)
@App.callback(
Output("my-shopping-ul", "children"),
[Input("my-shopping-button", "n_clicks")],
[State("my-shopping-input", "value")],
)
def add_item(
n_clicks: int = 0,
value: str = None,
data_store: Mapping[str, Iterable] = data_store,
) -> Iterable[html.Li]:
"""Called when the button is clicked."""
if value is not None and len(value.strip()):
data_store["items"].append(value.strip())
return list_items(data_store["items"])
@App.layout(label="Shopping List", path="/shopping")
def shopping_layout() -> html.Div:
return html.Div(
children=[
html.H1("Shopping List"),
html.Ul(
id="my-shopping-ul",
children=list_items(data_store["items"]),
),
dcc.Input(id="my-shopping-input"),
html.Button(
id="my-shopping-button", n_clicks=0, children="Add Item"
),
]
)
def register_template(app: dash.dash.Dash) -> None:
"""Register the main template of the application, including css."""
app.layout = base_layout()
app.callback(
Output("page_content", "children"), [Input("url", "pathname")]
)(App.route)
def base_layout() -> html.Div:
"""Return a Dash Component which will serve as the top-level layout."""
# register the layout
return html.Div(
[dcc.Location(id='url', refresh=False),] + [html.Div(
html.Ul([
html.Li(
dcc.Link(
route["label"],
href=path
),
)
for path, route in App._ROUTES.items()
])
),
html.Div(id="page_content", children="Click link to continue"),]
)
@classmethod
def route(cls, path) -> dash.development.base_component.Component:
"""Return the desired layout."""
try:
return cls._ROUTES[path]["callable"]()
except KeyError:
return cls._not_found()
@staticmethod
def _not_found() -> html.Div:
return html.Div("Not Found")
$ python -m app06
Once we have a class to declare and manage the app, and factory functions to build it, we can start to integrate other tools to make life for our users easier.
The first such tool we've begun to use is dependency injection, using google/pinject.
If you're interested in implementing this, please contact me for the source code.
Users can register a class or functon using the @App.service decorator. Services can depend on oneanother in our object graph.
Avoids the need for users to think about where to place files relative to oneanother.
We can re-use services internally, incuding in bigger web applications that may emerge from work with dash.
When to stop using Dash and start building a "proper" web application?
Some things Dash isn't great at...
Please contact me for more:


Software Engineer﹒IT Specialist﹒Illustrator
Anything in here will be replaced on browsers that support the canvas element


{tag_addressshipping} | Shipping address of customer |
{tag_invoicedate} | Date of Invoice |
{tag_invoicenumber} | Invoice number |
{tag_ordername} | Name of Order |
{tag_productcode} | Product code |
{tag_productdescription} | Product description entered by you when generating order |
{tag_productname} | Name of Product |
{tag_productquantity} | Product quantity |
{tag_recipientaddress} | Email address of the customer |
{tag_recipientname} | Name of the customer |
{tag_shippingdescription} | Description of shipping product |
{tag_shippinginstructions} | Any specific shipping instructions that accompany the order |
{tag_siteurl} | URL of the site from which the gift voucher was purchased from. |
{tag_supplieraddress} | Email address of supplier |
{tag_suppliername} | Name of Supplier |


Trumplove's ToDo Lists
input
clear_all
Adding a Task
Title
-
High
Medium
Low
Priority
Due
Assigned to
-
True
False
Completed
Submit


Toggle navigation
Images
About
Contact
Sign Up
Login
Pooja's Collection of Images
This is a page I want to make to collect a bunch of photos I like


Excel dashboards are great… what? 😯
For all the complaints that people have for Excel, it still has many clear, indisputable advantages.
For one, it is extremely accessible - almost everyone has Excel installed on their computer. It’s familiar to most people, and practically anyone who can use a computer will know how to perform basic operations like doing a SUM function or filter a column.
In the context of sharing analysis or findings, Excel more importantly has portability. By this, I am referring to Excel’s ability to run in a very wide range of circumstances:
You can send stand-alone Excel files over email, share them with colleagues/clients over SharePoint
You can open Excel files without internet if you’re stuck in a rainforest or the London Underground (!)
There is no requirement for additional installed software other than Excel
There is no need for the dashboard to communicate with a server
Moreover, Excel files are also virtually free to create, as realistically you don’t need to take out any additional licenses in order to create/host a dashboard in Excel, unlike Tableau or Power BI where there is at least some cost for a practical commercial deployment. Its ease of use and wide availability arguably also makes it easier for your team to collaborate on putting a dashboard together.
Advantages of Excel
Therefore Excel has many advantages then:
- Accessible / Familiarity
- Portable
- Virtually free
- Easier for collaboration 1
But do all of these advantages sufficiently justify sticking to Excel when you want to deploy a ‘dashboard’ solution?
What is a dashboard?
Before I dive into the limits of Excel, there’s a question: what is a dashboard supposed to be anyway?
Gartner’s IT glossary defines a dashboard as:
… a reporting mechanism that aggregate and display metrics and key performance indicators (KPIs), enabling them to be examined at a glance by all manner of users before further exploration via additional business analytics (BA) tools.
By a ‘dashboard’ solution however, I’m thinking in terms of a broad, but also minimal definition. A dashboard doesn’t need to be used for displaying KPIs, for one. I’d go for something simple, like:
Dashboard: a collection of visualisations with at least some degree of interactivity, available in a single and typically layered visual space.
(‘Layered’ refers to drop-downs, sheets, pages, tabs, etc.)
One could argue that interactivity is not a requirement for a visualisation dashboard, but I do think where the user can have some control over the data that is shown (e.g. tooltips, hovering effects) does make a dashboard importantly different from say, a PowerPoint slide deck.
Under this broad definition, Excel certainly can provide a lightweight, portable, easy-to-setup dashboard solution for commercial deployment.
Limits of Excel
In my personal experience, the limitations of Excel dashboards come from two main areas:
- the limits of its visualisation capabilities and options, and
- the limits of its data analysis capabilities.
The first point is straightforward: the visualisations that you can display on an Excel dashboard are limited to the charts that are available through Microsoft Excel. Although you can do most of the things that you might want to do (bar charts, line charts, etc.), more specific features such as network graphs, faceted bar charts, sankey diagrams, and word clouds are practically impossible to create.
The second point of criticism is more around the fact that Excel isn’t simply designed for more complex analysis tasks, such as grouping large number of records (even 10k+), running slightly more complex regression / classification models, or text mining tasks like analysing ngrams. This means that the data contained in the dashboard must be a summarised output created from another software / environment (e.g. R, SAS, SPSS), requiring an additional step between analysis and visualisation. Although it might sound like this is only one additional step, this has implications for scalability: if your task is to create 100 of these Excel dashboards, how do you reliably and quickly get the analysis you’ve done in a separate analysis program into Excel? Sounds like a bit of a nightmare! 😨
What’s a good alternative then? 🤔
The ability to perform both analysis and visualisation in a single environment is probably one of the most attractive advantages of Shiny. The fact that it is based in R also means that it is by no means limited (effectively unlimited) in terms of the charting libraries available:
- ggplot2
- plotly
- rbokeh
- highcharter (caveat: you need a license if you’re using Highcharts commercially, but otherwise free to use)
- dygraphs … to name just a few!
I wouldn’t, however, say that Shiny is the best alternative to Excel - given the requirements that I need to meet in terms of client deliverables. From my personal experience, where Shiny leads on interactivity, it suffers on accessibility and portability. Deploying a Shiny app typically requires hosting through Shiny Server, or through shinyapps.io, where the user will require an internet connection for access. Hosting a Shiny app on shinyapps.io with credentials require a hosting fee, unlike Excel which you can encrypt for free. My personal experience is that clients or end-users perceive web apps to be less reliable, as it is dependent on the server / internet connection working properly, whereas Excel files wouldn’t fail in the same way.
flexdashboard 🔥
My favourite alternative actually is flexdashboard, which is importantly different from Shiny in that it is possible to run itself as a stand-alone static HTML file that doesn’t depend on communicating with a back-end server.
Effectively, this is a single HTML file with interactive features (though not as interactive as Shiny, if that makes sense) that opens up in a browser, and which you can send via email or host securely on SharePoint. You still have access to all the charting libraries that are available in R, as long as the libraries themselves can run without communicating to a server - plenty of examples are available on RStudio’s html widgets gallery. All the production is done in a RMarkdown document which you would use the flexdashboard package in combination with knitr to create the static HTML dashboard document.
As Jonathan Ng pointed out to me, using the DT package within flexdashboard means you can add interactive buttons that lets the user download data as Excel, CSV, or PDFs - an incredible interactive feature through static HTML!2
I’ve also created a demo flexdashboard on my website which I aim to showcase some examples of what you can do with a static HTML dashboard. Check it out! I aim to continuously update this as I explore more available HTML widgets.
Conclusion
Let’s look back at some of the points that we laid out as the strengths of an Excel dashboard solution, and see whether flexdashboard covers them:
Accessible / Familiarity: YES - it’s safe to assume that most computers, if not all, have internet browsers, in which the HTML dashboard will load properly. Familiarity does come down to the UX design the of the dashboard, but a flexdashboard will generally be intuitive to operate.
Portable: YES - you don’t need an internet connection, and static HTML files can easily be sent via email.
Virtually free: YES - because there’s no hosting needed, and R itself is free.
Easier for collaboration : I’d say YES, on the condition that your team is also familiar with R. The fact that flexdashboards are written in code means that it’s easier for two or more people to be working on the same dashboard at the same time than an Excel file. If done properly, R code is also more readable than Excel cell references.
So hands down, flexdashboard is my favourite alternative to Excel dashboard!


This is email And so it this Again.
This is email And so it this
Again.
List
Quote in list
Second list