Cooking a brisket

It has been great to finally have a real go at cooking a brisket on my Weber BBQ. It was around 2 months ago where I attended a special class at the Perth BBQ School, where I learned from local brisket celebrity Big Don.

Below are the steps I took over the 26 hours before we ate:

  1. Choose a 5kg Brisket from a good butcher. Big Don says at least 3kg.
  2. Trim brisket for a good shape and uniform fat. I removed a good 200g of meat from mine.
  3. Lightly cover meat in American mustard to help hold the rub.
  4. Add the rub which is basically salt and pepper. Big Don sells his own blend if you live in Perth.
  5. Cook at 120 degrees Celsius using the Weber Snake Method with smoking wood of choice. Also use no water in the tin under the meat.
  6. Cook right through the “stall” which about 76 degrees Celsius.
  7. At 84 degrees wrap brisket in butchers paper. Make sure it’s pink.
  8. Cook through until it reaches 95 degrees. I rotated mine uniformity. At this point it had been 16 hours. This is longer than I was expecting and not sure why.
  9. Rest on bench for an hour to ensure meat temperature was dropping.
  10. Place in an oven at 60 degrees for 12 hours.
  11. Remove from oven and check the brisket internal temperature was 60 degrees. Big Don says this is the optimal temperature for slicing.
  12. Slice from the thin end to about half way where the end meat starts becoming fatty.
  13. Rotate 90 degrees and then continue slicing.

The end result was better than expected and I am looking forward to having another go.

SwiftUI - Adding Tabs

This guide will show how to add Tabs to your app. It is quick and easy, thanks to SwiftUI and allows you start adding multiple views to your app.

youtu.be/mfgutB37f…

SwiftUI - Using SF Symbols

SF Symbols are a great little bonus when developing apps. It is a whole suite of iconography that can be used throughout a design. This guide explains how to use them in SwiftUI.

youtu.be/lgBOJPMF_…

SwiftUI - Adding Images

In this guide, I will show you how to add images to a SwiftUI app. Look for a nice image before you start. 😊

youtu.be/_I0g1AeVw…

SwiftUI - Adding Gradient Colour

SwifUI makes it super easy to add gradient colour effects to your app design. This guide will show you the basics to get started and provide some inspiration for your own designs.

youtu.be/rckeKAP7k…

SwiftUI - Adding Colour

In this guide, I will be explaining how to add colour to the SwiftUI app. It is very simple and I show a couple of tricks to make things easier.

youtu.be/DBH_vdcdG…

SwiftUI - Alternative methods to add and modify Text and Stacks

In the follow up to my last post, this guide will show how to use the object library in Xcode to place Text and Stacks directly into the design preview of an app. Yes, this means knowing less code. It is a close to drag and drop coding you can get and it works rather well.

The guide also introduces the attributes inspector to modify objects in the design, say for instance what font style the Text has. Again less coding required. 😁

youtu.be/9PQ80wWV7…

SwiftUI - Basic VStack|HStack|ZStack

If you are interested in trying some simple SwiftUI, this video will show you how to use VStacks, HStacks and ZStacks to align Text.

youtu.be/y4gOWLR9b…

Designing Apps in Keynote

I have created 2 videos to show how to use Keynote for App design. The first video explains how to download and install the Keynote templates and the SF-Symbols app via Apple’s Developer Portal. The second video details how to use the template and app with Keynote to design your own app. It is a little tricky but the end results can look just like a real app.

Part 1:

youtu.be/n_1cWnYNp…

Part 2:

youtu.be/b1YQRJDnY…

Live AR Pictures App Part 5

Now the final part of my guides showing how to create you own Live AR Pictures app. This movie explains how to add fade transitions to the animations just to give the final product a nice clean look. This is much more complicated than the other guides and pushes the boundaries of my understanding so bare with my descriptions of what is happening. I will add further guides based around this app but it will focus on additional AR elements or how might you include this inside your main app. youtu.be/VTMxkQgdr…

Live AR Pictures App Part 4

In this part of the series I am going to explain how we can add to our app so that when an image is not visible on the device that the animated movie pauses. This is a nice effect that makes the overall app feel more natural. youtu.be/44DF4OLIl…

Raspberry Pi Temp Sensor Part 4

In this part of the series we will be looking at how you can access your data using Xcode and then ultimately see your temperature data on your iPhone.

Background

To fully understand this section an understanding of concepts like closures, extensions and working with web data would be very helpful. For this I recommend looking at Apple’s Everyone Can Code materials and specifically the App Development with Swift course. The Apple Book can be accessed here:

books.apple.com/au/book/app-development-with-swift/id1219117996

The main focus would be Chapter 5, but I would recommend spending some time working through all of the book if you are interested in iOS development.

Jump to the End

If you just want to jump to seeing the app running you can download my project here:

You will need to make one change to the code and that is to point the app to connect to your Pi. To do this open the project in Xcode and look for the TemperatureInfoDataController.swift file. On line 16 you will see the following:

let baseURL = URL(string: “192.168.66.11/temperaturejson.php”)!

Now change this line to match your Pi’s address.

Once you build and run the project you should see the latest temperature on the first screen and then using the tab bar you can see all records.

The app is very basic at this point but does give you some idea of what you can improve.

More Details

If you would like some further understanding of the project I will make another guide to help break it down a little to help out. In another guide I will also show how to graph the data.

Raspberry Pi Temp Sensor Part 3

In this part of the series we will be looking at creating a PHP web page that will show the data logged in the database in JSON format. This format is easily readable by not only computers but also humans, so it is an excellent way to share data. So lets get on with making the changes we need.

Acknowledgement

The original guide that this post is taken from can be located below.

wingoodharry.wordpress.com/2015/05/18/raspberry-pi-temperature-sensor-web-server-part-3-scheduling-temperature-readings-and-php-script/

Create a PHP web page

First we need to create a file in our web server storage. This is a special area that provides access via a webpage. This is stored in /var/www/html so type:

cd /var/www/html/

Now create PHP file that will display the data in JSON format:

sudo nano temperaturejson.php

The code to pasted into the file is

<?php
$host = ‘127.0.0.1’;
$db   = ‘temp_database’;
$user = ‘root’;
$pass = ‘CHANGE PASSWORD HERE’;
$charset = ‘utf8mb4’;
$dsn = “mysql:host=$host;dbname=$db;charset=$charset”;
$options = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES   => false,
];
try {
     $pdo = new PDO($dsn, $user, $pass, $options);
} catch (\PDOException $e) {
     throw new \PDOException($e->getMessage(), (int)$e->getCode());
}
$stmt = $pdo->query(‘SELECT * FROM tempLog ORDER BY datetime DESC’);
$tempValue = array();
$i=0;
while ($row = $stmt->fetch())
{
    $dateAndTemps = array();
    $datetime = $row[‘datetime’];
    $temp = $row[‘temperature’];
    $dateAndTemps[“Date”] = $datetime;
    $dateAndTemps[“Temp”] = $temp;
    $tempValue[$i]=$dateAndTemps;
    $i++;
}
echo ‘{“records”:‘.json_encode($tempValue).‘}’;
?>

Now to view your data open a web browser and type the following address but also changing the numbers to match your Pi’s address.

192.168.0.10/temperatu…

Note I had to restart my Pi to get this working. You can use the following from SSH

sudo shutdown -r now

If all works you should see something similar to:

JSON Data
JSON Data

Now you are ready for Part 4, where we will make our iOS app to display the Temperature data.

Raspberry Pi Temp Sensor Part 2

Welcome to Part 2 of this guide. To store our temperature values we will need a database, we will use MySQL for this. To access the database online we will need a web server and a script to run on it, Apache and PHP respectively.

Acknowledgement

The original guide that this post is taken from can be located below.

wingoodharry.wordpress.com/2015/01/05/raspberry-pi-temperature-sensor-web-server-part-2-setting-up-and-writing-to-a-mysql-database/

Install the Database and Web Server

To install Apache and PHP on the raspberry pi enter this command, when prompted type “y”.

sudo apt-get install apache2 php libapache2-mod-php

Once complete you can test the web server by simply entering the IP address of the Pi into a web browser of a device that is on the same local network as the Pi. You will get the following page if successful:

Now install MySQL by entering the following, press “y” again when prompted.

sudo apt-get install mariadb-server php-mysql

We will also be editing our MySQL database from our Python script in the future so download the corresponding Python library:

sudo apt-get install python-mysql.connector

Run the following command to begin the MySQL securing process.

sudo mysql_secure_installation

Just follow the prompts to set a password for the root user and to secure your MySQL installation.For a more secure installation, you should answer “Y” to all prompts when asked to answer “Y” or “N“. These prompts will remove features that allows someone to gain access to the server easier.Make sure you write down the password you set during this process as we will need to use it to access the MySQL server and create databases and users for software such as WordPress or PHPMyAdmin.Now open MySQL:

sudo mysql -u root -p

You will be prompted to enter the password that we just created for MySQL’s root user.

This logs us in to MySQL as the root userWe will now delete the default mysql root user and create a new mysql root user, because the default one can only be used with Linux root account, and so not available for the webserver and php scripts.To do so, once you connect to MySQL, simply run thoses commands (replace password with the password you want to use) :

We are now going to create a database, I called mine temp_database which is a bit unimaginative. Here is a cheat sheet of MySQL commands too.

CREATE DATABASE temp_database;

Next, we will create a MySQL user that we will assign to our new database. We can create this user by running the following command.For this example, we will be calling the user “tempUser” and giving it the password “tempPassword“. When creating your own, make sure you replace both of these.

CREATE USER ‘tempUser’@‘localhost’ IDENTIFIED BY ‘tempPassword’;

With the user created, we can now go ahead and grant all privileges to the user so that it can interact with the database.

This command will grant all permissions to our “tempUser” for all tables within our “temp_database” database.

GRANT ALL PRIVILEGES ON temp_database.* TO ‘tempUser’@‘localhost’;

The final thing we need to do for both our MySQL database and user to be finalized is to flush the privilege table. Without flushing the privilege table, the new user won’t be able to access the database.We can do this by running the following command.

FLUSH PRIVILEGES;

We can check this has worked by entering the below. A list of the databases currently held by MySQL will be displayed. Don’t be alarmed if there is more than the one you just created.

SHOW DATABASES;


You should see something similar to:

+——————–+

| Database           |

+——————–+

| information_schema |

| mysql             |

| performance_schema |

| temp_database     |

+——————–+

4 rows in set (0.00 sec)

Now we want to make a new table in the temp_database. To this we firstly have to tell MySQL that we wish to use the temp_database:

USE temp_database;


We now create a table in MySQL using the following commands. MySQL commands are out of the scope of this blog but essentially we are making a table called tempLog that has two fields; datetime (of type DATETIME) and temperature(of type FLOAT). Both must have values (i.e. not null).

CREATE TABLE tempLog(datetime DATETIME NOT NULL, temperature FLOAT(5,2) NOT NULL);


To check that our table is correct we can check by entering the following:

DESCRIBE tempLog;


You will get the following output, describing the table’s fields.

+————-+————+——+—–+———+——-+

| Field       | Type       | Null | Key | Default | Extra |

+————-+————+——+—–+———+——-+

| datetime   | datetime   | NO   |     | NULL   |       |

| temperature | float(5,2) | NO   |     | NULL   |       |

+————-+————+——+—–+———+——-+

Exit MySQL by pressing ctrl z.

Now go to your tempLog directory and add another Python script in nano called readTempSQL.py:

cd tempLog

sudo nano readTempSQL.py


Copy the following code into your new Python script.

import os
import time
import datetime
import glob
import mysql.connector
from time import strftime

os.system(‘modprobe w1-gpio’) os.system(‘modprobe w1-therm’) temp_sensor = ‘/sys/bus/w1/devices/28-0300a2798953/w1_slave’

Variables for MySQL

db = mysql.connector.connect(user=‘tempUser’, password=‘tempPassword’, host=‘localhost’, database=‘temp_database’) cur = db.cursor()

def tempRead(): t = open(temp_sensor, ‘r’) lines = t.readlines() t.close()

    temp_output = lines[1].find('t=')
    if temp_output != -1:
            temp_string = lines[1].strip()[temp_output+2:]
            temp_c = float(temp_string)/1000.0
    return round(temp_c,1)

while True: temp = tempRead() print temp datetimeWrite = (time.strftime(“%Y-%m-%d “) + time.strftime(”%H:%M:%S”)) print datetimeWrite addTemp = (“INSERT INTO tempLog “ “(datetime,temperature) “ “VALUES (%s,%s)”) dataTemp = (datetimeWrite, temp) try: print “Writing to database…” # Execute the SQL command cur.execute(addTemp, dataTemp) # Commit your changes in the database db.commit() print “Write Complete”

    except:
            # Rollback in case there is any error
            db.rollback()
            print "Failed writing to database"

    cur.close()
    db.close()
    break</code></pre>

This is a modification of our original Python script but we are adding code to handle the MySQL functionality. Firstly, at the top of the script we add an import for the MySQLdb Python library we downloaded earlier. A bit further down you will see variables that will be used when communicating with MySQL (password, user, host etc) – remember to change them to your variables!

“sql = …” is a string that we will send to MySQL as a command that adds our datetime and temperature values to the tempLog database. There is then a try statement that executes the sql command. If for some reason that fails the except code will run, printing a fail message and discarding attempted changes to the database. Play about with this code and try to change stuff, its the only way I learnt how to it works.

Now run the Python script we just made a few times.

sudo python readTempSQL.py


You should see the following output on your terminal window if all has worked:

pi@raspberrypi ~/tempLog $ sudo python readTempSQL.py

18.6

2015-01-04 22:29:24


Writing to database…


Write Complete


Now lets check that the Python script actually entered data into the MySQL database. Log back into MySQL and USE the temp_database. We can then query the tempLog table:

mysql –user=root –password=yourmysqlpassword


USE temp_database;


SELECT * FROM tempLog;


In the terminal window you will see the following output.

+———————+————-+

| datetime           | temperature |

+———————+————-+

| 2014-12-28 17:26:20 |       18.90 |

| 2014-12-28 17:27:05 |       18.90 |

| 2014-12-28 17:27:52 |       18.90 |

| 2014-12-28 17:30:39 |       19.00 |

| 2014-12-28 17:31:02 |       18.90 |

+———————+————-+

5 rows in set (0.00 sec)

If all has worked, well done! Next we will look at getting the data from the database for our app.

Live AR Pictures App Part 2

Now for the second part in a series of movies explaining how to make your own AR app using Live Photo’s. By the end of this guide you will have an app that will detect the photo and start playing the animated movie over the top. Don’t forget to grab your resources from the first guide and also print your photos. youtu.be/kxeGrz579…

Augmented Reality App Development

At the end of last year I spent some time learning how to create an iOS app using the Augmented Reality tools available in Xcode. Below is a tweet I posted at the time to refresh your memory (well, for those who follow me) [tweet twitter.com/superdave…] What I have learned from this experience is that AR development is really not too complicated in iOS, many of the intelligent work is done behind the scenes. So to just place an object into an AR scene you really just need to know where in the space around you want to add it and then drop it in. The default template for an iOS AR app already has a “Jet Plane” object and without changing a line of code you get a working app. Here is what it looks like: Default AR App Template in Xcode From this point all you need to do is define points in 3D space and add text, images and movies. The example from the Tweet I made follows a process where the app “looks” for objects that match the size of an A4 page with the same contents of one of the images. It then attaches a node of the same dimensions over the top and then plays a movie which matches the photo inside the node. I later added text that sits above the object and moves with it. Once I made the basic app I saw the possibilities to me of how this could be used at school. I believe this a great template for a AR tour of a school. Meeting the requirements of being a real world problem and solving a problem that affects the community, students could easily come up with their own version of using the app. Mathematically speaking I also appreciate the complexities in understanding how to place the objects inside the AR space. The technology understands distances and angles perfectly so it become a great activity in reinforcing these concepts. So over the coming week or so I will be releasing 5 movies that explain the process of creating the App. The best part is that the app works well after covering 2 of them, so it is quick at getting some buy in. The final 3 movies go through the process of adding some polish. I look forward to seeing other educators and students having a go and seeing what they come up with.

Soldering up the Adafruit Data Logger Shield for Arduino

So this week my Adafruit Data Logger arrived for my Arduino and I thought I’d share what it took to get it working. [caption id=“” align=“aligncenter” width=“360”] How the kit arrives[/caption]

The Adafruit Data Logger allows you to add the functionality of a SD card and a real time clock to an Arduino. I think this is a great idea for students as they will can to save record data and then be able to use that data to graph information at a later stage. My current plan is to record temperature. It costs around $19. When I purchased the kit its description said “assembled”, what I failed to realise is that the headers had not been attached  This meant I had to go get a new soldering iron (unfortunately) and some headers so that I could still have access to the Arduino inputs/outputs. After getting the equipment I realised that there are a couple of ways to add the headers. First was to use header with extended legs so that they would literally pass the i/o ports through. This would allow for the addition of another shield to connect on top. The other method is add the headers provided and then use the on board inner holes to add the headers (the images below make it clearer). As I had no plan to add another shield I chose the latter. So here are some shots of me soldering it together: [caption id=“attachment_56” align=“aligncenter” width=“300”]Extended Headers pre solder Extended Headers pre solder[/caption] [caption id=“attachment_57” align=“aligncenter” width=“300”]Headers soldered top view Headers soldered top view[/caption] [caption id=“attachment_58” align=“aligncenter” width=“300”]Extended headers solders and trimmed Extended headers solders and trimmed[/caption] [caption id=“attachment_59” align=“aligncenter” width=“300”]Headers to connect to Arduino Headers to connect to Arduino[/caption] [caption id=“attachment_60” align=“aligncenter” width=“300”]Data Logger Shield Soldered with header and connected to Arduino Data Logger Shield Soldered with header and connected to Arduino[/caption]   Finally this website has all the information you need to get the shield up and running. http://www.ladyada.net/make/logshield/index.html