Engineering and technology notes

TinyGo Brings Go To Arduino

Go — a modern programming language with roots at Google — is one of the new generation languages that would like to unseat C (and C++) for what we think of as traditional programming. It is only for PCs, though, right? Not so fast! TinyGo provides a compiler that — in their words — is for small places. How small? They can target code for the Arduino Uno or the BBC micro:bit. It can also produce code for x86 or ARM Linux (both 32- and 64-bit) as well as WebAssembly. They claim that a recent project to add ESP8266 and EPS32 support to LLVM will eventually enable TinyGo to target those platforms, too.

As you would expect, there are some subtle differences between TinyGo and the full-blown version. The compiler handles the entire program at once which is slower but offers more for optimization. Certain optimizations for interface methods are not used in TinyGo, and global variable handling changes to accommodate moving data from flash to RAM efficiently. TinyGo passes parameters in registers.

Other changes are more profound. For example, there’s no garbage collection yet, so you are urged to not perform heap allocations after initialization. There are also a few other major features not supported. Concurrency in the form of goroutines and channels, cgo, reflection, and three index slices won’t work. Maps are available, but only with certain key types. Because of the missing pieces, many of the packages in the standard library won’t build.

Of course, the other modern language in the same position is Rust and if you were wondering why Go instead of Rust, there’s an FAQ for that. Do you need Go on the Arduino? Maybe not. However, if you are a Go programmer, maybe this opens up some possibilities for you.

TinyGo Brings Go To Arduino

linux – How to use ffmpeg to encode a file with possible error?

I have a video file, which contains some error. The file is readable, but possible some blocks are wrong during some disk operation. So while playing the video, a few seconds will no be displayed correctly. Most media player will let me play this file without crash.

Now I want to use ffmpeg to encode the file into some other format. But the re-encode process is blocked by that error.

I want to know if there’s anyway to let ffmpeg to ignore that error, just like the media players. It can just ignore/skip that few seconds, and continue working on the rest.

  • The player might have different error concealment methods. To my knowledge, there’s no such option. If the stream is incorrectly parsed, FFmpeg will rather quit than produce garbage. Can you add the full output log of such a conversion you’re trying?

The simple solution I found, is to use the -ss option to skip the place that have errors.

https://superuser.com/questions/556192/how-to-use-ffmpeg-to-encode-a-file-with-possible-error