Is there a cloud infrastructure where I can deploy Perl applications? - perl

Is there a online/cloud-ish app engine with an available Perl option?
I'd like to write and deploy a personal web app that's hosted by some existing web App engine (the app's fairly simple and resource-cheap, but does need small online storage. If anyone cares, it's basically a family-scope shopping list to be used off of smartphones and PC web browsers).
I'd rather not host it on my home PC's Apache, due to concerns about downtime (my broadband connection is less than stable).
The main candidate my investigations uncovered so far was Google App Engine.
My understanding is that Google App Engine only has Python or Java APIs. Catch is, I'm a Perl guy, with zero exposure to Python.
And if so, is that specific engine inferior enough to Google's engine that it would be worth it for me to learn Python just so I can use Google's? (I don't mind learning Python in theory but I am somewhat stressed for time so I'd rather not embark on that particular project for now - I just want to get the app done and use it).

There was an attempt at one point to get Perl running on the Google App Engine (GAE). However if I recall the nature of the GAE made these attempts difficult, and the group behind the push lost momentum.
Perl applications can (and are) easily hosted on AWS EC (Amazon), Linode (a Virtual Private Server (VPS) provider) and several other solutions. Linode specifically has a VPS solution for $20/month that can host a full Catalyst web stack and comes with, as of this writing, 16GB of storage.

For reference: Perl AppEngine - Project to get Perl on the Google AppEngine.
However like perigrin has already mentioned the project as stalled. Though note its stalled and restarted twice now so don't rule out another revival!
I believe GAE as had its growing pains and was just too much of a slippery moving target for the Perl AppEngine developers. With the inclusion of Java on the GAE it is/was hoped that things would settle down a bit.
Remember Google have promised that "other" languages would be introduced to GAE. So Perl and even Parrot VM may well get on there in the future.
Additional references:
Perl on AppEngine - Brad Fitzpatrick
GAE add feature list
PAE mailing list
/I3az/

Your best bet is to just get a basic web hosting account for $5 a month. As a random example, see Geekisp (This is the ISP I use for such things and have had great service.)
This give you most of the benefit of a cloud solution (ie someone else is doing most of your administration work, leaving you free to just handle the content.)
Learning both the Google App Engine API and Python is probably not worth it for an app that will never need to scale, which is the other main benefit of being "in the cloud".

Another option may be Phenona. It's in beta now but looks very promising.

dotCloud will host perl for you.
However, the cheapest plan (32MB of RAM) is $4.32/month

Related

Usage tips in Bluemix

Getting Started with Bluemix, what were your first applications using the platform? They could advise me? And forgive anything for the question.
Thank you for attention.
I think it depends on what is your programming experience and your personal preference. If you want to begin programming with the classic Object-Oriented paradigm you should try Liberty runtime. Instead if you like the scripting languages maybe you could give a try to Python, Ruby or Go runtimes. All of them provide a sample application that you can extend as you want, and have very detailed documentation. I suggest you to take a look at IBM Containers, they are very interesting and powerful, and they make you able to do potentially anything with the platform.
If you come from the on-premise world, please notice that Bluemix is built on Cloud Foundry, and there are two important considerations to think about:
Local file system storage is short-lived. When an application instance crashes or stops, the resources assigned to that instance are reclaimed by the platform including any local disk changes made since the app started. When the instance is restarted, the application will start with a new disk image. Although your application can write local files while it is running, the files will disappear after the application restarts.
Instances of the same application do not share a local file system. Each application instance runs in its own isolated container. Thus if your application needs the data in the files to persist across application restarts, or the data needs to be shared across all running instances of the application, the local file system should not be used.
For this reason local file system should not be used.
Personally since I had some experience in JEE + WAS my first application was a Web app developed on Liberty Runtime.
I suggest you to become familiar with IBM Bluemix DevOps Services, that allows you to develop, build and deploy working on a web IDE.
So the various runtimes and services within bluemix provide 2 types of samples to help you get started. Boilerplate, which are samples you can extend to develop new applications and there is a "deploy to bluemix" button on other samples which can be used to automatically get the sample installed and ready to try. What you start with is usually something like this to see it working and then go from there.
This question already has been answered in a way. But I think what you are looking for are the types of applications you can develop using Bluemix.
To directly answer your question - the first application I developed used the Concept Insights Watson service to extract insights from some news articles and create a concept based news search. I also experimented with Language Translation service where-in I converted the contents of a web page from English to Spanish.
If you look through the documentation pages for the various Watson services, you would come across various use cases where a particular service is applicable.
On a more general note I can see that Bluemix would help us to write some really smart applications in an easy way. The Watson Services provide a real simple interface to all application developers by taking away the highly complex tasks of machine learning and AI algorithms which would need a good level of expertise if done on our own.
Additionally, Bluemix is just like any other PaaS for e.g AWS or Google Compute Engine or Azure. Bluemix does provide relational databases, queues, time series database containers etc as a part of the platform. These would need to be used by the application that you are developing to cater to use cases of inter-process communication, data storage etc.
Hopefully this answer provides you some insight on what applications you can write with the Bluemix concept insight services
Our local applications run on WAS ND. When we moved to trying Liberty on BlueMix(as application, not service), typical problems were mostly around 12 Factors.
Config && Dev/Prod parity --> Earlier our configurations were in files inside application or configured in WAS. With Liberty, we were forced to externalize that and it was easy to setup environment variables in BlueMix.
Process --> As state-fullness was no longer an option, we had to change our application to store session outside, in relational as well as document DB.
Logs --> Logs are not available in local logs files as earlier.
Ephemeral instances --> As mentioned by Umberto

What is the best way to setup a development & production environment for a PHP/MySQL app?

I've been developing a web app locally on my local MAMP computer for the last few months. Now I am ready to launch it while continuing to add enhancements/fixes. So, I am wondering what is a good way to implement a development AND production server in order to efficiently manage updates, prevent overwrites, and seamlessly add other developers into the workflow. I also want something that has a minimal learning curve for me. Personally, for whatever reason, I've never been able to fully grasp version control systems like Git or SVN so I am hoping for an easier solution until I am able to invest more info the business.
As I see it, the options that I have are:
Spend more time learning Git before launching. And hoping that I don't break anything while further developing my app.
Buy two hosting accounts. One for Dev and one for Prod, where only I can do the deployments into Prod. I suppose I'd have to keep track of all files we've modified in a spreadsheet that are deemed ready for deployment.
Editing right on the FTP (no Dev server).
Are there any other options that you can recommend? I've heard that there are some new types of Web Hosting companies that can do the heavy lifting...
While personally, I have had good experiences using svn/git for multi-developer websites, I can understand your reticence to start relying on something you are not entirely familiar with. Unfortunately, I do believe that is your best option, but failing that, you might try using subdomains. My former employer would create test area on the disk and point beta.thedomainname.com at it. When bug fixes or upgrades were complete and verified to be working in the beta directory, the entire directory would be copied over to the live domain. Not the most elegant solution, but it worked. It certainly is cheaper than buying two hosting accounts.

Playframework 2 in the cloud

I started with python on google app engine 3 months ago.
Then I switched to Play2! on Heroku + mongodb and it is a breeze to work with.
I am really far in my project and I want to release the website in the next couple of days. But I just saw the pricing for SSL on heroku, which is really high.
And I don't want to launch my website without SSL. SSL on heroku costs $20/month without the certificate.
I saw some alternatives in this post What cloud platform supports playframework 2.x deployments?
But I am still not too happy. I want to pay as little as possible to start my website.
So at the moment I am looking on Google App Engine again. This would mean that I have to rewrite my whole DB.
Does GAE restrict some features of play2?
I also saw dotcloud but their pricing page is really confusing. I don't know how far I can go with the sandbox mode, and there is a mark on SSL so I think its somehow included but there is also an SSL addon which doubles the price.
I am okay if my website will cost me more then I will get out of it for a few months, but with the ssl on heroku is just too much.
What would you recommend me?
Edit:
Currently I am looking at openshift which looks kinda interesting. They implemented SSL for free to all users, but I am still not sure if I can use this with my custom domain.
Edit2:
Okay it is only shared ssl. Which means I would have to get "Megashift" which costs $42/month
Edit3:
It seems that I can only deploy war files to GAE, which destroys the purpose of play2.
So I would have to choose between heroku, dotcloud and openshift. And all of them are expensive if you want to use SSL.
I would advice you to give openshift a try
It's free, red hat has stated that it will keep a free offering (it's not just during the beta...)
Here's a screencast:
http://playlatam.wordpress.com/2012/05/21/deploying-play-framework-2-apps-with-java-and-scala-to-openshift/
a github repo
https://github.com/opensas/play2-openshift-quickstart
and an article at red hat
https://openshift.redhat.com/community/blogs/supporting-play-framework-on-openshift-with-the-diy-application-type
I doubt that GAE will work properly with Play. The blacklisting of some classes will impact your project with several limitations that you won't have in another environment, and you have the issue of deploying war files (there are plugins for that in Play 2, but still).
Look at it from another point of view:
if your project is a personal "for fun" project with no other aim than trying something, you probably don't need SSL. Even if you really need (or want) SSL, 20$/month is not so much for a hobby, people pay close to that in games like WoW (subscription + extras) each month.
if your project is serious (startup, aiming to get money) you should stop worrying about expenses like 20$. They are investments to get the cash coming. If as a business you are willing to rewrite your code to save just 20$, you are doomed to fail.
I can recommend you Jelastic.
Besides it offers Jelastic SSL and Custom SSL as well at a reasonable price.
Some hosting Providers allow SSL for free for their customers and the price actually varies depending on the Hosting Provider you choose. So you have alternative here.
Jelastic has recently provided a tutorial on how to deploy Play 2 web framework application to the cloud. So you can freely use it as a basis.

Software Deployment in a Virtual Environment

I'm looking for a way to give out preview or demo versions of our software to our customers as easy as possible.
The software we are currently developing is a pretty big project. It consists of a client environment, an application server, various databases, web services host etc.
The project is developed incrementally and we want to ship the bits in intervals of one to two months. The first deliveries will not be used in production. They have the puropse of a demo to encourage the customers to give feedback.
We don't want to put burden on the customers to install and configure the system. All in all we are looking for a way to ease the deployment, installation and configuration pain.
What I thought of was to use a virtualizing technique to preinstall and preconfigure a virtual machine with all components that are neccessary. Our customers just have to mount the virtual image and run the application.
I would like to hear from folks who use this technique. I suppose there are some difficulties as well. Especially, what about licensing issues with the installed OS?
Perhaps it is possible to have the virtual machine expire after a certain period of time.
Any experiences out there?
Since you're looking at an entire application stack, you'll need to virtualize the entire server to provide your customers with a realistic demo experience. Thinstall is great for single apps, but not an entire stack....
Microsoft have licensing schemes for this type of situation, since it's only been used for demonstration purposes and not production use a TechNet subscription might just cover you. Give your local Microsoft licensing centre a call to discuss, unlike the offshore support teams they're really helpful and friendly.
For running the 'stack' with the least overhead for your clients, I suggest using VMware. The customers can download the free VMware player, load up the machines (or multiple machines) and get a feel for the system... Microsoft Virtual PC or Virtual Server is going to be a bit more intrusive and not quite the "plug n play" solution that you're looking for.
If you're only looking to ship the application, consider either thinstall or providing Citrix / Terminal services access - customers can remotely login to your own (test) machines and run what they need.
Personally if it's doable, a standalone system would be best - tell your customers install vmware player, then run this app... which launches the various parts of your application stack (maybe off of a DVD) and you've got a fully self contained demo for the marketing guys to pimp out :)
You should take a look at thinstall(It has been bought by vmware and is called thinapp now), its an application virtualizer.
It seems that you're trying to accomplish several competing goals:
"Give" the customer something.
Simplify and ease the customer experience.
Ensure the various components coexist and interact happily.
Accommodate licensing restrictions, both yours and the OS vendor's.
Allow incremental and piecewise upgrades.
Can you achieve all of these by hosting the back end (database, web server, etc.) and providing your customers with a CD (or download) that contains the client? This will give them the "download/upgrade experience" that goes along with client software, without dealing with the complexity of administering the back end.
For a near plug-and-play experience, you might consider placing your demo on a live linux or Windows CD. Note: you need a licensed copy of Windows for the latter.
Perhaps your "serious" customers might be able to request their own demo copies of the back end as well; they'd be more amenable to the additional work on their part.
As far as OS licenses, if your vendor(s) of choice aren't helpful, you might consider free or open-source alternatives such as FreeDOS or linux.
Depending on if you can fit all the needed services into a single OS instance or not...
Vmware Ace or whatever they're calling it nowadays will let you deliver single virtual machines under strict control, with forced updates, expiration and whatnot. But it sounds easier to just set up a demo environment and allow remote access to it.
The issue here I guess is getting several virtual machines to communicate under unknown circumstances - if one is not enough?
An idea then is to ship a physical server preconfigured with virtualisation and whatever amount of virtual servers needed to demonstrate the system.
Using trial versions of the operating system might be good enough for the licensing dilemma - atleast Windows Server is testable for 60 days, extendable to 240 when registering.
Thinstall is great for single apps, but not an entire stack....
I didn't try it yet, but with the new version of thinstall you are able to let different thinstalled application communicate.
But I guess you're right a vm-ware image would be easier

Is automatic upgrades a realistic feature to expect from enterprise Web applications?

Most of the work I do is with what could be considered enterprise Web applications. These projects have large budgets, longer timelines (from 3-12 months), and heavy customizations. Because as developers we have been touting the idea of the Web as the next desktop OS, customers are coming to expect the software running on this "new OS" to react the same as on the desktop. That includes easy to manage automatic upgrades. In other words, "An update is available. Do you want to upgrade?" Is this even a realistic expectation? Can anyone speak from experience on trying to implement this feature?
At my company we have enterprise installations ranging into the thousands of seats. If we implemented an auto-upgrade, our customers would mutiny!
Large installations have peculiar issues that don't apply to small ones. For example, with 2000 users (not all of whom are, let us say, the most sophisticated of tool users), tool-training is a big deal: training time, internal demos, internal process documents, etc.. They cannot unleash a new feature or UI change without a chance to understand how it fits in their process and therefore what their internal best practices are and how to communicate that to their users.
Also when applications fail, it's the internal IT team who are responsible. Therefore, they want time to install a new version in a test area, beat it up, and deploy on a Saturday only when they're good and ready.
I can see the value in making minor patches more easy to install, particularly when the patch is just for a bug-fix and not for anything that would require retraining, and if the admins still get final say over when it's installed. But even then, I don't believe anyone has ever asked for this! Whether because they don't want it or they are trained to not expect it, it doesn't seem worth it.
Well, it really depends on your business model but for a lot of applications the SaaS model can end up biting you. It's great for a lot of things but for some larger applications the users are not investing as significant amount up front and could possibly move to something else before you've made any money.
See
http://news.zdnet.com/2424-9595_22-218408.html
and here
http://www.25hoursaday.com/weblog/2008/07/21/SoftwareAsAServiceWhenYourBusinessModelBecomesAParadox.aspx
for more information
One of the primary reasons to implement an application as a web application is that you get automatic upgrades for free. Why would users be getting prompted for upgrades on a web app?
For Windows applications, the "update is available, do you want to upgrade?" functionality is provided by Microsoft using ClickOnce, which I have used in an enterprise environment successfully -- there are a few gotchas but for the most part it is a good way to manage automatic deployment and upgrade of Windows apps.
For mobile apps, you can also implement auto-upgrades, although it is a little trickier.
In any case, to answer your question in a broad sense, I don't know if it is expected that all enterprise apps should make upgrading easy, but it certainly is worth the money from an IT support standpoint to architect them to allow for easy upgrading.
If you're providing a hosted solution, I wouldn't bother. Let the upgrade happen silently (perhaps with a notice that you did it). If you're selling an application that's hosted on their servers, let the upgrade decision be made by a single owner, not every user of the app.