IZ7BOJ Blog is online

It has been a long time since I wanted to publish a personal Hamradio Blog, and now, finally I’m online!

I have not so much time for hamradio, but I want to share my few experiences with other hamradio entusiast.

I hope you can enjoy this sharing and find something useful.

Best 73

Alfredo IZ7BOJ



ESEO GNURadio decoder optimization

After the launch of ESEO, at the end of 2018, Daniel Estevez released his beautiful GNURadio decoder: https://destevez.net/2018/12/decoding-eseo/

I started to use it and tried to do some optimization.

After some hours spent in “trial and error” I’ve found this two tricks to improve the success of decoding satnogs recording files:

1) Decrease the “Multiply Const” from 1 to 0,7 (Daniel Estevez already talked about the big gain of satnogs recording)

2) Increase the cutoff frequency of Lowpass Filter from original 4,8KHz to 5,2KHz (sometimes 5,3KHz)

Moreover, Dr. Chris Bridges suggested me to add a HighPass filter with a cutoff-frequency of 50Hz.


I tried this modifications with this satnogs observation: https://network.satnogs.org/observations/439335/ and the decoded packets increased from 235 (original configuration) to 322 .

I hope this suggestions can be useful to other people who want to use eseo decoder.


Alfredo IZ7BOJ

Double Turnstile construction for satellites receiving in 435MHz Band

I’m going to describe the construction of a double turnstile antenna suitable for receiving the satellites in 435MHz band.

The original design is developed by Ivo I6IBE:



I found many pictures on the web which uses different materials and techniques.

Here below I describe my personal interpretation, which uses very common materials like PVC boxes and tubes, and threated bars.

The Bill of Material is:

  • N.2 threaded metal bars, 4mm x 100mm
  • N.1 10cm x 10cm square PVC Gewiss box
  • N.1 85mm circular PVC Gewiss box
  • N.1 joint from 20mm PVC tube to box
  • N.1 PVC tube 20mm diameter
  • RG58 and RG59 coax cables (see lengths in the first picture)
  • N.4 ring contacts , 4mm diameter
  • N.1 “N” flange connector
  • 4mm wahser and nuts
  • Cable ties
  • Insulating tape
  • Silicon sealant

First of all, I started from a 10cmx10cm PVC box. I made a central hole for placing the 20mm box-tube junction and one hole for every side of the box.

Then I cut 4 pieces of 16,3cm threated metal bars and installed with two nuts and washers:


At this point, I cut a piece of 1meter of PVC 20mm diameter tube and I made 4 holes for the reflectors, at 13,8cm from the radiators:


Now it’s time to cut the pieces of coax cables. We should refer to I6IBE lengths (see picture at top of the article).

Then I separated the shield and the central pole, then I soldered ring contacts at the ends:


I soldered together the balun coax pieces:

Then I installed the ring contacts inside the top box, to the radiators elements. I made two holes on the bottom of the box to let the cables exit from the box:


Then the most difficult part is to solder together the coax coming from the radiators and the coax of the balun:

At this point, we should put adhesive tape on the solder joints. Also some sealant or glue could be used to prevent water enter in the joints. Now we can build the box which will enclose the N connector. We can use a flange connector and make a hole on the cover of a circular 85mm PVC box.

At the end, we can put all the pieces together:

We can hold the circular pic box on the main tube using cable ties.

The final installation will look like this:


I checked the ROS and it’s perfect on 435MHz band. If some adjustment is needed, we can cut the radiator elements (it’s better to cut the elements a little bet longer than the design dimensions).

I tried the antenna with RTL-SDR dongle and I perfectly received Bugsat-1 satellite:


Happy receiving to everyone!

73′ de IZ7BOK Alfredo

Telemetry of MMDVM repeater: how to visualize it in the DG9VH Dashboard

I was looking for a simple telemetry sistem for my MMDVM repeater, wich is not in my house, so for me is very useful to check it remotely.

I fixed some requisites before starting the research of this system:

  • It should be compatible with the raspberry Pi;
  • It should read repeater voltage, current, temperatures, and it should check the presence of 220V, in order to detect a power blackout and prevent the UPS discharge;
  • Easy to embed the readings in the MMDVM Dashboard, possibly using gauges or similar nice graphic indicators.

After some research on the internet, I found something almost ready, but it was quite expensive and was not easy to customize.
So I started to think to a “DIY” solution. I searched for ready-to-use ADC boards, and I found a lot of sulutions on amazon or ebay, but most of them provides only 4inputs and 4 outputs, but I’m not interested at outputs channels, and 4 inputs were not enough for my purposes.
At the end of my researches, I bought the IC MCP3008, by Microchip, that is a 8 inputs, 10 bit Analog to digital converter equipped with and an SPI output interface ( http://ww1.microchip.com/downloads/en/DeviceDoc/21295C.pdf ). The IC could be powered directly from the 3,3V or 5V of the raspberry, and a python library is also available for this ADC ( https://github.com/adafruit/Adafruit_Python_MCP3008 ).
The ADC inputs can directly read temperature sensors and repeater main voltage (the maximum input is Vcc, so the voltage must be divided through a pair of resistors, obviously).
For the curren telemetry, I found a very simple and cheap hall effect sensor IC, the ACS712 series, by Alegro (see_datasheet).
The chip is available in SOIC8 SMD package, but the complete PCB with screw terminals are available on the ebay.
I bought a pair of ACS712-05 (5Ampere full scale) and a pair of ACS712-20 (20 Ampere full scale) form a Chinese supplier, and finally I got it after a 3 weeks.

I built a simple prototype board with L-C filters on the input and a voltage dividers on ch0, which is dedicated to the 12V acquisition.

Here below the very simple schematic diagram:


Here below prototype picture:



Note: in the picture some 3-way screw terminal are present, despite of 2-way terminal of schematic diagram. I simply brought the 5V on the third terminal, if a powered sensor is used (e.g. the current sensor board must be externally powered with a 5V).

The connection between the prototype board and the raspberry are done by female square pin wires, following the pinout of raspberry pi. The pinout is reported hereafter:

mcp3008pinoutThere are two possibilities to connect the IC to the raspy: the Software SPI or the hardware SPI. I choose the second one, so the connections are:

  • MCP3008 VDD to Raspberry Pi 3.3V
  • MCP3008 VREF to Raspberry Pi 3.3V
  • MCP3008 AGND to Raspberry Pi GND
  • MCP3008 DGND to Raspberry Pi GND
  • MCP3008 CLK to Raspberry Pi SCLK
  • MCP3008 DOUT to Raspberry Pi MISO
  • MCP3008 DIN to Raspberry Pi MOSI
  • MCP3008 CS/SHDN to Raspberry Pi CE0

The Raspberry Pi3 pinout is reported here below:

raspy pinout

For the first check of the interface, I put a 5V on one of the cannels, then I installed the adafruit python library and examples, following this procedure (see references for the complete guide):

sudo apt-get install build-essential python-dev python-smbus git
cd ~ (or directory where you want to install the package)
git clone https://github.com/adafruit/Adafruit_Python_MCP3008.git
cd Adafruit_Python_MCP3008
sudo python setup.py install

Then, if the installation is successful, we can go into the Adafruit directory and edit the file simplest.py. In order to use the Hardware SPI, the first part must be commented and the second part must be uncommented. The code will look like this:

# Software SPI configuration:
#CLK = 18
#MISO = 23
#MOSI = 24
#CS = 25
#mcp = Adafruit_MCP3008.MCP3008(clk=CLK, cs=CS, miso=MISO, mosi=MOSI)
# Hardware SPI configuration:
mcp = Adafruit_MCP3008.MCP3008(spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE))

I saved the simpletest.py, then I connected a pair of power supply at a random voltage between 0 and 5V on ch0 and ch1 of my prototype board, just for test. I launched the test file (sudo python simpletest.py) and I got the correct channel acquisition:


I tested all the channels providing a 5V to each input, and I verified the decimal value was near 1024, which is the full-scale range for a 10bit ADC.
Ok, it was the easier part of the work, but now…I want to show data on the MMDVM dashboard, which is written in PHP by DG9VH.
I tried some library available on the internet, but I had no time and knowledge to study and customize them.
In particular, the Calcinai PHPi library is very interesting, but it’s not ready for use. The user should create a ‘worker’ which runs in the background and is connected to via websockets (or similar).  It may not even need to be that complex if you’ve already got a database layer to cache the readings. If someone wants to work on it, please have a look at https://github.com/calcinai/phpi-websocket).

So I decided to try the quickest solution, although it’s very dirty and most of SW developers will dislike it.
I decided to run a python script through the “exec” command in php code, which execute shell commands. Once the python script has been executed, the 8 ADC readings are stored in a vector, then any conversion fron decimal to voltage/current/temperature is possible in php.

Once the date is acquired, it should be shown in a pleasant way on the dashboard. I searched for some beautiful and simple gauge and I found “coffeegauge”: http://bernii.github.io/gauge.js/

For the implementation of the acquisition routine and the gauge parameters, I followed the following steps:

1) Start from “example.py”, under the examples directory, and modify it in order to read the inputs only once (I deleted the cycle inside). Save it as “read_adc.py” in var/www/html/ directory.

import time
import Adafruit_GPIO.SPI as SPI
import Adafruit_MCP3008
# Hardware SPI configuration:
mcp = Adafruit_MCP3008.MCP3008(spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE))
#read and print all ADC channels
for i in range(8):

2) Give execution permission on the script:

chmod +x read_adc.py

3) Check the correct execution of the script:

python read_adc.py

see the output values on the screen and check they report the correct decimal value if compared to the input voltages present at the channels.

4) Download the script file gauge.min.js from http://bernii.github.io/gauge.js/ and copy it in the /var/www/html directory (or the root file declared in your html server config file)

5) Insert the following code inside var/www/html/custom.php file, which is executed and shown in the dashboard , under the section “custom info” (remember to enable int in the dashboard config file). Only ADC ch1 is reported, but you can copy-paste for every channel:

#Execute the python script and store channels readings into a vector
exec("sudo python ./read_adc.py", $adc);
#calculate the power supply voltage (4.35 is the resistive divider factor)
#create the canvas gauge_V and show ch1 value
<canvas width="200" height="150" id="gauge_V"></canvas>
#recall the script .js file
<script type="text/javascript">
#set gauge options
var opts_V = {
  angle: -0.2, // The span of the gauge arc
  lineWidth: 0.1, // The line thickness
  radiusScale: 0.8, // Relative radius
  pointer: {
    length: 0.6, // // Relative to gauge radius
    strokeWidth: 0.033, // The thickness
    color: '#000000' // Fill color
  limitMax: false,     // If false, max value increases automatically if value > maxValue
  limitMin: false,     // If true, the min value of the gauge will be fixed
  highDpiSupport: true,     // High resolution support
  staticZones: [
   {strokeStyle: "#30B32D", min: 0, max: 12}, // Green
   {strokeStyle: "#FFDD00", min: 12, max: 14}, // Yellow
   {strokeStyle: "#F03E3E", min: 14, max: 24}  // Red
staticLabels: {
  font: "10px sans-serif",  // Specifies font
  labels: [0,12,24],  // Print labels at these values
  color: "#000000",  // Optional: Label text color
  fractionDigits: 1  // Optional: Numerical precision. 0=round off.
var target = document.getElementById('gauge_V'); // your canvas element
var gauge = new Gauge(target).setOptions(opts_V); // create sexy gauge!
gauge.maxValue = 24; // set max gauge value
gauge.setMinValue(0);  // Prefer setter over gauge.minValue = 0
gauge.animationSpeed = 32; // set animation speed (32 is default value)
gauge.set(); // set actual value

Note: The “floor” function is used to decrease the decimal digit to 2.

6) Try the final effect loading custom.php in the browser or the complete index.php page.

If everything is ok, you should see the gauge 😉

The user can customize almost everything of the gauge (colors, aspect, dimensions, speed, angles, ecc..). For more details you can go to http://bernii.github.io/gauge.js/

The final effect is reported in the following screenshot:


The real dashboard can be reached at this address: http://iz7boj.ampr.org

Note1: the python script is executed only when the dashboard is loaded on the browser, so the current value is sampled in the moment of script execution and mantained until the browser is refreshed!
If the radio is transmitting, you’ll see something about 3,8Ampere, otherwise you’ll see abut 150mA, which is the consumption in receive mode.

Note2: that the 220V presence is not exactly the voltage at the plug. I simply connected a 5V power supply to one of the inputs.
Then, I inserted the following “if” case in custom.php:

if ($ch5>4){$RETE=220;} else {$RETE=0;}

In other words, if the 5V is present (V>4V), then I’ll show 220V in the indicator.
In my “to do list”, I’ll build an voltage divider that will ready the 220V..

The source code that I pasted for ch1 could be obviously repeated for every channel, and any math formulas can be implemented for other type of signals.

I hope someone can found some interesting trick to built is own telemetry interface!
It’s a “quick&dirty solution”, but I’m an HW man and have a basic php knowledge. Every software developer can do something better than me for sure 🙂

Best 73’s
Alfredo IZ7BOJ





Testing of 409Shop UHF Diplexer

Hello OMs,

I’m going to share some measurements made on my UHF Diplexer that will be installed on my MMDVM equipment for the upgrade from simple hotspot to a repeater, using a Diamond X-510 antenna.

I bought this very cheap Diplexer from the Chinese e-shop “409Shop”, at only 97$: http://www.409shop.com/409shop_product.php?id=104460



It’s a 6 cavity Diplexer (2 notch + 1 bandpass for each path), so I expected a very good out-of-band attenuation, which is a very interesting feature in installation sites with strong RF signals coming from other transmitters.

I choose the 50W version, because the price difference between the 35W and 50W was only 14$.

For the payment, I used paypal, without any problem. As suggested on the site, I specified the Low and High Frequency of my repeater in the order notes.

The Diplexer arrived very quickly. The order dates are the following:

  • Order and Payment: 14 November 2017
  • Order Confirmation: 15 Novemver 2017
  • Shipment confirmation and Tracking Number: 18 November 2017
  • Arrival: 01 December 2017

Before the installation, I took some measurement with a Vector Network Analyzer, at ambient temperature and at cold and hot temperatures, in a climatic chamber, in order to verify the tuning made by the seller, and the temperature drifts, which affects the low-cost Diplexers.

I choose +55°C and -25°C as worst case temperature, although my region has a very mild climate.

Note: during every measurement, the third port (not connected to the VNA) is connected to a 50ohm dummy load.

The frequency of my repeater are:

  • Low (TX): 430.325 MHz
  • High (RX): 435.325 MHz

The more interesting measurements are:

  • Attenuation from Antenna port to RX port;
  • Attenuation from TX port to Antenna port;
  • Matching at RX, TX, and Antenna ports;
  • Isolation between TX and RX ports;

Here below, the ambient temperature measurements are reported:







Considerations about performances at ambient temperature

  • The isolation between RX and TX ports is >70db, as declared on the datasheet
  • The loss from ANT to RX port and from TX port to ANT is <1dB
  • The resonance at RX and TX ports are slightly different from the desired frequencies, but the matching is very good anyway (>20dB)
  • The matching at antenna port is good (>20dB)


Here below, the temperature drifts of the main measurements are reported:


Note: the attenuation @435.325MHz is 1.2dB at +55°C and 1.1dB at -25°C


Note: the attenuation @435.325MHz is 1.1dB at both +55°C and -25°C


Considerations about performances at cold and hot temperatures

  • In all the cases, the responses moves up in frequency when the temperature increases.
  • The isolation is still >=70dB also at hot and cold temperatures.
  • The attenuation from ANT to RX port and from TX to ANT increases slightly (1.2dB),but is still very good, even if the curves move in frequency.


Here below, I judged and assigned a score for every aspect of Diplexer, from 0 (min) to 5 (max):valutazioni

Considering the cost, this Diplexer is a good compromise between cost and performances, and I suggest this product for hamradio applications.

The out-of-band rejection is good as well as the temperature stability, so it can be used also in mountain sites or in RF polluted sites.


Yaesu FT-2D Microphone Jack

Recently, I built a “hands-free” microphone for my car, and I had to connect it to my Yaesy FT-2. I bought a standard 4-poles 3,5mm jack and I tried it, but it didn’t work. Neither the PTT was working, so I supposed it was not suitable for my radio.

I compared it with the original yaesu jack of a CT-44 adapter, and the difference was evident. See the following picture:

jack 4 poli_mod

The metal plate indicated with the red arrow, interferes with the jack hole of the radio, so it doesn’t completely plug into the radio.

The solution was to use a cellular 4-poles jack. I cutted it and soldered the wires. See  this picture:


Then, I had to cover it in some way. I decided to put glue and heatshrink tube.

I used this epoxy glue:


I mixed the two components and applied on the connector:

Then I cut a piece of heatshrink tube and shrinked it with a heat gun:

I waited a couple of hours for the complete drying of the glue. Here below there is the final result:


I’m using it every day and it’s perfect!


MMDVM, C4FM and Motorola GM350: history of a difficult (but not impossible) coexistence

Dear OMs and passionates, I’m going to write something about my last month of experiments with MMDVM in C4FM. I spent a lot of time to fix the problems, and I wish that this article could be useful to the MMDVM community.

Why did I decide to build a C4FM repeater?

Because I bought a used Yaesu FT2-D and I want to use it! I’m passionates of digital modulations and I wanted to play with this new mode.

In my region there are a lot of DMR repeaters and users, but only few C4FM nodes. In my province, actually there are not nodes yet, but I know there are OMs with C4FM radios which are waiting for nodes!

Which are the expectations of this project?

Funny and low cost compared to a commercial Yaesu repeater. Moreover, I don’t like the “plug&play” solutions 🙂

Materials/equipment needed

  • PC or raspberry
  • Two radios with 9k6 packet capability
  • Power supply
  • UHF cavity duplexer
  • Arduindo due
  • Arduino interface
  • Internet connection
  • Antenna system

Let’s concentrate on the radios.

Band choice

I want to run my repeater together with my VHF APRS Digi/I-Gate, so I necessarly have to use 70cm band for C4FM. I’ll use the same antenna (X-300, collinear) with a V/U duplexer.

Radio choice

For the first experiments, I used an old Alinco ALD-24E, modified for 9k6 packet radio. I used it for my packet node for ten years, but the 70cm section was not working, so I did some C4FM tests on 2m with very good results! I used MMVM with “low cost” interface by IZ5IGB and it was very easy to tune the levels and do the first tests.

As I wrote before, I have an APRS digi running at 144.800, so I must move my MMDVM repeater to 70cm, so I started to search on the internet.

After some search,  I realized that the most favourite radios are the Motorola GM340, but it’s difficult to find the UHF version, and the prices are quite high for my budget. So I started to find an alternative radio, and I cathed this article: https://www.grupporadiofirenze.net/2017/05/25/motorola-gm350-4-canali-vs-mmdvm/

The GM350 cost about half the price of a GM340, so I quickly bought one from ebay.

I received the radio and applied the modification of the article.

I used the 1Kohm resistors and the injection point described in the last part of the article, but the first tests were very unsatisfying…

First Tests Results: coupling capacitor issue

For the first tests I used the “low cost interface” by IZ5IGB described in the guide “MMVM for dummies” (see: http://ik1whn.com/mmdvm/MmdvmForDummies.pdf )

Before transmitting, I run MMDVMCal and I immidiately noted a strange behaviour: The TX Spectrum moved up and down varying the TX Level (see the following video )


I wrote the first (of a long series!) email to Graziano IZ5IGB and he suggested to check the decoupling capacitor.

So, I noticed that the schematic reported in “MMVM for Dummies” was old, and the new version (1.4) has a decoupling capacitor on the trimmer cursor!

For the last interface schematic (rev. 1.3), see https://www.grupporadiofirenze.net/wp-content/uploads/2017/11/Low-Cost-ZUM-for-Arduino-2-V.-1.4-By-IZ5IGB.pdf

I applied a 47uF electrolytic coupling capacitor to my interface (with the positive pole towards the radio) and the spectrum became stable!

I put the capacitor inside the radio (see the following picture):


It’s possible to check the correct decoupling in this way:
1) Put the radio in TX with the audio TX line not connected
2) Take note of the carrier frequency
3) Run MMDVMCal and verify that the spectrum doesn’t move and the center frequency is the same of point 1)

Next Step: TX level calibration

I run MMDVMCal with the Low Cost interface, then I pushed “D” (DMR deviation Mode) then “Space” (TX toggle). With “t” and “T” I can adjust the TX level by Software. The TX trimmer was at half level at the beginning.

I reached the Bessel Null (optimum modulation level) with TX trimmer at maximum output, and the Software output level at 80%.

I put TXLevel=80 in my MMDVM.ini file, and I run MMDVM in C4FM mode, but I noticed the warning message “DAC has overflowed” when the Motorola was transmitting.

I wrote again to Graziano IZ5IGB and I asked him if he encountered the same problem, but he answered that he doesn’t use the C4FM, and in DMR was OK.

The “DAC Overflow” issue: FM deviation in DMR/DSTAR/C4FM

In order to understand the overflow, the FM deviation for each mode must be taken into account:

  • D-STAR: ~1,2KHz
  • DMR: ~2,75KHz
  • C4FM: ~4,5KHz

The MMDVMCal works in DMR mode. Once the optimal TXLevel has been found and declared in MMDVM.ini, the Software automatically change the output level according to the modulation implemented. So, in case of C4FM, the output level is automatically set at twice the level previously found by MMDVMCal in DMR mode.

The bad news is that MMDVM, in C4FM, gives the warning “DAC has overflow” if the TXlevel is greater than 60% (whic is a 120% in C4FM, effectiverly), although the TX trimpot is at maximum level.

In order to avoid the ADC overflow, you should reach the Bessel Null within the 60% of output level. How to do this?

Solution 1: External Amplifier

One possible solution could be an audio amplifier to double the arduino output level.

For starting, we can put Gain=2. The opamp should be powered with V>8V in order to reach the desired otuput level, so it cannot be powerd directly by Arduino (5V).

I decided to use the +12V of our shack, so I tried this schematic:

audio amp GM350


The components values are the following:

  • C1: 10uF, 16V – Electrolytic
  • C2: 100nF, ceramic
  • C3: 33uF, 16V – Electrolytic
  • C4: 100nF, ceramic
  • R1: 22Kohm, 1/4W
  • R2: 47Kohm, 1/4W
  • R3,R4: 10Kohm, 1/4W
  • IC1: TL081

I tried the circuit on a bread board:


Note: some components could be different from the schematic, it’s for example only.

I used a trimmer, but you can leave a fixed resitor.

I put my opamp between the MMDVM and the radio and run again MMDVMCal, but…I couldn’t feel the effect of the amplification. Something was going wrong, so I exchanged a pair of emails with my friend Graziano. He suggested me to check the TX deviation limit in the calibration menu of my motorola.

TX deviation limit adjustment: connection from PC to the radio
It was necessary to connect to the radio, so I used a commercial USB-TTL adapter and a 1N4148 diode between RX and TX. Here below there is the schematic:


I used a short piece of LAN cable to connect to the RJ45 in front of the radio.


I downloaded Motorola CPS software and installed on a Windows 7 32 bit (it doesn’t work on 64bit!), configured the USB-TTL adapter as COM4 (CPS manages only COM from 1 to 4) and entered in TX aligments–> TX Deviation Limits. Here below the situation:

deviazione GM350_1

I moved to maximum the Deviation Limit of the frequency 431.625 (I’m interested only to this frequency range).

Once the radio was re-programmed, I run MMDVMCal and…finally I got the Bessel Null with TXLevel=45%!


I tested my hotspot with this configuration and was perfect.

The suitable version of GM350 for C4FM

When I downloaded the Motorola Service Manual of the radio, finally I discovered that there are different versions of GM350. In particular, there is the 20/25KHz that is fine.

I ordered and tested this radio and it’s OK also in C4FM without ant external amplifier.

So, I should have more patient before buying the first radio…

Here below I put in red the correct version of GM350 for C4FM:

Motorola Model Chart


  • If you want to buy a Motorola radio for your hotspot/repeater, take care of the P/N, wich distinguish different versions of the same radio. Some versions could not be suitable for your purpose.
  • If you prefer a “plug&play”, safe solution for your C4FM hotspot/repeater, then choose a GM340 or a GM350 version 20/25KHz (M08RHE6AA2AN).
  • If your’ not implementing C4FM, but only DMR or D-STAR, then also the 12.5 KHz version of GM350 should be OK (M08RHE4AA2AN)
  • If you want to use a 12.5 KHz version of GM350 for C4FM, then you have to build a simple opamp amplifier with gain=2, and you have to put at maximum level the “tx deviation limit of you radio (through the PC programming interface).

Special Thanks:

I want to say a special thanks to Graziano IZ5IGB that spent his time to support me during the Motorola alingment and during all the activities.

He revealed me some tricks that were fundamental for my experiments!