Getting started with Yesod - haskell

I've been having a crack at using Yesod and I'm really struggling! I've read multiple tutorials and large amounts of the Yesod book but I'm still unable to get my head around how it works. Ideally I'm looking for a tutorial such as the one for Pyramid (a python web framework). It takes you through every step and explains everything very well.
Sadly I've not been able to find a similar style of tutorial for Yesod yet. If anybody knows of one I'd be delighted if you could furnish me with a link.
In the meantime I've some a more specific query.
I've created a site using the scaffold as suggested in the tutorials. If I want to add new Handlers, Models and Templates, do I need to add individual files into each of the relevant folders each time or can I organise them into their own sub-folders somehow? When I use Pyramid I'm able to put each module in its own folder.

Michael Snoyman has written an excellent book which covers every major aspect of web development with Yesod. For more specific tutorials, try taking a look at FP Complete which has extensive material on Yesod. I found this tutorial in particular to be very useful. (Both of these assume a reasonably advanced knowledge of Haskell itself. If this is something you lack, I strongly recommend reading "Learn You a Haskell for Great Good!")
As for adding handler to the scaffolded site, there is actually a builtin command for just that purpose. Running yesod add-handler will ask you for all of the necessary information for creating a skeleton handler (handler name, path, POST or GET, etc.) and will create/modify all of the necessary files for you. Then you just have to add the logic itself to "Handler/MyHandler.hs".

Related

How do I create transferable dll's for a specific website functionality?

VS2013 update 5, MVC5 using Areas
I have a stand-alone function programmed for a website. The functionality is a specific user interface to collect survey responses in a particular way. It has several controllers, a model and a group of views. The functionality is completely contained in an Area of the project, except for the Shared _Layout file that provides the main menu for consistency.
'Is it possible for me to' / 'how do I' compile this Area into a single or set of .dll file(s) that I could then add conveniently to other websites? I'm assuming creating something for transfer/download is very standard functionality. For example, I used Elmah.MVC for this site. What I want to do is pretty much create a package that can be downloaded in a similar way to how we integrate Elmah.MVC into a site. (Be certain I'm not talking about creating error logging software, I'm only using Elmah.MVC as an example of software that is easily integrated into other website applications.)
I've never compiled any website functionality into a .dll(s) for use elsewhere and would appreciate either some specific guidance, or perhaps what would be easier is to provide a link with a good step by step tutorial or explanation for how to do this. Most of what I've found on the web describes bits and pieces of doing this, but it's not enough for me to feel confident with it.
It seems to me there are a lot of 'moving parts' to taking a particular piece of an MVC application and turning it into something that is easily added to other projects.
A particular issue I don't quite grasp is the difference in downloaded packages between getting code and getting just the .dll(s). For instance, when I download an MVC5 site, I get controllers, models and views, but when I download Elmah I get a .dll and no code files. Also, I do understand the concept of transforms, but I'm just struggling right now with even getting from my programmed application into a 'package' regardless of the transforms that make it easy to integrate into another website.
These are just some of my questions I have about how to perform this particular process in developing deliverable and/or shareable software.
What you are looking to do is create a portable MVC Area project. A Portable Area is a set of reusable multi page functionality can be dropped into an application to provide rich functionality without having to custom build functionality that is literally the same in every application. An MVC Portable Area is really just a dll that contains the views, controllers, scripts, etc… needed to use in a website that is either a Web Forms website or an MVC website. A developer can use them for a reusable widget or a complete engine. I have actually used them for both. Here is a link with some basic info to get started. http://elegantcode.com/2012/04/06/mvc-portable-areas/

Extracting a Module from Orchard

I am having a little problem in my workplace where we have a IIS 6 server where Orchard (1.7) will not run. We are planning an upgrade but that's going to take some time.
Since we are using this site on IIS6 only to run one particular custom module we wrote for Orchard (basically a MVC module with its own Controllers/Actions etc.) I was thinking that a temporary solution could be to rip that module out of Orchard and run it independently.
Of course this extraction needs to take into account how many ties I have with the framework. I was wondering if there is some kind of guide to perform this and if there is something I need to take specially into account.
I am using the Users in Orchard so I would probably have to rewrite some users code. I am also using the Authorizer, which again may mean I need to re-wire something else.
It seems like a daunting job so I am looking for some quick tips on how to proceed if you know any.
Thanks a lot!
It all depends on what components you actually use within your module.
Hard to write any tutorial on this, really.
Regarding Orchard.Users - you could drop all related code usages and rely on the default ASP.NET roles-based authentication/authorization model.
If dependency injection is what you want to keep, then you need to integrate it yourself (for Autofac, but other DI containers will also work). Feel free to copy and change any Orchard components that you use, stripping the unneeded code.
In my opinion the hardest thing to strip out and replace would be any code that relies on content items - hope you don't have it. Rewriting this pieces sounds like an overkill. But if you just use IRepository, going for plain NHibernate or EF instead should be quite easy.

Yesod sample projects

I am planning to write a yesod web application. And I'm wondering whether there are some large project using yesod that is well designed that I could look at and experiment with.
I am looking for open source projects. I can learn from.
I've been developing a web application that focuses on media sharing mainly inside home network, and acted as a excercise for me.
This was the first project for me using Yesod, and in fact the first larger project written in Haskell, but maybe there is something to learn from it.
There's stuff like reused widgets, custom sql queries (could probably use esquelato nowadays), hashdb authentication/access control and plugin-like sections-thingy for handling different types of files in share.
Disclaimer: This is my personal project developed purely for my needs, and I have not had the time to upgrade the code base for Yesod 1.2 nor do I consider it stable or well-designed.
The source code: https://github.com/SimSaladin/rnfssp
An in-production demo can be found at https://ssdesk.paivola.fi
As an update for this answer there is now a page of these on the Yesod wiki, including the source for my own site.

2 people working on 1 HTML file simultaneously

My freind and I want to setup a collaborative project where we both work on a HTML file (and do PHP) at the same time (bit like Google Docs share feature). I want to be able to work with him to teach him certain things in PHP and HTML while I also code at the same time. Any suggestions? I have a VPS I thought we could use for it so nothings really going to get in our way. Maybe something like GIT or something?
Sounds like what you need is a real-time collaborative text editor. Here's an extensive list from wikipedia.
I use Google Docs personally but Microsoft has added this type of functionality into Office and there are a slew of desktop and online tools on that link. I had looked into Etherpad before but i don't remember enough to suggest one or the other. All of the links are on the wikipedia article so I won't repeat here.

No-code or little-code website

What is a (free) technology which requires the least amount of code for creating a website with the following requirements:
Sign-up/login
Form for adding your personal info. which gets databased
Each person can view and edit their own info
Admin can view and edit any
The form needs to be easily customizable and extensible (by the website's owner, not during run-time)
Is there a beginner tutorial for such a thing?
(For me, this question is about a friend who wants me to do this, but I want him to do it himself so I don't have to get roped into maintenance. I also want to keep it more general for the sake of Stack Overflow and future readers.)
Edit: I thought I remembered some ASP.NET tutorials that were mostly drag/drop or things where it was all but made for you from the database schema (which can be made with SSMS's GUI) but I can't seem to find them now.
Responding to posts below requesting specifics: this site will be for potential clients to sign-up and enter their company's info and fill out a form about their advertising needs.
I thought about putting this on SU instead, but since there was likely going to be some coding involved (I assumed no-code was an unreachable goal) SO seemed more appropriate.
Your friend can consider a framework like drupal. It has a bit of a learning code but, you can create a website with everything you ask for without code. You may want to modify it to change the look but there are themes for that.
Also, some hosts like godaddy.com have this installed and you do not have to worry about the complex installation procedures. Just start modifying the content of the site, select a built in template and go...
PhpBB? I think you need to specify what the website is going to be used for before you can get better/more specific answers.
... have a look at Drupal or Joomla, expect a learning curve nevertheless.
Is this friend a programmer as well? If so, I'd suggest building such a site using a PHP framework. Deploying an existing forum/wiki is also an option of course, but will probably have much more features than you describe. But if s/he's not a programmer, I don't see how s/he will be able to develop a site like that in a reasonable amount of time.
Why not using a CMS like wordpress, drupal and co. ?

Resources