Re: [Haskell-beginners] Beginners Digest, Vol 57, Issue 12

Enviado desde mi iPhone El 10/03/2013, a las 18:00, beginners-request@haskell.org escribió:
Send Beginners mailing list submissions to beginners@haskell.org
To subscribe or unsubscribe via the World Wide Web, visit http://www.haskell.org/mailman/listinfo/beginners or, via email, send a message with subject or body 'help' to beginners-request@haskell.org
You can reach the person managing the list at beginners-owner@haskell.org
When replying, please edit your Subject line so it is more specific than "Re: Contents of Beginners digest..."
Today's Topics:
1. Re: Create new value for given type (Kim-Ee Yeoh) 2. Re: Performance problem with Haskell/OpenGL/GLFW (Jesper S?rnesj?) 3. Re: Performance problem with Haskell/OpenGL/GLFW (Jesper S?rnesj?) 4. Re: Performance problem with Haskell/OpenGL/GLFW (Hollister Herhold) 5. Trouble in (Fast)CGI land: matching `CGIT IO a0' with actual type `IO ()' (emacstheviking) 6. Re: Trouble in (Fast)CGI land: matching `CGIT IO a0' with actual type `IO ()' (David McBride)
----------------------------------------------------------------------
Message: 1 Date: Mon, 11 Mar 2013 03:48:33 +0700 From: Kim-Ee Yeoh
Subject: Re: [Haskell-beginners] Create new value for given type To: The Haskell-Beginners Mailing List - Discussion of primarily beginner-level topics related to Haskell Message-ID: Content-Type: text/plain; charset=ISO-8859-1 On Mon, Mar 11, 2013 at 1:33 AM, Kim-Ee Yeoh
wrote: class MyTheory a where someKindOfChoice :: a -> [a] -> [a]
Whoops, that should be [a] -> [a], or perhaps more usefully [a] -> a.
In a way, such a function constructively /proves/ that the type is infinite. Of course, it has to satisfy a bunch of conditions. You can sort of see how going down this path leads naturally to Coq and Agda.
-- Kim-Ee
------------------------------
Message: 2 Date: Mon, 11 Mar 2013 08:11:36 +1100 From: Jesper S?rnesj?
Subject: Re: [Haskell-beginners] Performance problem with Haskell/OpenGL/GLFW To: The Haskell-Beginners Mailing List - Discussion of primarily beginner-level topics related to Haskell Message-ID: Content-Type: text/plain; charset=ISO-8859-1 On Mon, Mar 11, 2013 at 1:31 AM, Andrey Yankin
wrote: AFAIK glfw-b uses its own version of glfw which is built during setup. There is a makefile inside the package.
GLFW-b does indeed bundle its own version of the GLFW C library [1], version 2.7.3 as of right now. This is why it can be installed without first installing the C library on your system.
However, this is not the library that Test2.hs (nor test2.c) links against. In fact, that program does not use GLFW-b at all, but rather simply declares a few entry points with C calling convention that should be there at linking time. I did this only to be able to rule out any problem with GLFW-b.
Can't reproduce this error on Arch.
I got the change to run my code on a Windows 7 machine, and didn't see the problem there either. This seems to be specific to Haskell on Mac OS X.
-- Jesper S?rnesj? http://jesper.sarnesjo.org/
[1] https://github.com/bsl/GLFW-b/tree/master/glfw
------------------------------
Message: 3 Date: Mon, 11 Mar 2013 08:23:01 +1100 From: Jesper S?rnesj?
Subject: Re: [Haskell-beginners] Performance problem with Haskell/OpenGL/GLFW To: The Haskell-Beginners Mailing List - Discussion of primarily beginner-level topics related to Haskell Message-ID: Content-Type: text/plain; charset=ISO-8859-1 On Mon, Mar 11, 2013 at 7:17 AM, Hollister Herhold
wrote: Okay, I think I just figured this out. Well, HOW to get it working with the accelerated renderer.
I was wondering a simple way to check renderer info so I ran glxinfo. This (automatically) fired up X11, and then on a hunch I re-ran Test2 with X11 running and got this:
hhmacbook:~/Development/haskell/OpenGL:57> ./Test2 hardware (2,7,7) (3,2,0) hhmacbook:~/Development/haskell/OpenGL:58>
AH HA! I then quit X11 and re-ran Test2, and got this:
hhmacbook:~/Development/haskell/OpenGL:58> ./Test2 software (2,7,7) (3,2,0) hhmacbook:~/Development/haskell/OpenGL:59>
SO- If you want the accelerated renderer, you need to have X11 running.
Now, I have no idea WHY this is the case, but there you go.
Hope this helps.
This lead me down an interesting path.
First, I should explain that my machine, like most newish Macs, has two graphics cards. In my case, a discrete Nvidia GeForce GT 330M, and an integrated Intel chip. The former is better, but the latter uses less power, and the system is supposed to switch between them automatically.
I used gfxCardStatus [1] to show which card was in use. When I ran test2.c, the system briefly switched to the discrete card. However, when I ran Test2.hs, the system kept using the integrated chip the whole time. Presumably, the Intel chip lacks a hardware implementation of OpenGL 3.2, which causes the system to fall back to a software renderer. I then used gfxCardStatus to force the system to *always* use the discrete card and - boom! - this time Test2.hs received a hardware renderer!
So it seems that the problem is a) Mac OS X-specific, or possibly specific to systems with multiple graphics cards, b) related to triggering the *switch* to the better graphics card. I don't yet understand why the C program triggers a switch, while the Haskell program does not, but I'll keep investigating.
Thank you all very much for your help!
-- Jesper S?rnesj? http://jesper.sarnesjo.org/
[1] http://gfx.io
------------------------------
Message: 4 Date: Sun, 10 Mar 2013 18:27:56 -0400 From: Hollister Herhold
Subject: Re: [Haskell-beginners] Performance problem with Haskell/OpenGL/GLFW To: The Haskell-Beginners Mailing List - Discussion of primarily beginner-level topics related to Haskell Message-ID: <24E1A52D-CB7B-49A0-A0EC-9A932DBEDF73@fafoh.com> Content-Type: text/plain; charset=utf-8 I guess running X11 forces use of the NVidia chip. Interesting.
-Hollister
On Mar 10, 2013, at 5:23 PM, Jesper S?rnesj?
wrote: On Mon, Mar 11, 2013 at 7:17 AM, Hollister Herhold
wrote: Okay, I think I just figured this out. Well, HOW to get it working with the accelerated renderer.
I was wondering a simple way to check renderer info so I ran glxinfo. This (automatically) fired up X11, and then on a hunch I re-ran Test2 with X11 running and got this:
hhmacbook:~/Development/haskell/OpenGL:57> ./Test2 hardware (2,7,7) (3,2,0) hhmacbook:~/Development/haskell/OpenGL:58>
AH HA! I then quit X11 and re-ran Test2, and got this:
hhmacbook:~/Development/haskell/OpenGL:58> ./Test2 software (2,7,7) (3,2,0) hhmacbook:~/Development/haskell/OpenGL:59>
SO- If you want the accelerated renderer, you need to have X11 running.
Now, I have no idea WHY this is the case, but there you go.
Hope this helps.
This lead me down an interesting path.
First, I should explain that my machine, like most newish Macs, has two graphics cards. In my case, a discrete Nvidia GeForce GT 330M, and an integrated Intel chip. The former is better, but the latter uses less power, and the system is supposed to switch between them automatically.
I used gfxCardStatus [1] to show which card was in use. When I ran test2.c, the system briefly switched to the discrete card. However, when I ran Test2.hs, the system kept using the integrated chip the whole time. Presumably, the Intel chip lacks a hardware implementation of OpenGL 3.2, which causes the system to fall back to a software renderer. I then used gfxCardStatus to force the system to *always* use the discrete card and - boom! - this time Test2.hs received a hardware renderer!
So it seems that the problem is a) Mac OS X-specific, or possibly specific to systems with multiple graphics cards, b) related to triggering the *switch* to the better graphics card. I don't yet understand why the C program triggers a switch, while the Haskell program does not, but I'll keep investigating.
Thank you all very much for your help!
-- Jesper S?rnesj? http://jesper.sarnesjo.org/
[1] http://gfx.io
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners
------------------------------
Message: 5 Date: Sun, 10 Mar 2013 22:40:04 +0000 From: emacstheviking
Subject: [Haskell-beginners] Trouble in (Fast)CGI land: matching `CGIT IO a0' with actual type `IO ()' To: The Haskell-Beginners Mailing List - Discussion of primarily beginner-level topics related to Haskell Message-ID: Content-Type: text/plain; charset="utf-8" I am writing a stop-motion capture application using AngularJS and it's going OK. I was inspired to do so after installing "IPCamera" on my phone and Sony tablet. A typical IPCamera session lives on an internal address like this, this example will turn on the LED on the camera:
http://192.168.0.5:8080/enabletorch
Just because I can (or so I thought), I decided to write a tiny little FastCGI application in Haskell to act as a proxy using the PATH_INFO variable. This means that in to my Javascript code I have this code in a service file:
angular.module('stomoServices', ['ngResource']). factory( 'IPCamera', function($resource, urlIPCameraAPI) { return $resource( urlIPCameraAPI, {}, { ledOn: { method: 'GET', params: {featureReq: 'enabletorch' }}, ledOff: { method: 'GET', params: {featureReq: 'disabletorch' }}, focusOn: { method: 'GET', params: {featureReq: 'focus' }}, focusOff: { method: 'GET', params: {featureReq: 'nofocus'}} }); });
and I then issue commands like "IPCamera.ledOn()" etc. All very nice except that it doesn't work yet because I can't get the worlds seemingly simplest CGI application to compile yet! Here is the code that I have, it could be "cleared up" but this is what I have so far:
main :: IO () main = runFastCGI . handleErrors $ do command <- getVar "PATH_INFO" case command of Nothing -> outputError 400 "Missing IPCamera instruction (PATH_INFO)" [] Just cmd -> ipCamExec (tail cmd) >> output "OK" -- tail drops the "/" where ipCamExec :: String -> IO () ipCamExec url = do simpleHTTP (getRequest url) -- don't want or need response. return () -- to match the return type or so I thought.
and the error message I cannot seem to understand as it fills me with monadic fear which I can't get out of:
ipcamera.hs:16:7: Couldn't match expected type `CGIT IO a0' with actual type `IO ()' In the return type of a call of `ipCamExec' In the first argument of `(>>)', namely `ipCamExec (tail cmd)' In the expression: ipCamExec (tail cmd) >> output "OK"
Please could some kind souls explain to me in simple terms just what is going on and why I am close to tears right now? I have read the definitions of CGIResult and CGI and they leave me cold. I am trying to understand monads more but at times like this I once again realise what a complete rank beginner I am!
Thanks. Sean.
participants (1)
-
Francisco Gutiérrez