405 karma · joined August 27, 2013
The fundamental requirements were things like: at least X dB main lobe gain, electrically steerable to any point within a the cone 60 degrees off of azimuth, total physical size less than .5 m^2, operates at Y.YY GHz with resonant bandwidth of Z.ZZ GHz, etc... The design my team went with was an array of microstrip antennas with a network of phase shifters to electrically steer the signal via beamforming. It's actually quite amazing what you can do if you just get the right shape of metal to vibrate at the frequencies you pump into it. Antenna design is a wonderful confluence of mathematics, design and black magic.
2. It does deliver some benefits, but not all. Truly clockless design is desirable in some cases due to power concerns; for example the Novelda Xethru ultra-wideband radar SoCs are actually clockless, because power distribution networks can account for 20%+ of the power consumed in chips like this. (This is what I've heard, I don't have a citation for this. The paper I quote below similarly handwaves and throws around numbers from 26% all the way up to 40%, but they don't do any analysis of their own on this)
I've never used a clockless CPU design before, but the theoretical advantages are listed out quite nicely in this paper [0], which lists (among other things) the natural ability for the CPU to sit at idle (not executing `NOP` instructions, actually idle) when no work is available. It appears that the AMULET 3 processor (which is compared against an ARM 9 core) is competitive in power consumption, but doesn't quite stand up in performance. While still pretty impressive for a research project, this shows that we do still have quite a bit of work to do before these chips are ruling the world (if, indeed, we can scale up our tools to the point that designing these isn't just an exercise in frustration).
[0]: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.83....
$ time ipython -c '1+1' Out[1]: 2
real 0m0.493s user 0m0.401s sys 0m0.063s
$ time julia -e '1+1'
real 0m0.222s user 0m0.115s sys 0m0.101s
Yes, python itself is still much faster. I compare against ipython just because that used to be my go-to interactive shell for technical computing.
> Note that FFTW is licensed under GPLv2 or higher (see its license file), but the bindings to the library in this package, FFTW.jl, are licensed under MIT. This means that code using the FFTW library via the FFTW.jl bindings is subject to FFTW's licensing terms.
If you have an idea on how to make that clearer, we would be happy to review a PR to the FFTW.jl repository.
There is research going on right now to build native camera systems that emit data (at the hardware level) that is not dense but rather sparse; information is transmitted as "blocks of pixels that changed between frame two and three" rather than "here is the state of all pixels at frame two, and here is the state of all pixels at frame three". In essence, doing a small amount of delta compression within the hardware itself.
This seems like a really natural fit for an application such as this one; and could potentially cut the amount of data needed to be paid attention to down by orders of magnitude.
Many of these ideas are similar to what is used to compress video down in the first place; it would be interesting to see a combination of video compression technology and "region of interest" ML pruning, where the ML models are applied only to interesting regions, as identified by the compression codec. The codec already has done the analysis to figure out which portions of the video have changed, which portions of the video are simply shifted versions of information from the last frame, etc.... You could significantly speed up ML analysis by making use of that kind of information.
In either case, the technological breakthroughs we would need in order to actually generate a useful atmosphere are large enough that I would be very excited to just see the byproducts of such breakthroughs.
The particular chapter I was thinking of was named "The Worm Turns".
The water analogue was Eric Larson's Ph.D. work, and was much more difficult from a DSP perspective due to two separate issues:
* When water is flowing without turbulence (laminar flow) it doesn't leave much of a signature on flow or pressure sensors
* Any kind of signature that does exist is often changed significantly depending on the network of pipes that stand between the single point sensor and the source of the water event.
For these two reasons it took a while for us to work out a high enough accuracy for the water stuff (in the end we used a water pressure sensor plugged in close to your water heater as a fairly central point that most people can access easily) and that was published as HydroSense [2]. We like our *Sense names. :P
HydroSense was indeed bought up by Belkin, and they are pushing it forward in a way that we just cannot do in academia, so that's a good thing. ElectriSense I don't remember exactly what the IP status of it is, but I do know at least one student was working on some interesting extensions of it that may be published in the next year.
[1] http://ubicomplab.cs.washington.edu/publications/electrisens... [2] http://ubicomplab.cs.washington.edu/publications/a-longitudi...
However, if your application requires things like the CPU architecture set is the same, or the amount of memory available to the process is the same, etc... then no, docker will not give you this level of "sameness". I have had bugs that manifested on one docker host and not another because one host had certain x86 extensions available (AVX, or something similar) and the other didn't, and this caused a certain codepath to be followed. However this is probably extremely rare for non-performance-targeted code, as most projects will compile for a conservative subset of x86_64 instructions so that they can run everywhere.
Anecdotally, I find learning the "Docker way" has transformed my development paradigm in a much more fundamental way than Vagrant ever did, mostly because docker containers are almost instantaneous to start, which enables their use for a whole range of applications that I would never have even considered for something like Vagrant. Because I can launch a docker container in ~300ms, I can use containers like native applications. I do everything from building software to compiling latex documents using docker just so that I don't have to worry about installing toolchains or configuring things just right; I get an image that does what I want, and then I invoke the docker containers as if I were invoking the actual tools themselves.
Docker is just a tool, but it's a darned powerful one, and it's pretty fun to see how it continues to evolve right now. I highly suggest you check it out.