At work, I’m starting work on a documentation project for a client, documenting how to use the particular software stack we’ve been working on for a while for them.
Also at work, I need to do some reworking of the build process of Riak Exploer to make our internal automated snapshot builds a bit more useful.
On the personal side, I’ve been wanting to start a new project. Though I’m sure there are already tools to do some of what I want, this is more of an exercise that just happens to be motivated by a real-world problem. I have an old back up drive that most consists of copies of data from home directories of old machines, going back well over a decade. I’m wanting to collate and move all of the useful bits to a newer drive (before this old drive dies). So I want to write a tool to index my drive. By file name. Find duplicates by content hashes, etc.
I’m thinking I want to do something with Python 3, I’ve not written a Python 3 project. I’m thinking Python 3 + MyPy + Hypothesis + Attrs + Click. I have an empty directory for the code. But I haven’t even gotten as far as writing a requirements.txt. Want to do that.
Are there any good examples of Python 3 first or only projects out there (applications, not libraries) that I can look at? I haven’t written much high quality Python code for a while now, so I’m out of the loop.
xonsh is a shell writen in python3: http://xon.sh/
I started work on an Emacs dmenu replacement for dwm a few weeks ago and I hope to release something this week. It’s now morphed into something that doesn’t use Emacs (it uses zsh instead). Funny how these things go.
As for the “why did I get into this” category, I’m going to write a new backend for Gnus to manage my paper database. I realized that they’re just “articles” and I want to mark them as read as well as make notes on them. I use Gnus and it seems like a decent fit for my needs (either that or it’s my hammer of late).
I actually wrote a dmenu replacement myself, originally about 7 years ago. I wanted a GTK window for it instead of the minimalist dmenu design. It was also an excuse to write an application in Haskell: gtkmenu
I’d like to add fuzzy searching to it and clean up the code a bit, but it’s something that I use every day without fuss.
Cool! I’ll check that out. Thanks for the pointer.
Or just use magit in Emacs, which automatically shows you a diff in one buffer and you edit your commit message in another.
Yeah, magit is my favorite tool in a long time - the support for viewing staged diff chunks and operating on them individually - including discarding them if they’re just e.g. debug prints - is pretty great.
It’s also being improved regularly, for example I like the new command for starting a new branch and cleaning up the current branch (probably master) after you’ve already committed some things - magit-branch-spinoff, that’s not in the online docs yet: github.com/magit/magit/blob/master/Documentation/magit.org – search for spinoff
Thanks for sharing about magit-branch-spinoff. That looks useful! I haven’t been tracking what the new features in magit are, perhaps I should!
… what am I doing? This is a question that never seems to bother me too much. The general rule is to just wake up and decide in the moment what to do. I don’t even know what I’ll be doing 30 minutes from now.
Last week, we were on a week long road trip in / around Chiang Mai.
This week, we’re on a beach for much of the week with 2 Russian expat families. The Russian fathers and I will be working from here, but that’s fine. :)
As for actually getting something done … I’ve been working a lot on Mindy, a byte code compiler and VM for Dylan. We’ve now gotten pull requests from 4 people, some of them who hadn’t contributed to anything for Dylan before. I’ve also started bringing back support in melange, our C header parser and FFI bindings generator, for Mindy’s flavor of FFI.
Mindy is a lot of fun to work with. The entire thing compiles in seconds, there’s no complicated bootstrap and the codebase is pretty clear. There’s a lot of easy things to do and clean up or fix or improve. It takes a very different approach to things than Open Dylan did. Open Dylan is an ahead of time compiler that tries to do a lot of validation and optimization. Mindy is not. It just tries to get you to experimenting as quickly as possible. (It’ll be fun to improve the error handling there over time and improve how it implements the type system.) Everything about Mindy is easier and that lets things move a lot faster.
Also, my Github streak has now passed 1024 days.
btw, you have a typo on your link to Mindy
Woops. Was typing out all links manually … sorry about that.
Work and Work-related:
Tweak org-mode LaTeX export to PDF to have nicer work status reports
Yeah, this is on my list, too. I may try to squeeze the Tufte LaTeX package into the chain as well. If I have nothing interesting to say, I might as well say it beautifully.
Yeah, I haven’t touched LaTeX since university a dozen years ago, so I’m not looking forward to this.
Chris Armstrong discusses a different technique in his 2015 Strange Loop talk, Side Effects are a Public API. Though the majority of the talk is about implementing these techniques in Python, he does also show an example in Haskell.
I just started a new part-time contract position last week after several years not working due to chronic illness.
I’m not sure how much I can share about work, so this might be vague:
I’ve been using Howard Abrams techniques that he documented in this screencast to document what I’ve been doing and to make sure I get everything done on the various servers in the cluster I’m working on.
Because I’m working, I’m not sure I really have the spoons to work on anything personal, as much as I would like.
I love this exploration of empathy in software development that spans everything from features to code and tools.
Software is ultimately about humans. Providing something tangible for them. The act of writing software isn’t so much about communicating with the computer, but with others (and, yourself as other – one day you’ll have to understand the code you wrote).
This reminds me a bit of the work of Seung Chan Lim at Realizing Empathy. He’s done a couple of talks about the subject that might be interesting:
Still working on Haskell Programming with my coauthor Julie. Recently finished an initial scaffold of the functor/applicative/monad material, moving on to foldable and traversable now. We’re releasing algebraic datatypes through testing (right before monoids) this 15th. Next month on September 15th the monoid/functor/applicative/monad sequence will be released.
Kicking around ideas for a final project, pretty hard to find something that fits all of our specifications. Not easy to find something that’s:
Tractable for a beginner without much exposure to Haskell libraries. We’re not assuming they know databases and the like, for example. The book is written with the limitations of inexperienced programmers in mind.
Sufficiently interesting to someone that hasn’t been neck deep in code or distributed systems for awhile. I’d love nothing more than to have them make a Kafka or SaltStack clone in Haskell but it’s going to bore them to tears.
Trying to avoid heavy duty web apps that would require a lot of frontend work or learning a whole framework as well. If anyone has any suggestions, please reply here or please tweet or email them to me.
We’re also looking for reviewers (of any experience level) so if you have the time and it interests you, please reach out!
For a final project, perhaps a (text based) command-driven discussion / social network? Maybe start out with an in-memory implementation then swap it out for a file-based implementation (reinforcing the abstraction tools you’ve taught)? It could be a lead-in to databases: “manipulating all that text data was kind of a pain and won’t be very fast with hundreds of users. go check out databases!”. You could also generate/serve some simple HTML and say “that’s the basic idea behind webapps”
I really like this idea! I’d have to think about how to avoid the problems with NAT and networking for home-users, but I’m going to kick it around with Julie and see if there’s something workable here.
Thank you :)
Maybe could be a LAN-only thing for e.g. conferences or something along the lines of that.
Pop-up social network?
That’d be a good descriptor: you could include your <social-network-du-jour> handle in your profile for longer-term connections, maybe. For a talk, maybe a way to submit questions during the talk and have them queued up at the end.
Maybe https://ngrok.com/ will help? (also has a handy request inspector!). I’m not sure if it will be appropriate in complexity/difficulty for your audience, though.
I’d like to review. What do you need?
Is the email address in your lobsters profile a good way to reach you?
Yeah, sure, contact me at email@example.com
For review, do you need anything more formal than what I’ve been sending you and Julie on Twitter?
It’s more work and structure than that, but what you’ve been doing isn’t wildly different.
I wouldn’t mind helping out, since I want good learning materials out there.
Use the email address I used when I mailed you last week if you want to send me more info.
Cool, i’m curious what you think of the maybe haskell book that thoughtworks put out recently? I rather liked its approach of introducing functor/applicative/monad as concepts. I wish it had been out a year ago when I was starting to relearn haskell in earnest.
I’ll have a look at the new updates after you update the epub, been following along with interest on this book.
And for a final project, can always punt and do a todo application. >.<
It’s hard for me to think about a 94 page book when we’re working on something much longer with very different objectives. You could probably stack it up against how I review books with more similar objectives in this post and see whether it hits the high notes I care about.
It’s very hard to think about a book with wildly different scope like that. We release >100 pages every month and we’re trying to make a book that gets people from zero to, “I can begin to solve my problems with Haskell”.
More fundamentally, I’m skeptical people can just be taken on an isolated tour of functor/applicative/monad, there are foundations that have to be in place for it to be anything but cargo culting.
Fair enough, just thought i’d ask is all. Looking forward to the updates regardless! I’ll dig into the link.
More specifically about Maybe Haskell: I think it’s worth giving people a teaser of what’s possible. I do this sort of thing too, but usually for in-person demos/tutorials. However, I don’t regard them as being a component of any kind of pedagogical scheme.
For sure, i’ll admit maybe haskell is at best a great way to whet someones appetite for haskell. So in that regard I’d place it alongside LYAH. Although even less comprehensive in that it doesn’t cover a whole lot of haskell at all. Then again it doesn’t really bill itself as such either.
I just really liked the approach to the functor/applicative/monad explanation used is all. It helped convince a friend to learn haskell. But they’re hitting the same wall everyone seems to with haskell learning materials. I’m helping but i’m not the best teacher so I’m not sure if I’m hindering more than helping. Haskell isn’t hard either its just difficult to elaborate why doing things a different way is beneficial. In hindsight its 20/20 but from the other direction it just looks like a mirror.
Either way keep it up the lambda calculus links on the first chapter were fun to review and read. I was pleasantly amused that you started out with that.
I grabbed a copy of the book last week, so far so good.
sure, i’d be glad to help review. email address in profile is valid.
oops, thought i had :) fixed now
Looking over the ToC, I’d noticed that the four final chapters are TBA. I’d love to see at least one on something along the lines of “using Haskell in anger”: some tips for real-world Haskell use. Things like common packages to be aware of, debugging, problem solving with Haskell, and deploying my programs. Are there plans to include something like that?
We’re always open to ideas/suggestions, but those chapters are literally TBA. We have topics planned for them.
The “almost guaranteed to happen” chapters are IO, “when things go wrong”, and the final project. The more open slot is DSLs & APIs. Data structures covers a lot of the common packages to be aware of, monad transformers covers some of those as well. Debugging is sort-of part of “when things go wrong” but it’s probably not quite what you’d think.
The way we name our chapters hides practical examples. The upcoming release (15th) has more practical projects and examples than have been seen so far.
Your suggestions are very much appreciated as I wasn’t happy with the “DSLs & APIs” chapter and I’m seeing a common theme (which you’ve improved the confidence in) in what practical bits people want.
I’d be happy to review; I’m going to university in a couple of months and will be doing a very theoretical CS course, which begins with haskell - I’ve been told to buy the Bird book on Haskell, but a lot of people have told me it’s terrible. I already know the basics of haskell though as I’ve used it for a couple of years.
What email should I contact you at?
Ah, I sent you a pm, not entirely sure how the privacy settings work on this website but I was under the impression my email was viewable in my profile.
Only what you explicitly put in the “About” box is visible (plus your Gravatar). You can see here what’s visible: https://lobste.rs/u/NickHu
I just thought there ought to be a “make my email public” checkbox or something like that, and reading https://lobste.rs/privacy implied that that might already be the case, duly noted though.
I’d love to help review! I have experience in other languages, and have made a few false starts with Haskell (through LYAH and the cis194 class).
A cis194 dropout is a perfect candidate for us! What email should we contact you at?
There’s a link in my profile now. Thanks!