|
Exodus
6.36
|
#include "exodusII.h"
#include "netcdf.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
Functions | |
| void | ex_err (const char *module_name, const char *message, int err_num) |
| void | ex_get_err (const char **msg, const char **func, int *err_num) |
| const char * | ex_strerror (int err_num) |
Variables | |
| int | exerrval = 0 |
| static char | last_pname [MAX_ERR_LENGTH] |
| static char | last_errmsg [MAX_ERR_LENGTH] |
| static int | last_err_num |
| void ex_err | ( | const char * | module_name, |
| const char * | message, | ||
| int | err_num | ||
| ) |
The function ex_err() logs an error to stderr
. It is intended to provide explanatory messages for error codes returned from other exodus routines.
The passed in error codes and corresponding messages are listed in ???. The programmer may supplement the error message printed for standard errors by providing an error message. If the error code is provided with no error message, the predefined message will be used. The error code EX_MSG
is available to log application specific messages.
| [in] | module_name | This is a string containing the name of the calling function. |
| [in] | message | This is a string containing a message explaining the error or problem. If EX_VERBOSE (see ex_opts()) is true, this message will be printed to stderr . Otherwise, nothing will be printed. Maximum length is MAX_ERR_LENGTH . |
| [in] | err_num | This is an integer code identifying the error. exodus C functions place an error code value in exerrval , an external int. Negative values are considered fatal errors while positive values are warnings. There is a set of predefined values defined in exodusII.h . The predefined constant EX_PRTLASTMSG will cause the last error message to be output, regardless of the setting of the error reporting level (see ex_opts()). |
The following is an example of the use of this function:
| void ex_get_err | ( | const char ** | msg, |
| const char ** | func, | ||
| int * | err_num | ||
| ) |
| const char* ex_strerror | ( | int | err_num | ) |
| int exerrval = 0 |
shared error return value
|
static |
|
static |
|
static |


I've recently got a RFM12Pi connected to my Pi, and am looking to try to control my RF Mains Plugs (http://www.maplin.co.uk/remote-controlled-mains-sockets-5-pack-348217) from it.
There's a project which allows it to send the correct signal at https://github.com/dmcg/raspberry-strogonanoff but that assumes you have a transmitter connected directly to the GPIO pins on the Pi, which I don't have.
Is there a way to send this signal through the RFM12Pi?
Re: Control RF Mains Plugs using the RFM12Pi
Hi,
I dont believe there will be as most of these units use a 433 MHZ AM signal not the FM that the RF Transceivers use.
I have had limited suces using the other transmitter / receiver pair that they sell (vy48 [http://www.maplin.co.uk/transmitter-and-receiver-pair-22965]) with mome easy kits and an arduino, so if you can get the GPIOs working on the Pi, this should be fine in this instance but there will be some cross over required.
Google Home easy hacks and you will find what I have for them, Currently not got anything set up, but will be doing in the near future hopefully.
Jimmy
Re: Control RF Mains Plugs using the RFM12Pi
I'm also working on this.
As I am not running emoncms on this project I want to do a standalone demo and am going to try in node.js first (PHP and python are fallback options).  I'll use BBSB sockets which are compatible with the KAKU OOK protocol.
Have not got past plugging the unit in yet but any comments welcome.
Paul
Re: Control RF Mains Plugs using the RFM12Pi
Got a little further. Sent "1,1,1k" and got back:
> 0k
Available commands:
123 x - Toggle configuration change protection, 1=Unlocked
<nn> i - set node ID (standard node ids are 1..26)
<n> b - set MHz band (4 = 433, 8 = 868, 9 = 915)
<nnn> g - set network group (RFM12 only allows 212, 0 = any)
<n> c - set collect mode (advanced, normally 0)
...,<nn> a - send data packet to node <nn>, with ack
...,<nn> s - send data packet to node <nn>, no ack
<n> l - turn activity LED on DIG8 on or off
Current configuration:
65 i1 g210 @ 433 MHz Lock: 1
which tells me that the k command is not supported in the supplied firmware.
I need to get hold of an updated version.
Re: Control RF Mains Plugs using the RFM12Pi
Being the thug I am I would have probably tried interfacing to the remote.
Re: Control RF Mains Plugs using the RFM12Pi
KAKU code was removed from the RFM2Pi firmware to save space and keep code size <8K when the project was running on Attiny84. Now it can be easily returned for the v2 boards with Atmega328. I have experimented with sending OOK to power plugs with a RFM12B and it works well on short distance, however while sending OOK you will miss packets.. In my view, a dedicated 433mhz OOK sender is a better option.
Re: Control RF Mains Plugs using the RFM12Pi
Hi Paul,
As martin said the KAKU code is not in the RF12 demo currently running on your RFM12Pi./
The sketch which is running on your RFM12Pi is: https://github.com/mharizanov/RFM2Pi/blob/master/firmware/RF12_Demo_atmega328/RF12_Demo_atmega328.ino
as you can see the remote KAKU commands are not listed.
I've just created a new sketch in the RFM12Pi repo on mharizanov github called Full_RF12demo_atmega328. It's the vanilla RFM12 demo sketch from JeeLabs bit with a few tweaks such as baud rate, turn off bad packet reporting and "OK" printing: https://github.com/mharizanov/RFM2Pi/tree/master/firmware/Full_RF12demo_atmega328
It's quite easy to update your RFM12Pi. If you're running the prebuilt emoncmspi SD card then simply run:
cd RFM2Pi/firmware/
git pull
cd RFM12Pi Full_RF12demo_atmega328
$ sudo service rfm12piphp stop
sudo avrdude -v -c arduino -p ATMEGA328P -P /dev/ttyAMA0 -b 38400 -U flash:w:Full_RF12demo_atmega328.cpp.hex
If your not running the pre-built emoncmspi SD card then you will need to follow the instructions here to get avrdude to work on you're raspi: http://wiki.openenergymonitor.org/index.php?title=RFM12Pi_V2#Upgrading_RFM12Pi_Firmware_Direct_from_the_Pi
I've tested the new sketch here on my Pi and it works fine to receive data and log to emocms (normal RFM12Pi operation)
Let me know how you get on. Best of luck.
Glyn.
Re: Control RF Mains Plugs using the RFM12Pi
If you have an emonTx / JeeNode / NanodeRF / Arduino + RFM12B to hand you could try the kaku demo in the JeeLib examples
https://github.com/jcw/jeelib/tree/master/examples/RF12/kaku_demo
Re: Control RF Mains Plugs using the RFM12Pi
Thx Glyn,
I have now updated the firmware in the RFM12pi with your full version and everything is working.
As I am doing this standalone I used this procedure (adapted from the above link).
$ sudo apt-get update # just in case
$ sudo apt-get install arduino
$ sudo apt-get install python-dev
$ sudo apt-get install python-rpi.gpio
$ git clone https://github.com/mharizanov/avrdude-rpi.git
$ cd avrdude-rpi
$ sudo cp autoreset /usr/bin
$ sudo cp avrdude-autoreset /usr/bin
$ sudo mv /usr/bin/avrdude /usr/bin/avrdude-original
$ sudo ln -s /usr/bin/avrdude-autoreset /usr/bin/avrdude
$ cd ..
$ git clone https://github.com/mharizanov/RFM2Pi.git
$ cd RFM2Pi/firmware/Full_RF12demo_atmega328
$ avrdude -v -c arduino -p ATMEGA328P -P /dev/ttyAMA0 -b 38400 -U flash:w:Full_RF12demo_atmega328.cpp.hex
Then you can control the thing via minicom (my BBSB socket set to channel A1)
minicom -b 9600 -o -D /dev/ttyAMA0
1,1,1k to turn on
1,1,0k to turn off
Also wrote a program in node.js with module "serialport" that flashes a light connected to the socket.
This can be done in your language of choice of course.
Paul
Re: Control RF Mains Plugs using the RFM12Pi
Ya! Fantastic news. Good work.
Could you post up the make and model of the plug so that others can also get this to work.
I'll test the full RFM12Demo sketch to work for standard emoncmspi operation, if it works without a hitch after a period of time I'll make this the default firmware that shipped on the RFM12Pi's.
I'll also talk to Trystan regarding making a emoncms GUI amd event trigger in emoncms.
Re: Control RF Mains Plugs using the RFM12Pi
Hi guys,
I have managed to control Elro Remote Switches via the RFM12Pi v2 module.
Now I also want to receive plain RF codes.
Is there any way to communicate with the rfm12b itself?
Like digitalRead or something less JeeLib-ish? JeeLib only seems to support group and node communication...
I was thinking about a sketch like this: http://forum.jeelabs.net/files/RFM12B_Receive_RC_switch.pde
Thanks!
Re: Control RF Mains Plugs using the RFM12Pi
Hi guys,
First of all, sorry for my English I'm French,
I would like to monitor my house temperature with :
raspberrry pi + RFM12Pi 433Mhz and some oregon scientific sensor
i have some information about the subject sorry in french but the code is universal :)
http://connectingstuff.net/blog/decodage-protocole-oregon-arduino-1/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+ConnectingStuff+%28Connecting+Stuff%29&utm_content=Google+International
http://connectingstuff.net/blog/decodage-des-protocoles-oregon-scientific-sur-arduino-2/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+ConnectingStuff+%28Connecting+Stuff%29&utm_content=Google+International
http://connectingstuff.net/blog/decodage-des-protocoles-oregon-scientific-sur-arduino-33/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+ConnectingStuff+%28Connecting+Stuff%29&utm_content=Google+International
do you think it's possible to do this ? or i'm a noob and i have misunderstood something :d
Thanks for your answers
Re: Control RF Mains Plugs using the RFM12Pi
Hi all,
I installed the "full" firmware on my RFM12 pi with the intention of using KAKU. I noticed that my emoncms web UI became unresponsive after a few months, and tracked it back to a bug in the firmware, which was causing hundreds of inputs to be created causing the UI to get bogged down.
Pull request here: https://github.com/mharizanov/RFM2Pi/pull/6
Sorry - I don't know how to compile the .hex file from the .ico on OS X, if anyone can tell me I'll happily compile the .hex and include it in the pull request also.
Cheers,
Mark
Re: Control RF Mains Plugs using the RFM12Pi
Pull request has been merged, cheers Mark
Re: Control RF Mains Plugs using the RFM12Pi
Sorry for digging up this post.
I'm not certain if this helps anyone?
I bought the remote controls described in the very first post of this thread. I must admit I had misread the thread and believed that the author further down had been successful in getting them to work. Never mind, I did pull the remote apart and stuck an oscilloscope onto the RF output and recorded traces for ON/OFF for each channel and button combination. I have CSV files as well as these screen grabs. If anyone wants the CSV files I'll post them as a zip.
Re: Control RF Mains Plugs using the RFM12Pi
It's definitely interesting, I can't comment on how useful the CSV data is (probably 'very' in the right hands) but certainly if the file sizes permit an upload I would be keen to take a look and once they are uploaded we can refer back to them if they are useful it the future.
I have several packets of these OOK mains adapters and I intend to get them hooked up one day. (another hopeful ambition on my forever escalating list of things to do) .
Plu the (hopefully) soon to be released emonPi has provision for a OOK transmitter so that should stir up some interest too.
Paul
Re: Control RF Mains Plugs using the RFM12Pi
Paul,
I'm not clued up on the new Hope transceiver but I can't imagine it can run both AM and FM in tandem. I imagine you will either have to use it as one or the other so if you switch to AM then you'll potentially miss transmissions from any emonTX.
So as per some of the other threads on this topic, you will need one transceiver for FM style modulation for talking to emonTXs and one for AM style OOK modulation for talking to rf sockets etc.
So in the emonPi the Hope transceiver will be used for comms with emon devices and therefore won't be available for OOK type comms.
Please correct me if I'm wrong here.
Simon
Re: Control RF Mains Plugs using the RFM12Pi
Hi Simon, what you say is correct (although you could run rfm12's) However
I'll correct myself instead, for not being clearer :-)
Re: Control RF Mains Plugs using the RFM12Pi
Got it Paul, I hadn't noticed that, or had forgotten that it was there on the board layout. But then it's been almost a year since this was first mooted...... ;-)
Re: Control RF Mains Plugs using the RFM12Pi
Sorry for the slow reply I think I need to have a look at my notification settings. I've uploaded the files in an archive. Each folder corresponds to a signal generated from the remote. There are files (index.txt, index.pdf) explaining which channel and button was pressed to generate which signal (and folder).
I did find a blog online that showed how to generate the pulse sequences and then to use it to turn the plug on and off:
http://jeelabs.org/2009/03/03/ook-signaling-with-an-rfm12b/
I'm not sufficiently versed in the rfm12b to have tried it yet. I also use my Pi for monitoring so I do not mind loosing a few status packets to automate turning lights on and off I do mind loosing a lot whilst I make a mess of things trying to learn to program it.
I'm also much happier in python, fortran and PHP than other languages so they do take a while to get right.
Re: Control RF Mains Plugs using the RFM12Pi
Thanks for posting the data I shall take a closer look when I can.
JeeLib and the RF12demo sketches do already have an option or interface for OOK.
Depending on your setup you could just run a second device for OOK, If using a Pi with a RFM2Pi consider adding a JeeLink or jeeNode, that way you can leave one ticking over while experimenting on the other.
emonHub is python based and can use a Jeelink, JeeNode or rfm2pi for data, if you are willing I wouldn't mind collaborating on a python based OOK interface. We could try using a stock firmware with OOK api on the rfm device and do the work in python.
Paul


JOB DESCRIPTION
About Us
Dashboard
Edit Profile
Post Jobs
My Jobs
Notifications
Log Out
EDIT
Job Description:
Location:
Posted Date:
Expire Date:


eval()
exec() Returns only the last line
passthru() Also sends binary data, but requires a bit more work
system()
shell_exec() Returns every line


“Yato ahaṁ pabbajito, Agārasmānagāriyaṁ; Nābhijānāmi saṅkappaṁ, Anariyaṁ dosasaṁhitan”ti. … Sañjayo thero ….
Since I went forth from the lay life to homelessness, I’ve not been aware of any thought that is ignoble and hateful.


*graphic from a great @paulirish talk about tools.
using ant...
jake is a JavaScript build tool, similar to Make or Rake. Built to work with Node.js.
desc('This is the default task.');
task('default', function (params) {
console.log('This is the default task.');
});
There's also a CoffeeScript version called cake.
grunt.initConfig({
min: {
dist: {
src: ['src/source1.js', 'src/source2.js'],
dest: 'dist/built.min.js'
}
}
});
grunt favors the “configuration” approach for tasks for one simple reason: people seem to prefer a more declarative “configuration” style approach to a “scripting” approach.
Lots of common tasks and plugins that you can configure in a JSON object, but you also can script with the full power of node.js.
// Load some grunt tasks we’ve developed from the npm package grunt-barkeep.
grunt.loadNpmTasks('grunt-barkeep');
// Load grunt-shell
grunt.loadNpmTasks('grunt-shell');
// Load grunt-jasmine
grunt.loadNpmTasks('grunt-jasmine');
It's easy to create your own plugins.
Check out gruntjs.com
var js = grunt.file.expandFiles(task.file.src);
// Hey, async is available in grunt.utils.
grunt.utils.async.forEach(js, function (fn, callback) {
// ...
if (err) {
// Fatal error logging
grunt.fail.fatal(err);
}
});
rm -rf *.js


I've been a few different places and loved travelling, even though it was brief. Let's see if you can guess some of the places i've been and lived.


You earned $2100 and 5 other tokens
You have enough $daywiss to see his latest message
You now own 1 whole $brttb. There are only 2100!
You earned 10 brttb


If Else
An if else statement is what allows a program to respond in real time to outside input. With these statements, the program can change what code is executed based on variables within the program.
The Why
Without if else statements every program would run identically every time, severely restricting its usefulness. It is these statements which allow a calculator to deal with dividing by zero, a website to validate login credentials, and a game to discover when a shot has landed.
The How
number_A = 5
number_B = 4
if number_A > number_B:
The statement begins with the if
keyword, followed by the condition, then a colon, and finally an indented block of code. This code will only run if the condition is true.
number_A = 5
number_B = 4
if number_A > number_B:
print("number A is bigger than number B")
OUTPUT: "number A is bigger than number B"
In the examples above the code runs just fine without the final part of an if else statements, the else. Here the program will simply skip over the indented code if the conditional is false, and continue on. However, in many cases it is useful to have a dedicated section of code to run if the condition is false, and this is done with the else
keyword. It is used in the same way as the if
keyword, with a colon following it and then its own indented block of code.
number_A = 2
number_B = 4
if number_A > number_B:
print("number A is bigger than number B")
else:
print("number B is bigger than number A")
OUTPUT: "number B is bigger than number A"
A computer treats an if else statement as a branch in the rails of your program, with the conditional acting as the switch. After either the indented code under either the if
keyword or the else
keyword has been run, the code continues on in its normal linear fashion.
print("program begins")
number_C = 2
number_D = 4
if number_C > number_D:
print("number C is bigger than number B")
else:
print("number D is bigger than number A")
print("program continuing to run")
OUTPUT: "program begins"
"number B is bigger than number A"
"program continuing to run"
Practical Uses
If the guesses number is correct
print("Please attempt to guess the number between 1 and 10")
magic_number = 6
guess = int(input("What is your guess")
if guess < magic_number:
print("To low")


6.1.1.a type property
When you activate the Check Month trigger you must see a message that says "You have entered
a valid gMonth".
When you activate the Check Year trigger you must see a message that says "You have entered
a valid gYear".
Month :
You have entered a valid gMonth
Year :
You have entered a valid gYear
Check Month
--04
Check Year
1999


Please fill all informations
Please input your dormitory information (This information can edit after registration).
This information can edit after registration.


Upload Date: 7th September 2020
CSS (Cascading Style Sheet) is a great tool to use for not just adding styles to your boring old html, but also for positioning your contents in such a way that they are easier to engage with and navigate around. Unfortunately with CSS, you cannot simply drag and drop elements on the HTML as you see fit. However, you can apply different sets of rules to help the contents of the page organise themselves to your liking. There are many sets of those rules and the one we will be visiting this time is the “CSS Positioning”.
Step 0 we should take before going into CSS positioning is to look at how the elements on a webpage are presented. All elements are blocks of rectangular blocks with its own pixels of borders and margins.
Figure 1
There are elements such as div that are display: block by default (meaning they don’t jump next to other elements and share the row), and there are elements such as span that are display: inline by default and will sit horizontally next to other elements.
Figure 2
Figure 3
Figure 4
Now we understand that each element has their own boxes of space that they fill up on a webpage, now let’s have a look at their types of positioning.
The static positioning is the default positioning for the elements. It is sometimes used to change the element’s positioning back to default when it's affected by the outside elements. The html syntax for assigning a static position is position: static
What if I want to move this element 10px to the right from where it is now? Relative positioning answers that question for you. It allows you to move the element in relation to where it would be if it was position: static , which should be the default position from the start.
Figure 5 shows "Div one" element with position: relative. Figure 6 shows "Div one" element with position: relative with left: 15px.
Figure 5
Figure 6
Another effect the relative positioning will have on its element is that it will always appear on top of another static positioned element if moved over.
You can also set it so that it appears on top or under other elements with different positionings using the z-index. Assigning a higher z-index to an element that does not have a static position will allow it to be positioned higher than the those with lower assigned z-index.
Figure 7 shows "Div one" with position: relative with top: 15px. You can see the relatively positioned "Div One" allows it to position itself on top of the "Dive two" with static position
Figure 7
What if you wanted to position something, wherever you wanted, without affecting positions of other elements? Absolute positioning allows you to place an element anywhere within its parent as if it is a sticker, given that the parent element is either relatively or absolutely positioned. If there are no parent elements with absolute or relative positioning, it positions itself in relation to the html instead.
Figure 8 shows “Div one” with position: absolute . Notice how it is positioned on top of other elements without affecting their position.
Figure 9 shows absolutely positioned “Div one” with top: 15px; while the “Parent” division is relatively positioned. Notice how it is positioned 15px from the top in relation to the “parent” division without affecting any other elements.
Figure 8
Figure 9
Figure 10 shows absolutely positioned “Div one” with top: 15px; while the “Parent” division is neither relatively positioned or absolutely positioned. Notice how it is positioned 15px from the top in relation to the html without affecting any other elements.
Figure 10
Very similar to absolute positioning, except that it is always positioned in relation to the viewport. Because the viewport doesn’t move or change when the window is scrolled, it also means the position:fixed allows elements to not move when the window is scrolled. This characteristic makes it useful for positioning nav bars.
Figure 11 shows “Div one” with a fixed position with top: 0px. The “Parent” element is positioned relatively but unlike absolute positioning, it is fixed only to the viewport.
Figure 12 shows how scrolling the window does not change the position of the “Div one” element while it is in fixed position.
Figure 11
Figure 12
Position: sticky is like a fixed position where the element is placed like a static positioned element until it has been scrolled past. Given that the parent element has extra room, the sticky element will behave as a fixed positioned element.


WITNESS LIST Finance Committee April 4, 2005 - 9:00A SB 733 Registering, but not testifying: For: Lippincott, Chris Public Affairs Director (Texas Association Against Sexual Assualt), Austin, TX Wolf, Laura Public Policy Director (Texas Council on Family Violence), Austin, TX On: Geeslin, Julie Budget Director (Office of the Attorney General), Austin, TX Millholland, Herman Chief Crime Victims Service Division (Office of the Attorney General), Austin, TX SB 1570 Registering, but not testifying: On: Sorgee, Richard LBB Staff (LBB), Austin, TX SB 1571 AGAINST: Joslovz, Scott President and CEO (Texas Hotel and Lodging Association), Austin, TX ON: Davila, Yolanda Analyst (LBB), Austin, TX Parr, Bill LBB Staff (LBB), Austin, TX Registering, but not testifying: Against: Serff, Paul Association Executive (Texas Travel Industry Association), Austin, TX


Sidebar
Dashboard
Profile
Scheduling
Submit Available Time
Trade Shifts
Message
Sign Out
My Profile
Name:
Email:
Phone:
Company Name:
Position:
Change Password
Upload File
Change Password
New Password:
Confirm Password:


@import gospeak.core.domain.{Cfp, Proposal, Talk} @import gospeak.web.domain.Breadcrumb @import gospeak.web.pages.partials.form.html._ @import gospeak.web.pages.user.partials.html.{container, proposalFields} @import gospeak.web.pages.user.talks.cfps.routes.CfpCtrl @import gospeak.web.pages.user.talks.proposals.routes.ProposalCtrl @import gospeak.web.utils._ @(form: Form[Proposal.Data], talk: Talk, cfp: Cfp)(b: Breadcrumb)(implicit req: UserReq[AnyContent]) @container(s"New proposal for '${talk.title.value}'", b)() { @formElt(form, ProposalCtrl.doCreate(talk.slug, cfp.slug)) {
@cfp.description.render@proposalFields(form) } }()


Can I Make My Car Drive Across the City?
New Background
OK
New Character
Delete the cat (press and hold)
Shrink
Drag the car to the bottom corner of the screen
Grid On/Off
Use the grid to calculate how many blocks the car should move


A simple Node Express program with MongoDb support.
This program assumes you have MongoDb setup locally or on a server. You should also have already run MongoTalk to insert some data into the "built-in" MongoDb test database.
jQuery has been stripped out. We use fetch and createElement instead.


Hi everyone, this marks my 4th week in DBC, and this week we started working on Ruby. There are many concepts that I feel that I grasped, and others where I still need work...but today I am going to share some of my new-found Ruby knowledge.
What are arrays: Ruby arrays can be understood as a list. These lists happen to be ordered, integer-indexed collections of any object. Each element in an array is associated with and referred to by an index. The image above illustrates an array.
Array indexing starts at 0. A negative index is hoisted to the end of the array --- that is, an index of -1 indicates the last element of the array, -2 is the next to last element in the array, and so on, and so forth. You should be able to identify an array because arrays can always be found between []. Creating Arrays: array1=[4,5,6,7,8] array2=["mom","dad", "brother", "sister"] Above you can see I created two arrays. The first array is named 'array1' and consists of numbers, and the second array 'array2' consists of a string of objects. You can create an array that holds String, Integer, Fixnum, Hash, Symbol, even other Array objects. Follow those steps and you will be perfectly fine!
Before I discuss best practices for IDs vs Classes, I believe it is important to understand what each do when using HTML and CSS. The basic concept is simple, using IDs and Classes give the designer the ability target specific components of your code so you can manipulate it uniquely from the other elements. What does that mean exactly you may ask... For example if you have multiple
When using IDs a designer must understand that IDs are unique and can only be used 1x on your page per element.If you attempt to use it multiple times throughout your page, your code will not pass Validation. And validation is essential, so knowing that should keep us all in line when it comes to following best practices. So now that we know IDs are unique, you may expect that Classes are NOT unique. Classes can be used multiple times. So if you have any styling that needs to be applied to a number of objects, you would use a class. You can use the same class on more than one element, and/or you can use multiple classes on the same element. So a simple way to remember this is to know that if you plan on reusing the information over and over, use classes, but if it is unique then it should be kept in an ID.
Static is the default positioning for every page element.This means that the elements on the page will flow onto the page as it normally would.
Relative means that the position is relative to itself. From what I am reading, and think I understand about relative positioning is that if you set a position to relative with no other attributes it will be exactly the same as if you left it static. But if you begin adding attributes then it will begin to shift its position as told by the attribute to where it would normally be.
Absolute position allows you to place any page element exactly where you want it to go. This is where the top,left, bottom, right attributes.
Fixed positioning is position relative to the browser window, so a fixed position element will stay right where it is when you begin scrolling.
Initially, I had a difficult time trying to understand the difference between inline and inline-block. I hope I can explain this to you all in a way that makes sense. You must start by understanding the lay out of a web page. Each element is broken up into rectangular boxes.The display value that you input will determine how that box will behave. According to CSS-Tricks, the default value for all elements is inline, and the default styles that the browser applies to all sites resets most of the elements in blocks.
So as previously stated, inline is the default value for elements.Inline elements will not accept height or width values, but they will accept margin and padding. What this means in that when an inline value is set, and margin and padding have been added, it will only push the other surrounding objects away and the element will remain inline.
Inline-block has some similarities to inline. The only difference is that you are able to add a width and height value that will be applied.


I am an Aalto University student turning to a programmer.
I am a fan of Microeconomic Theory.
I have solved every exercise in the book and tried to come up with a new idea about economic theory but haven't had one yet.
Econ has been increasingly in rapid development, playing a supplemental role in favor of a more harder science, like Statistics. A staple of which is Statistical Inference.
The has become notorious among PhD students in economics the way has been for students in Statistics.
No book can ever be finished. While working on it we learn just enough to find it immature the moment we turn away from it.
My bank account number is 8413700
Programming is fun.
An example in layout.


--- layout: default title: Stuart Hua's Site permalink: index.html --- Stuart Hua More {% include footer.html %}


Looking to buy, rent or invest?
A better place to start your property search.immoafrica.net is fast becoming one of South Africa’s key property portals that connects foreign investors, second-home buyers and holiday makers from all over the world with South African real estate. With well over 100 000 property listings, new stock added and updated daily, smart search algorithms and our latest responsive web design, you are guaranteed to find your perfect home or investment from any device from anywhere in the world.
To do... Links Start your search here | Professionals - list your properties
Relevant Resources
Ideas, inspiration, news and more.Know the costs before you buy-to-let
Published on 14 Feb 2014According to the US National Association of Realtors (NAR), investment and holiday-home purchasing accounted for 24% of all home sales last year, as buyers sought to...
First-time buyers back in force
Published on 13 Feb 2014Sentiment in the residential property market continues to improve and drive up the demand for home ownership, even in the face of rising living expenses and slow economic ...
Avoid confusion in carefully worded Offer to Purchase documents
Published on 12 Feb 2014Almost all Offer to Purchase documents contain wording to the effect that the sale includes all permanent ...
Own your piece of Africa
Your search starts here.Connect & Engage
Stay in touchSign up to our newsletter to receive latest news on African real estate trends, lifestyle and news. Get a fresh perspective with immoafrica.
Follow us on the following channels


Import .whl files into Bazel.
download_or_build_wheel
download_or_build_wheel(name, buildtime_deps, pip_args, python, requirement, urls, wheel_name)
Attributes
name |
A unique name for this rule. |
buildtime_deps |
|
pip_args |
|
python |
|
requirement |
|
urls |
|
wheel_name |
|
extract_wheels
extract_wheels(name, additional_runtime_deps, extras, python, remove_runtime_deps, repository, wheels)
A rule for importing .whl dependencies into Bazel.
This rule is currently used to implement pip_import, it is not intended to work standalone, and the interface may change. See pip_import for proper usage.
This rule imports a .whl file as a py_library:

whl_library( name = "foo", whl = ":my-whl-file", repository = "name of pip_import rule", )
This rule defines a @foo//:pkg py_library target.
Attributes
name |
A unique name for this rule. |
additional_runtime_deps |
|
extras |
A subset of the "extras" available from this .whl for which requirements has the dependencies. |
python |
|
remove_runtime_deps |
|
repository |
|
wheels |
|


---
title: CV
layout: cv
class: cv
---
Work experience
since 12/2020transfer by acquisition
CARIAD SE - Data Scientist
- predevelopment for bringing a machine learning based function into advanced driver assistance systems (ADAS) (Python, Matlab/Simulink, MLFlow)
- preparation and implementation of a process to make a machine leaning based ADAS function ready for series development (Python, AzureML, Azure Devops)
09/2019 - 11/2020
Carmeq GmbH - Machine Learning Engineer / Data Scientist
- feasibility studies regarding advanced computer vision (Python, OpenCV)
- predevlopment for bringing a machine learning based function into driver assistance systems (Python, Matlab/Simulink, MLFlow)
03/2019 - 09/2019
Medneo - Software Engineer - Digital Imaging Innovations
- maintainance of a data distribution system (SVN)
- adaption of several applications to the company CI pipeline based on Jenkins (Docker)
- development of frameworks and (web) applications (Python, JS, ZeroMQ, React.js, Docker)
01/2017 - 03/2019
Leica Microsystems CMS GmbH - Software Engineer - Image Processing
- maintenance and improvements of a 3D visualization module for z-stacks (C++, C#, DirectX, .net)
- feasibility studies regarding possible image processing applications for several problems (Python)
- development and evaluation of image processing algorithms (Python, Matlab, OpenCV)
- protoype: application of Machine Learning and Deep Learning (ScikitLearn, Keras with Tensorflow Backend)
- protoype: implementation of a heterogeneous clusters for evaluation of algorithmen and training of models (Spark, HDFS, Python)
- implementation of image registration/alignment techniques and methods for optical distortion correction (Python, C++, OpenCV)
05/2016 - 12/2016
FERCHAU Engineering - Software Engineer - Driver Assistance System
In action as driving functions developer at Continental Teves AG Frankfurt:
- implementation of support and test scripts for driving simulations (Python)
- analysis of car internal data for classification of left turn maneuvers (Python)
- implementation of the functionality of an emergency brake assistant (C, Python)
03/2015 - 03/2016
Siemens AG - Working Student - Software Testing
Division mobility and logistics
- implementing and improve wireshark dissectors for network protocol analysis (written in C)
- supervision of tests of low level features of train communication systems
- analysing results and possible defects
04/2013 - 04/2015
Freie Universität Berlin - Tutor
Teaching students and checking tests; Supervised courses:
- operating systems and communication systems
- software engineering
- object oriented programming
- programming in java
10/2011 - 04/2013
Campusspeicher.de - Working Student - Software Developent / Server Administration / Customer Support
- development of components with Django
- migration data from a legacy customer management system to a new one
- administration of linux server
- support customers regarding questions and problems with their domains or hosting package
Education
04/2011 - 09/2011
Technische Universität Berlin - B.Sc. Physics (not finished)
10/2010 - 02/2011
Duale Hochschule Baden-Württemberg - B.Sc. Applied Computer Science (not finished)
2003 - 2010
Gustav-Heinemann-Oberschule - A levels (∅ 1.5)
advanced courses: physics and political science


Home
Take a Survey
View Results
About Us
-->
busMall Products Survey
Please Select the Image You Prefer
Top Products
You Haven't Taken a Survey Yet
Placeholder
Placeholder
Placeholder


Maharashtra: 3.5 Magnitude Earthquake Strike Palghar District, No Casualties Reported so Far
New Delhi: An earthquake of magnitude measuring up to 3.5 was recorded in Maharashtra's Palghar district on Thursday morning, civic officials told news agency PTI.
New Delhi: An earthquake of magnitude measuring up to 3.5 was recorded in Maharashtra’s Palghar district on Thursday morning, civic officials told news agency PTI.
“The magnitude of the earthquake was 3.5. There were no reports of damage to property or casualty,” stated news agency PTI quoting Santosh Kadam, the Regional Disaster Management Cell (RDMC) Chief of the Thane Municipal Corporation (TMC). Kadam also noted that the tremors of the quake were first felt at around 7.20 AM at Dhundalwadi village in Dahanu taluka of Palghar, added the report.
Two days back, a 2.9 magnitude earthquake struck the village in Palghar. Such frequent tremors have been occurring in Dhundalwadi since November 2018. In fact, the entire Palghar district is prone to such quakes. On February 1, a two-year-old girl died in a quake that hit Palghar. Notably, three earthquakes measuring 4.1, 3.6 and 3.5 on the Richter scale hit the district at 2:06 PM, 3:53 PM and 4:57 PM respectively on the same day.
In another instance, an earthquake of magnitude 3.0 on the Richter scale hit the Palghar region in Maharashtra on January 21 this year. According to the Indian Meteorological Department (IMD), the earthquake was located at a latitude of 20.0 degrees North and longitude of 72.9 degrees East and occurred at a depth of 5 km.
(With agency inputs)
For breaking news and live news updates, like us on Facebook or follow us on Twitter and Instagram. Read more on News Latest News on India.com.
Story Timeline
- 25 Jul 2019 Series of Earthquakes Hit Maharashtra's Palghar, 55-year-old Dies After Wall Collapses
- 20 Feb 2019 Earthquake in Maharashtra: Three Successive Jolts Shake Palghar; No Casualties Reported
- 20 Jan 2019 Earthquake in Maharashtra: Tremors Measuring 3.6 on Richter Scale Jolt Palghar
- 14 Jul 2018 Earthquake in Maharashtra: Tremors of Magnitude 2.8 Strike Raigarh; Jolt Felt in Kalyan Near Mumbai
Comments - Join the Discussion


Nokia N800 Review
I have one of those new Nokia N800 Internet Tablet, as many of you know I was one of the first to buy its predecessor, the Nokia 770 Internet Tablet. What do I think? Well I have put of writing this for 4 days, as I wanted to really test it out. Before I start, I should say I was part of the Nokia Developer Device program, and I got the Nokia N800 at a big discount, €300 off the €399 retail price in fact. Under headings below I will take about the N800, and compare it to the 770:
Battery Life:
This sees an improvement in the N800 alright, as it is meant for
standby. The N770 hadn’t got great battery life really at all, so it
seems Nokia payed more attention to the fact it is a communications
device, and like phones it needs the juice for use! I guess part of this
is that they cut out lots of unesscessary stuff from the Linux kernels
boot up, as the device also boots way faster, and has more of a touch a
button and your in business type-of-feel.
Ergonomics & Design:
This is a dissapointment on the N800. It looks nice, all the buttons on
the front are okay, but the ones on top are disastrous. I bet a
marketing person, or a designer who knows nothing (but should) about
ergonomics got a hold of it. It feels like buttons on a phone at the top
of the N800, hunched together as they have no room. I wouldn’t complain
if I didn’t use these so often, but they are used by almost every
program you want to use on the N800! The N770 had much better idea,
spaced out the Zoom (+ & -), fullscreen (on/off) and the power button.
Bluetooth:
Still relatively the same as the N770, yet Nokia have modified software
so that it will accept Bluetooth keyboards, headsets(? Haven’t tried)
and other devices officially through the control panel on the device.
This marks a push by Nokia to sell all of these when you are buying the
N800, which is an improvement in my eyes.
Storage:
Big improvement here, the N800 not only accepts paltry RS-MMC cards, but
SD amongst others. Not only that but the device has two memory card
slots, each capable of 2GB cards. The N770 recieved critiscism for using
a format not widely in distribution (RS-MMC), so they listened to what
the feedback was. Now its a snap for me to swap in my camera’s SD card
and look at those photos on the move!
Memory:
Also a huge improvement. The N800 comes with 128mb RAM, and it shows.
Since I have had
the device, I had as much as ten windows open (Browser, RSS Reader,
Maemo Mapper, Media Streamer etc) and it ran like as smooth as any
device I have ever used. I guess they are really optimising the software
for the platform, which shows, like in the boot time above. The N770 had
64mb, a slower processor and you felt it. It did what it was supposed
to, but under 4-5 windows it would screech to a halt, not good for a
tablet. You had to resort to memory swapping applications (basically
using the memory card as RAM).
Web Browsing & Messaging:
Web Browsing seems the same as the N770, it mighty be faster, but that
could be due to RAM. A huge dissapointment is no Flash 9, which means no
Youtube or other flash content. Did I mention this is a huge mistake?
People who buy these devices expect their favourite websites to just
work, so a big thumbs down on that front, but hopefully it will be
fixed. Messaging is superb on the N800, and its touchscreen thumb
keyboard is a joy to use. I feel I could type faster on it given enough
time compared to a real keyboard, so this is definately good. I am a big
fan of Google Talk and open standards jabber, so I love the voice
calling part of it. It seems crisp, clear and almost as good as normal
phone. I have tried a video call, and well it is not as good as I
expected. The camera doesn’t seem good quality, but it serves ita
purpose. I tried Nokia Video call feature, and well it was also not
good. It dropped voice, video was grainy and the software not on the
N800 was for PC only, not Linux or Mac. I guess this is because Nokia
don’t own a messaging service, but I have one piece of advice: don’t
bother. Better leave the messaging to people in the know, like Skype.
Although Skype is against everything I believe in (open standards) its
inclusion in the N800 gives better choice, and should be welcomed.
Personal Information Management:
A big let down I am afraid. Being a Mac user, I expect seamless
integration of contacts and syncing. Maybe Nokia’s PC suite works with
the N800, I have’t tried. But that said, why doesn’t it sync with my
Nokia 6234 phone? With GoogleTalk set to include SIP calling, and Skype
has SkypeOut, I need an easy way to reach all my numbers, to avoid my
mobile phone networks high prices! I don’t think they worked on PIM
features since the 770, and it shows. This is fundamental to a
communications device!
Overall, the N800 is a nice device and a definate improvement on the 770, but I have a few software and device design issues. I understand their is limitations in price (what market will accept) and that maybe Nokia were on a deadline, release something after Christmas to boost sales which I imagine level off. That said the N800 is not a PDA, or a phone, so what is it? A tiny laptop? This one I think even confuses Nokia, but I like it. It makes the Internet Tablet range stand out, and they mean different things to different people. I give it 7.5/10 which can rise to a nine if Nokia fix some issues!
Read another great review by Luis Villa on Planet Gnome.


There are a number of ways to access the files and other content stored by RAMADDA.
When you are viewing a Folder or other container entry open the menu (
) and under the File menu are options - Zip and Download Tree and Bulk Download Script. If you are logged in there is also a Export Entries service.
The Zip and Download Tree will produce a .zip file of the entire entry hierarchy. Note - there are size limits in place (some number of GB).
The Bulk Download Script will return a shell script that, when run on your machine, will recreate the entry hierarchy a directories on your machine and will download the files. Note: this uses some shell programming and the curl program to download the files. This has been tested on Mac and Unix machines but not in Windows.
You can change the default behavior of the service, e.g., adding download of xml metadata files, overwriting the files, etc. by copy-and-pasting the URL and adding new URL arguments.
e.g.:
http://ramadda.org/repository/entry/show/RINEX_download.sh?entryid=d8e8c047-d990-40f7-9eb9-07c89323bbe4&output=bulk.curl
If a file already exists the script will not download the file. To change this behavior add the URL argument:
&overwrite=true
Normally when you are viewing a Folder (or Project, etc) the download script will not create a directory for the Folder. It will just download all of the children entries. To have the script also create a directory (and fetch metadata, etc) for the current Folder add:
&includeparent=true
To also have the script download any other outputs (e.g., GeoRSS, THREDDS catalog) add the
outputs URL argument:
&outputs=<comma separated list of output ids>
e.g.: to also fetch the ATOM xml feed do:
&outputs=atom
Other outputs include:
&outputs=json,atom,rss.full,kml
You can export the RAMADDA entry xml format then, from your own RAMADDA, harvest the directory tree the script creates and you will have an exact replica of the original RAMADDA content and data.
Just add on:
&outputs=xml.xmlentry


{% extends "base.html" %} {% block breadcrumb %}{% endblock %} {% block content %}
For some reason your email or password did not match one that we have on file. Please try again, or sign up to shop our products online.
{% for error in errors %}{% if forloop.first %}
Although you don't have to be a member to shop Atomic Cooperative Market, the benefits are excellent and just $25 gets you started! Read MORE about becoming a member.
{% endblock %}


Comments Plugin
If you can see this, React is not working right.
Ajax Component
If you can see this, React is not working right.
If you can see this, React is not working right.


{{define "developer"}}
Copied to Clipboard!
Please copy the API Token and save it in a safe place. You won't be able to see the token again once this page is closed or reloaded.
You have previously generated an API Token and hopefully saved it in a safe place.
{{ end }} {{ else }} {{ end }}


This page doesn't exist. We're willing to bet that it's because you pasted in some dodgy URL that a "friend" of yours sent you.
We think that means you should really take stock of your life and the people in it. After all, friends don't send friends broken links.
Either that or something really weird and/or bad happened on our end.


Lesson 1: Headings
This is a level 1 heading created using the h1 tag
This is a level 2 heading created using the h2 tag
This is a level 3 heading created using the h3 tag
This is a level 4 heading created using the h4 tag
This is a level 5 heading created using the h5 tag
This is a level 6 heading created using the h6 tag


MLD2P4 is available from the web site
https://github.com/sfilippone/mld2p4-2where contact points for further information can be also found.
The software is available under a modified BSD license, as specified in Appendix A; please note that some of the optional third party libraries may be licensed under a different and more stringent license, most notably the GPL, and this should be taken into account when treating derived works.
The library defines a version string with the
constant
2.1.0
.


Fork me on GitHub
Diego: The Container Placement engine with a Reverse-Auction Scheduler
An Overview
How does it work?
Some more details
- https://drive.google.com/file/d/0BzowTjPNRrlzeHoyeTFoUWlla2M/edit
- https://github.com/cloudfoundry-incubator/diego-design-notes
- http://blog.pivotal.io/cloud-foundry-pivotal/products/app-placement-in-cloud-foundry-diego-a-classical-optimization-problem
- https://github.com/pivotal-cf-experimental/lattice
- https://www.pivotaltracker.com/n/projects/1003146
- https://github.com/cloudfoundry-incubator/diego-release
- Simulator: https://github.com/cloudfoundry-incubator/auction/tree/master/simulation
Who built it?
How do I try it out?
Try Lattice


How to play: Use your arrow keys to move the tiles. Arrow keys are reversed! So up will move down, left will move right, and so on. When two tiles with the same number touch, they merge into one!
Note: This site is NOT the official version of 2048. You can play the original via http://git.io/2048.


--- layout: default title: Creating an entity permalink: /creating-an-entity/ redirect_from: - /creating_an_entity.html sitemap: priority: 0.7 lastmod: 2014-10-10T00:00:00-00:00 ---
Once you have created your application, you will want to create entities. For example, you might want to create an Author and a Book entity. For each entity, you will need:
If you have several entities, you will likely want to have relationships between them. For this, you will need:
The "entity" sub-generator will create all the necessary files, and provide a CRUD front-end for each entity (see project structure). The sub generator can be invoked by running yo jhipster:entity <entityName> --[options]
. Reference for those options can be found by typing yo jhipster:entity --help
Below are the supported options.
--table-name <table_name>
- By default JHipster will generate a table name based on your entity name, if you would like to have a different table name you can do so by passing this option.--angular-suffix <suffix>
- If you want all your AngularJS routes to have a custom suffix you can pass that using this option.--regenerate
- This will regenerate an existing entity without asking any questions.--skip-server
- This will skip the server-side code and will generate only the client-side code.--skip-client
- This will skip the client-side code and will generate only the server-side code.This page describes how to create entities with JHipster using the standard command-line interface. If you want to create many entities, you might prefer to use a graphical tool.
In that case, two options are available:
If you have JDL (.jh) file you can use that to create entities in batch by running yo jhipster:import-jdl yourFileName.jh
.
For each entity, you can add as many fields as you want. You will need to input the field names and their types, and JHipster will generate for you all the required code and configuration, from the AngularJS HTML view to the Liquibase changelog.
Those fields cannot contain reserved keywords in the technologies you are using. For example, if you use MySQL:
JHipster supports many field types. This support depends on your database backend, so we use Java types to describe them: a Java String
will be stored differently in Oracle or Cassandra, and it is one of JHipster's strengths to generate the correct database access code for you.
String
: A Java String. Its default size depends on the underlying backend (if you use JPA, it's 255 by default), but you can change it using the validation rules (putting a max
size of 1024, for example).Integer
: A Java Integer.Long
: A Java Long.Float
: A Java Float.Double
: A Java Double.BigDecimal
: A java.math.BigDecimal
object, used when you want exact mathematic calculations (often used for financial operations).LocalDate
: A java.time.LocalDate
object, used to correctly manage dates in Java.ZonedDateTime
: A java.time.ZonedDateTime
object, used to correctly manage dates and times in Java.Boolean
: A Java Boolean.enum
: A Java Enumeration object. When this type is selected, the sub-generator will ask you what values you want in your enumeration, and it will create a specific enum
class to store them.byte[]
: A Blob object, used to store some binary data. When this type is selected, the sub-generator will ask you if you want to store some generic binary data, or an image object. Images will be handled specifically on the AngularJS side, so they can be displayed to the end-user.Validation can be set up for each field. Depending on the field type, different validation options will be available.
Validation will be automatically generated on:
Bean validation will then be used to automatically validate domain objects when they are used in:
@Valid
annotation)Validation information will also be used to generate more precise database column metadata:
Validation has a few limitations:
Entity relationships are only available for SQL databases. It is a fairly complex subject, which has its own documentation page: Managing relationships.
By default JHipster entities do not use DTOs, but they are available as an option. Here is the documentation: Using DTOs.
Please note that pagination is not available if you created your application with Cassandra. Of course this will be added in a future release.
Pagination uses the Link header, as in the GitHub API. JHipster provides a custom implementation of this specification on both the server (Spring MVC REST) and client (AngularJS) sides.
When the entity is generated, JHipster provides 4 pagination options:
The entity configuration is saved in a specific .json
file, in the .jhipster
directory. So if you run the sub-generator again, using an existing entity name, you can update or regenerate the entity.
When you run the entity sub-generator for an existing entity, you will be asked a question 'Do you want to update the entity? This will replace the existing files for this entity, all your custom code will be overwritten' with following options:
Yes, re generate the entity
- This will just regenerate your entity. Tip: This can be forced by passing a --regenerate
flag when running the sub-generatorYes, add more fields and relationships
- This will give you questions to add more fields and relationshipsYes, remove fields and relationships
- This will give you questions to remove existing fields and relationships from the entityNo, exit
- This will exist the sub-generator without changing anythingYou might want to update your entity for the following reasons:
.json
configuration file (the format is quite close to the questions asked by the generator, so it's not very complicated), so you can have a new version of your entity.json
file, and want a new entity that is very close to the copied entity
TIP: to regenerate all your entities at once, you can use the following commands (remove the --force
to have questions asked when files have changed).
for f in `ls .jhipster`; do yo jhipster:entity ${f%.*} --force ; done
for %f in (.jhipster/*) do yo jhipster:entity %f --force
This is a short tutorial on creating two entities (a Author and a Book) which have a one-to-many relationship.
As we want to have a one-to-many relationship between Authors and Books (one author can write many books), we need to create the Author first. At the database level, JHipster will then be able to add a foreign key on the Book table, linking to the Author table.
yo jhipster:entity author
Answer the next questions concerning the fields of this entity, the author has:
Then answer the questions concerning the relationships, the author has:
yo jhipster:entity book
Answer the next questions concerning the fields of this entity, the book has:
Then answer the questions concerning the relationships, the book:
Run the generated test suite, with mvn test
, which will test the Author entity and the Book entity.
Launch the application (for example with mvn
), log in and select the "Author" and "Book"
entities in the "entities" menu.
Check the database tables, to see if your data is correctly inserted.
The generated files contain all the basic CRUD operations, and don't need to be modified if your needs are simple.
If you want to modify the generated code or the database schema, you should follow our development guide
If you want some more complex business behaviors, you might need to add a Spring @Service
class, using the service sub-generator.
Your generated CRUD page should look like this:


@* * Copyright 2015 Yahoo Inc. Licensed under the Apache License, Version 2.0 * See accompanying LICENSE file. *@ @(cluster: String, createTopicForm: Form[models.form.CreateTopic])(implicit request: RequestHeader) @import b3.vertical.fieldConstructor @import controllers.routes @theMenu = { @views.html.navigation.clusterMenu(cluster,"Topic","Create",models.navigation.Menus.clusterMenus(cluster)) } @main( "Create Topic", menu = theMenu, breadcrumbs=views.html.navigation.breadCrumbs(models.navigation.BreadCrumbs.withViewAndCluster("Create Topic",cluster))) {


Please select your gender and type in your age.
Gender:
Age:
What factors influenced how you rated the different explanations? Do you have any other comments about the experiment?
Please press finish to complete the experiment.


Chapter 3 Exponential Smoothing
3.1 Introduction
3.1.1 Historical perspective
- Developed in the 1950s and 1960s as methods (algorithms) to produce point forecasts.
- Combine a “level”, “trend” (slope) and “seasonal” component to describe a time series.
- The rate of change of the components are controlled by “smoothing parameters”: \(\alpha\), \(\beta\) and \(\gamma\) respectively.
- Need to choose best values for the smoothing parameters (and initial states).
- Equivalent ETS state space models developed in the 1990s and 2000s.
3.1.2 Big idea: control the rate of change
\(\alpha\) controls the flexibility of the level
- If \(\alpha = 0\), the level never updates (mean)
- If \(\alpha = 1\), the level updates completely (naive)
\(\beta\) controls the flexibility of the trend
- If \(\beta = 0\), the trend is linear (regression trend)
- If \(\beta = 1\), the trend updates every observation
\(\gamma\) controls the flexibility of the seasonality
- If \(\gamma = 0\), the seasonality is fixed (seasonal means)
- If \(\gamma = 1\), the seasonality updates completely (seasonal naive)
3.1.3 A model for levels, trends, and seasonalities
We want a model that captures the level (\(\ell_t\)), trend (\(b_t\)) and seasonality (\(s_t\)).
How do we combine these elements?
- Additively?
\[y_t = \ell_{t-1} + b_{t-1} + s_{t-m} + \varepsilon_t\]
- Multiplicatively?
\[y_t = \ell_{t-1}b_{t-1}s_{t-m}(1 + \varepsilon_t)\]
- Perhaps a mix of both?
\[y_t = (\ell_{t-1} + b_{t-1}) s_{t-m} + \varepsilon_t\]
How do the level, trend and seasonal components evolve over time?
General notation:
\[\text{ETS: } \textbf{E}\text{xponen}\textbf{T}\text{ial}\textbf{ S}\text{moothing}\]
Error: Additive ("A"
) or multiplicative ("M"
)
Trend: None ("N"
), additive ("A"
), multiplicative ("M"
), or damped ("Ad"
or "Md"
).
Seasonality: None ("N"
), additive ("A"
) or multiplicative ("M"
)
3.2 Simple exponential smoothing
Time series \(y_1,y_2,\dots,y_T\).
Random walk forecasts \[\hat{y}_{T+h|T} = y_T\]
Average forecasts
\[\hat{y}_{T+h|T} = \frac1T\sum_{t=1}^T y_t\]
- Want something in between these methods.
- Most recent data should have more weight.
Forecast equation
\[\hat{y}_{T+1|T} = \alpha y_T + \alpha(1-\alpha) y_{T-1} + \alpha(1-\alpha)^2 y_{T-2}+ \cdots\]
where \(0 \le \alpha \le1\)
Component form
Forecast equation \(\hat{y}_{t+h|t} = \ell_{t}\)
Smoothing equation \(\ell_{t} = \alpha y_{t} + (1 - \alpha)\ell_{t-1}\)
- \(\ell_t\) is the level (or the smoothed value) of the series at time t.
\(\hat{y}_{t+1|t} = \alpha y_t + (1-\alpha) \hat{y}_{t|t-1}\) Iterate to get exponentially weighted moving average form.
Weighted average form
\[\hat{y}_{T+1|T}=\sum_{j=0}^{T-1} \alpha(1-\alpha)^j y_{T-j}+(1-\alpha)^T \ell_{0}\]
3.2.1 Optimising smoothing parameters
- Need to choose best values for \(\alpha\) and \(\ell_0\).
- Similarly to regression, choose optimal parameters by minimising SSE:
\[\text{SSE}=\sum_{t=1}^T(y_t-\hat{y}_{t|t-1})^2.\]
Unlike regression there is no closed form solution — use numerical optimization.
- For Algerian Exports example:
- \(\hat\alpha = 0.8400\)
- \(\hat\ell_0 = 39.54\)
3.2.2 Models and methods
<IP_ADDRESS> Methods
- Algorithms that return point forecasts.
<IP_ADDRESS> Models
- Generate same point forecasts but can also generate forecast distributions.
- A stochastic (or random) data generating process that can generate an entire forecast distribution.
- Allow for “proper” model selection.
3.2.3 ETS(A,N,N): A model for SES
Component form
Forecast equation: \(\hat{y}_{t+h|t} = \ell_{t}\)
Smoothing equation: \(\ell_{t} = \alpha y_{t} + (1 - \alpha)\ell_{t-1}\)
Forecast error: \(e_t = y_t - \hat{y}_{t|t-1} = y_t - \ell_{t-1}\)
Error correction form
\[y_t = \ell_{t-1} + e_t\] \[\ell_{t}= \ell_{t-1}+\alpha( y_{t}-\ell_{t-1})\]
\(\ell_{t}=\ell_{t-1}+\alpha e_{t}\)
Specify probability distribution for \(e_t\), we assume \(e_t = \varepsilon_t\sim\text{NID}(0,\sigma^2)\).
3.2.4 ETS(A,N,N)
Measurement equation: \(y_t = \ell_{t-1} + \varepsilon_t\)
State equation: \(\ell_t=\ell_{t-1}+\alpha \varepsilon_t\)
where \(\varepsilon_t\sim\text{NID}(0,\sigma^2)\).
- “innovations” or “single source of error” because equations have the same error process, \(\varepsilon_t\).
- Measurement equation: relationship between observations and states.
- State equation(s): evolution of the state(s) through time.
3.2.5 ETS(M,N,N)
SES with multiplicative errors.
- Specify relative errors \(\varepsilon_t=\frac{y_t-\hat{y}_{t|t-1}}{\hat{y}_{t|t-1}}\sim \text{NID}(0,\sigma^2)\)
- Substituting \(\hat{y}_{t|t-1}=\ell_{t-1}\) gives:
- \(y_t = \ell_{t-1}+\ell_{t-1}\varepsilon_t\)
- \(e_t = y_t - \hat{y}_{t|t-1} = \ell_{t-1}\varepsilon_t\)
- Substituting \(\hat{y}_{t|t-1}=\ell_{t-1}\) gives:
- Measurement equation: \(y_t = \ell_{t-1}(1 + \varepsilon_t)\)
State equation: \(\ell_t=\ell_{t-1}(1+\alpha \varepsilon_t)\)
Models with additive and multiplicative errors with the same parameters generate the same point forecasts but different prediction intervals.
3.2.6 ETS(A,N,N): Specifying the model
By default, an optimal value for \(\alpha\) and \(\ell_0\) is used.
\(\alpha\) can be chosen manually in trend()
.
3.2.7 Example: Algerian Exports
algeria_economy <- global_economy %>%
filter(Country == "Algeria")
fit <- algeria_economy %>%
model(ANN = ETS(Exports ~ error("A") + trend("N") + season("N")))
report(fit)
## Series: Exports
## Model: ETS(A,N,N)
## Smoothing parameters:
## alpha = 0.84
##
## Initial states:
## l
## 39.54
##
## sigma^2: 35.63
##
## AIC AICc BIC
## 446.7 447.2 452.9
## # A dable: 59 x 7 [1Y]
## # Key: Country, .model [1]
## # ETS(A,N,N) Decomposition: Exports = lag(level, 1) +
## # remainder
## Country .model Year Exports level remainder .fitted
## <fct> <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Algeria ANN 1959 NA 39.5 NA NA
## 2 Algeria ANN 1960 39.0 39.1 -0.496 39.5
## 3 Algeria ANN 1961 46.2 45.1 7.12 39.1
## 4 Algeria ANN 1962 19.8 23.8 -25.3 45.1
## 5 Algeria ANN 1963 24.7 24.6 0.841 23.8
## 6 Algeria ANN 1964 25.1 25.0 0.534 24.6
## 7 Algeria ANN 1965 22.6 23.0 -2.39 25.0
## 8 Algeria ANN 1966 26.0 25.5 3.00 23.0
## 9 Algeria ANN 1967 23.4 23.8 -2.07 25.5
## 10 Algeria ANN 1968 23.1 23.2 -0.630 23.8
## # … with 49 more rows
3.3 Models with trend
3.3.1 Holt’s linear trend
Component form
- Forecast \(\hat{y}_{t+h|t} = \ell_{t} + hb_{t}\)
- Level \(\ell_{t} = \alpha y_{t} + (1 - \alpha)(\ell_{t-1} + b_{t-1})\)
Trend \(b_{t} = \beta^*(\ell_{t} - \ell_{t-1}) + (1 -\beta^*)b_{t-1}\)
- Two smoothing parameters \(\alpha\) and \(\beta^*\) (\(0\le\alpha,\beta^*\le1\)).
- \(\ell_t\) level: weighted average between \(y_t\) and one-step ahead forecast for time \(t\), \((\ell_{t-1} + b_{t-1}=\hat{y}_{t|t-1})\)
- \(b_t\) slope: weighted average of \((\ell_{t} - \ell_{t-1})\) and \(b_{t-1}\), current and previous estimate of slope.
Choose \(\alpha, \beta^*, \ell_0, b_0\) to minimise SSE.
3.3.2 ETS(A,A,N)
Holt’s linear method with additive errors.
- Assume \(\varepsilon_t=y_t-\ell_{t-1}-b_{t-1} \sim\text{NID}(0,\sigma^2)\).
Substituting into the error correction equations for Holt’s linear method
\[y_t=\ell_{t-1}+b_{t-1}+\varepsilon_t\] \[\ell_t=\ell_{t-1}+b_{t-1}+\alpha \varepsilon_t\] \[b_t=b_{t-1}+\alpha\beta^* \varepsilon_t\]For simplicity, set \(\beta=\alpha \beta^*\).
3.3.3 Exponential smoothing: trend/slope
3.3.4 ETS(M,A,N)
Holt’s linear method with multiplicative errors.
- Assume \(\varepsilon_t=\frac{y_t-(\ell_{t-1}+b_{t-1})}{(\ell_{t-1}+b_{t-1})}\)
Following a similar approach as above, the innovations state space model underlying Holt’s linear method with multiplicative errors is specified as
\[y_t=(\ell_{t-1}+b_{t-1})(1+\varepsilon_t)\] \[\ell_t=(\ell_{t-1}+b_{t-1})(1+\alpha \varepsilon_t)\] \[b_t=b_{t-1}+\beta(\ell_{t-1}+b_{t-1}) \varepsilon_t\]
where again \(\beta=\alpha \beta^*\) and \(\varepsilon_t \sim \text{NID}(0,\sigma^2)\).
3.3.5 ETS(A,A,N): Specifying the model
By default, optimal values for \(\beta\) and \(b_0\) are used.
\(\beta\) can be chosen manually in trend()
.
3.3.6 Example: Australian population
aus_economy <- global_economy %>% filter(Code == "AUS") %>%
mutate(Pop = Population/1e6)
fit <- aus_economy %>%
model(AAN = ETS(Pop ~ error("A") + trend("A") + season("N")))
report(fit)
## Series: Pop
## Model: ETS(A,A,N)
## Smoothing parameters:
## alpha = 0.9999
## beta = 0.3266
##
## Initial states:
## l b
## 10.05 0.2225
##
## sigma^2: 0.0041
##
## AIC AICc BIC
## -76.99 -75.83 -66.68
## # A dable: 59 x 8 [1Y]
## # Key: Country, .model [1]
## # ETS(A,A,N) Decomposition: Pop = lag(level, 1) +
## # lag(slope, 1) + remainder
## Country .model Year Pop level slope remainder .fitted
## <fct> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Austral… AAN 1959 NA 10.1 0.222 NA NA
## 2 Austral… AAN 1960 10.3 10.3 0.222 -0.000145 10.3
## 3 Austral… AAN 1961 10.5 10.5 0.217 -0.0159 10.5
## 4 Austral… AAN 1962 10.7 10.7 0.231 0.0418 10.7
## 5 Austral… AAN 1963 11.0 11.0 0.223 -0.0229 11.0
## 6 Austral… AAN 1964 11.2 11.2 0.221 -0.00641 11.2
## 7 Austral… AAN 1965 11.4 11.4 0.221 -0.000314 11.4
## 8 Austral… AAN 1966 11.7 11.7 0.235 0.0418 11.6
## 9 Austral… AAN 1967 11.8 11.8 0.206 -0.0869 11.9
## 10 Austral… AAN 1968 12.0 12.0 0.208 0.00350 12.0
## # … with 49 more rows
3.3.7 Damped trend method
Component form
\[\hat{y}_{t+h|t} = \ell_{t} + (\phi+\phi^2 + \dots + \phi^{h})b_{t}\] \[\ell_{t} = \alpha y_{t} + (1 - \alpha)(\ell_{t-1} + \phi b_{t-1})\] \[b_{t} = \beta^*(\ell_{t} - \ell_{t-1}) + (1 -\beta^*)\phi b_{t-1}.\]
- Damping parameter \(0<\phi<1\).
- If \(\phi=1\), identical to Holt’s linear trend.
- As \(h\rightarrow\infty\), \(\hat{y}_{T+h|T}\rightarrow \ell_T+\phi b_T/(1-\phi)\).
- Short-run forecasts trended, long-run forecasts constant.
3.3.8 Example: Australian population
- Write down the model for ETS(A,\(A_d\),N)
aus_economy %>%
model(holt = ETS(Pop ~ error("A") + trend("Ad") + season("N"))) %>%
forecast(h = 20) %>%
autoplot(aus_economy)
fit <- aus_economy %>%
filter(Year <= 2010) %>%
model(
ses = ETS(Pop ~ error("A") + trend("N") + season("N")),
holt = ETS(Pop ~ error("A") + trend("A") + season("N")),
damped = ETS(Pop ~ error("A") + trend("Ad") + season("N"))
)
| term | SES | Linear trend | Damped trend |
|---|---|---|---|
| alpha | 1.00 | 1.00 | 1.00 |
| beta^* | 0.30 | 0.40 | |
| phi | 0.98 | ||
| l_0 | 10.28 | 10.05 | 10.04 |
| b_0 | 0.22 | 0.25 | |
| Training RMSE | 0.24 | 0.06 | 0.07 |
| Test RMSE | 1.63 | 0.15 | 0.21 |
| Test MASE | 6.18 | 0.55 | 0.75 |
| Test MAPE | 6.09 | 0.55 | 0.74 |
| Test MAE | 1.45 | 0.13 | 0.18 |
3.4 Models with seasonality
3.4.1 Holt-Winters additive method
Holt and Winters extended Holt’s method to capture seasonality.
Component form
\[\hat{y}_{t+h|t} = \ell_{t} + hb _{t} + s_{t+h-m(k+1)}\] \[\ell_{t} = \alpha(y_{t} - s_{t-m}) + (1 - \alpha)(\ell_{t-1} + b_{t-1})\] \[b_{t} = \beta^*(\ell_{t} - \ell_{t-1}) + (1 - \beta^*)b_{t-1}\] \[s_{t} = \gamma (y_{t}-\ell_{t-1}-b_{t-1}) + (1-\gamma)s_{t-m}\]
- \(k=\) integer part of \((h-1)/m\). Ensures estimates from the final year are used for forecasting.
- Parameters: \(0\le \alpha\le 1\), \(0\le \beta^*\le 1\), \(0\le \gamma\le 1-\alpha\) and \(m=\) period of seasonality (e.g. \(m=4\) for quarterly data).
Seasonal component is usually expressed as
\[s_{t} = \gamma^* (y_{t}-\ell_{t})+ (1-\gamma^*)s_{t-m}.\]Substitute in for \(\ell_t\):
\[s_{t} = \gamma^*(1-\alpha) (y_{t}-\ell_{t-1}-b_{t-1})+ [1-\gamma^*(1-\alpha)]s_{t-m}\]- We set \(\gamma=\gamma^*(1-\alpha)\).
The usual parameter restriction is \(0\le\gamma^*\le1\), which translates to \(0\le\gamma\le(1-\alpha)\).
3.4.2 ETS(A,A,A)
Holt-Winters additive method with additive errors.
- Forecast equation} \(\hat{y}_{t+h|t} = \ell_{t} + hb_{t} + s_{t+h-m(k+1)}\)
- Observation equation} \(y_t=\ell_{t-1}+b_{t-1}+s_{t-m} + \varepsilon_t\)
State equations} \[\ell_t=\ell_{t-1}+b_{t-1}+\alpha \varepsilon_t\] \[b_t=b_{t-1}+\beta \varepsilon_t\] \[s_t = s_{t-m} + \gamma\varepsilon_t\]
- Forecast errors: \(\varepsilon_{t} = y_t - \hat{y}_{t|t-1}\)
\(k\) is integer part of \((h-1)/m\)
Activity
- Write down the model for ETS(A,N,A)
3.4.3 Holt-Winters multiplicative method
For when seasonal variations are changing proportional to the level of the series.
Component form
\[\hat{y}{t+h}{t} = (\ell_{t} + hb_{t})s_{t+h-m(k+1)}\] \[\ell_{t} = \alpha \frac{y_{t}}{s_{t-m}} + (1 - \alpha)(\ell_{t-1} + b_{t-1})\] b_{t} &= \[\beta^*(\ell_{t}-\ell_{t-1}) + (1 - \beta^*)b_{t-1}\] \[s_{t} = \gamma \frac{y_{t}}{(\ell_{t-1} + b_{t-1})} + (1 - \gamma)s_{t-m}\]
- \(k\) is integer part of \((h-1)/m\).
- With additive method \(s_t\) is in absolute terms:within each year \(\sum_i s_i \approx 0\).
- With multiplicative method \(s_t\) is in relative terms:within each year \(\sum_i s_i \approx m\).
3.4.4 ETS(M,A,M)
Holt-Winters multiplicative method with multiplicative errors.
- Forecast equation \(\hat{y}_{t+h|t} = (\ell_{t} + hb_{t}) s_{t+h-m(k+1)}\)
- Observation equation \(y_t= (\ell_{t-1}+b_{t-1})s_{t-m}(1 + \varepsilon_t)\)
State equations \[\ell_t=(\ell_{t-1}+b_{t-1})(1+\alpha \varepsilon_t)\] \[b_t=b_{t-1} +\beta(\ell_{t-1}+b_{t-1}) \varepsilon_t\] \[s_t = s_{t-m}(1 + \gamma\varepsilon_t)\]
- Forecast errors: \(\varepsilon_{t} = (y_t - \hat{y}_{t|t-1})/\hat{y}_{t|t-1}\)
\(k\) is integer part of \((h-1)/m\).
3.4.5 Example: Australian holiday tourism
aus_holidays <- tourism %>%
filter(Purpose == "Holiday") %>%
summarise(Trips = sum(Trips))
fit <- aus_holidays %>%
model(
additive = ETS(Trips ~ error("A") + trend("A") + season("A")),
multiplicative = ETS(Trips ~ error("M") + trend("A") + season("M"))
)
fc <- fit %>% forecast()
Estimated components
## # A dable: 168 x 7 [1Q]
## # Key: .model [2]
## # ETS(A,A,A) & ETS(M,A,M) Decomposition: Trips = lag(level,
## # 1) + lag(slope, 1) + lag(season, 4) + remainder
## .model Quarter Trips level slope season remainder
## <chr> <qtr> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 additive 1997 Q1 NA NA NA 1512. NA
## 2 additive 1997 Q2 NA NA NA -290. NA
## 3 additive 1997 Q3 NA NA NA -684. NA
## 4 additive 1997 Q4 NA 9899. -37.4 -538. NA
## 5 additive 1998 Q1 11806. 9964. -24.5 1512. 433.
## 6 additive 1998 Q2 9276. 9851. -35.6 -290. -374.
## 7 additive 1998 Q3 8642. 9700. -50.2 -684. -489.
## 8 additive 1998 Q4 9300. 9694. -44.6 -538. 188.
## 9 additive 1999 Q1 11172. 9652. -44.3 1512. 10.7
## 10 additive 1999 Q2 9608. 9676. -35.6 -290. 290.
## # … with 158 more rows
3.4.6 Holt-Winters damped method
Often the single most accurate forecasting method for seasonal data:
\[\hat{y}_{t+h|t} = [\ell_{t} + (\phi+\phi^2 + \dots + \phi^{h})b_{t}]s_{t+h-m(k+1)}\] \[\ell_{t} = \alpha(y_{t} / s_{t-m}) + (1 - \alpha)(\ell_{t-1} + \phi b_{t-1})\] \[b_{t} = \beta^*(\ell_{t} - \ell_{t-1}) + (1 - \beta^*)\phi b_{t-1}\] \[s_{t} = \gamma \frac{y_{t}}{(\ell_{t-1} + \phi b_{t-1})} + (1 - \gamma)s_{t-m}\]
3.5 Innovations state space models
3.5.1 Exponential smoothing methods
- \((N,N)\): Simple exponential smoothing
- \((A,N)\): Holt’s linear method
- \((A_d,N)\): Additive damped trend method
- \((A,A)\): Additive Holt-Winters’ method
- \((A,M)\): Multiplicative Holt-Winters’ method
- \((A_d,M)\): Damped multiplicative Holt-Winters’ method
There are also multiplicative trend methods (not recommended).
3.5.2 ETS models
Additive Error
Multiplicative Error
3.5.3 Additive error models
3.5.4 Multiplicative error models
3.5.5 Estimating ETS models
- Smoothing parameters \(\alpha\), \(\beta\), \(\gamma\) and \(\phi\), and the initial states \(\ell_0\), \(b_0\), \(s_0,s_{-1},\dots,s_{-m+1}\) are estimated by maximising the “likelihood” = the probability of the data arising from the specified model.
- For models with additive errors equivalent to minimising SSE.
- For models with multiplicative errors, not equivalent to minimising SSE.
3.5.6 Innovations state space models
Let \(\mathbf{x}_t = (\ell_t, b_t, s_t, s_{t-1}, \dots, s_{t-m+1})\) and \(\varepsilon_t\stackrel{\mbox{\scriptsize iid}}{\sim} \mbox{N}(0,\sigma^2)\).
Additive errors
\[k(x)=1. \qquad y_t = \mu_{t} + \varepsilon_t.\]
Multiplicative errors
\[k(\mathbf{x}_{t-1}) = \mu_{t}.\qquad y_t = \mu_{t}(1 + \varepsilon_t).\] \[\varepsilon_t = (y_t - \mu_t)/\mu_t \text{ is relative error}.\]
3.5.7 Innovations state space models
Estimation
\[L^*(\mathbf\theta,\mathbf{x}_0) = T\log\!\bigg(\sum_{t=1}^T \varepsilon^2_t\!\bigg) + 2\sum_{t=1}^T \log|k(\mathbf{x}_{t-1})|\] \[= -2\log(\text{Likelihood}) + \mbox{constant}\]
- Estimate parameters \(\mathbf\theta = (\alpha,\beta,\gamma,\phi)\) and initial states \(\mathbf{x}_0 = (\ell_0,b_0,s_0,s_{-1},\dots,s_{-m+1})\) by minimizing \(L^*\).
3.5.8 Parameter restrictions
<IP_ADDRESS> Usual region
- Traditional restrictions in the methods \(0< \alpha,\beta^*,\gamma^*,\phi<1\)(equations interpreted as weighted averages).
- In models we set \(\beta=\alpha\beta^*\) and \(\gamma=(1-\alpha)\gamma^*\).
- Therefore \(0< \alpha <1\), \(0 < \beta < \alpha\) and \(0< \gamma < 1-\alpha\).
- \(0.8<\phi<0.98\) — to prevent numerical difficulties.
<IP_ADDRESS> Admissible region
- To prevent observations in the distant past having a continuing effect on current forecasts.
- Usually (but not always) less restrictive than thetraditional region.
- For example for ETS(A,N,N): \(0< \alpha <1\) — is \(0< \alpha <2\).
3.5.9 Model selection
Akaike’s Information Criterion
\[\text{AIC} = -2\log(\text{L}) + 2k\]
where \(L\) is the likelihood and \(k\) is the number of parameters initial states estimated in the model.
Corrected AIC
\[\text{AIC}_{\text{c}} = \text{AIC} + \frac{2(k+1)(k+2)}{T-k}\] which is the AIC corrected (for small sample bias).
Bayesian Information Criterion
\[\text{BIC} = \text{AIC} + k(\log(T)-2).\]
3.5.10 AIC and cross-validation
Minimizing the AIC assuming Gaussian residuals is asymptotically equivalent to minimizing one-step time series cross validation MSE.
3.5.11 Automatic forecasting
From Hyndman et al. (IJF, 2002):
- Apply each model that is appropriate to the data. Optimize parameters and initial values using MLE (or some other criterion).
- Select best method using AICc:
- Produce forecasts using best method.
- Obtain forecast intervals using underlying state space model.
Method performed very well in M3 competition.
3.5.12 Example: National populations
## # A mable: 263 x 2
## # Key: Country [263]
## Country ets
## <fct> <model>
## 1 Afghanistan <ETS(A,A,N)>
## 2 Albania <ETS(M,A,N)>
## 3 Algeria <ETS(M,A,N)>
## 4 American Samoa <ETS(M,A,N)>
## 5 Andorra <ETS(M,A,N)>
## 6 Angola <ETS(M,A,N)>
## 7 Antigua and Barbuda <ETS(M,A,N)>
## 8 Arab World <ETS(M,A,N)>
## 9 Argentina <ETS(A,A,N)>
## 10 Armenia <ETS(M,A,N)>
## # … with 253 more rows
## # A fable: 1,315 x 5 [1Y]
## # Key: Country, .model [263]
## Country .model Year Pop .mean
## <fct> <chr> <dbl> <dist> <dbl>
## 1 Afghanistan ets 2018 N(36, 0.012) 36.4
## 2 Afghanistan ets 2019 N(37, 0.059) 37.3
## 3 Afghanistan ets 2020 N(38, 0.16) 38.2
## 4 Afghanistan ets 2021 N(39, 0.35) 39.0
## 5 Afghanistan ets 2022 N(40, 0.64) 39.9
## 6 Albania ets 2018 N(2.9, 0.00012) 2.87
## 7 Albania ets 2019 N(2.9, 6e-04) 2.87
## 8 Albania ets 2020 N(2.9, 0.0017) 2.87
## 9 Albania ets 2021 N(2.9, 0.0036) 2.86
## 10 Albania ets 2022 N(2.9, 0.0066) 2.86
## # … with 1,305 more rows
3.5.13 Example: Australian holiday tourism
holidays <- tourism %>%
filter(Purpose == "Holiday")
fit <- holidays %>% model(ets = ETS(Trips))
fit
## # A mable: 76 x 4
## # Key: Region, State, Purpose [76]
## Region State Purpose ets
## <chr> <chr> <chr> <model>
## 1 Adelaide South Austral… Holiday <ETS(A,N,A)>
## 2 Adelaide Hills South Austral… Holiday <ETS(A,A,N)>
## 3 Alice Springs Northern Terr… Holiday <ETS(M,N,A)>
## 4 Australia's Coral Co… Western Austr… Holiday <ETS(M,N,A)>
## 5 Australia's Golden O… Western Austr… Holiday <ETS(M,N,M)>
## 6 Australia's North We… Western Austr… Holiday <ETS(A,N,A)>
## 7 Australia's South We… Western Austr… Holiday <ETS(M,N,M)>
## 8 Ballarat Victoria Holiday <ETS(M,N,A)>
## 9 Barkly Northern Terr… Holiday <ETS(A,N,A)>
## 10 Barossa South Austral… Holiday <ETS(A,N,N)>
## # … with 66 more rows
## Series: Trips
## Model: ETS(M,N,A)
## Smoothing parameters:
## alpha = 0.1571
## gamma = 0.0001001
##
## Initial states:
## l s1 s2 s3 s4
## 141.7 -60.96 130.9 -42.24 -27.66
##
## sigma^2: 0.0388
##
## AIC AICc BIC
## 852.0 853.6 868.7
## # A dable: 84 x 9 [1Q]
## # Key: Region, State, Purpose, .model
## # [1]
## # ETS(M,N,A) Decomposition: Trips = (lag(level, 1) +
## # lag(season, 4)) * (1 + remainder)
## Region State Purpose .model Quarter Trips level season
## <chr> <chr> <chr> <chr> <qtr> <dbl> <dbl> <dbl>
## 1 Snowy… New … Holiday ets 1997 Q1 NA NA -27.7
## 2 Snowy… New … Holiday ets 1997 Q2 NA NA -42.2
## 3 Snowy… New … Holiday ets 1997 Q3 NA NA 131.
## 4 Snowy… New … Holiday ets 1997 Q4 NA 142. -61.0
## 5 Snowy… New … Holiday ets 1998 Q1 101. 140. -27.7
## 6 Snowy… New … Holiday ets 1998 Q2 112. 142. -42.2
## 7 Snowy… New … Holiday ets 1998 Q3 310. 148. 131.
## 8 Snowy… New … Holiday ets 1998 Q4 89.8 148. -61.0
## 9 Snowy… New … Holiday ets 1999 Q1 112. 147. -27.7
## 10 Snowy… New … Holiday ets 1999 Q2 103. 147. -42.2
## # … with 74 more rows, and 1 more variable: remainder <dbl>
## # A fable: 608 x 7 [1Q]
## # Key: Region, State, Purpose, .model [76]
## Region State Purpose .model Quarter Trips .mean
## <chr> <chr> <chr> <chr> <qtr> <dist> <dbl>
## 1 Adelaide South … Holiday ets 2018 Q1 N(210, 457) 210.
## 2 Adelaide South … Holiday ets 2018 Q2 N(173, 473) 173.
## 3 Adelaide South … Holiday ets 2018 Q3 N(169, 489) 169.
## 4 Adelaide South … Holiday ets 2018 Q4 N(186, 505) 186.
## 5 Adelaide South … Holiday ets 2019 Q1 N(210, 521) 210.
## 6 Adelaide South … Holiday ets 2019 Q2 N(173, 537) 173.
## 7 Adelaide South … Holiday ets 2019 Q3 N(169, 553) 169.
## 8 Adelaide South … Holiday ets 2019 Q4 N(186, 569) 186.
## 9 Adelaid… South … Holiday ets 2018 Q1 N(19, 36) 19.4
## 10 Adelaid… South … Holiday ets 2018 Q2 N(20, 36) 19.6
## # … with 598 more rows
3.5.14 Some unstable models
- Some of the combinations of (Error, Trend, Seasonal) can lead to numerical difficulties; see equations with division by a state.
- These are: ETS(A,N,M), ETS(A,A,M), ETS(A,\(A_d\),M).
- Models with multiplicative errors are useful for strictly positive data, but are not numerically stable with data containing zeros or negative values. In that case only the six fully additive models will be applied.
3.5.15 Exponential smoothing models
Additive Error
Multiplicative Error
3.5.16 Residuals
Response residuals
\[\hat{e}_t = y_t - \hat{y}_{t|t-1}\]
Innovation residuals
Additive error model: \[\hat\varepsilon_t = y_t - \hat{y}_{t|t-1}\]
Multiplicative error model: \[\hat\varepsilon_t = \frac{y_t - \hat{y}_{t|t-1}}{\hat{y}_{t|t-1}}\]
3.5.17 Example: Australian holiday tourism
aus_holidays <- tourism %>%
filter(Purpose == "Holiday") %>%
summarise(Trips = sum(Trips))
fit <- aus_holidays %>%
model(ets = ETS(Trips)) %>%
report()
## Series: Trips
## Model: ETS(M,N,M)
## Smoothing parameters:
## alpha = 0.3578
## gamma = 0.0009686
##
## Initial states:
## l s1 s2 s3 s4
## 9667 0.943 0.9268 0.9684 1.162
##
## sigma^2: 0.0022
##
## AIC AICc BIC
## 1331 1333 1348
3.6 Forecasting with exponential smoothing
3.6.1 Forecasting with ETS models
Point forecasts: iterate the equations for \(t=T+1,T+2,\dots,T+h\) and set all \(\varepsilon_t=0\) for \(t>T\).
- Not the same as \(\text{E}(y_{t+h} | \mathbf{x}_t)\) unless trend and seasonality are both additive.
- Point forecasts for ETS(A,,) are identical to ETS(M,,) if the parameters are the same.
3.6.2 Example: ETS(A,A,N)
\[y_{T+1} = \ell_T + b_T + \varepsilon_{T+1}\] \[\hat{y}_{T+1|T} = \ell_{T}+b_{T}\] \[y_{T+2} = \ell_{T+1} + b_{T+1} + \varepsilon_{T+2}\] \[= (\ell_T + b_T + \alpha\varepsilon_{T+1}) + (b_T + \beta \varepsilon_{T+1}) + \varepsilon_{T+2}\] \[\hat{y}_{T+2|T} = \ell_{T}+2b_{T}\] etc.
3.6.3 Example: ETS(M,A,N)
\[y_{T+1} = (\ell_T + b_T )(1+ \varepsilon_{T+1})\] \[\hat{y}_{T+1|T} = \ell_{T}+b_{T}.\] \[y_{T+2} = (\ell_{T+1} + b_{T+1})(1 + \varepsilon_{T+2})\] \[= \left\{ (\ell_T + b_T) (1+ \alpha\varepsilon_{T+1}) + \left[b_T + \beta (\ell_T + b_T)\varepsilon_{T+1}\right] \right\} (1 + \varepsilon_{T+2})\] \[\hat{y}_{T+2|T} = \ell_{T}+2b_{T}\] etc.
3.6.4 Forecasting with ETS models
Prediction intervals: can only generated using the models.
- The prediction intervals will differ between models with additive and multiplicative errors.
- Exact formulae for some models.
- More general to simulate future sample paths, conditional on the last estimate of the states, and to obtain prediction intervals from the percentiles of these simulated future paths.
3.6.5 Prediction intervals
PI for most ETS models: \(\hat{y}_{T+h|T} \pm c \sigma_h\), where \(c\) depends on coverage probability and \(\sigma_h\) is forecast standard deviation.
3.6.6 Example: Corticosteroid drug sales
## Series: Cost
## Model: ETS(M,Ad,M)
## Smoothing parameters:
## alpha = 0.3071
## beta = 0.0001007
## gamma = 0.0001007
## phi = 0.9775
##
## Initial states:
## l b s1 s2 s3 s4 s5 s6 s7
##<PHONE_NUMBER> 0.8717 0.826 0.7563 0.7733 0.6872 1.284 1.325
## s8 s9 s10 s11 s12
## 1.18 1.164 1.105 1.048 0.9806
##
## sigma^2: 0.0046
##
## AIC AICc BIC
## 5515 5519 5575
## Series: Cost
## Model: ETS(A,A,A)
## Smoothing parameters:
## alpha = 0.1702
## beta = 0.006311
## gamma = 0.4546
##
## Initial states:
## l b s1 s2 s3 s4 s5 s6
##<PHONE_NUMBER> -99075 -136602 -191496 -174531 -241437 210644
## s7 s8 s9 s10 s11 s12
##<PHONE_NUMBER>68<PHONE_NUMBER>8 39132 -11674
##
## sigma^2: 3.499e+09
##
## AIC AICc BIC
## 5585 5589 5642
h02 %>%
model(
auto = ETS(Cost),
AAA = ETS(Cost ~ error("A") + trend("A") + season("A"))
) %>%
accuracy()
| Model | ME | MAE | RMSE | MAPE | MASE |
|---|---|---|---|---|---|
| auto | 2461 | 38649 | 51102 | 4.989 | 0.6376 |
| AAA | -5780 | 43378 | 56784 | 6.048 | 0.7156 |
3.7 ARIMA vs ETS
Myth that ARIMA models are more general than exponential smoothing.
Linear exponential smoothing models all special cases of ARIMA models.
Non-linear exponential smoothing models have no equivalent ARIMA counterparts.
Many ARIMA models have no exponential smoothing counterparts.
ETS models all non-stationary. Models with seasonality or non-damped trend (or both) have two unit roots; all other models have one unit
3.7.1 Equivalences
| ETS model | ARIMA model | Parameters |
|---|---|---|
| ETS(A,N,N) | ARIMA(0,1,1) | \(\theta_1 = \alpha-1\) |
| ETS(A,A,N) | ARIMA(0,2,2) | \(\theta_1 = \alpha+\beta-2\) |
| \(\theta_2 = 1-\alpha\) | ||
| ETS(A,\(A_d\),N) | ARIMA(1,1,2) | \(\phi_1=\phi\) |
| \(\theta_1 = \alpha+\phi\beta-1-\phi\) | ||
| \(\theta_2 = (1-\alpha)\phi\) | ||
| ETS(A,N,A) | ARIMA(0,0,\(m\))(0,1,0)\(_m\) | |
| ETS(A,A,A) | ARIMA(0,1,\(m+1\))(0,1,0)\(_m\) | |
| ETS(A,\(A_d\),A) | ARIMA(1,0,\(m+1\))(0,1,0)\(_m\) |
3.8 References:
- Hyndman, R. J., & Athanasopoulos, G. (2018). Forecasting: principles and practice. OTexts.


You can use the fabToolbar with a trigger and regular toolbar.
You may use the md-open
attribute to programmatically control whether or not the
control is open, and you may set the direction that the toolbar appears using the
md-direction
attribute. This component currently supports the left
and right
options.


BrazMedChem 2016
Registration
Scientific program
About event
Organization
More information
Gallery
BrazMedChem
BrazMedChem 2016: A brief history
The Brazilian Symposium on Medicinal Chemistry (BrazMedChem) is a scientific event of international abrangency.
Registrations
Registration form, Registration Fee...
About event
Call for Papers, Important dates...
Confirmed Speakers
Sir Simon Campbell, Independent...
Organization
Organizing committee, Managing committee, Scientific Committee
Scientific program
Preliminary program, Lectures, Confirmed Speakers, Thematic, sessions, Coordinated sessions, Short Courses, Posters


Hello There!
Voice to Code Templating
Converting Languages
Compete and Practice
Rewards
So Many Languages
Convert a programming language's code to another accurately within seconds.
Choose desired language:
C++
Python
Swift
PHP
//Your Code:
#Converted Code:
Convert On Site
(Or)
Upload Local Code File


Posted by rick on April 11, 2020
Posted by Xichen Pan on March 27, 2020
Posted by rick on March 25, 2020
Posted by rick on March 24, 2020
Posted by rick on March 18, 2020
Posted by rick on February 23, 2020
heyhope we can find the bigger world


chaotic_neural: Associative clustering and analysis of papers on the ArXiv¶
This package aims at providing a model to find related papers on ArXiv given another paper (or a set of keywords).
It aims to be different from existing resources like the default ArXiv search, the new ADS, or ArXivsorter in that it uses Doc2Vec, an unsupervised algorithm that trains a shallow neural network to transform every document (in this case ArXiv abstracts) into a vector in a high-dimensional vector space. Similar papers are then found by finding the closest vectors to one of interest in this space. This also allows for performing vector arithmetic operations on keywords (i.e. adding and subtracting keywords) as well as vectors corresponding to entire documents to structure specific queries.
Users can either build their own model (by searching ArXiv with specific queries) or use the pre-trained model that has been trained on all the astro-ph.GA papers up to Thursday, Oct 24, 2019.
- Basic usage of the
chaotic_neutral
package - Visualizing a trained model
- Loading the trained model:
- Generating vectors corresponding to each document in the corpus:
- Using UMAP, we can now generate an embedding of the 50-dim vector space in two dimensions:
- Let’s create a more dynamic version of the plot.
- Check different areas of the plot by quantities like publishing year, number of authors, and primary category. We expect no large correlations for any of these quantities, and this serves more as a sanity check.
- An now, we can start searching for specific phrases:
- Finally, let’s check to see if the same phenomenon (in this case, a tight observed correlation between the stellar masses and star formation rates of galaxies) called by different names are found in the same part of the UMAP embedding:
- Checking different simulations
- And different telescopes
- Generate plots corresponding to where recent (mid-2020+) research on a given topic / related to a given paper has appeared on ArXiv.
- Building a custom model
The code is designed to be intuitive to use, and and consists of three steps to get you started:
loading a pre-trained model
performing searches
training a new model
More detailed descriptions of these modules can be found in the tutorials. If you are interested in going off the beaten track and trying different things, please let me know so that I can help you run the code as you’d like!
Contribute¶
Issue Tracker: https://github.com/kartheikiyer/chaotic_neural/issues
Source Code: https://github.com/kartheikiyer/chaotic_neural
Support¶
If you are having issues, please let me know at<EMAIL_ADDRESS>License & Attribution¶
Copyright 2019 Kartheik Iyer and contributors.
chaotic_neural is being developed by Kartheik Iyer in a public GitHub repository. The source code is made available under the terms of the MIT license.
If you make use of this code, please cite the repository or the upcoming paper (Iyer et al. in prep.).


Welcome
We started Open Science Workshops in order to bring open source techniques to the science community. We want to show that it is possible to do open science now, and help everyone explore all the really excellent tools out there that aid the research process and promote openness.
Goal
Contribute to the betterment of the world by making it easier for people to do science; i.e. make it easy to replicate results, understand results, collaborate, and build upon existing work.
Check out the longer term goals if you want more detail.
Most recent event
Head over to the GitHub wiki Summary of the July 2014 Melbourne Open Science Workshop for details. You will find the previous agenda there.
The hashtag was #OpenScienceMelb.
Next event
Stay tuned by joining the mailing list below, or watching the GitHub repositories: osw-material and OpenScienceWorkshops.github.io.
Why should you attend?
You should attend because the open source world is freely providing many amazing tools that can directly help with the research process! In particular, they can help with the organisation of work, efficiency of collaboration, and general enjoyment of life! You will also get the opportunity to meet and interact with a bunch of open and interesting people with a shared passion for open science!
Event sponsors
We would like to thank the following organisations for sponsoring the July 2014 workshop, and helping keep it completely free!
Sign up to a newsletter
This newsletter will be used to advertise future events, and for no other purpose. You can also just subscribe to the blog below (but that may contain more announcements.)
Who is behind this?
Check out the about page for more information on this! The bottom line is - we all are! Let's all work together to get wider adoption of open source software and attitudes in the sciences and in society at large!


Join our community
30-day, hassle-free money back guarantee
Gain access to our full library of tutorials along with expert code reviews.
Perfect for any developers who are serious about honing their skills.
Monthly Subscription
$29
per month
Full access for less than $1 a day
Sign Up
Why Us
Tutorials by industry experts
Peer & expert code review
Coding exercises
Access to our GitHub repos
Community forum
Flashcard decks
New videos every week


{{Template:UiOslo_Norway/Head}} {{Template:UiOslo_Norway/Header}} {{Template:UiOslo_Norway/TopBar}}
Document the dates you worked on your project. This should be a detailed account of the work done each day for your project.
You can see what others teams have done to organize their notes:


nips nips2001 nips2001-85 nips2001-85-reference knowledge-graph by maker-knowledge-mining
Source: pdf
Author: Michiro Negishi, Stephen J. Hanson
Abstract: It has been known that people, after being exposed to sentences generated by an artificial grammar, acquire implicit grammatical knowledge and are able to transfer the knowledge to inputs that are generated by a modified grammar. We show that a second order recurrent neural network is able to transfer grammatical knowledge from one language (generated by a Finite State Machine) to another language which differ both in vocabularies and syntax. Representation of the grammatical knowledge in the network is analyzed using linear discriminant analysis. 1
[1] Brooks, L. R. , and Vokey, J . R. (1991) Abstract analogies and abstracted grammars: Comments on Reber (1989) and Mathews et al. (1090). Journal of Experimental Psychology: Gen eral, 120, 316-323.
[2] Dienes, Z. , Altmann, and G. , Gao , S-J. (1999) Mapping across domains without feedback: A neural network model of transfer of implicit knowledge, Cognitive Science 23, 53-82.
[3] Elman, J. L. (1991) Distributed representation , simple recurrent neural networks, and grammatical structure. Machine Learning, 7, 195-225.
[4] Giles, C. L. , Miller, C. B. , Chen, D. , Chen, H. H. , Sun, G. Z. , and Lee, Y. C. (1992) Learning and Extracting Finite State Automata with Second-Order Recurrent Neural Networks, it Neural Computation, 4 , 393-495.
[5] Hanson, S. J., Negishi, M., (2001) The emergence of explicit knowledge (symbols & rules) in (associationist) neural networks, Submitted.
[6] Reber, A. (1969) Transfer of syntactic structure in synthetic languages. Journal of Experimental Psychology, 81 , 115-119.
[7] Williams, R . J. and Zipser, D. (1989) A learning algorithm for continually running fully recurrent neural networks, Neural Computation, 1 (2) , 270.