Neat, also interesting to see people using ghc on alpine linux. I ported it originally so i could get static pandoc binaries. Glad its useful.
I’ve been programming haskell on alpine for about a week now, havent had an issue yet.
Thanks for your work on this. We’d been using alpine for deploying ruby stuff for a while, but your work has allowed us to begin moving towards deploying haskell too.
I committed myself to daily practice a couple years back. I decided to not break my github streak. Every day I do at least 20 minutes of katas, books, or building something outside my comfort zone. It’s been revolutionary. I’ve worked through SICP, Programming Languages, Let Over Lambda, Land of Lisp, Algorithm Design Manual, Clojure Programming, a good chunk of Data Scientist’s Toolbox, Learn You A Haskell, F# 3.0, Real World Haskell, most of @haskellbook, and I’m currently working through Software Foundations in Coq. I built, deployed, and support a school attendence suite in Clojure. I’ve done countless katas, TDD practice sessions, and little helper programs.
All in all, deciding to put in 20 minutes a day and tracking it on GH has completely and drastically changed my skill in just four years. I believe if you set yourself the goal of writing something, anything for 20 minutes a day, you will find plenty to keep you busy and interested. You will see your skill rapidly improve. You will get bored of things in your current comfort zone, and so you’ll have to learn new things to stay focused. I can’t recommend it enough. I just crossed 1355 days of streak, and I intend to do it as long as I write software for money.
I agree with the “20” minutes. But I disagree with covering such broad subject matter, and so shallowly (perhaps he meant something different).
I think you’ll learn a lot more by doing things end to end, and start to finish. Figure out a small idea for a program you want to create. It should be highly relevant to you or someone you care about. Build the whole thing, including the UI, the backend, the database, tests, deployment, monitoring, etc etc. Use it. Polish it and make it robust. Don’t stop putting time into it until it’s actually done.
I think perseverance is what makes expert programmers so unique. They can hit problems they’ve never seen and push through without getting discouraged. The only way to learn that is by finishing whole projects, not starting new ones.
I’d say we are in agreement then! I finished almost every book and course, and the attendance site I built from scratch they are using it to this day. However, I disagree that fully completing SICP and Let over Lambda as shallowly covering Lisp and FP. Completing all 350+ exercises in SICP was one of the hardest things I’ve done and stretched my skill immensely.
I’m actually curious completely because I want inspiration, if what I do is a shallow study, what does your personal study of it look like? I left out a lot of the books I’ve read that don’t have homework (so I don’t count in my 20 minutes a day) like Domain Driven Design, Clean Code, Code Complete, Pragmatic Programmer, Working Effectively with Legacy Code, Growing Object-Oriented Software Guided by Tests, Death March, Art of Agile Development, Planning Extreme Programming, Extreme Programming Explained, Design Patterns, Implementing Domain Driven Design, Patterns of Enterprise Architecture, Refactoring, Peopleware, Managing Humans, and Becoming A Technical Leader. Those are all fine, but can’t really be practiced so I often don’t recommend them unless the person has mastered more tactical skills.
I do agree that perseverance is the biggest thing. When stuck and hopeless, I am at my worst when I give up, and at my best when I take a deep breath and look for alternate solutions.
I want inspiration, if what I do is a shallow study, what does your personal study of it look like?
What I would suggest is trying to find people who share your passion but have non overlapping skills to review your code; and do the same for them. You want to try to constantly refine and improve the code so it is better than what any of you could do alone.
How do you balance reading a chunk of e.g. SICP and then coding, presumably something relevant, in 20 minutes? How much would you typically read? Does this only work because you do it every day? Or is it because the texts come with relevant exercises, so you don’t have to come up with your own projects?
Those books all have exercises along with the text. I usually will read for a few minutes, then write some samples to see what’s up with what I just read, then start on the exercises. If the exercise is hard, I’ll have a few sessions of writing some unit test cases, playing with the api, and then finishing the exercise. At first each time I sat down I’d spend 10 minutes just remembering where I was, but after a year or so I got pretty good at just “jumping in” and can sit down and be typing/reading in under 30 seconds.
What did you think of Data Scientist’s Toolbox? I’m curious how resources there feel. Did you have an applied math background going in?
I had effectively zero math going in, but a lot of various programming languages. It was fine, I enjoyed it. I think I’d want to do it a second time without the deadlines, those really bum me out and demotivate me.
The book Software Foundations came up when people were talking about learning to do stuff like seL4. I noticed it’s Coq where seL4 and many good projects are Isabelle/HOL. Curious if you or anyone else can tell me if Software Foundations' material also covers most of knowledge or skill needed for HOL, too. It plus a HOL-specific tutorial or articles. Or is it and Coq’s approach different enough to need a whole different book?
Idris (because I think it’s the future of software development - I think provably correct software will become more and more necessary as attacks become easier, and Idris seems to be the best effort at a system for producing provably correct software that does things), and Noether (seems to be even further in the same direction, and the model is interesting).
provably correct software will become more and more necessary as attacks become easier
Does provably correct imply provably secure? I’m not sure, but don’t know.
Valid proofs of the wrong correctness criterion are a real thing. “Correct” and “secure” are both informal notions that need to be formalized as part of this, and they are easy to get wrong.
But I still think this approach moves in a useful direction.
I’m not sure either but I would not be surprised if provably correct is not at least a prerequisite of a provably secure system.
It certainly makes making a more secure system more possible.
Not necessarily, thanks to hardware bugs. Might still be vulnerable to things like rowhammer.
Of course those issues still affect any other language too.
Beware of bugs in the above code; I have only proved it correct, not tried it.
That quote is still funny, but I think only partly applicable. Knuth proved code correct in a less direct way than systems like Idris or ACL2 do, because the proof isn’t directly connected to the source code in a machine-checkable way, making it much more likely the code doesn’t match the proof (either for substantive reasons, or simple typos).
Yes I agree. To say “Oh but it still has this problem that other languages do” is an unreasonable distraction from the premise that it is still a LOT better. No one is claiming unshakable code, but they are claiming as good as (currently) possible assuming the proofs are in line with the requirements.
If the spec is secure then yes. It should generally imply no RCE at least, simply because RCE is likely never correct behaviour. Things like provable confidentiality would require more work.
This is a really useful description of current affairs. I run a bi-weekly Rust Hack & Learn for over a year now and am member of the rust-community team. After all this time “find an easy description of Rust that tells people why it is cool in 5 minutes”, I’d describe this as the hardest problem in Rust.
I believe that problem stems from the fact that many of the features of Rust (safe sharing of mutable and immutable data) click rather late and are rather boring in short example. Most of these relate to the borrow management and the whole ownership system. The great thing about them is that they scale really well to large codebases and enable a lot of guarantees, especially in the face of concurrency. But that’s something for people that are 3 weeks in. Before that, Rust is a fancy new C dialect with iterators :).
My biggest problem learning Rust isn’t it’s “cool factor” (I already think it is), it’s that the interesting projects I’ve come up with that Rust might be a good fit for are scarily big (ex: Writing a Unikernel, Building the storage layer for a database, Game Engine/ECS stuff). I think that’s partially because Rust’s benefits are evident for large codebases, so my mind goes there. More than “why is Rust cool”, I need to find a project that doesn’t overlap with my typical usage of other languages like Haskell (mostly web services)… or I need to figure out how to break down one of the bigger ones like a unikernel. /shrug
On the other hand, after writing this comment, maybe I should just get over my “fear of a large project” in a domain I’m unfamiliar with.
i’ve bounced off rust several times because every time i think i’ll start a project in it, and start reading docs, it always ends up being “oh, this is both easier and more concise in ocaml”. i think i just don’t write the sort of programs rust is best suited for.
i think i just don’t write the sort of programs rust is best suited for.
I feel exactly the same way. Also applies to Erlang, where you’d be nuts to use anything else for writing a cluster of non-HTTP network servers, but I can nearly always find an off-the-shelf solution for that kind of problem instead of writing my own.
I can totally feel that. Rust has interesting limitations, but it grows on you over a few months. I really don’t want to code in a another language for the time being.
Also, the language does not care so much about being concise, but I also don’t care about conciseness too much. (that used to be worse)
That said though, that’s probably true for many languages and not a feature of Rust.
I there any reason why you wouldn’t just write a component to a larger system, e.g. the rumprun unikernel (which is a supported target for Rust).
For contributing to an existing project, I’m more motivated to contribute to MirageOS or HaLVM which unfortunately doesn’t help my Rust interests.
The Mirage project has interest in Rust support but no one to take point. Two birds, one stone.
That looks great :) Thanks for digging that up!
What about a rust backend for GHC?
rustc is already a frontend to LLVM – doesn’t Haskell have an LLVM backend?
GHC does as of 7, and I believe it was improved in 8 (although I haven’t checked in on it)
I recently saw a talk about implementing an TLS library in Rust in a way that the type system guarantees resistance to timing attacks.
I thought that was cool, but I don’t know how much that will help you.
Could you find a link to it? That sounds super cool!
I don’t think the talk was recorded, and I don’t know if the slides are up, but the paper can be found here.
That is very cool. If I end up going the Rust Unikernel route, I’ll build a TLS stack anyway. Mirage built their own, but afaik it isn’t resistant to timing attacks (and opens up an attack via GC).
When a commit is signed, what is actually signed? Is it just the diff, or the diff and metadata? If you were to rebase a series of commits would the signatures become invalid even if each individual commit diff didn’t change? I assume so, but I wanted to confirm.
Don’t continue reading if you’re a pussy, 9-year old boy or afraid of little bit “strong” writing.
This is like standing at a podium as a huge banner unfurls behind you saying “I AM A JOKE” and a pantless marching band comes out on stage playing a off-key version of Yackety Sax.
I definitely do not give a single solitary shit what the author thinks after that.
There is very little quite so tiresome as the “I’m going to give it to you straight, and by straight I mean with lots of cuss words” sort of truth telling. It so rarely actually has any truths to tell.
Skimming the article, the author seemed to have some good points with solid examples, particularly the bit about slice manipulation.
But the writing was so intolerable I quit reading.
It looks like he’s removed that line now. But the tone remains that way throughout… Public discourse has standards that are required if you expect to be engaged.
Trolling and terrible writing aside, I’d be far more interested in the opinions of people who have been using the language for more than a whole 4 months, and who have actually used it in production.
None of those seem particularly bad to me. In fact, the variable shadowing seems like people getting what they deserve for shadowing a variable in an inner scope like that ;-)
On the other hand, maybe years of C++ has numbed me to it.
I’ve been using Go for years, since before 1.0 was released. In side projects (that I count on and use every day, at home and at work). In academic research. And now in production. Several of the things the author mentions are benefits of the language. For example, I love go generate. Others might be reasonably considered warts or footguns, but they are warts that simply haven’t caused many (if any at all) problems for me personally.
So, you have no opinion on the technical complaints presented in the article?
If somebody announces “Hi, I’m trolling!” I think it’s a reasonable tradeoff to decide you’re not interested in reading the rest of the post to determine if that’s true or not.
I probably could have put up with around half the intro, but at some point I grow tired of reading why I’m not going to like what comes next.
That’s typically where the scroll keys come in handy. :)
I’ve noticed (over the last year or two) that people seem to be increasingly reluctant to try and find the good with the bad when it comes to technology posts, often to the point of (as with your GP) proudly proclaiming their impatience. At least the author here had the decency to be up-front, even though the edginess was sorta tiring.
Ah, so I don’t ordinarily complain about such things. I’m thankful the author has been so considerate as to tell me not to waste my time. :)
I just don’t have any opinion about the rest, since I didn’t read it, which I only mention since there seemed to be a thread going.
Personally, I’m fine with anything in an article besides unwarranted swearing. I don’t enjoy reading it and have a hard time blocking it out.
I’ve noticed (over the last year or two) that people seem to be increasingly reluctant to try and find the good with the bad when it comes to technology posts
My time is too precious to waste it reading poorly written content. If the ideas have merit they’ll be written up again by better authors.
I feel like poor language indicates lazy thought, and lazy thinkers often don’t have as deep and interesting insights as they think they do ;)
While that is true, if you do that, you should not leave a comment about how you didn’t read the article and therefore have nothing interesting to say about it.
If somebody announces “Hi, I’m trolling!” I think it’s a reasonable tradeoff to decide you’re not interested in reading the rest of the post…
Meanwhile, OpenBSD continues to produce “serious” presentations in Comic Sans, which doesn’t at all scream “Hi, I’m trolling!”
Pot, Kettle, it’s all the same in this kitchen. Now excuse me as my karma burns away for daring to point out the above hypocrisy.
No, your karma will burn away for the tired old “I’ll lose karma for this”. It adds nothing to the discussion. Please don’t do it.
Shrug. I don’t typically use comic sans. Anyway, I think complaints about comic sans say more about the reader than the presenter, where as calling the reader a pussy says more about the author.
where as calling the reader a pussy says more about the author.
Nit, he didn’t call the reader a pussy.
OpenBSD definitely gets justifiable criticism for that, and the pot being black doesn’t make the kettle not black.
(IMO, while the Comic Sans thing is stupid and unprofessional, the bigger issue is that they typically deliver these things in a complicated binary format for which decoders have already had serious vulnerabilities, which sort of flies in the face of their entire raison d'être of worrying about security first and foremost.)
Their presentations are either presented as PDFs, which already integrate with screen readers & tools like pdf2text, or are presented as webpages with images - and those presentations have plain text or HTML slides as well:
(and c'mon, if you (not you specifically but y'all) can’t tell the difference between light ribbing directed at people who believe in form over function and starting your paper with GTFO PUSSIES then, uh.)
Whenever I’ve seen them linked it’s been a page full'o jpegs, and I’ve certainly never bothered investigating further. Good that that’s not the only format they’re available in; bad that it’s the only one I’ve seen, and still stupid and unprofessional that they format it like a middle schooler in the 90s.
And yes, I don’t think the two are comparable. To take the pot-and-kettle metaphor way too far, OpenBSD is at worst lightly scorched here. Not perfect, but at least mostly not actively insulting their audience.
Why the fuck would I wade through the rest of that shit just to find out what the author thinks?
Opinions about why Go is a poorly designed language are not so valuable or rare that I feel obliged to pick the peanuts out of the poop here.
Precisely. It’s not like you’re obligated to read every word everywhere, even on a subject you might be interested in.
“Peanuts out of the poop.” Thanks, that’s my new favorite phrase.
That’s pretty much a classic Tone Argument… not saying it’s great writing, but maybe look through the writing to the arguments more?
I’m pretty tone agnostic, actually, so I probably wouldn’t notice or care, except when the author goes out of their way to tell me how bad the tone is. If you know your tone is so bad that you have to warn people about it, but choose not to fix the tone, well… I think you have chosen poorly. It seems to reflect a desire to be more shocking than informative.
It’s definitely not a tone argument. Me saying your tone is shitty is only a tone argument if I’m also saying that makes you wrong, in the same way that ad hominems aren’t actually just insults.
I don’t know if that’s strictly true. The typical example of a tone argument is an angry feminist being told “if you were less angry, people would be more receptive to your argument” (as a euphemism for “please make your point in a format I can more easily ignore”) with no reference to its truth value.
Regardless, this author is (a) not underprivileged relative to the people criticizing his tone, and (b) not justifiably angry anyway, so I don’t see a problem here.
You’re saying that the tone he is using is sufficient to invalidate what he is saying. I’m pretty comfortable calling that a Tone Argument.
You’re saying that the tone he is using is sufficient to invalidate what he is saying
Pretty sure what the parent was saying is that the tone the author is using, for him as a reader, is sufficient to ignore what the author is saying, without making any claims as to whether the author’s points about Go are correct or not.
“This paper is so caked in stinky shit I refuse to read it” is different than “this paper is so caked in stinky shit that whatever is written on it must be wrong”.
Me saying your tone is shitty is only a tone argument if I’m also saying that makes you wrong
Eh … isn’t that exactly what you are doing? You don’t like him writing like you usually do, and use that to dismiss everything he has to say.
Do I use gendered slurs? No. No, I don’t.
Dick, pussy and asshole are all slurs. Gender doesn’t come into it (and it’s interesting that you would consider genitalia to be gendered).
Are you trying to imply that if he used an inclusive she/he/they/xir/zhe/… you would have had no trouble reading the article?
I don’t disagree with your point, or desire to point out your wrongness here. I do wish to share that I found it entertaining that you don’t like his tone, but use one like it for most of your own discussion. Again, I’m not criticizing (this is a different medium and you have different goals, for starters of why it doesn’t matter), I just found it causal of some chuckling.
I don’t use gendered slurs, nor do I posture that cursing is some sort of bad-boy bullshit. If you think the author lost me because of his “strong” writing then you’re not paying attention.
Does Mutant support Minitest yet? Looks like 330 is still open and README says “The minitest integration is still in the works.” :/
I think the biggest barrier to minitest support is lack of people willing to help test that pull request against their own projects. It’s not as easy in minitest as rspec to associate a test with the class or method it is intended to cover. A cover declaration needs to be added to a test so mutant knows what tests to re-run after it mutates some code.
Wonder if this mean’s there’ll be a Haskell SDK released at some point.
What extra benefits would an SDK provide?
I should have clarified: a Helium Haskell SDK.
This workflow is something which I usually advocate, and most of the time people are more than happy to pick it up. There have been cases, though, where it has caused serious issues. These issues have always been around and the force-pushing which is inevitable when interactively rebasing. I’ve wasted many hours when a dev has accidentally force-pushed an old ref to master, and many more hours when people have merged on top of the old ref.
My experience is that this workflow is great in small teams, but trying to make it work in medium and large teams is usually not worth it. Obviously there are exceptions – if everybody in a large team is very Git-savvy, then it will work fine. But this is often not the case.
I’ve wasted many hours when a dev has accidentally force-pushed an old ref to master, and many more hours when people have merged on top of the old ref.
That’s what we are trying to fix with Mercurial evolve.
The rule of thumb that we use is that you don’t force push to any shared branches. By shared I mean branches with multiple people contributing to it. If I’m working on adding a feature I’ll create a branch and continuously rebase it on top of master as master evolves. When I am ready to share it I’ll make sure the git commits are “clean” and then ask someone to review/merge it. At the point where I ask for other contributors it’s shared and I don’t rebase. We usually consider master a shared branch so we never change it’s history once published.