Unboxing: HackerBoxes #0022 – BBC Micro:Bit

The latest HackerBox came in the mail yesterday. I managed to avoid any spoilers so thought I’d see how dumb I can sound as I figured out what was in the box.

I’m looking forward to checking out the Micro:Bit and its blocks editor. The 128×64 OLED and WiFi modules will definitely get used in projects at some point.

Knowing the Micro:bit sells for less than $20, this box seemed light on value, so I had a look. Like last time, all prices are from Amazon unless noted.

  • HackerBoxes #0022 Collectable Reference Card – $1 (estimate)
  • BBC Micro:Bit – $16.99
  • BBC Micro:Bit Connector Breakout Kit – $5.38 (kitronik.co.uk)
  • Twin AA Battery Holder – $2.79
  • OLED 128×64 pixel I2C Display – $6.99
  • Alligator Clip Jumper Wires – $1.50 (estimate)
  • Miniature Solderless Breadboard – $3.26
  • ESP-01 Wi-Fi Modules – $2.60
  • Six LED Indicator Module – $1.10 (2 for $2.21 on aliexpress.com)
  • Passive Piezo Buzzer – $1 (estimate)
  • AMS1117 3.3V Regulator Module – $1 (estimate)
  • Header Pins – $1 (estimate)
  • DuPont Jumpers – $1 (estimate)
  • Micro USB Cable – $5
  • Micro USB Breakout Module – $1.84
  • Exclusive Micro:Bit Decal – $1 (estimate)

Several of these items are extremely cheap and only sold in multiples so I gave generous estimates. Total comes to $53.45. Things in that $3-7 range really add up quickly. Still a good value for the $44 subscription.

If you’re interested in learning more about this particular box, check out the Instructables guide or leave a comment and I’ll try to answer.

 

5v Relay Module – Part 3

I had no plans for a part 3, but in part 2 of this series, I mentioned how I messed up the wiring several times when I was assembling the module. Instead of fixing it at the time, I started from scratch since I had extra parts. Well, I made some time to disassemble the non-working module and build a new one. I quickly set up a prototype on a breadboard to make sure I didn’t make the same mistakes and then I soldered it all together on a permanent board. Was smooth sailing, even with squeezing everything in as much as I could.

Now I have a two different spare relay modules, depending on power requirements, when I need one for a project.

Ant Bait

Occasionally during the summer months I get ants in my kitchen. I’ve always tried getting rid of them with Terro, without much success. I’m sure not leaving dirty dishes in the sink would help a lot, but that’s not going to change. 

I picked up a box of these Hot Shot ant bait stations and they really did take care of the problem in hours. I haven’t seen an ant since putting them out. I feel much better leaving them in a corner or by the sink, compared to pieces of cardboard with the Terro liquid.

Counting Types of Days in PHP

Since I work on our HR team at Automattic, sometimes I need to write code dealing with payroll. When someone starts or leaves we have to pay them for a partial period, which is based on the number of week days. Originally I wrote a simple function, but I set out to make it more useable. Here is what I came up with…

/**
 * Counts the days (optionally limited by type of day) between (inclusive) two dates.
 *
 * @param string $start_date First day (Y-m-d format).
 * @param string $end_date   Last day (Y-m-d format).
 * @param array  $types      Optional. Types of days to count. Default to all types
 *
 * @return int Number of days matching the $types.
 */
function get_days_between_dates( $start_date, $end_date, $types = array() ) {
	$count = 0;

	$included_day_type_indexes = array();
	if ( empty( $types ) ) {
		$included_day_type_indexes = range( 1, 7 );
	} else {
		foreach ( $types as $type ) {
			switch ( strtolower( $type ) ) {
				case 'weekday':
					$included_day_type_indexes = array_merge( $included_day_type_indexes, range( 1, 5 ) );
					break;
				case 'weekend':
					$included_day_type_indexes = array_merge( $included_day_type_indexes, range( 6, 7 ) );
					break;
				case 'monday':
				case 'mon':
					$included_day_type_indexes[] = 1;
					break;
				case 'tuesday':
				case 'tues':
				case 'tue':
				case 'tu':
					$included_day_type_indexes[] = 2;
					break;
				case 'wednesday':
				case 'wed':
					$included_day_type_indexes[] = 3;
					break;
				case 'thursday':
				case 'thurs':
				case 'thur':
				case 'thu':
				case 'th':
					$included_day_type_indexes[] = 4;
					break;
				case 'friday':
				case 'fri':
					$included_day_type_indexes[] = 5;
					break;
				case 'saturday':
				case 'caturday':
				case 'sat':
					$included_day_type_indexes[] = 6;
					break;
				case 'sunday':
				case 'sun':
					$included_day_type_indexes[] = 7;
					break;
			}
		}

		$included_day_type_indexes = array_unique( $included_day_type_indexes );
	}

	$date = strtotime( $start_date );
	$end = strtotime( $end_date );
	while ( $date <= $end ) {
		if ( in_array( date( 'N', $date ), $included_day_type_indexes ) ) {
			$count++;
		}

		$date = strtotime( '+1 day', $date );
	}

	return $count;
}

/*** EXAMPLES ***/

echo get_days_between_dates( '2017-08-21', '2017-09-03' ) . "\n";
echo get_days_between_dates( '2017-08-21', '2017-09-03', array( 'weekday', 'weekend' ) ) . "\n";
echo get_days_between_dates( '2017-08-21', '2017-09-03', array( 'mon' ) ) . "\n";
echo get_days_between_dates( '2017-08-21', '2017-09-03', array( 'weekday' ) ) . "\n";
echo get_days_between_dates( '2017-08-21', '2017-09-03', array( 'mon', 'wednesday', 'fri' ) ) . "\n";

This is the output of the examples…

14
14
2
10
6

What do you think? What would you do different?

I put the function up on GitHub. Submit a pull request if you have improvements.

New Reebok Kicks

When Reebok is giving an additional 30% off in addition to their end of the summer sales, I can’t help myself.

The CrossFit Speed TR has been my favorite shoe for the gym so getting a second pair for $56 was a steal. The color is called “Vitamin C” and looked a lot more orange-ish on the web site when I ordered them. The color of my photo makes them look even different; they are more of a pink/salmon in person. I’ll rock ’em, because I’m not returning them.

For only $28, the Reebok Runner was an easy selection, especially since my size was available in blue. My current running shoes are about a year old, so might be up for retirement. The sockliner in these has a memory foam, which I’m looking forward to trying.

I love buying shoes. 🙂

Link Dump – 2017/08/23