8 ms·
Running a startup on Haskell
- hugues 15y agoHackers News is boring because of this type of post. What is the purpose of your link?
- freshhawk 15y agoDid you know that that was a slideshow? You're seeing the title page, click on it to advance to the next page. repeat.
- narain 15y agoArrow keys also work.
- mkopinsky 15y agoThat said, this is pretty poorly designed. I also had no clue what to do for the first few seconds after I clicked the link. It was only at slide 38/41 that I noticed the tiny, hidden controls on the very bottom blending into my status bar.
- Periodic 15y agoI didn't even notice those. Fortunately, I've worked with systems like S5 slideshows, and this looked a lot like a slideshow (no scroll bar, large text, numeric fragment in the URL). Usability could definitely be better, but I will admit to writing up similarly boring slides in the past.
- mkopinsky 15y agoCompare this slideshow to the basic S5 slideshow at http://meyerweb.com/eric/tools/s5/s5-intro.html http://meyerweb.com/eric/tools/s5/s5-intro.html . A simple CSS template could solve the usability problem here.
- icey 15y agoI wonder why 280slides never really took off. This still seems like an unsolved problem (hosting slides online)
- notJim 15y agoSlideshare and Scribd: both allow you to use the program you already know (Keynote or PowerPoint, most likely) that's also a native app with lots of powerful functionality.
- Tyr42 15y agoI don't know if it's Opera being smart, but space works for me as well.
- Legion 15y agoAnd on an iPad, nothing works.
- fhars 15y agoExcept that, depending on your browser, it is impossible to navigate to the second slide. In opera mini, the slide itself is not clickable, there are no arrows visible, arrow keys are not available, and the "contents?" link points to a trunkated list starting at slide 15. I'd really like to read the presentation, but it is completely inaccessible.
- deleted 15y ago[deleted]
- sciurus 15y agohttp://www.opera.com/support/bugs/ http://www.opera.com/support/bugs/
- jpr 15y agoWhat do you mean by "this type of post"?
- michaelschade 15y agoFor background, Bryan gave this talk at the excellent Strange Loop 2011 conference (https://thestrangeloop.com/ https://thestrangeloop.com/). Abstract: https://thestrangeloop.com/sessions/running-a-startup-on-haskell https://thestrangeloop.com/sessions/running-a-startup-on-has... He also gave a workshop on Sunday (which I unfortunately was not able to attend): https://thestrangeloop.com/sessions/haskell-functional-programming-solid-code-big-data https://thestrangeloop.com/sessions/haskell-functional-progr...
- pjscott 15y agoFor a different type of background, Bryan O'Sullivan is the author of some of the best Haskell libraries out there. The de facto standard JSON parser/serializer is his doing, for example, and his Riak client is the best I've seen in any language. This guy really knows what he's talking about.
- wunki 15y agoI'm very impressed with the amount and quality of libraries they have released on Github [1]. Going to use the following in my "webmachine in Haskell" project. - aeson: Fast json library [2] - pronk: load test webservers [3] [1]: https://github.com/mailrank/ https://github.com/mailrank/ [2]: https://github.com/mailrank/aeson https://github.com/mailrank/aeson [3]: https://github.com/mailrank/pronk https://github.com/mailrank/pronk
- deleted 15y ago[deleted]
- narain 15y agoSo what is "the best compiler bug ever" (slide 31)?
- BMarkmann 15y agoagreed. heart-broken when i realized the next slide wasn't a continuation of that one.
- technomancy 15y agoThere was a certain condition (~ 10 years ago) where if the source file didn't pass the type checker it would be deleted. Bryan quickly assured everyone that it had since been resolved. =)
- thurn 15y agoInteresting that he comes down in favor of Snap. I've been looking at the Snap vs. Yesod question for my own projects, lately, and there's interesting arguments both ways. Yesod is big and comprehensive, with four or five custom DSLs that have compilers implemented in Template Haskell. Snap is tiny, really just a routing engine and server with a small template library tacked on. Yesod reminds me of Rails, while Snap reminds me of Servlets + JSP.
- Periodic 15y agoYesod is a web framework. It is designed to display web pages with some sort of datastore backing them. If you had a CRUD-type app with a few different data models then Yesod will make it really easy to generate the appropriate HTML and forms and make them type safe. It extends the Haskell all the way down to the application layer, assuming standard HTML as your primary response and a certain data representation and persistence layer. Snap (I have only looked at it. Please correct me) seems like it only goes as far as the HTTP layer. It's designed so you can implement web services. Those services might return HTML, but they might return JSON or XML. It doesn't care or help you with your data representation. You have to do your own data persistence and display layers.
- socratic 15y agoI must hunt down and learn to use a QuickCheck-like library for my language. If I can't find one, I should write one. So what's the (best) equivalent of QuickCheck in Ruby? In other languages?
- DanielRibeiro 15y agoScala has scala check: http://code.google.com/p/scalacheck/ http://code.google.com/p/scalacheck/ Ruby, because of non static types, can't be as magical, but people have given their best: https://github.com/IKEGAMIDaisuke/rushcheck https://github.com/IKEGAMIDaisuke/rushcheck
- getsat 15y agoI'm not sure about one that can generate arbitrary data, but Heckle[0] will break your Ruby tests in extravagant ways. [0] http://ruby.sadi.st/Heckle.html http://ruby.sadi.st/Heckle.html
- olliesaunders 15y agoFor Ruby: http://rushcheck.rubyforge.org/about.html http://rushcheck.rubyforge.org/about.html Check out the citations on http://en.wikipedia.org/wiki/QuickCheck http://en.wikipedia.org/wiki/QuickCheck for QuickChecks in other languages.
- marekmroz 15y agoA quick google search returned this: * qc for python (http://dan.bravender.us/2009/6/21/Simple_Quickcheck_implementation_for_Python.html http://dan.bravender.us/2009/6/21/Simple_Quickcheck_implemen...) * QuickCheck Wikipedia page with links ot implementation for many languages (http://en.wikipedia.org/wiki/QuickCheck http://en.wikipedia.org/wiki/QuickCheck) Personally I am looking forward to trying out qc for python. Has anyone here used it before?
- edsrzf 15y agoGo has a QuickCheck-like package distributed with it. It's under testing/quick. http://golang.org/pkg/testing/quick/ http://golang.org/pkg/testing/quick/
- 15y ago
- abhijitr 15y agoCan anyone comment on the claim "QuickCheck is shockingly more effective at finding bugs than unit tests"? I'd be interested in hearing other opinions.
- ams6110 15y agoI haven't used QuickCheck, but read about it. So take this with a grain of salt, but it seems to me that specifying properties that should hold for your functions and then letting QuickCheck throw all kinds of data at them would be more efficient at least, if not more effective, than manually writing a bunch of unit tests and coming up with your own test data.
- pjscott 15y agoIt's surprising how often people overlook weird edge cases that QuickCheck finds, because it doesn't have as many preconceptions about what kinds of inputs are sensible.
- tel 15y agoIt tends to be best for mathematical code because you can quickly think of invariances. In any situation where you can state a powerful invariance your code must always be consistent with it's both fast and thorough. The common example is that (= str (reverse (reverse sequences))) for all sequences. Note that this only tests invertibility. There are lots of ways reversal can be broken without violating this invariance. It's just really easy to write down this invariance and use it to rapidly check gross violations.
- masklinn 15y agoIt's essentially a unit-fuzzing framework, so it can find holes in boundary conditions people generally forget to check, because it's in their blind spot or because "nobody would ever do that". QC does not care, and since it's injecting fuzzed data at the unit leve (~function, generally) it makes it quite easy to see precisely where the failure happens.
- eru 15y agoAlso writing up the laws that the fuzzers checks, is a good exercise in thinking about your API. Read http://donsbot.wordpress.com/2007/05/01/roll-your-own-window-manager-part-1-defining-and-testing-a-model/ http://donsbot.wordpress.com/2007/05/01/roll-your-own-window... and http://donsbot.wordpress.com/2007/05/17/roll-your-own-window-manager-tracking-focus-with-a-zipper/ http://donsbot.wordpress.com/2007/05/17/roll-your-own-window... for some examples. Quick also not only gives you the failing cases, but tries to simplify and shrink them first.
- scarmig 15y agoIt appears he's teaching a course at Stanford on Haskell starting next week, MW later in the afternoons. Taking a class just to learn a language is a bit dodgy, but Haskell is probably a forgivable exception.
- mgummelt 15y agoIt's a class in Haskell, not on Haskell.
- Periodic 15y agoThis is a good point. It's "Functional Programming in Haskell". When I first saw the course I think it was titled, "Systems Programming in Haskell."
- mgummelt 15y ago"Functional Systems in Haskell". I think it's still based on systems programming.
- iam 15y agoThat is great. In my school we only had a class with Ocaml, not quite as mind blowing since it didn't have lazy evaluation, monads, type classes, or any of the other crazy distinctive things in Haskell that don't exist in ML-style languages. Hopefully they cover the theory behind Haskell as much as the practical side of it.
- ionfish 15y agoML's first-class modules let you achieve many of the same things as type classes. In fact, a lot of people in the Haskell community would like something a bit closer to ML (in other words, more powerful) in this regard. Monads can be formulated in any language with first-class functions. Monadic I/O is more distinctively Haskellish, and of course Haskell has syntactic sugar to make using them easier, but as a tool and a concept they're far from unique to Haskell.
- hristov 15y agoIt is pretty disappointing that they decided to go with c# for the local client. This pretty much guarantees that it will not work on Linux.
- Locke1689 15y agoSee Mono.
- jcromartie 15y agoSee: actual Mono apps. I only have a handful of experiences with GUI-intensive C# apps on Mac and Linux. They were all flat-out bad, though.
- protagonist_h 15y agoNot really, as long as they don't use Windows API directly and rely on .NET Framework they should be able to run it on MONO.
- technomancy 15y agoHe said in the Q&A that they used C# specifically to target integrating with Outlook, so that wouldn't apply in this case.
- darklajid 15y agoMono's not an acronym, as far as I know.
- 15y ago
- deleted 15y ago[deleted]
- olliesaunders 15y agoA related talk: http://vimeo.com/27192476 http://vimeo.com/27192476 (video)
- tel 15y agoAnyone know what the "best compiler bug of all time" was?
- stmartin 15y agoWhy not on x86 assembly?
- shogunmike 15y agoI really like the idea of QuickCheck. Presumably it is -best- used in conjunction with unit testing. It seems to me though that it would be suitable mainly for numeric type code, given the random nature of the inputs?
- pja 15y agoRemember that Haskell datatypes are very rich. QuickCheck will generate random instances of any datatype you define. Because Haskell datatypes are so expressive,. t's normal for Haskell programmers to define complex types for their functions to process. Hence you can easily get good coverage of any idiomatic Haskell code with QuickCheck. If you're working in a datatype poor language, or simply one where the syntax makes defining complex datatypes painful then you're much more likely to pass around datatypes which are in implicitly defined. In this case you'll have to write a QuickCheck function to generate suitable instances in order to test your code. (This is also true for Haskell: there are often a few functions where you have to explain to QuickCheck how to generate appropriate test cases.)
- dubya 15y agoWhat is Reshaper in slide 35? Google suggests ReSharper, which seems more likely, since searching just for reshaper finds a pretty goofy product.
- droz 15y agoIt's ReSharper from JetBrains. It's a widely used plugin for Visual Studio providing a handful of refactoring and productivity tools.
- pragmatic 15y agoAny reason to use C# instead of F#, considering F# is more functional? Wonder if it has something to do with COM...