How to ensure seamless usability on the front-end when deploying an SPA? The 2019 Stack Overflow Developer Survey Results Are InIs it possible to have `publicPath` configured dynamically in the browser with webpack?How to load chunk files made by Webpack during runtime?Vue-cil distributed app deploy error on digital ocean - TypeError: t is not a functionVue Webpack Build Breaks Bulma CSSAngular4 micro front-endshow to include a vuejs app build with npm and webpack in an existing website with a simple 'a' tag?Can webpack-dev-server watch for changes and write on filesystem for iisexpress?Hide or obfuscate real path name of webpack chunk filesHandle missing dynamic chunks after new deployment with WebpackApplying changes for vue application executed by GO
Are there any other methods to apply to solving simultaneous equations?
What is the meaning of Triage in Cybersec world?
How to deal with fear of taking dependencies
Is an up-to-date browser secure on an out-of-date OS?
For what reasons would an animal species NOT cross a *horizontal* land bridge?
Did Scotland spend $250,000 for the slogan "Welcome to Scotland"?
What is the closest word meaning "respect for time / mindful"
Why didn't the Event Horizon Telescope team mention Sagittarius A*?
Protecting Dualbooting Windows from dangerous code (like rm -rf)
Feature engineering suggestion required
Pokemon Turn Based battle (Python)
Is "plugging out" electronic devices an American expression?
Can we generate random numbers using irrational numbers like π and e?
How to save as into a customized destination on macOS?
Why isn't the circumferential light around the M87 black hole's event horizon symmetric?
Can someone be penalized for an "unlawful" act if no penalty is specified?
What do the Banks children have against barley water?
Is bread bad for ducks?
Reference request: Oldest number theory books with (unsolved) exercises?
Have you ever entered Singapore using a different passport or name?
Falsification in Math vs Science
Which Sci-Fi work first showed weapon of galactic-scale mass destruction?
Delete all lines which don't have n characters before delimiter
Can one be advised by a professor who is very far away?
How to ensure seamless usability on the front-end when deploying an SPA?
The 2019 Stack Overflow Developer Survey Results Are InIs it possible to have `publicPath` configured dynamically in the browser with webpack?How to load chunk files made by Webpack during runtime?Vue-cil distributed app deploy error on digital ocean - TypeError: t is not a functionVue Webpack Build Breaks Bulma CSSAngular4 micro front-endshow to include a vuejs app build with npm and webpack in an existing website with a simple 'a' tag?Can webpack-dev-server watch for changes and write on filesystem for iisexpress?Hide or obfuscate real path name of webpack chunk filesHandle missing dynamic chunks after new deployment with WebpackApplying changes for vue application executed by GO
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty height:90px;width:728px;box-sizing:border-box;
I expect this applies to any web framework using webpack that builds assets / chunks, in my case it's Vue.
My workflow is:
- Develop a feature
- Build (npm run build)
- Deploy (eb deploy)
- Back to 1.
Building removes all previous chunks as adds new ones i.e.
my-module.1X3DF23.js
my-other-module.9DFdw232.js
If a user was on the front end at this same time without refreshing the page (SPA, so unlikely) and browses to a new view that depends on a chunk that's been wiped, they get a 404 for those missing old assets.
Until this point, I have been incrementing a version number along with any XHR requests from the server. If the app notices a change, it will reload itself. But if 404 errors are coming up from chunks, no XHR requests will be called anyway.
Initial thoughts:
- Have the web app ping the back-end with an interval of say 30 seconds, this would trigger the version refreshing automatically.
Any alternatives?
webpack continuous-integration continuous-deployment
add a comment |
I expect this applies to any web framework using webpack that builds assets / chunks, in my case it's Vue.
My workflow is:
- Develop a feature
- Build (npm run build)
- Deploy (eb deploy)
- Back to 1.
Building removes all previous chunks as adds new ones i.e.
my-module.1X3DF23.js
my-other-module.9DFdw232.js
If a user was on the front end at this same time without refreshing the page (SPA, so unlikely) and browses to a new view that depends on a chunk that's been wiped, they get a 404 for those missing old assets.
Until this point, I have been incrementing a version number along with any XHR requests from the server. If the app notices a change, it will reload itself. But if 404 errors are coming up from chunks, no XHR requests will be called anyway.
Initial thoughts:
- Have the web app ping the back-end with an interval of say 30 seconds, this would trigger the version refreshing automatically.
Any alternatives?
webpack continuous-integration continuous-deployment
add a comment |
I expect this applies to any web framework using webpack that builds assets / chunks, in my case it's Vue.
My workflow is:
- Develop a feature
- Build (npm run build)
- Deploy (eb deploy)
- Back to 1.
Building removes all previous chunks as adds new ones i.e.
my-module.1X3DF23.js
my-other-module.9DFdw232.js
If a user was on the front end at this same time without refreshing the page (SPA, so unlikely) and browses to a new view that depends on a chunk that's been wiped, they get a 404 for those missing old assets.
Until this point, I have been incrementing a version number along with any XHR requests from the server. If the app notices a change, it will reload itself. But if 404 errors are coming up from chunks, no XHR requests will be called anyway.
Initial thoughts:
- Have the web app ping the back-end with an interval of say 30 seconds, this would trigger the version refreshing automatically.
Any alternatives?
webpack continuous-integration continuous-deployment
I expect this applies to any web framework using webpack that builds assets / chunks, in my case it's Vue.
My workflow is:
- Develop a feature
- Build (npm run build)
- Deploy (eb deploy)
- Back to 1.
Building removes all previous chunks as adds new ones i.e.
my-module.1X3DF23.js
my-other-module.9DFdw232.js
If a user was on the front end at this same time without refreshing the page (SPA, so unlikely) and browses to a new view that depends on a chunk that's been wiped, they get a 404 for those missing old assets.
Until this point, I have been incrementing a version number along with any XHR requests from the server. If the app notices a change, it will reload itself. But if 404 errors are coming up from chunks, no XHR requests will be called anyway.
Initial thoughts:
- Have the web app ping the back-end with an interval of say 30 seconds, this would trigger the version refreshing automatically.
Any alternatives?
webpack continuous-integration continuous-deployment
webpack continuous-integration continuous-deployment
edited Mar 12 at 13:55
digout
asked Mar 7 at 16:28
digoutdigout
757820
757820
add a comment |
add a comment |
3 Answers
3
active
oldest
votes
I would go with not deleting previous chunks at all. I don't know how elasticbeanstalk works so I will show you my strategy with a good old ubuntu server.
Basically, you have those folders in your Vue application:
dist -> Contains the content of the built application with npm run build
node_modules
public
src
...
What I do is that I create a new folder named deploy
because one problem of the dist
folder is that npm run build
deletes the content of the dist
folder at the beginning of build.
Having the deploy
folder, you can keep all the data needed across time.
So when I build my project, I then copy the content of the dist folder into the deploy folder without deleting previous chunks.
In order to avoid the deploy
folder to interfere with git, I add it to the .gitignore
registry.
You can do this with a simple recursive paste using bash:
cp -R dist/* deploy/
This will replace your index.html
page into the deploy folder but will not overwrite your previous chunks.
Problem with this solution: Your deploy
folder might get huge because previous chunks would never be deleted.
Solution for this problem: Write a robust script that deletes chunks older than 1 day (or more) when deploying the application. You can base your script on the creation date of the file. If you are fluent with bash, go with it. I personally prefer to write this kind of script with node directly in a deploy.js
script at the root of my project..
1
Viable solution. I could setup up an .ebextensions script that could keep the latest 5 sets of chunks. Will wait a couple more days in case someone else chimes in but you're a strong contender for the 50 coins o' gold.
– digout
Mar 13 at 9:10
add a comment |
I would suggest you doing the following
Consider a static URL resource that you serve as follows
abc.com/v1/module.123.js
I would suggest you to keep the
v1
Part as same inbetween your build updates.
Webpack will generate a new file name as follows
build1: module.123.js
build2: module.234.js
whenever the content of module.js changes inbetween your builds.
During your build updates make sure you are not removing your
v1
folder in your server. Rather doing a complete replacement you can merge the old folder and new folder. By doing this you will be having both
module.123.js
module.234.js
in your v1 folder in the server. By doing this you will avoid the http 404 error in the SPA.
You can notify the user of a build update through another process, and asking him to refresh the browser to get the changes. This notification of changes to the user can be done using a Server Sent Event
You can change the V1 folder every 6 months or so to V2 or something else that suits your needs to clean up unused files.
add a comment |
If your application is a 100% static application, you can use AWS S3 bucket. To update you application you just need to update your repo.
aws s3 sync --delete /source /destiny
We have been doing this and the update is seamless as you expect.
Not sure you understand the requirement. It's about dealing with a view that a user might have loaded which references chunks that get overwritten on deploy. If they haven't reloaded their page, old routes to chunks will be queried and 404 will be returned.
– digout
Mar 19 at 10:01
Not quite... If you have configured your chunks to have the hash in their names, the browser will not pull the new files unless this hash code has been changed/updated. If you use cloudFront they also have their internal cache in which you can use in your favour.
– Cleriston
Mar 20 at 3:41
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55048591%2fhow-to-ensure-seamless-usability-on-the-front-end-when-deploying-an-spa%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
I would go with not deleting previous chunks at all. I don't know how elasticbeanstalk works so I will show you my strategy with a good old ubuntu server.
Basically, you have those folders in your Vue application:
dist -> Contains the content of the built application with npm run build
node_modules
public
src
...
What I do is that I create a new folder named deploy
because one problem of the dist
folder is that npm run build
deletes the content of the dist
folder at the beginning of build.
Having the deploy
folder, you can keep all the data needed across time.
So when I build my project, I then copy the content of the dist folder into the deploy folder without deleting previous chunks.
In order to avoid the deploy
folder to interfere with git, I add it to the .gitignore
registry.
You can do this with a simple recursive paste using bash:
cp -R dist/* deploy/
This will replace your index.html
page into the deploy folder but will not overwrite your previous chunks.
Problem with this solution: Your deploy
folder might get huge because previous chunks would never be deleted.
Solution for this problem: Write a robust script that deletes chunks older than 1 day (or more) when deploying the application. You can base your script on the creation date of the file. If you are fluent with bash, go with it. I personally prefer to write this kind of script with node directly in a deploy.js
script at the root of my project..
1
Viable solution. I could setup up an .ebextensions script that could keep the latest 5 sets of chunks. Will wait a couple more days in case someone else chimes in but you're a strong contender for the 50 coins o' gold.
– digout
Mar 13 at 9:10
add a comment |
I would go with not deleting previous chunks at all. I don't know how elasticbeanstalk works so I will show you my strategy with a good old ubuntu server.
Basically, you have those folders in your Vue application:
dist -> Contains the content of the built application with npm run build
node_modules
public
src
...
What I do is that I create a new folder named deploy
because one problem of the dist
folder is that npm run build
deletes the content of the dist
folder at the beginning of build.
Having the deploy
folder, you can keep all the data needed across time.
So when I build my project, I then copy the content of the dist folder into the deploy folder without deleting previous chunks.
In order to avoid the deploy
folder to interfere with git, I add it to the .gitignore
registry.
You can do this with a simple recursive paste using bash:
cp -R dist/* deploy/
This will replace your index.html
page into the deploy folder but will not overwrite your previous chunks.
Problem with this solution: Your deploy
folder might get huge because previous chunks would never be deleted.
Solution for this problem: Write a robust script that deletes chunks older than 1 day (or more) when deploying the application. You can base your script on the creation date of the file. If you are fluent with bash, go with it. I personally prefer to write this kind of script with node directly in a deploy.js
script at the root of my project..
1
Viable solution. I could setup up an .ebextensions script that could keep the latest 5 sets of chunks. Will wait a couple more days in case someone else chimes in but you're a strong contender for the 50 coins o' gold.
– digout
Mar 13 at 9:10
add a comment |
I would go with not deleting previous chunks at all. I don't know how elasticbeanstalk works so I will show you my strategy with a good old ubuntu server.
Basically, you have those folders in your Vue application:
dist -> Contains the content of the built application with npm run build
node_modules
public
src
...
What I do is that I create a new folder named deploy
because one problem of the dist
folder is that npm run build
deletes the content of the dist
folder at the beginning of build.
Having the deploy
folder, you can keep all the data needed across time.
So when I build my project, I then copy the content of the dist folder into the deploy folder without deleting previous chunks.
In order to avoid the deploy
folder to interfere with git, I add it to the .gitignore
registry.
You can do this with a simple recursive paste using bash:
cp -R dist/* deploy/
This will replace your index.html
page into the deploy folder but will not overwrite your previous chunks.
Problem with this solution: Your deploy
folder might get huge because previous chunks would never be deleted.
Solution for this problem: Write a robust script that deletes chunks older than 1 day (or more) when deploying the application. You can base your script on the creation date of the file. If you are fluent with bash, go with it. I personally prefer to write this kind of script with node directly in a deploy.js
script at the root of my project..
I would go with not deleting previous chunks at all. I don't know how elasticbeanstalk works so I will show you my strategy with a good old ubuntu server.
Basically, you have those folders in your Vue application:
dist -> Contains the content of the built application with npm run build
node_modules
public
src
...
What I do is that I create a new folder named deploy
because one problem of the dist
folder is that npm run build
deletes the content of the dist
folder at the beginning of build.
Having the deploy
folder, you can keep all the data needed across time.
So when I build my project, I then copy the content of the dist folder into the deploy folder without deleting previous chunks.
In order to avoid the deploy
folder to interfere with git, I add it to the .gitignore
registry.
You can do this with a simple recursive paste using bash:
cp -R dist/* deploy/
This will replace your index.html
page into the deploy folder but will not overwrite your previous chunks.
Problem with this solution: Your deploy
folder might get huge because previous chunks would never be deleted.
Solution for this problem: Write a robust script that deletes chunks older than 1 day (or more) when deploying the application. You can base your script on the creation date of the file. If you are fluent with bash, go with it. I personally prefer to write this kind of script with node directly in a deploy.js
script at the root of my project..
answered Mar 12 at 11:11
HammerbotHammerbot
7,00532457
7,00532457
1
Viable solution. I could setup up an .ebextensions script that could keep the latest 5 sets of chunks. Will wait a couple more days in case someone else chimes in but you're a strong contender for the 50 coins o' gold.
– digout
Mar 13 at 9:10
add a comment |
1
Viable solution. I could setup up an .ebextensions script that could keep the latest 5 sets of chunks. Will wait a couple more days in case someone else chimes in but you're a strong contender for the 50 coins o' gold.
– digout
Mar 13 at 9:10
1
1
Viable solution. I could setup up an .ebextensions script that could keep the latest 5 sets of chunks. Will wait a couple more days in case someone else chimes in but you're a strong contender for the 50 coins o' gold.
– digout
Mar 13 at 9:10
Viable solution. I could setup up an .ebextensions script that could keep the latest 5 sets of chunks. Will wait a couple more days in case someone else chimes in but you're a strong contender for the 50 coins o' gold.
– digout
Mar 13 at 9:10
add a comment |
I would suggest you doing the following
Consider a static URL resource that you serve as follows
abc.com/v1/module.123.js
I would suggest you to keep the
v1
Part as same inbetween your build updates.
Webpack will generate a new file name as follows
build1: module.123.js
build2: module.234.js
whenever the content of module.js changes inbetween your builds.
During your build updates make sure you are not removing your
v1
folder in your server. Rather doing a complete replacement you can merge the old folder and new folder. By doing this you will be having both
module.123.js
module.234.js
in your v1 folder in the server. By doing this you will avoid the http 404 error in the SPA.
You can notify the user of a build update through another process, and asking him to refresh the browser to get the changes. This notification of changes to the user can be done using a Server Sent Event
You can change the V1 folder every 6 months or so to V2 or something else that suits your needs to clean up unused files.
add a comment |
I would suggest you doing the following
Consider a static URL resource that you serve as follows
abc.com/v1/module.123.js
I would suggest you to keep the
v1
Part as same inbetween your build updates.
Webpack will generate a new file name as follows
build1: module.123.js
build2: module.234.js
whenever the content of module.js changes inbetween your builds.
During your build updates make sure you are not removing your
v1
folder in your server. Rather doing a complete replacement you can merge the old folder and new folder. By doing this you will be having both
module.123.js
module.234.js
in your v1 folder in the server. By doing this you will avoid the http 404 error in the SPA.
You can notify the user of a build update through another process, and asking him to refresh the browser to get the changes. This notification of changes to the user can be done using a Server Sent Event
You can change the V1 folder every 6 months or so to V2 or something else that suits your needs to clean up unused files.
add a comment |
I would suggest you doing the following
Consider a static URL resource that you serve as follows
abc.com/v1/module.123.js
I would suggest you to keep the
v1
Part as same inbetween your build updates.
Webpack will generate a new file name as follows
build1: module.123.js
build2: module.234.js
whenever the content of module.js changes inbetween your builds.
During your build updates make sure you are not removing your
v1
folder in your server. Rather doing a complete replacement you can merge the old folder and new folder. By doing this you will be having both
module.123.js
module.234.js
in your v1 folder in the server. By doing this you will avoid the http 404 error in the SPA.
You can notify the user of a build update through another process, and asking him to refresh the browser to get the changes. This notification of changes to the user can be done using a Server Sent Event
You can change the V1 folder every 6 months or so to V2 or something else that suits your needs to clean up unused files.
I would suggest you doing the following
Consider a static URL resource that you serve as follows
abc.com/v1/module.123.js
I would suggest you to keep the
v1
Part as same inbetween your build updates.
Webpack will generate a new file name as follows
build1: module.123.js
build2: module.234.js
whenever the content of module.js changes inbetween your builds.
During your build updates make sure you are not removing your
v1
folder in your server. Rather doing a complete replacement you can merge the old folder and new folder. By doing this you will be having both
module.123.js
module.234.js
in your v1 folder in the server. By doing this you will avoid the http 404 error in the SPA.
You can notify the user of a build update through another process, and asking him to refresh the browser to get the changes. This notification of changes to the user can be done using a Server Sent Event
You can change the V1 folder every 6 months or so to V2 or something else that suits your needs to clean up unused files.
answered Mar 18 at 14:15
John PeterJohn Peter
331110
331110
add a comment |
add a comment |
If your application is a 100% static application, you can use AWS S3 bucket. To update you application you just need to update your repo.
aws s3 sync --delete /source /destiny
We have been doing this and the update is seamless as you expect.
Not sure you understand the requirement. It's about dealing with a view that a user might have loaded which references chunks that get overwritten on deploy. If they haven't reloaded their page, old routes to chunks will be queried and 404 will be returned.
– digout
Mar 19 at 10:01
Not quite... If you have configured your chunks to have the hash in their names, the browser will not pull the new files unless this hash code has been changed/updated. If you use cloudFront they also have their internal cache in which you can use in your favour.
– Cleriston
Mar 20 at 3:41
add a comment |
If your application is a 100% static application, you can use AWS S3 bucket. To update you application you just need to update your repo.
aws s3 sync --delete /source /destiny
We have been doing this and the update is seamless as you expect.
Not sure you understand the requirement. It's about dealing with a view that a user might have loaded which references chunks that get overwritten on deploy. If they haven't reloaded their page, old routes to chunks will be queried and 404 will be returned.
– digout
Mar 19 at 10:01
Not quite... If you have configured your chunks to have the hash in their names, the browser will not pull the new files unless this hash code has been changed/updated. If you use cloudFront they also have their internal cache in which you can use in your favour.
– Cleriston
Mar 20 at 3:41
add a comment |
If your application is a 100% static application, you can use AWS S3 bucket. To update you application you just need to update your repo.
aws s3 sync --delete /source /destiny
We have been doing this and the update is seamless as you expect.
If your application is a 100% static application, you can use AWS S3 bucket. To update you application you just need to update your repo.
aws s3 sync --delete /source /destiny
We have been doing this and the update is seamless as you expect.
answered Mar 19 at 6:09
CleristonCleriston
382211
382211
Not sure you understand the requirement. It's about dealing with a view that a user might have loaded which references chunks that get overwritten on deploy. If they haven't reloaded their page, old routes to chunks will be queried and 404 will be returned.
– digout
Mar 19 at 10:01
Not quite... If you have configured your chunks to have the hash in their names, the browser will not pull the new files unless this hash code has been changed/updated. If you use cloudFront they also have their internal cache in which you can use in your favour.
– Cleriston
Mar 20 at 3:41
add a comment |
Not sure you understand the requirement. It's about dealing with a view that a user might have loaded which references chunks that get overwritten on deploy. If they haven't reloaded their page, old routes to chunks will be queried and 404 will be returned.
– digout
Mar 19 at 10:01
Not quite... If you have configured your chunks to have the hash in their names, the browser will not pull the new files unless this hash code has been changed/updated. If you use cloudFront they also have their internal cache in which you can use in your favour.
– Cleriston
Mar 20 at 3:41
Not sure you understand the requirement. It's about dealing with a view that a user might have loaded which references chunks that get overwritten on deploy. If they haven't reloaded their page, old routes to chunks will be queried and 404 will be returned.
– digout
Mar 19 at 10:01
Not sure you understand the requirement. It's about dealing with a view that a user might have loaded which references chunks that get overwritten on deploy. If they haven't reloaded their page, old routes to chunks will be queried and 404 will be returned.
– digout
Mar 19 at 10:01
Not quite... If you have configured your chunks to have the hash in their names, the browser will not pull the new files unless this hash code has been changed/updated. If you use cloudFront they also have their internal cache in which you can use in your favour.
– Cleriston
Mar 20 at 3:41
Not quite... If you have configured your chunks to have the hash in their names, the browser will not pull the new files unless this hash code has been changed/updated. If you use cloudFront they also have their internal cache in which you can use in your favour.
– Cleriston
Mar 20 at 3:41
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55048591%2fhow-to-ensure-seamless-usability-on-the-front-end-when-deploying-an-spa%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown