Mar 30, 2009

View's in Lift

I think Lift framework is really interesting and fun thing to play with. Here is my ultra short guide how to try out the framework's Views.

Views are classes that returns content as scala.xml.NodeSeq. Lift maps a browser request to view class and its method. For example /TestView/showme would be mapped to TestView view- class and to showme method. The method name in the request is actually not an actual method in the class - it is a name that is dispatched to the dispatch method of the view class. The method returns a method to handle the request. To make it possible for Lift to find your view classes you sould store them to your.package.view package.

Lets create a simple view that shows simple response in XML. First we need to create the View class. It should be put into your [Package name].view package. Lets call the class TestView:


package your.package.view

import net.liftweb.http.LiftView
import scala.xml.NodeSeq

class TestView extends LiftView {
def dispatch = {
case "testPath" = > provideTestPath _
}

def provideTestPath(): NodeSeq = <html><body>Test</body></html>
}
So the class extends the trait LiftView. It defines the method dispatch that maps the requests with real class methods. In our case we only have testPath that matps to provideTestPath method. That method then returns the NodeSeq.

Next we need to tell Lift that we have this View available and allow it to display it. This happens by modifying our SiteMap. Go to your bootstrap.liftweb package and open the Boot class. Then go to the part where the SiteMap is defined. Assuming that you are playing with the skeleton created by the maven archetypes you should modify it to this:

...
// Build SiteMap
val viewEntry = Menu(Loc("testView",
("TestView" :: Nil) -> true,
"TestView",
Loc.Hidden))
val entries = Menu(Loc("Home", List("index"), "Home")) :: viewEntry :: User.sitemap
LiftRules.setSiteMap(SiteMap(entries:_*))
...

What we have done here? Created a new Menu entry called "TestView". With the part "TestView"::Nil we tell to Lift that map /TestView/* to this link. We have now allowed that /TestView/testPath maps to our TestView class and then to the method inside it. If you don't add the link into the SiteMap then Lift prevents anybody to access the link. It only shows 404 error. This is way to ensure that you as a developer can control what parts should be accessed.

Thats it. Now just point to your server /TestView/testPath and you will see the results!

Mar 25, 2009

Monster

Scala's type system is a pretty nasty monster to tame. It really tried to bite me yesterday but after some sweat and tears I was able to handle it. Today it was behaving really nicely and let me snap a picture of it.

Mar 21, 2009

Match Me Scala

Pattern matching is fun in Scala. It is nothing new - just check Erlang, Ocaml etc. - but it is again one of those features that makes me like the S-language.

def funnyFunc(lst:List[Int]):Unit = lst match {
case List() => print("Nil")
case lstHead::lstTail => {
println(lstHead+"::")
funnyFunc(lstTail)
}
}
Example is a simple function that takes a list and prints its structure. It has two rules for pattern matching: empty list (List()) and non empty part lstHead::lstTail. The nice part is that the matching already split the list into two parts: head and tail.

In Scala we can fine tune the pattern matching. Lets assume that we are close to the evil matching monster that eats code that prints number 5 (don't ask me why). We can avoid this by just adding a new rule:

def funnyFunc2(lst:List[Int]):Unit = lst match {
case List() => print("Nil")
case 5::lstTail => {
println("Don't Eat Me::")
funnyFunc2(lstTail)
}
case lstHead::lstTail => {
println(lstHead+"::")
funnyFunc2(lstTail)
}
}
Now
funnyFunc2(List(1,2,3,4,5,6,7)
would print: 1::2::3::4::Don't Eat Me::6::7::Nil

Mar 18, 2009

Crazy Meat Eating Rugby Rabbit!

What happens if you breed GWT and Google App Engine? Answer is naturally a crazy meat eating rugby rabbit! I think I need to explain this. I have been playing a bit with the Google app engine and GWT. Few evenings ago I decided that I could even try to do some really small application - just for fun. The result is not a rabbit but a small web app that can be used to plan SCRUM sprints.

Currently the app is very simple and still not that many lines of code. I will release something about it when I feel that it is ready for its first public appearing. Perhaps then I also tell more about the experience with both of those frameworks.

Naturally the rabbit wants to be there also!

Crazy Rugby Animal

Mar 12, 2009

Google App Engine

Creating a web app is nowadays easy. We have tons of good frameworks, good tools etc. and most of them are free. One thing that is also now emerging is that the infrastructure - servers, databases - are also free or very cheap. Just look at the Google App Engine. Its idea is pretty neat. You get Google's servers and infrastructure for free for your web services&applications. Only when it starts to attract more users you need to pay. Google itself is promising that the initial quota should be enough for around 5 million web page loads per month - pretty big.

What does it mean for developer? I had to give a try for it and it seamed to be really easy to get started. Currently coding is done with Python and the guys at Google are hinting that in future other environments will be also supported. Google provides own light weight framework which is easy to use. It however also supports pretty much any other Python based framework - you just need to use their database system. And why wouldn't you do that when you get their load balancing for free? Anyhow - you can get pretty far just by using the framework they provided. Documentation is also good. Too easy?

Google is doing lot to lower the barrier to enter web apps markets. With Google App Engine companies doesn't need to do any initial investments to the server infrastructure. They can pretty much try out if the service is going to fly until they need to pay. That has big impact on the risk and needed initial funding. I wouldn't be surprise if in near future there are tons of web apps running on Google's infrastructure.

Now back to coding...

Vroom, vroom engine

Mar 5, 2009

Lift me!

It has been a while when I last time played with web coding. After wondering a while - should I start to play more with Google App engine (which is really great stuff), Ruby or go and try some stuff from Java world I bumped into Lift. Lift is a Scala based web framework that promises to do thing differently (surprise, surprise). Because I have long wanted to really dig into Scala I knew that this would be my next playground. Lets see how different it really is...


Mar 3, 2009

Coding and Drawing

I wish I would have 16 fingers - coding with amazing speed!

Hello everyone and welcome to my blog. You have to start a blog with a post and usually it is the hardest one.  My intention is to mostly write about stuff related to coding and drawing. I can't however promise that some other topics wouldn't sneak into the blog also. To keep it short - welcome all and unleash your coding troll.

A troll with amazing coding skills...