News aggregator
String Matching Algorithm Libraries?
I have recently started working with Haskell and I am looking for some projects that I could use as learning exercises, but would like for them to also have the potential of being valuable to the community as well. One thing I have not really seen is a comprehensive library of various string matching algorithms. Does such a thing exist?
Also, I would like to try and generalize the library to handle arbitrary data matching and not just strings.
submitted by pdwr[link] [14 comments]
Categories: Incoming News
Philip Wadler: Seth Godin on airports
Seth Godin, Eleven things organizations can learn from airports. 5. By removing slack, airlines create failure. In order to increase profit, airlines work hard to get the maximum number of flights out of each plane, each day. As a result, there are no spares, no downtime and no resilience. By assuming that their customer base prefers to save money, not anxiety, they create an anxiety-filled system.Spotted via Boing Boing
Categories: Offsite Blogs
Paul Johnson: Software has CivEng Envy
There is a school of thought which says that developing software should be like constructing a building. To make a building you have an architect draw blueprints, and these blueprints are then handed over to a builder who constructs what the architect has specified. According to this school of thought the problem with the software industry is that it doesn't create blueprints before it starts building the software. They look with envy at the world of civil engineering, where suspension bridges and tunnels and tall buildings routinely get finished on budget and schedule.
This is a superficially attractive idea; software is indeed difficult, and it would indeed be a foolish project manager on a building site who directed the builders to start laying the foundations before the plans had been finalised. But on a closer examination it starts to fall apart.
Suppose that a big software project does indeed need something analogous to a blueprint before starting on the coding. What, exactly, is a blueprint? What purpose does it serve? And where would that fit into the software lifecycle?
A blueprint for a building is a precise and complete specification of everything that will go into the building. The builder has the problem of assembling what the blueprint shows, but there is no ambiguity and no variation can be permitted. This is because buildings are safety critical infrastructure. The Hyatt Regency walkway collapse was a horrible example of what can happen when someone makes a seemingly innocuous change to the plans for a building. So before a building is constructed the plans have to be approved by a structural engineer who certifies that the building is indeed going to stay up, and by an electrical engineer who certifies that it isn't going to electrocute anyone or catch fire due to an electrical fault, and by a bunch of other engineers with less critical specialties, like air conditioning. The details matter, so the blueprints have to specify, literally, every nut and bolt, their dimensions, the metal they are made from and the torque to which they should be tightened (most of these things are standardised rather than being written down individually for every nut and bolt, but they are still part of the specification). Without this the structural engineer cannot tell whether the building is structurally sound. Similarly the electrical engineer must know about every piece of wire and electrical device. So by the time the blueprints are handed to the builder inventiveness and creativity are neither required nor allowed.
The only artefact in software development that specifies how the software will operate to this degree of precision is the source code. Once the source code has been written, it is to be executed exactly as written: inventiveness and creativity in its execution are neither required nor allowed. But those who promote the idea of "software blueprints" seem to think that something else, something more abstract, can be a blueprint, and that once these blueprints have been drawn the "construction" of the software (that is, turning these blueprints into source code) can proceed in an orderly and planned fashion, putting one line of code after the next in the manner of a bricklayer putting one brick on top of another.
But when you look at the artefacts that these people proffer, it is clear that they are nothing like precise enough to act as a blueprint; they are more like the artists impressions, sketched floor plans and cardboard models that architects produce during the early phases of design. These artifacts can help people understand how the building will be used and fit into its environment, but they are not blueprints.
(By the way, the old chestnut about unstable software requirements being like "deciding that a half-constructed house ought to have a basement" fails for the same reason. The problem with unstable requirements is real, but the analogy is wrong).
But if the blueprint for software is the source code, then the builder for software is the compiler. This should not be a surprise: when computer scientists encounter a task that does not require inventiveness and creativity then their first instinct is to automate it. If so then it is really civil engineering that needs to be envious of software engineering.
Software is not like buildings in other ways too:
This is a superficially attractive idea; software is indeed difficult, and it would indeed be a foolish project manager on a building site who directed the builders to start laying the foundations before the plans had been finalised. But on a closer examination it starts to fall apart.
Suppose that a big software project does indeed need something analogous to a blueprint before starting on the coding. What, exactly, is a blueprint? What purpose does it serve? And where would that fit into the software lifecycle?
A blueprint for a building is a precise and complete specification of everything that will go into the building. The builder has the problem of assembling what the blueprint shows, but there is no ambiguity and no variation can be permitted. This is because buildings are safety critical infrastructure. The Hyatt Regency walkway collapse was a horrible example of what can happen when someone makes a seemingly innocuous change to the plans for a building. So before a building is constructed the plans have to be approved by a structural engineer who certifies that the building is indeed going to stay up, and by an electrical engineer who certifies that it isn't going to electrocute anyone or catch fire due to an electrical fault, and by a bunch of other engineers with less critical specialties, like air conditioning. The details matter, so the blueprints have to specify, literally, every nut and bolt, their dimensions, the metal they are made from and the torque to which they should be tightened (most of these things are standardised rather than being written down individually for every nut and bolt, but they are still part of the specification). Without this the structural engineer cannot tell whether the building is structurally sound. Similarly the electrical engineer must know about every piece of wire and electrical device. So by the time the blueprints are handed to the builder inventiveness and creativity are neither required nor allowed.
The only artefact in software development that specifies how the software will operate to this degree of precision is the source code. Once the source code has been written, it is to be executed exactly as written: inventiveness and creativity in its execution are neither required nor allowed. But those who promote the idea of "software blueprints" seem to think that something else, something more abstract, can be a blueprint, and that once these blueprints have been drawn the "construction" of the software (that is, turning these blueprints into source code) can proceed in an orderly and planned fashion, putting one line of code after the next in the manner of a bricklayer putting one brick on top of another.
But when you look at the artefacts that these people proffer, it is clear that they are nothing like precise enough to act as a blueprint; they are more like the artists impressions, sketched floor plans and cardboard models that architects produce during the early phases of design. These artifacts can help people understand how the building will be used and fit into its environment, but they are not blueprints.
(By the way, the old chestnut about unstable software requirements being like "deciding that a half-constructed house ought to have a basement" fails for the same reason. The problem with unstable requirements is real, but the analogy is wrong).
But if the blueprint for software is the source code, then the builder for software is the compiler. This should not be a surprise: when computer scientists encounter a task that does not require inventiveness and creativity then their first instinct is to automate it. If so then it is really civil engineering that needs to be envious of software engineering.
Software is not like buildings in other ways too:
- Buildings have very few moving parts and little dynamic behaviour, whereas software is all about dynamic behaviour (and buildings with dynamic behaviour often have problems.
- Novelty in buildings is rare. I work in a three storey steel frame office block, which is also on an estate of very similar three storey steel frame office blocks. Software, on the other hand, is almost always novel. If software to do a job is already available then it will be reused; I run Fedora Linux; I don't write my own operating system from scratch.
Categories: Offsite Blogs
Exponential Decay of History, Improved
Categories: Offsite Blogs
Категория Hask / Хабрахабр
Categories: Offsite Blogs
SPOJ - HaskellWiki
Categories: Offsite Blogs
Optimizing performance problems with Aeson renderinglarge Text arrays
Hello,
In summary, i'm working on an application that responds to a users query, a
sequence index, with the union of a list of UUIDs that have "changed"
since that
same sequence index, split into 6 sections. I wish to respond to these
queries
via JSON to provide an easy to use web service, and for the most part,
what I
have works.
The problem I am having is that profiling seems to show that the
majority of the
time spent in my application is encoding this to JSON, and also that the
application is only 60% productive with 40% allocations happening in
Data.Aeson.encode (and friends).
Here's an overview of what I'm doing, the full code can be found at the
end of
this email.
I am storing my data in memory as an IntMap, from sequence index to a
changeset:
IntMap ChangeSet
Where a ChangeSet is essentially a tuple of HashSet's of UUIDs:
data ChangeSet = ChangeSet { artistChanges :: !(HashSet MBID)
, labelChanges :: !(HashSet MBID)
Categories: Offsite Discussion
Haskell Package Guidelines - ArchWiki
Categories: Offsite Blogs
happs-2012-10-08.txt
Categories: Offsite Blogs
ICFP 1996: Philadelphia, Pennsylvania
Categories: Offsite Blogs
Haskell Weekly News: Issue 256
Welcome to issue 256 of the HWN, an issue covering crowd-sourced bits
of information about Haskell from around the web. This issue covers the
weeks of January 20 to 26, 2013.
Quotes of the Week
* elliott: cmccann: unfortunately it is too perfect an abstraction to
be useful.
* SamanthaD: shachaf: you're one of those dirty imperative communists
who want the state to dictate everything!
* monochrom: I refuse camel case and mark zuckerberg. same level. not
negotiable.
* mauke: a newtype is like an existing type but wearing glasses and a
fake mustache and a sign saying "you've never seen me before"
Top Reddit Stories
* Taking magic out of GHC or: Tracing compilation by transformation
(intro to Core transformations, inlining,..
Domain: ics.p.lodz.pl, Score: 59, Comments: 2
On Reddit: [1] http://goo.gl/lJmsb
Original: [2] http://goo.gl/IbJ5O
* Introduction to Haskell IO
Domain: haskellforall.com, Score: 57, Comments: 26
On Reddi
Categories: Incoming News
New gtk2hs 0.12.4 release
Thanks to John Lato and Duncan Coutts for the latest bugfix release! The latest packages should be buildable on GHC 7.6, and the cairo package should behave a bit nicer in ghci on Windows. Thanks to all!
~d
Categories: Incoming News