POV-Ray : Newsgroups : povray.off-topic : Try Haskell Server Time
4 Sep 2024 13:21:49 EDT (-0400)
  Try Haskell (Message 11 to 20 of 62)  
<<< Previous 10 Messages Goto Latest 10 Messages Next 10 Messages >>>
From: Invisible
Subject: Re: Try AJAX
Date: 3 Mar 2010 04:06:29
Message: <4b8e2695@news.povray.org>
Warp wrote:
> Invisible <voi### [at] devnull> wrote:
>> I had no idea that you can actually do that...
> 
>   You clearly haven't used gmail.

Indeed. But I have, at least, heard of it. ;-)


Post a reply to this message

From: scott
Subject: Re: Try AJAX
Date: 3 Mar 2010 05:03:46
Message: <4b8e3402$1@news.povray.org>
> Right, so... if I'm understanding this right, XMLHttpRequest allows a mere 
> script to instruct the browser to send an HTTP request, and return the 
> body of the response as data, which the script can then further 
> manipulate?

What happens when the user presses the back button after such a process? 
Can the script intercept this and provide its own "back" functionality?

I've definitely got annoyed by some sites where you hit the back button and 
it takes you to a site you were looking at 10 minutes ago, because all the 
things you've been doing on this site haven't actually loaded a new page...


Post a reply to this message

From: Invisible
Subject: Re: Try AJAX
Date: 3 Mar 2010 05:10:36
Message: <4b8e359c$1@news.povray.org>
scott wrote:

> I've definitely got annoyed by some sites where you hit the back button 
> and it takes you to a site you were looking at 10 minutes ago, because 
> all the things you've been doing on this site haven't actually loaded a 
> new page...

Yeah, this is a lot of fun.

The other one is "JavaScript links". You know, where the "link" isn't 
actually a hyperlink, it executes some JavaScript, which then tells the 
browser to change URL. And because it's scripted, you can't Ctrl+click 
to open the URL in a new window. (Or if you do, the existing window 
changes URL anyway, so you *still* don't have the original page. At 
least you can usually use the browser history to go back a page though.)

And then there's the links which pop up a "window" over the current 
page. You know the kind - the whole page goes grey and a funky little 
box appears over the top of it, and you can't do anything with the rest 
of the page until you dismiss the box. (Modal dialogs suck for a reason!)

Lots of shopping sites like to take you to a completely different page 
as soon as you've bought something, which also tends to thwart any 
attempt to used tabbed browsing to nagivate around. You've got a page of 
items, but as soon as you buy one, the page goes away. Great. Now I have 
to somehow navigate back to where I just was...


Post a reply to this message

From: Invisible
Subject: Re: Try AJAX
Date: 3 Mar 2010 05:12:18
Message: <4b8e3602$1@news.povray.org>
Invisible wrote:

> Seems reasonably clear...

Hmm, I wonder if I could use this to implement distributed MVC, like in 
my Final Year Project, but without requiring a custom client.

Of course, as far as I can tell, I need a real web server to even 
experiment with this stuff, so...


Post a reply to this message

From: Invisible
Subject: Re: Try Haskell
Date: 3 Mar 2010 09:20:10
Message: <4b8e701a@news.povray.org>
scott wrote:
> The tutorial was good up until step 7.

Hmm, maybe I should write my own?



 > 2 + 2
That was easy, eh?

 > 2 + 3 * 4
The usual operator precedence rules apply.

 > (2 + 3) * 4
You can override operator precedence manually in the usual way.

 > sqrt 144
This is a function call. (Notice the lack of brackets!)

 > div 10 3
This is a 2-argument function. (Again, notice the lack of any brackets.) 
It performs integer division (i.e., division to the nearest whole number.)

 > 10 / 3
Does the same calculation, but with floating-point arithmetic.

 > 10 `div` 3
This does the same thing as the first one, but it looks more natural. 
The backticks work for any 2-argument function.

 > sin 1 + cos 1
This is sin(1) + cos(2).

 > sin (1 + cos 1)
This does a different calculation.

 > sin -1
This gives an error, because it thinks you mean "sin - 1", which is 
invalid. (Yes, we all think it's very annoying.)

 > sin (-1)
This works properly.

 > "This is a string."

 > 'X'
This is a single character.

 > "X"
This is a string that only contains 1 character.

 > ""
This is an empty string.

 > [8, 3, 11, 2]
This is a list of numbers.

 > ['X', 'Y', 'Z']
This is a list of characters. Note that a string *is* a list of characters!

 > ['X', 3]
A list can contain elements of any type, but all elements must be of 
*the same* type. This example is therefore invalid. (Nice clear error 
message, eh?)

 > sort [8, 3, 11, 2]
 > reverse [8, 3, 11, 2]
 > sum [8, 3, 11, 2]
 > 3 `elem` [8, 3, 11, 2]
 > 4 `elem` [8, 3, 11, 2]
Haskell has many, many list functions.

 > [1, 2, 3] ++ [4, 5, 6]
This joins two lists together.

 > [1..10]
This is a shorthand for writing lists.

 > sum [1..100]
Add up these numbers.

 > product [1..100]
Multiply these numbers. (Notice that even though the answer is huge, 
Haskell computes it exactly.)

 > take 3 [5,4,6,3,7,2,8,1,9]
Get the first 3 elements.

 > drop 3 [5,4,6,3,7,2,8,1,9]
Remove the first 3 elements.

 > [5,4,6,3,7,2,8,1,9] !! 5
Get the 6th element. (The first element is index zero, not index one!)

 > filter odd [5,4,6,3,7,2,8,1,9]
Filter a list according to a condition.

 > filter (> 5) [5,4,6,3,7,2,8,1,9]
Filter with a different condition.

 > map (*2) [5,4,6,3,7,2,8,1,9]
Double all the numbers in the list.

 > map toUpper "This is a string."
Since strings are just lists that contain characters, all list functions 
work on strings.

 > sin
You can't print this out, so you get an error.

 > :t sin
This tells the interpretter to only print the type signature, not 
*execute* the code. (This is an interpretter command, not a Haskell 
command.)

 > (5, 'x')
This is a "tuple". Tuples can contain any number of elements, and they 
can be of different types. Their main use is in returning several 
results from a single function call.

 > partition odd [5,4,6,3,7,2,8,1,9]
This splits the list into two lists, containing odd and not-odd numbers. 
The lists are returned as a size-2 tuple.

 > :t fst
Take a look at this type signature. Can you figure out what it means?

 > fst (5, 'x')
Did that do what you expected?

 > let x = 5 in x + 1
This is how you define local variables. (The interpretter unfortunately 
doesn't let you define things and then use them later. Everything has to 
go into a single giant let-expression.)

 > let x = 5; y = 8 in x + y
This is how you define multiple variables.

 > iterate (*2) 1
This starts with 1, and applies the "times two" function to it over and 
over again, creating an infinite list of results. (Again, the 
interpretter doesn't display the whole thing.)

 > let factorial n = product [1..n] in factorial 6
This is how you define a new function. (Normally it wouldn't be a local 
variable, but the interpretter unfortunately doesn't allow top-level 
definitions.)

 > :t (+1)
This is a function that adds one to a number.

 > :t (*2)
This is a function that multiplies a number by two.

 > :t (+1) . (*2)
The "." operator takes two functions and combines them together. Here 
we've made a function that takes a number, multiplies it by two and then 
adds one. (Note carefully the order - RIGHT TO LEFT!)

 > map ((+1) . (*2)) [1..10]
Apply this function to a list of numbers.

 > :t div
This is a 2-argument function that does integer division.

 > :t div 10
This is not a syntax error. It's a 1-argument function. WTF?

 > :t div 10 5
This is a calculation that produces a number.

 > div 10 5
This divides 10 by 5.

 > map (div 10) [1..10]
See if you can work out what's going on.



OK, I'm going to stop now...


Post a reply to this message

From: Darren New
Subject: Re: Try AJAX
Date: 3 Mar 2010 11:00:56
Message: <4b8e87b8@news.povray.org>
Invisible wrote:
> Of course, as far as I can tell, I need a real web server to even 
> experiment with this stuff, so...

You have a real web server.

-- 
Darren New, San Diego CA, USA (PST)
   The question in today's corporate environment is not
   so much "what color is your parachute?" as it is
   "what color is your nose?"


Post a reply to this message

From: Darren New
Subject: Re: Try AJAX
Date: 3 Mar 2010 11:05:15
Message: <4b8e88bb$1@news.povray.org>
scott wrote:
> Can the script intercept this and provide its own "back" functionality?

GIYFT!

-- 
Darren New, San Diego CA, USA (PST)
   The question in today's corporate environment is not
   so much "what color is your parachute?" as it is
   "what color is your nose?"


Post a reply to this message

From: Invisible
Subject: Re: Try AJAX
Date: 3 Mar 2010 11:12:01
Message: <4b8e8a51$1@news.povray.org>
>> Of course, as far as I can tell, I need a real web server to even 
>> experiment with this stuff, so...
> 
> You have a real web server.

I do, but it can only serve static HTML. (Plus it's quite a lot of work 
continually logging into the web interface to re-upload your files every 
time you edit 1 line of code.)

I think to try this out properly I'd have to set up a local Apache VM or 
something. (This requires me figuring out how the hell to set up 
Apache.) Alternatively, I could just write a trivial Haskell webserver 
that will log what requests the browser is sending in response to by code...


Post a reply to this message

From: scott
Subject: Re: Try Haskell
Date: 3 Mar 2010 11:13:24
Message: <4b8e8aa4$1@news.povray.org>
> Hmm, maybe I should write my own?

It's very useful for an absolute beginner, these are the things you need to 
know that a lot of tutorials assume you somehow magically know already.

> > :t fst
> Take a look at this type signature. Can you figure out what it means?
>
> > fst (5, 'x')
> Did that do what you expected?

Well it seems to return the first item from a tuple.

Is it just a shorthand for "take 1"?

Ah no, it seems those list operators don't work with tuples :-(

> > let x = 5 in x + 1
> This is how you define local variables. (The interpretter unfortunately 
> doesn't let you define things and then use them later. Everything has to 
> go into a single giant let-expression.)

So this means "let x = 5 in (the following expression)..."

Now Step 7 in the original tutorial makes sense :-)

> OK, I'm going to stop now...

OK I need to download the compiler if I am to actually learn any of this...


Post a reply to this message

From: Darren New
Subject: Re: Try AJAX
Date: 3 Mar 2010 11:24:45
Message: <4b8e8d4d$1@news.povray.org>
Invisible wrote:
> I do, but it can only serve static HTML. 

Uh, no. Every major OS comes with a real web server.

Now, if what you mean is "I don't have my own computer", then that's a 
different question.

> (Plus it's quite a lot of work 
> continually logging into the web interface to re-upload your files every 
> time you edit 1 line of code.)

Unless you're using an IDE, yes. ;-)

> I think to try this out properly I'd have to set up a local Apache VM or 
> something. (This requires me figuring out how the hell to set up 
> Apache.) 

Depoending on your OS and distribution, this can be pretty trivial.

But if you're actually going to get into AJAX programming, you're going to 
have to learn more than you can by asking people here to explain it to you. ;-)

-- 
Darren New, San Diego CA, USA (PST)
   The question in today's corporate environment is not
   so much "what color is your parachute?" as it is
   "what color is your nose?"


Post a reply to this message

<<< Previous 10 Messages Goto Latest 10 Messages Next 10 Messages >>>

Copyright 2003-2023 Persistence of Vision Raytracer Pty. Ltd.