<?xml version="1.0" encoding="utf-8"?>
<feed version="0.3" xmlns="http://purl.org/atom/ns#">
<link rel="alternate" type="text/html" href="https://gamma.unpythonic.net/"/>

<title>Jeff Epler's blog</title>
<modified>2014-06-22T17:56:37Z</modified>
<tagline>Photos, electronics, cnc, and more</tagline>
<author><name>Jeff Epler</name><email>jepler@unpythonic.net</email></author>
<entry>
<title>A Faster-than-light travel idea for SF setting</title>
<issued>2014-06-22T17:56:37Z</issued>
<modified>2014-06-22T17:56:37Z</modified>
<id>https://gamma.unpythonic.net/01403459797</id>
<link rel="alternate" type="text/html" href="https://gamma.unpythonic.net/01403459797"/>
<content type="text/html" mode="escaped">
According to general relativity there is no privileged frame of reference, and
faster than light travel leads to time travel paradoxes.</content>
</entry>
<entry>
<title>Concept: Using rolling shutter for digital IS</title>
<issued>2012-03-13T14:26:04Z</issued>
<modified>2012-03-13T14:26:04Z</modified>
<id>https://gamma.unpythonic.net/01331648764</id>
<link rel="alternate" type="text/html" href="https://gamma.unpythonic.net/01331648764"/>
<content type="text/html" mode="escaped">

&lt;div style=&quot;float:right;clear:right&quot;&gt;&lt;!-- 220px-Turboprop_Rolling_Shutter.jpg--&gt;&lt;div class=albumouter style=width:306px id=&gt;&lt;div class=albumimage style=&quot;width:226px;margin-left:40.0px;&quot;&gt;&lt;img src=&quot;https://media.unpythonic.net/emergent-files/01331648764/220px-Turboprop_Rolling_Shutter.jpg&quot;&gt;&lt;br&gt;&lt;span&gt;Rolling shutter image of propeller blades (from Wikipedia)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
I make no claim that this idea is original, but I wanted to write it down
anyway.

&lt;p&gt;Take an ordinary CMOS digital camera sensor with a &lt;a href=&quot;http://en.wikipedia.org/wiki/Rolling_shutter&quot;&gt;rolling shutter&lt;/a&gt; and since it only costs
a few cents, add accelerometers and gyros.

&lt;p&gt;Now, instead of merely capturing each row from the sensor into a finished
image, record each row from the sensor separately, along with its location on
the sensor and the time the capture started and ended; record this and the
accelerometer and gyroscope data.

&lt;p&gt;When you've got enough processing power available (in the camera if you have
it, on a general-purpose computer if you don't), use [the integral of] the
accelerometer and gyro data to estimate the orientation and position of each
row within a larger image, refine it by using any overlap between rows to
align them.  Once all rows have an initial placement, refine the placements
repeatedly until the best fit is achieved.   Paint all the rows onto a larger
canvas, trim the result down and interpolate at any spots you didn't cover.
&lt;a href=&quot;http://freecode.com/projects/ale&quot;&gt;ALE&lt;/a&gt; and &lt;a href=&quot;http://hugin.sourceforge.net/&quot;&gt;hugin&lt;/a&gt; have some excellent algorithms for these steps,
though there are probably some additional tricks and wrinkles when all the
input images are 1d.

&lt;p&gt;You can even incorporate multiple complete scans of the sensor in this way,
adding information without increasing smearing due to motion of the camera.
This information can either be used to reduce sensor noise or increase output
resolution using ALE algorithms.

&lt;p&gt;You could also do your best without having accelerometers and gyros: use any
simple motion estimate (such as zero between the first and second rows, and
the previous alignment-based estimate from row N-1..N for row N..N+1) as
input to the alignment step.

&lt;p&gt;Finally, an altered CMOS sensor that reads out in an interlaced fashion (or
other &amp;quot;non-linear&amp;quot; fashion) would be even better, because the first few rows
read out would be spread over the sensor, &amp;quot;pinning down&amp;quot; rows that are read
later.  For instance, if the initial stride is 16 rows on a 1024-row sensor and
the full exposure time is 1/8s then the basic geometry of the scene is captured
in just 2ms (relatively little motion being possible in this time) and
subsequent rows read will have the opportunity for overlap with both rows
&amp;quot;above&amp;quot; and &amp;quot;below&amp;quot; during the initial alignment phase.
</content>
</entry>
<entry>
<title>WWVB CRT mock-up</title>
<issued>2012-03-06T01:41:06Z</issued>
<modified>2012-03-06T01:41:06Z</modified>
<id>https://gamma.unpythonic.net/01330998066</id>
<link rel="alternate" type="text/html" href="https://gamma.unpythonic.net/01330998066"/>
<content type="text/html" mode="escaped">

The plan is to be able to watch the &lt;a href=&quot;https://gamma.unpythonic.net/01325805161&quot;&gt;leap second&lt;/a&gt;
on some manner of wwvb-controlled clock of my own making.

&lt;p&gt;To that end, Chris gifted me with a compact B&amp;amp;W CRT from Goodwill, and I picked
up a &lt;a href=&quot;http://www.batsocks.co.uk/products/Other/TellyMate.htm&quot;&gt;TellyMate&lt;/a&gt;, which can display 38x25 text on a TV.

&lt;p&gt;Ignoring for the moment the difficulty of receiving the WWVB signal when
all the interference from a CRT TV is right nearby, I've created a mock-up
of what the display will look like (except that the font won't be nearly so
good looking as this):

&lt;p&gt;

&lt;pre width=38 class=&quot;term&quot;&gt;

         0123456789
   0.. 9 M01100000M  Minute  = 30
  10..19 000000111M  Hour    = 07
  20..29 000000110M  YDay    = 66
  30..39 011000010M  DUT1    = +0.3
  40..49 001100000M  Year    = 2008
  50..59 100001000&lt;span class=&quot;cursor&quot;&gt;M&lt;/span&gt;_ nols LY nodst
   
  &lt;span class=&quot;twox&quot;&gt;Local time:&lt;/span&gt;
  &lt;span class=&quot;twox&quot;&gt;1:31:00.0 AM&lt;/span&gt;

  &lt;span class=&quot;twox&quot;&gt;Thu Mar 6 2008&lt;/span&gt;
  UTC-0600 (CST)
   

&lt;/pre&gt;

&lt;p&gt;At the top, the WWVB data is displayed, along with its interpretation.  The
previous minute and the current minute are mixed, with the cursor indicating
the most recently read second of data.  Whatever piece of data is currently
being read or will next be read will be blanked out until all bits are
received (for instance, during seconds 0..8, &amp;quot;minute&amp;quot; will be blank;
from 9..18, &amp;quot;hour&amp;quot; will be blanked).

&lt;p&gt;Most of the time the &amp;quot;_&amp;quot; shown after second 59 will be blank.
During a leap minute it will be &amp;quot;_&amp;quot; and during the leap second it will
read &amp;quot;M&amp;quot;.

&lt;p&gt;Below, in larger lettering, the local time will be displayed.  I think I can
achieve 10 updates per second, so I'll show tenths but not hundredths (or, say,
thirtieths).  The UTC offsets for standard and daylight saving time will be
hardcoded (so if I move to Colorado to be closer to WWVB I'll have to fix my
firmware).

&lt;p&gt;The WWVB receiver and decoder is written and passes my tests.  I have yet to
write the display code (and optimize it--I can transmit fewer than 500
characters and control codes per 1/10 second to the tellymate), and I also have
to work out how to get enough reception that having the WWVB display is not a
big old waste of time.  (or maybe I'll just display a simulated WWVB signal
instead—with a disclaimer, of course.  stop looking at me like that.)
</content>
</entry>
</feed>
