I have got a raspberry pi with emoncms (HD version) and three separate EmonTX transmitters, covering my solar generation, surplus power diverters, and thermal store temperature.
I have been running it for about 3 months now and it has been very successful.
The problem I have is that every few days the RFM12PI wireless receiver goes hard down.
I think that I have isolated the problem to the wireless receiver because I can still use the emoncms web interface when this problem occurs, and I can still input data manually via the json interface.
Also when the problem occurs I lose data from all 3 wireless transmitters simultaneously.
On my rasperry pi, I have tried stopping and restarting the rfm12piphp process but the problem remains. What is more, the problem survives a software reboot of the pi (sudo reboot). However, normal reception resumes immediately if I disconnect the pi's power supply and plug it in again.
I have repeated the above scenario several times and I am confident that I am reporting the facts correctly.
I have also tried restarting the rfm12piphp process with the log option. The result was that the system created a log file but nothing was written to it.
the attached screenshot shows that the json interface can still recieve data (node 1) but nothing is coming from the wireless transmitters (nodes 8, 9 in the screenshot).
Re: RFM12PI receiver goes hard down sometimes
What version of the RFM12Pi have you got? V1 with attiny or V2 with ATmega328? The V2 is tested to be very reliable.
It might be the software on the pi. EmonHub is the current activity mentioned and reliable rfm12pi raspberrypi gateway service
Re: RFM12PI receiver goes hard down sometimes
Thank you for responding. I have looked at the board and along one edge is printed "RFM12Pi V2.5.3" - so I assume that that's version 2
The reason that I assumed that it wasn't the software on the pi is that the problem continues after a software reboot of the pi (ssh to the pi command line and issue sudo reboot command) but is immediately fixed if I power off / power on the pi.
I deduce from this that a software reboot of the pi does not actually "reboot" the RFM12Pi whereas a power cycle obviously does.
As far as solving the problem is concerned, my idea is that I think I could write a monitoring program that would detect when the RFM12Pi had stopped receiving, then I would like that program to send a command to the RFM12Pi to reset itself - I have no idea if sending such a command is possible or how I would do it.
I do know that problems are not always where they seem to be and I'm open to any suggestions. The problem occurs randomly. Once the problem occurs it never goes away of its own accord, but once I get the RFM12Pi going again it usually works fine for several days.
I've already written some software that monitors the voltage level of my battery bank and feeds the data into emoncms via the json interface. I'm planning to develop this to a point where the pi becomes the command centre for the whole of my off-grid system. That's why I need to find a way of addressing the reliability of the data collection process.
I attach a screenshot showing a graph of solar generation and battery bank voltage. You can see that the solar power generation data (which comes via the RFM12Pi) suddenly stops at 12:47 (the brown area on the graph) whereas the battery voltage data (which is automatically input using the emoncms json interface, not via the RFM12Pi) carries on (the blue line on the graph). NB this is not zero values, it is an absence of data.
Thanks in advance for any help anyone can give.
Re: RFM12PI receiver goes hard down sometimes
Apologies for the long delay, I can only investigate this problem when it occurs, which is totally randomly (as far as I can tell). After several weeks of things working perfectly, the problem has just occurred again, and I have made a little bit more progress in investigating it. Here is the scenario:
1. I notice that emoncms has stopped receiving data from all 3 emontx transmitters simultaneously, while still getting data that a separate process is injecting via the json interface.
2. I connect to the raspberry pi with ssh and reboot it
3. The problem has not been fixed. Still no data from any of the emontx while the json service is still fine.
4. I decided to use minicom to try and investigate the rfm12pi interface.
5. Minicom shows just the welcome screen, no sign of any data [Screenshot AfterReboot.png]
6. I physically unplug the pi from its power supply and plug it in again.
7. As soon as the pi reboots, the problem completely fixed.
8. I use minicom again to look at the rfm12piphp interface again (repeat of step 4)
9. This time minicom shows a steady stream of data from the rfm12pi [Screenshot AfterPowerCycle.png]
To my mind, this shows that the problem is not on the raspberry pi, it must be on the rfm12pi expansion board itself.
(This makes it sound like I knew what I was doing. In fact it was all painfully slow, ie all bound up with learning Linux, discovering minicom and how to use it etc, etc)
I infer that rebooting the pi by software command does not reboot the rfm12pi, whereas obviously power cycling the pi does reboot the rfm12pi.
I am interested in anything that can help me get closer to a solution - for example (a) is there something I could do to diagnose the problem more precisely (b) is there some way of sending a command to the rfm12pi to reset itself, or (c) do I need a firmware upgrade to the rfm12pi or something like that?
I've also noticed an older thread with what looks like the same problem
http://openenergymonitor.org/emon/node/2947
, but I'm not able to understand enough of that to know if it's relevant.
Re: RFM12PI receiver goes hard down sometimes
Your logic seems sound and the issue does indeed appear to be with the RFM2Pi board which, as rule, are extremely reliable, I would recommend updating the firmware on the RFM2Pi as there were some issues with random lock-ups ( for example see http://openenergymonitor.org/emon/node/3584 ) which have been alleviated with firmware updates.
A guide to updating the firmware directly using the Pi is found in the wiki http://wiki.openenergymonitor.org/index.php?title=RFM12Pi_V2
Paul
Re: RFM12PI receiver goes hard down sometimes
Thank you very much for that. I hadn't seen thread 3584 before, despite searching - it describes my problem exactly.
Looking at https://github.com/mharizanov/RFM2Pi/tree/master/firmware/RF12_Demo_atme... I see that there is a version of RF12_Demo_atmega328.cpp.hex that is dated 10 April 2014. I purchase my rfm12pi on 3 July 2013 so obviously it will have an older version.
I will be big and brave and attempt the firmware upgrade. I plan to do this from the Raspberry pi; the instructions at http://wiki.openenergymonitor.org/index.php?title=RFM12Pi_V2#Upgrading_R... seem clear.
However I do have one concern. I see at the same github location that there is also an update for Optiboot328_8mhz_RF12_Demo.hex Would I need to flash that one as well? If so, can I also do that from the raspberry pi? The instructions at http://wiki.openenergymonitor.org/index.php?title=RFM12Pi_V2#Flashing_th... don't really say either way.
Re: RFM12PI receiver goes hard down sometimes
I think you just need the firmware updated that's all I recall doing to mine.
Hopefully someone will correct me if I'm wrong but I believe you would need an ISP programmer to change the bootloader and it probably hasn't been modified itself, the updated version is probably just the combined original bootloader and later firmware.
Paul
Re: RFM12PI receiver goes hard down sometimes
No, as Paul correctly said you don't need to flash the Optiboot. That's the serial bootloder wich is flashed via ISP in the factory. The serial bootloder enables subsequent firmware updates to be done over serial.
Re: RFM12PI receiver goes hard down sometimes
I have had a go but I'm not sure if it worked.
I followed the instructions at http://wiki.openenergymonitor.org/index.php?title=RFM12Pi_V2#Upgrading_R...
I think that the git pull worked because I got files with new datestamps.
However, when I ran the avrdude command, I got lots of error messages saying
avrdude-original: stk500_getparm(): (a) protocol error, expect=0x14, resp=0x78
which are leading me to think that the firmware upgrade did not work.
Here is the entire output:
I'm pretty sure that rfm12piphp was stopped OK, because there is a gap in my data.
The good news is that I was able to restart rfm12piphp afterwards so at any rate I haven't damaged it, but I have no idea if the firmware upgrade actually worked.
Thanks once again for all your help.
Re: RFM12PI receiver goes hard down sometimes
No, that doesn't look right !
It looks good up to "Description : Arduino" but it doesn't complete reading the device, so will not of worked.
To reduce the chance of damaging anything just try reading the device only and when that has been successful try flashing again. use the same command without " -U flash:w:RF12_Demo_atmega328.cpp.hex " this will just read the device and should give you an output that starts as above but instead of the errors you should get
I found when I did mine it failed a couple of times due to low (or unstable) voltage, when I used a larger power supply it sailed through first time, It may be something completely different in your case but it may be worth trying to improve the power supply, if you have non-essential usb devices unplug them (even wifi dongle if you can) or even use a different SD card so you can unplug the HDD.
Paul
Re: RFM12PI receiver goes hard down sometimes
Success! I proceeded as follows:
My plan B had been to boot the pi from another card as an SD-only device (as distinct from the HDD version which I am running) and try it that way, but obviously that wasn't necessary.
Only time will tell whether the new firmware solves the original problem of the rfm12pi board locking up randomly, but I am of course optimistic.
Also, I was enlightened by Glyn's comment:
That clarified something that I had been struggling to understand.
Re: RFM12PI receiver goes hard down sometimes
I just had it happen for the first time in many months on the latest (as far as I am aware) firmware, looks like a watchdog on the rfm12pi might be a good idea
Re: RFM12PI receiver goes hard down sometimes
Happened again so I've swapped radios
Re: RFM12PI receiver goes hard down sometimes
As the original raiser of this thread, I would just like to record that the solution (upgrade the rfm12pi receiver firmware to the latest version) has worked for me. That is to say, it has now been working solidly for a whole month, which was not happening before.
I also have "monit" installed on the rasberry pi, in case the receiver software ever crashes out, but this may just be belt and braces - receiver crashing out was not the problem here.
Re: RFM12PI receiver goes hard down sometimes
It did for me for many months but recently occurred again, I too used to use monit maybe it's time to install again but first I'll see how the radio swap goes. I'm seriously considering a wired solution for more critical systems such as CH control, I've already had to turn off acks for most nodes as they appeared to be blocking each other. Maybe the radio spectrum is especially busy in these parts.
Re: RFM12PI receiver goes hard down sometimes
Happened again yesterday but at least now I can su poweroff then powercycle the RaspberryPi from my mobile thanks to Juice (ssh client for Android) and a web app I built myself.
Re: RFM12PI receiver goes hard down sometimes
Hi Brain,
Sorry to hear of the issue your having with the RFM12Pi. I am keen to try and track this issue down. Please could you confirm what version of the RFM12Pi you have and what firmware your running. Have you updated to the latest version?
Re: RFM12PI receiver goes hard down sometimes
It's a V2 with the latest firmware plus a small amendment to increase the buffer size as here https://github.com/mharizanov/RFM2Pi/blob/master/firmware/RF12_Demo_atmega328/RF12_Demo_atmega328.ino to overcome an issue with packetgen limiting the size of transmissions . I'm not clear whether this has actually been implemented in your latest developement versions.
I have the same firmware on 2 V2s both exhibit the same occasional lock ups. I was thinking that implementing a watchdog in the firmware to reset on lockup would be the way to go.
Re: RFM12PI receiver goes hard down sometimes
Looks like the embedded link has queued my response for moderation so I'll repeat my answer. It's a V2 with the latest firmware I'm aware of. The link was to the firmware version on GitHub that I'm using.
Re: RFM12PI receiver goes hard down sometimes
Patience Bra1n, patience! Anyway, I've promoted you to 'OEM Power User' so you should be OK now.
Re: RFM12PI receiver goes hard down sometimes
Who Hoo ... Promotion :)
Re: RFM12PI receiver goes hard down sometimes
I was thinking that implementing a watchdog in the firmware to reset on lockup would be the way to go
You can also use the wdog to help you find out where it's hanging. The AVR wdog has a nifty "interrupt the first time, and reset the second time" feature. During the ISR for the first firing, you can store away system state (and even the PC off the stack) into non-volatile storage such as EEPROM. The second firing will then reset you, and you just need to add a way to display the system state previously stored away.
Re: RFM12PI receiver goes hard down sometimes
Not sure if I should be hijacking this thread but I have a similar problem. I've had my system running flawlessly for about 18 months, diverting away with Martin's sketch and transmitting temperatures from my tank.
However occasionally l have had power failures, in one case the power supply to the pi failed, other times it's been the mains supply and sometimes I've shut down the pi with sudo shot down.
Not every time but often enough when I get power back on the pi the radio won't restart. Doing a bit of checking, what happens is the green led on the rfm12pi flashes once but then doesn't go into it's running state of flashing every few seconds.
I've been solving this by just restarting again which normally gets things going but just today this seems to have stopped working. Any pointers as to what to try next gratefully received. I have done a search but this post seems to be the nearest to the issues I'm having although I do need to add that I have never had comms fail once the rfm12pi is up and running. My issue is only on startup.
Re: RFM12PI receiver goes hard down sometimes
Isn't that just brilliant! Sod's law at work here.
It's working again. I had rebooted before writing the post above. Sat down to write the post, then went back to where the pi is installed and hey presto the little led is flashing away fine and I can see the data in my dashboards...
Guess I'll just have to more patient until the number of retries gets excessive.
Re: RFM12PI receiver goes hard down sometimes
Not sure whether to post here or start a new thread.
I am having identical problems but with a RFM69Pi. I can get data for days or weeks, but then it will stop receiving and the pi will need a power cycle to get it working again.
Is there a command to reset the radio which I could try?
Re: RFM12PI receiver goes hard down sometimes
Hi
Just to add that I have a similar problem as well. I am waiting for it to fail again so I can check if the RFM led is still working. (It's so small I did not even know it was there until Paul (emonhub) told me. Typical, since I learned about the LED it has not failed!
Regards
Ian
Re: RFM12PI receiver goes hard down sometimes
Hi Steve - Can you confirm if the led on the rfm69pi is flashing intermittently to signify it is receiving but not passing the data or just dead?
Hi Ian - That's been quite a while now, fingers crossed a ?
There is no built in command to reset the rfm2pi and I'm not sure it would work if the AVR is getting stuck anyway. It would be good to see a watchdog in the sketch too but I am working on a watchdog in emonhub that if the rfm device doesn't pass anything for a while emonhub will attempt a communication and if no response is received it will then physically hard reset the AVR using the reset line (used during programming) by pulsing the gpio pin.
This will be in the next emonhub (hopefully) but in the meantime I have attached a python script download and install using (rpi-rw 1st if using read-only)
sudo wget -O /usr/bin/reset_rfm2pi http://openenergymonitor.org/emon/sites/default/files/reset_rfm2pi.txt
sudo chmod +x /usr/bin/reset_rfm2pi
Then you can reset the rfm2pi any time using the command sudo reset_rfm2pi. If you find this works to reset the rfm2pi without restarting emonhub or the Pi then maybe adding the watchdog mentioned above would be the way to go.
Paul
Re: RFM12PI receiver goes hard down sometimes
It dropped out again today and I can confirm there is no flashing light.
I will download and install the script and post the results when I get a chance to test it.
Edit:Woke this morning to find no inputs for 6 hours. Tried the script but it didn't bring it back to life
Re: RFM12PI receiver goes hard down sometimes
Actually you will have to stop the emonhub service before using the script to make the serial port available to reset the rfm2pi and then restart it again afterwards, if you are using the emonSD image you can use emonhub -x to stop and emonhub -s to start again (otherwise sudo service emonhub stop and sudo service emonhub start).
If you can confirm the led flashes periodically and that the reset script works whilst all is ok, then when it faults you can compare responses, eg you should get a longer led flash immediately after resetting the AVR as that is part of the setup. If that happens when testing but isn't happening when at fault either the serial port or the AVR is locked for some reason. If the longer flash does occur but the reception (periodic flashes) don't resume then it would point to the AVR resetting as expected but the rfm module is not working.
Does the emonhub.log shed any light? unlikely in this instance but worth checking.
Paul
Re: RFM12PI receiver goes hard down sometimes
Total contents of emonhub.log any time I have checked it is:
I'm not seeing the longer flash (or any change in the flashing) while testing but I can see that stopping and starting the service is working
I'll update after trying on a locked system, if and when it happens again.
Re: RFM12PI receiver goes hard down sometimes
If you change the loglevel to DEBUG in emonhub.conf you will see far more info.
Do you see the single longer flash when restarting the rfm2pi? The script is intended to "reset" the rfm2pi's AVR in a way that should trigger the initial "setup()" routine as if it had just been powered up.
It's easy to miss the extended led flash at "setup()" as it only happens once and although I say "extended" as it's longer than the usual flash, it is still quite quick. but it should happen immediately after powering up (or using the reset_script), but restarting emonHub or rebooting the Pi will not "reset" the rfm2pi so no extended flash will be seen.
For the absence of a flash when using the script to have any meaning you will need to confirm that it normally does occur.
Which model Pi are you using is it a B, B+ or 2B ?
Paul
Re: RFM12PI receiver goes hard down sometimes
I have noticed the longer flash when I power up the pi. I am not getting that when I run the reset script.
I have a model B raspberry pi.
I have set the log to debug level so that I can get more info when it stops
Re: RFM12PI receiver goes hard down sometimes
It looks like the script isn't working, I had only previously tested this on a Pi 2B, so to rule out any gpio numbering issues I have just tried it on a Pi B with a rfm69 RFM2Pi and it worked as expected. I used just these 3 lines
sudo wget -O /usr/bin/reset_rfm2pi http://openenergymonitor.org/emon/sites/default/files/reset_rfm2pi.txt
sudo chmod +x /usr/bin/reset_rfm2pi
sudo reset_rfm2pi
Do you get any error messages when trying to use the script ?
what response do you get to " ls -la /usr/bin/reset_rfm2pi " ?
Are you using Raspbian OS is it up to date?
Does " sudo apt-get install python-rpi.gpio " confirm the gpio module is installed? (latest version?)
Re: RFM12PI receiver goes hard down sometimes
I get no errors using the script.
I installed the script by copying and pasting the lines from the post (from the 14th) above straight into a command shell. The OS is installed from the image dated 13/3/15 & updated today. GPIO module is installed and newest version.
I compared the script in that file to what was posted above and it is exactly the same. To be sure I deleted the file and re-downloaded it using the above steps in case it was corrupted somehow but there was no change.
Re: RFM12PI receiver goes hard down sometimes
Well that's bizarre!
This should be quite straight forward, it's nothing new or complex the script just borrows from the "avrdude-rpi" script that's already tried and tested. You could try adding a print line after the "GPIO.cleanup()" line to at least confirm the script has been run.
...
GPIO.cleanup()
print ('A reset of the RFM2Pi has been attempted')
except ........
I don't have a RFM69Pi to test but cannot think of any reason it would be different off-hand. I have tested on Pi B, Pi 2B, RFM2Pi(rfm69) and RFM2Pi(rfm12) on 2 different firmwares. I have tried it with emonHub running and stopped, I have tried it read-only too not sure what else to suggest.
You could also try increasing the reset duration from "sleep(0.12)" to "sleep(1)" as it is not timing critical when not being used for with avrdude for actual programming.
Paul
Re: RFM12PI receiver goes hard down sometimes
I put the print statement in and it comes up on the screen while running the script, so I know the script is running through. I also changed the time delay but still no flash.
I appreciate your help in this.
I can try this on a Pi2B, but not until next weekend. Maybe someone else will see this before then and give it a try.
Re: RFM12PI receiver goes hard down sometimes
Hi there,
I have the exact same problem. But I am using a rfm69Pi v3.1, a Pi2 with Raspian and the latest firmware for the Pi2 and rfm69pi.
I just found the reset script mentioned earlier. If my rfm69pi board hangs again, I will try the script... Will the script also work with the Pi2? Just asking because the Pi2 has more GPIOs...
I noticed somthing today. When I power down the Pi and disconnect the board from the GPIOs, the board has it's old config (group id, node id etc). But when it "hangs" and I power down the Pi, it's resetted to the defaults... Other node and group ID and the freq is set to 433 Mhz, but I'm using a 868 mhz version...
Regards,
toberkel
[A duplicate of this post has been deleted. Please observe the notice on the right "NEW USERS, PLEASE READ - Posts held for moderation" - Moderator (RW)]
Re: RFM12PI receiver goes hard down sometimes
How do you manage to powercycle the Pi via ssh when it's powered off?
Re: RFM12PI receiver goes hard down sometimes
I shut it down via ssh ( sudo poweroff ), and then go and physically turn it off and on again
Re: RFM12PI receiver goes hard down sometimes
Hi toberkel, would it be possible for you to try the script prior to "hanging"? This would not only give you a insight as to what normally happens to gauge what actually happens when in a fault condition, but may go a long way towards helping fathom out why the script won't work for SteveM, plus if it's not working we may be able to correct that before you need it.
You cannot "powercycle" either the Pi or the AVR via SSH as there is no control of the power rails, since "powercycling" the Pi is only needed to interrupt the power to the GPIO to cause the AVR to reset this script is intended to negate the need for "powercycling" and therefore permit remote resets.
The "forgetting the frequency" is an interesting find as that suggests a problem related to the eeprom if it's the cause but if it's an effect maybe it's the frequency that gets changed and the RFM2Pi is not "hanging" but just not seeing any data on the alternative frequency and assumed to be hanging? although the latter I would expect to be resolved by restarting emonhub as correct frequency would be set if the RFM2Pi settings did not match the intended frequency
It would be useful to know if there is any abnormal log entries in emonhub.log, you can set loglevel to DEBUG and be able to locate the last good RFM2Pi packet quite easily if this reoccurs
Paul
Re: RFM12PI receiver goes hard down sometimes
Hi guys,
We have noticed the same problem with the emonPi, which shares much of the code with the RFM69Pi. It seems to be a JeeLib RFM69CW issue. It's strange that I have never had my RFM69Pi do the same in many many months of opperation.
It seems the issue is with the RF driver rather than the ATmega328 or emonHub. It seems the RF stopps receiving data from my emonTx and emonTH but the ATmega328 is still doing local sampling on the emonPi and succesfully serial printing on node 5. The RF comes back to life when I change the group to something else then back to group '1' which is what I use in my house.
Here is a minicom serial output showing the ATmega328 doing local sampling on group 5 then me brining the RF back to life by changing the group:
I tried today recompiling pulling in latest changes to JeeLib: https://github.com/jcw/jeelib/commits/master
There are various branches to JeeLib, it seems to be a few bugs to do with RFM69CW. Could this be the same issue we are experiencing: http://jeelabs.net/boards/6/topics/6374
Re: RFM12PI receiver goes hard down sometimes
Glyn - When it fails again could you try changing a different setting eg change nodeid and back again? or better still when it next stops without letting emonhub alter anything on reboot (disable RFM2Pi interfacer before reboot) "powercycle" and check to see if it has reverted to group 210.
I wonder if the values retained in the eeprom (or absence of such) are causing an issue when accessed by the code and by changing a setting the eeprom is being overwritten, in toberkel's case, "powercycling" is reloading the default of 433Mhz, the same scenario for SteveM would be successful as he is using all defaults.
Paul
Re: RFM12PI receiver goes hard down sometimes
Hi Paul,
thanks for your detailed answer... I will execute the script after I returned from work.
When the board "hangs" and I connect via minicom to it, the frequency is till set to 868 mhz and the groud id is also 235 (which I am using).
I will come back to you with the script results...
Regards,
toberkel
Re: RFM12PI receiver goes hard down sometimes
I just executed the script without any error or output... My values still get updated, so I think everything is fine... Hopefully it will work when the Pi "hangs" again too
Re: RFM12PI receiver goes hard down sometimes
@paul All EEPROM stuff has been stripped out for the emonPi so this is not the issue
https://github.com/openenergymonitor/emonpi/tree/master/Atmega328/emonPi_RFM69CW_RF12Demo_DiscreteSampling
I had the same issue again this morning, so using latest JeeLib has not solved anything. I tried restarting emonHub but this did nothing. As before changing the network group then back again brought it back to life. It seems it's requiring an RF initialize to start working again.
Re: RFM12PI receiver goes hard down sometimes
Hi,
this morning I had a freeze again. The script wasn't working...
I also tried to change the group id and afterwards change it back, but I failed... After typing "210g" the board replied with "config save failed" and the group id still was 235... So I had to powercycle the pi. After login I had to change all the settings from the rfm69pi board... Node id, group id and frequency was set to defaults :-/
Regards,
toberkel
Re: RFM12PI receiver goes hard down sometimes
"this morning I had a freeze again. The script wasn't working..." Unfortunatly this doesn't have much meaning until you confirm whether the script works normally. Do you see a longer LED pulse immediately after using the script?
Looking at the sketch "config save failed" can only be a result of a failed eeprom write, since Glyn is not using the eeprom one can only assume the data being written to the eeprom is the issue as you are clearly experiencing eeprom issues if the settings are "not retained" in which I include erroneous overwriting.
Glyn - I notice (in the rfm69 sketch) the configSilent() returns the node id and a truth test is done on that, is it therefore possible if the node id was lost, null or zero a "successful" eeprom write (with bad data) would be considered a fail due to the 0 node id ? if something along those lines happened it might not be so obvious to spot running the emonpi sketch.
Paul
Re: RFM12PI receiver goes hard down sometimes
Hi... I just had a freeze again... I found a solution without rebooting or power cycling the pi... If I start minicom and use the "123 z" option, I can reset the board with the script... Afterwards I have to configure it again with the group ID and frequency I'm using... But hey, no reboot needed anymore... Maybe I can build the 123z command into the script or something so I can restart it completely with the script or automatically... Anyone an idea how to send the 123z via the script?
Re: RFM12PI receiver goes hard down sometimes
Is it possible to allow me to post without a review? Thats a bit anoying... ;)
Re: RFM12PI receiver goes hard down sometimes
Hi guys,
I have had success fixing a similar issue I had been experiencing with the emonPi where the RFM69CW would hang. This now seems to have been fixed by latest commits to JeeLib library. I have re-compiled the RFM69Pi firmware using latest JeeLib. I have bumped the RF12_demo version number from 12 to 13 to enable us to tell the difference. If you're experiencing hanging issues please could you try the new firmware.
https://github.com/openenergymonitor/RFM2Pi/blob/master/firmware/RFM69CW_RF_Demo_ATmega328/V13_RFM69CW_RF12_Demo_ATmega328.cpp.hex
You can update by running the update script pointing to V13_RFM69CW_RF12_Demo_ATmega328.cpp.hex
https://github.com/openenergymonitor/RFM2Pi/blob/master/update-RFM69
Please let me know the results.
Re: RFM12PI receiver goes hard down sometimes
Hey Glyn,
thanks, I will try this when I'm home! :)
Re: RFM12PI receiver goes hard down sometimes
You could be on to something there Glyn, I never use the hex files, I always compile locally which maybe why I don't see the same issues since I will of unintentionally always had the latest JeeLib.
So is this hex file the same rfm69 "v12" sketch just recompiled with latest JeeLib and no other changes to the sketch?
toberkel - That command shouldn't "restart" it should put it into a sleep state requiring a powercycle to exit.
https://github.com/openenergymonitor/RFM2Pi/blob/master/firmware/RFM69CW_RF_Demo_ATmega328/RFM69CW_RF12_Demo_ATmega328/RFM69CW_RF12_Demo_ATmega328.ino#L314
or a proper "reset" signal which is what I was trying to do with the script. The Pi has never needed a reboot for this issue it's just away of powercycling the RFM2Pi without disconnecting it.
Re: RFM12PI receiver goes hard down sometimes
@pb66
Q. "So is this hex file the same rfm69 "v12" sketch just recompiled with latest JeeLib and no other changes to the sketch?"
A. Yes, exactly
Re: RFM12PI receiver goes hard down sometimes
Hi
Well its been a long wait but again my test has stopped posting. I can confirm that the led on the rfm had stopped flashing. Unfortunately I cannot investigate restarting because of brain fade.
I have restarted the pi and its now posting away again. It worked OK for about 12 weeks before it failed.
Regards
Ina
Re: RFM12PI receiver goes hard down sometimes
I have updated the firmware as indicated above. Note that the reset_rfm12pi script still doesn't cause the light to flash after this update, but I assume the reason for the update was for stability rather than control.
I'll post here if I get another hang, this usually has been between 2 - 28 days.
Re: RFM12PI receiver goes hard down sometimes
@pb66
Yes, but with my way I don't need to powercycle the pi... I send the 123z command via minicom and afterwards I execute the mentioned script. Then, when I start minicom again, the board is responding and after I configured the propper settings (frequency, group id) it shows the packets again. So, maybe I can automate this process...
Re: RFM12PI receiver goes hard down sometimes
Thanks a lot for testing so promptly.
Re: RFM12PI receiver goes hard down sometimes
Hi
I have tried to update firmware as above but get avrdude: command not found.
Is this normally installed in the emonhub or do I need to upgrade software?
Also I have RFM12pi v2.6 pcb with an RFM69 sub pcb. Is this new V13 firmware correct for this set up.
Regards
Ian
Re: RFM12PI receiver goes hard down sometimes
You should be able to install it and auto reset by git cloning running the update script here: https://github.com/openenergymonitor/avrdude-rpi
Re: RFM12PI receiver goes hard down sometimes
Could someone please remove the flag "post needs aproval" for my account? :D
Re: RFM12PI receiver goes hard down sometimes
One of my posts is missing... :-/
Re: RFM12PI receiver goes hard down sometimes
One week later... Hung again :(
I'll swap out the Pi with a a Pi 2 over the weekend and see if there is any improvement.
Re: RFM12PI receiver goes hard down sometimes
@toberkel - sorry I've missed your posts somehow. If the reset script works to restart the rfm2pi then it is working and can therefore operate anytime, I think the LED activity must differ on some firmwares then. So the rfm2pi board is being reset you are just not aware as we have been expecting a longer LED flash. No need to use 123z or write an additional script.
The fact you need to re input the settings normally held in the eeprom is the key here although we can tell if it's the cause or the effect but either way they should be present and correct.
@SteveM - I would be very surprised if it made any difference, It seems the LED flash may not be a definite sign that the rfm2pi is being reset.
Paul
Re: RFM12PI receiver goes hard down sometimes
I think I may have now experienced this. I noticed none of my RFM network inputs had updated on emoncms since 7am yesterday, checked the LED on the emonTx in the garage and that was still flashing as expected, but the rfm2pi (rfm69@433mhz running standard oem rfm69 firmware, compiled locally with latest libs not from hex) was not flashing, when I ssh'd in emonhub was still running just no signs of any rfm traffic.
Since I had the reset script still installed from the tests above I tried it (without stopping emonhub) and everything started back up once the rfm2pi's "option instructions text" had passed.
I cannot confirm if there were any settings lost on the rfm2pi because this one runs the default 15,210,433 settings, but it does mean if emonhub was made to respond to period of no receipts it could initiate the reset (and also resend the settings if needed).
This would side step but not fix the root issue.
It also confirms our suspicions about it being the rfm2pi (either fw,hw or influenced) rather than the Pi or emonhub as I did nothing but momentarily ground the avr's reset line via the gpio and script.
Paul
Re: RFM12PI receiver goes hard down sometimes
I have had the same issue over the last few weeks. This is on a new hardware setup. Pi2, rfm69pi and a fresh install of V9 rc2 running on HDD as per Paul's installation manual.
Paul in the other thread you wrote
Bramco - The drop-outs maybe the rfm2pi locking out and rebooting the Pi also restarts the rfm2pi, see the latter part of the RFM12PI receiver goes hard down sometimes thread for more info. the test would be to ssh in and reset the rfm2pi by pulsing the reset pin (pin7 of the Pi's gpio).
The issues here may apply but it would be unusual that no packets get through, these issues normally arise from clashes and/or bit syncing issues, the bit syncing is unlikely unless you have all the temp sensors disconnected (zero values) and although the extra sensitivity of the rfm69 may introduce some clashing some data would still get through.
Paul
The next time it happens I will try the reset, I'm assuming this is what's in your script mentioned above?
And just to be clear, this isn't about clashes or bit syncing issues, it's that the rfm69 has stopped. No flashing light. As I mentioned in the other thread I think, I'm pretty sure I haven't got any Pi power issues, it's on a 2W power supply with a new USB hub on a separate power supply for the HDD.
Of all the folks that have contributed to this thread with the same issue.
Simon
EDIT
PS to the above.
@Glynn - wouldn't it be sensible to make the flashes on the rfmxxpi boards more discernable. So extend the flash for normal behaviour/rf packet received to say 1 second? and make the flash at setup something different, e.g. three quick flashes. From a lot of contributions it seems that lots of people don't notice the flashes until it is pointed out to them.
Obviously haven't looked at the code to see how easy this would be but I think it might help.
Simon
Re: RFM12PI receiver goes hard down sometimes
Bump!!
Hi once again. :-)
Anyone from the thread above have a definitive solution to the rfm69pi suddenly stopping? Or do we just have to put up with occasional hard failures like this?
@ Glyn - any thoughts on improving the heartbeat and startup signals on the led? I.e. making them more easily discernable.
Re: RFM12PI receiver goes hard down sometimes
@Bramco - the problem in this thread was establishing a pattern and narrowing the diagnosis. some users have not been able to confirm the reset script even works during normal functioning and It is pretty difficult to establish if something reacts differently when faulty when the expected behavior is not confirmed.
Plus there are several different devices, several different firmwares etc. It would be good to get to the bottom of this but the lack of case data prevents any progress. have you tried the lateset firmware hex? (v13 - same firmware later JeeLib)
Paul
Re: RFM12PI receiver goes hard down sometimes
Thanks Paul for the summary. I was hoping some of the folks that have been on this thread might have found a solution in the interim but not thought to report it here.
It would be great to rename this thread with a SOLVED prefix :-)
Anyway, I'll check versions later and report back.
I still think that given quite a few users have seen this and reported it (and there's probably more out there that just do a reboot and don't report it) that it would be a good idea to get to the bottom of it or at least incorporate a solution to this in emonhub or somewhere. As you know I'm not Linux fluent, so haven't a clue really where to start to think about a solution.
Re: RFM12PI receiver goes hard down sometimes
Hi Paul,
Following the instructions here -> http://wiki.openenergymonitor.org/index.php/RFM69Pi_V3
I get the following from avrdude which seems to be complaining about the user configuration file, i.e.
the firmware file.On re-reading it seems to be the config file for avrdude.Also in your note above you mention V13. Is the base file now V13? or should I be using this file not the base file? See the directory listing below.
Simon
pi@Homepi ~/RFM2Pi/firmware/RFM69CW_RF_Demo_ATmega328 $ ls
Blink.cpp.hex
Optiboot328_8mhz_RFM69CW_RF12_Demo_ATmega328.cpp.hex
RFM12_Demo_ATmega328.cpp.hex
RFM12_Demo_ATmega328.cpp.hex.readme
RFM69CW_RF12_Demo_ATmega328
RFM69CW_RF12_Demo_ATmega328.cpp.hex
V13_RFM69CW_RF12_Demo_ATmega328.cpp.hex
pi@Homepi ~/RFM2Pi/firmware/RFM69CW_RF_Demo_ATmega328 $ avrdude -v -c arduino -p ATMEGA328P -P /dev/ttyAMA0 -b 38400 -U flash:w:RFM69CW_RF12_Demo_ATmega328.cpp.hex
avrdude-original: Version 6.1, compiled on Jul 7 2015 at 13:18:47
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2014 Joerg Wunsch
System wide configuration file is "/etc/avrdude.conf"
User configuration file is "/root/.avrduderc"
User configuration file does not exist or is not a regular file, skipping
Using Port : /dev/ttyAMA0
Using Programmer : arduino
Overriding Baud Rate : 38400
avrdude-original: Using autoreset DTR on GPIO Pin 7
Re: RFM12PI receiver goes hard down sometimes
Yes, you can ignore the "user configuration file" messages they are just confirming there is no "per user" conf file found, the system wide conf file is there.
The file you have chosen should work, as far as I recall that is the same sketch as the "V13_" version, only JeeLib was updated between the files being compiled, unless something has changed i think "V13_" should be the one to use, you should aware the V13 prefix was just to distinguish it from the existing compiled file V13 is still v12, perhaps V12a would have been more appropriate.
The output you show seems correct just not completed and/or any error message. Did it exit to the command prompt? Did it take long? Was there any led activity? is the Pi in read/write mode?
Did you try the reset script to confirm the reset pin/gpio connection? You can also test avrdude and the connection without attempting an upload by leaving the -U option off the command line you are using, it should read the AVR fuses and provide a reassuring print out confirming comms.
Paul
Re: RFM12PI receiver goes hard down sometimes
Hi Paul,
avrdude didn't give any error messages, it simply exited to the command prompt and it was pretty immediate, no led activity and the pi is I'm pretty sure in r/w mode. It's a Pi2 with rfm69 set up following your installation instructions with a USB HDD.
Just tried the reset script which just returns to the command prompt with no output. I've tried it with emonhub stopped as well as running - exactly the same behaviour.
How do I confirm the reset pin/gpio connection?
Running avrdude by leaving off the -U option gives me exactly the same output as running it with the -U option. I'm a little concerned that the output indicates it is 'Using autoreset DTR on GPIO Pin 7'. From reading the other documentation this refers to pin 4.
Sorry to be so much trouble here but it would be good to get to the bottom of this if there is a problem with the instructions.
PS It might be an idea to add the info about your reset script to the documentation on the rf2pi in the wiki.
Simon
Re: RFM12PI receiver goes hard down sometimes
Just an update to link to a solution to the avrdude not doing anything.
See this post by http://openenergymonitor.org/emon/node/11747 by Ingmar Verheij. Basically you need to use an old version of avrdude.
Simon
Re: RFM12PI receiver goes hard down sometimes
if you are watching the output from the rfm2pi, either in a serial console or by tailing emonhub.log and use the reset script you should see the setup text to confirm it was reset, I think the reset script would be useful, I will be including it as part of a watchdog function in the next emonhub version, so that if there is no traffic from a rfm2pi for a given time it will be reset automatically, but this wouldn't "fix" rfm2pi problems, just make them tolerable.
The timing ofthe reset in avrdude 6.1 seems to be different and extending it seems to help but I have not found a single timing that works everytime yet, reverting to the previous version just falls back to the tried and tested timing for the reset.
pin 7 and pin 4 are actually different naming conventions for the same physical pin.
Lets us know how you get on.
Paul


Progress: {{this.status.calling}}
Failed: {{this.status.callFailed}}
Confirmed: {{this.status.callConfirmed}}
Ended: {{this.status.callFailed}}


ABOUT IDG
IDG founded in 2015 is a visualization group in Zhejiang University, P.R. China. Our research aims to create novel information visualization, visual analytics, augmented/virtual reality, and human computer interaction technology to empower users to do analytical reasoning with big data in various settings, such as urban informatics, sports analytics, behavior analytics, and social media analytics.


VA Assessment Editor
Survey Builder
Pages Builder
Formula Editor
Action Editor
Note Editor
Completion Editor


IMPORTANT: COMMANDS NEED < AND > ON EITHER SIDE
this guide will now teach you how to start constructing the internals of the page.
the first step you want to do is to go into your body area and type p insert message here .
you can do that as many times as you want to write a paragraph.
after that you can write h1 h2 or h3 insert text here and then /h1 /h2 or /h3 to select
the size of the text. example: in your body write h1 derp /h1 and your text will show up very large
showing the message derp.
the next thing you can do is write i b or u insert text here /i /b or /u and your text will show
as either italic, bold, or underlined.
this is the end of the medium section. I will start to teach you some css in hard.
home


{{extend 'layout.html'}} {{=form}} To delete, check the box above and click OK. Click OK without checking the box to return to the previous page.


{% extends "../../layout.html" %} {% block sectionClasses %}plugins hasBreadCrumb plugins-spincast-scheduledtasks{% endblock %} {% block meta_title %}Plugins - Spincast Scheduled Tasks{% endblock %} {% block meta_description %}Spincast Scheduled Tasks plugin - scheduled tasks / cron jobs management{% endblock %} {% block scripts %} {% endblock %} {% block body %}
This plugin allows your application and the other plugins to register scheduled tasks to be run. A scheduled tasks, also called "cron job", is a piece of code that will be run one or multiple times, at a specific date or at a specific interval.
The plugin uses the Quartz scheduler library under the hood, and provides utilities to easily register your scheduled tasks, with full dependency injection support.
The first thing to do is to create a class for your new scheduled task. A scheduled task's class must implement the SpincastScheduledTask interface, but we also recommend that it extends the default SpincastScheduledTaskBase abstract class, which provides some built-in functionalities.
{% verbatim %}
public class MyScheduledTask extends SpincastScheduledTaskBase { @Override public Trigger getTrigger() { return TriggerBuilder.newTrigger() .startNow() .withSchedule(simpleSchedule().withIntervalInMinutes(60) .repeatForever()) .build(); } @Override public void executeSafe(JobExecutionContext context) { // The actions to be executed... System.out.println("I run!"); } }{% endverbatim %}
Explanation :
getTrigger()
is the
method by which you define when the scheduled task should run. Have a look
at the Quartz documentation
to see all the available options. There are a lot!
executeSafe()
is the
method executed when the scheduled task runs. You implement the logic of your scheduled task there.
Note that since we extend the provided SpincastScheduledTaskBase
class, the execution of the scheduled task is safe: if a previous instance of the job is already running,
any new instance will be canceled and won't run.
Once your scheduled tasks are ready, you need to register them in the Guice context. You do this
using the Multibinder<SpincastScheduledTaskJob>
multibinder,
in your application's Guice module:
{% verbatim %}
public class AppModule extends SpincastGuiceModuleBase { @Override protected void configure() { // Register the app's scheduled task Multibinder<SpincastScheduledTask> scheduledTasksMultibinder = Multibinder.newSetBinder(binder(), SpincastScheduledTask.class); scheduledTasksMultibinder.addBinding().to(MyScheduledTask.class).in(Scopes.SINGLETON); scheduledTasksMultibinder.addBinding().to(MyOtherScheduledTask.class).in(Scopes.SINGLETON); // Other bindings... } }{% endverbatim %}
You can also use the Multibinder<Set<SpincastScheduledTask>>
to
register a set of scheduled tasks, instead of registering them one by one. This alternative
is useful when you have a Provider
that decides of the scheduled tasks to bind:
{% verbatim %}
public class AppModule extends SpincastGuiceModuleBase { @Override protected void configure() { // Register the app's scheduled tasks provider Multibinder<Set<SpincastScheduledTask>> acheduledTaskSetsMultibinder = Multibinder.newSetBinder(binder(), Key.get(new TypeLiteral<Set<SpincastScheduledTask>>() {})); acheduledTaskSetsMultibinder.addBinding() .toProvider(MyScheduledTasksProvider.class) .in(Scopes.SINGLETON); // Other bindings... } }{% endverbatim %}
There is nothing more to do! When you start your application, the registered scheduled tasks should run
respecting their Triggers
.
1. Add this Maven artifact to your project:
<dependency> <groupId>org.spincast</groupId> <artifactId>spincast-plugins-scheduledtasks</artifactId> <version>{{spincast.spincastCurrrentVersion}}</version> </dependency>
2. Add an instance of the SpincastScheduledTasksPlugin plugin to your Spincast Bootstrapper: {% verbatim %}
Spincast.configure() .plugin(new SpincastScheduledTasksPlugin()) // ...


You have successfully registered to our payment system.
We have sent you a verification email with verification instructions, please verify your email address in order to use our services.


3. Model selection: choosing estimators and their parameters¶
3.1. Score, and cross-validated scores¶
As we have seen, every estimator exposes a score method that can judge the quality of the fit (or the prediction) on new data. Bigger is better.
>>> from scikits.learn import datasets, svm
>>> digits = datasets.load_digits()
>>> X_digits = digits.data
>>> y_digits = digits.target
>>> svc = svm.SVC()
>>> svc.fit(X_digits[:-100], y_digits[:-100]).score(X_digits[-100:], y_digits[-100:])
0.41999999999999998
To get a better measure of prediction accuracy (which we can use as a proxy for goodness of fit of the model), we can successively split the data in folds that we use for training and testing:
>>> import numpy as np
>>> X_folds = np.array_split(X_digits, 3)
>>> y_folds = np.array_split(y_digits, 3)
>>> scores = list()
>>> for k in range(3):
... # We use 'list' to copy, in order to 'pop' later on
... X_train = list(X_folds)
... X_test = X_train.pop(k)
... X_train = np.concatenate(X_train)
... y_train = list(y_folds)
... y_test = y_train.pop(k)
... y_train = np.concatenate(y_train)
... scores.append(svc.fit(X_train, y_train).score(X_test, y_test))
>>> print scores
[0.41068447412353926, 0.41569282136894825, 0.42737896494156929]
This is called a K-Fold cross-validation.
3.2. Cross-validation generators¶
The code above to split data in train and test sets is tedious to write. The scikits.learn exposes cross-validation generators to generate list of indices for this purpose:
>>> from scikits.learn import cross_val
>>> k_fold = cross_val.KFold(n=6, k=3, indices=True)
>>> for train_indices, test_indices in k_fold:
... print 'Train: %s | test: %s' % (train_indices, test_indices)
Train: [2 3 4 5] | test: [0 1]
Train: [0 1 4 5] | test: [2 3]
Train: [0 1 2 3] | test: [4 5]
The cross-validation can then be implemented easily:
>>> kfold = cross_val.KFold(len(X_digits), k=3)
>>> [svc.fit(X_digits[train], y_digits[train]).score(X_digits[test], y_digits[test])
... for train, test in kfold]
[0.41068447412353926, 0.41569282136894825, 0.42737896494156929]
To compute the score method of an estimator, the scikits.learn exposes a helper function:
>>> cross_val.cross_val_score(svc, X_digits, y_digits, cv=kfold, n_jobs=-1)
array([ 0.41068447, 0.41569282, 0.42737896])
n_jobs=-1 means that the computation will be dispatched on all the CPUs of the computer.
Cross-validation generators
| KFold(n, k) | StratifiedKFold(y, k) | LeaveOneOut(n) | LeaveOneLabelOut(labels) |
| Split it K folds, train on K-1, test on left-out | Make sure that all classes are even accross the folds | Leave one observation out | Takes a label array to group observations |
Exercise
On the digits dataset, plot the cross-validation score of a SVC estimator with an RBF kernel as a function of gamma (use a logarithmic grid of points, from 1e-6 to 1e-1).
3.3. Grid-search and cross-validated estimators¶
3.3.1. Grid-search¶
The scikits.learn provides an object that, given data, computes the score during the fit of an estimator on a parameter grid and chooses the parameters to maximize the cross-validation score. This object takes an estimator during the construction and exposes an estimator API:
>>> from scikits.learn.grid_search import GridSearchCV
>>> gammas = np.logspace(-6, -1, 10)
>>> clf = GridSearchCV(estimator=svc, param_grid=dict(gamma=gammas),
... n_jobs=-1)
>>> clf.fit(X_digits[:1000], y_digits[:1000])
GridSearchCV(cv=None,...
>>> clf.best_score
0.98899798001594419
>>> clf.best_estimator.gamma
0.00059948425031894088
>>> # Prediction performance on test set is not as good as on train set
>>> clf.score(X_digits[1000:], y_digits[1000:])
0.96110414052697613
By default the GridSearchCV uses a 3-fold cross-validation. However, if it detects that a classifier is passed, rather than a regressor, it uses a stratified 3-fold.
Nested cross-validation
>>> cross_val.cross_val_score(clf, X_digits, y_digits)
array([ 0.9933222 , 0.98330551, 0.98831386])
Two cross-validation loops are performed in parallel: one by the GridSearchCV estimator to set gamma, the other one by cross_val_score to measure the prediction performance of the estimator. The resulting scores are unbiased estimates of the prediction score on new data.
Warning
You cannot nest objects with parallel computing (n_jobs different than 1).
3.3.2. Cross-validated estimators¶
Cross-validation to set a parameter can be done more efficiently on an algorithm-by-algorithm basis. This is why, for certain estimators, the scikits.learn exposes “CV” estimators, that set their parameter automatically by cross-validation:
>>> from scikits.learn import linear_model, datasets
>>> lasso = linear_model.LassoCV()
>>> diabetes = datasets.load_diabetes()
>>> X_diabetes = diabetes.data
>>> y_diabetes = diabetes.target
>>> lasso.fit(X_diabetes, y_diabetes)
LassoCV(alphas=array([ 2.14804, 2.00327, ..., 0.0023 , 0.00215]),
copy_X=True, cv=None, eps=0.001, fit_intercept=True, max_iter=1000,
n_alphas=100, normalize=False, precompute='auto', tol=0.0001,
verbose=False)
>>> # The estimator chose automatically its lambda:
>>> lasso.alpha
0.013180196198701137
These estimators are called similarly to their counterparts, with ‘CV’ appended to their name.
Exercise
On the diabetes dataset, find the optimal regularization parameter alpha.
Bonus: How much can you trust the selection of alpha?


Please check your username, UID, and password and try again.
{{statusTitle}}
{{statusMessage}}
Generate maps from these sources:
Tile Servers
Mapcache can pull tiles from a tile server such as Open Street Map and save the tiles for offline use.
GeoTIFF
Upload a GeoTIFF file containing georeferencing information and mapcache will create map tiles from the GeoTIFF. Mapcache utilizes GDAL to parse the GeoTIFF files and can support any projection GDAL supports.
MBTiles
MBTiles stores tiles in a SQLite database. Mapcache uses mbutil to parse and create MBTiles.
WMS Servers
A Web Map Service is an OGC specification for serving georeferenced map images.
GeoJSON
{ }
Encoding of geogrpahic data as valid JSON.
Shapefile
A zip of files including a .shp .shx and .dbf in the Esri shapefile format. Mapcache uses shp2json to parse shapefiles.
KMZ
Zipped KML file. Mapcache uses shp2json to parse KMZ files.
Output maps to these formats:
XYZ/TMS
Produces a cache of image tiles according to the XYZ tiling scheme. These tiles can be used by many mapping libraries and mobile clients.
GeoPackage
GeoPackage is an OGC specification which allows the storage of vector data, and tile matrix sets.
MBTiles
MBTiles stores tiles in a SQLite database. Mapcache uses mbutil to parse and create MBTiles.
GeoJSON
{ }
Encoding of geogrpahic data as valid JSON.
KML
XML notation for encoding geographic data.
Shapefile
A zip of files including a .shp .shx and .dbf in the Esri shapefile format.


#include <csirx_structs_if.h>
Data Fields | |
| uint8_t | enableVcSelect |
| uint16_t | vcSelect |
| uint8_t | enableDt1 |
| uint8_t | datatypeSelect1 |
| uint8_t | enableDt0 |
| uint8_t | datatypeSelect0 |
Secondary CSI2 Slave Controller Data outputs configuration. This register is used to configure the data types and virtual channels are processed and output by this stream.
| uint8_t CSIRX_StreamDataCfg_s::datatypeSelect0 |
First data type format that this stream will process
| uint8_t CSIRX_StreamDataCfg_s::datatypeSelect1 |
Second data type format that this stream will process
| uint8_t CSIRX_StreamDataCfg_s::enableDt0 |
Enable processing of dt0
| uint8_t CSIRX_StreamDataCfg_s::enableDt1 |
Enable processing of dt1
| uint8_t CSIRX_StreamDataCfg_s::enableVcSelect |
Enable processing of stream using virtual channel selection; Default '0' -> All Virtual Channels are processed
| uint16_t CSIRX_StreamDataCfg_s::vcSelect |
Selection of Virtual Channels to be processed: Active when stream enable VC bit is active VcSelect0[16] -> Virtual Channel Select 0 is processed VcSelect1[17] -> Virtual Channel Select 1 is processed VcSelect2[18] -> Virtual Channel Select 2 is processed VcSelect3[19] -> Virtual Channel Select 3 is processed ...


As a programmer you must be familiar with that gut feeling that this second nested loop you're just making is going to slow down your application.
But what about that third loop? And that fourth loop? Recursive calls? HA!
Although there's plenty of resources that explain what's the Big O notation and what are the most efficient algorithms sometimes the little skeptical on us comes back at us saying "Do you really believe it?"
This is my approach to show you that you don't have to be skeptical. You can just try it yourself, in your own browser.
Pretty simple:
You will see how the graph automatically populates and provides you with a neat visualization you can then filter or zoom to verify your results.
Click on Resources to get a list of nifty resources to learn more about Big O notation or the sources of the algorithms that were used during the making of this site.
No algorithms or developers were harmed during the making of this site.If you see any unexpected result or want to add your beloved algorithm missing from here please note this project is, not only Open Sourced, but it also welcomes Pull Requests. Just head over to this window and send me yours.
The code hereby provided has been developed as part of an assignment for a Full Stack Developer Certificate on Code Institute. Partially or completely copying this code and presenting as an assigment can violate your school/college plagiarism policies even if abiding by the license of this project. I'm not liable if you get into trouble for doing this.


Introduction to the cf.Field
object¶
A cf.Field
object stores a field as defined by the CF-netCDF
conventions and the CF data model. It is a container for a
data array and metadata comprising properties to describe the physical
nature of the data and a coordinate system (called a domain), which
describes the positions of each element of the data array.
It is structured in exactly the same way as a filed in the CF data
model and, as in the CF data model, all components of a cf.Field
object are optional.
Displaying the contents¶
The structure may be exposed with three different levels of detail.
The built-in repr
function returns a short, one-line description of
the field:
>>> f
<CF Field: air_temperature(time(12), latitude(64), longitude(128)) K>
This gives the identity of the field (air_temperature), the identities and sizes of its data array axes (time, latitude and longitude with sizes 12, 64 and 128 respectively) and the units of the field’s data array (K).
The built-in str
function returns the same information as the the
one-line output, along with short descriptions of the field’s other
components:
>>> print f
Field: air_temperature (ncvar%tas)
----------------------------------
Data : air_temperature(time(1200), latitude(64), longitude(128)) K
Cell methods : time: mean (interval: 1.0 month)
Axes : time(12) = [ 450-11-01 00:00:00, ..., 451-10-16 12:00:00] noleap calendar
: latitude(64) = [-87.8638000488, ..., 87.8638000488] degrees_north
: longitude(128) = [0.0, ..., 357.1875] degrees_east
: height(1) = [2.0] m
This shows that the field has a cell method and four dimension coordinates, one of which (height) is a coordinate for a size 1 axis that is not a axis of the field’s data array. The units and first and last values of the coordinates’ data arrays are given and relative time values are translated into strings.
The field’s dump
method describes each component’s
properties, as well as the first and last values of the field’s data
array:
>>> f.dump()
----------------------------------
Field: air_temperature (ncvar%tas)
----------------------------------
experiment_id = 'pre-industrial control experiment'
long_name = 'Surface Air Temperature'
standard_name = 'air_temperature'
title = 'model output prepared for IPCC AR4'
Domain Axis: height(1)
Domain Axis: latitude(64)
Domain Axis: longitude(128)
Domain Axis: time(12)
Data(time(12), latitude(64), longitude(128)) = [[[236.512756348, ...,<PHONE_NUMBER>2]]] K
Cell Method: time: mean (interval: 1.0 month)
Dimension coordinate: time
Data(time(12)) = [ 450-11-16 00:00:00, ..., 451-10-16 12:00:00] noleap calendar
Bounds(time(12), 2) = [[ 450-11-01 00:00:00, ..., 451-11-01 00:00:00]] noleap calendar
axis = 'T'
long_name = 'time'
standard_name = 'time'
Dimension coordinate: latitude
Data(latitude(64)) = [-87.8638000488, ..., 87.8638000488] degrees_north
Bounds(latitude(64), 2) = [[-90.0, ..., 90.0]] degrees_north
axis = 'Y'
long_name = 'latitude'
standard_name = 'latitude'
Dimension coordinate: longitude
Data(longitude(128)) = [0.0, ..., 357.1875] degrees_east
Bounds(longitude(128), 2) = [[-1.40625, ..., 358.59375]] degrees_east
axis = 'X'
long_name = 'longitude'
standard_name = 'longitude'
Dimension coordinate: height
Data(height(1)) = [2.0] m
axis = 'Z'
long_name = 'height'
positive = 'up'
standard_name = 'height'
Data¶
A field’s data array is a cf.Data
object and is returned by its
data
attribute.
>>> f.data
<CF Data: [[[89.0, ..., 66.0]]] K>
The cf.Data
object:
- Contains an N-dimensional array with many similarities to a
numpy
array. - Contains the units of the array elements.
- Uses LAMA functionality to store and operate on arrays which are larger then the available memory.
- Supports masked arrays [1], regardless of whether or not it was initialized with a masked array.
Data attributes¶
Some of a field’s reserved attributes return information on its
data. For example, to find the shape of the data and to retrieve the
data array as an actual numpy
array:
>>> f.shape
(1, 3, 4)
>>> f.array
array([[[ 89., 80., 71.],
[ 85., 76., 67.],
[ 83., 74., 65.],
[ 84., 75., 66.]]])
The data array’s missing value mask may be retrieved with the
mask
attribute. The mask is returned as a new field with a
boolean data array:
>>> m = f.mask
>>> m.data
<CF Data: [[[False, ..., True]]]>
If the field contains no missing data then a mask field with False values is still returned.
CF properties¶
Standard CF data variable properties (such as
standard_name
, units
, etc.) all have reserved
attribute names. See the list of reserved CF properties for details. These properties may be set,
retrieved and deleted like normal python object attributes:
>>> f.standard_name = 'air_temperature'
>>> f.standard_name
'air_temperature'
>>> del f.standard_name
as well as with the dedicated setprop
, getprop
and
delprop
field methods:
>>> f.setprop('standard_name', 'air_temperature')
>>> f.getprop('standard_name')
'air_temperature'
>>> f.delprop('standard_name')
Non-CF properties (i.e. those which are allowed by the CF conventions but which do not have standardised meanings) must be accessed using these three methods:
>>> f.setprop('project', 'CMIP7')
>>> f.getprop('project')
'CMIP7'
>>> f.delprop('project')
All of the field’s CF properties may be retrieved with the field’s
properties
method:
>>> f.properties()
{'_FillValue': 1e+20,
'project': 'CMIP7',
'long_name': 'Surface Air Temperature',
'standard_name': 'air_temperature',
'units': 'K'}
Other attributes¶
Any other attribute may be set on directly on a field object with, in general, no special meaning attached to it. These attributes are distinct properties (CF and non-CF) since they are not considered as part of the CF conventions and will not be written to files on disk.
The following attributes do, however, have particular interpretations:
| Attribute | Description |
|---|---|
id |
An identifier for the field in the absence of a
standard name. See the identity method for details. |
ncvar |
The netCDF variable name of the field. |
All of the field’s attributes may be retrieved with the field’s
attributes()
method:
>>> f.foo = 'bar'
>>> f.attributes()
{'foo': 'bar',
'ncar': 'tas'}
Methods¶
A field has a large range of methods which, in general, either return information about the field or change the field in place. See the list of methods and manipulating fields section for details.
Domain¶
A field’s domain completely describes the location and nature of the field’s data. It comprises domain axes (which describe the field’s dimensionality), dimension coordinate, auxiliary coordinate and cell measure objects (which themselves contain data arrays and properties to describe them) and coordinate reference objects (which relate the field’s coordinate values to locations in a planetary reference frame).
Each item has a unique internal identifier (is a string containing a number), which serves to link related items.
Items¶
Domain items are stored in the following objects:
| Item | cf object |
|---|---|
| Dimension coordinate object | cf.DimensionCoordinate |
| Auxiliary coordinate object | cf.AuxiliaryCoordinate |
| Cell measure object | cf.CellMeasure |
| Coordinate reference object | cf.CoordinateReference |
These items may be retrieved with a variety of methods, some specific
to each item type (such as cf.Field.dim
) and some more generic (such
as cf.Field.coords
and cf.Field.item
):
| Item | Field retrieval methods |
|---|---|
| Dimension coordinate object | dim , dims , coord , coords
item , items |
| Auxiliary coordinate object | aux , auxs , coord , coords
item , items |
| Cell measure object | measure , measures , item , items |
| Coordinate reference object | ref , refs , item , items |
In each case the singular method form (such as aux
) returns
an actual domain item whereas the plural method form (such as
auxs
) returns a dictionary whose keys are the domain item
identifiers with corresponding values of the items themselves.
For example, to retrieve a unique dimension coordinate object with a standard name of “time”:
>>> f.dim('time')
<CF DimensionCoordinate: time(12) noleap>
To retrieve all coordinate objects and their domain identifiers:
>>> f.coords()
{'dim0': <CF DimensionCoordinate: time(12) noleap>,
'dim1': <CF DimensionCoordinate: latitude(64) degrees_north>,
'dim2': <CF DimensionCoordinate: longitude(128) degrees_east>,
'dim3': <CF DimensionCoordinate: height(1) m>}
To retrieve all domain items and their domain identifiers:
>>> f.items()
{'dim0': <CF DimensionCoordinate: time(12) noleap>,
'dim1': <CF DimensionCoordinate: latitude(64) degrees_north>,
'dim2': <CF DimensionCoordinate: longitude(128) degrees_east>,
'dim3': <CF DimensionCoordinate: height(1) m>}
In this example, all of the items happen to be coordinates.
Domain axes¶
Common axes of variation in the field’s data array and the domain’s items are defined by the domain’s axes.
Particular axes may be retrieved with the axes
method:
>>> f.axes()
set(['dim1', 'dim0' 'dim2' 'dim3'])
>>> f.axes(size=19)
set(['dim1'])
>>> f.axes('time')
set(['dim0'])
The axes spanned by a domain item or the field’s data array may be
retrieved with the fields item_axes
or
data_axes
methods respectively:
>>> f.item_axes('time')
['dim0']
>>> f.data_axes()
['dim0', 'dim1' 'dim2' 'dim3']
Note that the field’s data array may contain fewer size 1 axes than its domain.
Footnotes
| [1] | Arrays that may have missing or invalid entries |


Daily Sales
55% increase in today sales.
Email Subscriptions
Last Campaign Performance
Completed Tasks
Last Campaign Performance
{loop="$qtdtaskstatusbysection"}
{if="$key != 'TOTAL'"}
{loop="$value"}
{if="$key != 'TOTAL'"}
{/if}
{/loop}
| {$key} | {$value} |
Employees Stats
New employees on 15th September, 2016
| ID | Name | Salary | Country |
|---|---|---|---|
| 1 | Dakota Rice | $36,738 | Niger |
| 2 | Minerva Hooper | $23,789 | Curaçao |
| 3 | Sage Rodriguez | $56,142 | Netherlands |
| 4 | Philip Chaney | $38,735 | Korea, South |


{% load i18n %}
{% blocktrans with 'https://github.com/kencochrane/raven-java' as link %}Start by installing raven-java.{% endblocktrans %}
{% trans "Create an instance of the client:" %}
RavenClient client = new RavenClient("{% if dsn %}{{ dsn }}{% else %}SENTRY_DSN{% endif %}");
{% trans "Now call out to the raven client to capture events:" %}
// {% trans "record a simple message" %} client.captureMessage("hello world!"); // {% trans "capture an exception" %} try { throw new RuntimeException("Uh oh!"); } catch (Throwable e) { client.captureException(e); }
{% blocktrans with 'https://github.com/kencochrane/raven-java' as link %}For more information on other uses of Raven with Java, please see the official documentation for raven-java.{% endblocktrans %}


Although related, examples are /not/ the same as the test fixtures. Tests are tests, examples are examples.
Also see the documentation and the UI test fixture.
Click on the counter to make it increment:


You can Add/Edit notes on individual profiles too!
A little icon indicates if you have an existing note for a profile.
Coming Soon
- View all your notes on one page.
- Sign in with Twitter (current sign in uses the Google Account logged into Chrome).
- OMG the kerning in this logo is TERRIBLE. Will fix.
- Links for URLs and @usernames in notes.
Bugs? Feature Suggestions?
Contact me on Twitter!


WITNESS LIST Regulated Industries Committee April 1, 2003-2:00P HB 1175 For: Doerflinger, Richard (U.S. Confrence of Catholic Bishops Secretariat for Pro-Life Activities) Gerstenschlager, MerryLynn (Self and Texas Eagle Forum) Kelly, James (Self) Prentice, David (Self and Do No Harm) Against: Arnold, Ellen (Self) Bowers, Terry (Self) Brown, Joe (Self) Brown, Nina (Self) Gray, Diana (Juvenile Diabetes Research Foundation) Haley, Judith (Self) Kellams, Matthew (Self) Masters, Bettie Sue (Federation of American Societies for Expermental Biology) McCleery, Steve (Self) Rainey, W.C. (Self) Wall, Charles (Self) Weido, Jeanne Dupre (Self) Registering, but not testifying: For: Emick, Stacy (Texas Right to Life Committee) Kral, Joe (Texas Right to Life Committee) McWilliams, Andrea (Baxter Healthcare) Moore, Terrance (Self and Texas Physicians Resource Council, Christian Medical Association) Nichals, Beverly (Self) Pojman, Joe (Texas Alliance for Life, Inc.) Shepard, Janelle (Self) Against: McCleery, Rebecca (Self and Juvenile Diabetes Research Foundation) Newsome, Deborah (Juvenile Diabetes Research Foundation) Wall, Ann (Self) Wall, Harry (Self) Younts, Pamela (Self) HB 1542 For: Denton, Brad (Texas Telephone Association) Erhart, Carl (Verizon Southwest) Leahy, Timothy (SBC Communications Inc., SBC - Texas) Newton, Jan (SBC) Walker, Rosa (Texas AFL-CIO and United Labor Legislative Committee) Against: Jewell, Michael (AT&T) Nuttall, Gary (Sage Telecom of Texas, L.L.P.) Siegel, Howard (Logix Communications) On: Klein, Becky (Texas Public Utility Commission) Registering, but not testifying: For: Camacho, Jose (Valor Telecom) Estrada, Jose (CWA Local 6132) Fitch, Cindy (Communications Workers of America Local 6215, Dallas Area Coalition of Labor Union Women) Hallford, Currie (Communications Workers of America - District Six) Hughes, Cammie (TSTCI) Jimenez, Maria (Legislative Committee - CWA 6132) Moeller, Becky (CWA 6137) Olivarez, Xavier (Communication Workers of America Local 6143) Parra, Gloria (Communication Workers of America District Six) Riley, Luz (Legislative Committee of Communications Workers of America - Local 6132) Romeros, Yvette (Communication Workers of America 6143) Tedford, Mark (Legislative Committee of the Communications Workers of America Local 6132) Watson, Ben (Sprint) Willis, D.L. (Communication Workers of America, Texas Political and Legislative Committee) Against: Luby, Jamie (MCI Worldcom) HB 2340 For: Camp, H. Ward (DCSI) King, Robert (Texas Advanced Metering Coalition) Against: Fainter, John (Association of Electric Companies of Texas) Levy, Rick (Texas State Association of Electrical Workers) On: Mintz, David (Texas Apartment Association) Perlman, Brett (Texas Public Utility Commission) Registering, but not testifying: For: Starnes, Bill (Cities Aggregation Power Project, South Texas Aggregation Project) Wattles, Paul (Texas Advanced Metering Coalition) Against: Eaton, Terri (Green Mountian Energy Company) Moore, Julie (Texas Coalition for Competitve Electricity) HB 2352 For: Brown, David (SBC) Gandy, James (Frisco Economic Development Corporation) Newton, Jan (SBC) Willis, D.L. (Communication Workers of America, Texas Political and Legislative Committee) Against: Jewell, Michael (AT&T) Land, Charles (Southwest Competitive Telecommunications Association) On: Klein, Becky (Texas Public Utility Commission) Registering, but not testifying: For: Camacho, Jose (Valor Telecom) Denton, Brad (Texas Telephone Association) Erhart, Carl (Verizon Southwest) Estrada, Jose (Communication Workers of America Local 6132) Fitch, Cindy (Self and Communication Workers of America Local 6215, Dallas Area Coalition of Labor Union Women) Gilmer, Gary (Self and Southwest Texas Telephone Copany) Hallford, Currie (Communications Workers of America - District Six) Hughes, Cammie (TSTCI) Jimenez, Maria (Legislative Committee, Communication Workers of America Local 6132) Olivarez, Xavier (Communication Workers of America) Parra, Gloria (Communication Workers of America) Riley, Luz (Legislative Committee of Communications Workers of America - Local 6132) Romeros, Yvette (Communication Workers of America) Tedford, Mark (Legislative Committee of Communications Workers of America - Local 6132) Walker, Rosa (Texas AFL-CIO and United Labor Legislative Committee) Watson, Ben (Sprint) Welch, Mark (SBC) HB 2463 For: Biedrzycki, Carol (Texas Ratepayers Organization to Save Energy) Chapman, Randall (Self) Morstad, Tim (Consumers Union Southwest Regional Office) Against: Eaton, Terri (Green Mountian Energy Company) Land, Charles (Southwest Competitive Telecommunications Association) Lokey, Felecia (Association of Electric Companies of Texas) On: Klein, Becky (Texas Public Utility Commission) Registering, but not testifying: For: Bhatia, Khelan (AARP) Johnston, Julie (City of Plano) Starnes, Bill (Cities Aggregation Power Project, South Texas Aggregation Project) Against: Camacho, Jose (Valor Telecom) Denton, Brad (Texas Telephone Association) Erhart, Carl (Verizon Southwest) Gilmer, Gary (Self and Southwest Texas Telephone Company) Watson, Ben (Sprint)


Apparently, the automatic forwarding is not working. The device-configurator start page you were looking for is
HTML/main.html
.


PLANET SICK-BOY: http://www.sick-boy.com "We Put the SIN in Cinema" ©Copyright 2001 Planet Sick-Boy. All Rights Reserved.
`Do you ever get the feeling you're dead?' That's the first line in Henry Bromell's Panic, and it's uttered by an upper-middle-class man in the throes of a midlife crisis. Sounds a little like the beginning of American Beauty, eh? If you think that's bad, wait until you learn that the character is also a killer-for-hire who visits a shrink. Now there's something we haven't seen in a while.
Thankfully, Panic isn't just a derivative knockoff of Beauty or the whole shrink/hitman thing from Analyze This and The Sopranos. While the film's characters are pretty decently fleshed out, and its story follows a fairly predictable trajectory, Panic's real drawing card is its fantastic cast. Each turns in great performances that keep the film interesting and fresh, despite the fact its content was lifted from the day-old rack at the Hollywood Food Market.
William H. Macy (State and Main) plays Alex, unhappy husband to Martha (Tracey Ullman, Small Time Crooks) and father to precocious six-year-old Sammy (David Dorfman, Bounce). Alex has two jobs – one running a moderately successful mail-order business from his home, and the other as a contract killer for his father (Donald Sutherland, Space Cowboys). It's the latter that lands him on the couch of Dr. Josh Parks (John Ritter, Felicity).
Alex tells Dr. Parks about meeting a girl named Sarah (Neve Campbell, Scream 3) who doesn't make him feel dead. Coincidentally, he met Sarah while waiting in Dr. Parks' waiting room (never a good place to pick up women, if you ask me). Alex explains that he was instantly smitten with Sarah, and that the no-nonsense bisexual eventually fell in love with his wonderfully sad eyes.
Dr. Parks bolsters Alex's confidence to stand up to his overbearing father, who simply refuses to believe that his only son wants to quit the family business. When Alex receives a photograph of his next target, it sends him reeling. His life is truly at a crossroads. Does he choose his supportive wife, or the hot manic chick? Mail-order or contract killing? Wouldn't we all like to have choices like these to make?
Bromell, an executive producer for Northern Exposure and Homicide, makes his feature-film writing and directorial debuts with Panic, with the latter easily outclassing the former. He cleverly uses flashbacks to a series of firsts in Alex's life (first encounters with Martha, Dr. Parks and Sarah, first firearms lesson from his father, first professional hit) to bring us into the character's life. The scenes featuring Alex and little Sammy are touching and done rather well.
With this role, Campbell displays talent we haven't seen since the first two seasons of Party of Five.  He turns in another typically incredible performance as Alex – a bit of a cross between his `Quiz Kid' Donnie Smith from Magnolia and Jerry Lundegaard from Fargo.
1:28 – R for adult language and violence
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


0b0t.org Commands:
- !jd <player> | !joindate <player> | !firstseen <player> - Displayes the joindate of a player.
- !seen <player> - Shows when a player was last online.
- !ping <player> - Shows ping of a player.
- !uuid <player> - Shows uuid of a player.
- !d <word> - Gets definition of a word.
- !wiki <topic> - Gets information of a topic on Wikipedia.
- !tps - Shows TPS of the server.
- !players - Shows amount of players on the server.
- !jm <message> - Sets join message.
- !lm <message> - Sets leave message.
- !yt <keyword> - Gets first result of youtube search.
- !firstwords <player> - shows the first words a player said.
- !lastwords <player> - Shows last words a person has said.
- !yes - Makes the bot say "YES".
- !no - Makes the bot say "No".
- !locate <player> - locates the position of a player.
- !report <player> <reason> - Reports a player.
- !2bseen <player> - Shows when a player was last online on 2b2t.org.
- !2bstats <player> - Tells you stats of player on 2b2t.org.
- !2bprio - Tells you the length of priority queue on 2b2t.org.
- !joke - Tells you a random joke.
- !cnt - Counts down from 3.
- !op <player> - Ops a player.
- !dice - Gives you random number between 1 and 6.
- !gamemode <gamemode> - Changes your gamemode.
- !back - Teleports you back to your previous location.
- !tpa <player> - Sends a teleport request to a player.
- !tpaccept - Accepts a teleport request.
- !tpdeny - Denies a teleport request.
- !sethome - Sets your home.
- !home - Teleports you to your home.
- !rules - Displays the server rules.
- !discord - Gives you a link to the official AnarchyB0T Discord.
- !ip <player> | !dox <player> - Shows IP of a player.
- !give <player> <Item> - Gives a player an item.
- !kit | !kit <kit> - Gives you a kit.


LYCEE SAINT ALEXANDRE SAULI DE MUHURA
12 July 2021
RE: PARENT -TEACHER CONFERENCE EVENINGS
TUESDAY 4 & THURSDAY 6 July, 10:00AM-12:30PM
Dear Parents/Guardians,
We would like to invite you to attend Individual Parent-Teacher Conferences. These
meetings are a valuable chance to meet with your child’s class teacher to discuss how
your child has settled in since the start of year, review their progress, and consider next
steps in their learning.
In order to provide parents with the most convenient time possible with their child’s
teachers, we use an appointment system throughout the school. This allows parents who
may have several children at the school to make consecutive appointments rather than
having to wait for long periods of time in between meetings. Each appointment is 10
minutes long and we would ask all parents to keep to these timings. All requests for
appointments should be returned to your child’s class teacher by Friday 17 October.
Confirmation of appointment times will be issued by Friday 24 October.
Where possible, we encourage children in Years 3-6 to take part in these meetings with
their parents and class teacher. We ask however that you do not bring younger children
to school or into these meetings as they often distract parents from the important
discussions with teachers. Please make arrangements for your children to be collected
from school and/or supervised by an adult while you are in your meetings.
If you are unable to attend on one of the designated evenings, please contact your child’s
teacher who will arrange an alternative, mutually convenient appointment to see you.


Fitness Tracker
Home
Dashboard
Fitness Tracker
Last Workout
Continue Workout
New Workout
Create Your First Workout
Workout Added Successfully!


Renewable energy output: UK vs Southern Africa
by Pamela LargueThe most recent statistics from the Department for Business, Energy and Industrial Strategy (BEIS) have found that the UK has consistently improved in its production of renewables and currently generates one-third (33%) of its total electricity from renewable sources.
Despite this, renewables only account for 11% of the UK’s final consumption - far from the 2020 target of 20%.
In contrast, the majority of Southern African nations are generating close to, if not 100% renewable energy.
Angola, Zambia and Namibia are just some of the Southern African countries that are producing at least double the percentage of the UK.
Energy experts have analysed recent global data from the International Energy Agency (IEA) and have created an interactive map to visualise how much renewable energy each country generates and how much renewables impacts their fuel mix.
Sign up for the ESI Africa newsletter
Countries with the cleanest fuel mix
Iceland 100%
Paraguay 100%
Albania 100%
The Democratic Republic of Congo 100%
Namibia 99.3%
Costa Rica 97.7%
Tajikistan 97.5%
Norway 97.2%
Uruguay 96.5%
Across the globe, nations are producing nothing but renewables. With four countries already hitting the coveted 100% mark, there are a number of others who are proudly placed at over 90%. Southern African countries, for example, are performing disproportionately well with Zimbabwe, Zambia, Namibia and Mozambique all generating a fuel mix of at least 50% renewable energy.
Renewables making headlines
IRENA ease investments and renewable energy projects in Africa
Orange partnership to drive energy access in Africa
The UK, on the other hand, is not only missing from the top 10 but sits at a disappointing 59th position. What’s more interesting is that the majority of countries that position higher than the UK are less developed and more impoverished nations.
If the UK has any hopes of hitting its 2020 energy targets, or its legally-binding goal of being net-zero by 2050, some serious developments need to be made.
Business Electricity Prices has explored how the top green countries have committed to renewable energy resources, and how harnessing all of a country’s natural resources could be how the rest of the world catches up.
Click here to learn more.


Promptly and easily create virtual servers and configure their network via the Adaptive Compute Engine (ACE).


Class BitStream
Class that abstract bitwise manipulation and storage.
Inheritance
Implements
Inherited Members
Namespace: UnityExt.Core.IO
Assembly: UnityExt.Core.dll
Syntax
public class BitStream : IDisposable
Constructors
| Improve this Doc View SourceBitStream(Stream)
BitStream constructor receiving an underlaying stream to operate.
Declaration
public BitStream(Stream p_stream)
Parameters
| Type | Name | Description |
|---|---|---|
| System.IO.Stream | p_stream | BaseStream to operate. |
BitStream(Stream, Int64)
BitStream constructor receiving an underlaying stream to operate.
Declaration
public BitStream(Stream p_stream, long p_bit_offset)
Parameters
| Type | Name | Description |
|---|---|---|
| System.IO.Stream | p_stream | BaseStream to operate. |
| System.Int64 | p_bit_offset | Bit offset starting from the stream current Position |
BitStream(UInt64)
BitStream constructor that allocates a memory stream sized to allocate the desired number of bits.
Declaration
public BitStream(ulong p_bit_length)
Parameters
| Type | Name | Description |
|---|---|---|
| System.UInt64 | p_bit_length |
Properties
| Improve this Doc View SourceBaseStream
Reference to the associated stream.
Declaration
public Stream BaseStream { get; protected set; }
Property Value
| Type | Description |
|---|---|
| System.IO.Stream |
BitCapacity
Returns the amount of bits available in the stream.
Declaration
public long BitCapacity { get; }
Property Value
| Type | Description |
|---|---|
| System.Int64 |
BitLength
Returns the amount of bits written in the stream.
Declaration
public long BitLength { get; }
Property Value
| Type | Description |
|---|---|
| System.Int64 |
BitPosition
Currently being written bit.
Declaration
public long BitPosition { get; set; }
Property Value
| Type | Description |
|---|---|
| System.Int64 |
CanRead
Flag that tells this stream can be read.
Declaration
public bool CanRead { get; }
Property Value
| Type | Description |
|---|---|
| System.Boolean |
CanSeek
Flag that tells this stream can be seeked.
Declaration
public bool CanSeek { get; }
Property Value
| Type | Description |
|---|---|
| System.Boolean |
CanWrite
Flag that tells this stream can be written.
Declaration
public bool CanWrite { get; }
Property Value
| Type | Description |
|---|---|
| System.Boolean |
HasStream
Flag that tells there is a valid stream.
Declaration
public bool HasStream { get; }
Property Value
| Type | Description |
|---|---|
| System.Boolean |
Methods
| Improve this Doc View SourceClose()
Closes the stream.
Declaration
public void Close()
Dispose()
Disposes all resources.
Declaration
public void Dispose()
Flush()
Flushes the stream.
Declaration
public void Flush()
FlushAsync()
Async flushes the stream.
Declaration
public Task FlushAsync()
Returns
| Type | Description |
|---|---|
| System.Threading.Tasks.Task |
GetMSB(UInt64)
Auxiliary method to return the most significant bit of a number. Credits: https://stackoverflow.com/a/31377558
Declaration
public static int GetMSB(ulong v)
Parameters
| Type | Name | Description |
|---|---|---|
| System.UInt64 | v |
Returns
| Type | Description |
|---|---|
| System.Int32 |
GetStream<T>()
Returns the base stream cast to the desired type.
Declaration
public T GetStream<T>()
where T : Stream
Returns
| Type | Description |
|---|---|
| T |
Type Parameters
| Name | Description |
|---|---|
| T |
Read(out Byte, Int32, Boolean)
Reads a slice of the current bit position into a number.
Declaration
public void Read(out byte p_value, int p_bits = 8, bool p_lsb = false)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Byte | p_value | 8 bit number container. |
| System.Int32 | p_bits | Number of bits to write |
| System.Boolean | p_lsb | Significant bit starting point. |
Read(out Char, Int32, Boolean)
Reads a slice of the current bit position into a number.
Declaration
public void Read(out char p_value, int p_bits = 8, bool p_lsb = false)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Char | p_value | 8 bit number container. |
| System.Int32 | p_bits | Number of bits to write |
| System.Boolean | p_lsb | Significant bit starting point. |
Read(out Double, Double, Double, Int32)
Reads a floating point number mapping its value to a range encoded in the specified number of bits. If no bits are specified the range size is used to estimate max number of bits.
Declaration
public void Read(out double p_value, double p_min, double p_max, int p_bits = 0)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Double | p_value | Number to be read |
| System.Double | p_min | Minimum expected value |
| System.Double | p_max | Maximum expected value |
| System.Int32 | p_bits | Number of bits used to store the number |
Read(out Single, Single, Single, Int32)
Reads a floating point number mapping its value to a range encoded in the specified number of bits. If no bits are specified the range size is used to estimate max number of bits.
Declaration
public void Read(out float p_value, float p_min, float p_max, int p_bits = 0)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Single | p_value | Number to be read |
| System.Single | p_min | Minimum expected value |
| System.Single | p_max | Maximum expected value |
| System.Int32 | p_bits | Number of bits used to store the number |
Read(out UInt16, Int32, Boolean)
Reads a slice of the current bit position into a number.
Declaration
public void Read(out ushort p_value, int p_bits = 16, bool p_lsb = false)
Parameters
| Type | Name | Description |
|---|---|---|
| System.UInt16 | p_value | 16 bit number container. |
| System.Int32 | p_bits | |
| System.Boolean | p_lsb | Significant bit starting point. |
Read(out UInt32, Int32, Boolean)
Reads a slice of the current bit position into a number.
Declaration
public void Read(out uint p_value, int p_bits = 32, bool p_lsb = false)
Parameters
| Type | Name | Description |
|---|---|---|
| System.UInt32 | p_value | 32 bit number container. |
| System.Int32 | p_bits | Number of bits to write |
| System.Boolean | p_lsb | Significant bit starting point. |
Read(out UInt64, Int32, Boolean)
Reads a slice of the current bit position into a number.
Declaration
public void Read(out ulong p_value, int p_bits = 64, bool p_lsb = false)
Parameters
| Type | Name | Description |
|---|---|---|
| System.UInt64 | p_value | 64 bit number container. |
| System.Int32 | p_bits | Number of bits to write |
| System.Boolean | p_lsb | Significant bit starting point. |
ReadBit()
Reads a single bit.
Declaration
public bool ReadBit()
Returns
| Type | Description |
|---|---|
| System.Boolean |
ReadBits()
Reads all remaining bits and returns as a bool array.
Declaration
public bool[] ReadBits()
Returns
| Type | Description |
|---|---|
| System.Boolean[] |
Seek(Int64)
Seeks a new bit position starting from the begining.
Declaration
public void Seek(long p_bit_offset)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Int64 | p_bit_offset | Bit offset to seek |
Seek(Int64, SeekOrigin)
Seeks a new bit position.
Declaration
public void Seek(long p_bit_offset, SeekOrigin p_origin)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Int64 | p_bit_offset | Bit offset to move from search position. |
| System.IO.SeekOrigin | p_origin | search index origin point. |
SetLength(Int64)
Sets this stream length in bit count.
Declaration
public void SetLength(long p_bit_length)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Int64 | p_bit_length |
ToString()
Returns the written bits as string.
Declaration
public override string ToString()
Returns
| Type | Description |
|---|---|
| System.String |
Overrides
Write(Byte, Int32, Boolean)
Writes a 8 bit mask.
Declaration
public void Write(byte p_value, int p_bits = 8, bool p_lsb = false)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Byte | p_value | Bit mask number. |
| System.Int32 | p_bits | Number of bits to write. |
| System.Boolean | p_lsb | Flag telling to write based on LeastSignificantBit or MostSignificantBit |
Write(Char, Int32, Boolean)
Writes a 8 bit mask.
Declaration
public void Write(char p_value, int p_bits = 8, bool p_lsb = false)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Char | p_value | Bit mask number. |
| System.Int32 | p_bits | Number of bits to write. |
| System.Boolean | p_lsb | Flag telling to write based on LeastSignificantBit or MostSignificantBit |
Write(Double, Double, Double, Int32)
Writes a floating point number mapping its value to a range encoded in the specified number of bits. If no bits are specified the range size is used to estimate max number of bits.
Declaration
public void Write(double p_value, double p_min, double p_max, int p_bits = 0)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Double | p_value | Number to be bit encoded |
| System.Double | p_min | Minimum expected value |
| System.Double | p_max | Maximum expected value |
| System.Int32 | p_bits | Number of bits to store the number |
Write(Single, Single, Single, Int32)
Writes a floating point number mapping its value to a range encoded in the specified number of bits. If no bits are specified the range size is used to estimate max number of bits.
Declaration
public void Write(float p_value, float p_min, float p_max, int p_bits = 0)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Single | p_value | Number to be bit encoded |
| System.Single | p_min | Minimum expected value |
| System.Single | p_max | Maximum expected value |
| System.Int32 | p_bits | Number of bits to store the number |
Write(String)
Writes each string's char as an 8 bit mask.
Declaration
public void Write(string p_value)
Parameters
| Type | Name | Description |
|---|---|---|
| System.String | p_value | String to write each char as 8 bit mask. |
Write(UInt16, Int32, Boolean)
Writes a 16 bit mask.
Declaration
public void Write(ushort p_value, int p_bits = 16, bool p_lsb = false)
Parameters
| Type | Name | Description |
|---|---|---|
| System.UInt16 | p_value | Bit mask number. |
| System.Int32 | p_bits | Number of bits to write. |
| System.Boolean | p_lsb | Flag telling to write based on LeastSignificantBit or MostSignificantBit |
Write(UInt32, Int32, Boolean)
Writes a 32 bit mask.
Declaration
public void Write(uint p_value, int p_bits = 32, bool p_lsb = false)
Parameters
| Type | Name | Description |
|---|---|---|
| System.UInt32 | p_value | Bit mask number. |
| System.Int32 | p_bits | Number of bits to write. |
| System.Boolean | p_lsb | Flag telling to write based on LeastSignificantBit or MostSignificantBit |
Write(UInt64, Int32, Boolean)
Writes a 64 bit mask.
Declaration
public void Write(ulong p_value, int p_bits = 64, bool p_lsb = false)
Parameters
| Type | Name | Description |
|---|---|---|
| System.UInt64 | p_value | Bit mask number. |
| System.Int32 | p_bits | Number of bits to write. |
| System.Boolean | p_lsb | Flag telling to write based on LeastSignificantBit or MostSignificantBit |
WriteBit(Boolean)
Writes a single bit.
Declaration
public void WriteBit(bool p_value)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Boolean | p_value | Bit flag as boolean. |
WriteBit(Int32)
Writes a single bit.
Declaration
public void WriteBit(int p_value)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Int32 | p_value | Bit flag as 0 or non-0 number |
WriteBits(Boolean[])
Writes an array of bits.
Declaration
public void WriteBits(bool[] p_values)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Boolean[] | p_values | Bits encoded as 'true' or 'false' |
WriteBits(Byte[])
Writes an array of bits.
Declaration
public void WriteBits(byte[] p_values)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Byte[] | p_values | Bits encoded as 0 and 1 |
WriteBits(Char[])
Writes an array of bits.
Declaration
public void WriteBits(char[] p_values)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Char[] | p_values | Bits encoded as '0' and '1' chars |
WriteBits(String)
Writes an array of bits.
Declaration
public void WriteBits(string p_values)
Parameters
| Type | Name | Description |
|---|---|---|
| System.String | p_values | Bits encoded as '0' and '1' chars |


Throughout the 2000s, records show Russians were buying millions of dollars of Trump-branded real estate in the U.S., according to property records reviewed by the FT. The Trump Organization said it did not believe Russians spent more money on Trump ventures than those from other regions. Russian real estate broker Ilya Reznik told the FT that Russian could be heard everywhere in the Trump properties on the Florida coast.
Source: Financial Times


US-born panda Bei Bei arrives in new China home
BEIJING: The US-born giant panda Bei Bei has arrived in southwestern China after a 16-hour flight, with plenty of bamboo for him to munch on as he settled into his new home.
The four-year-old cub, whose name means "precious, treasure" in Mandarin, appeared to be contentedly eating and ambling around his new cage at a research centre in Sichuan province, according to images broadcast Thursday (Nov 21) by state broadcaster CGTN.
Bei Bei travelled aboard a specially outfitted Boeing 777F cargo plane called the "Panda Express" - paid for by FedEx - accompanied by his keeper from the National Zoo in Washington and more than 70 pounds of bamboo and other treats.
READ: Panda Bei Bei bids farewell to US, heads 'home' to China
China lends pandas to zoos around the world - a programme dubbed "panda diplomacy".
Once young pandas reach the age of four, they are repatriated to breed with other pandas at sanctuaries in China. The animals are considered "vulnerable" to extinction by the International Union for Conservation of Nature.
Bei Bei was welcomed "home" on Thursday with a ceremony at the Bifengxia Panda Base in Sichuan, local media reported.
Fans had lined up at the National Zoo - the only home Bei Bei had ever known before his return to China - to bid the cub farewell ahead of his departure.
His siblings, brother Tai Shan and sister Bao Bao, have already been returned to China, while his father Tian Tian and mother Mei Xiang - both born in China - will remain at the National Zoo until at least December 2020.
Bei Bei was born in August 2015, and his name was announced with great fanfare at an event with then-first lady Michelle Obama and her Chinese counterpart Peng Liyuan.