Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update recommended tools for back end challenges #9826

Closed
QuincyLarson opened this Issue Jul 21, 2016 · 25 comments

Comments

Projects
None yet
@QuincyLarson
Copy link
Contributor

QuincyLarson commented Jul 21, 2016

c9.io has been acquired by AWS and now requires the use of a credit card. Heroku also requires the use of a credit card for hosting - and also requires learning a bunch of Heroku-specific concepts - so it was never an optimal solution either.

Many people outside of the US (and many people under the age of 18) do not have credit cards, and are understandably intimidated about entering them into services where they could screw up and end up owing hundreds of dollars.

So let's step back and examine the underlying goals. We want campers to be able to:

  • build the back end projects
  • tie in databases and other services as necessary
  • host these projects somewhere permanently accessible

Essential tools for these projects

Development:

  • c9.io (free, requires credit card)
  • local development on machine
  • hyperdev.com (free)

Hosting:

  • Heroku (free, requires credit card)
  • hyperdev.com (free, no credit card)
  • AWS (free for 1 year, requires credit card - https://aws.amazon.com/free/)

Mongo databases:

  • MLAB (free 0.5 gb, no credit card)
  • Compose (free 30-day trail, requires credit card)

Cloud development

My thinking at this point is that we could recommend HyperDev for development and hosting, and MLAB for the database. This setup would be free, with no credit card required. As far as I can tell, HyperDev projects remain publicly accessible indefinitely, so these URLs could be submitted as the live demo links.

The main drawback with this is HyperDev is a limited environment (it's just Node, without Git, Linux, and many of the features of c9.io). But this limitation actually makes it much easier to use for beginners, in the same way that CodePen and JSBin abstract away file systems and web servers. HyperDev is essentially CodePen for Node.js development.

Local Development

I also recommend we finalize a good tool for Node/Express development. In the past we've explored Vagrant and Docker.

We could even create an image that we could load onto a bootable USB with Linux. This way, people who only have access to Windows machines (or public computers) could do their work right on a USB. They wouldn't need to download gigabytes of files.

We could put the images for these bootable drives on Bit Torrent and even distribute the USBs in bulk through mail to Campsites.

I'm looking forward to hearing your thoughts on this.

@ghost

This comment has been minimized.

Copy link

ghost commented Jul 21, 2016

The problem with the USB drives is that many campers wouldn't be able to figure out how to boot from them. I think the vagrant / docker option would work better as it will work on any operating system 2with a simple command.

Update: Accidently closed the issue (I'm on mobile 😞)

@ghost ghost closed this Jul 21, 2016

@ghost ghost reopened this Jul 21, 2016

@alayek

This comment has been minimized.

Copy link
Member

alayek commented Jul 21, 2016

With vagrant/docker, I am willing to go with docker; though docker is mainly for deployment and less for development. However, Docker is more lightweight.

But if we are adding feature to remove and modify stuff on the fly; we should do a cloud build. As @zcassini mentioned, Chef/Ansible handles all these better.

We initially did it with Shell script for it's lightweight. We can do it with Python too (I think we started on that), as long as we can bundle as .exe for Windows reliably on most common platforms - Win 7, Win 8.1, Win 10.

@mtancoigne

This comment has been minimized.

Copy link

mtancoigne commented Jul 21, 2016

We have two issues here:

  • How to host the FCC backend challenges for different languages, with sources accessible (or not, I don't know your point on this) to the user
  • How the user would be able to develop the challenges (I don't mean small exercises, but projects) by himself and share the result...

For the first point, the solution of the cloud development may be a good idea if we find a service with an easy access for maintenance (git/ssh at least, + language specific requirements)
For the second point, the local development is a solution if we write tuts for the user to set up a virtual machine on his/her computer. Vagrant is a good option as there are already a lot of websites that proposes distributions for coding in specific languages (puphpet, chef,...)

What I think is "getting started with backend has always been hard, even if there is more servers and tools around". Configuring servers is part of the backend development, in my opinion, so the only way would be to write tuts to get them ready. It's painful, but it's in the FCC disclaimer :)

For small exercises, I proposed earlier a solution with compiled js from languages sources, that can be tested against the Repl.it API. the proof of concept worked, except for languages that needed "project mode" (multiple files, not supported by the API at this time. Maybe it evolved now). That solution is integrable in the FCC website easily, as it's only JS.

Edit
@alayek stated

With vagrant/docker, I am willing to go with docker; though docker is mainly for deployment and less for development. But if we are adding feature to remove and modify stuff on the fly; we should do a cloud build.

My answer is : We don't need to create our own tool to manage boxes. We should use existing propositions.

@alayek

This comment has been minimized.

Copy link
Member

alayek commented Jul 21, 2016

If one develops locally and needs feedback from peers on how the app is behaving; one could also use ngrok to provide a URL to the running app. Thanks @terakilobyte for this suggestion.

@mtancoigne

This comment has been minimized.

Copy link

mtancoigne commented Jul 21, 2016

@alayek: And code on github with the vm config files, so it's easy for everyone to test and help.

@zcassini

This comment has been minimized.

Copy link

zcassini commented Jul 21, 2016

Heroku lets you have 5 sites without giving them a credit card. Redhat's Openshift.com will give you 3 free sites without a credit card. So that should cover hosting no matter the projects language. Unfortunately it is two more things for students to deal with.
My heroku acccount is years old though so maybe new ones don't get 5 free sites?

http://www.koding.com/ provides an online ide like cloud9 that can get students coding immediately and make pair programming an easy activity.

Docker is 64bits only. Who knows how many students that would rule out.

Cloud9 stated they should have a solution for educational organizations in a few weeks. So we might be right back to where we were.

@zcassini

This comment has been minimized.

Copy link

zcassini commented Jul 21, 2016

codenvy.com offers an online ide. it's similar to cloud9 but not as nice.

@byteknacker

This comment has been minimized.

Copy link

byteknacker commented Jul 21, 2016

I wish to just point out some comparisons between browser based env and local env.

I would propose to use local env setups since you can use that to generate cloud based env. But not so the other way around.

The project a couple of us did a few months back, zenias, could be extended to this purpose. We just need to code once and it can be cloned by FCC campers to initially setup dev, test, and deploy environments with an unified command line system. Later when they are more confident and have done some projects, we will introduce step by step guide on how to create their own envs and how it is done manually and why it is important to automate infrastructure.

I have my own fork which is working for a few languages, it is still in bash since it was so fast for me to write. zenias

For better maintenance we can write this tool in Python or Node, I don't mind which language. It can be compiled to Windows exe and pretty much any OS distribution. I learned how to use Salt to provision so I can contribute to that. The only domain of knowledge we need to learn is Docker now but we can just start with virtual box straight away. It is possible to spin up a AWS EC2 based development environment inside a Vagrant. By extension there are lots of other providers that Vagrant supports. I think heroku would also be possible. Not sure if that is natively supported.

@mtancoigne

This comment has been minimized.

Copy link

mtancoigne commented Jul 21, 2016

I won't speak of Zenias as it's irrelevant for this. It relies on Heroku and Github, and as @QuincyLarson stated, heroku requires credit card. So that's a no-no option for students.

I believe there is already a lot of tool online to propose great virtual machine solutions:

And I only searched for "puppet for -language-"... on Qwant.com... not on Google...

So we can redirect /our/ students to those solutions to code locally. Then, they'll have to learn git and commit to any repo they want (with the vm conf in their sources)....
because even if they host their work somewhere, one must be able to test the sources.

@QuincyLarson

This comment has been minimized.

Copy link
Contributor Author

QuincyLarson commented Jul 22, 2016

To be clear, Heroku may give you free apps, but in order to hook into any services (such as MLAB) you would need to enter a credit card. So in practice, Heroku requires a credit card.

@QuincyLarson

This comment has been minimized.

Copy link
Contributor Author

QuincyLarson commented Jul 22, 2016

@mtancoigne Servers aren't necessarily a part of back end. Back end development involves APIs and databases, and servers are more the realm of ops or devops. These can be taught in isolation. Our current back end curriculum recommends Heroku, which essentially abstracts away the notion of servers.

HyperDev would be even better. It can export directly to GitHub. So this means campers could focus on Node, Express and Mongo, and learn the intricacies of Git and Linux later.

I just exported my HyperDev project to GitHub - check it out: https://github.com/QuincyLarson/hyperdev-test

To be clear, I am not suggesting we skip Linux and Git - I am suggesting that we teach them separately from back end development.

@ghost

This comment has been minimized.

Copy link

ghost commented Jul 22, 2016

I think hyperdev is good for the API challenges but it doesn't have enough functionality for the Web app projects.

@QuincyLarson

This comment has been minimized.

Copy link
Contributor Author

QuincyLarson commented Jul 22, 2016

@atjonathan This is in theory possible. I've tweeted to see whether anyone wants to give it a try: https://twitter.com/ossia/status/756290723331190785

@ghost

This comment has been minimized.

Copy link

ghost commented Jul 22, 2016

@QuincyLarson cool 🎉

@zcassini

This comment has been minimized.

Copy link

zcassini commented Jul 23, 2016

@QuincyLarson can we have someone reachout to some of these hosting/ide companies.
They should be chomping at the bits to be the goto solution for FCC.
It'd be interesting to find out the conversion ratio Codepen gets from FCC students.

@Em-Ant

This comment has been minimized.

Copy link
Member

Em-Ant commented Jul 23, 2016

@QuincyLarson one of my full-stack projects (nightlife coordination) ported to hyperdev

https://jewel-back.hyperdev.space/
https://hyperdev.com/#!/project/jewel-back

I used react, but i had to manually pack all the components in a single file. Probably it's possible to bundle them automatically from separate files using webpack-dev-middleware, browserify-middleware or require.js, but I don't know exactly how to do it. Hope it helps, bye.

update:
I added webpack and a postinstall script to package.json. I was able to define components in different files and require them. Unfortunately the bundle.js generated from webpack seems to be destroyed after a while. So I restored the first version, with all react component and js helpers in a single file.

In this version https://hyperdev.com/#!/project/copper-jay I used express-babelify-middleware, which creates the transpiled bundle on the fly, allowing front-end require. It seems to work correctly.

update II:
I deleted the first version. The example project is https://hyperdev.com/#!/project/copper-jay

conclusions:
It's possible to host quite complex projects on hyperdev, but in my opinion it's not so easy to do it, especially for an absolute beginner. You should provide some kind of template/boilerplate.

@FatKoala

This comment has been minimized.

Copy link

FatKoala commented Aug 12, 2016

Hello campers...

Is there any news on this topic... hyperDev looks like great option for replacement... but is there any confirmation that we should use this and that this will be added to the course and videos... and assignments too??? I am bit confused now and don't know where to start with back end... some help???

@ghost

This comment has been minimized.

Copy link

ghost commented Aug 12, 2016

@FatKoala, I can confirm we will be using hyperdev for all our api challenges and dynamic web application challenges. We will be updating the getting started challenges with the new requirements etc. very soon.

@FatKoala

This comment has been minimized.

Copy link

FatKoala commented Aug 12, 2016

Thanks, this is helpful information :D i am exited to get started :D

@RuoChen95

This comment has been minimized.

Copy link

RuoChen95 commented Nov 9, 2016

thanks a lot XD

@josevill

This comment has been minimized.

Copy link
Contributor

josevill commented Nov 11, 2016

Any chance we could use http://codeanywhere.com in this matter? I haven't really tested anything javascript-related within their containers but you can run a wordpress installation without issues in there.
@QuincyLarson

@QuincyLarson

This comment has been minimized.

Copy link
Contributor Author

QuincyLarson commented Nov 12, 2016

@josevill they do require you to create an account, which HyperDev does not. They may be a good alternative to c9.io but I think HyperDev is far more accessible than c9.io so we will recommend that. We've already built a significant portion of our curriculum around it.

@Nezteb

This comment has been minimized.

Copy link

Nezteb commented Dec 14, 2016

I like HyperDev (now called Gomix, FYI).

Just to offer additional options, I've used a combination of CodePen and Firebase to create simple apps before. You need an account on CodePen and a Google account for Firebase. You can do this all without CodePen even. Just make sure you set up Firebase authentication so only signed up users can read/write, and you're good to go! @shiffman recently did a good tutorial on Firebase also.

@QuincyLarson

This comment has been minimized.

Copy link
Contributor Author

QuincyLarson commented Dec 14, 2016

@Nezteb awesome! I've heard of people doing pretty cool things with Firebase. It does definitely simplify the back end aspect of projects.

We have almost finished our new back end curriculum, which uses Gomix (formerly HyperDev). We will have a big announcement about this soon. I am going to go ahead close this issue for now.

@ulf1

This comment has been minimized.

Copy link

ulf1 commented Jan 7, 2017

CodeAnywhere.com might serve as Drop-in-replacement for c9.io

I tried to get how-to-npm running on several cloud services, and CodeAnywhere that
a) have an easy registration process,
b) is for free or free to try
c) have a web-based terminal/commandline to call how-to-npm

For example I tried Codenvy.io, gomix, heroku, Floobits.com and some other. Usually these services lack one feature and/or are to cubersome compared to C9.io and CodeAnywhere.com

https://forum.freecodecamp.com/t/cloud9-c9-io-alternatives-for-the-backend-challenges-what-is-your-experience-with-other-providers-clouds/73736

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.