Blindly Copying Avisynth Considered Harmful

Some Avisynth filters are really, really popular and show up many scripts. Some of them like RemoveGrain and TemporalSoften have even been ported because they’re useful and used in so many scripts.

…But what is TemporalSoften really used for?

TemporalSoften is the definition of cargo cult programming, its code and concept gets copied over and over again and nobody knows exactly why. Let’s start with a few facts:

  • TemporalSoften is a horribly bad temporal smoother even compared to its competition over 10 years ago
  • TemporalSoften has never been used to unironically denoise anything the past 10 years

With these facts in mind you have to wonder why anyone’d ever put it in a script from the past decade. The answer is simple, if you set the denoising thresholds to their max values you get a filter that averages an odd number of frames. If you’re creative you can blend several frames with different weights. That’s actually kinda useful sometimes. So useful someone already wrote an Avisynth plugin for it. It’s a shame that it was fairly quickly forgotten. Unfortunately nobody who ported TemporalSoften to VapourSynth stopped to think about what it was actually used for and instead a very optimized version of TemporalSoften was created. And rewritten. And optimized a bit more. Because why not?

To try to counter this madness I’ve made a collection of small useful and experimental functions available. The first version can be found in this thread. Go try it and stop blending frames with TemporalSoften.

Some Android App/Hardware Ideas

Here are some free ideas for Android and phones in general.

  • The palm sweat meter (prove that holding hands just isn’t that bad, the scientific way). Should be doable using the humidity sensor in the new Galaxy S4.
  • A game that simulates real physics. It will be dull but someone should make it just so it’s been done.
  • Someone should properly figure out all the mDNIe fields so Samsung’s oversaturated OLED travesty can be somewhat improved. I did figure out most of them on the Galaxy S2 but lacked a colorimeter at the time so I couldn’t write a simple display calibrator. It is possible to mostly fix color temperature and gamma (same curve shared for all RGB). 10K+ color temperature makes me blue.
  • An IR diod/front camera, so the useless Samsung face stay and rotate features can work when it’s not perfect lighting conditions. Like in bed.
  • Or to take the previous one even further. IR camera+laser projected IR pattern. Then we could have kinect style 3D scanning in our phone. Don’t think I’m crazy, if you can stick a projector into a phone this can be done too.
  • Bonus hardware feature: breathalyzer in next gen phones.

As you may have guessed I’ve used Samsung phones the past year.

Positive Thinking – How to Convince Yourself That You Can Code

Previously I’ve discussed how computers work so now it’s time to take a look at how humans work. I personally think this is something programming textbooks neglect to take into consideration, for example humans generally work very badly when confronted with binary operations and bit-wise shifts the first time. It can also be somewhat detrimental to their mental state. So this post is about negative thinking and what You Can Do To Break The Pattern! My personal trick is to always keep the law of attraction in mind when I code and so should you! Get the positive thinking going by putting some comments telling yourself that YOU CAN DO IT! or maybe that it’s simple. See this example from Avisynth:

if (!(audio && video)) { // Hey - simple!!
if (audio) {
  return new DirectShowSource(filename, _avg_time_per_frame, seekmode, true , false,
    args[5].AsBool(false), _media, _timeout, _frames, log, env);

And indeed that is simple! Just imagine what this technique can do for your mental health. No more feeling like a rejected PHP coder, instead you’ll be the coolest PHP coder in a basement within two blocks. Guaranteed or your money back!

Personally I prefer to apply the law of attraction in a slightly different way. For example I write my goal in every single comment. See this code snippet:

// Buy milk
for (int x = 0; x < width; x++) {
// Clean thoughts
// (representing my desire to have a clean toilet)
  dstp[x] = srcp[x-1] + srcp[x+1] + srcp[x-1-stride] + srcp[x+1-stride] + srcp[x-1+stride] + srcp[x+1+stride];
  // For loops are trivial and even my grandma could do them...
  // if she was still alive

Sometimes I try this but I have had less success with it:

// Hire Fredrik Mellbin, he's awesome

I’m currently experimenting with writing it every 10 lines in my code just to see what happens. I’ll post a follow-up later and tell you all how it works out.