Dec 19, 2017
Dec 05, 2017

I don’t tend to enjoy the format of inspirational bullet point posts so popular on Medium. Reading the first bullet point of this one resonated with me though.

The more you achieve, the more you will want to achieve. The more you will want to achieve, the easier it will be to see others as “below” you — and push them away. The more you push them away, the smaller your circle gets. The less opportunities present themselves. The more you begin to live in emotional isolation. The less opportunities present themselves, the less you can become externally successful. The more you begin to live in emotional isolation, the less you feel fulfilled. Success, and the constant conquest of, is a paradox. The bigger you get, the harder you need to work on remaining small.

When I look back just a few years, I’m amazed how naive I was. I’ve had my best life experiences from taking adventures into the unknown, but with no fear or worry only a desire to experience. Looking back it seems almost insane that I didn’t worry, but I didn’t.

Being naive can be your biggest asset. It keeps you excited about what you’re doing, as you don’t see the cliff at the end of the road you are heading down. Being excited gives you the energy and cause to continue learning. Continued desire to learn and excitement about what you’re learning keeps you interacting with new people in a meaningful way. It’s a wonderful self-propelling cycle of AWESOME. As a get older the hardest task seems to be finding that naivety and wonder within the monotony of a day job.

Sep 04, 2017

I think the lack of reusability comes in object-oriented languages, not functional languages. Because the problem with object-oriented languages is they’ve got all this implicit environment that they carry around with them. You wanted a banana but what you got was a gorilla holding the banana and the entire jungle.

If you have referentially transparent code, if you have pure functions — all the data comes in its input arguments and everything goes out and leave no state behind — it’s incredibly reusable.

Joe Armstrong, creator of Erlang, on software reusability.

Aug 28, 2017

I’ve greatly been enjoying the style and material presented by Kurtzgesagt. Well worth a watch on occasion.

Aug 21, 2017

For my degree in Computer Science, I write a lot of math papers. Typing mathematical formulas on computers is not a common task and hence the tools around it can be a bit finicky at times. The most common format is LaTeX, which provides a lot of expressiveness. For all the nice things about LaTeX, it cannot be said to be terse. After writing in LaTeX for some months I got fed up and searched for an alternative. All I wanted was Markdown with the ability to include mathematical formulas.

Turns out that very thing exists, it’s called Pandoc. Granted Pandoc does many other things, but this is how I use it. It’s super simple I can just write Markdown and if I need the power of LaTeX I can just type valid LaTeX and it will work. Since my papers are mostly text this provides a far superior writing environment for me. However, there are a few gotchas.

## Installation

Instructions are availible on their website, but on OSX brew install pandoc. You can then convert Markdown to PDF using pandoc -o output.pdf input.md

You might be used to using $$...$$ and $...$ in LaTeX. Pro tip you can also used $ which is easier to type and looks more Markdown native. # Title Some text$\frac{1}{2}$with an inline equation. And an equation centered on it's own line: $$c = \sqrt{a^2 + b^2}$$  ## Import LaTeX packages It happens frequently that I need character sets that are not part of standard LaTeX. For this you need to import LaTeX packages. It can easily be done with a Markdown header: --- header-includes: - \usepackage{cleveref} - \usepackage{stmaryrd} - \usepackage{mathtools} - \DeclarePairedDelimiter\ceil{\lceil}{\rceil} - \DeclarePairedDelimiter\floor{\lfloor}{\rfloor} --- # Section ![A Markdown logo\label{markdown}](markdown.png) See \cref{markdown}.$\llbracket \phi \rrbracket = T\ceil{n/b}$or$\floor{n/b}$ Picked up that trick here. ## Sizing images When using traditional markdown syntax for images they will fill to expand the width of the page if the image is large enough. Most of the time this is not what you want as the reader will lose the context of the image and the text surrounding it. Fixing this is luckily simple. ![image](foo.jpg){width=50%}  Rather annoyingly you can’t force the image’s position which is often needed in LaTeX. Docs Aug 14, 2017 This post really resonated with me and a lot of my engineering friends. It humoristically puts a spotlight on the fact that engineering interviews tend to over index on skills that while important to understand doesn’t exactly constitute the majority of our day to day work. Aug 09, 2017 Originally posted on Medium. At DueDil we’ve been working with GraphQL for the better part of a year now. We’ve learned a lot on this journey and would love to share some of our lessons learned with the community. One of the first things we wanted to know was which server library to use. An important decision metric is the level of GraphQL spec compliance. In order to quantify this, we created a small suite of integration tests that was constructed to test all aspects of the spec. We then implemented the same sample schema in multiple libraries and were able to discover incompatibilities early on. This really helped us out in weeding out immature implementations that were claiming compatibility with the spec. However, the integration testing tool we created was generic enough that we could late use it for integration testing of our business logic in our final GraphQL server. It’s a tiny Python script, but it’s rather useful so we thought we would share it. ## Test format file: suite_one/example.test query Example { a { b } } <===> { "data": { "a": { "b": "Expected test value" } } }  Tests are written simply as a query and an expected response wrapped up in one file (separated by <===>). You can optionally use variables as well, I would suggest looking at the README for the full list of options. It runs all your test files in parallel by default. But you can choose to narrow it down to a single suite of tests, a single test or tests matching a pattern: gqltester 'http://localhost:8000/' suite-name gqltester 'http://localhost:8000/' suite-name/example\*  Again this is an extremely small python script so don’t expect anything too fancy. But it does have two neat features that we’ve found very useful. ## Replace test expectations on data changes Integration tests relying on dynamic data have a tendency to break as data is modified. These false negatives are frustrating to deal with. You could try to avoid this by having static test data, but it’s not always desirable. The -r option will replace all failing tests’ expectations with whatever is currently output by the GraphQL server under test. So you can run the tests against a known green commit with the option and get rid of these false negatives. A typical workflow for tests with dynamic data becomes running the tests with -r prior to making modifications. ## Regression testing against production It’s not uncommon to have different data in your testing environment and production. You will probably want to write your test expectations using testing data to prevent disruptions to production service because you’re running tests. But what happen when you’ve staged your new code and are ready to deploy? You can’t run your test suite against the staged instance as it’s using the production data. gqltester --regression-server='https://production.acme.com' 'https://staging.acme.com'  Allows you to run all integration tests against the staging server but using the responses from production as the expectations. You can now verify that no regressions were introduced in the code you are about to deploy. We hope others will find this useful. You can find the project on github. Aug 03, 2017 Just finished reading Black Hole Focus. It’s rather well written to inspire action. But the fundamental principles in it boil down to visualise success, break how to get there, remind your self on a daily basis what success looks like. A good summary can be found here. But here are my cliff notes: The best inspirational story in the book was in my opinion this: In the 1950s, Curt Richter, a Harvard graduate and Johns Hopkins scientist, did a series of experiments that tested how long rats could swim in high-sided buckets of circulating water before drowning. Dr. Richter found that, under normal conditions, a rat could swim for an average of 15 minutes before giving up and sinking. However, if he rescued the rats just before drowning, dried them off and let them rest briefly, and then put them back into the same buckets of circulating water, the rats could swim an average of 60 hours. Yes, 60 hours. If a rat was temporarily saved, it would survive 240 times longer than if it was not temporarily saved. This makes no sense. How could these rats swim so much longer during the second session, especially just after swimming as long as possible to stay alive during the first session? Dr. Richter concluded that the rats were able to swim longer because they were given HOPE. best source I could find # Visualise success ## Your Core Principles Which things do you currently value about/in your life? Which of your strengths/traits are you proud of? Which of your strengths/traits have helped you achieve your current success? Which traits do you admire in others? Which traits do you desire? Write down your answers to these. Now based on this write down your “core principles”. That is 6 words describing your future self in terms of traits. Independence, vitality, success, toughness, relationships, openness, contribution, etc. ## Your story Write a list of all the things that inspire you. Condense it to common traits of inspirational words. Write a condensed blurb of your current story. That is who are you? Now change this story to the future story you desire. Then rephrase it to use your inspirational words and core principles. ## Your slogan Condense your story into a one sentence slogan. ## Your meme Condense your slogan into 1 word that inspires and motivates you. ## Your vision board Create a vision board and put it somewhere you will see every day. # Break down how to get there Work backwards from your ultimate goal, your future story to monthly actions. # Remind your self on a daily basis Look at your vision board, repeat your story and slogan on a daily basis, use your meme as motivation throughout the day preferably with the rest of your team. # 10.000 hour rule You’ve probably heard that gaining expert level proficiency takes 10.000 hours before. One interesting point in the book was that you perform activities that work towards multiple of your goals. Say you wanna be better at public speaking as well as stay up to date on a topic. Read research papers our loud while focusing on your delivery. Aug 02, 2017 Source Jul 27, 2017 I recently started following Kevin Rose’s The Journal. He’s one of my heroes and he’s churning out great content I can highly recommend it. One such piece of content was linking to this “The Japanese Art of Self-Preservation, damninteresting.com. I’m a great fan of Japanese culture and thoroughly enjoyed visiting earlier this year. Even then it surprised me that mummifying your self slowly over years was an actual real world phenomenon attempted by hundreds of monks. Do your self a favour and give it a listen. Jul 23, 2017 I originally saw this video 2 years ago. It’s incredibly satisfying to see the simplicity of the techniques. Furthermore, it is an ingenious display of how far we can come share knowledge and built on top of the work of the people before us. I find that rather inspiring. Little did I know that 2 years later this guy is still going strong and has a flourishing youtube channel with an abundance of amazing videos. Jul 21, 2017 Found through Swissmiss Jul 14, 2017 Made me smile. Source found through swissmiss. Jul 13, 2017 This however left me with two questions: • What would the impact be of reducing methane emissions from ruminants? • What does the economics of making it happen look like? # The impact of reducing methane emissions CO2 is not the only greenhouse gas, but the most significant and therefore justifiably get’s the most attention. As a result CO2 emission growth has by some estimates stalled in the last 3 years. This is by no means a guarantee that we’ve reached the peak, but it’s encouraging. The second most significant greenhouse gas is methane. CO2 constitutes 82% of the greenhouse gas emissions where as Methane is only 9%. However, methane traps up to 100 times more heat than CO2 within a 5 year period and 72 times more within its 12-year atmospheric lifetime. For this reason, methane actually accounts for 20% of the total radiative forcing. This sounds encouraging, but CO2 has a 200-year lifecycle in the atmosphere, so we need a better metric to compare the two. Global Warming Potential (GWP) is the recognised metric for this. The GWP of a greenhouse gas is defined as “the [cumulative] radiative forcing from the instantaneous release of 1 kg of a trace substance relative to that of 1 kg of a reference gas”. The reference gas is almost always carbon dioxide… Source Right knowing this it should be fairly clear that all other things being equal if you could spend the same amount of money to displace 1 tonne of emissions of either CO2 or Methane you should go for the methane. But how much of methane emissions come from ruminants? in other words, would a reduction here be a good idea? To which the answer is ≈14% and yes respectively. To put that into perspective. The concentration of methane in the atmosphere is only increasing by 22 Mt per year. Anthropogenic Ruminants (that is cattle, sheep, etc. raised for Human consumption) account for roughly 50-100 Mt per year. Feeding cows ruminants could lead to a stagnation of methane concentration in the atmosphere. # Economics of feeding cattle seaweed ## How much would we need? Seaweed production globally is booming, with more than 25 million tonnes (measured when wet) farmed each year, which is about double the global commercial production of lemons. Producing enough Asparagopsis to feed 10% of the almost 1 million feedlots and 1.5 million dairy cattle in Australia would require about 300,000 tonnes a year, and millions of tonnes if it were to be scaled up globally. With selection and breeding of seaweed varieties for higher bioactivity, this figure could come down, but perhaps only by half, and it would still require large areas of land and water. With typical seaweed production rates at 30-50 tonnes of dry matter per hectare, this suggests that to supply 10% of the Australian livestock industry will require at least 6,000 hectares of seaweed farms. source To put that into perspective. The global cattle population is closer to 1 billion. If the goal was to feed 2% seaweed to 10% of cattle globally we would need 12 million tonnes a year. Which translates into 240.000 hectares of seaweed farms. That’s 240.000 Rugby fields apparently or just shy of Funen the third largest island in Denmark. If we wanted to produce enough for all cattle the area would be more like the size of Sicily. ## Where can we produce it? I couldn’t find any information on the environment suitable for asparagopsis taxiformis nor examples of commercial farming. The closest I could get was commercial farming of Asparagopsis armata in Ireland. Suggesting it would be less limited than I would have anticipated. But seaweed is typically not grown at depths deeper than 7 meters, which does complicate locating farming area. Production is currently very labour intensive as no commercially viable machines have been built for automating or semi-automating the production at scale. Again eliminating countries with high labour costs from the pool of viable area’s for farming unless advances were made in automation. ## What would be the cost in time and money to set that up? I’m gonna assume that production of seaweed will be no-more expensive for the environment than producing the current fodder for the animals. The remaining interesting figure is the unit price. I found a great article about the cost of farming seaweed in the North Sea versus more traditional area’s of farming. Yearly costs per hectare for Nordic facilities: $18,594 Fixed cost
$418 Labour cost$1,380 Harvesting cost
$570 Transport cost$13,800 Material cost
$690 Maintenance cost$135 Insurance cost
=
$35,587 total cost  This is 3x the cost of facilities in South East Asia. Each hectare is estimated to produce 20 metric tonnes of dry seaweed (it should be noted that this number is significantly lower than the 30-50 tonne per hectare cited earlier). So in South East Asia each tone should be roughly ≈$600.

We needed 12 million tonnes a year to feed 10% of the global cow populous or $720.000.000. ## Can we get farmers to buy it? Around 15% of feed expenses are lost in methane emissions. As feed is the primary expense for livestock farmers, this is no small problem. source That should recoup the cost of the seaweed right there. Secondly, seaweed has been linked to health improvements in cattle in the past as well. Reducing the need for antibiotics (granted they are cheap), but it’s an important marketable improvement. Thirdly it should be possible to lobby for getting carbon credits for reducing methane emissions which could then be sold. Fourthly there are bound to be environmentally conscious consumers willing to pay a premium for meat sourced in a way the hurts the environment less. # Appendix A few interesting tidbits I learned while researching this. Methane concentration in the atmosphere has actually had a relatively bigger increase than CO2. source Deforestation accounts for 10-25% percent of global warming depending on the year and who you ask. But nowadays closer to 10%. Roughly 30% of methane emissions come from bacteria in wetlands. The bacteria produce the most methane at 37-45ºC so the current trend of increasing temperatures could increase methane emissions. Although currently neither a source nor a sink, methane hydrates are by far the largest store of methane on the planet and account for 53% of all fossil fuels on earth. An increase in temperature could cause large parts of these deposits to be released into the atmosphere as the arctic permafrost melts. Further reading: Jul 12, 2017 It happens once in a while that a colleague mentions their text editor of choice choking on some large file. Whenever this happens I’m reminded of this excellent series of posts in the docs of the xi text editor. It is a stellar example of the importance of choosing your data structures carefully and reframing a problem until you’ve found the simplest solution. I highly recommend giving it a read even though it is quite long. I’m in awe of the level of details in these docs. Furthermore, it is a great introduction to the subtle but really hard problems required to create a modern text editor - that you probably never considered. Jul 11, 2017 Having worked on a framework for efficient data resolution for the last couple of months I greatly enjoyed this talk by Simon Marlow from Facebook ( Haxl: Making Concurrency Unreasonably Easy). The problem space is quite different from ours and the solution isn’t viable for us, but it’s none the less inspiring. TL;DR Facebook’s Haxi framework for Haskell coupled with a compiler pass allows your data fetching to be cached and parallelised transparently. The compiler converts your Haskell to use Applicative operators, from there on Haxi is allowed to parallelise the data fetches as it desires. It certainly reduces the level of complexity for such a system quite substantially when you have a language that supports asynchronies calls (not PHP :D) Jul 10, 2017 Through one mean or another, I end up rereading Kent Beck’s amazing article “Mastering Programming” every few months. It perfectly synthesises the traits we should try to incorporate into our day to day as engineers. • Focus on one small measurable task at a time. • If a change is hard; refactor the system before making the change. • Create a minimal reproducible test case preferably as an automated test. • Make it run, make it right, make it fast. • Focus on your personal growth, the 80/15/5 rule is a good approximation. Jul 16, 2016 Remember this guy? He’s been busy since then. This guy truly an insperational speaker with a very unique style of communication. Jul 16, 2016 Siemens made a press release about their new and super weight efficient electric engine for used in planes. None of the coverage I read really put it into perspective. This engine has a power-to-weight ratio of 5.2, but what is that relative to other engines? Here’s some simple calculations: Motor kW kg kW/kg Merlin Rocket Engine 7457 68 109.66 Tesla Model S 270 32 8.44 Tesla Roster 215 32 6.72 Siemens 260 50 5.20 McLaren 12C 441 200 2.21 BMW 5M 423 228 1.86 Honda Accord 114 190 0.60 Which goes to show that these electric engines are super weight efficient compared to traditional combustion engines used in cars. That there have been huge leaps recently in increasing that lead. But lastly that this Siemens engine is already out shadowed by Tesla’s engines. Perhaps I’m missing something about other characteristics important for flight? Update from Hacker News: Do the 32kg include the inverter and reduction gear? My guess is that with those included it weighs AT LEAST 100kg, probably closer to 200kg. Interesting, that would put the power to weight ratio down to combustion engine levels. I found this http://www.teslarati.com/tesla-model-s-weight/ that supports your thought by putting it at 150 kg. I can’t find any details on what Siemens includes in their weight figure Well they don’t have a transmission so that shouldn’t be a concern. is able to continuously output 260kw, the Tesla motor isn’t even close to that. I’ve personally tried it a few times on the Autobahn and the Tesla limits the output to about 100kw (displayed) after less than a minute of full throttle. In did try to correct for this sort of thing by picking one of the lower kW ratings for the Tesla. I was not aware it was that drastic. If we account for this the Tesla is almost in Honda accord territory. That’s rather disconcerting given Musk citing figures like the ones I outlined. https://youtu.be/PULkWGHeIQQ?t=41m30s ## Sources The quality of the number get’s increasingly more questionable as you go from Tesla down to Honda’s. I had to approximate the Honda engine weight assuming a 40kg transmission. The numbers are less interesting though, it’s more so the order the rough relative differences between the engines. Jul 11, 2016 Really impactful video in just 2 minutes. You should never assume status prevailing wisdom to be a fact of life. There’s always a different way of doing things. Surely streets have names in every country of the world? It’s the only way that makes sense? Nope, Japan names blocks instead of the streets. Jul 09, 2016 I’m sure you’ve heard the old adage “It’s not what you know, it’s who you know.” Your network is strongly correlated with your success regardless of the metric your optimising for. The serendipity of the Valley is one of the things I miss the most. Go where events flow fastest. Surround yourself with a churning mass of people and things happening. I’ve yet to find a great venue in London with anything that remotely resembles SF. Everything you’ve ever heard about the Valley being special rings true. Most interestingly is how different the personalities are in the Valley. The valley is to a huge extent a monoculture with all the pitfalls that comes from being one. Just so happens that I fit in perfectly. The technical founders are far and in between here. I seldom meet people who have an interest for both business and programming. Anyways the conundrum of the London scene is totally unrelated to what I wanted to write about. I read a great piece about networking and your reach grows exponentially as your network grows. The Key to Luck Is Being a People Connector by Jocelyn K. Glei Let’s suppose you have first-name contacts – strong and weak links – with three hundred people. Let’s further suppose that each of them has an average of three hundred links. This means that your secondary links-friend-of-a-friend-would total some ninety thousand people. And your tertiary links-friend-of-a-friend-of-a-friend-would total twenty-seven million. Jul 07, 2016 I’ve effectively dropped out of the Laravel community in the last 3 years. I had an excuse to use Lumen last week and found the information on using Lumen without facades rather lacking. Here’s the trick, you need to register the manager into the service container. Uncomment $app->register(App\Providers\AppServiceProvider::class); in bootstrap/app.php.

In app/Providers/AppServiceProvider.php add register the manager and add an alias.

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
$this->app->singleton('filesystem', function ($app) {
return $app->loadComponent('filesystems', 'Illuminate\Filesystem\FilesystemServiceProvider', 'filesystem'); });$this->app->alias('filesystem', 'Illuminate\Filesystem\FilesystemManager');
}
}


Now you’re free to use the FilesystemManager through dependency injection.

<?php

namespace App\Http\Controllers;

use Illuminate\Filesystem\FilesystemManager as Filesystem;

class ExampleController extends Controller
{
public function index(Filesystem $filesystem) {$filesystem->disk('public')->put('test.html', '<h1>Teset</h1>');
}
}


## Using the public folder

Another nice feature of the Lumen integration of Flysystem is the addition of both local and public drives. One less obvious bit about the public drive is that you need to add a symlink between /public/storage and /storage/app/public your self.

cd ./public
ln -s ../storage/app/public storage

Jul 02, 2016

I never thought I was gonna go to university, simply didn’t believe it was worth the time investment, let alone any potential cost (it’s free in Denmark). To anyone thinking about taking a CS degree, I would suggest you think long and hard about what value it will bring you. Generally you will be better off by jumping in the deep end. Start coding and get a job. Don’t put off charging people money, you will be adding value before you feel it (Imposter syndrome is a thing).

But given the increased difficulty associated with moving to the US without a degree and my fondness for living in the Valley, I decided it was worth it after all.

I’ve been attending University of Copenhagen studying Computer Science for a year now. Although the course is a regular in-person course, I’m attending it remotely from London where I work. People thought I was crazy for attempting this, but here’s my thoughts 12 months in.

## Students have it easy

Considering how many people warned me it would be impossible to study remotely and maintain my day job, I’m delighted to report that it’s been relatively easy.

I would say I’ve spent 2-3 hours a week on it on average, but it’s been lumped in larger chunks meaning most weeks were uni free while others involved 8-12 hours of cramming to get a big project finished. It would be interesting to have a log of how many hours I use for next year, as I have a strong bias for remembering these numbers as lower than the actual time usage. I seemingly only used 100 hours, let’s say 150 for any bias of mine, on a 1600 hour course load — not bad. Something suggests to me that students could be pushed more, although my prior knowledge of computer science obviously is a huge unfair advantage.

## I’m starting to appreciate the value CS fundamentals

I’m still bullish on university being an ineffective use of time. But it does force you to learn non immediately practical skills that I’ve come to appreciate.

It forces you to read/write new languages. Last year the only new language I picked up outside of university was Swift which honestly isn’t that big of a divergence from my past experience. At university I’ve been forced to write more F# and Python that I ever otherwise would have. It’s been interesting to spend some time in a functional language and it definitely forced me to think differently about writing code.

It forces you to do math. I’m not gonna claim that I will apply much of this in my day-to-day life. But it’s certainly been interesting although challenging at times to expand my horizon mathematically. I’m probably not gonna write an induction proof for my code ever again, but having a better grasp of Vectors and Matrix’s have already come in handy when discussing Data Science and Machine learning.

It forces you to read algorithms. Depending on what kind of programming you do the particular algorithms might seldom be useful. But to grasp and discuss algorithms you need an understanding of Big O and data structures that’s incredible useful. “incredible useful” remember most apps can scale pretty far with the most basic of engineering, but obviously there’s some personal pride in doing things in a better way.

It forces you to read. Granted I skipped a lot of the course material. But I did enjoy books like Agile Principles, Patterns, and Practices in C#, Introduction to Algorithms and Code Complete. I probably wouldn’t have taken the time to read them otherwise, at least not this year.

## Universities are run by students

It’s been very surprising to me that I’m almost exclusively contacting TA’s when I want to get information about the course that isn’t available online. Luckily for me this makes it super easy to fly under the radar when it comes to never going to class.

I do find it interesting how bad the online tooling is at my university. Since it’s free in Denmark you would think they have an incentive to publish lecture video’s and materials freely online. That is certainly not the case, and I would honestly prefer a FTP server to their intranet software. I think it’s a huge lost marketing opportunity, not to mention an opportunity for improving society.

## Education is ripe for disruption

Fundamentally what you need to learn is a curriculum and social pressure to finish — that’s it. The curriculum can be produced once and shared world-wide and the social pressure can be designed and crowdsourced. The incumbents cost THOUSANDS of dollars and takes far longer than necessary. There are loads of coding schools out there. Udemy and Khan Academy are doing great things as well.

Khan Academy is the best source I found for learning math. My problem with Khan Academy is that the courses are not granular enough, don’t provide enough background on why subjects should be learned and doesn’t have enough assignments to secure retention. Also it doesn’t provide social pressure, but that’s not its goal either.

I think someone has the opportunity to create a self-sustaining community of students that offers:

• A broad and incredibly deep curriculum by stitching together what already exists out there in a more pedagogical way. The key is to have courses that are 80% overlapping, but really focus on engaging the students for what they’re specifically trying to learn in the last 20%.

• Social pressure through peer-to-peer assessments and weekly group sessions.

Perhaps a thought for the future, I know lots of smart people are working on the problem.