I wrote a little something over for the Spaced Repetition Foundation about getting the benefits of spaced repetition without relying on technology. Check it out here. Also give Matt's recent post on spaced repetition and creativity a read.
Useful Tools
Trello to Markdown: a Chrome extension
Turns out, whenever you need something on the internet, someone else has already made it.
I was looking around for a way to get several hundred Trello notes (and their descriptions) into a format where I could work on the texts in an offline format. (Trello doesn't have an offline mode.)
I found this excellent extension (made by 'Trapias') which allows you to get your data out of Trello. Click here for the Chrome extension itself and here for the source code over on Github. You can export to HTML, Markdown, Excel and OPML. This is a great set of options, and there are all sorts of advanced selections you can make.
To use:
(1) Go to the board menu -> more -> print and export
(2) a new button will appear called TrelloExport. (Previously there would just have been a JSON export option).
ClozeMaster: learn words in context
Clozemaster is a service I discovered recently while researching the resource guide for my new book, Master Arabic. Clozemaster is intended to be a next step for students who have mastered some of the basics of their language of study. It teaches the language through a game where you identify the missing word. Here's what one of their tests look like, for example:
You can see that it has a space where a word is blocked out. Four options are available below, from which you have to choose. Of course, number two is the correct option and by clicking it you move onto the next question.
The sentences are taken from a wonderful open-source project called Tatoeba. Tatoeba is a collection of sentences and translations which are curated and gathered through crowd-sourcing.
Clozemaster hooks into the corpus of sentences available in Tatoeba and serves up tests ordered by how commonly the word is found (i.e. its frequency ranking).
If you're wondering why this is useful, it helps to know a little about how we best learn vocabulary. The gold standard of vocabulary acquisition happens through context. You learn the word when it is used in a real sentence or scenario, and where you derive all sorts of clues from the words around it. This is how we learn words when we're growing up, and it's how we continue to learn words and concepts in adulthood.
Clozemaster, therefore, is a great tool for someone who has mastered the basics of grammar in their language of study but who wants to grow their vocabulary further. At that stage, it doesn't help to learn words in isolation like services like Memrise have you doing. Instead, learn through reading, or learn through services like Clozemaster. The service is free and would be ideal for someone who's just finished Duolingo in a particular language (for example).
10 podcasts to learn about data science and programming
When learning a new skill or indulging a new interest, I like to find out who is podcasting about that thing. I do this early on in the process since it is hard to get a sense of the full landscape of a particular skill or issue without reading widely. The internet, of course, is a great way to find out about all the different nooks and crannies of a particular community. That doesn't help me much when I'm cooking, though, or when I'm walking in town. Podcasts are an opportunity to broaden my exposure to those topics while doing something else, usually something physical.
Here are some of my favourite podcasts relating to data science and programming:
Becoming a Data Science Podcast
Hosted by Renee Teate, this was my first exposure to smart data professionals talking about their work. I think the podcast is meant to be modelled on the book Data Scientists at Work. (I've read the book and thoroughly enjoyed it, for much the same reasons as I enjoyed this podcast). I'd recommend going back to the first episode and listening to them all. You can get a good overview from listening to just these episodes. Renee has recently resumed podcasting for season two and she also runs a data-science resource online empire that is filled with useful materials.
I'm working my way through all of these these, listening through from the very beginning (over 120 of them). At the beginning, I find it's useful to hear from people who started from nothing and who found a way to use code in their life or career. Not all of the guests are equally interesting, but the podcast is well produced and there's still loads of useful information buried in the overall corpus.
This podcast is in its second season. Just like CodeNewbie, the podcasts tend to focus on the journeys of people who have started from nothing. The guests are variable in terms of how interesting I find them, but I enjoy it nonetheless.
This is one of the more popular data science podcasts out there at the moment. Episodes range from discussion panels to interviews to deep-dives on a particular topic. This is great for keeping up with the buzz or gossip in the data science world and they often have pretty senior guests from the world of data science and business.
This podcast also has a Ruby/Rails sidekick podcast. I've just started the Web Development series and am finding it a useful overview. I'm not coming at this all as a complete beginner, so I'm not sure of the extent to which it'd be useful if that's you, but each episode covers a particular area of programming and web development. Episodes end with an assignment or set of tasks to do to practice or learn whatever they were discussing. This is a nice combination of approaches and as a quick revision of some web development fundamentals, this is a really good place to start.
Python is the language that I've studied and coded most with, so this podcast allows me some contact with people who are light-years ahead of me in terms of their skills. It also introduces frameworks and personalities that are important within the Python community, so if Python's your thing, this is probably a useful podcast to listen to.
The contents of this podcast fairly frequently go right over my head, but it's good to be exposed to the ideas being discussed. There are interviews with people about particular issues and mini-dives explaining a particular data science feature or area.
This is less content-rich than some of the other podcasts listed in the list, and there's sometimes too much focus on the marketing/business side of things, but it's nevertheless an enjoyable set of discussions about web development and programming in general. Guests often speak about meta-issues relating to productivity, management and so on.
This is one of my favourites. It's quite a new podcast, with only 14 episodes as of writing, but the hosts take care to bring in a diverse range of guests. In particular, it's a breath of fresh air to have lots of female coders on, since most of the 'successful' coding podcasts tend to be heavily dominated by men and their male guests.
This podcast includes a lot of the latest technologies, big trends and big-name guests. Some episodes are too vague and unspecific, but as a big name in the data science podcast crowd, this is a fairly good place to go for the orthodoxy of many institutions and individuals involved in the space.
Please let me know if I'm missing any good podcasts that would be appropriate for someone at the beginning end of their programming journey.
Introducing CoachBot: Your Personal Language Taskmaster
For languages that aren’t new, I often feel like I’m stagnating and get bored when I reach the intermediate levels. This can reflect a lack of materials from which to study (as was the case with Pashto when I first started studying it) or — more commonly — a surfeit of materials. This creates a kind of choice paralysis where the number of options means I’m far less likely to sit down and pick one of them. (In a similar way, I'll sometimes choose not to watch any of the in-flight entertainment because there are too many choices to pick from.)
Studying a brand new language is (almost) always fun: you’re making quick progress, everything is new so you still have that nice-and-shiny feeling, and you feel like you’re really on your way to success. Continuing that study after two to four years of effort is a little harder. Like with any longer-term project, you start having to find ways to remind yourself of why you’re even working on it in the first place. It can often feel like you’ve lost that original magic somehow, even to the extent that you question whether you actually want to learn the language.
It is useful to address some of these issues ahead of time. That way, when you hit a period of less energy or motivation, you have a pre-formulated plan of action (made by you when you weren’t consumed by whatever mood is dominant). For me, this takes the form of making lists of suggestions to my future-self. I have pre-made task lists for:
- When I’m travelling
- When I’m feeling sick
- When I have no time to study
- When I have oodles of time to study
- When I have lots of energy and enthusiasm for learning
- When I have no enthusiasm for learning
Try to have at least 10 or 15 tasks in whatever lists you do end up creating. Maybe save a few pages at the back of your language notebook to list these tasks. This way, you always have them handy. It helps to have a good amount of variety in the tasks you pre-assign to yourself.
I keep lists as described above, but they weren’t as effective as I'd hoped. I’d glance at the tasks, feel only a limited enthusiasm for the options available and then put the list to one side. I needed a different solution.
I happened to be teaching myself to program/code at around the same time, so I thought this might make an interesting practice problem to try to solve. (I was studying Python and so I found a way to make a web app that uses that to connect to Flask.)
CoachBot is the free tool I designed to solve the problem of study choice paralysis for language-learners. It’s still only a prototype, but I'm soft-launching it here now since I imagine it might help those reading who are in similar situations.
CoachBot gives you a task that you can complete within a specific time-frame. If you have only 5 minutes, it'll pick a random task from the database that I curated and wrote myself. Have an hour? It'll suggest a different kind of task. If you don't want to do a particular task that it suggests, just click a button to get a new one.
These are the kinds of tasks I suggest when working with students one-on-one. They’re also the kinds of tasks I had written down in my lists. As of writing, there are 386 unique tasks in the database, which means that the suggestions are far more varied and creative than anything I was previously using.
I’d suggest you use it as follows: if you ever feel like you don’t know what to do to keep going with your language studies, open up CoachBot, pick a time corresponding to your needs and do whatever it tells you to do. When you’re done, make a note of what you did and how long it took in your learning log. Consider doing another session.
I’ve been using this for a few weeks already and can attest to its value. One of the key benefits I’ve found is just in getting started. Sometimes I’ll only need to do a five-minute task before I realise that there was something else that I wanted to read or study and then I’ll get busy working on that.
There are lots of features that I hope to build in for future versions. I want to include user accounts and tracking of how much time you spend on the different tasks. I want to sub-divide by language skill (i.e. which skill is being trained) and eventually to build in some kind of guidance and interactivity to how the tool functions. But for now, use it as it is: get some studying done by outsourcing the choice of what you’ll be studying.
There are more details on the website itself. You can click through to the project’s roadmap where you can see an updated version of features coming soon. You can also make suggestions for tasks that you’d like included in the Bot and/or specific features you’d like me to build as part of the project.
[Special thanks to Alex, Ian, Kevin and Peter for patiently answering my questions while I was building this initial prototype].
Taskpaper --> Omnifocus
This is a neat trick for anyone who happens to use both Taskpaper and Omnifocus apps. I think this has probably been there for a long time, but I heard Gabe Weatherhead talking about it on the latest Mac Power Users podcast. (Read more of Gabe's writings on Taskpaper if you're interested in a deep dive).
I'll assume you know something about the Taskpaper syntax. This video explains more in case you're lost already. The Taskpaper syntax and .tp extension is useful because I can write lists of projects and things to do in Drafts on iOS without having to mess around with apps and ticking boxes and so on.
The trick which Gabe explained relates to getting hierarchically sorted task lists from Taskpaper into Omnifocus. It's as simple as copy-->paste. So I can go from something complicated in Taskpaper like this:
to a set of tasks like this in Omnifocus:
It's a great tip, and a great time-saver.
Pet Peeve: Tech Switching
I read a decent amount of tech media/press. Barely a day goes by when there isn't someone in my RSS feed explaining how they dropped application X for application Y. This seems to happen most often for frequently-used applications or workflows like scheduling/calendars or email.
I won't call out the specific blog post that set me writing this post, but suffice it to say that I wish there was a clause (in the contract of life) forcing tech writers or bloggers to state why the application they're singing the praises of is better than the one they were using up to now. Specifically, are there any new features, or does it just look shinier? Also, have you been using it for longer than a day or two?
I'm pretty solid and stable in the applications I use. It'll take something pretty seismic to rid me of DevonThink or Tinderbox or Mailmate. But if you catch me flip-flopping in my tech-related writing, please call me out on it.
Dinner Party Decision Matrix: A Python Tool
Some friends were coming round for dinner this evening and I couldn’t decide what to cook. I couldn’t decide because there were too many variables floating around that would impact the decision.
So I decided to make an app.
I wanted something tasty but that also was relatively hassle-free. I wanted something that didn’t take too much time to prepare, but it still needed to be different from the kind of food I’d cook in a rush at the end of a long day.
I’d come across the idea of weighted decision-making a while back, and really like its premise; you say how important various factors are to you and then rate all the different options according to those same factors. At the end, you’re left with a score that can be said to be more objective than just your gut feeling.
So yesterday morning I listed a bunch of the factors that were important to me in coming to a decision about what to cook. I figured I could get some coding practice by making a tool that would work to calculate the best option from any combination of choices.
I put the finishing touches on the decision-making tool this morning. You can check it out on Github, though you’ll need to know a little about how Python works to get it going for yourself. I’m fairly sure my code looks horrific to a seasoned professional. There are probably ways I could have standardised the flow of questions and improved the output, but for now, I’m satisfied.
The app ended up picking the following for dinner (photo below):
- Courgette, chickpea and feta filo pastry pie
- Roast beetroot and pistachio salad
- Kale, pomegranate and shredded chicken salad
- and a beetroot and chocolate cake
I learnt a bunch of things about Python while coding the tool:
- When you run a x= raw_input(“Ask question here”) command, the information allocated to x will be in a string format. If you are collecting numbers, you’ll need to convert it to an integer format by using int().
- Lists and dictionaries can be tricky, particularly when you’re looping over them or looping over certain keys etc.
- It helps to test while you code. This particular function wasn’t too complex to understand, so I just pushed on without testing so much. At some point towards the end, I realised something in the middle was wrong: cue much debugging. I keep reading about the importance of having in-built tests. I’m not sure what that would mean / have meant in the context of this particular app, but I imagine I’ll find out in due course.
- Coding is fun and appeals to the compulsive side of my brain. I rarely need to be urged back to the task at hand when I’m coding. This probably has something to do with the quick feedback loop that coding enables. In any case, I’m hooked (again).
Talking DevonThink with Gabe Weatherhead
I’ve been on a bit of a DevonThink kick these past weeks, and the catalyst for all of this was a conversation I had with Gabe Weatherhead (@macdrifter over on Twitter, though that account is no longer active).
You can listen to the full episode on your podcast player of choice or over on the Sources and Methods site. Towards the end of the episode we get into the weeds on how he uses DevonThink Pro Office and several other pieces of software. I’m looking forward to hearing Gabe’s much-anticipated appearance on MacPowerUsers in January, since I imagine he’ll go into even more detail there.
We also discussed social media and some of the ways he found himself drifting away from commonly-used sites like Facebook and Twitter. For me, this was the most interesting part of the podcast.
Django vs Flask
I am diving back into the coding of my language-related web tool, as I mentioned a few days back. In and of itself, the functionality is quite simple, but there are three parts that have to all work together, so it’s harder for me to put it all together than I had expected.
One of the decisions I’m currently mulling over is whether to use Django or Flask to allow my Python code to interact and get displayed on the website. For those of you who aren’t familiar with coding and how websites work, these two frameworks are what allows me to write the bulk of the tool in Python, but then use either Django or Flask to display it on the web and interact with the web server. (I realise I probably butchered that explanation.)
Django seems to be what most people recommend I use, in part because it comes with a number of useful things built-in. As a result, or maybe independently of that, it has a steeper learning curve and feels like a larger proposition than perhaps I need for my (somewhat small) project.
Flask is pretty basic and pared down. It doesn’t contain all the bells and whistles that Django offers, but as a result it’s easier to get your head round and make a working prototype sooner.
If I had a bit more time, I think I’d go with Django. The user community seems bigger and I’d probably end up using the built-in features, but Flask allows me to get a working prototype hosted somewhere much faster and thus seems like probably the option I’ll choose.
For now, I’m getting a bare-bones Python-only version of the tool ready, then I’ll hook that up to Flask and see how that interaction works.
DevonThink Resurgent
There has never been a better time to get into DevonThink and Tinderbox. Winterfest 2016 is on, and you can get 25% reductions on both those apps, as well as a number of other really useful pieces of software like Scrivener, TaskPaper, Bookends, Scapple and PDFPen.
If you’re unsure if DevonThink is something you’d be interested in, they have a 150-hours-of-use free trial for all their different apps. MacPowerUsers podcast just released a useful overview of the current state of the app — an interview with Stuart Ingram. ScreenCastsOnline also published the first part of a trilogy of video learning materials on DevonThink.
If you’re a Mac user who is perhaps uncomfortable with Evernote’s privacy policies or just seeking to get more out of the data you’ve stored on your hard drive, give DevonThink a try.
Notification Zero
As I reach the final stages of a major project, I’ve been saying ‘no’ more often. I’ve been turning down work, conferences and all the little things that take away from my ability to focus for hours at a stretch.
The other day I realised that my usual clampdown on notifications on my various digital devices wasn’t as tight as I ideally prefer, so I turned them all off. (You can read how to turn off iOS notifications here, and Android notifications here.) I’m writing down the various parts of this in case it’s useful to someone else in the midst of a big project.
In practice, this means the following:
- no badges on apps on my screen. (The software on your phone is designed to be addictive, to make you spend more time using it. I already live my life in black-and-white so that’s a start, but removing app badges is the next step.)
- permanently set to airplane mode. (This is easy for me as my work or life doesn’t ever really involve receiving phone calls, but it removes the chance of business / telemarketing distractions.)
- all other apps’ notification permissions turned off. (If someone messages me on WhatsApp or Signal, I will never ever get a notification about it. My phone won’t make a noise, nor will there be any badge showing that there are people who tried to get in touch with me. The only way I’ll ever see if anyone wrote to me on a messaging app is to open up that app. I do this perhaps once a day, sometimes only a couple of times a week, but I’ve conditioned myself to this level of withdrawal over the past year or two).
- Email permanently disabled on my phone. (Email is the big focus killer. If I generalise, it amounts to a box of other people’s requests on my time. So I have no way to receive email on my phone. I have things set up that I can send email (i.e. I’ve installed the SMTP login details but not enabled IMAP), but no way to receive it.)
I have a fixed schedule for things like checking email: two windows from 12-1pm and 5-6pm. Outside those windows, my email is disabled (using Freedom) so there’s no way for me to access it. On my laptop, a whole bunch of other sites whose addresses are easy to type and get lost on, I pre-empt my worst self by just disabling them during the day. Problem solved.
Whenever I write a post on this blog, it auto-posts to Twitter, Facebook, Linkedin and Tumblr. While the temptation might be to check to see who has commented on it and so on, by locking myself out on a specific schedule, this means I can choose to look at these things at the end of the day, if I really need/want to.
Daddybot
I just finished listening to a fascinating episode of Nerds on Draft podcast. Gabe and Jeff, the usual cohosts, spoke with Erik Hess about how he set up a telepresence robot (as pictured) in his house while he was deployed halfway around the world.
It’s worth listening to the whole podcast to get a sense of how this worked out. Erik talks of the initial weirdness of being present in his house in the US while actually being in Qatar. It was fascinating to learn how quickly that turned into the new baseline — i.e. to his children, it became as if he was actually there.
For families or situations where parents have to be away from children on any kind of regular basis — or whatever particular configuration your life takes — it seems that this is a really intriguing idea. It certainly isn’t cheap, but it’s also impossible to get back that time with your children either.