One of our main goals at Novus is to help people become better acquainted with renewable energy. We provide solar, hydro, and wind powered energy sources.
While adjusting to new energy is important to us, it's also vital to show users that we can still enjoy the luxuries of a modern lifestyle.
Each living space comes equipped with our own personal software that accurately tracks your use of daily utilities such as electricity and water. Our software is designed to help users gradually decrease their use of said resources.
We want customers spending time in our community to relax and enjoy the luxurious format of our living spaces. While we want you to take away how effective renewable energy can be, we also want the entire experience to be a pleasant time.
Build a unique and high-end living experience centered on reducing human impact on the environment.
Utilize cutting-edge design and innovative technology to create a community based on solar power. Introduce society to the benefits of efficient and renewable energy sources.
It’s important for societies to recognize that our day-to-day resources will not be around forever. Not only are these resources depleting, but most of them produce harmful emissions which damage the environment.
We hope that once people experience our community, it will motivate them - even if just a little bit. If someone decides to install solar panels on their roof after visiting our community then that’s a win for us. While we are a small company, every person working with us will help make a difference.


پاییز ۹۸
Google Street-View (and ReCaptchas)
(now better than human level)
Some good, some not-so-good
Android feature since Jellybean (v4.3, 2012)
Trained in ~5 days on 800 machine cluster
Embedded in phone since Android Lollipop (v5.0, 2014)
Google's Deep Models are on the phone
"Use your camera to translate text instantly in 26 languages"
Translations for typed text in 90 languages
Google DeepMind's AlphaGo
Learn to play Go from (mostly) self-play
A machine-learning model transforms its input data into meaningful outputs, a process that is “learned” from exposure to known examples of inputs and outputs. Therefore, the central problem in machine learning and deep learning is to meaningfully transform data.
How Computer see the above picture?
| Hinton (Toronto) | ||
| LeCun (NYC) | ||
| Universities | Bengio (Montreal) | |
| Baidu | Ng (Stanford) |
“AI is the new electricity.”
In general, three technical forces are driving advances:
webpage : http://mamintoosi.ir
webpage in github : http://mamintoosi.github.io
github : mamintoosi


When the sun is shining, and the immersion heater is cycling away merrily, it's tempting to think of using other types of load which could consume surplus power more beneficially for our purposes. Although a water heater doesn't mind being cycled on and off, other types of appliances would no doubt complain if given this kind of treatment. Battery chargers and heat-source pumps spring to mind. If these appliances are to be used as dump-loads at any stage, they will need to remain on for a minimum amount of time without interruption.
It's all too easy for us humans to take a quick look around and decide that "now" would now be a good moment to activate some load or other. What we are actually saying is that there appears to be sufficient surplus power at present to support the intended activity for the forseeable future. But how can we get an automated system to take these decisions for us? First, we need to re-think the situation in terms that the control system can analyse.
In the case of my Mk2 PV Router, the main source of information is the "energy bucket" which provides a continuous representation of the energy state of the premises "now". The control system will also know the on/off state of any loads that it can control, but is unlikely to know whether any given load is capable of consuming power. A thermostat, for example, might have opened.
Given this simplified view of the world, under what circumstances do we want our control system to commit to turning on appliance X for a minimum duration of Y ? One possibility might be to have a small appliance as our first dump-load, and if surplus power ever exceeds that load's rating then it's time to activate appliance X. Another approach might be to check for what proportion of the last minute a conventional dump-load (such as a 3 kW immersion) has been active. If that proportion is found to have exceeded a certain threshold, then it's time to activate appliance X. The criteria for activating a load that needs continuous power will no doubt need to be different for different situations.
Having taken the decision to apply power to appliance X for a minimum duration of Y, the consumption of any conventional dump-loads will need to be reduced accordingly, otherwise penalty changed are likely to be applied by the meter. The easiest approach at this stage may be to immediately reset the diverter system back to its starting point. If any surplus power is still available, the system will soon be able to find its own level again. But if there is now longer any surplus power, the safest state for the diverter's control logic to be in is back at Square One, with the energy bucket empty and all conventional dump-loads firmly off.
Once appliance X has been activated, it will need to remain on for a minimum duration of Y. During this period, although still being controlled by the diverter, appliance X should be regarded as part of the baseload of the premises because the diverter is no longer at liberty to turn it off if circumstances change. While appliance X needs to remain on, other dump-load(s) should ideally be available so that the Router can always perform its primary duty of balancing consumption against generation whenever surplus power is present.
When duration Y has expired, the control logic will again have to make a decision about the future state of appliance X. One simple approach might be to simply turn it off immediately, but that same appliance could then become turned on again very shortly afterwards. Such repetitive power-cycling would seem undesirable. A better approach might be to check the level in the energy bucket. If this level is above zero, that means there is still some surplus power within the premises in which case appliance X could reasonably remain on; otherwise it should be turned off. The criteria for de-activating a load that needs continuous power for as long as possible will require careful thought.
So that's a descriptive version of how a load that requires continuous power could be incorporated as a dump-load. But what would this look like in code? In the standard case, where there are one or more conventional dump-loads which can be switched on or off at any time, the control logic is little more than:
if the energy level is sufficiently high ..turn on the next available dump-load else ..if the energy level is sufficiently low ....turn off the next available dump-load
Now, having added some "continuous" loads into the mix, we have a somewhat more complex picture:
boolean resetNow = false; for each load in the "continuous" category ..if the load is already on ....if its timer is still running ......leave the load on ....else ......if the requirement is met for leaving the load on ........leave the load on ......else ........turn the load off ..else // the load is not already on ....if the requirement is met for turning the load on ......turn the load on, resetNow = true ....else ......leave the load off if (resetNow) ..deactivate all conventional loads and empty the energy bucket else .. //for the conventional dump-loads ..if the energy level is sufficiently high ....turn on the next available dump-load ..else ....if the energy level is sufficiently low ......turn off the next available dump-load
In the case of my Mk2 Router, this kind of logic would be repeated at the start of every new mains cycle. To minimise the processing overhead, floating point maths should be avoided wherever possible. This logic, however, is no longer simple, and there is a real cost of getting it wrong. If, for example, conventional dump-loads were to be active at inappropriate times, penalty charges would be correctly applied by the meter.
So far, I've said nothing about Anti-flicker. Anti-flicker mode is just a simple way of using rather more of the meter's penalty-free zone than would otherwise be the case. For simple systems, it makes a lot of sense to control dump-loads in this way. But for a complex system, in which there are a number of loads of different types, AF mode should be used with great care. When running in AF mode, the energy level is never far from the meter's chargeable thresholds when decisions need to be taken. When switching between loads, the control logic requires a certain amount of time to make informed decisions, and time at this stage of the proceedings is in very short supply. The consequence of repeatedly just failing to comply with the meter's criteria can be very costly.
Having thrown this initial post together very quickly, I make no guarantees as to the accuracy or useability of its content. But I hope that it will provide food for thought, and I look forward to other people's ideas being added to this thread.
[Edited 9/7/14 to include the resetNow flag]
Re: Smarter Ways of using Dump-loads
This is of great interest to me. I am in the process of getting solar PV installed at my home (next week hopefully) and I have every intention of getting one of your Mk2 Routers and using it to divert excess power (I am the one who was bugging you on email a few weeks ago ;)).
My issue is I already have solar evacuated tubes on the roof which are very good at heating my cylinder in the summer months. I barely ever have to activate my cylinder heating element in summer. So this means during the months I will be getting the most PV generation, I will already have a cylinder sitting at between 60-80 degrees.
In winter dumping all excess to my cylinder will work great. But in summer I need to divert to something else. And that something else has been perplexing me! Because, as you point out, most of my other loads in the house would not like being switched on/off rapidly.
So any system that allowed me to divert to something, say a dishwasher, for a guaranteed 2hrs for example, would be perfect for my scenario. The rules surrounding what 'continuous' loads are available and ready for diversion could become quite complex however. Consider the dishwasher again, I would only want that fired up if I had a full load of dishes. So I would need some way of 'enabling' the load so that the PV router would know it is available.
I think we are perhaps getting beyond the realm of an Arduino controller for this sort of thing. This will require more complex automation logic which is responsible for enabling/disabling various loads and potentially even allowing load times to be dynamically set, and then we leave the relatively simple on/off logic you outlined in your post to the PV router.
I have quite a bit of experience in home automation software, well in one particular piece of software - openHAB (www.openhab.org). I think this would be a perfect fit for this type of control. And I would be very happy to work with you at integrating openHAB with the Mk2 PV router if you think this approach has some merit.
In reality the design will be quite generic, perhaps using MQTT, and then any automation system can be used to interface with the router and enable/disable these continuous loads.
Re: Smarter Ways of using Dump-loads
I posted a sizable response to this but got an email saying the post was being reviewed before being shown. That was over 24 hours ago. Has that post been lost or is it still in the 'review queue'?
Re: Smarter Ways of using Dump-loads
Yes it was, no it hadn't and yes it was, and I appear to the the only Moderator to have looked at the queue, and I've been out/busy for the last day or two. So don't panic. But thanks for not posting 5 times like some have done.
Re: Smarter Ways of using Dump-loads
I've been running many loads successfully for nearly some 2 years including air source heat pumps and battery chargers very successfully with my own modification of the Mk2i code which Robin is well aware of. I have modified the code to run a mixture of anti flicker and normal mode dependent upon the actual load being used. It also prioritizes loads and very rarely does it result in any import from the grid.
Re: Smarter Ways of using Dump-loads
summerboy, how do you deal with the electronic controls in most modern dishwashers and washing machines? After a power-fail, mine "reboots" into a default off state. I don't think I could set mine up so that it would do its cycle when the mains comes on, I'd need to be there to re-select the cycle etc.
Re: Smarter Ways of using Dump-loads
Sumnerboy, if your dishwasher is to be a regular feature of your daily routine, then you should be able to regard it as a continuous load that requires period X of continuous power when criterion Y has been met. On days when it is full and switched on, it will start up at the appointed time and consume power; otherwise, it won't.
My mother has this kind of system for her dishwasher which she runs overnight on Economy 7. If the unit is not sufficiently full, then she doesn't switch it on. So although power is allocated by the 24h timer that's plugged into her mains outlet, no energy is consumed.
I can't promise any bespoke code for you of this type but would be happy to supply you with some ''Mk2'" hardware to run it on :)
* * *
Tinbum, sorry, I can't see any reason for running some loads in normal mode and some in anti flicker.
In anti flicker mode, loads are likely to be cycling at around 0.5Hz (one second on, one second off). Which of your loads can cope with this kind of treatment yet can't cope with faster rates of cycling?
As I said at the top of this thread, I think loads need to be categorised into two types: those that can be cycled rapidly, such as water heaters; and those that can't, such as battery chargers - or dishwashers. The latter type I regard as "continuous" loads, and these need to be held on for a minimum duration as you do with your various timers, whatever the weather.
The former type I regard as "conventional" or "general purpose" dump-loads, and they can be used to mop up whatever surplus power is left. Whether they do so within Normal mode or anti-flicker has no real bearing on anything, IMHO.
If you feel that your code can make a useful contribution to this debate - either in its original form or with my recent additions - please feel free to post it here.
Re: Smarter Ways of using Dump-loads
Robin, What practical experience of running different loads do you actually have?
Re: Smarter Ways of using Dump-loads
None, but I have plenty of experience of providing kit that others can use for this kind of purpose. As the supplier of this stuff, both software and now hardware, I need to stay on top of my customers' needs.
What practical experience do you have of running loads than need to be operated in Anti-flicker mode rather than Normal?
Re: Smarter Ways of using Dump-loads
Thanks Robert - do posts always get reviewed like this, or just for new users?
dBC - yep that is a valid point. But as Robin pointed out I would just manually schedule the dishwasher for the middle of the day, when it is most likely to have the most PV generation, and then the PV router can decide if there is enough to kick it off. It wouldn't be perfect but by tying in rules which monitor weather forecasts (potentially) we can probably improve things further.
It is for these sorts of reasons that I believe integrating the PV router with some more complex home automation software has a lot of merits.
Robin - my solar is getting installed this week so once it is in and operational I will be figuring out exactly what I need and will most definitely be in touch. I pointed another chap from NZ in your directly recently and he has just posted a picture of a PV router all setup and diverting power. Do I get a commission ;)?!
What are types of dump loads are people using? Tinbum you mentioned battery chargers - what sort of batteries are you charging? Looking for ideas on how else to divert since my evacuated solar tubes will handle all my hot water during the highly productive summer months!
Re: Smarter Ways of using Dump-loads
I seem to have confused myself a little bit in my previous post...apologies!
Due to the electronics in the dishwasher, as dBC pointed out, it would need to remain on and powered up so that the timer can kick in when required and run the dishwasher program. So that means I would have to set the dishwasher timer to run at the same time each day (that it was full and ready), and then have my PV Router configured to check PV generation at that 'run time' and decide whether to let the dishwasher run, or shut it off.
So in effect the router would be turning OFF that continuous load if there was not sufficient generation, rather than turning it ON is there was enough. But this requires synching of the dishwasher timer and the PV router 'generation check'.
This is not ideal as my dishwasher only has a 'delay start' timer (which is by the hour), not a 'run at' timer. So I am not convinced running this type of load using diversion is really all that feasible - unless I am missing something...?
What I really need is a 'connected' dishwasher...something I can 'talk' to over IP and control via openHAB. Then the PV Router can just signal openHAB to indicate there is extra power available and openHAB can decide whether it should run the dishwasher.
Which goes back to my earlier question...what other types of dump load are people diverting to (since it doesn't really look like I can use my dishwasher)?
Re: Smarter Ways of using Dump-loads
"Thanks Robert - do posts always get reviewed like this, or just for new users?" Basically, as I understand it, it is users who haven't built up a reputation. I don't know the details of the algorithm it uses, but I think external links have a big influence, as it's intended as an anti-spammer device. I'm flagging you as a "power user", which means it should not catch you again.
Re: Smarter Ways of using Dump-loads
Thanks Robert.
Re: Smarter Ways of using Dump-loads
Plenty. For a start my chargers, there is no way to run you can run them in normal mode.
Re: Smarter Ways of using Dump-loads
Robert - I posted twice this morning, the first one got held back, the second went thru (and is visible in the thread above). Could you release my first post as there were a few questions in there?
Re: Smarter Ways of using Dump-loads
Tinbum - what are you charging? Is it a battery bank for use during non-solar periods?
Re: Smarter Ways of using Dump-loads
Tinbum: Plenty. For a start my chargers, there is no way to run you can run them in normal mode.
Agreed, but are you saying that you can run your battery chargers in anti-flicker mode? In that case, they are likely to cycle on & off at approximately 1 Hz which does not sound acceptable to me. Please can we get some agreement over this before moving on.
 In which case, they could be run just as well in Normal mode.
I would regard a battery charger as being a "continuous" load for which special rules apply. This is not the same as anti-flicker mode.
Re: Smarter Ways of using Dump-loads
Sumnerboy: I pointed another chap from NZ in your directly recently and he has just posted a picture of a PV router all setup and diverting power. Do I get a commission ;)?!
Er, maybe we should discuss terms offline ...
I dispatched two orders to New Zealand recently and noticed that the addresses had similar postcodes. Both customers were agreeable to being put in contact with other so I was happy to oblige.
Seems that the Kiwi branch of the Mk2 Users' Club is going from strength to strength - and this is your winter!
Re: Smarter Ways of using Dump-loads
Tinbum - what are you charging? Is it a battery bank for use during non-solar periods?
Yes, I have a large battery bank that I use for powering everything when the sun is down so it needs charging every day.
Agreed, but are you saying that you can run your battery chargers in anti-flicker mode? In that case, they are likely to cycle on & off at approximately 1 Hz which does not sound acceptable to me. Please can we get some agreement over this before moving on.  In which case, they could be run just as well in Normal mode. I would regard a battery charger as being a "continuous" load for which special rules apply. This is not the same as anti-flicker mode.
Yes and with no problems at all other than substituting one small component within them. I've been running them for nearly 2 years like this. The chargers running in AF are 1kw each, and yes they cycle on and off as, no, there isn't sufficient power to keep them on all the time. I've also been running them with a meter with a 1000J bucket. As the chargers ramp their output they don't operate at 1Hz. It's taken much very fine tuning but it works perfectly and it doesn't result in import from the grid.
My sequence is;
load 1 (charger 1) cycles on/off in AF first
once there is 1kW+ of suplus Pv then 1 will therefor be on constantly and charger 2 will cycle on/off in AF
once there is 2kW+ of surplus PV then 1 and 2 will be on constantly and charger 3 will cycle on/off in AF
once there is 3kW+ of surplus PV then 1,2,3 will be on constantly and charger 4 will cycle on/off in AF
once the is 4kW+ of surplus PV charger 4 (3kW) will come on (with timers not in AF) and 2,3,4 will go off
at 4kw+ charger one cycles in AF again and so the sequence continues.
For anyone having a battery bank that has cost £1000's the first priority is to charge them with every single bit of surplus power available. Imagine a really dull rainy day in mid December. You simply can't do that with them as a continuous load.
Re: Smarter Ways of using Dump-loads
Which goes back to my earlier question...what other types of dump load are people diverting to (since it doesn't really look like I can use my dishwasher)?
I've modified a tumble drier for use with mine. (Also made it automatically change rotational direction at the same time, that's why someone gave me it as their clothes always ended up in a ball inside)!
Also use an air source heat pump and I am planning on a ground source heat pump for cold days when it will be more efficient than the ASHP.
Re: Smarter Ways of using Dump-loads
tinbum, what sort of batteries are you using.... lead acid, lithium ion etc? Just about every battery technology benefits (in longevity and charging speed) from various charging algorithms designed for that chemistry. For example lead acids like a constant current phase, followed by a constant voltage phase, followed by a trickle phase. How do you manage that while pulsing the supply to the charger?
Re: Smarter Ways of using Dump-loads
The batteries are lead acid (Rolls). I work on the principle that its better to be putting something in than not, and they are working in the bulk stage.
It must also be remembered that its only 1kW that is turning on and off. I also have direct DC PV charging to the batteries and with solar charging you are always at the mercy of the sun.
The actual charging is done in 3 stages bulk, absorb and float which are controlled by the MPPT solar DC charger and the charger (Trace) that is number 6 on the diverter. In my scheme above I have slightly simplified it because the actual charger loads will actually reduce as the batteries charge and as more chargers come on.
Once I have the 3 phase meter problems sorted I will be changing my system as I will be installing 3 sunny backups, one on each phase. They will do most of the battery charging along with the DC MPPT charger. There will still be some charging using the Mk2i but from the PV on my other 3 phase supply.
Re: Smarter Ways of using Dump-loads
My sequence is;
load 1 (charger 1) cycles on/off in AF first
once there is 1kW+ of suplus Pv then 1 will therefor be on constantly and charger 2 will cycle on/off in AF
once there is 2kW+ of surplus PV then 1 and 2 will be on constantly and charger 3 will cycle on/off in AF
once there is 3kW+ of surplus PV then 1,2,3 will be on constantly and charger 4 will cycle on/off in AF
So far, this is just how my Mk2i rev5 sketch works. Only the lowest priority load is cycled (in either Normal or anti-flicker mode as selected), and all higher priority loads remain fully on. To drive multiple outputs is just a matter of allocating the IO pins for them; the necessary control logic is already within the sketch.
once the is 4kW+ of surplus PV charger 4 (3kW) will come on (with timers not in AF) and 2,3,4 will go off
This is the "continuous load" idea which is the main reason that I started this thread. As I see it, "continuous" loads become part of the background consumption and therefore play no part in the the primary activity of the Mk2 which is to balance energy consumption against energy generation.
at 4kw+ charger one cycles in AF again and so the sequence continues.
Yes, if there is any surplus power while the "continuous" load is on, it will be diverted to the first available conventional load in whichever mode is selected, either Normal or AF.
As I see it, the extra functionality for "continuous" loads could be incorporated into the latest version of Mk2i rev5 code (rev5e) with very few changes. It may be best for the RF overhead to be removed, otherwise it all gets rather complicated.
On the Downloads page of my website, there's a multi-load Mk2 sketch without RF called Mk2_multiLoad_CAT5_2.ino (sorry, the name gets scrambled when the file is downloaded).
Re: Smarter Ways of using Dump-loads
Yes, if there is any surplus power while the "continuous" load is on, it will be diverted to the first available conventional load in whichever mode is selected, either Normal or AF.
I can allocate this for any individual load and not as a global setting. So for example my heaters/ immersions etc are in normal mode but chargers in AF.
So far, this is just how my Mk2i rev5 sketch works. Only the lowest priority load is cycled (in either Normal or anti-flicker mode as selected), and all higher priority loads remain fully on. To drive multiple outputs is just a matter of allocating the IO pins for them; the necessary control logic is already within the sketch.
In my code the turning off sequence is much altered from yours. Certain items may have initially been held on by a timer but once that time is up it doesn't mean that load will actually turn off. So what was a low priority load at the beginning may actually become a high priority load. For example you wouldn't want an ASHP on when the PV wasn't going to be good enough to drive it without import, eg first thing in the morning. But when the first few loads are on its probable that the PV has got to a sufficient level to be able to drive it. You then want to continue using that as its COP is greater than 1, which is what an element is. All the time you don't want import though so the original higher priority loads become the low priority and switch on and off so the ASHP remains on.
As I see it, the extra functionality for "continuous" loads could be incorporated into the latest version of Mk2i rev5 code (rev5e) with very few changes.
The basis is already done, as you'll see in the copy of my sketch that you have.Your description in the first post is basically just how my code works i think.
Re making my code available I'm happy to do, but more on a one to one basis as through the code is not complex using it and setting it up correctly is.
Re: Smarter Ways of using Dump-loads
I can allocate this for any individual load and not as a global setting. So for example my heaters/ immersions etc are in normal mode but chargers in AF.
Given that your system is operating in AF mode when supplying surplus power to your battery chargers, I'm really struggling to understand why you might want to use "normal" mode for your heaters/immersions. Why not stick with AF mode throughout?
Re: Smarter Ways of using Dump-loads
In most cases I would think most people will use the Mk2i in normal mode and to be honest I would. Initially with your early versions of the sketch, which mine is based on, it was vital to have very accurate calibration if AF was to be used or there would be import from the grid. (Iv'e not checked your newer AF method yet). My meter had a very small energy bucket, about 1/3 of the 'standard' meter so that became even more vital.
I think having normal mode results in less possibility of import as the energy bucket should be nearer the center and so should a load elsewhere be turned on or the PV reduces theres a bit more left in it for its reaction. Having it in also just gives greater flexibility, who knows what someone is going to power next!
Re: Smarter Ways of using Dump-loads
OK, that makes sense. In simple terms, "normal" mode is indeed the safer option in which to run a MK2 Router. However, once a system has been properly calibrated and found to be working satisfactorily in AF mode, I see no reason to ever revert to normal mode. The only advantage of "normal" mode is that the action happens more quickly when minimal surplus power is available. Otherwise, between the infrequent bursts of power, it could appear that the Router is not actually doing anything.
Iv'e not checked your newer AF method yet
While updating your sketch recently, I replaced the legacy AF logic with that from Mk2i rev5d which forms part of my standard multi-load control mechanism. This newer algorithm does not have twin energy thresholds; instead, it uses just one threshold (the mid-point of the energy bucket) plus its knowledge about the passing of time. IMHO, there are some key benefits to this approach, one of which is that the system no longer requires accurate calibration. The reason for this is that time, unlike energy flow, is already known in absolute terms.
Another advantage of this system is that it works particularly well for smaller loads such as your bank of 1 kW battery chargers. This is because more time is available when deciding whether a given load will suffice, or whether an additional load needs to be added or removed. With the original 2-threshold system, nothing happens until one of the thresholds is reached, then decisions need to be made very quickly. This benefit of the newer algorithm is greatest with smaller loads. When cycling large (3kW) loads, the two systems having exactly the same timing limitations.
Re: Smarter Ways of using Dump-loads
I'll give it a try and see how it compares!
Re: Smarter Ways of using Dump-loads
We all enjoyed some fun discussing this sort of thing here last year.
Clearly storing surplus PV energy is proving very successful when heating water for later domestic use. The big advantage in doing this is that we are using existing infrastructure.
A more radical idea might be to design a very high temperature heat storage device like an old fashioned brick bread oven but using modern highly efficient insulating materials. So when you want to cook that pizza just open the door and pop it in. No need to switch it on.
It would bring back the need for skill in cooking - no gas mark 6 simplicity here!
Brian
Re: Smarter Ways of using Dump-loads
The beauty of using water to store the heat is there is nothing better in terms the quantity of heat in a given volume and convenience. Most of the time it is easy to handle and you can use the heat without needing to transfer it to something else.
Hydrogen has a rather higher Specific Heat Capacity but it needs a large volume to get the same weight and it can be unforgiving if you handle it wrongly. Helium is a little less bad but still hardly convenient.
Re: Smarter Ways of using Dump-loads
Anyone else noticed that a really big techy guy in the states has leveraged his car batteries into his PV storage marketplace?
This battery is very interesting http://www.aquionenergy.com/
Local storage has reached grid parity.
Re: Smarter Ways of using Dump-loads
Interesting... When I read "a really big techy guy in the states has leveraged his car batteries into his PV storage marketplace" I immediately thought of: www.teslamotors.com/powerwall
One of the first things I noticed about the Aquion site was no pricing. In general I've noticed that when a price isn't listed on a page, it's usually pretty steep.
Re: Smarter Ways of using Dump-loads
Bill, you are correct, I was referring to the Tesla Powerwall, If I could only buy them in bulk. They have limited availability unless you were able to pre-buy a unit. I mentioned the Aquion battery because it looks very interesting compared to lead-acid or lithium-ion. Aquion is local to me so I am hoping to pay them a visit. I have a tremendous need to divert energy to batteries or water heating loads due to changes in the net-metering policies where I do business.
Re: Smarter Ways of using Dump-loads
I'd love to have a few of their 10 kWh units myself! I'm hoping they get their plant built on time, and are able to ramp up production quickly. Maybe they'll drop in price once Tesla sells enough of them to recover the R&D costs.
Re: Smarter Ways of using Dump-loads
Phase change storage materials probably offer some promise depending on application. Lithium Nitrate looks promising for storing heat for cooking.
Re: Smarter Ways of using Dump-loads
Hi all, new to the forum, I am an active contributor on various ev forums I am registered on.
My position is coming from a lithium battery view. I have been using lifepo4 lithium for about 2 years in a Toyota Prius that I converted into a plug in Prius by fitting in controls systems and a 7.5 kWh lifepo4 battery.
there is no charge curve or profile charge requirements for lifepo4 lithium, just charge at constant current until the charger output voltage matches the battery pack voltage, at this point no current flows and the battery is full.
in practice though, I run my packs alittle lower in total pack voltage, I also allow at least 10% capacity at full and low charge limits only using at the most 80% of the battery capacity, this will prolong the battery life. I have run my plug in Prius and covered about 10000 miles mostly in ev mode and seen very little to no degradation in the battery capacity.
so, could this be termed a standard load, as there is no special charging requirement? ( for lithium only)
also, in relation to batteries, Nissan Leaf vehicles are starting to show up in salvage yards, they are sought after by ev enthusiasts but I'm sure a steady stream of supply will be available within a couple of years, these batteries at 24kwh capacity (I'd only use 20kwh max though to extend life) are great for projects with energy storage. I managed to pick up a battery myself 2 moths ago, 16kwh is now in use in my Prius, the other 8kwh and the older Prius 7.5kwh lifepo4 is going to make up my battery store for energy storage.
I'm Looking for a pv excess diverted to divert excess pv electricity into heat store then battery store plus the plug in Prius, more complicated than a standard set up but I'm sure is a do able project
thanks. Anthony.
Re: Smarter Ways of using Dump-loads
An Everhot electric range cooker might fit your culinary bill!


What is a Way-point?
This tool allows the user to define an observation by generating a path (of a defined width/offset value)
and captures an area along a linear corridor. This is usually used to mark observations of invasive species
that occur along roads and rivers. It can be used to properly define the area spatially.
The interface allows the user to enter points based on their UTM location i.e. Easting and Northing values.
Upon completion, the user clicks to proceed and generate a map. A buffer is created and displayed on a map.
Please note:
- Points must be sequential to generate a map that is exactly as recorded on ground.
- Minimum of 2 points are required to create a linear way-point path.
- Maximum of 20 points can be recorded.
- The width or offset value is recorded meters. It is applied to either side of the linear path. (e.g. offset = 2 meters , total width = 4 meters.)
- Offset value can range between 1 meter to 20 metres.
- Maximum distance between 2 points is 200 meters.
- Minimum distance between 2 points is 1 meter.
- Maximum length of the entire plot is 3800 meters.
- Minimum length of the entire plot is 1 meter.


( a) Crystal structures of TlGaTe 2. The illustration shows the legends for the different type of atoms; ( b) calculated HSE06 electronic band structure of TlGaTe 2; ( c) total and site projected density of states of TlGaTe 2. The Fermi level is set to zero. (colour code: red-Ga, green-Te, blue-Tl).


Welcome to
Click anywhere outside help windows to hide.
In this tool, you can visualize and explore the set of non-dominated optimal variants (called Pareto front) computed by Clafer Multi Objective Optimizer (ClaferMoo). Press the '?' button of each window to see specific help. In general:
Use the view
Input Clafer Model and Options
to upload, select an example, or enter a Clafer model to optimize.
Use the view
Matrix
view to filter the instances by selecting and eliminating features.
Use the view
Graph
to visually explore the Pareto front.
Use the view
VariantComparer
to perform tradeoff analysis of a set of selected variants.
Use the view
Control
to filter by quality ranges.
Use the view
Output
to see messages.
For more information visit
|
Clafer Home
|
Generative Software Development Lab, University of Waterloo, Canada
|
Do not display this message at start again.


SimPoll
{{ question or "Question" }}
Poll Result: {{ result or "No vote yet" }}
Summary
Total votes: {{ total_votes or 0 }}
{% if total_votes > 0 %}
{% endif %}
Loading charts...


Escape From Io
-
Resource Management Sim
GitHub
Download
Windows
Mac
All Components
Header
Sliders
Navigations
Typography
Buttons
Labels/Alerts
Progress Bars
Tabs/Accordionss
Tables
Cards
Team
List
Pricing
About Us
Services
Features
Portfolio
Blog
Footers
Maps
Contact


Class Parametrics
Inheritance
Inherited Members
Namespace: CADability
Assembly: CADability.dll
Syntax
public class Parametrics
Constructors
| Improve this Doc View SourceParametrics(Shell)
Declaration
public Parametrics(Shell shell)
Parameters
| Type | Name | Description |
|---|---|---|
| Shell | shell |
Methods
| Improve this Doc View SourceModifyFilletRadius(Face[], Double)
A fillet is to be modified with a new radius. Th parameter toModify
contains all relevant faces, which are either
faces where the surface is a CADability.GeoObject.ISurfaceOfArcExtrusion or a SphericalSurface. There is no need to follow
these faces, the caller is responsible for this.
Declaration
public bool ModifyFilletRadius(Face[] toModify, double newRadius)
Parameters
| Type | Name | Description |
|---|---|---|
| Face[] | toModify | |
| System.Double | newRadius |
Returns
| Type | Description |
|---|---|
| System.Boolean | true, if possible (but not guaranteed to be possible) |
ModifyRadius(Face, Double)
For faces on CylindricalSurface, ToroidalSurface, (maybe not SphericalSurface maybe some swept curve surface) this face should change its radius resp. MinorRadius.
When it is tangential in the direction of the circle to other faces (like a rounded edge is tangential to the faces of the original edge), then its position will be changed, so that it is still tangential to these faces (i.e. changing the radius of a rounded edge).
When it is tangential in the other direction (e.g. a cylinder followed by a torus segment, in a pipe or at multiple rounded edges) these tangential faces also change their radius and move to the same axis as their predecessor.
Declaration
public bool ModifyRadius(Face toModify, double newRadius)
Parameters
| Type | Name | Description |
|---|---|---|
| Face | toModify | a face from the original shell |
| System.Double | newRadius | the new radius of the surface |
Returns
| Type | Description |
|---|---|
| System.Boolean |
MoveFace(Face, GeoVector)
the provided face should be moved by the provided offset. All tangentially connected faces are moved with this face. This is the preparation and can be called multiple times with different faces and different offsets. Finally call Result(out HashSet<Face>) for the modified shell.
Declaration
public void MoveFace(Face toMove, GeoVector offset)
Parameters
| Type | Name | Description |
|---|---|---|
| Face | toMove | |
| GeoVector | offset |
MoveFaces(Dictionary<Face, GeoVector>, GeoVector)
Specifies the faces which should be moved or kept on its place. Faces to be moved kept on its place have a null-vector as the value
in the provided dictionary toMove
. Other faces must be moved according to the provided vector.
Typically there are two vectors as values of toMove
: one is the null-vector, the other one the movement, or both
are the half movement in opposite directions. The mainMovement
is used to keep faces in place, which have surfaces
that are invariant in this direction.
Declaration
public void MoveFaces(Dictionary<Face, GeoVector> toMove, GeoVector mainMovement)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Collections.Generic.Dictionary<Face, GeoVector> | toMove | |
| GeoVector | mainMovement |
Result(out HashSet<Face>)
Declaration
public Shell Result(out HashSet<Face> involvedFaces)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Collections.Generic.HashSet<Face> | involvedFaces |
Returns
| Type | Description |
|---|---|
| Shell |


{% extends "admin/base.html" %} {% block body %} {%if p.message%}
Are you sure you want to delete?
public url: {{ public.url }}


Consultation outcome
The government response to this consultation was published as part of the response to the consultation on the ‘Special educational needs and disability (SEND) code of practice and regulations’ .
This consultation ran from
to
We're seeking views on specific amendments to the 'Special educational needs and disability (SEND) code of practice: 0 to 25 years'.
PDF , 2.04MB , 253 pages
We launched a public consultation on a new ‘Special educational needs and disability ( SEND ) code of practice: 0 to 25 years’ in autumn 2013. This closed on 9 December 2013 and over 700 responses were received.
To make sure that the revised code is clear and easy to understand, we have:
We’re now consulting on the revised draft of the code of practice and invite your views on a set of specific questions.
Published: 16 April 2014


Functions on two modulation signals, as well as functions on their triggers.
- Signal A and B
- The two input signals
- Operation
- This is the output function of A and B's signals.
- +
- min(A + B, 1)
- -
- max(A - B, 0). By setting A = 0, you can use this to negate B.
- x
- A x B
- min
- min(A, B)
- max
- max(A, B)
- square
- min(A x A + B, 1)
- sqrt
- min(sqrt(A) + B, 1)
- cube
- min(A x A x A + B, 1)
- discretize
- Discretizes A, using B to set the amount of discretization (from 1 to 128 chunks).
- map hi
- A x (1 - B) + B
- average
- (A + B) / 2
- threshold
- If A >= B, 1 else 0
- switch
- If B was more recently triggered than A, then B else A
- Trigger On
- This indicates how the output should trigger wh
en receiving triggers from A and/or B.
- A
- Triggers on A's trigger only
- A or B
- Triggers on A's trigger or B's trigger
- A and B
- Trigger only when A and B trigger simultaneously
- A and not B
- Trigger only when A is triggering but not B
- 2 A ... 192 A
- A rate divider. Triggers every n triggers of A. This is particularly useful in conjunction with MIDI Clock information from the MIDI In module.
- dir
- Triggers when A's value changes direction.
- center
- Triggers when A's value crosses the center line (0.5).
Dividing a Clock Pulse
If you're dividing the trigger, the following table might be useful:
- 1
- Eighth Triplet (Triplet 64th Note)
- 2
- Quarter Triplet (Triplet 32nd Note)
- 3
- Thirty-Second Note
- 4
- Half Triplet (Triplet 16th Note)
- 6
- Sixteenth Note
- 8
- Triplet
- 12
- Eighth Note
- 16
- Quarter Note Triplet
- 18
- Dotted Eighth Note
- 24
- Quarter Note
- 32
- Half Note Triplet
- 36
- Dotted Quarter Note
- 48
- Half Note
- 64
- Whole Note Triplet
- 72
- Dotted Half Note
- 96
- Whole Note
- 144
- Dotted Whole Note
- 192
- Double Whole Note


Preparation time
less than 30 mins
Cooking time
10 to 30 mins
Serves
Serves 4
For the burger, heat a frying pan until hot, add the olive oil and onion and cook until the onion is softened, but not coloured. Remove from the heat and allow to cool slightly.
Place the beef mince, chillies, flatleaf parsley, salt and freshly ground black pepper and cooled cooked onion into a large bowl and mix thoroughly.
Divide the mixture into four equal portions. Wrap each portion of burger mixture around a piece of the cheese and mould to form a burger shape. Be careful that no cheese is exposed.
Heat a griddle pan until hot, add the burgers and cook for 4-6 minutes on each side, or until the meat is just cooked through. Remove from the pan and leave to rest in a warm place for 2-3 minutes.
Meanwhile, place the burger buns cut side-down onto the griddle pan and toast for one minute, until hot.
For the skinny fries, heat the oil in a deep heavy-based pan until a breadcrumb sizzles and turns brown when dropped into it. (CAUTION: Hot oil can be dangerous. Do not leave unattended.)
Add the potato strips to the oil in batches and fry for 3-4 minutes, or until golden-brown and crisp. Remove with a slotted spoon and drain onto kitchen paper.
For the chilli sweetcorn relish, bring a large pan of salted water to the boil. Add the corn on the cobs and boil for 7-8 minutes, or until tender.
Drain the corn on the cobs and allow to cool slightly. Once cool enough to handle, slice the kernels off the cob into a bowl.
Add the butter and chilli and mix well until the butter has melted. Sprinkle with lime juice and season, to taste, with salt and freshly ground black pepper.
To serve, place the bottom half of each bun onto a plate. Top each with some Little Gem leaves and a couple of tomato slices, then add a burger. Top each burger with the other half of the bun.
Place a handful of fries alongside and finish with a spoonful of the chilli sweetcorn relish.


SUBSCRIBE FOR NEWSLETTER
This is part of DataBuffer and GoogleSheetAPI, All emails are stored in Google Sheet, and sheet does not disclouser to any third parties.
Email
SUBSCRIBE
LOGS


Numbers 22:14
And the princes of Moab rose up, and they went unto Balak, and said, Balaam refuseth to come with us.


L monotone What is being monotone for a polygon? What is being monotone for a polygon? Duality What is duality for 2D? What is duality for 2D? Checking line for stabbery? Checking line for stabbery? Smallest Enclosing Disk Smallest Enclosing Disk Smallest Enclosing Disk


THE BIRDCAGE A film review by Christopher Null Copyright 1996 Christopher Null
It's a rare event when a remake of a film rivals the greatness of the original. THE BIRDCAGE, based fairly closely on LA CAGE AUX FOLLES, achieves just that, memorably updating the earlier film's script with modern humor and a distinctly American setting.
The story has been done a thousand times, but LA CAGE AUX FOLLES was one of the originals.  Albert (Nathan Lane, best known as the voice of the weasel in THE LION KING), aka Starina, is Armand's feature performer...and his "wife." When Armand's son-via-one-night-stand Val announces his impending marriage to Barbara (a dead ringer for Audrey Hepburn), Armand freaks. When Barbara's arch-conservative parents (Gene Hackman and Dianne Wiest) drop by for a visit, it gets even worse.
The most choice parts of the story involve Albert's attempt at transforming his very non-butch persona into a faux "man," from his John Wayne swagger to his mustard-spreading technique. In the process, Lane manages to do what has heretofore been impossible: to upstage Robin Williams, who plays a distant second (or even third) fiddle to his costars. The potential second is an almost unrecognizable Hank Azaria as the couple's unbearably hilarious Guatemalan house boy.
Of course, bits and pieces are lacking in THE BIRDCAGE, most notably stuck-on subplots involving Val's real mother (Christine Baranski) and the tabloids coming after the gang, but on the whole the film is a hilarious modernization of its acclaimed predecessor.
And while THE BIRDCAGE isn't really what I'd call insulting to any particular group, don't expect any political correctness awards to be handed out for the film. Instead, just expect to hear a whole lot of light-hearted laughter.
RATING: ****
\-------------------------------\ |* Unquestionably awful | |** Sub-par on many levels | |*** Average, hits and misses | |**** Good, memorable film | |***** Perfection | \-------------------------------\
-Christopher Null /<EMAIL_ADDRESS>-Screenwriter / Novelist / Publisher -Visit the Movie Emporium at http://cca2.carrington.com/emporium/ -and e-mail requests to join the movie review mailing list
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


{{.content | markdownify}}
{{ end }}{{ .content | markdownify }}
{{.designation }}
{{.duration}}
{{.text1}}
{{.text2}}
{{.year}}
{{.academy}}
{{ .text1 }}
Design Systems
User Experience
Interaction Design
Wireframing
Rapid Prototyping
UX Research
Interusability
Accessibility
UX Writing
Figma
Sketch
Invision
Abstract
Zeplin
Miro
Fullstory
HTML/CSS
3D modeling and animation
English
Bengali
Spanish
Embroidery
Photography


bit bang
`Prev `__
B
`Next `__
--------------
**bit bang**: n.
Transmission of data on a serial line, when accomplished by rapidly
tweaking a single output bit, in software, at the appropriate times. The
technique is a simple loop with eight OUT and SHIFT instruction pairs
for each byte. Input is more interesting. And full duplex (doing input
and output at the same time) is one way to separate the real hackers
from the `*wannabee* <../W/wannabee.html>`__\ s.
Bit bang was used on certain early models of Prime computers, presumably
when UARTs were too expensive, and on archaic Z80 micros with a Zilog
PIO but no SIO. In an interesting instance of the `*cycle of
reincarnation* <../C/cycle-of-reincarnation.html>`__, this technique
returned to use in the early 1990s on some RISC architectures because it
consumes such an infinitesimal part of the processor that it actually
makes sense not to have a UART. Compare `*cycle of
reincarnation* <../C/cycle-of-reincarnation.html>`__. Nowadays it's used
to describe I2C, a serial protocol for monitoring motherboard hardware.
--------------
+------------------------+----------------------------+--------------------------------+
| `Prev `__ | `Up <../B.html>`__ | `Next `__ |
+------------------------+----------------------------+--------------------------------+
| bit | `Home <../index.html>`__ | bit bashing |
+------------------------+----------------------------+--------------------------------+


click to begin!
the sound isnt working pls fix ur device to support mp3/ogg audio formats! :)
Piano Keys!
Click on keys a,s,d,f,g,h,j to create some music!! (LOWERCASE!!!!)
or hover on this square to play some music :D
to play twinkle twinkle, press on AAGGHHGFFDDSSA !


PySpark UDFs
2020-09-15
5 minutes
These are some of my notes on creating UDFs (user defined functions) in PySpark.
UDFs are super useful for anyone doing feature engineering or ETL work. They help break down the workflow by keeping your PySpark code modular. This makes it easy to perform unit testing (since you’re working with modular components that build up to the entire ETL workflow).
Here I show how to create a PySpark UDF which uses,
- a single column
- multiple columns
- an external library function
- aggregation by packing columns in to a list.
(All code shown below uses PySpark 3.0.1.)
To start, I generate some data that I’ll use to illustrate all of the UDF constructions I mentioned above.
import pandas as pd
import numpy as np
from pyspark.sql import SparkSession
# needed for udfs
from pyspark.sql.functions import udf, lit, collect_list
from pyspark.sql.types import *
spark = SparkSession.builder.appName('udf_tutorial').getOrCreate()
N = 100
data = {'identifier': np.random.choice([1,2,3,4,5], N, replace=True),
'var1': np.random.normal(3, 3, N),
'var2': np.random.choice(['Y','N'], N, replace=True)}
df = pd.DataFrame(data)
print(df)
This produces the following table.
identifier var1 var2
0 2 -0.015862 N
1 5 3.792773 N
2 4 2.653766 Y
3 2 -2.231594 Y
4 3 4.900761 N
.. ... ... ...
95 2 5.026429 Y
96 5 3.123079 Y
97 1 1.880323 N
98 3 -6.005374 Y
99 5 1.074175 N
Before diving into the different UDFs it’s worth outlining what the workflow ill look like. Typically the process of creating/using a UDF goes something like this:
- Define your function in Python.
- Register your function with Spark and specify the return type. (See this code possible return types.)
- Apply your UDF to your Spark data frame.
- Breathe.
Single Column
Here I’m creating a UDF that takes a single column and an external parameter as arguments. First I define the function. In this example, the function returns the product between each element of the column and the parameter we provide. I’m using try/except statements for better error handling.
The lit
function will be used to provide the parameter argument as a string, which means it needs to be converted to a float in order to be used for the mathematical operation.
def udf_sc(v1, a):
try:
a = float(a)
return(v1 * a)
except:
return(None)
Now I register the UDF a specify the return type as FloatType()
.
udf_sc_reg = udf(udf_sc, FloatType())
Now I can use the UDF with the Spark data frame created above.
sdf_transformed = sdf.withColumn('var3', udf_sc_reg('var1', lit('2')))
sdf_transformed.show(5)
+----------+--------------------+----+------------+
|identifier| var1|var2| var3|
+----------+--------------------+----+------------+
| 2|-0.01586150202926495| N|-0.031723004|
| 5| 3.7927732716658635| N| 7.5855465|
| 4| 2.653765608323036| Y| 5.3075314|
| 2| -2.231594107013259| Y| -4.463188|
| 3| 4.900761231566397| N| 9.801522|
+----------+--------------------+----+------------+
Multiple Columns
The approach is similar if multiple columns are needed in the UDF. Here the UDF has more complicated conditional statements.
def udf_mc(v1, v2):
try:
if v2 == 'N':
a = -0.5
elif v2 == 'Y':
a = 0.5
else:
a = None
return(v1 + a)
except:
return(None)
udf_mc_reg = udf(udf_mc, FloatType())
sdf_transformed = sdf.withColumn('var3', udf_mc_reg('var1','var2'))
sdf_transformed.show(5)
+----------+--------------------+----+----------+
|identifier| var1|var2| var3|
+----------+--------------------+----+----------+
| 2|-0.01586150202926495| N|-0.5158615|
| 5| 3.7927732716658635| N| 3.2927732|
| 4| 2.653765608323036| Y| 3.1537657|
| 2| -2.231594107013259| Y|-1.7315941|
| 3| 4.900761231566397| N| 4.400761|
+----------+--------------------+----+----------+
External Library
Sometimes it’s useful to use a function provided by an external library (e.g. numpy, scipy, etc). It’s pretty straightforward to do this. You just provide the function in your UDF. However, if you’re working in a distributed setup you’ll need to have the library installed on every node in the cluster (not just the main node).
Here I use the expit
(inverse logit) function in the scipy library to transform the var1
column. The result is returned as an array (just a lil flex) containing both the original value and the transformed value. The type returned by expit
(numpy.float64
) is converted to a base Python float since it needs to match PySpark’s FloatType()
type.
from scipy.special import expit
def udf_el(v1):
try:
inv_logit = float(expit(v1))
return([v1, inv_logit])
except:
return(None)
udf_el_reg = udf(udf_el, ArrayType(FloatType()))
sdf_transformed = sdf.withColumn('var3', udf_el_reg('var1'))
sdf_transformed.show(5)
+----------+--------------------+----+--------------------+
|identifier| var1|var2| var3|
+----------+--------------------+----+--------------------+
| 2|-0.01586150202926495| N|[-0.015861502, 0....|
| 5| 3.7927732716658635| N|[3.7927732, 0.977...|
| 4| 2.653765608323036| Y|[2.6537657, 0.934...|
| 2| -2.231594107013259| Y|[-2.231594, 0.096...|
| 3| 4.900761231566397| N|[4.900761, 0.9926...|
+----------+--------------------+----+--------------------+
Custom Aggregate
At the time of writing this, it’s not possible to implement UDAFs (user defined aggregate functions) the way one can in Spark. The work around is to implement them by collecting all the elements of a group into a list using collect_list
and then applying a UDF to each groups' list.
In the code below I take things a little further (another flex) and return an array of different types (using StructType()
and StructField()
). Another option when returning an array would be to force everything to a single type and convert it back to the appropriate type when you flatten that array to a data frame later on.
def udf_ca(x):
try:
return([int(len(x)), float(np.mean(x))])
except:
return(None)
schema = StructType([StructField('length', IntegerType(), False),
StructField('mean', FloatType(), False)])
udf_ca_reg = udf(udf_ca, schema)
sdf_transformed = sdf.groupBy('identifier').agg(collect_list('var1').alias('var1_list')).select(udf_ca_reg('var1_list').alias('gpd_metrics'))
sdf_transformed.show(truncate=False)
+---------------+
|gpd_metrics |
+---------------+
|[18, 2.6149726]|
|[18, 2.82972] |
|[23, 2.8389266]|
|[17, 2.7891133]|
|[24, 3.4916883]|
+---------------+
sdf_transformed.printSchema()
root
|-- gpd_metrics: struct (nullable = true)
| |-- length: integer (nullable = false)
| |-- mean: float (nullable = false)
857 Words


public class Animator
extends java.lang.Object
| Constructor and Description |
|---|
Animator() |
| Modifier and Type | Method and Description |
|---|---|
static void |
animateMainScreen(javafx.scene.layout.VBox inputPanel,
javafx.scene.layout.VBox viewPanel,
javafx.scene.layout.StackPane menuBarPanel,
boolean enter,
javafx.animation.Animation animation,
javafx.event.EventHandler<javafx.event.ActionEvent> onFinished)
Animates main screen.
|
static javafx.animation.Animation |
bouncingScale(double startDelay,
double stepDuration,
double startScale,
double midScale,
double endScale,
javafx.event.EventHandler<javafx.event.ActionEvent> onFinished,
java.util.List<? extends javafx.scene.Node> nodes)
Creates and returns scaling animation of given nodes in a sequential transition within two steps as follows;
First step: Scales node from
startScale to midScale ,
Second step: Scales node from midScale to endScale . |
static javafx.animation.Animation |
bouncingScale(double startDelay,
double stepDuration,
double startScale,
double midScale,
double endScale,
javafx.event.EventHandler<javafx.event.ActionEvent> onFinished,
javafx.scene.Node... nodes)
Creates and returns scaling animation of given nodes in a sequential transition within two steps as follows;
First step: Scales node from
startScale to midScale ,
Second step: Scales node from midScale to endScale . |
static javafx.animation.Animation |
fade(boolean isFadeIn,
double startDelay,
double stepDuration,
javafx.event.EventHandler<javafx.event.ActionEvent> onFinished,
javafx.scene.Node... nodes)
Creates and returns sequential fade animation sequence.
|
public static javafx.animation.Animation bouncingScale(double startDelay, double stepDuration, double startScale, double midScale, double endScale, javafx.event.EventHandler<javafx.event.ActionEvent> onFinished, java.util.List<? extends javafx.scene.Node> nodes)
startScale
to midScale
,
midScale
to endScale
.
startDelay
- Start delay in milliseconds.stepDuration
- Step duration in milliseconds.startScale
- Scaling factor at animation start.midScale
- Scaling factor at the end of first animation step.endScale
- Scaling factor at animation end.onFinished
- Event handler to be notified when animation ends.nodes
- List containing the animated nodes of the screen. Note that, nodes will be animated in given order.public static javafx.animation.Animation bouncingScale(double startDelay, double stepDuration, double startScale, double midScale, double endScale, javafx.event.EventHandler<javafx.event.ActionEvent> onFinished, javafx.scene.Node... nodes)
startScale
to midScale
,
midScale
to endScale
.
startDelay
- Start delay in milliseconds.stepDuration
- Step duration in milliseconds.startScale
- Scaling factor at animation start.midScale
- Scaling factor at the end of first animation step.endScale
- Scaling factor at animation end.onFinished
- Event handler to be notified when animation ends.nodes
- Array containing the animated nodes of the screen. Note that, nodes will be animated in given order.public static javafx.animation.Animation fade(boolean isFadeIn, double startDelay, double stepDuration, javafx.event.EventHandler<javafx.event.ActionEvent> onFinished, javafx.scene.Node... nodes)
isFadeIn
- True to fade in, false for fade out.startDelay
- Start delay in milliseconds.stepDuration
- Step duration in milliseconds.onFinished
- Event handler to be notified when animation ends.nodes
- Array containing the animated nodes of the screen. Note that, nodes will be animated in given order.public static void animateMainScreen(javafx.scene.layout.VBox inputPanel, javafx.scene.layout.VBox viewPanel, javafx.scene.layout.StackPane menuBarPanel, boolean enter, javafx.animation.Animation animation, javafx.event.EventHandler<javafx.event.ActionEvent> onFinished)
inputPanel
- Input panel.viewPanel
- View panel.menuBarPanel
- Menu bar panel.enter
- True if components should enter the main screen.animation
- Animation to be played in parallel to main screen animation. Can be null.onFinished
- Event handler to be notified when animation ends. Can be null.


| 1 |
//
|
|
| 2 |
// ChatLayout
|
|
| 3 |
// CellLayoutContainerView.swift
|
|
| 4 |
// https://github.com/ekazaev/ChatLayout
|
|
| 5 |
//
|
|
| 6 |
// Created by Eugene Kazaev in 2020-2021.
|
|
| 7 |
// Distributed under the MIT license.
|
|
| 8 |
//
|
|
| 9 |
|
|
| 10 |
import Foundation
|
|
| 11 |
import UIKit
|
|
| 12 |
|
|
| 13 |
/// Alignment for `CellLayoutContainerView` that corresponds to `UIStackView.Alignment`
|
|
| 14 |
public enum CellLayoutContainerViewAlignment {
|
|
| 15 |
|
|
| 16 |
/// Align the top and bottom edges of horizontally stacked items tightly to the container.
|
|
| 17 |
case fill
|
|
| 18 |
|
|
| 19 |
/// Align the top edges of horizontally stacked items tightly to the container.
|
|
| 20 |
case top
|
|
| 21 |
|
|
| 22 |
/// Center items in a horizontal stack vertically.
|
|
| 23 |
case center
|
|
| 24 |
|
|
| 25 |
/// Align the bottom edges of horizontally stacked items tightly to the container.
|
|
| 26 |
case bottom
|
|
| 27 |
|
|
| 28 |
fileprivate var stackAlignment: UIStackView.Alignment {
|
! |
| 29 |
switch self {
|
! |
| 30 |
case .fill: return .fill
|
! |
| 31 |
case .top: return .top
|
! |
| 32 |
case .center: return .center
|
! |
| 33 |
case .bottom: return .bottom
|
! |
| 34 |
}
|
! |
| 35 |
}
|
! |
| 36 |
|
|
| 37 |
}
|
|
| 38 |
|
|
| 39 |
/// `CellLayoutContainerView` is a container view that helps to arrange the views in a horizontal cell-alike layout with an optional `LeadingAccessory` first,
|
|
| 40 |
/// a `CustomView` next and am optional `TrailingAccessory` last. Use `VoidViewFactory` to specify that `LeadingAccessory` or `TrailingAccessory` views should not be
|
|
| 41 |
/// allocated.
|
|
| 42 |
public final class CellLayoutContainerView<LeadingAccessory: StaticViewFactory, CustomView: UIView, TrailingAccessory: StaticViewFactory>: UIView {
|
|
| 43 |
|
|
| 44 |
/// Leading accessory view.
|
|
| 45 |
public lazy var leadingView: LeadingAccessory.View? = LeadingAccessory.buildView(within: bounds)
|
|
| 46 |
|
|
| 47 |
/// Main view.
|
|
| 48 |
public lazy var customView = CustomView(frame: bounds)
|
|
| 49 |
|
|
| 50 |
/// Trailing accessory view.
|
|
| 51 |
public lazy var trailingView: TrailingAccessory.View? = TrailingAccessory.buildView(within: bounds)
|
|
| 52 |
|
|
| 53 |
/// Alignment that corresponds to `UIStackView.Alignment`
|
|
| 54 |
public var alignment: CellLayoutContainerViewAlignment = .center {
|
! |
| 55 |
didSet {
|
! |
| 56 |
stackView.alignment = alignment.stackAlignment
|
! |
| 57 |
}
|
! |
| 58 |
}
|
|
| 59 |
|
|
| 60 |
/// Default spacing between the views.
|
|
| 61 |
public var spacing: CGFloat {
|
|
| 62 |
get {
|
! |
| 63 |
return stackView.spacing
|
! |
| 64 |
}
|
! |
| 65 |
set {
|
! |
| 66 |
stackView.spacing = newValue
|
! |
| 67 |
}
|
! |
| 68 |
}
|
|
| 69 |
|
|
| 70 |
/// Custom spacing between the leading and main views.
|
|
| 71 |
public var customLeadingSpacing: CGFloat {
|
|
| 72 |
get {
|
! |
| 73 |
guard let leadingView = leadingView else {
|
! |
| 74 |
return 0
|
! |
| 75 |
}
|
! |
| 76 |
return stackView.customSpacing(after: leadingView)
|
! |
| 77 |
}
|
! |
| 78 |
set {
|
! |
| 79 |
guard let leadingView = leadingView else {
|
! |
| 80 |
return
|
! |
| 81 |
}
|
! |
| 82 |
return stackView.setCustomSpacing(newValue, after: leadingView)
|
! |
| 83 |
}
|
! |
| 84 |
}
|
|
| 85 |
|
|
| 86 |
/// Custom spacing between the main and trailing views.
|
|
| 87 |
public var customTrailingSpacing: CGFloat {
|
|
| 88 |
get {
|
! |
| 89 |
return stackView.customSpacing(after: customView)
|
! |
| 90 |
}
|
! |
| 91 |
set {
|
! |
| 92 |
return stackView.setCustomSpacing(newValue, after: customView)
|
! |
| 93 |
}
|
! |
| 94 |
}
|
|
| 95 |
|
|
| 96 |
private let stackView = UIStackView()
|
! |
| 97 |
|
|
| 98 |
/// Initializes and returns a newly allocated view object with the specified frame rectangle.
|
|
| 99 |
/// - Parameter frame: The frame rectangle for the view, measured in points. The origin of the frame is relative
|
|
| 100 |
/// to the superview in which you plan to add it.
|
|
| 101 |
public override init(frame: CGRect) {
|
! |
| 102 |
super.init(frame: frame)
|
! |
| 103 |
setupSubviews()
|
! |
| 104 |
}
|
! |
| 105 |
|
|
| 106 |
/// Returns an object initialized from data in a given unarchiver.
|
|
| 107 |
/// - Parameter coder: An unarchiver object.
|
|
| 108 |
public required init?(coder: NSCoder) {
|
! |
| 109 |
super.init(coder: coder)
|
! |
| 110 |
setupSubviews()
|
! |
| 111 |
}
|
! |
| 112 |
|
|
| 113 |
private func setupSubviews() {
|
! |
| 114 |
translatesAutoresizingMaskIntoConstraints = false
|
! |
| 115 |
insetsLayoutMarginsFromSafeArea = false
|
! |
| 116 |
layoutMargins = .zero
|
! |
| 117 |
|
! |
| 118 |
stackView.axis = .horizontal
|
! |
| 119 |
stackView.alignment = alignment.stackAlignment
|
! |
| 120 |
stackView.spacing = spacing
|
! |
| 121 |
stackView.translatesAutoresizingMaskIntoConstraints = false
|
! |
| 122 |
addSubview(stackView)
|
! |
| 123 |
|
! |
| 124 |
stackView.leadingAnchor.constraint(equalTo: layoutMarginsGuide.leadingAnchor).isActive = true
|
! |
| 125 |
stackView.trailingAnchor.constraint(equalTo: layoutMarginsGuide.trailingAnchor).isActive = true
|
! |
| 126 |
stackView.topAnchor.constraint(equalTo: layoutMarginsGuide.topAnchor).isActive = true
|
! |
| 127 |
stackView.bottomAnchor.constraint(equalTo: layoutMarginsGuide.bottomAnchor).isActive = true
|
! |
| 128 |
|
! |
| 129 |
if let leadingAccessoryView = leadingView {
|
! |
| 130 |
stackView.addArrangedSubview(leadingAccessoryView)
|
! |
| 131 |
leadingAccessoryView.translatesAutoresizingMaskIntoConstraints = false
|
! |
| 132 |
}
|
! |
| 133 |
|
! |
| 134 |
stackView.addArrangedSubview(customView)
|
! |
| 135 |
customView.translatesAutoresizingMaskIntoConstraints = false
|
! |
| 136 |
|
! |
| 137 |
if let trailingAccessoryView = trailingView {
|
! |
| 138 |
stackView.addArrangedSubview(trailingAccessoryView)
|
! |
| 139 |
trailingAccessoryView.translatesAutoresizingMaskIntoConstraints = false
|
! |
| 140 |
}
|
! |
| 141 |
}
|
! |
| 142 |
|
|
| 143 |
}
|
|


Our motivation for this project was to take all the information that we built on in CS109 and use the Spotify Million Playlists Dataset and the Spotify API to create a playlist extension tool. A user should be able to use the tool to input a playlist and get song suggestions that extend that playlist with similar songs to enjoy, the idea being that they fit in with the playlist.
We did this in a three step process - the first involved loading the dataset and downloading all of the features using the Spotify API (see the EDA for more details). Following this, we implemented a pooling model that pooled the various artist genres that were present, after which we vectorized the different features for every song that we had data for and used a cosine similarity matrix to measure the features against each other. After standardizing these, both models together gave a recommendation of all the possible songs that would extend the playlist.
Spotify currently uses three different algorithms to detect your songs: They first use a collaborative filtering model (think back to when you gave a song a "thumbs-up" on Pandora) to get pool together the likes of different people and create different songs within a specific category. This is called "Collaborative Filtering"
The second type of algorithm is called Natural Language Processing. In a nutshell, Spotify takes a track's metadata and the verbiage around the internet, and assigns a score to each song based on the metadata and how relevant it might be to other songs.
Lastly, they use an audio model. For songs that are up-and coming and new, Spotify will analyze the audio using a CNN and categorize it as based on how close it is to other songs. This means that new songs are able to be discovered.
For more information about these, head on over to Medium for more info.


Class com.gildedrose.GildedRoseTest
|
100%
successful |
Tests
| Test | Duration | Result |
|---|---|---|
| AB_qual_0() | 0.001s | passed |
| AB_qual_0_49() | 0s | passed |
| AB_qual_0_50() | 0.001s | passed |
| AB_qual_neg() | 0.035s | passed |
| AB_qual_pos() | 0.001s | passed |
| AB_qual_pos_50() | 0.001s | passed |
| AB_sell_0() | 0.002s | passed |
| AB_sell_neg() | 0.001s | passed |
| AB_sell_pos() | 0.001s | passed |
| BS_qual_0() | 0s | passed |
| BS_qual_0_49() | 0s | passed |
| BS_qual_10() | 0.001s | passed |
| BS_qual_10_plus50() | 0.001s | passed |
| BS_qual_5() | 0s | passed |
| BS_qual_5_plus50() | 0s | passed |
| BS_qual_entre_10_5() | 0s | passed |
| BS_qual_entre_10_5_plus50() | 0.001s | passed |
| BS_qual_inf_5() | 0.001s | passed |
| BS_qual_inf_5_49() | 0.001s | passed |
| BS_qual_neg() | 0s | passed |
| BS_qual_neg_plus50() | 0s | passed |
| BS_qual_sup10() | 0.001s | passed |
| BS_qual_sup10_plus50() | 0.001s | passed |
| BS_sell_0() | 0.001s | passed |
| BS_sell_neg() | 0s | passed |
| BS_sell_pos() | 0.001s | passed |
| Conjured_qual_0() | 0s | passed |
| Conjured_qual_neg() | 0.001s | passed |
| Conjured_qual_pos() | 0s | passed |
| Conjured_sell_0() | 0s | passed |
| Conjured_sell_neg() | 0s | passed |
| Conjured_sell_pos() | 0s | passed |
| Sulfuras_qual_0() | 0.001s | passed |
| Sulfuras_qual_neg() | 0.001s | passed |
| Sulfuras_qual_pos() | 0.001s | passed |
| Sulfuras_sell_0() | 0.001s | passed |
| Sulfuras_sell_neg() | 0s | passed |
| Sulfuras_sell_pos() | 0s | passed |
| Whatever_qual_0() | 0.001s | passed |
| Whatever_qual_neg1() | 0s | passed |
| Whatever_qual_neg1htd() | 0.002s | passed |
| Whatever_qual_neg2() | 0s | passed |
| Whatever_qual_pos() | 0.001s | passed |
| Whatever_sell_0() | 0.001s | passed |
| Whatever_sell_neg() | 0.001s | passed |
| Whatever_sell_pos() | 0.005s | passed |


HTBAC: High-Throughput Binding Affinity Calculator¶
The Ensemble Toolkit is a Python library for developing and executing large-scale free energy binding protocols. HTBAC is a co-design project developed by the RADICAL Research Group at Rutgers University and Center for Computational Sciences Group at University College London.
HTBAC is released under the MIT License.
More details about the science enabled by HTBAC can be found in the following publications:
- “Concurrent and Adaptive Extreme Scale Binding Free Energy Calculations.” Jumana Dakka, Kristof Farkas-Pall, Matteo Turilli, David W Wright, Peter V Coveney, and Shantenu Jha. 2018 IEEE 14th International Conference on eScience. (https://arxiv.org/pdf/1801.01174.pdf)
- Enabling Trade-off Between Accuracy and Computational Cost: Adaptive Algorithms to Reduce Time to Clinical Insight. SCALE Award Winner, 18th IEEE/ACM International Symposium on Cluster, Cloud and Grid Computing (CCGrid 2018).(http://ccs.chem.ucl.ac.uk/sites/ccs.chem.ucl.ac.uk/files/scale2018-ccgrid.pdf)
- “High-Throughput Binding affinity Calculations at Extreme Scales.” Jumana Dakka, Matteo Turilli, David W Wright, Stefan J Zasada, Vivek Balasubramanian, Shunzhou Wan, Peter V Coveney, and Shantenu Jha. Computational Approaches for Cancer Workshop at IEEE SuperComputing (CAFCW- 2017). (https://arxiv.org/abs/1712.09168)
Project Github Page: https://github.com/radical-cybertools/htbac


Python Quick Start¶
Run Python program¶
Python syntax can be executed by writing directly in the Command Line:
>>> print("Hello, World!")
Hello, World!
Or by creating a python file on the server, using the .py file extension, and running it in the Command Line:
C:\Users\Your Name>python myfile.py
myfile.py:
#This is a comment
print("Hello, World!")
Built-in Data Types¶
Variables can store data of different types, and different types can do different things.
Python’s built-in data types by default, in these categories:
Text Type: str
Numeric Types: int, float, complex
Sequence Types: list, tuple, range
Mapping Type: dict
Set Types: set, frozenset
Boolean Type: bool
Binary Types: bytes, bytearray, memoryview
Getting the Data Type¶
You can get the data type of any object by using the type() function:
Type Casting¶
Casting in python is done using constructor functions:
int() - constructs an integer number from an integer literal, a float literal
by rounding down to the previous whole number), or a string literal
(providing the string represents a whole number)
float() - constructs a float number from an integer literal, a float literal
or a string literal (providing the string represents a float or an
integer)
str() - constructs a string from a wide variety of data types, including
strings, integer literals and float literals
Example¶
Integers:
x = int(1) # x will be 1
y = int(2.8) # y will be 2
Floats:
x = float(1) # x will be 1.0
y = float(2.8) # y will be 2.8
Python Collections¶
List¶
A list is a collection which is ordered and changeable. In Python list elements are written with square brackets.
Create a List:
list1 = ["Papa Rui", "Inuit", "Tibetan"]
print(list1)
You access the list items by referring to the index number:
# Print the second item of the list:
list1 = ["Papa Rui", "Inuit", "Tibetan"]
print(list1[1])
Negative Indexing
Negative indexing means beginning from the end, -1 refers to the last item, -2 refers to the second last item etc.
# Print the last item of the list:
list1 = ["apple", "banana", "cherry"]
print(list1[-1])
Range of Indexes
You can specify a range of indexes by specifying where to start and where to end the range.
When specifying a range, the return value will be a new list with the specified items.
list1 = ["apple", "banana", "cherry", "orange", "kiwi", "melon", "mango"]
# Return the third, fourth, and fifth item:
print(list1[2:5])
# This example returns the items from "cherry" and to the end:
print(list1[2:])
# This example returns the items from index -4 (included) to index -1 (excluded)
print(list1[-4:-1])
Tuple¶
A tuple is a collection which is ordered and unchangeable. In Python tuples are written with round brackets. (Vector)
# Return the third, fourth, and fifth item:
tuple1 = ("apple", "banana", "cherry", "orange", "kiwi", "melon", "mango")
print(tuple1[2:5])
# this is another powerful feature of Python
# x = 3, ...
x, y, z = 3, 4, 5
a = (x, y, z, 1)
# a: (3, 4, 5, 1)
Map (Python Dict)¶
A collection which is unordered, changeable and indexed
dict1 = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
# change value
dict1["year"] = 2018
# Loop Through a Dictionary
'''
model
brand
year
'''
for x in dict1:
print(x)
# check if key exists
if "model" in dict1:
print("Yes, 'model' is one of the keys in the dictionary")
Set¶
A set is a collection which is unordered and un-indexed. In Python, sets are written with curly brackets.
And More¶
More things you may want to know:
Lambda, RegEx, Class, Module, Math, Pip …
Resource: ptyon.org, especially the Beginner’s Guide
Exercise¶
Time for fun…
Task 1: Fibonacci Number¶
Have user input a number n, then print the n-th Fibonacci number.
Tip 1:
Pick the user input:
# Return is the user input
input("Message goes here")
Tip 2:
For loop:
for x in range(1, n)
print(x)
While loop:
while true
if x >= n:
break
For Beginner:
According to some questions from beginners, if this is the first time of one reading a program, who may still feel confused about the source code. There are some knowledge you should know first.
- Array Access
- Function and Variable Scope
- range() and loop control
But you should be faithful once you go through again following the author.
The second time when we reach here, you can answer the question about the computing complexity.
Tip: Python time should be useful here.
import time
time.time()
Here’s an additional example that shows how to use python time:
Python | Which is faster to initialize lists?, GeeksforGeeks
Task 2: Guess the number¶
This program generates a random number from 1 to 10, or any range that is specified and the user must guess the number after a hint from the computer. Every time a user’s guess is wrong they are prompted with more hints to make it easier for them to guess the number but at the cost of reducing the score.
The program use input( ) functions to check if an actual number is entered by the user or not, to compare the input number with the actual number, to find the difference between the two numbers.
Note
play the game, you will get where the binary search algorithm intuition come from.
""" Number Guessing Game
----------------------------------------
"""
import random
attempts_list = []
def show_score():
if len(attempts_list) <= 0:
print("There is currently no high score, it's yours for the taking!")
else:
print("The current high score is {} attempts".format(min(attempts_list)))
def start_game():
random_number = int(random.randint(1, 10))
wanna_play = "yes"
attempts = 0
show_score()
while wanna_play.lower() == "yes":
try:
guess = input("Pick a number between 1 and 10 ")
if int(guess) < 1 or int(guess) > 10:
raise ValueError("Please guess a number within the given range")
if int(guess) == random_number:
print("Nice!  (Enter Yes/No) ")
attempts = 0
show_score()
random_number = int(random.randint(1, 10))
if play_again.lower() == "no":
print("That's cool, have a good one!")
break
elif int(guess) > random_number:
print("It's lower")
attempts += 1
elif int(guess) < random_number:
print("It's higher")
attempts += 1
except ValueError as err:
print("Oh no!, that is not a valid value. Try again...")
print("({})".format(err))
else:
print("That's cool, have a good one!")
if __name__ == '__main__':
start_game()


HC stays blacklisting of civil contractor by BBMP
The order also applies to cancellation of his registration
by Special CorrespondentThe Karnataka High Court on Monday stayed an order of the Bruhat Bangalore Mahanagara Palike (BBMP) blacklisting a Class-1 contractor R. Chandrappa and cancelling his registration in relation to cases of irregularities and misappropriation of funds in executing civil works in three wards of Malleswaram, Gandhinagar and Rajarajeshwarinagar divisions during 2008-11.
Justice S. Sunil Dutt Yadav passed the interim order on a petition filed by Mr. Chandrappa, who has questioned the legality of BBMP’s November 14, 2019 order of cancelling his registration and inclusion of his name in the blacklist. Mr. Chandrappa is one of the 32 civil contractors blacklisted by the BBMP.
Contending that filling of a charge sheet against him, among others, in the criminal cases related of these wards cannot be a basis to cancel registration and blacklisting as trial is pending, the petitioner claimed that the BBMP passed the order without considering his detailed replies submitted in February 2017 to the show cause notice issued to him in November 2016.
It was also contended in the petition that the order was passed, nearly five years after initiation of proceedings, without giving him an opportunity of personal hearing to defend himself.


WITNESS LIST Energy Resources Committee March 7, 2001-8:00A HB 484Committee Substitute (Lewis, Ron) For: Bishop, Cynthia (The Pipeline Group and Gardere Wynne Sewell LLP) Burns, Morris (Permian Basin Petroleum Association) Franchina, Tony (Texas Oil and Gas Association) Mayes, Larry (The Pipeline Group) On: McDaniel, Mary (Railroad Commission of Texas - Pipeline Safety Division) Registering, but not testifying: For: Nugent, Patrick (Association of Texas Intrastate National Gas Pipelines) Rigsbee, Ken (Phillips Petroleum Company) Stevens, Bill (Texas Alliance of Energy Producers) HB 1426 On: Pender, Jeff (Texas General Land Office)


An adventurous/bored person will write a brief description of the project here.
The following graph shows the number of GTPD crime logs by year since 2006.
It might be interesting to see if crimes following interesting patterns every year


???? ????
on 2012-04-11 15:45:25
Write more, that’s all I have to say. Literally, it seems as though you relied on the video to make your point. You clearly know what you’re talking about, why waste your intelligence on just posting videos to your blog when you could be giving us something enlightening to read
Brett Zamir
on 2009-05-26 15:07:24
Okay, I see... I only learned this recently, as I tend to live in the comfortable bubble of not needing to write for older IE browsers... :) Your solution will not solve the problem either because that is not progressively tokenizing the string. What should solve it for IE and still work in other browsers is to change our accessing the strings by index (as though it were an array) and instead use charAt().
You can therefore replace your code with the code we now show for strtok. I also fixed this problem in a few other functions, though I'm afraid there could be others besides these:
sql_regcase, str_shuffle, strcspn, strlen, convert_cyr_string
Sorry I didn't pick up on it earlier. For future reference, it really helps if you can boil down the problem to just one function and the smallest example possible, and even the exact line within the function, since it is easy to do this with our mostly self-contained functions. But anyhow, thanks very much for sticking through it, and I'm very glad you found this problem for us...It will be a big help for cross-browser compatibility...
Ty
on 2009-05-26 10:38:52
Ok... It solved it in another way. I cannot use strtok() in IE.
But as you see below, this works.
var str = "Subarea=authorisation\nModule/Category=Create\nTask=ERP @@xxy_yzaaddcc# @#qeq_reerfdfe#";
result = strtok(substr(stristr(str, "@@"), 2), "#");
alert(substr(result, 0, result.indexOf("#")));
This results the expected string. So I changed the code of the strtok() function, as follows.
function strtok (str, tokens) {
// Tokenize a string
//
// version: 905.2020
// discuss at: http://phpjs.org/functions/strtok
// + original by: Brett Zamir (http://brettz9.blogspot.com)
// % note 1: Use tab and newline as tokenizing characters as well
// * example 1: $string = "\t\t\t\nThis is\tan example\nstring\n";
// * example 1: $tok = strtok($string, " \n\t");
// * example 1: $b = '';
// * example 1: while($tok !== false) {$b += "Word="+$tok+"\n"; $tok = strtok(" \n\t");}
// * example 1: $b
// * returns 1: "Word=This\nWord=is\nWord=an\nWord=example\nWord=string\n"
if (!this.php_js) {
this.php_js = {};
}
if (navigator.appName == "Microsoft Internet Explorer") {
return str.substr(0, str.indexOf(tokens));
}
if (tokens === undefined) {
tokens = str;
str = this.php_js.strtokleftOver;
}
if (str.length === 0) {
return false;
}
if (tokens.indexOf(str[0]) !== -1) {
return this.strtok(str.substr(1), tokens);
}
for (var i=0; i < str.length; i++) {
if (tokens.indexOf(str[i]) !== -1) {
break;
}
}
this.php_js.strtokleftOver = str.substr(i+1);
return str.substring(0, i);
}
This works very well in IE 6, 7 and 8. :)
Thanks for your help!
PS: Maybe you can integrate these change in your version? ;-)
Ty
on 2009-05-26 10:21:10
Ah...
Now I can see the error... In Firefox (3.5b4 and 3.0.10) it works fine.
But in Internet Explorer 7 it does NOT work. That's bad, because I will need it mainly for IE. :(
Any suggestions?
Brett Zamir
on 2009-05-20 19:53:34
My other questions:
1) Are you using regular client-side JavaScript?
2) What browser are you using?
3) Did you check the error console for your browser for any warnings?
4) Did you download the namespaced version of PHP.JS or just copy-paste the function/use the non-namespaced version?
5) How long ago did you copy the code?
As I said I tested it myself just now in Firefox 3.0.10 as follows:
var str = "Subarea=authorisation\nModule/Category=Create\nTask=ERP @@xxy_yzaaddcc# @#qeq_reerfdfe#";
result = strtok(substr(stristr(str, "@@"), 2), "#");
alert(result); //
And it gives 'xxy_yzaaddcc' in Firefox.
Or to make it simpler for our testing:
var sub = "xxy_yzaaddcc# @#qeq_reerfdfe#";
result = strtok(sub, "#");
alert(result); // gives 'xxy_yzaaddcc' in Firefox
Ty
on 2009-05-20 16:16:50
Hehe... I do not use String... It is just an example. I just wanted to show what commands I use.
For your questions:
Yes I tested the other outputs. They're working as expected. Only strtok() does NOT do what it should.
Here's the original code:
fpSubject = fldRef[fldTitles[i]]['subject'][0];
if(stristr(fldRef[fldTitles[i]]['category'][0], "@@")) {
fpCategory = strtok(substr(stristr(fldRef[fldTitles[i]]['category'][0], "@@"), 1), "#");
} else fpCategory = fldRef[fldTitles[i]]['category'][0];
fldRef[fldTitles[i]]['category'][0] contains: "Subarea=authorisation\nModule/Category=Create\nTask=ERP @@xxy_yzaaddcc# @#qeq_reerfdfe#"
As the result I get:
"xxy_yzaaddcc# @#qeq_reerfdfe#"
But it should be:
"xxy_yzaaddcc"
Only stristr gives:
"@@xxy_yzaaddcc# @#qeq_reerfdfe#"
And with substr: See above... ;-)
Any clues?
Ty
Brett Zamir
on 2009-05-20 16:06:46
Also, while it shouldn't affect this situation, you probably don't want to be using "String" as a variable name (at least capitalized like that), since you are overwriting the built-in String() constructor.
Brett Zamir
on 2009-05-20 16:04:41
It's working fine for me. I presume you have the equivalents already for substr and stristr? Are you using regular client-side JavaScript? Did you check your results already for substr and stristr (those are executed before it gets to strtok). Did you check the error console? What browser?
If you downloaded the namespaced version (e.g., calling the function like $P.strtok()), then I do see there is a bug (just fixed in Subversion), but otherwise, it seems we need more info, because it's working fine to return 'abcdef' for me.
Ty
on 2009-05-20 15:31:09
Hi,
the function strtok() does NOT work as the PHP equivalent!!
My example:
String = "@@abcdef# @#tzererff#";
result = strtok(substr(stristr(String, "@@"), 2), "#");
==> abcdef# @#tzererff#
--------
In PHP the same command line results in:
==> abcdef
What am I doing wrong??
Cheers Ty


---
layout: post
esbma_id: 1719
title: Beta: DiffMerge 3.1, Preview: Tag Clouds in Fortress 1.1
date: 2007-09-11 16:25:07
keywords: sourcegear
---
Over on Jeremy's SourceGear Development Blog there are two
recent entries which might interest you:
- DiffMerge
3.1 Beta. Back in June when we released version 3.0 of SourceGear
DiffMerge as a free product, we got lots of feedback on how to make it
even better. Version 3.1 is an effort to respond to those comments.
- Tag
Clouds Preview. Fortress 1.1 is going to have a new feature called
"tag clouds". See an overview of how it will work and tell us what you
think.


ACCESSIBLE AND SUPERIOR CLOUD
HASH RENT SERVICE PLATFORM
MCC.TOP aims to povide accessible and qualified cloud hash service,35744.96 PH/S
Whole Network Hash
299 H
Next Difficulty Remain Time
1792
Next Difficulty Remain Block
1.04 M
Block Median in Seven Day
HASH SHOP
ANTMINER S9
Power Consumption:100W/T
Power Consumption:100W/T
Power Consumption:100W/T
Power Consumption:100W/T
Power Consumption:100W/T
ANTMINER S9
Power Consumption:100W/T
Power Consumption:100W/T
Power Consumption:100W/T
Power Consumption:100W/T
Power Consumption:100W/T
ANTMINER S9
Power Consumption:100W/T
Power Consumption:100W/T
Power Consumption:100W/T
Power Consumption:100W/T
Power Consumption:100W/T
ANTMINER S9
Power Consumption:100W/T
Power Consumption:100W/T
Power Consumption:100W/T
Power Consumption:100W/T
Power Consumption:100W/T
ANTMINER S9 WORLD'S MOST EFFICIENT MINER
The Antminer S9 follows the same form factor as that of the hugelySTRICT SELECTION PROCESS OF MINERS
To fully control the source of risk, MCC.TOP choosesco-operation organization strictly and does multidimensional audit and credit evaluation.
STANDARD MANAGEMENT
From miner purchase to profit creation,every operation process is under careful control of MCC.TOP to totally ensure the life cycle of the project.
RISK CONTROL
The MCC.TOP has its own self-development risk control system for capital selection and investors will enjoy the agreed income inde-pendently.
MINE LIST
PARTNER


Main
Noor Semaan
Data Analytics student seeking Spring 2020 internship
Education
Tufts University
MS Candidate in Innovation and Management
Medford, MA
2020–Current
Tufts University
B.S. in Chemical and Biological Engineering
Medford, MA
2016–2020
Internship Experience
Summer Intern
Foster + Partners
London, UK
July 2018
- Performed calculations to determine energy optimization of different building designs targeting at least 70% efficiency when utilizing hydropower, solar, and wind energy instead of fossil fuels
- Attended workshops to learn about and work with sustainable materials (3D printing & water-based paints)
Summer Intern
Ampion
Boston, MA
May 2018
- Searched for, contacted, and obtained over 1,000 prospective clients in New York that would benefit from the company’s services
- Validated current clients in upstate New York by matching their information on the online platform with their electricity bill
- Updated the current company database for supply and demand electricity tariffs in different areas of New York
Selected Project Experience
New Product Innovation
Tufts University
Medford, MA
December 2020
- Partnered with four graduate students to develop and defend a 50-paged business plan, which includes a product prototype, marketing section, and financials, for an online platform that enables engineering university professors to choose relevant corporate-sponsored projects for students to complete.
Product and Process Design
Tufts University
Medford, MA
May 2020
- Led a team of four senior chemical engineers to write and present a class 4 report outlining the construction of a potential battery-grade Lithium Hydroxide plant in Australia that encompasses engineering, economic, and safety aspects.


Changelog
[0.22.0] - 2022-05-02
Fixed
- An issue with
mysqldump
preventing reset -d
[0.21.0] - 2021-10-09
Added
--skip-backup
option to migrate, reset, pull operations. This will skip the local backup before overwriting; use with care!
Changed
--nobu
is now --skip-backup
for the migrate route.
[0.20.0] - 2021-10-08
Changed
- Terminus must now be installed at the app level w/Composer; no longer in the .loft_deploy directory. See documentation for info.
[0.19.0] - 2021-10-08
Added
- --single-transaction and --skip-lock-tables by default; configurable with "mysqldump_flags" to reduce lock timeouts during export.
[0.18.0] - 2021-05-08
Added
- When using Lando with Drupal you should now configure using
database.lando: @drupal
and remove drupal.settings
. Read the documention for more info.
[0.17.0] - 2021-02-08
Changed
- Made the project Composer installed.
[0.16.0] - 2019-10-28
Added
- Added support for using with Lando containers.
- Add configuration option
stage_may_pull_prod
to allow stage to pull from prod. Set this to true in your configuration.
- Improved feedback and messages.
- Added local role as argument
$8
to hooks.
[0.14.13]
- Changes in config.yml are now detected and caches are cleared automatically.
[0.14.10]
- Removed
scp
operation; you should now use the copy_production_to
feature instead.
[0.14]
- Change to YAML configuration files (see update.html for how to)


CommunityConnect
Sign Up Form
Email address
Password
Error:
First Name
Last Name
Phone number
Address
Sign Up
Or log in
here
OK


WITNESS LIST Juvenile Justice & Family Issues Committee April 10, 2003-10:30A HB 2011 Committee Substitute (CSHB 2011/ Moreno) For: Kuykendall, Randal (Texas Municipal Police Association) HB 2137 For: Burke, Cecelia (Texas Association of Domestic Relations Office) HB 2268 On: Griesel, Chris (Rules Attorney Supreme Court of Texas) Turley, Gail M. (County and District Clerks' Association of Texas) HB 2481 On: Sampson, John J. (Self) HB 2482 For: Burke, Cecelia (Texas Association of Domestic Relations Office) Green, Jr., Robert L. (Self and Texas Fathers Alliance, Lone Star Fatherhood Initiative and Men and Fathers Resource Center) Speight, Susan (Self and Texas Association for Marriage and Family Therapy) On: Bryant, Cynthia (Attorney General's Child Support Division) Stansbury, Judge Tom (Texas Family Law Foundation) HB 2712 For: Kang, Abhi (The Family Place Battering Intervention and Prevention Program) McLendon, Barbara (Texas Council on Family Violence) Romo, Carlos (Center for Public Policy Priorities) On: Green, Jr., Robert L. (Self and Texas Fathers Alliance, Lone Star Fatherhood Initiative and Men and Fathers Resource Center) Trinidad, Victoria (Texas Department of Criminal Justice- Community Justice Assistance Division) HB 3068 Against: Frasier, Margo (Sheriffs' Association of Texas) HB 3087 Committee Substitute (CSHB 3087/ Hodge) For: Romo, Carlos (Self) HB 3113 On: Green, Jr., Robert L. (Self and Texas Fathers Alliance, Lone Star Fatherhood Initiative and Men and Fathers Resource Center) HB 3114 Against: Green, Jr., Robert L. (Self and Texas Fathers Alliance, Lone Star Fatherhood Initiative and Men and Fathers Resource Center) On: Stansbury, Judge Tom (Texas Family Law Foundation)


% extends 'base.html' %> <% block css %> <% endblock %> <% block js %> <$ 'chat' | js | safe $> <% endblock %> <% block templates %> <% include 'includes/js/room.html' %> <% include 'includes/js/user.html' %> <% include 'includes/js/file.html' %> <% include 'includes/js/message.html' %> <% include 'includes/js/tab.html' %> <% include 'includes/js/browser-item.html' %> <% include 'includes/js/browser-item-user.html' %> <% include 'includes/js/browser-room.html' %> <% include 'includes/js/browser-provider.html' %> <% include 'includes/js/upload.html' %> <% endblock %> <% block body %>


Video: Passenger Jet Departing LAX Hit by Engine Failure, Catches Fire
A Philippine Airlines flight headed to Manila on Thursday reportedly suffered unidentified engine failure after taking off from Los Angeles International Airport. Footage shared by eyewitnesses on social media shows the shocking landing of the burning jet.
Distressed Flight 113 reportedly returned safely to LAX less than 30 minutes after it declared mayday shortly after takeoff.
The cause of the incident remains unknown. There are no reports of injured passengers during the emergency landing.
Earlier reports suggested that the plane belonged to American Airlines or Delta. Both carriers have denied ownership.


The alt attribute should be reflect the image content, so users who cannot see the image gets an understanding of what the image contains:


scusate come faccio a prendermi un emblema da questo sito e mettermelo nel mio profilo su batteffield
Edit Meaurk: sorry how do I take an emblem from this site and put it in my profile on batteffield
BrainFooLong
Administrator
English only please.
Meaurk
Global Moderator
Hi!
In Battlelog go to the "customize emblem" page. At the top of that page you will find a button named "BBLOG emblem gallery". When you click on that button, a new field is opened with all popular saved BBLOG emblems. You can search by tag or colour.
Click on the emblem you'd like to have and a pop-up screen will appear. At the bottom of that pop-up screen you will find a button named "Load emblem now". When you click it, it will change your emblem.
Hope it helped. And next time, as mentioned above, please in English. :-)