Over the last few days I've noticed erratic readings & when I check the time (pressing top of 3 buttons) I get erratic times.
This results in readings of my 'consuming', 'solar' & 'importing' (kWh) resetting at 00:00 showing on emonGLCD
Current time showing is 02:12 @ true time of 00:08
Anyone else experienced this behaviour?
Re: erratic time on emonglcd
The time is sent from your emonCMS server. Which server are you using? What are your timezone settings? Is the server sending the correct time?
Though at first guess it's unlikely that the GLCD sketch is to blame, it might be an idea to say which sketch you are using, so that somebody does not have to search through them all to find the one or ones that show the time when you press the top button.
What do you mean by erratic? Does the time jump about when you press the button at intervals of a few seconds, or what?
Re: erratic time on emonglcd
Thanks for the speedy response Robert
I'm using the 'standard' emoncms sever.
I'm also using the 'standard' sketch that was posted at the release of the emonglcd (Mk2?) modified slightly for my own use. I should mention that the sketch I'm using has been fine for a couple of years unmodified, it's only in the last couple of weeks that this problem has arisen.
I've always had the Delayed Summer Time issue where the glcd resets at 00:00 in winter time but not until 01:00 in summer time but that is not the issue here.
By 'erratic' I mean that when I press the top button I get an unpredictable time. This evening the time reported by the glcd seems to be about 2 hours 'fast' (showing 03:20 @ actual time of 01:15) but at other times of the day it can be different. The time shown by the glcd does not change when I press & hold the top button but the time displayed at different times of the day doesn't follow any set pattern, it seems to jump about randomly not always following the 2 hour 'fast' observation mentioned earlier.
If no one else has experienced this problem then I suspect it may be a hardware problem with glcd.
I'll report back if I find a solution.
Re: erratic time on emonglcd
It sounds as if the time message isn't getting through to your GLCD, and/or its internal clock (which keeps time between being corrected/set from the server) is getting screwed up. It could be RF interference, or another transmitter started up on the same band nearby. Does your display show the time elapsed since the last good message from the base?
A significant clue just might be "a couple of years". That is about the right length of time for a dry joint to corrode just enough to give you problems, so before you look for anything more complicated, get a good hand lens and a good light, and carefully check over as much of the pcb as you can see. If the problem goes away after you've handled it, it almost certainly is a dry joint and you've moved the surfaces enough to scrape it clean - for now!
(I remember very many years ago chasing a dry joint on an audio amplifier - only touching the case 'cured' the problem for a few weeks, it took me about 2 years on and off to find it, then 5 s to cure it.]
Re: erratic time on emonglcd
Hi Robert
Handling the board (even wiggling the components) made no difference. Had a good look at the circuit board but nothing obvious, all looks normal
The emon GLCD seems to receive the data from emonbase OK, it's just the clock that's not being updated so obviously the wireless connection is OK.
At reset, the clock starts at 12:00 (as determined by the sketch) & then advances normally but after the reset the clock does not get changed to the current correct time from the emonCMS server.
The data sent to the server by the emonTX all seems normal so it appears that the emonGLCD is the problem
Re: erratic time on emonglcd
Is it not just the time that comes from the emonBase? I thought the data came direct from the emonTx, whiich confirms the emonGLCD is receiving ok, therefore the issue is most likely to be the emonBase transmission not being received by the emonGLCD. Have you confirmed the time update is definitely being sent ?
Re: erratic time on emonglcd
OK, we'll rule out the dry joint.
"The emon GLCD seems to receive the data from emonbase OK, it's just the clock that's not being updated so obviously the wireless connection is OK."
Are you sure that is the case? In the normal way of things, the GLCD receives the energy/power data direct from the emonTx - it's not retransmitted by the Base, and only the time comes from the emonBase.
If you haven't modified your Base sketch, it's probably still doing that; and in that case, the problem could be anywhere in path from the server via the base to the GLCD. Is the base receiving the time from emonCMS.org? Can you verify that?
Are you sending data to emonCMS.org and is it arriving? I remember a few days ago I saw a post saying that Trystan has stopped an obsolete emonCMS server (or was it a redirection from an obsolete URL? - I can't remember now). Check with a web browser that you can send the time query using the URL that your emonBase uses and that you get the correct time back. The query string that works now is:
emoncms.org//time/local.json?apikey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
and it should reply in the format:
t22,10,29
[Paul - you've done it again!]
Re: erratic time on emonglcd
I just took a look at your past posts to see if I could tell what emonBase you are using and see your last thread was about a month ago when you had to over-write your existing (unidentifiable) NanodeRF sketch due to a change in emonCMS server IP address. Are you sure it's worked since then ?
Re: erratic time on emonglcd
Paul - we're thinking along the same lines here: What's the betting the time query isn't being sent correctly?
Re: erratic time on emonglcd
I think the emonBase sketch is definitely the prime suspect, it's either not fetching or not relaying the time, I'm not familiar enough with the Nanode RF to hazard a guess which !
Re: erratic time on emonglcd
The only way to know that is to hang a serial monitor on it. You'll see the time printed every minute (in between the emonTx data) if it's receiving it from emonCMS.org.
If it's doing that, does the base have the correct nodeID for the GLCD to decode the message? If the default NodeID of the base changed when dominator reloaded his NanodeRF (or generally it isn't the one the GLCD is expecting the message from), it's now wrong and the GLCD will be ignoring the time broadcast.
Re: erratic time on emonglcd
Does this make sense ? what does 2787 relate to ? it's from the "Nanode RF thread" the fetched time is around 12 hrs out by the comment time but we don't know the timezone or how old the log was when posted, but the "2787" is suspect isn't it ?
Re: erratic time on emonglcd
Chris: I don't recognise that output from your NanodeRF, which sketch exactly are you using?
Paul: I think Chris is in the UK - his TZ is presently set to GMT, and his email address is at .UK ISP.
The normal format for the NanodeRF output is:
[webClient]
DHCP status: 1
IP: <IP_ADDRESS>
GW: <IP_ADDRESS>
DNS: <IP_ADDRESS>
DNS status: 1
SRV: <IP_ADDRESS>
Data sent: /input/post.json?apikey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&json={rf_fail:1}
Time request sent
Time: t23,37,42
Data sent: /input/post.json?apikey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&node=10&csv=14710,0,0,0,0,0,0,0,0,0,0,0,0,0
OK received
Data sent: /input/post.json?apikey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&node=10&csv=14720,0,0,0,0,0,0,0,0,0,0,0,0,0
OK received
Data sent: /input/post.json?apikey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&node=10&csv=14725,0,0,0,0,0,0,0,0,0,0,0,0,0
OK received
Data sent: /input/post.json?apikey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&node=10&csv=14730,0,0,0,0,0,0,0,0,0,0,0,0,0
OK received
Time request sent
Time: t23,38,42
Data sent: /input/post.json?apikey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&json={rf_fail:1}
OK received
Data sent: /input/post.json?apikey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&node=10&csv=14750,0,0,0,0,0,0,0,0,0,0,0,0,0
OK received
(The emonTx sketch was the "continuous" one, with no CTs. "147xx" is the message number.)
Re: erratic time on emonglcd
Robert
As can be seen from my serial printout below I'm getting the same as your nanodeRF (emonBase) except I'm not receiving a time reply from the emnoncms server
Sorry, deleted posting because I left apikey visible!! (stupid boy!)
Re: erratic time on emonglcd
Have attached the emonBase & emonGLCD sketches I use to help you narrow down my time problem
My NanodeRF(emonBase) output is:
[webClient]
DHCP status: 1
IP: <IP_ADDRESS>
GW: <IP_ADDRESS>
DNS: <IP_ADDRESS>
DNS status: 1
SRV: <IP_ADDRESS>
Data sent: /api/post.json?apikey=/emoncms3/api/post.json?apikey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&json=&json={rf_fail:1}
Time request sent
emonTx data rxData sent: /api/post.json?apikey=/emoncms3/api/post.json?apikey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&json=&json={rf_fail:0,grid:3386,solar:-11,powerC:0}
emonTx data rxData sent: /api/post.json?apikey=/emoncms3/api/post.json?apikey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&json=&json={rf_fail:0,grid:3372,solar:-12,powerC:0}
emonTx data rxData sent: /api/post.json?apikey=/emoncms3/api/post.json?apikey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&json=&json={rf_fail:0,grid:3386,solar:-12,powerC:0}
emonTx data rxData sent: /api/post.json?apikey=/emoncms3/api/post.json?apikey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&json=&json={rf_fail:0,grid:3385,solar:-13,powerC:0}
emonTx data rxData sent: /api/post.json?apikey=/emoncms3/api/post.json?apikey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&json=&json={rf_fail:0,grid:3374,solar:-8,powerC:0}
emonTx data rxData sent: /api/post.json?apikey=/emoncms3/api/post.json?apikey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&json=&json={rf_fail:0,grid:3393,solar:-11,powerC:0}
emonTx data rxData sent: /api/post.json?apikey=/emoncms3/api/post.json?apikey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&json=&json={rf_fail:0,grid:3375,solar:-11,powerC:0}
emonTx data rxData sent: /api/post.json?apikey=/emoncms3/api/post.json?apikey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&json=&json={rf_fail:0,grid:3375,solar:-12,powerC:0}
emonTx data rxData sent: /api/post.json?apikey=/emoncms3/api/post.json?apikey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&json=&json={rf_fail:0,grid:3373,solar:-11,powerC:0}
OK received
Time request sent
But no Time: txx,xx,xx printout
Re: erratic time on emonglcd
Why, in your Nanode sketch, have you set your APIkey to
char apikey[] = "/emoncms3/api/post.json?apikey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&json=";
You can see in your print that it's sending a garbled message to post the data - "/emoncms3/api/post.json?" is not a legal APIkey - (but somehow it appears to be parsed correctly when posting data), but the same "/emoncms3/api/post.json?" is being sent to the time server as well, and I strongly suspect that's choking on it and refusing to send back the time. You need to correct that and then see if the time server responds.
Re: erratic time on emonglcd
I replaced my true apikey with the xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx to avoid my key showing for the purposes of this discussion.
My actual sketch contains the proper key & hence is communicating with the emoncms server.
All my printouts that contained my actual apikey I changed for the reason i mentioned above
My data is being sent correctly except the time
Re: erratic time on emonglcd
Yes, I appreciate that about "xxx...", but what about the pre-amble with emoncms3 etc? That must not be part of the APIkey. Read again what I wrote above.
Here is the settings part of my NanodeRF sketch that produced the listing I posted above.
// ethernet interface mac address, must be unique on the LAN
static byte mymac[] = { 0x42,0x31,0x42,0x21,0x30,0x31 };
// 1) Set this to the domain name of your hosted emoncms - leave blank if posting to IP address
char website[] PROGMEM = "emoncms.org";
// or if your posting to a static IP server:
static byte hisip[] = { 192,168,1,10 };
// change to true if you would like the sketch to use hisip
boolean use_hisip = false;
// 2) If your emoncms install is in a subdirectory add details here i.e "/emoncms3"
char basedir[] = "";
// 3) Set to your account write apikey
char apikey[] = "1db5ae7fd006b80f54f6664d198bb5a2";
That's a false APIkey of course, but there is NO rubbish on the beginning. You can see your correct APIkey on emonCMS Input API Help. That doesn't have "/emoncms3...." on the front and neither should you have it in your sketch.
Re: erratic time on emonglcd
In the original sketch line 253 and line 265 both assemble URL strings, the 1st for posting data and the second to retrieve time, in your sketch the 1st appears to be edited but not the second. Was this "fix" to resolve a data posting issue ? if so the "fix" should be moved to code common to both parts, copying the working edit over to the non-working string may work to test the theory but probably not good coding practice.
Paul
Re: erratic time on emonglcd
Robert
followed your's & Paul's advice but still no time being updated from the server.
When I compare your nanodeRF printout above of:-
Data sent: /input/post.json?apikey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&json={rf_fail:1}
Time request sent
Time: t23,37,42
with mine today after your sketch mods & Paul's suggestion:-
"In the original sketch line 253 and line 265 both assemble URL strings, the 1st for posting data and the second to retrieve time, in your sketch the 1st appears to be edited but not the second. Was this "fix" to resolve a data posting issue ? if so the "fix" should be moved to code common to both parts, copying the working edit over to the non-working string may work to test the theory but probably not good coding practice."
All works apart from the time update!!
[webClient]
NanodeRF_Power_RTCrelay_GLCDtemp_mine_27_10_2014
DHCP status: 1
IP: <IP_ADDRESS>
GW: <IP_ADDRESS>
DNS: <IP_ADDRESS>
DNS status: 1
SRV: <IP_ADDRESS>
Data sent: /input/post.json?apikey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&json={rf_fail:1}
Time request sent
emonTx data rxData sent: /input/post.json?apikey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&json={rf_fail:0,grid:-230,solar:617,powerC:0}
OK received
This was received around 10:20 after the suggested sketch mods
Re: erratic time on emonglcd
The "Time request sent" print suggests it reaches that point ok and the lack of a "Time :" print means it's not getting past the "if reply begins with 't'" test.
If you add another option to my_callback to print any other reply you maybe able to determine what if anything is being returned. So before the very last } you could add something like
and see what comes up.
Paul
Re: erratic time on emonglcd
Paul
I modified my_callback as below:
static void my_callback (byte status, word off, word len) {
int lsize = get_reply_data(off);
if (strcmp(line_buf,"ok")==0)
{
Serial.println("OK received"); ethernet_requests = 0; ethernet_error = 0;
}
//else
//if(line_buf[0]=='t')//'t'
//{
Serial.print("Time: ");
Serial.println(line_buf);
char tmp[] = {line_buf[1],line_buf[2],0};
byte hour = atoi(tmp);
tmp[0] = line_buf[4]; tmp[1] = line_buf[5];
byte minute = atoi(tmp);
tmp[0] = line_buf[7]; tmp[1] = line_buf[8];
byte second = atoi(tmp);
if (hour>0 || minute>0 || second>0)
{
char data[] = {'t',hour,minute,second};
int i = 0; while (!rf12_canSend() && i<10) {rf12_recvDone(); i++;}
rf12_sendStart(0, data, sizeof data);
rf12_sendWait(0);
}
//}
else
{
Serial.print("Error: incorrect reply received -> ");
Serial.println(line_buf);
}
}
This is what I get back even when I REM'd out the else if(line_buf[0]=='t')//'t'
[webClient]
NanodeRF_Power_RTCrelay_GLCDtemp_mine_27_10_2014
DHCP status: 1
IP: <IP_ADDRESS>
GW: <IP_ADDRESS>
DNS: <IP_ADDRESS>
DNS status: 1
SRV: <IP_ADDRESS>
Data sent: /input/post.json?apikey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&json={rf_fail:1}
Time request sent
emonTx data rxData sent: /input/post.json?apikey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&json={rf_fail:0,grid:3044,solar:-11,powerC:0}
emonTx data rxData sent: /input/post.json?apikey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&json={rf_fail:0,grid:3056,solar:-13,powerC:0}
emonTx data rxData sent: /input/post.json?apikey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&json={rf_fail:0,grid:3063,solar:-11,powerC:0}
OK received
Time: ok
Error: incorrect reply received -> ok
It seems to be ignoring the block:
char tmp[] = {line_buf[1],line_buf[2],0};
byte hour = atoi(tmp);
tmp[0] = line_buf[4]; tmp[1] = line_buf[5];
byte minute = atoi(tmp);
tmp[0] = line_buf[7]; tmp[1] = line_buf[8];
byte second = atoi(tmp);
if (hour>0 || minute>0 || second>0)
{
char data[] = {'t',hour,minute,second};
int i = 0; while (!rf12_canSend() && i<10) {rf12_recvDone(); i++;}
rf12_sendStart(0, data, sizeof data);
rf12_sendWait(0);
Does this help?
Chris
Re: erratic time on emonglcd
A little! it tells us it's not getting past the "if reply begins with 't'" test because the reply doesn't begin with 't' so either the sketch isn't asking the right question or emonCMS isn't giving the right answer, whilst not concrete, I think it's probably the sketch as no-one else has posted an issue in this area.
If you change the existing "Time request sent" line so it reads
we can then see the string being sent.
Paul
Re: erratic time on emonglcd
If "ok" appears to be coming back following a request for the time, then surely either (a) your sketch is sending not the time request but something the server is interpreting as data to be stored, or (B) nothing has come back and you're looking at the previous response.
I don't believe the callback is at fault. I think the problem is your "APIkey" string.
Looking at your sketch as originally posted, line 99 is:
char apikey[] = "/emoncms3/api/post.json?apikey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&json=";
That is WRONG. It should only be:
char apikey[] = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
(obviously with your correct APIkey in there).
Looking down the sketch at the line where the normal energy data is sent and reconstructing the message by hand, starting at line 201 you send:
"emoncms.org/api/post.json?apikey=/emoncms3/api/post.json?apikey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&json=
&json={rf_fail:0,grid:GGG,solar:SSS,powerC:CCC"
which ties up exactly with what you actually send - and that is wrong because the APIkey (as you have programmed it, in bold) repeats part of the server URL and the text "apikey" is sent twice.
Doing the same with the time request starting at line 271, you are sending:
emoncms.org/time/local.json?apikey=/emoncms3/api/post.json?apikey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&json=
This now is totally wrong.
Can I suggest you send that string by pasting it into the address bar of your web browser, of course using your correct APIkey, and send it.
And then send this:
emoncms.org/time/local.json?apikey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
again of course using your correct APIkey. In the first case, I expect nothing. In the second, you should see the time reported.
Does this explain the point I'm trying to make about how you have entered your APIkey in the sketch?
Re: erratic time on emonglcd
Paul
carried out yor suggested mods & un REM'd if statement if(line_buf[0]=='t') & got this, but only once @ about 23:25:-
Time request sent
/time/local.json?apikey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Time: t00,23,56
emonGLCD temp recv: 2525
thereafter got this:-
Time request sent
/time/local.json?apikey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Obviously the "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" are to hide my apikey from view
Weird!?
Chris
Re: erratic time on emonglcd
Well thats a good'ish response I'd say. except it appears the server is still on BST so the time returned is 00:23:56, almost 24 mins past midnight and that has been successfully relayed to the emonGLCD as it seems to have replied with a rather toastie 25.25°C, but why only once I'm not sure.
I think it's supposed to update every 60 seconds which seems a bit frequent maybe it's meant to be every 60mins, try Roberts suggestion of using the url in your browser and see if you get a response every time.
Re: erratic time on emonglcd
I've tried this url in my browser several times and got the correct response every time with my apikey
Have you set the correct timezone on your emoncms.og account ?
Re: erratic time on emonglcd
Paul, can you get any response with the faulty string that Chris is sending by virtue of the corrupt APIkey? I couldn't. That makes me think the server is not responding, which is exactly as I would expect.
Re: erratic time on emonglcd
Paul, Robert
I tried all your suggestions last night & I'm now getting a time response from the server.
However, the time is not getting posted correctly to emonGLCD.
Last night there was a time difference of about 5 hours; when the server time was showing 01:00 my emonGLCD time was showing as 20:00ish ( after the initial startup time of 12:00 given by the sketch)
This morning the emonBase printout shows:
Time request sent
Time: t09,43,47 - which is correct for my time zone UTC+00:00 (GMT)
emonGLCD temp recv: 2525
but the emonGLCD is showing a time of 20:46!
I attached both emonBase & emonGLCD sketches to see if you can help pin down the difference in times
Re: erratic time on emonglcd
Robert - I hadn't tried the previous string as I had assumed it was a "cut and paste" error when masking apikey
Chris
Hopefully Robert will be of more help to you here but to me the char tmp[] ={line_buf[1],line_buf[2],0}; line looks a bit funky, it looks like it is in effect multiplying the hours value by 10, but I could be wrong.
Maybe add another print statement to see what the NanodeRF is actually sending,
In the next block after "char data[] = {'t',hour,minute,second};" you could add something like
Paul
Re: erratic time on emonglcd
The sketch I'm using is the original one supplied by openenergy monitor for use with the nanodeRF (emonBase) & it was working until quite recently.
I think the problem may have originated around the time Trystan deleted an old server? thinking it was obsolete.
Having now got the emonBase to receive time from the server (thanks largely to you & Robert) I now need to find out why emonGLCD is not being updated with server time received but instead is updated with an odd time that doesn't appear to be related to the server time as explained above.
If I reboot the emonGLCD the time shows 12:00 (the start time read from the sketch).
On receipt of the first server time of t13,44,00 the emonGLCD time displayed changed from 12:02 to 20:46; almost exactly 7 hours difference between the two times!
So the emonGLCD time was updated from emonBase but not correctly (my TZ is still UTC+00:00)
Being a newbie at coding, I'm lost as to know what to do to resolve this without changing my TZ!!
Many thanks again for all your help Paul
PS
As an experiment, I changed my TZ to UTC-07:00.
The server issued the correct time of t07,08,47 & my emonGLCD changed from 12:00 (startup time) to
20:08!! so it's not the server time 'shifted' that's being sent to emonGLCD so where is this 'odd' time coming from?? - curiouser & curiouser!
Chris
Re: erratic time on emonglcd
When the serial output from the NanodeRF prints " Time: t00,23,56 " it is printing the time received from the server, then it changes it to the required format to send out to the emonGLCD, we do not know what it actually transmits, which is why I suggested that last print statement. either the transmitted time will be correct, meaning the emonGLCD is at fault or the transmitted time will be incorrect pointing the finger at the NanoeRF, if the emonGLCD is correctly displaying the incorrect transmission it can also be removed from suspicion.
Paul
Re: erratic time on emonglcd
It may just be coincidence, but unlikely. Have you noticed that aside from that one first successful time setting, every time you set the emonGLCD time it seems to result in a time between 8 and 9pm ie always starts "20" regardless of the current time?
Re: erratic time on emonglcd
This line in the emonGLCD sketch always sets the time to 12:00 at startup:-
RTC.begin(DateTime("Dec 8 2011" , "12:00:00")); //start up software RTC - this time will be updated to correct tme from the interent via the emonBase
When the emonBase reads the first time txx.xx.xx from the server only then does the emonGLCD change to the 20:00 time but I don't know where this time comes from
Chris
Re: erratic time on emonglcd
Which is why you need to establish what is actually being transmitted.
Re: erratic time on emonglcd
From a post some way back by Paul:
"Hopefully Robert will be of more help to you here but to me the char tmp[] ={line_buf[1],line_buf[2],0}; line looks a bit funky, it looks like it is in effect multiplying the hours value by 10, but I could be wrong."
I think that line is OK. The '0' in tmp[2] is a terminating NULL. Remember it's C string.
But when it comes to transferring the time from the Nanode to the GLCD, I too am a bit puzzled by that. I'll look into that later (I may not be able to look until Friday or Saturday) but on the face of it, there's a mismatch in aligning the received data to the time variables.
Re: erratic time on emonglcd
Paul
This is the result of your suggestion:-
Serial.print("Actual time values sent are ");
Serial.println(data);
Time request sent
Time: t21,56,45
Actual time values sent are t8-Y
emonGLCD temp recv: 2481
Time request sent
Time: t22,10,48
Actual time values sent are t0Y
Time request sent
Time: t22,16,06
Actual time values sent are tY
emonGLCD temp recv: 2493
Time request sent
Time: t22,21,07
Actual time values sent are tY
emonGLCD temp recv: 2493
I'm none the wiser!
Incidentally, I've noticed that when the emonGLCD receives its first time txx,xx,xx from the server it changes the displayed time from 12:00 to 20:00 but also when the displayed time passes 20:59 it then resets to 20:00 rather than 21:00
Re: erratic time on emonglcd
Printing data[ ] as a string (which is how print will interpret it, because it is defined as type char), was never going to be helpful. Except for the 'signature' 1st character ('t'), it is bytes of data, not printable characters.
You need something like:
for (i=0; i< sizeof(data); i++)
Serial.print((int)data[i]);
N.B. I've not tested that!
On the face of it, at a quick look (disclaimers!), in your GLCD sketch you should have (line 68):
typedef struct { byte hour, mins, sec; } PayloadBase;
PayloadBase emonbase;
to tie up with the mapping of the time as bytes to the data[ ] array in line 303 of your Base sketch.
Re: erratic time on emonglcd
ok that wasn't quite how I expected that to print, (apologies for the misdirection and thanks for the correction RW) still learning c myself too. the intention was sound though,it would still be good to see what is actually being transmitted, so I would try Roberts revised print statement, unless you try editing the payload format in the GLCD 1st and it fixes it of course.
Paul
Re: erratic time on emonglcd
Hmmm...
Looking at a working emonGLCD sketch that was derived from one published a year or two ago, the code that decodes the time and sets the internal clock is:
if (node_id == BASENODE)
{
RTC.adjust(DateTime(2012, 1, 1, rf12_data[1], rf12_data[2], rf12_data[3]));
last_emonbase = millis();
}
That is taking the 2nd, 3rd & 4th bytes of the received message and using those (byte) values to directly set the real-time clock. That code is consistent with the way the time is transmitted by the NanodeRF. I'm beginning to think you're a victim of a 'copy-and-paste' mistake by someone who didn't realise that the Nanode sends bytes, not integers of two bytes.
Re: erratic time on emonglcd
Made changes as suggested to:-
typedef struct { byte hour, mins, sec; } PayloadBase;
PayloadBase emonbase;
as suggested to my emonBase & my emonGLCD but problem still remains:-
Time request sent
Time: t15,35,17
Actual time values sent are t#Y
Time request sent
Time: t15,50,41
Actual time values sent are t2)Y
Time request sent
Time: t16,01,37
Actual time values sent are t%Y
Time request sent
Time: t16,30,32
Actual time values sent are t Y
Chris
Re: erratic time on emonglcd
Is there a way to resolve this Robert?
This is way out of my depth from a coding perspective!
Re: erratic time on emonglcd
Hmmm...
Looking at a working emonGLCD sketch that was derived from one published a year or two ago, the code that decodes the time and sets the internal clock is:
if (node_id == BASENODE)
{
RTC.adjust(DateTime(2012, 1, 1, rf12_data[1], rf12_data[2], rf12_data[3]));
last_emonbase = millis();
}
That is taking the 2nd, 3rd & 4th bytes of the received message and using those (byte) values to directly set the real-time clock. That code is consistent with the way the time is transmitted by the NanodeRF. I'm beginning to think you're a victim of a 'copy-and-paste' mistake by someone who didn't realise that the Nanode sends bytes, not integers of two bytes.
I'm starting to lose the plot as to where you are now in terms of changes. Can you post the Nanode and GLCD sketches as they stand?
Re: erratic time on emonglcd
These are the current sketches I'm running which gives the result below:
Time request sent
Time: t21,41,51
Actual time values sent are t)3Y
emonGLCD temp recv: 2525
Chris
Re: erratic time on emonglcd
Here is my analysis of your present situation.
In the Nanode, you know the time is being received correctly, as a null-terminated ASCII string, viz: "t21,41,51" and is stored in the variable line_buf. (Line 292 of your sketch, Chris.)
The character array tmp, also destined to become an ASCII string, receives the hours element when it is created and initialised. line_buf[0] ('t') is ignored, line_buf[1] ('2') goes into tmp[0], line_buf[2] ('1') goes into tmp[1], and tmp[2] gets the value 0, which is the terminating null for the string. This is then fed into the standard library function atoi( ) and the string is interpreted as a number, and the number 21 (0x15, ASCII character "NAK") is stored in the single byte variable hour.
Now that tmp has been created, the byte variable minute has to be processed slightly differently. Here, tmp[0] receives directly line_buf[4] ('4') and tmp[1] receives directly line_buf[5] ('1'). tmp[2] still has 0 in it. Again, atoi( ) converts this to the number 41 (0x29, ASCII character ')' ).
Likewise, the byte variable second gets the number 51 (0x33, ASCII character '3' ).
Given that it's not midnight (presumably we can afford to miss that as all-zero values also probably mean a failure somewhere) then (in Line 303), the character array data[ ] is created and initialised with the values 't', hour, minute and second into elements 0 - 3 respectively. This character array is not being treated as an ASCII string, so it does not need a terminating null. Its value is byte 0 - 0x74 (the character 't'), byte 1 - 0x15, byte 2 - 0x29, byte 3 - 0x33.
This array is then sent to the RFM12B and transmitted to the emonGLCD. I hope you can see now why printing the string transmitted results in meaningless characters some of the time. All ASCII characters below 0x20 are non-printing, so most hours and the first third of minutes and seconds result in something non-printable, there's no terminating null so anything in memory following those wanted bytes is also printed, as far as the next null.
In the GLCD, at line 155, the received array is copied into the struct emonbase. Looking at the top of the file, emonbase is a variable of type PayloadBase (line 68). As it was, this was three integers. An integer is two bytes, so the received array mapped into it thus:
byte 0 ('t') - the high byte of hour, byte 1 (0x15) - the low byte of hour.
byte 2 (0x29) - the high byte of mins, byte 3 (0x33) - the low byte of mins.
So hour has the value 0x7415, minute has the value 0x2933. What sec got is anybody's guess, it is what happened to be in memory before the variable was put there. I need not say those are not what was wanted.
As it now is, things are much better, but still not right - but the solution should be clear:
emonbase is now three bytes, so the received array mapped into it thus:
byte 0 ('t') - hour, byte 1 (0x15) - mins, byte 2 (0x29) - sec. We have the 't', which we don't need, and there's nowhere for byte 3 (the transmitted seconds) to go.
There are two solutions (MUTUALLY EXCLUSIVE!). Either you can make the emonBase match what the GLCD is expecting, or vice versa. So either:
change line 68 in the GLCD to
typedef struct { byte junk, hour, mins, sec; } PayloadBase;//was int hour
and never use junk (Actually, if you want, you can test that it is the character 't' to be sure you have a time), or
change line 303 in the Nanode to
char data[] = {hour,minute,second};
i.e. don't send the troublesome 't' in the first place.
There's a third possibility, which would involve more unnecessary complication that would allow you to send integer values, but as the biggest number is 59, well within the range of a byte variable, we'll ignore it.
And there's a fourth possibility: In the GLCD, forget (remove) the struct emonbase and replace line 159 with the equivalent from my post just two posts up this thread. That picks the bytes out of the received data directly, not going through any intermediate variables.
Re: erratic time on emonglcd
Chose the char data[] = {hour,minute,second}; option in the NanodeRF sketch Robert & that did the trick
All that hassle over a little 't'!!!
Many thanks again to both Robert & Paul
Re: erratic time on emonglcd
Robert
Although you managed to sort out the 'time' problem for me I have another issue which concerns the original sketch for the emonGLCD.
I've been trying to find a copy of the original sketch for the v1.3 circuit board.
I can't be exactly sure of what sketch I uploaded over 2 years ago but every sketch I've tried to upload recently has failed; the most recent with errors:
Arduino: 1.0.6 (Windows 7), Board: "Arduino Uno"
C:\Users\User\Desktop\Arduino 1.0.6\Arduino\libraries\glcdlib\GLCD_proxy.cpp: In member function 'void GLCD_proxy::sendLCDMessage(byte)':
C:\Users\User\Desktop\Arduino 1.0.6\Arduino\libraries\glcdlib\GLCD_proxy.cpp:183: error: no matching function for call to 'rf12_sendStart(int, byte [66], byte&, int)'
C:\Users\User\Desktop\Arduino 1.0.6\Arduino\libraries\jeelib/RF12.h:93: note: candidates are: void rf12_sendStart(uint8_t)
C:\Users\User\Desktop\Arduino 1.0.6\Arduino\libraries\jeelib/RF12.h:95: note: void rf12_sendStart(uint8_t, const void*, uint8_t)
This was the main reason I used your modification to the nanodeRF sketch as I was unable to upload any of the more recent sketches to the emonGLCD (some seemed to employ graphic icons in the coding).
Some of the older sketches have variations in the coding so I can't be sure which is closest to my original sketch.
I'm not sue if the above errors are library issues relating to the most recent jeelib/RF12 library not being compatible with early sketches.
Your insight would be much appreciated
Re: erratic time on emonglcd
I think you could be right to suspect a lib mismatch, A change was made in the use of "rf12_sendNow" replacing "rf12_sendStart" there is a reference to a JeeLib issue (no longer accessible) in the glcd sketches commit history.
Paul
Re: erratic time on emonglcd
Thanks for that Paul
Chris
Re: erratic time on emonglcd
There was indeed a problem with JeeLib - it was locking up. There's a very long thread here:
http://openenergymonitor.org/emon/node/1051,
and the really interesting bit starts at
http://openenergymonitor.org/emon/node/1051#comment-9816
Basically, you need to get a new copy of Jeelib
( [Edit 3] or maybe not - see this thread: http://openenergymonitor.org/emon/node/3850 )
(remember you can't leave the old copy, else the compiler is likely to find and use it, the best trick if you feel a need to keep it is to Zip it and then delete the original), and I'd suggest you look at the latest sketches from GitHub and use the RFM12 functions that they use.
So you need to replace your lines 164-166
int i = 0; while (!rf12_canSend() && i<10) {rf12_recvDone(); i++;} // if ready to send + exit loop if it gets stuck as it seems too
rf12_sendStart(0, &emonglcd, sizeof emonglcd); // send emonglcd data
rf12_sendWait(0);
with what the HomeEnergyMonitor sketch does:
rf12_sendNow(0, &emonglcd, sizeof emonglcd);
rf12_sendWait(2);
Then compile with that. I'm pretty sure the receive side is unchanged, but it's best to check.
[Edit]
And check the current Nanode sketches while you're at it!For a reason I can't explain, the current Nanode sketches DON'T have that change done. I can't think of a good reason why not, does anybody know?
[Edit 2]
A PM comment from Paul to me suggested that you really ought to change the time data sent from the NanodeRF to the GLCD to be the same as the current "OEM Standard", so that should you ever have to reload with a current sketch again, you won't fall foul of this particular problem again.
(That's bytes, with the 't' being sent by the Nanode but ignored at the GLCD end, i.e. use my 4th suggestion there).
Re: erratic time on emonglcd
Robert
Following our discussion via PM I have now uploaded my original emonGLCD sketch & the old time problem has reappeared but not in the same way as before.
I used the original libraries with the original (attached) sketch from 2012 so as to avoid any problems with the newer jeelib
I've tried your mods suggested in earlier posts but I can't get the time function to work & I'm at a loss as to what to do next
I've attached both sketches (emonGLCD & NanodeRF[emonBase])
Re: erratic time on emonglcd
I think you didn't understand what I wrote to explain the problem - or you didn't realise that the C language is zero-based - meaning that you count from zero, not one. Have another read of my post of 5/12/2014, and follow through what is being sent from the Nanode and what is being received by the GLCD.
In the GLCD, you're looking for Hours, Minutes and Seconds in rf12_data[1], rf12_data[2], rf12_data[3]. Note you're NOT looking at rf12_data[0].
In the Nanode, you are sending:
char data[] = {hour,minute,second};
i.e. you're sending hour in the 0th byte, minute in the 1st and second in the 2nd. So with the "standard" OEM data packet, you need that 't' that's commented out.
Re: erratic time on emonglcd
Robert
"I think you didn't understand what I wrote to explain the problem....." is true; as mentioned previously, I'm not a programmer, not even close.
I do try & decipher code but only for my own purposes not for the sake of improving my programming skills.
I don't write/change code frequently enough to become skillful.
I've managed to get the correct time sent to my GLCD thanks to your & Paul's help for which I must thank both of you again.
Refering back to my PM to you regarding correcting the time to display in correct 24 hour format ie 09:05 NOT 9:5 that currently displays on my GLCD could you assist with what code & where I should place in the part of the sketch below.
I think it should take the form:
if (time in hours < 10)
{
Serial.print("0");
Serial.print(time in hours);
Serial.print(":");
}
else
Serial.print(time in hours);
Serial.print(":");
& the similarly for the 'time in minutes' - but without the Serial.print(":");
but because I can't fathom the full code below, I'm unsure as to where it needs to be inserted & the relevant code that holds the 'hours' & 'minutes' that needs to be included for the 'time in hours'
void draw_page_two()
{
glcd.clear;
glcd.fillRect(0,0,128,64,0);
glcd.setFont(font_clR6x8);
glcd.drawString_P(2,0,PSTR("Current Time:"));
DateTime now = RTC.now();
char str[20];
char str2[5];
itoa((int)now.hour(),str,10);
strcat(str,":");
itoa((int)now.minute(),str2,10);
strcat(str,str2);
glcd.setFont(font_helvB14); //big bold font
glcd.drawString(2,10,str);
glcd.refresh();
}
Your comments would be appreciated
Chris
Re: erratic time on emonglcd
Sorry, I'm not going to have time to look at this just now. I'll look later.
Re: erratic time on emonglcd
Well, I tried your suggested solution and immediately hit a problem - it appears that the sketch became too large and the result was completely not what I (or you) anticipated.
To get around this, I've made the time formatting into a function (so it exists once only) and called it from the two places where you originally wrote the time. Because that's all a bit complicated, here's a new display.ino file.
Re: erratic time on emonglcd
Robert
Thanks for the sketch display.ino, a real improvement over the original except I've noticed that the GLCD display goes blank after about 15 mins but the Red LED's are still ON; also page 2 doesn't display at this same time. The only way to get the display back is to reset the GLCD.
I've compared the current display.ino with the previous one but can't see what might be causing this effect.
Any suggestions?
Chris
Re: erratic time on emonglcd
Possibly a memory leak! The GLCD sketches are so tight on memory, that anything like that isn't a surprise to me. I left mine running with the standard Solar PV sketch for longer than that and didn't see a problem. Is you main .ino file still the same? I'll try the last one you posted later.
[Edit: I appear to have an inconsistent set, so I need the full set of files for your GLCD]
Re: erratic time on emonglcd
I've attached the current sketch I'm using - My_latest_emonGLCD_SolarPV_15_12_2014.ino, that works fine (except for the rubbish time format) It has a compiled size of 21,398 bytes
I copied & pasted your display.ino into that sketch (after having REM'd out my original display.ino sketch) which I then renamed: My_latest_emonGLCD_SolarPV_18_12_2014.ino.
This is the version that's causing the blank display. It has a compiled size of 22,084 bytes
Re: erratic time on emonglcd
I'm obviously using different versions of the libraries - compiled size is 22,228 bytes for me. It's been running more than 1 hour so far (but with no incoming data), and is still OK.
Re: erratic time on emonglcd
I see you have reverted to using
// if ready to send + exit loop if it gets stuck as it seems to
int i = 0; while (!rf12_canSend() && i<10) {rf12_recvDone(); i++;}
rf12_sendStart(0, &emonglcd, sizeof emonglcd); // send emonglcd data
rf12_sendWait(0);
to send the temperature back to the base. That was the source of much trouble and widespread lock-ups of the GLCD earlier this year, and those lines have now been replaced by
//send temperature data via RFM12B using new rf12_sendNow wrapper -glynhudson
rf12_sendNow(0, &emonglcd, sizeof emonglcd);
rf12_sendWait(2);
I suggest you do that change and see if it effects a cure.
Re: erratic time on emonglcd
Found the problem. When I re-connected the PSU to the GLCD the blank screen issue never returned.
It seems that the problem only occurs when obtaining power for the GLCD from the USB connection? but why the delay before the screen goes blank?
Re: erratic time on emonglcd
"Found the problem." I'm not sure I believe that! - unless the problem is with your programmer or computer. The FTDI and the USB power pins are wired in parallel. I think you're up against the sendStart problem, which always was unpredictable. I strongly recommend you do the above change.


The Halloween Store
For the little Goblin in all of us!
Home
Product List
Personal
Decoratng Ideas
Outdoor
Indoor
Table
Treats
Join Email
Props
Costumes
Special Effects
Masks
Thank you for joining my email list!
You will be hearing from me soon. In the meantime, please feel free to browse through my site.


The DB->put function is the standard function for storing records into the database. In general, the put function takes a key and stores the associated data into the database.
There are a few flags that you can set to customize storage:
If the database has been configured to support duplicate records, the DB->put function will add the new data value at the end of the duplicate set. If the database supports sorted duplicates, the new data value is inserted at the correct sorted location.


Clear child application assets manually
Exit host application and restore the global runtime
Get render context of child application
Remove event listener
Event name
Event callback
Add event listener
Event name
Event callback
Redirect like history.pushState
Target path
Register child application
Child application data
Redirect like history.replaceState
Target path
Root element where child application mount
Root element
Hash mode type
#/{path}
#{path}
#!/{path}
Hash mode type
Start host application and hijack the global runtime
Generated using TypeDoc
Host application
{MicrofeAPI}


All Climbers
All Routes
About Us
Home
Rock Climb Project
Here at ProjectTwo we believe that those who strive to establish or ascend the most inspiring
routes in the world merit recognition.Here, we have some information to recognize these great
routes and climbers. Feel free to contact us at<PHONE_NUMBER>


Hello Website ⊕ Links: — Home— Blog— Hello Website This is an example blog postThis is a sidenote.. Not much here but that's not the point :)


SMBTREE(1) User Commands SMBTREE(1) NAME smbtree - A text based smb network browser SYNOPSIS smbtree [-b] [-D] [-S] DESCRIPTION This tool is part of the samba(7) suite. smbtree is a smb browser program in text mode. It is similar to the "Network Neighborhood" found on Windows computers. It prints a tree with all the known domains, the servers in those domains and the shares on the servers. OPTIONS -b|--broadcast Query network nodes by sending requests as broadcasts instead of querying the local master browser. -D|--domains Only print a list of all the domains known on broadcast or by the master browser -S|--servers Only print a list of all the domains and servers responding on broadcast or known by the master browser. -d|--debuglevel=level level is an integer from 0 to 10. The default value if this parameter is not specified is 0. The higher this value, the more detail will be logged to the log files about the activities of the server. At level 0, only critical errors and serious warnings will be logged. Level 1 is a reasonable level for day-to-day running - it generates a small amount of information about operations carried out. Levels above 1 will generate considerable amounts of log data, and should only be used when investigating a problem. Levels above 3 are designed for use only by developers and generate HUGE amounts of log data, most of which is extremely cryptic. Note that specifying this parameter here will override the smb.conf.5.html# parameter in the smb.conf file. -V|--version Prints the program version number. -s|--configfile <configuration file> The file specified contains the configuration details required by the server. The information in this file includes server-specific information such as what printcap file to use, as well as descriptions of all the services that the server is to provide. See smb.conf for more information. The default configuration file name is determined at compile time. -l|--log-basename=logdirectory Base directory name for log/debug files. The extension ".progname" will be appended (e.g. log.smbclient, log.smbd, etc...). The log file is never removed by the client. -N|--no-pass If specified, this parameter suppresses the normal password prompt from the client to the user. This is useful when accessing a service that does not require a password. Unless a password is specified on the command line or this parameter is specified, the client will request a password. If a password is specified on the command line and this option is also defined the password on the command line will be silently ingnored and no password will be used. -k|--kerberos Try to authenticate with kerberos. Only useful in an Active Directory environment. -C|--use-ccache Try to use the credentials cached by winbind. -A|--authentication-file=filename This option allows you to specify a file from which to read the username and password used in the connection. The format of the file is username = <value> password = <value> domain = <value> Make certain that the permissions on the file restrict access from unwanted users. -U|--user=username[%password] Sets the SMB username or username and password. If %password is not specified, the user will be prompted. The client will first check the USER environment variable, then the LOGNAME variable and if either exists, the string is uppercased. If these environmental variables are not found, the username GUEST is used. A third option is to use a credentials file which contains the plaintext of the username and password. This option is mainly provided for scripts where the admin does not wish to pass the credentials on the command line or via environment variables. If this method is used, make certain that the permissions on the file restrict access from unwanted users. See the -A for more details. Be cautious about including passwords in scripts. Also, on many systems the command line of a running process may be seen via the ps command. To be safe always allow rpcclient to prompt for a password and type it in directly. -h|--help Print a summary of command line options. VERSION This man page is correct for version 3 of the Samba suite. AUTHOR The original Samba software and related utilities were created by Andrew Tridgell. Samba is now developed by the Samba Team as an Open Source project similar to the way the Linux kernel is developed. The smbtree man page was written by Jelmer Vernooij. Samba 3.6 06/22/2012 SMBTREE(1)


Man dies after stabbing in east London
A 24-year-old man has been stabbed to death in Ilford, east London, the Metropolitan Police has said.
He is the third man to have died this weekend in London in a fatal knife attack.
A Met statement said: ‘Police were called to Telegraph Mews, Seven Kings at 6.10am on Sunday November 24 to reports of a group of people fighting. Officers attended.
‘Nobody with any stab injuries was found at the location but, a short time later, officers were called to Ilford Lane to reports of a 24-year-old man with stab injuries.
‘He was taken to hospital. Despite the best efforts of medical staff, he was pronounced dead at 12.36pm.’
More to follow


Problem 1. Exchange if greater
Please Press F12 (in Chrome) to see the output in the console
You may want to edit ExchangeIfGreater.js to test different scenarios


Setting Up MongoDB
MongoDB is NOSQL database. THe detail of the installation can be founs at official website of MongoDB. Following is th installation steps obtained at 2019-Oct 15.
Downloading and Installing
1. Import the public key used by the package management system.
From a terminal, issue the following command to import the MongoDB public GPG Key from https://www.mongodb.org/static/pgp/server-4.2.asc:
wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add -
The operation should respond with an OK.
2. Create a list file for MongoDB.
Create the list file /etc/apt/sources.list.d/mongodb-org-4.2.list
for your version of Ubuntu.
Click on the appropriate tab for your version of Ubuntu. If you are unsure of what Ubuntu version the host is running, open a terminal or shell on the host and execute lsb_release -dc
.
Ubuntu 18.04 (Bionic): The following instruction is for Ubuntu 18.04 (Bionic). For Ubuntu 16.04 (Xenial), click on the appropriate tab. Create the /etc/apt/sources.list.d/mongodb-org-4.2.list file for Ubuntu 18.04 (Bionic):
echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.2.list
3. Reload local package database. Issue the following command to reload the local package database:
sudo apt-get update
4. Install the MongoDB packages. You can install either the latest stable version of MongoDB or a specific version of MongoDB.
Install the latest version of MongoDB. Install a specific release of MongoDB. To install the latest stable version, issue the following
sudo apt-get install -y mongodb-org
Sample application with Python:
- Install the python package
pymongo
in the environment
pip install pymongo
- Create Database and Collection
import pymongo client = pymongo.MongoClient("mongodb://localhost:27017/") db = client["test"] collection = db["test_collection"]
- Next, Populate the collection
x = collection.insert_many(DATA)
- Print out one sample data:
x = collection.find_one() print(x)


All links in #djaxableBox1 will be handled by DJAX.
By clicking this link you will go to page.html, but only content from page.html that comes from #djaxableBox1 will be considered.Did you notice the url changed too?
To do so, you need to initialize with:
// // Initialize DDJAX // $("#djaxableBox1").ddjax({ 'selector' : '.ddjax-this-block' });
DDJAX generates specs to update multiple DOM blocks.
DDJAX will ignore <a<nchors that have a specific class.
DDJAX defer block replacements to the user of the plugin. This allows you to choose the way you replace, prepend or append blocks.
To implement dom manipulation specs you need to listen on the djaxDeferReplacements event handler:
// // Implement DOM manipulation specs // $(window).bind('djaxDeferReplacements', function (e, specs_array) { // // implement spec here // // sample spec in this page source // });
Each spec in the specs_array can be an object of 2 types:
{ type: 'function', target: function (...) { }, args: [ arg1, arg2, arg3 ] }In this case your implementation must call the function and pass the arguments in args.
{ type: 'replace', target: $someTargetBlock, // or an ID new_block: $someJqueryObject }In this case your implementation must perform each operation according to task as requested. In this case, type can be:
Note that target may be an id rather than a jQuery object. In this case you are supposed to recover the object from the current DOM.
the items that have nst-dyn class will be replaced with the ones from the incoming response.
treat nchors having this class as non-ddjaxing.
use the value of nchors having this data- attribute as a url to navigate to instead of using the href attribute of the anchor. nst-js-url
parameters to send along with the ajax GET request
if the ajax request is taking more than 10s, load the target page normally
a function that gets called if the ajax request has timed out.
an anchor link was clicked
ddjax is about to navigate to the new url
ddjax has finished loading new content
ddjax needs you to run the spec through your implementation (see above for details).


To run the examples, or other Tobago applications (or any web applications), you may want to use docker. You don't need to install an JavaEE server by yourself, just run it in Docker.


The Protein Sample you selected was:
Please choose the Machine Learning Algorithm that will be used by this Protein Sizer/Predictor.
Once you select the ML (noted below) click here for the last step of the wizard.


List of New Concepts
These are the following things we will learn:
- Variable Declarations with
let
& const
- Blocks & IIFEs
- Strings & new String methods
- Arrow Functions
- Destructuring
- Arrays & new Array methods
- The Spread Operator
- REST & Default Parameters
- Maps
- Classes & Subclasses
Later, we're going to learn the following:
- Promises
- Native Modules


Data visualization is commonly used in political world. Politicians make use of various tools to visualize data, such as election votes, political achievements, and public satisfaction they gain. However, some data are ...
Statistic is an important element in news reporting. We use statistic to show validity of facts we report. However, a confusing use of statistic will lead to a distortion of facts. Below is an example of how media use confusing ...
Cancer is a group of diseases involving abnormal cell growth with the potential to invade or spread to other parts of the body. It is believed that external factors, such as eating habits, living environment, and the working ...
Hong Kong is claimed to be an extremely packed city with serious ageing problems. What is actually happening there?
Standing in Sham Shui Po for more than 40 years,the Yen Chow Street Hawker Bazaar has fostered lots of art students, designers, and fabric lovers in Hong Kong. However, in 2013,the Hong Kong government ...
Commercial buildings will be the first thing that comes to our mind when it comes to architecture, however, the possibilities are endless. Atelier J-AR (AJ-AR) is ...
In every traditional Chinese festival, paper offerings for celebration or the worship of spirits can be seen everywhere. “Paper offerings are not only about ...
When the public art installation “Event Horizon Hong Kong” was first displayed on a rooftop in Central in November, 2015, people mistook the sculpture of a life-sized naked man as suicide suspect and called the police in panic. “I spotted it long time ago. But to be honest, I don’t know why it has to be there,” said Chu Tze-yan....


About umwero
Before inventing this alphabet, I was facing some challenges or problems in writing of Kinyarwanda language. First, I met those challenges when I was inspired to write some songs or poems in a completely different time. Like when I was saying R(u)G(u)WA for maybe RGWANDA I was writing it as R(u)w(A)for Rwanda, which is totally different in the way we speak it. Another example is the ligature TW. If you read gihekane as it is written, it will sound as T(u)WA because it is Ta+Wa. But in good spoken Kinyarwanda, we say T(u)K(u)WA for a word like UGU T(u)K(u)WI .There I found that in all ligatures (ibihekane) there is a missing sound.
One day after finishing my secondary study, I was in Nairobi, Kenya on vacation. I found that people there write “CH” where we write only “C” (but we say that sound the same way.) For example, in Swahili they write “changa moto”and we write “cana itara”. Also in the origin of that Latin letter C it sounds as “SI” or “se”.
In that case I found that the Latin alphabet cannot and will not fit any of the Bantu languages completely as they are pronounced.I found that the Bantu languages sound the same but are written in different ways because the Latin alphabet that we use which is not compatible with our sound speaking at all.
After my vacation, I returned home to study at the University of Rwanda in computer science, looking at those writing challenges I had faced before visiting Kenya and with those writing challenges I also faced in Kenya. At that time, I started to wish that the Bantu languages would have their writing system.
Back Since the days in 2014, writing of Kinyarwanda has been changed and that change has been a great problem for citizen. Also those changes were corrected in 2020 but all those conflicts and changes are because of Latinization of our language. Here I may say that it is wrong to assign one letter to different sounds. That is why I may say: those changes and their corrections are all wrong. For example, we assign letter K to Q[iya] for sounding Kigali as in icyibo. We assign K to K[ah] for sounding kanombe , so if you listen correctly, you may hear that there are different sounds. That is why they have to have different letters for each sound, I mean letter for Q[iya] and other for k[ah]. .
The reason behind all of this conflict and changes is in history. This is because we are taught to write Kinyarwanda by our colonizer who came to us without knowing our language. So, I would ask you as I always was asking myself, how can someone who doesn’t know to speak your language teach you to write your language? Mission impossible. That why my wish was to develop our own writing system.
In my research, I have found that the Kinyarwanda language is a language spoken by all Rwandan as an easily spoken language, but I found that it is very hard for all Rwandans to write it. Many Rwandans from primary to secondary are challenged by the Kinyarwanda script, especially in writing Kinyarwanda ligatures (ibihekane). But the problem is not only in IBIHEKANE but because we use a character of different sound as a sound of Kinyarwanda. For example, when we use letter C which sounds originally like si but we also use it as the sound cah in our language. We use vowel E which sound originally like ih but we use it as sound eh of our language. Also in latin alphabet, we write a certain sound as it in igihekane (ligature), but it is not. If you listen correctly, you may hear it as a single sound, I mean only 1 letter.
I have asked many people of different generation to please write for me IGIHEKANE shy (not only this, whic is a random example.) However, many of them fail and those who write as we studied start to think if what they think is correct or not. This means that they write it without confidence. Because we do not write as we speak. So if we could write as we speak, to write any character or IBIHEKANE will not be something complicated to think about.
If you listen on that SHY, it is only a single character, not combined characters or ligature<./p>
Because the protection of any culture is in its language and the protection of any language is in it writing, umwero is to protect our language as well as our culture.
Those are umwero font layout.
Umwero means a harvest time, so it is a harvest for us to raise our language from vanishing to protection and also it is the best step to strengthen our national identity.
Some umwero symbols are based on our culture. For example the letter for sound AH(a) looks like a cow’s head. As you know cows was one among the pillars of then ancient Rwanda kingdom Kalinga.
The artistic principle to develop each character was based on the middle joint of every glyph to connect them all; the calligraphy is based on like 7cm and the joint is located on third cm (joint is shown by that arrow shape).
Also, its equal sign punctuation represents the name of alphabet umwero.
IS A FRUIT TO SHOW THE HARVEST
Some umwero symbols contain a spiritual meaning and many others are just from my normal imagination based on that calligraphic and artistic principle of the joint and measures.
Example of pictured umwero written word which means “imana ndayikunda kuko niyo data”


Contact Cards
Employee ID: 1
Office Number: 100
Employee ID: 2
Employee ID: 3
Employee ID: 4
School: Purdue University


WITNESS LIST Natural Resources Committee March 21, 2005-2:00P HB 578 Against: Hess, Myron (National Wildlife Federation) Kramer, Ken (Lone Star Chapter, Sierra Club) On: Ward, J. Kevin (Texas Water Development Board) HB 856 For: Allen, Joe B. (West Harris County Regional Water Authority) Rush, George (West Harris County Regional Water Authority) HB 1241 Against: Kennedy, Charles (Self) HB 1358 For: Reed, Cyrus (Texas Center for Policy Studies) Against: Petersen, Ken (Texas Rural Water Association) On: Lott, Earl (Texas Commission on Environmental Quality) HB 1462 For: Reed, Cyrus (Texas Center for Policy Studies) On: Peterson, Ken (Texas Rural Water Association) Ward, J. Kevin (Texas Water Development Board) HB 1599 For: Allen, Joe B. (Association of Water Board Directors) HB 1670 For: Buckner, Luana (Edwards Aquifer Authority) Buckner, Luana (Medina County Groundwater Conservation District) Everheart, Harvey (Mesa Underground Water Conservation District) Fisher, Mike (Lost Pines Groundwater Conservation District) Kier, Robert (Lost Pines Groundwater Conservation District) Runge, Caroline (Menard County Underground Water District) On: Mullican, Bill (Texas Water Development Board) Williams, C.E. (Panhandle Groundwater District) Williams, C.E. (Region A Water Planning Group) HB 1673 For: Petersen, Ken (Texas Rural Water Association) HB 2045 For: Petersen, Ken (Texas Rural Water Association) HB 2046 On: Anderson, Robert (Self) HB 2241 For: Allen, Joe B. (Association of Water Board Directors) HB 2430 For: Baker, Carole (American Water Works Association) Heroy, Ken (American Rainwater Catchment Systems Association) Kramer, Ken (Lone Star Chapter, Sierra Club) Smith, Tom (Public Citizen)


--- title: Jekyll + PWA + IndieWeb all: true page_only: true layout: default permalink: "/" pagestyle: home.css pagejs: home.js ---
This is a starter for creating a Netlify-hosted, Jekyll based PWA with support for IndieWeb
{{ post.abstract }}
{{ post.abstract }}
Read full note »{{ post.content }}
View Permalink


The policies provided online are not a contract, binder or agreement to extend life insurance coverage by Umbrella Coin. The quotes are estimates only, are based on the information provided, and reflect the most favorable rate classes available for the term life insurance coverage quoted as of the date prepared by Merry Life. The exact premium can only be determined after an underwriting review and may be different or the policy may not be available. The completed and signed application, and any other supplemental forms or documents necessary to evaluate and/or apply for life insurance coverage must be submitted prior to underwriting review by Merry Life.
This calculator was designed to help you make informed decisions about your life insurance costs. However, since each individual's situation is different, none of the information provided herein should be construed as legal, tax, financial planning, or other professional advice.


2021 Jaguar F-Type Coupe And Convertible Spied Looking Smooth
The changes look more significant than from the average model refresh.
by Chris BruceThe Jaguar F-Type has a refresh coming that appears to bring major styling revisions to the sports car. These spy shots catch the development of both the updated coupe and convertible.
Gallery: 2021 Jaguar F-Type Coupe And Convertible Spy Photos
The resculpted front end features new headlights that sit horizontally, rather than the current orientation where they run up the fenders. The nose has smoother sculpting, which also appears to make the grille sit lower on the face. The hood seems to have some subtle undulations to lend some visual distinction there.
More Jaguar F-Type Spy Shots:
The tweaks at the rear don't appear to be as significant. The taillights look more angular, and there's generally smoother styling. On these cars, we believe the ones with four exhaust tips pack the V8 engine, and the one with a singular, trapezoidal outlet uses Jaguar Land Rover's Ingenium 2.0-liter turbocharged four-cylinder.
Save Thousands On A New Jaguar F-TYPE
MSRP $ 61,745
MSRP $ 61,745
Save on average over $3,400 off MSRP* with
Motor1.com Car Buying Service
SEE PRICING
Earlier spy shots provide a glimpse into the cabin, and there don't appear to be major changes in there. Updates to the infotainment system seem very likely. A digital instrument cluster might also be among the improvements.
The only rumored powertrain change is dropping the 5.0-liter supercharged V8 in favor of a BMW-sourced 4.4-liter twin-turbo V8. The new engine is good for up to 617 horsepower (460 kilowatts) and 553 pound-feet (750 Newton-meters) in models like the M5 Competition and M8 Competition. However, it's not clear whether Jag would use this tune or a less powerful version, though.
Look for the updated F-Type to debut in 2020 and go on sale for the United States in the 2021 model year.
Source: Automedia


Hanne Fagerjord Karlsen
Education
Høgskolen i Gjøvik
Master in Applied Computer Science, 2014.
Master Thesis: Performance, motivation and immersion within a suite of working memory games. Read it here if you like.
Universitetet i Agder
Bachelor, Multimedieteknologi og –design, 2009
Thesis Work: Web development - Grimstad Skolemusikkorps
Work Experience
IT-Konsulent - Eika Servicesenter
08. 2014 - 08.2014
Labvakt - IT-Tjenesten Høgskolen i Gjøvik
10. 2011 - 05 2012
Academia
ISAGA 2014, Dornbirn, Austria.
Research Poster: Serious Games for Military Cultural Training.
Publication& Poster
Talks
January 2014 - Juniorakademiet, Framtidas spillteknologi: Med Minecraft og Oculus Rift! Media
The Gathering 2011 - EEG and Gaming w/Simon McCallum
Volunteering
International Student Assistant, Høgskolen i Gjøvik, Spring 2010
Assisting International Students at Gjøvik University College
Master Student Representative, Høgskolen i Gjøvik, 2009-2010
Involvement in local student politics, representing master students.


This section contains step-by-step tutorials, which demonstrate how to create and execute simple scripts.
"Hello World!"
Simple console application script
Using WinForms
Simple WinForm application script
Using COM
Simple script that creates and uses COM object


Nbsp
Configuration
About
Statistics
Statistics summary
Product statistics
Queues status
Per-channel statistics
Queues BDB statistics
Mspool BDB statistics
Graphs
Hourly summary
Current hour
Last hour
Last two hours
Since midnight
Devices
Products received
Last minute
Last hour
Past hour
Last 24 hours
Products missing
Server
Clients
Masters
Web Server
Status


Four People Have Been Killed and at least One Man Is Missing after the Massive Rainfalls in Southern France
Four people have been killed and at least one man is missing after the massive rainfalls in southern France that caused floods, AFP reports.
The body of one victim was discovered in a village in the Var region of the country's Mediterranean coast. A second body, a man about 50 years old, was found in his car, which was swept away by the high floodwaters of the village of Cabas. The bodies of a couple aged in their 70s were also found in their car.
A man of about 70 years old is missing in the village of Saint-Antonin-du-Var. He was last seen leaving his home in the middle of the night in the biggest downpour.
The Alpes-Maritimes and Var departments have been severely affected by torrential rains and storms. According to local authorities, the rains were of "historic" intensity and the damage they caused would be "significant".


Mission R&D Project
Home
Register
Search
About
Subscribe
Email Address
Student Registration
×
Enter your valid details.
Gender
Male
Female
Semester-1
Subject 1
Subject 1
Subject 1
Subject 1
Subject 1
Subject 1
Semester-2
Subject 1
Subject 1
Subject 1
Subject 1
Subject 1
Subject 1
Submit
Enter Marks
Headline 1
Subheadline
Headline 2
Subheadline
Headline 3
Subheadline
Home
Bookmark
Info
Mail
Like


--- layout: post title: Viewing dependencies graphically on apt based systems date: 2008-08-11 10:33:50.000000000 +05:30 categories: - Nexenta - Opensolaris - ubuntu tags: [] status: publish type: post published: true meta: _edit_last: '1' author: login: admin email<EMAIL_ADDRESS>display_name: admin first_name: '' last_name: '' ---
In trying to figure out how to create packages for Nexenta, I felt the need at multiple times to view the entire tree of dependencies for a package. A little bit of googling and I found that it is pretty simple.
The apt-cache command can be used to view dependencies graphically.
You will need to have the graphviz package installed for this.
$apt-cache dotty packagename > /tmp/dotfile
$dot -Tgif -o packagename.gif /tmp/dotfile
The complete dependency tree for the package packagename will be displayed in the file generated.
From the apt-cache manpage:
"The resulting nodes will have several shapes; normal packages are boxes, pure provides are triangles, mixed provides are diamonds, missing packages are hexagons. Orange boxes mean recursion was stopped [leaf packages], blue lines are pre-depends, green lines are conflicts."
An example for the hspell package:


It is believed that COVID-19 spreads mainly between people who are in close contact with one another (within 6 feet of each other) via small airborne droplets that are produced when an infected person coughs or sneezes. A person can also get COVID-19 by touching a surface or object that has the virus on it and then touching their face.
Most people who have COVID-19 will experience mild symptoms similar to those of the common cold or flu. Some people may not experience any symptoms at all. The most common symptoms include but are not limited to:
However, some people will experience more severe symptoms that can be life threatening. If someone experiences these symptoms they should call their health care provider immediately:
Most people will survive their infection without requiring any medical treatment. On the contrary, there are some people who are more vulnerable than others.
There are many precautions you can take to mitigate the spread of COVID-19. Most of these are standard hygiene practices that apply to many diseases:
Symptoms can appear 2-14 days after you have been exposed to the virus. If you are experiencing any symptoms it is advised to:
If you start experiencing the below warning signs get medical attention immediately. These warning signs include but are not limited to:
Currently, there is no specific antiviral treatment for COVID-19. People with COVID-19 can seek medical care only to help relieve symptoms.


#include <ip_types.hh>
|
| void | clear () |
| |
| bool | is_empty () |
| |
| bool | push (u8_t byte) |
| |
| bool | pop (u8_t &byte) |
| |
| | FIFO (u8_t *byte_buffer, u16_t capacity) |
| |
| u16_t | read (u8_t *ptr, u16_t length) |
| |
| u16_t | write (const u8_t *ptr, u16_t length) |
| |
FIFO is a byte buffer where bytes are added and removed in first-in first-out order.
◆ FIFO()
| FIFO::FIFO |
( |
u8_t * |
byte_buffer, |
|
|
u16_t |
capacity |
|
) |
| |
|
inline |
The actual buffer exists elsewhere; FIFO merely manages it.
- Parameters
-
| byte_buffer | Pointer to the external buffer. |
| capacity | The size (number of bytes) of the external buffer. |
◆ clear()
Empty the buffer for a fresh start.
◆ is_empty()
Returns true of the buffer is empty.
◆ pop()
| bool FIFO::pop |
( |
u8_t & |
byte | ) |
|
|
inline |
Remove a byte from the buffer; returns true if the buffer wasn't empty.
◆ push()
| bool FIFO::push |
( |
u8_t |
byte | ) |
|
|
inline |
Add a byte to the buffer; returns true if there was space.
◆ read()
| u16_t FIFO::read |
( |
u8_t * |
ptr, |
|
|
u16_t |
length |
|
) |
| |
Read (and remove) multiple bytes from the buffer.
- Parameters
-
| ptr | Pointer to an external byte array where the data should be written. |
| length | Number of bytes to read from the buffer, if possible. |
- Returns
- The number of bytes actually read from the buffer.
◆ write()
| u16_t FIFO::write |
( |
const u8_t * |
ptr, |
|
|
u16_t |
length |
|
) |
| |
Write multiple bytes to the buffer.
- Parameters
-
| ptr | Pointer to an external byte array where the data should be read from. |
| length | Number of bytes to write to the buffer, if possible. |
- Returns
- The number of bytes actually written to the buffer.
The documentation for this class was generated from the following files:


conllu.js: CoNLL-U format library for JavaScript
This is a placeholder for conllu.js library documentation, hopefully to follow soon.
  Visualization:
Input (editable):
Log and validator output:
1 edit edit VERB VERB _ 0 root _ _ 2 this this NOUN NOUN _ 1 dobj _ _Also, please see Universal Dependencies for an example of a project using the library.


- setClient_id(String) - Method in class com.bevywise.iot.client.CodeGenForESP8266
-
This method will allow you to set the unique client id to the generated agent.
- setClient_Variable(String) - Method in class com.bevywise.iot.client.CodeGenForESP8266
-
This will be called with the parameter key name for the client identified if this want to be part of the JSON response.
- setDataParams(String[], String[]) - Method in class com.bevywise.iot.client.CodeGenForESP8266
-
The data params can be set using this method The parameter type supported are int , float and boolean.
- setDeviceAuthentication(String, String) - Method in class com.bevywise.iot.client.CodeGenForESP8266
-
This method helps you set the MQTT Device authentication credentials into the client.
- setMQTTServerDetails(String, int) - Method in class com.bevywise.iot.client.CodeGenForESP8266
-
The method is to set MQTTServerDetails for the code generation.
- setTimeInterval(int) - Method in class com.bevywise.iot.client.CodeGenForESP8266
-
This method will allow you to set the time interval between each message The time interval needs to be specified in seconds..
- setTimerVariable(String) - Method in class com.bevywise.iot.client.CodeGenForESP8266
-
The method use the set the timer variable for setting the current time in the JSON Message.
- setTopic(String) - Method in class com.bevywise.iot.client.CodeGenForESP8266
-
This method is used to set the topic name of the mqtt message which is used for publishing the data.
- setWifiDetails(String, String) - Method in class com.bevywise.iot.client.CodeGenForESP8266
-
This method will be used to set the local access point credentials through which the client will communicate to mqtt server.


id: {{item?.id}}
name: {{item?.name}}
username: {{item?.username}}
email: {{item?.email}}
address: {{item?.address | json}}
phone: {{item?.phone}}
website: {{item?.website}}
company: {{item?.company | json}}


| TYPE_COMMIT | 3 | The transaction will submitted, and blocking until the tendermint network will have committed it into a block |
Blockchain transaction type
| Name | Number | Description |
| TYPE_UNSPECIFIED | 0 | |
| TYPE_ASYNC | 1 | The transaction will be submitted without waiting for response |
| TYPE_SYNC | 2 | The transaction will be submitted, and blocking until the tendermint mempool return a response |
| TYPE_COMMIT | 3 | The transaction will submitted, and blocking until the tendermint network will have committed it into a block |
| Method Name | Request Type | Response Type | Description |
| MarketAccounts | MarketAccountsRequest | MarketAccountsResponse | Get a list of Accounts by Market |
| PartyAccounts | PartyAccountsRequest | PartyAccountsResponse | Get a list of Accounts by Party |
| FeeInfrastructureAccounts | FeeInfrastructureAccountsRequest | FeeInfrastructureAccountsResponse | Get a list of accounts holding infrastructure fees. Can be filtered by asset, there will be 1 infrastructure fee account per asset in the network. |
| Candles | CandlesRequest | CandlesResponse | Get a list of Candles by Market |
| MarketDataByID | MarketDataByIDRequest | MarketDataByIDResponse | Get Market Data by Market ID |
| MarketsData | MarketsDataRequest | MarketsDataResponse | Get a list of Market Data |
| MarketByID | MarketByIDRequest | MarketByIDResponse | Get a Market by ID |
| MarketDepth | MarketDepthRequest | MarketDepthResponse | Get Market Depth |
| Markets | MarketsRequest | MarketsResponse | Get a list of Markets |
| OrderByMarketAndID | OrderByMarketAndIDRequest | OrderByMarketAndIDResponse | Get an Order by Market and Order ID |
| OrderByReference | OrderByReferenceRequest | OrderByReferenceResponse | Get an Order by Pending Order reference (UUID) |
| OrdersByMarket | OrdersByMarketRequest | OrdersByMarketResponse | Get a list of Orders by Market |
| OrdersByParty | OrdersByPartyRequest | OrdersByPartyResponse | Get a list of Orders by Party |
| OrderByID | OrderByIDRequest | OrderByIDResponse | Get a specific order by order ID |
| OrderVersionsByID | OrderVersionsByIDRequest | OrderVersionsByIDResponse | Get all versions of the order by its orderID |
| MarginLevels | MarginLevelsRequest | MarginLevelsResponse | Get Margin Levels by Party ID |
| Parties | PartiesRequest | PartiesResponse | Get a list of Parties |
| PartyByID | PartyByIDRequest | PartyByIDResponse | Get a Party by ID |
| PositionsByParty | PositionsByPartyRequest | PositionsByPartyResponse | Get a list of Positions by Party |
| LastTrade | LastTradeRequest | LastTradeResponse | Get latest Trade |
| TradesByMarket | TradesByMarketRequest | TradesByMarketResponse | Get a list of Trades by Market |
| TradesByOrder | TradesByOrderRequest | TradesByOrderResponse | Get a list of Trades by Order |
| TradesByParty | TradesByPartyRequest | TradesByPartyResponse | Get a list of Trades by Party |
| GetProposals | GetProposalsRequest | GetProposalsResponse | Get governance data (proposals and votes) for all proposals |
| GetProposalsByParty | GetProposalsByPartyRequest | GetProposalsByPartyResponse | Get governance data (proposals and votes) for proposals by party authoring them |
| GetVotesByParty | GetVotesByPartyRequest | GetVotesByPartyResponse | Get votes by party casting them |
| GetNewMarketProposals | GetNewMarketProposalsRequest | GetNewMarketProposalsResponse | Get governance data (proposals and votes) for proposals that aim creating new markets |
| GetUpdateMarketProposals | GetUpdateMarketProposalsRequest | GetUpdateMarketProposalsResponse | Get governance data (proposals and votes) for proposals that aim updating markets |
| GetNetworkParametersProposals | GetNetworkParametersProposalsRequest | GetNetworkParametersProposalsResponse | Get governance data (proposals and votes) for proposals that aim updating Vega network parameters |
| GetNewAssetProposals | GetNewAssetProposalsRequest | GetNewAssetProposalsResponse | Get governance data (proposals and votes) for proposals aiming to create new assets |
| GetProposalByID | GetProposalByIDRequest | GetProposalByIDResponse | Get governance data (proposals and votes) for a proposal located by ID |
| GetProposalByReference | GetProposalByReferenceRequest | GetProposalByReferenceResponse | Get governance data (proposals and votes) for a proposal located by reference |
| ObserveGovernance | ObserveGovernanceRequest | ObserveGovernanceResponse stream | Subscribe to a stream of all governance updates |
| ObservePartyProposals | ObservePartyProposalsRequest | ObservePartyProposalsResponse stream | Subscribe to a stream of proposal updates |
| ObservePartyVotes | ObservePartyVotesRequest | ObservePartyVotesResponse stream | Subscribe to a stream of votes cast by a specific party |
| ObserveProposalVotes | ObserveProposalVotesRequest | ObserveProposalVotesResponse stream | Subscribe to a stream of proposal votes |
| ObserveEventBus | ObserveEventBusRequest stream | ObserveEventBusResponse stream | Subscribe to a stream of events from the core |
| Statistics | StatisticsRequest | StatisticsResponse | Get Statistics on Vega |
| LastBlockHeight | LastBlockHeightRequest | LastBlockHeightResponse | |
| GetVegaTime | GetVegaTimeRequest | GetVegaTimeResponse | Get Time |
| AccountsSubscribe | AccountsSubscribeRequest | AccountsSubscribeResponse stream | Subscribe to a stream of Accounts |
| CandlesSubscribe | CandlesSubscribeRequest | CandlesSubscribeResponse stream | Subscribe to a stream of Candles |
| MarginLevelsSubscribe | MarginLevelsSubscribeRequest | MarginLevelsSubscribeResponse stream | Subscribe to a stream of Margin Levels |
| MarketDepthSubscribe | MarketDepthSubscribeRequest | MarketDepthSubscribeResponse stream | Subscribe to a stream of Market Depth |
| MarketDepthUpdatesSubscribe | MarketDepthUpdatesSubscribeRequest | MarketDepthUpdatesSubscribeResponse stream | Subscribe to a stream of Market Depth Price Level Updates |
| MarketsDataSubscribe | MarketsDataSubscribeRequest | MarketsDataSubscribeResponse stream | Subscribe to a stream of Markets Data |
| OrdersSubscribe | OrdersSubscribeRequest | OrdersSubscribeResponse stream | Subscribe to a stream of Orders |
| PositionsSubscribe | PositionsSubscribeRequest | PositionsSubscribeResponse stream | Subscribe to a stream of Positions |
| TradesSubscribe | TradesSubscribeRequest | TradesSubscribeResponse stream | Subscribe to a stream of Trades |
| TransferResponsesSubscribe | TransferResponsesSubscribeRequest | TransferResponsesSubscribeResponse stream | Subscribe to a stream of Transfer Responses |
| GetNodeSignaturesAggregate | GetNodeSignaturesAggregateRequest | GetNodeSignaturesAggregateResponse | Get an aggregate of signatures from all the nodes of the network |
| AssetByID | AssetByIDRequest | AssetByIDResponse | Get an asset by its identifier |
| Assets | AssetsRequest | AssetsResponse | Get a list of all assets on Vega |
| EstimateFee | EstimateFeeRequest | EstimateFeeResponse | Get an estimate for the fee to be paid for a given order |
| EstimateMargin | EstimateMarginRequest | EstimateMarginResponse | Get an estimate for the margin required for a new order |
| ERC20WithdrawalApproval | ERC20WithdrawalApprovalRequest | ERC20WithdrawalApprovalResponse | Get the bundle approval for an ERC20 withdrawal, these data are being used to bundle the call to the smart contract on the ethereum bridge |
| Withdrawal | WithdrawalRequest | WithdrawalResponse | Get a withdrawal by its identifier |
| Withdrawals | WithdrawalsRequest | WithdrawalsResponse | Get withdrawals for a party |
| Deposit | DepositRequest | DepositResponse | Get a deposit by its identifier |
| Deposits | DepositsRequest | DepositsResponse | Get deposits for a party |
| NetworkParameters | NetworkParametersRequest | NetworkParametersResponse | Get the network parameters |
| LiquidityProvisions | LiquidityProvisionsRequest | LiquidityProvisionsResponse | Get the liquidity provision orders |
| OracleSpec | OracleSpecRequest | OracleSpecResponse | Get an oracle spec by ID |
| OracleSpecs | OracleSpecsRequest | OracleSpecsResponse | Get the oracle specs |
| OracleDataBySpec | OracleDataBySpecRequest | OracleDataBySpecResponse | Get all oracle data |
| Method Name | Request Type | Response Type | Description |
| PrepareSubmitOrder | PrepareSubmitOrderRequest | PrepareSubmitOrderResponse | Prepare a submit order request |
| PrepareCancelOrder | PrepareCancelOrderRequest | PrepareCancelOrderResponse | Prepare a cancel order request |
| PrepareAmendOrder | PrepareAmendOrderRequest | PrepareAmendOrderResponse | Prepare an amend order request |
| PrepareWithdraw | PrepareWithdrawRequest | PrepareWithdrawResponse | Request a withdrawal |
| SubmitTransaction | SubmitTransactionRequest | SubmitTransactionResponse | Submit a signed transaction |
| SubmitTransactionV2 | SubmitTransactionV2Request | SubmitTransactionV2Response | Submit a signed transaction (v2) |
| PrepareProposalSubmission | PrepareProposalSubmissionRequest | PrepareProposalSubmissionResponse | Prepare a governance proposal |
| PrepareVoteSubmission | PrepareVoteSubmissionRequest | PrepareVoteSubmissionResponse | Prepare a governance vote |
| PropagateChainEvent | PropagateChainEventRequest | PropagateChainEventResponse | Propagate a chain event |
| PrepareLiquidityProvision | PrepareLiquidityProvisionRequest | PrepareLiquidityProvisionResponse | Prepare a liquidity provision request |
| Field | Type | Label | Description |
| max_bytes | int64 |
|
|
| max_gas | int64 |
|
| Field | Type | Label | Description |
| block | BlockParams |
|
|
| evidence | EvidenceParams |
|
|
| validator | ValidatorParams |
|
|
| version | VersionParams |
|
| Field | Type | Label | Description |
| type | string |
|
|
| attributes | EventAttribute | repeated |
|
| Field | Type | Label | Description |
| key | bytes |
|
|
| value | bytes |
|
|
| index | bool | nondeterministic |
| Field | Type | Label | Description |
| type | EvidenceType |
|
|
| validator | Validator |
|
|
| height | int64 |
|
|
| time | int64 |
|
|
| total_voting_power | int64 |
|
| Field | Type | Label | Description |
| max_age_num_blocks | int64 |
|
|
| max_age_duration | int64 |
|
|
| max_num | uint32 |
|
| Field | Type | Label | Description |
| chain_id | string |
|
|
| height | int64 |
|
|
| time | int64 |
|
| Field | Type | Label | Description |
| round | int32 |
|
|
| votes | VoteInfo | repeated |
|
| Field | Type | Label | Description |
| ed25519 | bytes |
|
| Field | Type | Label | Description |
| hash | bytes |
|
|
| header | Header |
|
|
| last_commit_info | LastCommitInfo |
|
|
| byzantine_validators | Evidence | repeated |
|
| Field | Type | Label | Description |
| tx | bytes |
|
| Field | Type | Label | Description |
| time | int64 |
|
|
| chain_id | string |
|
|
| consensus_params | ConsensusParams |
|
|
| validators | ValidatorUpdate | repeated |
|
| app_state_bytes | bytes |
|
|
| initial_height | int64 |
|
| Field | Type | Label | Description |
| events | Event | repeated |
|
| Field | Type | Label | Description |
| code | uint32 |
|
|
| data | bytes |
|
|
| log | string | nondeterministic |
|
| info | string | nondeterministic |
|
| gas_wanted | int64 |
|
|
| gas_used | int64 |
|
|
| events | Event | repeated |
|
| codespace | string |
|
| Field | Type | Label | Description |
| consensus_params | ConsensusParams |
|
|
| validators | ValidatorUpdate | repeated |
|
| app_hash | bytes |
|
| Field | Type | Label | Description |
| req_init_chain | RequestInitChain |
|
|
| res_init_chain | ResponseInitChain |
|
|
| req_deliver_tx | RequestDeliverTx |
|
|
| res_deliver_tx | ResponseDeliverTx |
|
|
| req_begin_block | RequestBeginBlock |
|
|
| res_begin_block | ResponseBeginBlock |
|
| Field | Type | Label | Description |
| address | bytes |
|
|
| power | int64 |
|
| Field | Type | Label | Description |
| pub_key_types | string | repeated |
|
| Field | Type | Label | Description |
| pub_key | PublicKey |
|
|
| power | int64 |
|
| Field | Type | Label | Description |
| app_version | uint64 |
|
| Field | Type | Label | Description |
| validator | Validator |
|
|
| signed_last_block | bool |
|
| Name | Number | Description |
| UNKNOWN | 0 | |
| DUPLICATE_VOTE | 1 | |
| LIGHT_CLIENT_ATTACK | 2 |
| Field | Type | Label | Description |
| pub_key | string |
|
|
| propagate | bool |
|
|
| order_submission | vega.commands.v1.OrderSubmission | User commands |
|
| order_cancellation | vega.commands.v1.OrderCancellation |
|
|
| order_amendment | vega.commands.v1.OrderAmendment |
|
|
| withdraw_submission | vega.commands.v1.WithdrawSubmission |
|
|
| proposal_submission | vega.commands.v1.ProposalSubmission |
|
|
| vote_submission | vega.commands.v1.VoteSubmission |
|
|
| liquidity_provision_submission | vega.commands.v1.LiquidityProvisionSubmission |
|
|
| delegate_submission | vega.commands.v1.DelegateSubmission |
|
|
| undelegate_submission | vega.commands.v1.UndelegateSubmission |
|
|
| node_registration | vega.commands.v1.NodeRegistration | Validator commands |
|
| node_vote | vega.commands.v1.NodeVote |
|
|
| node_signature | vega.commands.v1.NodeSignature |
|
|
| chain_event | vega.commands.v1.ChainEvent |
|
|
| oracle_data_submission | vega.commands.v1.OracleDataSubmission | Oracle commands |
| .proto Type | Notes | C++ | Java | Python | Go | C# | PHP | Ruby |
| double | double | double | float | float64 | double | float | Float | |
| float | float | float | float | float32 | float | float | Float | |
| int32 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead. | int32 | int | int | int32 | int | integer | Bignum or Fixnum (as required) |
| int64 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint64 instead. | int64 | long | int/long | int64 | long | integer/string | Bignum |
| uint32 | Uses variable-length encoding. | uint32 | int | int/long | uint32 | uint | integer | Bignum or Fixnum (as required) |
| uint64 | Uses variable-length encoding. | uint64 | long | int/long | uint64 | ulong | integer/string | Bignum or Fixnum (as required) |
| sint32 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s. | int32 | int | int | int32 | int | integer | Bignum or Fixnum (as required) |
| sint64 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s. | int64 | long | int/long | int64 | long | integer/string | Bignum |
| fixed32 | Always four bytes. More efficient than uint32 if values are often greater than 2^28. | uint32 | int | int | uint32 | uint | integer | Bignum or Fixnum (as required) |
| fixed64 | Always eight bytes. More efficient than uint64 if values are often greater than 2^56. | uint64 | long | int/long | uint64 | ulong | integer/string | Bignum |
| sfixed32 | Always four bytes. | int32 | int | int | int32 | int | integer | Bignum or Fixnum (as required) |
| sfixed64 | Always eight bytes. | int64 | long | int/long | int64 | long | integer/string | Bignum |
| bool | bool | boolean | boolean | bool | bool | boolean | TrueClass/FalseClass | |
| string | A string must always contain UTF-8 encoded or 7-bit ASCII text. | string | String | str/unicode | string | string | string | String (UTF-8) |
| bytes | May contain any arbitrary sequence of bytes. | string | ByteString | str | []byte | ByteString | string | String (ASCII-8BIT) |


Here is a quick example of how this module can be used in other modules. The TypeScript Module Resolution Logic makes it quite easy. The file src/index.ts
is a barrel that re-exports selected exports from other files. The package.json file contains main
attribute that points to the generated lib/index.js
file and typings
attribute that points to the generated lib/index.d.ts
file.
If you are planning to have code in multiple files (which is quite natural for a NodeJS module) that users can import, make sure you update
src/index.ts
file appropriately.
Now assuming you have published this amazing module to npm with the name my-amazing-lib
, and installed it in the module in which you need it -
Greeter
class in a TypeScript file -import { Greeter } from "my-amazing-lib";
const greeter = new Greeter("World!");
greeter.greet();
Greeter
class in a JavaScript file -const Greeter = require('my-amazing-lib').Greeter;
const greeter = new Greeter('World!');
greeter.greet();
Generated using TypeDoc


---
date: "2010-08-09T00:00:00Z"
meta:
_edit_last: "2"
published: true
status: publish
categories:
- Programming
tags:
- android
title: 'Android, MapView, and your Google apiKey: Part 2'
type: post
---
Just to follow up on my last post about embedding Google Maps into your Android application (this part is kind of anti-climatic).
So, by now you’ve signed your application. This is the “hardest” (i.e. busiest part) of the whole process. The next part, getting your Goggle apiKey, is the easy part. First you need to get the MD5 fingerprint of your keystore:
keytool -list -alias androiddebugkey -keystore <path_to_debug_keystore>.keystore -storepass android -keypass android
Once that is done, you and register for a Google Maps API key. You need a Google account, and have to agree to some terms of service legal mumbo-jumbo, but it’s pretty simple. Once you click “Generate API Key”, you will get your key string. You then simply add the Maps API key to your MapView in your application. There are a couple of ways to do this, heres how you would do it if you were using the XML layout files:
Of course, after all this is done, the next trick is managing these keys. You see, when you are working locally, your application is automatically signed using a debug key. This is fine and dandy for most development. However, when you deploy your application, you sign the application using your keystore that you created in Step 1. You may have a brief moment of clarity here and realize that the apiKey from your debug keystore and your deployment keystore are different. I’ve got some ideas on how to deal with that that, but that will be for another day.
Full documentation for all this can be found on the Android developer’s website.


Earlham College is a small private institution, which is known for its strong academic program. It is ranked in Top 10 among liberal arts colleges for undergraduate teaching. I believe that because Earlham College has only around 1,000 students, it gives me a great experience of engaging in studying with professors' help both inside and outside of the classroom.
Additionally, Earlham College has very strong Computer Science and Economics Departments, which gives its students a push for working in top tech companies and financial institutions after graduating. By being a liberal art college, it gives a broad knowledge outside of student's major as well, which I believe is a great base for successful people.
Click on the image if you want to explore more details about Earlham College.


--- layout: default title: "The News Gallery: Beyond Headlines - Crossword answers" permalink: /news-gallery_crosswords.html ---


About Me
Felipe Fernández
About the talk
- 1. Objectives
- 2. CQS
- 3. CQRS
- 4. Event Sourcing
- 5. Related Concepts
- 6. Conclusion
Objectives
- Single Responsability Principle
- Scalability
- Model complex domains
CQS
- Command-query separation. Created by Bertrand Meyer
- Rethinking CRUD/REST
- Rethinking Mock/Stub
- Achieving better SRP at method level
CQRS
- Levels of split
- No split : PostsRepository
- Split at class level : PostsReader and PostsPersister
- Split at datastore level : Writes in RDBMS and Reads in NoSQL
- Split at deployable level : Write, read and materializer services.
EVENT SOURCING
- Append instead of update/delete in the write side
- Command vs Event
- CreatePost vs PostCreated
EVENT SOURCING BENEFITS
- Easy to create new views from scratch
- Audit
- Debugabble
- Disaster Recovery
- Unified log, same original datastore for OLAP and OLTP
RELATED CONCEPTS
- Aggregates
- Microservices
- Devops
- Event Storming
Aggregates
- Transactional Boundary
- Materialised from event store or write side store
- Command handler checks invariants of aggregates
- Example: Total value of unpaid orders for a customer must not exceed that customer's credit limit
- Customer credit and orders should be part of the same aggregate
- Application or datastore locks. Race conditions
Microservices
- Write, read and materialiser deployables
- Different scalability needs
- HTTP, Message queues... Different intercommunication protocols
- Lose type safety accross services
Devops
- Infra/ops gets more complicated
- Spinning up a local environment is harder
- Smoke tests are harder too
- Devs and ops need to collaborate more in this context
Conclusion
- Most sofisticated solution has a steep learning curve
- It scales really well
- Bring ubiquituous language to your system seamlessly
- Super fun, but harder


Indexing and optimization
D
ropcaps and intro paragraph.
Understanding indexes
Understanding write conflicts
Understanding stored procedures and injection attacks


Go to Manage Your Content and Devices
From Settings, scroll down to Personal Document Settings.
Under Approved Personal Document E-mail List, check if your email address is listed. If your email address is not listed, select Add a new approved e-mail address.
Enter the email address as<EMAIL_ADDRESS>and click Add Address.


The demo showcases the abilities of the Watson Natural Language Understanding service. While it is not currently in an easily actionable form, the analysis showcases the types of content that Watson will be able to develop.