DigiKam 4.10 on Ubuntu 14.04

May 30th, 2015 No comments

These are the steps I found are required to install DigiKam v4.10 on Ubuntu. In my case I ran into problems with libavcodec (ffmpeg/libav) and issues stemming from the ffmpeg project fork. YMMV.

First install digikam:

add-apt-repository ppa:philip5/extra
apt-get update
apt-get install digikam

At this point everything should have worked nicely. Unfortunately digikam (version: 4:4.10.0-trusty~ppa3) wouldn’t start up. Running it from the command line showed that I was missing libavcodec.so.53. To confirm:

ldd /usr/bin/digikam | grep libavcodec

The normal solution to this would have been:

apt-get install libavcodec-extra-53

But life is not that simple. Ubuntu deprecated and removed libavcodec-extra-53 and claims libav-tools should be used instead. libav-tools however doesn’t include a libavcodec.so.53 file, so after a bit of hunting around, I decided to just build it from source. Here are the steps:

git clone git://source.ffmpeg.org/ffmpeg.git
cd ffmpeg
git checkout -b ver53 dd453f
./configure --prefix=/usr/local --disable-ffmpeg --disable-ffplay --disable-ffprobe --disable-ffserver --disable-avdevice --disable-swresample --disable-swscale --disable-postproc --disable-avfilter --enable-shared --disable-debug --enable-gpl --enable-x11grab
make
sudo su -
checkinstall
ldconfig

After this, digikam started up properly.

Notes:

gitk --all libavcodec/version.h shows that after the dd453f commit the libavcodec version changes to 54, so that’s why that commit was used.

Categories: Uncategorized Tags:

Temperature sensor: TMP36, DHT22, and 10K Thermistor

January 30th, 2014 No comments

Here’s a quick comparison of 3 different “low cost” temperature sensors:

This is how accurate they each claim to be:

Model Accuracy in °C Accuracy in °F
TMP36 ±2.00°C ±3.6°F
Thermistor ±0.45°C ±0.8°F
DHT22 ±0.50°C ±0.9°F

All the data below was collected with a BeagleBone Black which has a 12-bit ADC. The 10K thermistor was hooked up in a voltage divider configuration with a 1% 10K resistor. The DHT22 uses a thermistor inside as well, but has a digital output. Readings were taken every 3s over a 2 hour period.

The sensors are all positioned within 1/4″ of each other. The slow temperature drifts are from the house cooling and the furnace heating it back up.

Temperature

Temperature

I used a running average filter with a window of 10 samples to clean up the noise a bit and these are the results.

Temperature - 30s running average

Temperature – 30s running average

Finally, taking the 10K thermistor as ground truth, these are the differences observed. The TMP36 is consistently about 2°F lower than the thermistor, and the DHT22 is roughly 1°F higher even though it’s also using a thermistor inside. I don’t know how accurate the ADC inside the DHT22 is, so that might explain some of the difference.

Deltas between different temperature sensors.

Deltas between different temperature sensors.

In conclusion, when you hear someone say “I keep my thermostat at 67°F” and another guy responds “My wife would kill me if I did that. I keep mine at 73°F” they might both be keeping their temperature at 70°F. It just depends on what temperature sensor their thermostat is using, and how well it was calibrated.

Categories: Uncategorized Tags:

Tig Quick Reference Card

November 1st, 2013 No comments

Simple reference card for tig, the text-mode interface for git.

This Tig Quick Reference Card shows all the key bindings supported by tig version 0.17.

Page 1

Page 1

Page 2

Page 2

The reference card is available as a PDF so you can print it out. The PDF version is derived from the TeX file which is hosted at http://github.com/gburca/git-qrc so anyone can update it.

Categories: Uncategorized Tags:

From Acceleration to Displacement (part 2)

June 29th, 2013 No comments

In a previous post I showed how to analytically double integrate (or rather repeat integrate) a \(\sin\) wave to arrive at displacement or position. Here I’ll make it a little more generic, by integrating a sum of \(\sin\) waves, each with its own amplitude and phase. This exercise is motivated by the fact that any arbitrarily complex waveform can be expressed as the sum of a number of sinusoids, so this will allow us to obtain the exact displacement when the acceleration is arbitrarily complex, as long as we’re able to determine (through FFT perhaps) the sinusoids that make up the acceleration.

We start with an acceleration defined as:

\[
A = \sum\limits_{i} a_i \sin(c_i t) dt
\]

First integration, to obtain velocity:

\[
\begin{align}
V = \int\limits_{s}^{e} \sum\limits_{i} a_i \sin(c_i t) dt &= \sum\limits_{i}{ – \frac{a_i \cos(c_i x)}{c_i}\bigg|_{s}^{e}} \\
&= \sum\limits_{i}{ – \frac{a_i \cos(c_i e)}{c_i}} \ – \sum\limits_{i}{ – \frac{a_i \cos(c_i s)}{c_i}}
\end{align}
\]

Let \(m \equiv \sum\limits_{i}{ – \frac{a_i \cos(c_i s)}{c_i}}\) and then do the second integration, to obtain displacement or position.

\[
\begin{align}
D &= \int\limits_{g}^{h} \sum\limits_{i}{ – \frac{a_i \cos(c_i e)}{c_i}} \ – m\ de \\
&= \sum\limits_{i}{-\frac{a_i \sin(c_i e)}{c_i^2} – me \bigg|_g^h} \\
&= \left[ \sum\limits_{i}{-\frac{a_i \sin(c_i h)}{c_i^2}} – mh \right] – \left[ \sum\limits_{i}{-\frac{a_i \sin(c_i g)}{c_i^2}} – mg \right]
\end{align}
\]

Substitute everything back in (given \(g \equiv s\) and \(h \equiv e\)), and simplify:

\[
\begin{align}
D &= \left[ \sum\limits_{i}{-\frac{a_i \sin(c_i h)}{c_i^2}} – mh \right] – \left[ \sum\limits_{i}{-\frac{a_i \sin(c_i g)}{c_i^2}} – mg \right] \\
&= \left[ \sum\limits_{i}{-\frac{a_i \sin(c_i e)}{c_i^2}} – me \right] – \left[ \sum\limits_{i}{-\frac{a_i \sin(c_i s)}{c_i^2}} – ms \right] \\
&= \sum\limits_{i}{-\frac{a_i \sin(c_i e)}{c_i^2}} \ – \sum\limits_{i}{-\frac{a_i \sin(c_i s)}{c_i^2}} + (s-e)\sum\limits_{i}{ – \frac{a_i \cos(c_i s)}{c_i}} \\
&= \sum\limits_{i}{\frac{a_i \sin(c_i s)}{c_i^2}} \ – \sum\limits_{i}{\frac{a_i \sin(c_i e)}{c_i^2}} + (e-s)\sum\limits_{i}{\frac{a_i \cos(c_i s)}{c_i}}
\end{align}
\]

Finally, to take the phase of the signal into account, we would start with:

\[
A = \sum\limits_{i} a_i \sin(c_i t + p_i) dt
\]

And end with:

\[
D = \sum\limits_{i}{\frac{a_i \sin(c_i s + p_i)}{c_i^2}} \ – \sum\limits_{i}{\frac{a_i \sin(c_i e + p_i)}{c_i^2}} + (e-s)\sum\limits_{i}{\frac{a_i \cos(c_i s + p_i)}{c_i}}
\]

Categories: Uncategorized Tags:

From Acceleration to Displacement

May 27th, 2013 No comments

Recently I was trying to double integrate a sinusoidal acceleration (ex: a frog leaping forward) and was a bit puzzled at first why double integrating the \(\sin(t)\) wave resulted in no displacement after an integral number of cycles:

\[
\begin{eqnarray}
v(t) = \int \sin(t) dt &=& -\cos(t) \\
d(t) = \int -\cos(t) dt &=& -\sin(t)
\end{eqnarray}
\]

Everybody knows that integrating once gives you velocity, and integrating twice gives you displacement (or position). But if that’s the case, why is the displacement (\(-sin(t)\)) above sinusoidal? Shouldn’t the frog be moving forward instead of back and forth?

It turns out my calculus was rusty enough to where I missed one very obvious fact. In the process I learned the distinction between a multiple (or double) integral, which is an integral taken over different variables (ex: \(\int \int f(x, y) dx\ dy\)) and a repeated integral which is taken multiple times over the same variable. What I missed was the difference between an indefinite integral (shown above) and a definite integral (shown below).

So let’s make the problem a little more generic and add amplitude and frequency component to our acceleration signal, and then see what happens to it as we integrate it twice. We’ll start with an acceleration signal defined as:

\[A = a \sin(c*t)\]

and we’ll integrate it twice over the interval start..end (\(s..e\)) to see what we get.

For the first integration we have:

\[
\begin{align}
V_{t = e} = \int_{s}^{e} a \sin(ct) dt &= \ – \frac{a \cos(ct)}{c}\bigg|_{s}^{e} \\
&= -\frac{a \cos(ce)}{c} + \frac{a \cos(cs)}{c}
\end{align}
\]

So that allows us to calculate the velocity at any point \( t = e \) after the starting time \(s\). Now we want to integrate a second time to get the displacement. To avoid confusion with the \(s..e\) interval used for the first integration, we’ll use \(g..h\) as the integration interval this time around. To simplify things, let’s also rename the integration constant (time independent) term \(\frac{a \cos(cs)}{c} \equiv m\).

\[
\begin{align}
D_{t = h} = \int_{g}^{h} -\frac{a \cos(ce)}{c} + m\ de &= -\frac{a \sin(ce)}{c^2} + me \bigg|_{g}^{h} \\
&= \left[ mh – \frac{a \sin(ch)}{c^2} \right] – \left[ mg – \frac{a \sin(cg)}{c^2} \right]
\end{align}
\]

Since both integrations are over the same intervals, we know that \(g \equiv s\) and \(h \equiv e\). Now substitute everything back in and simplify:

\[
\begin{align}
D_{t = e} &= \left[ mh – \frac{a \sin(ch)}{c^2} \right] – \left[ mg – \frac{a \sin(cg)}{c^2} \right] \\
&= \left[ me – \frac{a \sin(ce)}{c^2} \right] – \left[ ms – \frac{a \sin(cs)}{c^2} \right] \\
&= m(e-s)\ – \frac{a \sin(ce)}{c^2} + \frac{a \sin(cs)}{c^2} \\
&= \frac{a \cos(cs)}{c} (e-s)\ – \frac{a \sin(ce)}{c^2} + \frac{a \sin(cs)}{c^2}
\end{align}
\]

If we want to take into account the phase of the signal, we start with:

\[
A = a \sin(ct + p)
\]

and end with:

\[
D = \frac{a \cos(cs+p)}{c} (e-s)\ – \frac{a \sin(ce+p)}{c^2} + \frac{a \sin(cs+p)}{c^2}
\]

So there you have it. The result of integrating a sinusoidal acceleration twice on the interval \(s..e\) in order to arrive at the displacement.

Categories: Uncategorized Tags: