Hey Everyone,
I have been reading everything that I can find here about using OpenEnergyMonitor to monitor my house. I currently use EmonCMS to monitor all of my weather data provided by our Davis VuePro2+ and now that that is behind me, I want to move on to electrical.
I want to get as accurate as possible information and I think I have a list of everything that I might need to get it done, but before I hit the 'order' button, I wanted to run my list by others that have done the same and make sure I am not missing anything.
Like most houses in the US, I am fed by a 240V split-phase system (4/0) (two hots and a neutral, 240V hot-to-hot and 120V hot-to-neutral). I have a small PV array which backfeeds a 2-Pole 240V CB in my main panel (called a Type 2 installation on the documents here).
I want to measure the mains, the solar array, and all of my household circuits which consist of 10 x 120V circuits fed by standard single-pole breakers and 4 x 240V circuits fed by standard 2-pole circuit breakers. All of this data will be fed into EmonCMS for graphing and data storage.
When testing my mains, I note that the feeds are not balanced, so I will need to monitor both hots to get a true reading. I am not sure on the 4 x 240V house circuits (Air Conditioning system, clothers dryer, main kitchen cooking range and pool system supply circuit). Those (in theory) should be balanced circuits so I was thinking monitoring one leg and that * 2 the numbers, but I would rather be more accurate as the risk of added expense then to try and save a few $$ and not have accurate information.
My main electrical panel is fully accessible and I plan on putting a sub-panel right next to it to house the hardware necessary with a conduit running to the main panel to run the necessary ct wires between the two panels. I am familiar with electrical and have no issues opening my panel (which I have already done) to install the necessary CTs for monitoring.
After reading through the various posts about using this system for US monitoring, I have put together this list of items that I need, but in the process I ended up with more questions.
What I want to Monitor
INCOMING MAINS (240V, 2 x Hot, 1 x Neutral (240v hot-to-hot, 120v hot-to-neutral) - 200A (4/0 wire)
SOLAR ARRAY (240V Type 2 (backfed to main panel) via a 2-Pole breaker)
HOUSE CIRCUITS: 4 x 240V 2-Pole Circuits and 10 x 120V 1-Pole Breaker Circuits
HARDWARE NEEDED (I think)
2 x Wattcore WC3-300-MV333 (300A/0.333V) - For MAINS (or should i get 300A/1V)?
1 x emonPi (Solar version with 2 x CTs & AC-AC Voltage Sensor, replace CTs and monitor MAINS with this unit)
QUESTION - Is the Solar emonPi any different (other than an additional CT) than the normal emonPi? DO I need 2 x emonPi (or 1 x emonPi and 1 x SolarPi)
5 x emonTx V3 (total of 20 CT inputs (10 x for 120V circuits, 2 x for Solar Array and 8 x for 4 x 240V circuits) each with AC voltage sensing adaptor.
20 x SCT-013-000 CTs for measuring everything else BUT the mains.
OK, so some specific questions that I had regarding this setup. In this page they show a emonPi Solar using only two CTs. One for the solar and one for the mains. They call this a "Type 2" setup. However, in my setup, the solar is 240V (2 hots) and the mains are 240V (2 x hot, 1 x neutral) and the mains ARE NOT balanced. Does that make any difference in this setup for someone wanting as exact as measurements as we can get? Why would I not want to measure BOTH of the legs coming from my solar array to the main electrical panel? My solar connection is a 240V connection backfed into my main panel via a 2-pole breaker.
Second question, I am assuming (maybe incorrectly of course) that I just need an emonPi and enough emonTx V3s to get the total number of CTs that I want to look at and the emoncms software can do the rest for me, correct? This goes back to my question above, do I need a certain number of the emonPi units or just one and enough of the emonTX V3 'expansion units' to add up to the total number of CTs that we want to monitor?
Third and final question - I have read a number of posts about the specific CTs that we need to use and the fact that we may (or may not) have to solder something onto them or remove something from them to make them accurate with the emonPi as a result of using it here in the US. Is this still accurate, and if so, are there CTs that are already configured for use with this system in the US and that would not require soldering?
OK, fourth question - Am I missing any parts?
Many Thanks!!
Re: US Home Total Home Monitoring including Solar Array
A lot of fairly deep questions there. I'm in the UK, Bill Thomson might want to chip in with some local knowledge.
Zeroth question: DON'T get the 0.333 V output CTs. The voltage that the emonTx/Pi is looking for - whether it comes from a burden inside the CT or one inside itself - is about 1.1 V rms, so you're only using ⅓ of the available range. Get 1 V output or, if you want to completely customise the thing, get the burdenless version and fit a burden resistor of your choice to give you the correct scale for your situation. (Either way, you'll need to work inside the device. More on that below.)
First question: An emonPi is an emonPi. I'm not aware of any hardware difference, it's the complete kit of parts that makes the difference. You should only have one Pi, you can add five emonTx's sending data to it by radio.
Measuring the 240 V circuits:
As I tried to explain in the US page, for a true 240 V device (load or feed - the principle is the same) the current is the same in both legs. If the voltage is the same, you can measure half the voltage and the current and double the answer. In your case, the voltage on the two halves is not the same, so you must either measure the two half voltages and the current, then add the voltages and multiply the sum and the current to get the total power, or you must measure and multiply the two halves separately and add to get the total power. The snag is, to get real power, all that has to be done in one unit, and OEM doesn't offer anything with 2 voltage inputs. So you need to treat the 240 V devices as 2 × 110 V that just happen to share a 2-pole breaker.
Is a 100 A CT the right one for all the individual circuits? You will probably find it beneficial to increase the sensitivity by increasing the burden value, alternatively as you're clearly competent to drop wires out of breakers, you could consider cheaper and smaller (and probably more accurate) ring-core CTs for the individual circuits. But that would mean changing the burden resistor inside the emonTx.
Second question: As I hinted above, to measure real power, both voltage and current need to be measured in the same unit. So it's not as simple as the totals need to add up. You must allocate inputs and circuits so that the voltage and currents are all on the same leg. That inevitably means that you'll have the contributions for the 240 V devices in two parts, which you'll need to add in the feed in emonCMS.
Third
and final question: Yes. Both the Pi and the emonTx are designed for a current input of 50 mA for full scale. For the best performance with anything different, or if you get 'voltage output' CTs, you will need to do a little customisation inside the devices. It's not hard if you have experience of working on circuit boards. If you haven't, then I'd suggest enlisting the aid of someone who's happy to do that for you.Fourth and final question question (FTFY and anyway, experience tells me that's a complete fallacy - there will be more!):
You're missing a programmer and lead. You'll need to edit and reload the sketches in the emonTx's to give them unique identities. And a power supply for your Pi. But you could economise on parts: All the emonTx's and the Pi could use two ac adapters for measuring the voltages (one per leg) IF you provide the emonTx's with a 5 V d.c. supply - and that could be a single one supplying all five and the Pi. So instead of 6 a.c. adapters and one 5 V d.c. USB adapter for the Pi, you could have two a.c. plus the one 5 V d.c. adapter. You'll need a handful of plugs and leads if you do that.
And you'll need RJ45 connectors etc for your water meter.
Re: US Home Total Home Monitoring including Solar Array
Robert -
Thank you for your reply. And you are correct, your answers have now generated additional questions :-) Please bear with me, a lot of this stuff is new to me and I want to make sure I understand it all before proceeding.
On my 240V main incoming feed, the voltage on each leg is the same, it is just the current that is unbalanced just due to the way the 120V circuits are distributed across each leg. This only applies to my main incoming feed, not any branch 240V circuits which (I assume) should (by their nature) be balanced.
So to measure just my MAIN incoming feed, I would need two CTs, one for each hot leg since they are not balanced as far as current is concerned. I would also need to measure voltage across one of the legs since the voltage is the same on both legs. Is that correct or do I need to measure voltage across both of the legs? I noticed that you said I needed two AC adaptors (one per leg) and was just wondering if the voltages on each leg are the same, why do we need to measure both of them?
I also understand with the solar monitoring I think I may need to use another voltage monitor on the solar input as a way to measure the actual current flow. Is this correct?
You mentioned ring-core CTs. I am very adept at pulling circuits from my main panel so if the ring-core CTs are more accurate, I would like to go with those, but I have several questions:
1) You mention having to change the burden resistor in the emonTx units. I am not new to soldering, but I am not super good at it. How difficult is it to change this resistor and how many do I need to change per unit? Are there 4 burden resistors inside each unit since they will handle 4 CTs or do they share a single resistor? How would I know what value resistor to install in it's place?
2) Considering that I have a range of circuits from 15A to 50A, 120 and 240V, do I get 100A ring-core CTs for each circuit or different CT values for the 15A circuits as opposed to the 50A circuits?
3) I have 4 x 240V loads on my panel. My Air Conditioner, range, pool and clothes dryer) but all of those loads are balanced, so I assume that I need one CT per each of those circuits and then I just double the value. Is that correct?
4) Do you have any recommendation as to the size of the CTs I would need as well as a specific manufacturer that you know woks well with the system?
Thank you again for your help!
Re: US Home Total Home Monitoring including Solar Array
Hi rjsears
I have a somewhat similar service here in the USA --- 200 Amp Service and a 11,400 watt Grid Tie Inverter.
For the 2 Main feeders, I recommend you take a look at the Wattcore WC3 Split-core 100A:0.1A (1,000 Turn Ratio) .
It will easily fit around the 4/0 feeders and handle 100 Amps at 240 V or 24,000 Watt loads which should be sufficient unless you have some really high loads all on at the same time.
This CT does not have an internal burden resistor, but does have a safety feature of Zener Diode clamping at 6.5V RMS or 18.4V Pk-Pk. --- sells for about $39.
http://byramlabs.com/store/product_info.php/products_id/20516/product/WattcoreWC3%20SERIES%20WC3-100-MA100%20Split-Core%20Current%20Transformer%20(100:100mA)
To measure a full 100 Amp load you will need a R (Burden Total) = 1.1 V / 0.1 A = 11.0 Ohms. Use a 22 Ohm in parallel with the 22 Ohm Burden Resistor on the emonTx V3 circuit board = 11.0 Ohm and you won’t have to remove that resistor.
Try a Calibration Coefficient of Turns Ratio (1,000) / Burden Resistor (11.0 Ohms) = 90.9
If you are going to measure with a CT every individual breaker off the service panel, I do question why you also need to also measure the 2 Main feeders, because the Total of the individual circuits will be the same as what the feeders measure.
Also, you will only need a CT on one of the hot legs from the Solar Inverter. All 240 V Grid Tie Inverters use the Neutral wire only for sensing (doesn’t carry current), so the 2 hot legs will be balanced and only need to measure one.
If your Solar Inverter max output is less than 50 Amps X 240 V = 12,000 Watts --- this CT should work:
Wattcore WC1 Split-core 50A:0.1A (500 Turn Ratio) $25 Has Zener Diode clamping at 6.5V RMS or 18.4V Pk-Pk
R (Burden Total) = 1.1 V / 0.1 A = 11 Ohms Again, use a 22 Ohm in parallel with the 22 Ohm on circuit board.
Calibration Coefficient = Turns Ratio (500) / Burden Resistor (11 Ohms) = 45.5
Re: US Home Total Home Monitoring including Solar Array
Hi SD Solar -
Thanks for the info. I wanted to measure the mains just as a backup to the other circuits and the cost to monitor two additional legs is not that much.
Since I only need to monitor one leg on the inverter, I assume that this is the same on my other 240V circuits such as my AC, electric range, etc. Those circuit should be balanced. I am going to pull my electrical cover this afternoon and do some testing to verify that that is the case.
Then I am assuming that when I dump the info to emoncms, I just multiply what I get on the current side * 2 and that would be accurate. Am I thinking correctly?
I am new to all of this so I assume that the Calibration coefficient is something that I will need to know when I program the units themselves to read the CTs or is this something that needs to be done my emoncms once I get the data to it?
Thanks for the info!
Re: US Home Total Home Monitoring including Solar Array
It's a given that the currents in each leg - and the same goes for a proper 3-phase supply - will not normally be balanced. So when you made a point of saying that the feeds were not balanced, that meant to me that the voltages were not balanced.
As they are, you need to revisit the "Use in N. America" page because almost everything is explained there.
Re: US Home Total Home Monitoring including Solar Array
Hi rjsears, I have a rather similar setup (only 16 CTs, no solar), but same US split phase. I did everything with the "normal" SCT-013-000 split-core CTs. They (just) went round my 100A supply lines (one each - mine are nowhere close to balanced either). For the 240V circuits, I took the wires out of both sides of the breaker through the same CT - but in opposite directions so the currents add (there's probably a good principle here, but I just used trial & error to get them adding properly). Not sure this is completely kosher, but numbers I get are reasonable. Remember to flip the DIP switch on the EmonTxs for US voltage. Also need to set it in the EmonCMS configuration.
I did order the programmer, but haven't needed to use it yet! I just asked Glyn & Tristan at the store to ship the EmonTxs with different IDs, and they were great, no problems. But there is a new monitoring sketch "in the works", when that's stable I suspect I will be reprogramming.
Thanks, Sandy
Re: US Home Total Home Monitoring including Solar Array
Thanks Robert -
Actually, only my main feed is not balanced. All of my other 240v circuits are evenly balanced. Sandy mentioned that he took both of the leads of his 240V circuits through the same CT except in opposite directions. This seems like a great concept to same some $$ on some CTs and seems to make sense.
What do you think of this idea? I noticed it in your For use in the US document...
Re: US Home Total Home Monitoring including Solar Array
Sandy -
Thanks for the great info, I never thought of running both of the wires through the same CT only with one going the opposite direction. I wonder why more people are not doing it (or maybe they are). I asked Robert (same thread) for him input.
When you received your units did you have to add/change/remove resistors with the SCT-013-ooo CTs you were using?
Thanks for the info!
I am assuming that his is the configuration that you are referring to:
Re: US Home Total Home Monitoring including Solar Array
Hi Rich,
A "load audit" will give you an idea of which CT to use.
Add up a rough total of all the large energy consumers you have.
Make an estimate of the max number of them you'd ever have powered on at the same time.
Use a CT with a rating that meets or exceeds your "load total, plus a bit for headroom." (15 to 20%)
More info in this thread, and here. <-- Info on 200 Amp service
Wally, Thanks for helping out!
Regards,
Bill
Re: US Home Total Home Monitoring including Solar Array
I never thought of running both of the wires through the same CT only with one going the opposite direction. I wonder why more people are not doing it
Unless the wires are smaller than say, AWG10, it's nigh on impossible to get two of them through the CT in opposite directions. Definitely not going to happen with 2/0 or 4/0 feeders! It might be done with AWG 8 or
AWG 6 in the case of branch circuits for larger 240V appliances, but that would require some slack in the wiring.
The Electrician doing the wiring is supposed to leave just enough slack in the wiring to enable connections to circuit breakers, bus bars, etc, but not more. Depending on the person who did the wiring, there may, or may not, be enough slack in the wiring to enable putting two wires through one CT, in opposite directions. If the job was done IAW the NEC, there won't be much, if any, slack in the wiring.
Re: US Home Total Home Monitoring including Solar Array
Bill - thanks for the insight.
In my panel, it would appear that I might have enough slack to run the 240V house circuits throught a single CT, the lowest right hand 2-pole breaker is my inverter feed to the panel and it looks like I have enough there, but CTs are cheap for sure and all I would save is some math and an extra EmonTx!
Re: US Home Total Home Monitoring including Solar Array
Considering that I wrote that page, with Bill's help....
Re: US Home Total Home Monitoring including Solar Array
Looks like you've got plenty of slack (and room too!) in your load center. ;-)
With that much room, you won't have any problem using two CTs.
My load center is a lot tighter than yours, and I've managed to put four Wattcore WC-1s and
two Magnelab SCT-0750s in it!
Re: US Home Total Home Monitoring including Solar Array
Robert -
Will all the great advice you give and the knowledge you have I suspected you wrote that page! Thank you for your patience in helping us newbies get going and understanding all of this electrical stuff!
Re: US Home Total Home Monitoring including Solar Array
Thanks Bill -
I might try with a single CT per 240V circuit (except the mains) as it will cut down on the number of EmonTXs I will need. I ordered enough of everything to use a single CT on each hot leg so we will see how it all plays out when everything arrives in a couple of weeks!
Re: US Home Total Home Monitoring including Solar Array
Answering the questions elsewhere about CT cable length and multiple transmitters in one enclosure...
You should be OK up to 10 m, and probably more, for the CT leads, if you do it properly: use good quality twin twisted screened 'microphone' cable, using the twisted pair for the CT secondary, and earth the screen only at the CT end. And don't run a heavy power cable alongside that carries interference, such as big spikes from switching fluorescent lamps or motors.
5 transmitters inside one box might be pushing your luck, do you feel up to arranging a serial connection and using one emonTx as the master, which will command the others to send their data when requested, rather than when they feel like it (which is what happens with the radio, and can result in collisions)? Martin Roberts did that with 3 emonTx V2's in his "Full-fat 3-phase" design. You should be able to follow that for the serial software. A serial connection from one emonTx to a Pi is documented, but I don't know that anyone else has done exactly what I'm envisaging, however I think it should be possible.
Re: US Home Total Home Monitoring including Solar Array
If those 240 V loads don't have a neutral connection, or they do have but it only carries an insignificant current, then of course you only need one CT, and as your voltage is balanced, all you do is double the number you get. It's all on the "Use in N.America" page.
Re: US Home Total Home Monitoring including Solar Array
Hi Robert, rjsears, Yes, the concept of passing both legs through the same CT in opposite directions came right from that North America usage post (Robert, sorry, I didn't remember seeing you & Bill as the authors - if I had, I wouldn't have had any worries about doing it!). I've used the same concept to combine several low usage 120V circuits into 1 CT. (The house has rather a lot of branch circuits - and even more light switches!)
I didn't have too much trouble getting both legs through the one CT. I think the biggest I did it for was the oven - 50A on 6 ga. As Robert says, not a hope with the supply lines.
As I remember (from another of Robert's posts) the SCT-013-000 has no internal resistor - so works perfectly with EmonTx that has the burden resistors on the board. There are other variations - with something other than -000 in the part number - that do have internal burdens.
I have 4 EmonTx's (nailed to the wall, in a line right above the breaker box) all sharing a power supply (so all turned on at exactly the same time) and I don't seem to have many conflicts with the transmissions overlapping (looking at EmonCMS, the ages on the feeds rarely go much over 30 seconds - maybe miss 1 every 5 mins). I've also got 3 EmonTH's in the mix, but they transmit less frequently.
The only non-standard thing I've done is in EmonCMS, I added a 'stacked' option to multigraph so I could see how usage breaks down between the circuits. (See https://openenergymonitor.org/emon/node/10919).
Re: US Home Total Home Monitoring including Solar Array
Robert -
I will look at the "Full-fat 3-phase" design and take a look at the serial setup. Sounds like it might be a better way to go since I will have 5 of the EmonTX3 and the Pi. I might get it all set up and see if I am having issues and then move to the serial route.
My thought on the CT length was to move my equipment box out of the outdoors (where it would sit in the sun all day) to the attic, but I did some temp reading there yesterday as well, and it was 45C, not a good place for the units.
So I talked to my better half last night and she is ok with me coring through our back wall which is directly opposite our power panel, drop a nice 2" conduit in through the wall and have all of the hardware sitting inside the house in a nice cabinet in our living room. That way, all of the hardware is inside in cooler temps and my run from the equipment to the power panel is less than 2M.
I am also going to run my reference power through the same conduit using 16/3 extension cord wire. As I recall, in my setup I need two reference voltages - one for the main panel and one for the Solar array (to measure import or export of power).
I have not read anything about there being an issue with the CT leads being close to power lines, what do you think about running the CT leads inside the same conduit as my reference power?
Re: US Home Total Home Monitoring including Solar Array
Robert -
Another questions comes to mind rereading your posts above. You said:
As I hinted above, to measure real power, both voltage and current need to be measured in the same unit.
Does this mean that I need a reference voltage adaptor for each of the EmonTX3 (all five of them) in order
to get real power from each unit?
Thanks
Re: US Home Total Home Monitoring including Solar Array
Rich,
If you want your installation to meet NEC guidelines, your low voltage wiring needs to be in a conduit separate from the 120/240 voltage wiring.
You might want to verify this, but I'm thinking the 16/3 extension cable wire you want to use doesn't meet code requirements. I'm not sure whether the requirement to use solid wire for low voltage circuits is the same as it is for high voltage wiring, but I'll find out a bit later today and pass along the answer.
Thought I'd mention it in case you weren't aware of those requirements. Keeps the inspectors happy, and isn't a bad idea looking at it from the insurance company's point of view.
Re: US Home Total Home Monitoring including Solar Array
Bill -
Thank you for pointing that out, it makes sense that per code they would need to be separate. Same on the extension cable wire. I was hoping to bypass an intermediate outlet since the conduit is so short, but you are right, regardless it all needs to be to code.
Thanks!
Re: US Home Total Home Monitoring including Solar Array
OK, so giving this more thought, I am going to have upwards of 20 CTs in my panel, all coming through a conduit into the house (less than 4' away) and then into the Emon equipment. If I run all of the CTs from the panel directly to the Emon equipment it might look a bit weird so I was thinking of taking all of the CTs and terminating them inside a dual gang outlet box with a plastic cover.
I would install 3.5MM Female-to-female bulkhead connectors (as opposed to cutting off the 3.5mm jack on the CT and soldering to a 3.5mm female outlet) in the cover of the outlet and on the inside plug in the CTs then close the cover. From there I just get standard 3.5mm male-to-male cables and run them from the box to the emon equipment.
I think this would look better and if I ever lose a CT, I would not have to desolder the CT, just disconnect the CT from the electrical circuit, open the box, unplug the bad CT and replace it with a new one.
My question is would I have any problem with my readings going from male plug on CT to female jack to female jack to male plug to emon equipment?
Re: US Home Total Home Monitoring including Solar Array
Again, if your voltages on the two legs are balanced, and if your emonTx's and Pi all share the same 5 V d.c. supply, they can all share the same a.c. voltage sample too. If you look at the front end circuitry, you'll see that it's OK to tie all the ac voltage inputs together if they all share the same ground, and that in turn means they can all share the same d.c. supply. Just make sure you've got enough current. With the links on the emonTx's removed so that the a.c. voltage isn't used to power it, the current drawn is about 0.1 mA. (You will probably need some -1 multipliers to get all the signs right in the power and VA departments.)
Ha - you posted while I was typing!
I'd avoid as many connectors as possible. It's easy to unsolder the plugs from the CTs, so I'd be inclined to do that and use terminal blocks (get ones small enough because those CT cables are quite fine) in the outside box, and re-use the plugs inside. It'll save having to have enough spare space in the conduit to get the plugs through the wall, apart from anything else, and it will facilitate earthing the cable screens (and those are not the plug body!).
[I think you want 5 terminals per 2 CTs: CT1+, CT1-, Scn, CT2+, CT2-, etc 10 times.]
Re: US Home Total Home Monitoring including Solar Array
Rich,
Turns out the 16/3 wire you mentioned is OK for the job. As long as all the LV stuff is kept separate from the HV stuff, i.e. in its own conduit, you're good to go.
Re: US Home Total Home Monitoring including Solar Array
Robert -
I decided to use the following CTs:
2 x Wattcore Part #WC1-100-RV001 Split-Core Current Transformer (100:1000mV) (My Mains)
16 x Wattcore Part #WC1-025-RV001 Split-Core Current Transformer (25:1000mV) (120V 20A Circuits)
2 x Wattcore Part #WC1-050-RV001 Split-Core Current Transformer (50:1000mV) (50A A/C Circuit)
From my understanding (after reading about 200 of your posts), these should work, I just need to remove the internal burden resistors completely from my Pi and TXs. These have the added benefit of not having a connector on them, so I have to do all the soldering. I recall a post telling which wire goes to tip, I'll dig that up when they arrive and I need to start putting ends on them.
As far as powering the units, I am planning on purchasing a single, powered USB hub and plug all 6 of the units into this powered hub. I am going to add a dedicated breaker for the VT (I have the space in my panel) and I purchased the US AC adaptor (actually three of them) from the OEM store. Since each Pi/TX only used 0.1mA for voltage monitoring, I could use a single power supply and a splitter for powering all of the units, correct?
I could also power my USB hub from that same breaker/outlet and both the USB hub and the AC adaptor would be sharing the same hot, neutral and ground. Would that be the best idea?
Am I thinking about this clearly?
Now referring to THIS document, I have a Type 2 connected solar array. I need to have an AC input in order to monitor the flow of the current direction from the solar array. I assume (maybe incorrectly) that the AC adaptor needs to be connected to the hot line of the solar array itself in order to detect this flow, or is this incorrect and the TX connected to the solar array can use the same reference voltage as the rest of the system? I just do not understand how an AC adaptor can tell the flow.
Thanks
Re: US Home Total Home Monitoring including Solar Array
Thanks Bill -
I decided to just install normal outlets for my reference voltages as opposed to running the extension cord type wiring.
Re: US Home Total Home Monitoring including Solar Array
The ac adapter provides the reference so that the relative phase of the current can be measured. Read the first page in Resources > Building Blocks about AC Power Theory. It doesn't matter where you measure the voltage (within reason). If you get the CT wires crossed, you just flip it on the main (primary) conductor. But it would be nice to have them all the same.
" I could use a single power supply and a splitter for powering all of the units, correct?" That's EXACTLY what I wrote above: "if your emonTx's and Pi all share the same 5 V d.c. supply, they can all share the same a.c. voltage sample too."
Re: US Home Total Home Monitoring including Solar Array
Thanks Robert -
I just want to make sure I understand correctly is all.
Thanks


Your browser doesn't support the features required by impress.js, so you are presented with a simplified version of this presentation.
For the best experience please use the latest Chrome, Safari or Firefox browser.
Renaissance
Benchmarking Suite for Parallel Applications on the JVM
Aleksandar Prokopec,
Andrea Rosà,
David Leopoldseder,
Gilles Duboscq,
Petr Tůma,
Martin Studener,
Lubomír Bulej,
Yudi Zheng,
Alex Villazón,
Doug Simon,
Thomas Würthinger,
Walter Binder
Motivation
JVM Is Evolving
-
New JVM features: concurrency, lambdas, method-handles, non-blocking I/O, ...
-
New paradigms: data-parallelism, fork-join, streams,
asynchronous programming with futures, transactional memory, ...
-
New frameworks: Big Data (Spark), stream-processing (JDK8 Streams, Rx),
actors (Akka), network communication (Netty) ...
-
Common theme: concurrency and parallelism.
-
Are there new kinds of applications to optimize?
Selection methodology
Goals
-
Modern concurrency - cover many different styles.
-
Realistic workloads - widely-used frameworks,
production usages, existing benchmarks, mining.
-
Workload diversity - stress different JVM features.
-
Deterministic execution - to the extend possible.
-
Open-source availability - licensing, debugging, source inspection.
Goals
-
Modern concurrency - cover many different styles.
-
Realistic workloads - widely-used frameworks,
production usages, existing benchmarks, mining.
-
Workload diversity - stress different JVM features.
-
Deterministic execution - to the extend possible.
-
Open-source availability - licensing, debugging, source inspection.
Gathered around 100 workloads, and used them to select 21 benchmarks.
Analysis
Metrics
PCA
Normalization over reference cycles.
Standardization to a [-1, 1] range.
Principal component analysis.
PCA: Components 1&2
PCA: Components 1&2
PCA: Components 3&4
PCA: Components 3&4
Atomic Operation Count
Invokedynamic Count
Synchronized Count
Are these differences relevant for performance?
Compiler optimizations
Escape Analysis with Atomics
Atomic reference objects, futures.
Escape Analysis with Atomics
Escape Analysis with Atomics
Loop-Wide Lock Coarsening
Synchronized collections.
Loop-Wide Lock Coarsening
Method-handle simplification
JDK8 Streams, Rx.
Method-handle simplification
MethodHandle reflection necessary.
Method-handle simplification
MethodHandle reflection necessary.
Method-handle simplification
Profile of the Scrabble benchmark.
Speculative Guard Motion
Speculative Guard Motion
Optimization Matrix
Graal vs C2 Differences
Code Complexity
Complexity Metrics
We computed the average and sum of all Chidamber & Kemerer metrics,
and recorded minimum, maximum and average across benchmarks.
Conclusion: similar averages across suites (details in the paper).
Loaded Classes
Process
Open-Source Process
-
Source code public, PRs welcome!
-
Community can propose new benchmarks.
-
Committee votes on benchmarks for the next release.
-
Next steps: harness with detailed analyses for benchmark characterization,
new compiler optimizations, effects on GC?
Open-Source Process
-
Source code public, PRs welcome!
-
Community can propose new benchmarks.
-
Committee votes on benchmarks for the next release.
-
Next steps: harness with detailed analyses for benchmark characterization,
new compiler optimizations, effects on GC?
Goal: keep improving and evolving the suite in an open manner.
Thank you!


TeamsFuse is a cross platform app that makes dealing with your sports teams easy and simple. It handles things in a simple consistent manner, allowing for multiuple players and teams to interact simply and easily with the main calendar view.


Units of Measure are inherited by your Application Settings
Language:
English
Currency:
$ - U.S. Dollar
Measurement System:
Imperial
Head Measurement:
Feet
Flow Rate:
Gallons / Minute


100% Customer Satisfaction is our's company's first priority
Return Within 10 days after recieving your order if unsatisfied.
Get Free Delivery for every order on more than price
Pay Online for multiple payment options(card-payment/net-banking)
Privacy Policy
Terms Of Use
Return Policy
Discount Coupons
About Us
Contact Us
Career
Affiliate
FaceBook
Instagram
LinkedIn
Twitter
Made with By Anirban


2000 - Ebola haemorrhagic fever in Uganda - Update 10
26 October 2000
Disease Outbreak Reported
As of 26 October, the Ugandan Ministry of Health has
reported 182 cases including 64 deaths. No new deaths have been reported in the last
twenty-four hours.


Features, Content and Applications
- SignSmart member account
- Access to Level one content and Applications
"
- One standard online digital sign designer with up to 24 links
- {{free.storage}}GB storage
- All features of {{level.msGvs[0].name}} account
- Access to multi-user accounts
- Unlimited Links on Designs
- Custom Digital Sign Designer Layouts
- Access to Level 1 and 2 content and applications
- Storage: {{level.storage_unit_price}}/GB/Mo
- Additional Accounts: {{level.desktops_unit_price}}/Account/Mo


Local Network Media
Content
1 X
prefetch
Mute
Local rendering
on server
in folder
to server
to folder
Sort by:
Title
Date
Size
Duration
Album
Artist
Genre
ascending
descending


{% extends 'layouts/index.html' %} {% set active_page = "baseapp.gifts" %} {% block pagecontent %}
We request the only presents be your presence. Coming to a wedding can be a costly endeavour, both in time and money, and we don't want to compound that with gifts on top of all the rest.
However, if you feel compelled to, we have a registry here.
The registry is through Zola. We have registered for group gifts because we mostly added big ticket items like airplane tickets for the honeymoon. Also as a note, when you contribute to a group gift, we (Lacey and Mac) see it, but your personal information is hidden from the public. So don't worry, your gifts are being received and loved.


VSL // Music With Global Roots
* Haitian singer/guitarist BélO
today’s Very Short List:
culture 18 Dec 2013
Traveler writer John Oseid has a passion for discovering—and sharing—great music wherever he goes around the planet. Facebook
Subscribe
* From the musical hotbed Mali, multilingual singer/songerwriter and wicked guitarist Rokia Traoré
* A protegée of the late, great international star Cesaria Evora, Brooklyn-based Fantcha
very short list is a
delightful e-mail that shares
cultural gems from a
different curator every day.
If you have any problems reading this e-mail, click here
http://link.nyobserver.com/516ca68465217dc6e1b9a3a61976s.c3e/Up6kR-YQYCWPEIIkC685e
Subscribe
Forward
My Account
Unsubscribe
tech 16 Dec 2013
Zach Sims on learning to code.
food 13 Dec 2013
Sarah Maiellano looks at the trends in imbibing this holiday season.
culture 11 Dec 2013
Gods Robots on electronic music without borders.
Editorial Policy
Privacy Policy
Contact Us
Press
Terms + Conditions
very fine print: ©2013
Observer VSL LLC.
321 West 44th Street, 6th Floor
New York, NY 10036 USA
All rights reserved.
Questions?<PHONE_NUMBER>.
This message was intended for<EMAIL_ADDRESS>If you believe this has been sent to you in error, please safely unsubscribe


Toggle fullscreen mode
Toggle VR mode
Your device does not support WebVR. See
webvr.info
for assistance.


Group of Checkboxes with optional image in the front
Link to blog: Design Studio SDK: CheckBox Group (with Image) Component


# -*- coding: utf-8 -*-
# This code is part of Qiskit.
#
# (C) Copyright IBM 2017, 2018.
#
# This code is licensed under the Apache License, Version 2.0. You may
# obtain a copy of this license in the LICENSE.txt file in the root directory
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
#
# Any modifications or derivative works of this code must retain this
# copyright notice, and modified files need to carry a notice indicating
# that they have been altered from the originals.
"""IBMQJob module
This module is used for creating asynchronous job objects for the
IBM Q Experience.
"""
import asyncio
import datetime
import logging
import pprint
import time
from concurrent import futures
from qiskit.providers import BaseJob, JobError, JobTimeoutError
from qiskit.providers.jobstatus import JOB_FINAL_STATES, JobStatus
from qiskit.providers.models import BackendProperties
from qiskit.qobj import Qobj, validate_qobj_against_schema
from qiskit.result import Result
from .api import ApiError
from .api.apijobstatus import ApiJobStatus
from .api.exceptions import WebsocketTimeoutError
logger = logging.getLogger(__name__)
[docs]class IBMQJob(BaseJob):
"""Representation of a job that will be execute on a IBMQ backend.
Represent the jobs that will be executed on IBM-Q simulators and real
devices. Jobs are intended to be created calling ``run()`` on a particular
backend.
Creating a ``Job`` instance does not imply running it. You need to do it in
separate steps::
job = IBMQJob(...)
job.submit() # It won't block.
An error while submitting a job will cause the next call to ``status()`` to
raise. If submitting the job successes, you can inspect the job's status by
using ``status()``. Status can be one of ``JobStatus`` members::
from qiskit.backends.jobstatus import JobStatus
job = IBMQJob(...)
job.submit()
try:
job_status = job.status() # It won't block. It will query the backend API.
if job_status is JobStatus.RUNNING:
print('The job is still running')
except JobError as ex:
print("Something wrong happened!: {}".format(ex))
A call to ``status()`` can raise if something happens at the API level that
prevents Qiskit from determining the status of the job. An example of this
is a temporary connection lose or a network failure.
The ``submit()`` and ``status()`` methods are examples of non-blocking API.
``Job`` instances also have `id()` and ``result()`` methods which will
block::
job = IBMQJob(...)
job.submit()
try:
job_id = job.id() # It will block until completing submission.
print('The job {} was successfully submitted'.format(job_id))
job_result = job.result() # It will block until finishing.
print('The job finished with result {}'.format(job_result))
except JobError as ex:
print("Something wrong happened!: {}".format(ex))
Both methods can raise if something ath the API level happens that prevent
Qiskit from determining the status of the job.
Note:
When querying the API for getting the status, two kinds of errors are
possible. The most severe is the one preventing Qiskit from getting a
response from the backend. This can be caused by a network failure or a
temporary system break. In these cases, calling ``status()`` will raise.
If Qiskit successfully retrieves the status of a job, it could be it
finished with errors. In that case, ``status()`` will simply return
``JobStatus.ERROR`` and you can call ``error_message()`` to get more
info.
Attributes:
_executor (futures.Executor): executor to handle asynchronous jobs
"""
_executor = futures.ThreadPoolExecutor()
def __init__(self, backend, job_id, api, qobj=None,
creation_date=None, api_status=None):
"""IBMQJob init function.
We can instantiate jobs from two sources: A QObj, and an already submitted job returned by
the API servers.
Args:
backend (BaseBackend): The backend instance used to run this job.
job_id (str or None): The job ID of an already submitted job.
Pass `None` if you are creating a new job.
api (IBMQConnector): IBMQ connector.
qobj (Qobj): The Quantum Object. See notes below
creation_date (str): When the job was run.
api_status (str): `status` field directly from the API response.
Notes:
It is mandatory to pass either ``qobj`` or ``job_id``. Passing a ``qobj``
will ignore ``job_id`` and will create an instance to be submitted to the
API server for job creation. Passing only a `job_id` will create an instance
representing an already-created job retrieved from the API server.
"""
# pylint: disable=unused-argument
super().__init__(backend, job_id)
if qobj:
validate_qobj_against_schema(qobj)
self._qobj_payload = qobj.as_dict()
else:
self._qobj_payload = {}
self._future_captured_exception = None
self._api = api
self._backend = backend
self._cancelled = False
self._status = JobStatus.INITIALIZING
# In case of not providing a `qobj`, it is assumed the job already
# exists in the API (with `job_id`).
if qobj is None:
# Some API calls (`get_status_jobs`, `get_status_job`) provide
# enough information to recreate the `Job`. If that is the case, try
# to make use of that information during instantiation, as
# `self.status()` involves an extra call to the API.
if api_status == ApiJobStatus.VALIDATING.value:
self._status = JobStatus.VALIDATING
elif api_status == ApiJobStatus.COMPLETED.value:
self._status = JobStatus.DONE
elif api_status == ApiJobStatus.CANCELLED.value:
self._status = JobStatus.CANCELLED
self._cancelled = True
else:
self.status()
self._queue_position = None
def current_utc_time():
"""Gets the current time in UTC format"""
datetime.datetime.utcnow().replace(tzinfo=datetime.timezone.utc).isoformat()
self._creation_date = creation_date or current_utc_time()
self._future = None
self._api_error_msg = None
self._result = None
[docs] def qobj(self):
"""Return the Qobj submitted for this job.
Note that this method might involve querying the API for results if the
Job has been created in a previous Qiskit session.
Returns:
Qobj: the Qobj submitted for this job.
"""
if not self._qobj_payload:
# Populate self._qobj_payload by retrieving the results.
self._wait_for_job()
return Qobj.from_dict(self._qobj_payload)
[docs] def properties(self):
"""Return the backend properties for this job.
Returns:
BackendProperties: the backend properties used for this job.
"""
self._wait_for_submission()
properties = self._api.job_properties(job_id=self.job_id())
return BackendProperties.from_dict(properties)
# pylint: disable=arguments-differ
[docs] def result(self, timeout=None, wait=5):
"""Return the result of the job.
Note:
Some IBMQ job results can be read only once. A second attempt to
query the API for the job will fail, as the job is "consumed".
The first call to this method in an ``IBMQJob`` instance will query
the API and consume the job if it finished successfully (otherwise
it will raise a ``JobError`` exception without consumming the job).
Subsequent calls to that instance's method will also return the
results, since they are cached. However, attempting to retrieve the
results again in another instance or session might fail due to the
job having been consumed.
Args:
timeout (float): number of seconds to wait for job
wait (int): time between queries to IBM Q server
Returns:
qiskit.Result: Result object
Raises:
JobError: if attempted to recover a result on a failed job.
"""
self._wait_for_completion(timeout=timeout, wait=wait)
status = self.status()
if status is not JobStatus.DONE:
raise JobError('Invalid job state. The job should be DONE but '
'it is {}'.format(str(status)))
if not self._result:
job_response = self._get_job()
self._result = Result.from_dict(job_response['qObjectResult'])
return self._result
[docs] def cancel(self):
"""Attempt to cancel a job.
Returns:
bool: True if job can be cancelled, else False. Note this operation
might not be possible depending on the environment.
Raises:
JobError: if there was some unexpected failure in the server.
"""
try:
response = self._api.cancel_job(self._job_id)
self._cancelled = 'error' not in response
return self._cancelled
except ApiError as error:
self._cancelled = False
raise JobError('Error cancelling job: %s' % error.usr_msg)
[docs] def status(self):
"""Query the API to update the status.
Returns:
qiskit.providers.JobStatus: The status of the job, once updated.
Raises:
JobError: if there was an exception in the future being executed
or the server sent an unknown answer.
"""
# Implies self._job_id is None
if self._future_captured_exception is not None:
raise JobError(str(self._future_captured_exception))
if self._job_id is None or self._status in JOB_FINAL_STATES:
return self._status
try:
# TODO: See result values
api_response = self._api.get_status_job(self._job_id)
self._update_status(api_response)
# pylint: disable=broad-except
except Exception as err:
raise JobError(str(err))
return self._status
def _update_status(self, api_response):
"""Update the job status from an API status.
Args:
api_response (dict): API response for a status query.
Raises:
JobError: if the API response could not be parsed.
"""
if 'status' not in api_response:
raise JobError('Unrecognized answer from server: \n{}'.format(
pprint.pformat(api_response)))
try:
api_status = ApiJobStatus(api_response['status'])
except ValueError:
raise JobError('Unrecognized status from server: {}'.format(
api_response['status']))
if api_status is ApiJobStatus.VALIDATING:
self._status = JobStatus.VALIDATING
elif api_status is ApiJobStatus.RUNNING:
self._status = JobStatus.RUNNING
queued, self._queue_position = _is_job_queued(api_response)
if queued:
self._status = JobStatus.QUEUED
elif api_status is ApiJobStatus.COMPLETED:
self._status = JobStatus.DONE
elif api_status is ApiJobStatus.CANCELLED:
self._status = JobStatus.CANCELLED
self._cancelled = True
elif api_status in (ApiJobStatus.ERROR_CREATING_JOB,
ApiJobStatus.ERROR_VALIDATING_JOB,
ApiJobStatus.ERROR_RUNNING_JOB):
self._status = JobStatus.ERROR
[docs] def error_message(self):
"""Provide details about the reason of failure.
Note:
Some IBMQ job results can be read only once. A second attempt to
query the API for the job will fail, as the job is "consumed".
The first call to this method in an ``IBMQJob`` instance will query
the API and consume the job if it errored at some point (otherwise
it will return ``None``). Subsequent calls to that instance's method
will also return the failure details, since they are cached.
However, attempting to retrieve the error details again in another
instance or session might fail due to the job having been consumed.
Returns:
str: An error report if the job errored or ``None`` otherwise.
"""
self._wait_for_completion()
if self.status() is not JobStatus.ERROR:
return None
if not self._api_error_msg:
job_response = self._get_job()
results = job_response['qObjectResult']['results']
self._api_error_msg = _build_error_report(results)
return self._api_error_msg
[docs] def queue_position(self):
"""Return the position in the server queue.
Returns:
Number: Position in the queue.
"""
return self._queue_position
[docs] def creation_date(self):
"""Return creation date."""
return self._creation_date
[docs] def job_id(self):
"""Return backend determined id.
If the Id is not set because the job is already initializing, this call
will block until we have an Id.
"""
self._wait_for_submission()
return self._job_id
[docs] def submit(self):
"""Submit job to IBM-Q.
Raises:
JobError: If we have already submitted the job.
"""
# TODO: Validation against the schema should be done here and not
# during initialization. Once done, we should document that the method
# can raise QobjValidationError.
if self._future is not None or self._job_id is not None:
raise JobError("We have already submitted the job!")
self._future = self._executor.submit(self._submit_callback)
def _submit_callback(self):
"""Submit qobj job to IBM-Q.
Returns:
dict: A dictionary with the response of the submitted job
"""
backend_name = self.backend().name()
try:
submit_info = self._api.run_job(self._qobj_payload, backend_name=backend_name)
# pylint: disable=broad-except
except Exception as err:
# Undefined error during submission:
# Capture and keep it for raising it when calling status().
self._future_captured_exception = err
return None
# Error in the job after submission:
# Transition to the `ERROR` final state.
if 'error' in submit_info:
self._status = JobStatus.ERROR
self._api_error_msg = str(submit_info['error'])
return submit_info
# Submission success.
self._creation_date = submit_info.get('creationDate')
self._status = JobStatus.QUEUED
self._job_id = submit_info.get('id')
return submit_info
def _wait_for_job(self, timeout=None, wait=5):
"""Blocks until the job is complete and returns the job content from the
API, consuming it.
Args:
timeout (float): number of seconds to wait for job.
wait (int): time between queries to IBM Q server.
Return:
dict: a dictionary with the contents of the job.
Raises:
JobError: if there is an error while requesting the results.
"""
self._wait_for_completion(timeout, wait)
try:
job_response = self._get_job()
if not self._qobj_payload:
self._qobj_payload = job_response.get('qObject', {})
except ApiError as api_err:
raise JobError(str(api_err))
return job_response
def _get_job(self):
"""Query the API for retrieving the job complete state, consuming it.
Returns:
dict: a dictionary with the contents of the result.
Raises:
JobTimeoutError: if the job does not return results before a
specified timeout.
JobError: if something wrong happened in some of the server API
calls.
"""
if self._cancelled:
raise JobError(
'Job result impossible to retrieve. The job was cancelled.')
return self._api.get_job(self._job_id)
def _wait_for_completion(self, timeout=None, wait=5):
"""Wait until the job progress to a final state such as DONE or ERROR.
Args:
timeout (float or None): seconds to wait for job. If None, wait
indefinitely.
wait (float): seconds between queries.
Raises:
JobTimeoutError: if the job does not return results before a
specified timeout.
"""
self._wait_for_submission(timeout)
# TODO: reenable during #61.
# if 'websocket_url' in self._api.config:
# self._wait_for_final_status_websocket(timeout)
# else:
# self._wait_for_final_status(timeout, wait)
self._wait_for_final_status(timeout, wait)
def _wait_for_submission(self, timeout=60):
"""Waits for the request to return a job ID"""
if self._job_id is None:
if self._future is None:
raise JobError("You have to submit before asking for status or results!")
try:
submit_info = self._future.result(timeout=timeout)
if self._future_captured_exception is not None:
raise self._future_captured_exception
except TimeoutError as ex:
raise JobTimeoutError(
"Timeout waiting for the job being submitted: {}".format(ex)
)
if 'error' in submit_info:
self._status = JobStatus.ERROR
self._api_error_msg = str(submit_info['error'])
raise JobError(str(submit_info['error']))
def _wait_for_final_status(self, timeout=None, wait=5):
"""Wait until the job progress to a final state.
Args:
timeout (float or None): seconds to wait for job. If None, wait
indefinitely.
wait (float): seconds between queries.
Raises:
JobTimeoutError: if the job does not return results before a
specified timeout.
"""
start_time = time.time()
while self.status() not in JOB_FINAL_STATES:
elapsed_time = time.time() - start_time
if timeout is not None and elapsed_time >= timeout:
raise JobTimeoutError(
'Timeout while waiting for job {}'.format(self._job_id))
logger.info('status = %s (%d seconds)', self._status, elapsed_time)
time.sleep(wait)
def _wait_for_final_status_websocket(self, timeout=None):
"""Wait until the job progress to a final state using websockets.
Args:
timeout (float or None): seconds to wait for job. If None, wait
indefinitely.
Raises:
JobTimeoutError: if the job does not return results before a
specified timeout.
"""
websocket_client = self._api.websocket_client()
try:
status_response = asyncio.get_event_loop().run_until_complete(
websocket_client.get_job_status(self._job_id,
timeout=timeout))
self._update_status(status_response)
except WebsocketTimeoutError:
raise JobTimeoutError(
'Timeout while waiting for job {}'.format(self._job_id))
def _is_job_queued(api_job_status_response):
"""Checks whether a job has been queued or not.
Args:
api_job_status_response (dict): status response of the job.
Returns:
Pair[boolean, int]: a pair indicating if the job is queued and in which
position.
"""
is_queued, position = False, 0
if 'infoQueue' in api_job_status_response:
if 'status' in api_job_status_response['infoQueue']:
queue_status = api_job_status_response['infoQueue']['status']
is_queued = queue_status == 'PENDING_IN_QUEUE'
if 'position' in api_job_status_response['infoQueue']:
position = api_job_status_response['infoQueue']['position']
return is_queued, position
def _build_error_report(results):
"""Build an user-friendly error report for a failed job.
Args:
results (dict): result section of the job response.
Returns:
str: the error report.
"""
error_list = []
for index, result in enumerate(results):
if not result['success']:
error_list.append('Experiment {}: {}'.format(index, result['status']))
error_report = 'The following experiments failed:\n{}'.format('\n'.join(error_list))
return error_report


Health officials issue alert after ShopRite worker in New Jersey contracts Hepatitis A
by Eyewitness NewsSOMERVILLE, New Jersey (WABC) -- The New Jersey Health Department issued an alert after a case of Hepatitis A was confirmed in a supermarket worker in Somerset County.
The worker is a food handler at a ShopRite on Davenport Street in Somerville.
Health officials are working to notify people who shop at the store. The person worked during the time when they were able to spread the virus to others, also known as the infectious period, from Oct.13 to 30, 2019.
The health department recommends that anyone who thinks they may have been exposed should contact a health care professional immediately, and any items purchased from the in-store deli during that time should be thrown away.
Anyone who ate items purchased there during that time and who was not previously vaccinated against Hepatitis A was advised to get the Hepatitis A vaccine.
Hepatitis A is usually transmitted person-to-person through the fecal-oral route or consumption of contaminated food or water. Most adults with hepatitis A have symptoms, including fatigue, low appetite, stomach pain, nausea, and jaundice, which usually resolve within two months of infection; most children less than 6 years of age do not have symptoms or have an unrecognized infection.


Enter the Metaverse - cyberspace home to avatars and software daemons, where anything and just about everything goes. Newly available on the Street - the Metaverse's main drag - is Snow Crash, a cyberdrug. Trouble is Snow Crash is also a computer virus - and something more. Because once taken it infects the person behind the avatar. Snow Crash bleeds into reality.
Which is really bad news for Hiro - freelance hacker and the Metaverse's best swordfighter (he wrote the code) - and Y. T. - skateboard kourier, street imp and mouthy teenage girl - because reality was shitty enough before someone started messing with it...
The Delivertaor belongs to an elite order, a hallowed subcategory. He's got espirit up to here. Right now, he's is preparing to carry out his third mission of the night. His uniform is black as activated charcoal, filtering the very light out of the air.  Where his body has bony extremities, the suit has sintered armorgel: feels like gritty jello, protects like a stack of telephone books.


PLANET SICK-BOY: http://www.sick-boy.com "We Put the SIN in Cinema"
The 2000 summer movie season is just about half over and, so far, the big action blockbusters that seemed the most promising when we were all still wearing hats and mittens have really let us down. M:I-2? Forget about it. Gone in 60 Seconds? Plot holes bigger than the Grand Canyon. And you can chalk this one right up there with the others. The Perfect Storm is the perfect bore and, although it's only a two-hour film, it seems like a three-hour tour. A three-hour tour.
That's not to say that the film adaptation of Sebastian Junger's best-seller about the fate of the Andrea Gail isn't without merit. The effects are, at times, pretty good, and the acting is, for the most part, solid and well-cast. But I had problems with Storm right from the opening credits, which are displayed over a monument to those that have died at sea in and around Gloucester, Massachusetts, where the film takes place. If you didn't know the ending before you walked into the theatre, the whole thing is ruined for you two minutes into the film.
Storm re-teams Three Kings co-stars George Clooney and Mark Wahlberg - the former playing sword-boat skipper Billy Tyne to the latter's little buddy named Bobby Shatford (Clooney and Wahlberg are trying to be the Hepburn and Tracy of the new millennium). The film opens in the fall of 1991, where Tyne and his crew have just returned from the latest in what we learn is a long string of unsuccessful fishing expeditions. Because of their light load, each earns a lot less money than they had expected. The cash is doled out by Andrea Gail owner Bobby Brown (Michael Ironside, The Omega Code), who is so unlikeable that they might as well have given him an eye-patch and a peg-leg.
Believing that there's a lot of fish out there somewhere, Tyne reassembles his reluctant crew for one last run. Tyne guarantees them a huge haul and tons of money, both of which he plans on accomplishing by venturing further into the ocean than these fishermen usually go.
What they encounter, of course, is the storm of the century, as Category 5 Hurricane Grace meets up with a bunch of Canadian cold fronts right on top of the Andrea Gail. There are two-hundred-mile-an-hour winds and hundred-foot waves. But if you're thinking that the film is going to be an edge-of-your-seat adventure, you might want to show up late because it takes well over an hour before the water even starts to get a little bit choppy.
In addition to the monotonous waves that grow more and more tiresome, Storm's shots are so tight on the action and so logged with water spray that you can barely tell up from down. Director Wolfgang Petersen (Air Force One) and Oscar-winning cinematographer John Seale (The Talented Mr. Ripley) don't offer much more than dark and wet. Yes, I understand that the real Andrea Gail was probably very dark and very wet, but that doesn't mean that the film had to recreate the look and feel to the point that it is here. You might as well watch wearing a blindfold.
Although based on real people, I found the supporting roles to be little more than typical stock characters. There's the jaded and grizzled captain (Clooney), the eager young kid with an attractive girlfriend (Wahlberg), the bitter divorced guy (John C. Reilly, Magnolia), the rat-faced loser (John Hawkes, Blue Streak), the down-and-out unemployed guy (William Fichtner, Drowning Mona) and the black guy that hardly has any screen time (Allen Payne, A Price Above Rubies). For a while, I was sure he'd be the first one bumped off, but the `Brother Rule' doesn't apply to Storm. It's also funny to think about the years and years that Wahlberg has probably spent with a dialect coach in an attempt to cover up his natural South Boston accent, only to drag it out of the closet here.
Also annoying is the performance of the usually dependable Diane Lane (My Dog Skip), who plays Shatford's girlfriend. She probably has underwear older than Walhberg, and she gets to toss in the time-honored `I have a bad feeling about this trip' line before the ship sets sail. Yeah, and you see dead people, too. Storm also wastes a ton of time on the fate of three other people trapped in the storm on a separate, smaller craft and their attempted rescue by a Coast Guard helicopter. The tug-at-your-heart score comes compliments of James Horner (Titanic), who they must trot out for every water-themed action/drama film.
2:00 - PG-13 for language and scenes of peril
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


First off, a little about myself. I am moderately to highly experienced with phenethylamines and tryptamines (MDMA, MDA, MDE, Mescaline, DMT, Psilocin, LSD, LSA, 5-MeO-DMT, etc...) Amongst other psychopharmaceuticals/psychoactives, but this is besides the point...
For the past two months my primary focus has been with Syrian Rue. My first experience being pretty bum because of the fact I was working with ground seeds and the taste was absolutely unbearable to deal with.  I did this by mixing two cups water in a pyrex bowl with the ground seeds, adding 1/4 cup of lemon juice. I boiled this for about 10 minutes, filtered the seed matter, and repeated this process again using the same ingredients but with the leftover/'used' seed much. I let this boil for about 10 minutes, while stirring. I then filtered out the mush and threw it away. I added the two end products to one big pyrex pot and cooked it down to a brownish red resin, periodically checking my extraction using a blacklight to indicate the presence of 'the good shit'.
After this was cooked down, I put it in the freezer for about 10-15 minutes, and cut it into chunks that could be easily dropped to the BACK part of my toungue (if any of this goop gets on my lips or tip of my toungue, it makes me gag)
To begin with, I ate about 3/4 of the goop, Note: After already injesting about a shotglass full of unground seeds several hours earlier (nasty!)
T+15 minutes: After eating the first 1/4 of the goop, I felt some slight effects, mostly mild tracers. Nothing special.
I then thought to myself, 'How bad do I wanna trip?'
I got out the bottle of pop, and started dropping those little balls/chunks down my throat, chasing it down with pop. I got to where I could drop them down without tasting them, and if I did get the taste, I took a *small* bite of some chocolate I had out, which was a great remedy for that situation.
T+30 minutes: After giving up on eating it all, (which is a good thing I did only eat about 3/4 of the shit), I noticed the sliding tracers when I moved my head, or when I looked at the computer screen and looked back down, the whole screen would follow my visual field. This was only the beginning.
T+50 minutes: In my room, I felt the urge to lie down, feeling somewhat sedated but not so much that I couldn't stay awake. Every time I moved my head, EVERYTHING, especially the television, and miscellaneous lights in my room would follow, but they didnt just follow my visual field, they went back to where they came from.  After about an hour of lying down hiding from the bright colors and tracers, I got up to go to the other room. Oh god was that crazy. I wasnt completely staggering around, but had to be careful when I walked. I opened the door, and the whole door made a tracer, and then the tracer 'sprung back' from the door panel where it came from.
T+70 minutes: This, I thought, was gonna be it, pretty interesting, but not that great. Boy was I wrong. I went to the other room for about 30 minutes and layed down in the dark. I felt like I was gonna puke and got up to go to the other room, when I was greeting with THE MOST INTENSE tracers, and visual field 'sliding' and 'gliding' that I've EVER experienced. I could barely make out what was on the television, for there were about 5 images of what was on the screen floating around the television. Not to mention the light on my ceiling fan that was duplicated by about six tracers and rotated around it. Not only this, but every time I moved my focus, the WHOLE ROOM with all of it's almost sickeningly bright tracers of color followed and slid back and forth.
About 10 minutes later, I ended up puking, and felt better. All in all, I threw up three times that night, and before I retired to the 'dark room' to escape from the tracers, both from the bright objects in my room and my visual field tracers, the above description multiplied by about 2x. Nothing but colors so bright I just had to close my eyes and escape.
I had few dreams THAT night, but all in all, the mental aspect of the trip, wasn't profound at all. I did not feel social, I just wanted to either walk around, ride in a car, or lay there. I was not all giddy like with most tryptamines or phenethylamine-type 'psychedelics', as in, I didn't have a cheesed-out, uncontrollable grin with the wide-eyed stare accompanied by pupilary dilation. Just a HUGE AMOUNT of visual disturbances, pleasurable but almost annoying when indulged in for too long.
I do not plan on experimenting with this any further as I got the peak effects. I do plan on using it in a smaller dosage with maybe some LSA, or some kind of tryptamine (maybe DMT), that does not produce nausea (nausea in me anyways, as LSA does cause many to puke). I feel that the mental experience of the other tryptamines combined with the visual aspect of the harmala extract could prove quite interesting and insightful, as well as more pleasurably visual for that matter.
Note: The vomiting may have been the prime result of ignoring the MAOI (monoamine-oxidase inhibition) factor of the harmaline and eating 5 eggs with cheese and 'Lou1siana hot sauce' doused on top, heheh.
The whole experience peaked/hit in about 2 hours, lasted about 5-6 hours. All in all, highly interesting, HIGHLY visual but limited to intense tracers and visual field 'gliding' when I moved my head around (the TV would actually follow along with my visual field after turning away from it. No profound mental insights, only weird daydreams that lead to nothing and made no sense, just entertaining. I still feel mental clouding as this experience was of last night).
Follow-up: For several days I have had very unusual dreams, to the point that I can remember them quite distinctly. My REM-stage of sleep has been totally overloaded with crazy, out of this world dreams (more so then usual anyways), some pleasurable, and almost mood-lifting upon waking. Not the type of 'cool' dream that you wake up disappointed because it was only a dream. Mainly dreams of past memories, but distorted at the same time, and fun dreams, like floating and flying, etc. You get the point. Still very cool though, but anyways, stay safe - stay aware!
Peace
-Eniac
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


Our Products
-
Meet Joseph! Joseph is a 2 month old Marmoset Monkey looking for a home! He is very mischivious but overall a really adorable pet to have.
Joseph the Marmoset! Price $5,000 Diet Fruits, seeds, or small insects Hobbies Eating, playing, and getting attention -
Meet Maggie the goat! Maggie is a sweet little 6 week old goat who is loving and adorable. She is really chill and loves to eat grass.
Maggie the Goat! Price $1,000 Diet Pretty much anything Hobbies Eating grass, and being pet! -
Meet Bill! He is a 2 year old mini-turtle. He loves strawberries and swimming!
Bill the Turtle! Price $800 Diet Fruits, worms, or small insects Hobbies Eating strawberries, playing, and swimming! -
Meet Joey! He is a 2 month old teacup pig. He loves cuddling, running around, and playing mini-guitars!
Joey the Teacup Pig! Price $2,000 Diet Leftovers! Hobbies Eating, running around, and playing mini-guitars! -
Meet Jessie! She is a 6 month old puppy. She loves playing fetch, going to the park and dressing up in fancy clothes!
Jessie the Puppy! Price $3,000 Diet Dog food Hobbies Running around, and dressing up!


krisis on the morning
Your browser does not support the video tag.
Your browser does not support the audio element.


Ecosystem Service Web Service¶
Ecosystem Service Web Service (ESWS) is a method for creating interoperable analysis workflows with the Open Geospatial Consortium (OGC) Web Services (OWS) standards , especially the Table Join Service (TJS), Web Coverage Service (WCS), Web Feature Service (WFS), and Web Processing Service (WPS).
ESWS workflows are:
modular
redistributable
open
Resources:¶
Contents:¶
- Installation
- Running
- Configuration & Maintenance
- Tabular Data
- Raster Data
- Vector Data
- Processes
- Third-Party Extensions
- Tutorials
- InVEST Water Yield Data
- 1.1 Getting Data for Assessing Ecosystem Services
- 1.1.1 Install InVEST and choose your model
- 1.1.2 Identify the geospatial data inputs
- 1.1.3 Area of Interest
- 1.1.4 Precipitation
- 1.1.5 Average Annual Reference Evapotranspiration
- 1.1.6 Plant Available Water Content and Root Restricting Layer Depth
- 1.1.7 Land Use Land Cover
- 1.1.8 Watersheds
- 1.1.9 Biophysical Table
- 1.1.10 Z Parameter
- 1.2 Preprocessing in QGIS
- 1.2.1 Install QGIS
- 1.2.2 Change QGIS Language (optional)
- 1.2.3 Area of Interest
- 1.2.4 Precipitation
- 1.2.5 Average Annual Reference Evapotranspiration
- 1.2.6 Plant Available Water Content and Root Restricting Layer Depth
- 1.2.7 Land Use Land Cover
- 1.2.8 Watersheds
- 1.2.9 Biophysical Table
- 1.2.10 Z parameter
- 1.2.11 Reclass Rules for Rasters
- 1.2.12 Adding Fields to a Shapefile
- 1.2.13 Projections
- 1.3 Running InVEST
- 1.4 Visualizing Results in QGIS


{% load i18n %}
{% trans "Many features cannot be accessed at this outdated address." %} {% trans "Please click here to synchronize your forms." %}
{% else %}{% trans "Many features cannot be accessed at this outdated address." %} {% trans "Please ask the owner to log into their account and synchronize their forms." %}
{% endif %} {% else %}{% trans "Many features cannot be accessed at this outdated address." %} {% trans "Please use the following instead:" %}
{% endif %}


{% extends "base.html" %} {% load staticfiles %} {% block body_attr %} class="dark-blue-bg"{% endblock %} {% block 'nav-1' %}
We can't find the page you're looking for. Before your bandmates cut sick, here's some help to keep the gig kicking on:


4.6.2. Managing Local/Service Users¶
Though the SIMP team highly recommends using LDAP to centrally manage your users, you may occasionally need to set up a service account or specific local users on your systems.
This section walks you through doing this in a way that is compatible with SIMP.
The following examples assume that you are using the site
module to manage
site-specific puppet manifests. The examples may easily be extrapolated into
defined types if you wish but are presented as classes for simplicity.
If you are not familiar with setting up SSH keys, you may want to follow the relevant GitHub documentation.
<IP_ADDRESS>. Local User Account¶
class site::local_account {
include '::ssh'
$_local_account_user = 'localuser'
$_local_account_group = 'localgroup'
$_local_account_id = '1778'
# You'll probably want this in /home unless you're using NFS
$_local_account_homedir = "/home/${_local_account_user}"
# You'll need to get this from the user as it is their public key.
$_local_account_ssh_public_key = 'AAA...=='
group { $_local_account_group:
gid => $_local_account_id,
allowdupe => false,
}
user { $_local_account_user:
uid => $_local_account_id,
allowdupe => false,
gid => $_local_account_group,
home => $_local_account_homedir,
managehome => true,
shell => '/bin/bash'
}
# If you want your local user to have a password (no key),
# omit this block and manually assign a password to the user
# after creation (passwd <user>)
file { "/etc/ssh/local_keys/${_local_account_user}":
owner => 'root',
group => $_local_account_group,
mode => '0644',
content => $_local_account_ssh_public_key
}
sudo::user_specification { $_local_account_user:
user_list => [$_local_account_user],
host_list => [$::fqdn],
runas => 'root',
cmnd => ['/bin/cat /var/log/app.log'],
passwd => false
}
# Allow this account from everywhere
pam::access::rule { "Allow ${_local_account_user}":
users => [$_local_account_user],
origins => ['ALL']
}
}
<IP_ADDRESS>. Service Account¶
class site::service_account {
include '::ssh'
$_svc_account_user = 'svcuser'
$_svc_account_group = 'svcgroup'
$_svc_account_id = '1779'
$_svc_account_homedir = "/var/local/${_svc_account_user}"
# Since this is a service account, automatically generate an SSH key for
# the user and store it on the Puppet master for distribution.
$_svc_account_ssh_private_key = ssh_autokey($_svc_account_user, '2048', true)
$_svc_account_ssh_public_key = ssh_autokey($_svc_account_user, '2048')
group { $_svc_account_group:
gid => $_svc_account_id,
allowdupe => false,
}
user { $_svc_account_user:
uid => $_svc_account_id,
allowdupe => false,
gid => $_svc_account_group,
home => $_svc_account_homedir,
managehome => true,
shell => '/bin/bash'
}
file { "${_svc_account_homedir}/.ssh":
ensure => directory,
owner => $_svc_account_user,
group => $_svc_account_group,
mode => '0600'
}
file { "${_svc_account_homedir}/.ssh/id_rsa":
mode => '0600',
owner => $_svc_account_user,
group => $_svc_account_group,
content => $_svc_account_ssh_private_key
}
# In SIMP sshd is configured to use authorized_keys files in /etc/ssh/local_keys
file { "/etc/ssh/local_keys/${_svc_account_user}":
owner => 'root',
group => $_svc_account_group,
mode => '0644',
content => "ssh-rsa ${_svc_account_ssh_public_key}"
}
sudo::user_specification { $_svc_account_user:
user_list => [$_svc_account_user],
host_list => [$facts['fqdn']],
runas => 'root',
cmnd => ['/bin/cat /var/log/app.log'],
passwd => false
}
# Allow this service account from everywhere
pam::access::rule { "Allow ${_svc_account_user}":
users => [$_svc_account_user],
origins => ['ALL']
}
}
<IP_ADDRESS>. Testing¶
The table below lists the steps to test that the configuration was applied correctly.
- Log on to a server that has the template code configuration applied.
- Type
su - <USERNAME>
- Type
exec /usr/bin/ssh-agent /bin/bash
to ensure that ssh-agent has a shell running. - Type
/usr/bin/ssh-add
to attach the user’s certificates. - Optional: Type
/usr/bin/ssh-add -l
to double check that the user’s certificates were added successfully. - Type
ssh <HOST>
to SSH to a target machine that has the template code configuration applied.
If successful, the user should be authenticated and gain access to the target machine without entering a password.
If the user is prompted for a password, check to see if the permissions are set
up properly and that the certificate keys are in the correct locations. In
addition, check the /etc/security/access.conf
file to ensure that it
contains the user or user’s group in an allow statement. See access.conf(5)
for details.


As of 3.0.0, the ReleaseNotes.md file has been deprecated. Please refer to the release notes available on Github. Or the release notes on the chaijs.com website.
Added ownPropertyDescriptor
assertion:
expect('test').to.have.ownPropertyDescriptor('length');
expect('test').to.have.ownPropertyDescriptor('length', { enumerable: false, configurable: false, writable: false, value: 4 });
expect('test').not.to.have.ownPropertyDescriptor('length', { enumerable: false, configurable: false, writable: false, value: 3 });
expect('test').ownPropertyDescriptor('length').to.have.property('enumerable', false);
expect('test').ownPropertyDescriptor('length').to.have.keys('value');
ownPropertyDescriptor
assertion. By [@ljharb](https://github.com/ljharb)Deep property strings can now be escaped using \\
- for example:
var deepCss = { '.link': { '[target]': 42 }};
expect(deepCss).to.have.deep.property('\\.link.\\[target\\]', 42)
A minor bug fix. No new features.
Two minor bugfixes. No new features.
deep.property
would not work with single key names. By [@eldritch-fossicker](https://github.com/eldritch-fossicker)Small release; fixes an issue where the Chai lib was incorrectly reporting the version number.
Adds new should.fail()
and expect.fail()
methods, which are convinience methods to throw Assertion Errors.
Unfortunately with 1.10.0 - compatibility broke with older versions because of the addChainableNoop
. This change has been reverted.
Any plugins using addChainableNoop
should cease to do so.
Any developers wishing for this behaviour can use dirty-chai by [@joshperry](https://github.com/joshperry)
.keys()
now accepts Objects, extracting keys from them. By [@gregglind](https://github.com/gregglind).keys()
no longer mutates passed arrays. By [@gregglind](https://github.com/gregglind).which
. By [@toastynerd](https://github.com/toastynerd).change
, .increase
and .decrease
assertions. By [@cmpolis](https://github.com/cmpolis)chai.util
is now exposed [@DingoEatingFuzz](https://github.com/DingoEatingFuzz).includes
and .contains
aliases (for .include
and .contain
). By [@lo1tuma](https://github.com/lo1tuma).any.keys()
and .all.keys()
qualifiers. By [@cjqed](https://github.com/cjqed)assert.sameDeepMembers()
. By [@cjqed](https://github.com/cjqed)assert.isAbove()
and assert.isBelow()
. By [@cjqed](https://github.com/cjqed)property
and deep.property
now pass if a value is set to undefined
. By [@prodatakey](https://github.com/prodatakey)The following changes are required if you are upgrading from the previous version:
addChainableNoop
notes below.node_modules
folder for updated dependencies.The following assertions can now also be used in the function-call form:
The above list of assertions are property getters that assert immediately on access. Because of that, they were written to be used by terminating the assertion chain with a property access.
This syntax is definitely aesthetically pleasing but, if you are linting your test code, your linter will complain with an error something like “Expected an assignment or function call and instead saw an expression.” Since the linter doesn’t know about the property getter it assumes this line has no side-effects, and throws a warning in case you made a mistake.
Squelching these errors is not a good solution as test code is getting to be just as important as, if not more than, production code. Catching syntactical errors in tests using static analysis is a great tool to help make sure that your tests are well-defined and free of typos.
A better option was to provide a function-call form for these assertions so that the code’s intent is more clear and the linters stop complaining about something looking off. This form is added in addition to the existing property access form and does not impact existing test code.
These forms can also be mixed in any way, these are all functionally identical:
expect(true).to.be.true.and.not.false();
expect(true).to.be.true().and.not.false;
expect(true).to.be.true.and.not.false;
If you would like to provide this function-call form for your terminating assertion properties, there is a new function to register these types of asserts. Instead of using addProperty
to register terminating assertions, simply use addChainableNoop
instead; the arguments to both are identical. The latter will make the assertion available in both the attribute and function-call forms and should have no impact on existing users of your plugin.
-0
. [@dasilvacontin](https://github.com/dasilvacontin)Thank you to all who took time to contribute!
The following changes are required if you are upgrading from the previous version:
node_modules
folder for updated dependencies.Thank you to all who took time to contribute!
The following changes are required if you are upgrading from the previous version:
node_modules
folder for updated dependencies.There have been requests for changes and additions to the configuration mechanisms and their impact in the Chai architecture. As such, we have decoupled the configuration from the Assertion
constructor. This not only allows for centralized configuration, but will allow us to shift the responsibility from the Assertion
constructor to the assert
interface in future releases.
These changes have been implemented in a non-breaking way, but a depretiation warning will be presented to users until they migrate. The old config method will be removed in either v1.11.0
or v2.0.0
, whichever comes first.
// change this:
chai.Assertion.includeStack = true;
chai.Assertion.showDiff = false;
// ... to this:
chai.config.includeStack = true;
chai.config.showDiff = false;
false
User configurable property, influences whether stack trace is included in Assertion error message. Default of false
suppresses stack trace in the error message.
true
User configurable property, influences whether or not the showDiff
flag should be included in the thrown AssertionErrors. false
will always be false
; true
will be true when the assertion has requested a diff be shown.
40
User configurable property, sets length threshold for actual and expected values in assertion errors. If this threshold is exceeded, the value is truncated.
Set it to zero if you want to disable truncating altogether.
contain
/include
1.9.0 regression. [@leider](https://github.com/leider)ssfi
for assert
interface. [@refack](https://github.com/refack)Thank you to all who took time to contribute!
undefined
for actual. (internal api)The following changes are required if you are upgrading from the previous version:
node_modules
folder for updated dependencies.--watch
. [@demands](https://github.com/demands)has
to language chains. [@duncanbeevers](https://github.com/duncanbeevers){a:1,b:2}.should.include({a:1})
[@jkroso](https://github.com/jkroso)Thank you to all who took time to contribute!
component(1)
.assert.throws()
returns thrown error for further assertions.The following changes are required if you are upgrading from the previous version:
node_modules
folder for updated dependencies.node_modules
folder for updated dependencies.This is a small patch that updates the dependency tree so browserify users can install chai. (Remove conditional requires)
The following changes are required if you are upgrading from the previous version:
deep.equal
notes.node_modules
folder for updated dependencies.This version of Chai focused on a overhaul to the deep equal utility. The code for this tool has been removed from the core lib and can now be found at: chai / deep-eql. As stated in previous releases, this is part of a larger initiative to provide transparency, independent testing, and coverage for some of the more complicated internal tools.
For the most part .deep.equal
will behave the same as it has. However, in order to provide a consistent ruleset across all types being tested, the following changes have been made and might require changes to your tests.
1. Strict equality for non-traversable nodes according to egal.
Previously: Non-traversable equal via ===
.
2. Arguments are not Arrays (and all types must be equal):
Previously: Some crazy nonsense that led to empty arrays deep equaling empty objects deep equaling dates.
expect(arguments).to.not.deep.equal([]);
expect(Array.prototype.slice.call(arguments)).to.deep.equal([]);
Chai now runs the browser CI suite using Karma directed at SauceLabs. This means we get to know where our browser support stands… and we get a cool badge:
Look for the list of browsers/versions to expand over the coming releases.
The following changes are required if you are upgrading from the previous version:
node_modules
folder for updated dependencies.Coverage reporting has always been available for core-developers but the data has never been published for our end users. In our ongoing effort to improve accountability this data will now be published via the coveralls.io service. A badge has been added to the README and the full report can be viewed online at the chai coveralls project. Furthermore, PRs will receive automated messages indicating how their PR impacts test coverage. This service is tied to TravisCI.
bower.json
. (Fix ignore all)The following changes are required if you are upgrading from the previous version:
node_modules
folder for updated dependencies.Support has been added for the Bower Package Manager ([bower.io])(http://bower.io/). Though Chai could be installed via Bower in the past, this update adds official support via the bower.json
specification file.
bower.json
.The following changes are required if you are upgrading from the previous version:
node_modules
folder for updated dependencies.Chai now uses chaijs/assertion-error instead an internal constructor. This will allow for further iteration/experimentation of the AssertionError constructor independant of Chai. Future plans include stack parsing for callsite support.
This update constructor has a different constructor param signature that conforms more with the standard Error
object. If your plugin throws and AssertionError
directly you will need to update your plugin with the new signature.
var AssertionError = require('chai').AssertionError;
/**
* previous
*
* @param {Object} options
*/
throw new AssertionError({
message: 'An assertion error occurred'
, actual: actual
, expect: expect
, startStackFunction: arguments.callee
, showStack: true
});
/**
* new
*
* @param {String} message
* @param {Object} options
* @param {Function} start stack function
*/
throw new AssertionError('An assertion error occurred', {
actual: actual
, expect: expect
, showStack: true
}, arguments.callee);
// other signatures
throw new AssertionError('An assertion error occurred');
throw new AssertionError('An assertion error occurred', null, arguments.callee);
This is the first non-developement dependency for Chai. As Chai continues to evolve we will begin adding more; the next will likely be improved type detection and deep equality. With Chai’s userbase continually growing there is an higher need for accountability and documentation. External dependencies will allow us to iterate and test on features independent from our interfaces.
Note: The browser packaged version chai.js
will ALWAYS contain all dependencies needed to run Chai.
assert.notOk()
. [@Bartvds](https://github.com/Bartvds)inspect
utility. [@domenic](https://github.com/domenic)Thank you to all who took the time to contribute!
The following changes are required if you are upgrading from the previous version:
node_modules
folder for updated developement dependencies.Regular Expressions are now tested as part of all deep equality assertions. In previous versions they silently passed for all scenarios. Thanks to [@katsgeorgeek](https://github.com/katsgeorgeek) for the contribution.
Thank you to all who took the time to contribute!
1.8.x
to ensure mocha-phantomjs
compatibility.The following changes are required if you are upgrading from the previous version:
node_modules
folder for updated developement dependencies.Asserts that the target is a superset of set
, or that the target and set
have the same members. Order is not taken into account. Thanks to [@NickHeiner](https://github.com/NickHeiner) for the contribution.
// (expect/should) full set
expect([4, 2]).to.have.members([2, 4]);
expect([5, 2]).to.not.have.members([5, 2, 1]);
// (expect/should) inclusion
expect([1, 2, 3]).to.include.members([3, 2]);
expect([1, 2, 3]).to.not.include.members([3, 2, 8]);
// (assert) full set
assert.sameMembers([ 1, 2, 3 ], [ 2, 1, 3 ], 'same members');
// (assert) inclusion
assert.includeMembers([ 1, 2, 3 ], [ 2, 1 ], 'include members');
Most assert
functions have a negative version, like instanceOf()
has a corresponding notInstaceOf()
. However include()
did not have a corresponding notInclude()
. This has been added.
call
/apply
methods for plugin interface. [@RubenVerborgh](https://github.com/RubenVerborgh)members
and include.members
assertions. #NickHeinerThank you to all who took time to contribute!
assert#include
will no longer silently pass on wrong-type haystack.assert#notInclude
has been added.v0.10.x
. Support for v0.6.x
has been removed. v0.8.x
is still tested as before.The following changes are required if you are upgrading from the previous version:
node_modules
folder for updated developement dependencies.eqls
alias for eql
. [@RubenVerborgh](https://github.com/RubenVerborgh).throw
support for primitives. [@RubenVerborgh](https://github.com/RubenVerborgh).throw
support for empty messages. [@timnew](https://github.com/timnew).above()
and .below()
. [@whatthejeff](https://github.com/whatthejeff)Thank you to all who took time to contribute!
.a()
/.an()
to work in cross-browser scenarios..throw()
has cleaner display of errors when WebKit browsers..eql()
now works to compare dom nodes in browsers.1. Component Support: Chai now included the proper configuration to be installed as a component. Component users are encouraged to consult chaijs.com for the latest version number as using the master branch does not gaurantee stability.
Alternatively, bleeding-edge is available:
$ component install chaijs/chai
2. Configurable showDiff: Some test runners (such as mocha) include support for showing the diff of strings and objects when an equality error occurs. Chai has already included support for this, however some users may not prefer this display behavior. To revert to no diff display, the following configuration is available:
chai.Assertion.showDiff = false; // diff output disabled
chai.Assertion.showDiff = true; // default, diff output enabled
1. New Utility - type: The new utility .type()
is available as a better implementation of typeof
that can be used cross-browser. It handles the inconsistencies of Array, null
, and undefined
detection.
chai.use(function (c, utils) {
// some examples
utils.type({}); // 'object'
utils.type(null); // `null'
utils.type(undefined); // `undefined`
utils.type([]); // `array`
});
1. Browser Testing: Browser testing of the ./chai.js
file is now available in the command line via PhantomJS. make test
and Travis-CI will now also rebuild and test ./chai.js
. Consequently, all pull requests will now be browser tested in this way.
Note: Contributors opening pull requests should still NOT include the browser build.
2. SauceLabs Testing: Early SauceLab support has been enabled with the file ./support/mocha-cloud.js
. Those interested in trying it out should create a free Open Sauce account and include their credentials in ./test/auth/sauce.json
.


Introduction
Connect the N(4) marks on the board to beat your friend!
Main Menu
Winning!
Winned!
Change the game settings
Usage: java -jar Connect4.jar [GridSizeX] [GridSizeY] [WinningLength]
Connect the N(4) marks on the board to beat your friend!
Main Menu
Winning!
Winned!
Usage: java -jar Connect4.jar [GridSizeX] [GridSizeY] [WinningLength]
You can download Connect N from my GitHub.
(Java & LibGdx, Eclipse Project)


{{ _('Some content may only apply to recipients who meet a condition, for example, recipients within a particular age range. In the template, you’ll put double brackets around that content. After the opening set of brackets, enter the condition, followed by double question marks. Between the question marks and the closing brackets, show the content for recipients who meet the condition. For example:') }}
{{ _('Hello') }},
{{ _('We’re happy to announce that you can now enroll in the program.') }}
(({{ _('under18')}}??{{_('Please get your application signed by a parent or guardian.')}}))
{{ _('Hello') }},
{{ _('We’re happy to announce that you can now enroll in the program.') }}
{{ _('Please get your application signed by a parent or guardian.') }}
{{ _('In a message, you’ll need to insert ’yes’ for recipients who meet the condition, and “no” for those who do not. If there’s only 1 recipient, you can do this manually.
If there’s a spreadsheet, include a column for the condition, and enter ‘yes’ or ‘no’ for each recipient in the column. Then GC Notify sends the content only to recipients who meet the condition.') }}


Esp32 Test Page
Red
Green
Blue
Stop FPGA Blinking
Server IP Address:
IP ADDRESS GOES HERE
DATA GOES HERE


frosch.bib
@inbook{Heinlein:2020:FRO,
author = {Alexander Heinlein and Axel Klawonn and Sivasankaran Rajamanickam and Oliver Rheinbach},
title = {{FROSch}: A Fast And Robust Overlapping {S}chwarz Domain Decomposition Preconditioner Based on {X}petra in {T}rilinos},
booktitle = {Domain Decomposition Methods in Science and Engineering XXV},
pages = {176--184},
publisher = {Springer International Publishing},
year = {2020},
doi = {10.1007/978-3-030-56750-7_19},
note = {Preprint \url{https://kups.ub.uni-koeln.de/9018/}}
}
@article{Heinlein:2016:PIT,
author = {Heinlein, Alexander and Klawonn, Axel and Rheinbach, Oliver},
title = {A parallel implementation of a two-level overlapping {S}chwarz method with energy-minimizing coarse space based on {T}rilinos},
journal = {SIAM J. Sci. Comput.},
number = {6},
pages = {C713--C747},
volume = {38},
year = {2016},
doi = {10.1137/16M1062843},
note = {Preprint \url{http://tu-freiberg.de/sites/default/files/media/fakultaet-fuer-mathematik-und-informatik-fakultaet-1-9277/prep/2016-04_fertig.pdf}}
}


source pages/_include/capstatements.md file
This section outlines conformance requirements
etc
etc
Steps for adding this narrative to CapStatements - if you don't want to generate it
1) Create narrative in markdown
2) View Page source in Browser and copy the html content and save as .xhtml file
3) Edit xhtml content ( I use xml spy since can view in browser mode )
1) Change title
2) Edit or remove TOC ( contains both client and server links)
3) Remove any relative links to build (e.g., xml / json views) since these will break if not viewed inside of IG
4) Remove or replace any unsupported xhtml characters: You can catch these using the w3 validator or by trying to view in browser
e.g., replace "; " with " "
4) Insert in CapabilityStatement.text.div as xhtml
Make CapabilityStatement.text.status = "additional"
e.g.
<text>
<status value="additional"/>
<div xmlns="http://www.w3.org/1999/xhtml">
...(inserted xhtml here)...
</div>
save CapabilityStatement file


Real Madrid wonderkid Rodrygo rejected Liverpool transfer before Bernabeu move
Rodrygo's former manager at Santos has claimed the teenager decided not to join Liverpool amid interest from the Premier League leaders
by Liam Prenderville, http://www.facebook.com/mirrorfootballReal Madrid teenager Rodrygo's former manager has claimed he rejected a move to Liverpool .
Rodrygo, 18, was in the headlines this week as he scored a hat-trick in the Champions League victory over Galatasaray this week.
The Brazilian has managed five goals in just six matches since joining Real in a £40m deal.
But former Manchester City star Elano, who managed Rodrygo at Santos, has claimed he turned down the chance to move to Anfield before heading for Madrid.
"There was strong interest from Liverpool for the kid when he was in the youth teams and they wanted him, but the offer was low," he told ESPN.
"Then the offer arrived from Real Madrid . I had a chat with the club and I told them the kid was worth gambling on and that I would like to work with him.
"He already had this ability at a young age.
"There are very few players that are like that when they're so young. He's already mature and has a personality to his game."
Rodrygo will hope to retain his place when Real take on Eibar this weekend.
On the young striker's midweek hat-trick, boss Zinedine Zidane said: "We are happy for him because in the end when he gets the chance to play he plays well, and he did so again tonight.
"He plays well in every sense. We know his qualities in attack well, but he also works hard in defence and helps out with a lot.
"But we need to keep calm and not put any pressure on him."


This page gives results of the poll based on the votes left by visitors, sorted by individual articles
Click here to go back to Homepage


My Profile
My Account
Change Password
Notification Settings
Organization
Volunteer
Organization
Volunteer
sander_mrbrown
sander_mrbrown
Logout
Search Job
Job Applications
Recommendations
Messages
Search Job
If you like this search, you can
Save your search
Categories
{{category }} ({{$index + $index%4}})
Skills
{{skill}} ({{($index + $index)%8}})
Diploma/Certificates
{{diploma}} ({{($index * $index + 1)%9}})
Working time preference
{{ time }} ({{($index * $index + 5)%9}})
Languages
{{ language }} ({{($index * $index + 2)%7}})
{{lengthOfJobs}}
{{lengthOfFavouriteJobs}}
Jobs found
Clear Search
Sort By:
Previous
{{n+1}}
Next
Applied
Volunteer Job posted by
- {{Job.about}}
Cleared all search results,
Please search again to find the Jobs
×
Invite Volunteer to Discuss Job
Job Posting
(NOTE: Please select job to invite volunteer)
Message
Send Invitation
Cancel
Already now this volunteer?
Hire now


Contacts
Create contact
Contacts
Suggestions
Frequently contacted
Duplicates
Labels
Label 1
Label 2
Label 3
Settings
Help & feedback
Name
Email
Phone number
Labels
Job title & company
Name Surname
<EMAIL_ADDRESS>label
job
small
medium
large


questions[] = [
{ id: 1, question: 'What is overloading?', answer: 'Same method but different parameters.' },
{ id: 1, question: 'What is an inner join?', answer: '' },
{ id: 1, question: 'What is an outer join?', answer: '' },
{ id: 1, question: 'What is recursion?', answer: '' },
]
Keep building
< a href="next.html">


Toggle navigation
Star Brand
Home
Gallery
Products
Nutritious cereals
Pulses
Spices and Condiments
Fruit Pulps
Agro Products
Oils
Wheat Flour
Rice
Dry Fruits
About
Contact
Home Page


xeogl
attaching experimental
Annotations
to a
GLTFModel
loaded from glTF
click the objects to attach more annotations