For the RapidWeaver users out there, I’ve updated my antique Markup plugin to work with RapidWeaver 5 (slow clap). It also now lives on GitHub, like all the other cool open-source projects published after about 1970. (BitBucket is so 1969.)
As an aside, ohmigosh, there still isn’t anything out there that’s as good as RapidWeaver for building websites. I wanted to redo my site, and looked into a bunch of RapidWeaver alternatives, especially Web apps. Tumblr, Wordpress, Blogger and all that are great for just blogs, but useless for building anything more than a blog. Online site-builders like Squarespace, Weebly, and Virb are either way too dumbed down, too complex, have the most boring themes, or more likely, are all of the above. Despite RapidWeaver still being compiled for ppc and i386 only (it’s not a 64-bit app yet), and using the Objective-C 1.0 runtime (my Markup plugin uses +[NSObject poseAsClass:]!), it is still the best thing going for building sites. Amazing.
Anyway, Markup plugin, go get it.
I've heard the idea of installing shared libraries with cabal and ditching the dependencies. This to me sounds better than cabal sandboxes because it allows you to reuse libraries without needing to reinstall them, and hopefully without needing to redo your entire cabal when you go for an upgrade to your libs. Unfortunately this wouldn't (afaik) improve the amount of time it takes to install these libs.
However if it were possible to install the dependencies as well, compile these shared libraries with the installed dependencies (if the version matches) and then have a new independent library, than I think our package management infrastructure would be solved. If the installed dependency is a version mismatch, we could install this library with a temporary instance of the desired dependency, and then toss jt.
Is this possible ? Do you think this is a good idea/would help?
Also while I'm on the podium might I add that it feels like overkill for cabal to be managing packages, building and sand boxing all on it's own? I think it should at least be split into separate commandssubmitted by fruitbooploops
[link] [33 comments]
I am an avid Haskeller and will be in Santiago, Chile for around 6 months starting August. I was wondering if there are any Chilean Haskell groups or meetups that I can join.submitted by haskman
[link] [4 comments]
At this year's Oregon Programming Language Summer School Stephanie Weirich gave a a series of lectures walking through the development of a simple dependently typed language in Haskell.
The videos are available as .mp4 files at:
and the github repo for the source code is available at:mn-haskell-guy
[link] [10 comments]
If your average coders haskell code outperformed your average coders C code, I don't believe there'd be anything holding us back from popularity. I don't think that's impossible either if we could makes faster data structures default. list and String really don't cut it. I feel that this language should succeed and I think this is an important step along the way.submitted by fruitbooploops
[link] [11 comments]
When I started writing an application that used persistent to interact with a MySQL database, I decided to put the whole application inside one big SqlPersistM action, and run it once inside main. (To make it clear, this is not a Yesod application; I simply use persistent as a standalone library.)
However, as I learned more about persistent and how it worked, it became clear that this was the wrong way to use persistent. Here’s why.Problems of one big SqlPersistM action Finalizing transactions
persistent’s SQL layer treats an SqlPersistT action as a single transaction. Thus, until you run the action, the transaction is not committed. Obviously, this is an issue for any long-running server application.
You could work around this by calling transactionSave manually. Now you have a different but related problem…Overlapping transactions
Normally a single SQL connection can participate in just one SQL transaction. (There are probably exceptions to this rule which I am not aware of, but this is how it happens unless you do something special.)
Thus, assuming your application is multithreaded, you’ll end up committing other threads’ transactions that are active at the same time.
(Besides, I am not sure whether executing multiple SQL statements over the same connection simultaneously is supported at all.)Resource deallocation
persistent uses resourcet to ensure that resources (such as buffers that hold result sets) are released as soon as they are not needed.
resourcet works by handling these two scenarios:
- No exception is thrown; resources are deallocated by an explicit release call.
- An exception is thrown, preventing the release action from happening. However, once the exception escapes the enclosing ResourceT block, it triggers the exception handler inside runResourceT. The exception handler then performs deallocation.
When your application consists of one long-running SqlPersistM action, chances are you’re catching some exceptions inside the ResourceT block, by the means of monad-control. Doing that invalidates resourcet’s assumptions: an exception prevents the release action from happening, and yet it never makes it up to runResourceT, and so your long-running app leaks resources.Do it right
It implies from the above considerations that the right way to use persistent with a SQL backend is:
- Make SqlPersistT correspond to logical transactions in your application.
- Make ResourceT computations as short-lived as possible. Ideally, don’t catch exceptions inside ResourceT; use finally instead.
- Use a connection pool.
I am not an expert in either persistent or SQL databases; I am in the process of figuring this out myself. Corrections (and confirmations) are welcome.
I'm very new to Haskell. I don't know if this is the right place to ask questions so bear with me. I'd like to install yesod (Ubuntu 12.04-64) via
cabal install yesod-platform yesod-bin --max-backjumps=-1 --reorder-goals (straight from yesod website)
Whenever I run this command, I get the following message:Resolving dependencies... Killed
and yesod doesn't get installed. What's happening? How can I solve this?
BTW, is yesod a good framework? What do you guys mostly prefer; snap or yesod or something else?
Thanks.submitted by threading
[link] [4 comments]