<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

	<title>Hrob Miller's Blog</title>
	<link href="http://rob-miller.github.io/blog/atom.xml" rel="self"/>
	<link href="http://rob-miller.github.io/blog"/>
	<updated>2023-01-12T20:13:56+00:00</updated>
	<id>http://rob-miller.github.io/blog</id>
	<author>
		<name>Rob Miller</name>
		<email>rob@janerob.com</email>
	</author>

	
		<entry>
			<title>Today I ... free personal logger for iOS and MacOS</title>
			<link href="http://rob-miller.github.io/2020/06/23/todayi.html"/>
			<updated>2020-06-23T00:00:00+00:00</updated>
			<id>http://rob-miller.github.io/2020/06/23/todayi</id>
			<content type="html">&lt;h2 id=&quot;summary&quot;&gt;Summary:&lt;/h2&gt;
&lt;p&gt;I wrote a simple app for capturing sentences with time, date and
weather on iOS using iOS Shortcuts, and just the text and timestamp on
MacOS using a bash script.  The journal lives in iCloud, so it stays
synchronised between devices.  Here it is:&lt;/p&gt;

&lt;p&gt;For iOS, grab the ‘&lt;a href=&quot;https://www.icloud.com/shortcuts/8538b693ca1c4ba7910f278b85fe867d&quot;&gt;Local Info Strings&lt;/a&gt;’ and ‘&lt;a href=&quot;https://www.icloud.com/shortcuts/5efbcce549ea4ab9ad0076fd28aa8f31&quot;&gt;todayi&lt;/a&gt;’
Shortcuts and &lt;a href=&quot;https://support.apple.com/en-gb/guide/shortcuts/apdfeb05586f/ios&quot;&gt;learn how to add them to your iPhone or iPad&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For MacOS, see the Bash script and notes below.&lt;/p&gt;

&lt;p&gt;In both cases, my recommendation is to look at my work and roll your own!&lt;/p&gt;

&lt;h2 id=&quot;example&quot;&gt;Example:&lt;/h2&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;19/06/2020, 10:14 Paid Hadija school fees [xxx Road Berkhamsted - 14°C Mostly Cloudy hum 89 uv 2 aqi 1 (Low) NO2 - Nitrogen Dioxide: 8.8 μg/m³]
19/06/2020, 21:40 Worked on Woodlands with Mike [xxx Road Berkhamsted - 15°C Mostly Clear hum 81 uv 0 aqi 1 (Low) NO2 - Nitrogen Dioxide: 18.93 μg/m³]
22/06/2020, 23:25 John started working on Woodlands roof [xxx Road Berkhamsted - 15°C Clear hum 70 uv 0 aqi 1 (Low) NO2 - Nitrogen Dioxide: 12.62 μg/m³]
22/06/2020, 23:25 Went to wine club at Andrews again [xxx Road Berkhamsted - 15°C Clear hum 70 uv 0 aqi 1 (Low) NO2 - Nitrogen Dioxide: 12.62 μg/m³]
22/06/2020, 23:25 Paid for parallels on my new laptop [xxx Road Berkhamsted - 15°C Clear hum 70 uv 0 aqi 1 (Low) NO2 - Nitrogen Dioxide: 12.62 μg/m³]
23/06/2020, 16:44 ran 6 km [xxx Road Berkhamsted - 28°C Clear hum 39 uv 3 aqi 1 (Low) NO2 - Nitrogen Dioxide: 29.07 μg/m³]
23/06/2020, 21:48 Wrote a blog entry about today I [xxx Road Berkhamsted - 22°C Mostly Clear hum 58 uv 0 aqi 1 (Low) NO2 - Nitrogen Dioxide: 16.83 μg/m³]⏎                                                                             
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;background&quot;&gt;Background:&lt;/h2&gt;
&lt;p&gt;I’ve long had a personal interest in tracking, personal logging and/or
journalling.  This was part of my reason for writing
&lt;a href=&quot;https://apps.apple.com/us/app/rtracker-track-it-your-way/id486541371&quot;&gt;rTracker&lt;/a&gt;,
but I’ve wanted something more general.  The issue is that events
happen which are notable on the day - “noticed a funny cough this
morning” - but entirely random (thus outside of rTracker’s remit) and
lost without some system of making a note for it.  The real problem is
that these details only become important later, and you can’t tell in
advance what you should make a note of.&lt;/p&gt;

&lt;p&gt;To approach this I started using &lt;a href=&quot;https://dayoneapp.com/&quot;&gt;Day One&lt;/a&gt;, then got fed up with it when
they did a paid upgrade (and I didn’t want to pay after I missed the
discount window), while at the same
time something happened and I lost access to my journal.
Their support sorted me out so I got my data back, but I concluded
that this wasn’t where I wanted to be keeping the ongoing record of my
life.&lt;/p&gt;

&lt;p&gt;Later I found &lt;a href=&quot;https://2appstudio.com/journey/&quot;&gt;Journey&lt;/a&gt;, and was so pleased with it that I’m a fully paid
up lifetime user for both the iOS and MacOS versions.  I particularly
liked their ‘open data’ thinking and that it could import my previous
Day One entries, and I still use the iOS
version preferentially because it adds location and weather data to my
entries.  Recently I’ve felt they are not interested in developing
Journey further, but that’s based on poor responses to my feature
requests and no doubt they have other things to do.&lt;/p&gt;

&lt;p&gt;The problem with both of these is that they don’t actually target my
use case.  Really a journal for me - thanks to my High School English
classes - is a little essay about something I’m feeling or thinking
about at the moment, and I don’t actually have the time or energy to do
this everyday.  As a result I don’t end up logging the minutiae that
goes by - like when we bought or finished that last 1/2 ton of firewood, or had
the drains cleared of roots - and that means I can’t search for it
later to understand and learn from my own history.&lt;/p&gt;

&lt;h2 id=&quot;doing-it-macos-command-line-utility&quot;&gt;Doing it (MacOS command line utility):&lt;/h2&gt;
&lt;p&gt;So initially I thought up a short &lt;a href=&quot;https://www.gnu.org/software/bash/&quot;&gt;bash&lt;/a&gt; script that just takes
everything after the executable name and appends it to a text file.
The name is ‘todayi’:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;#!/usr/local/bin/bash&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;FIL&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;~/iCloudW/todayi.txt
&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$# &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-gt&lt;/span&gt; 0 &lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;then
   &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;DSTR&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;$(&lt;/span&gt;/bin/date &lt;span class=&quot;s2&quot;&gt;&quot;+%d/%m/%Y, %H:%M&quot;&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
   &lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;DSTR&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$@&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$FIL&lt;/span&gt; 
&lt;span class=&quot;k&quot;&gt;else
   &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;tail&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$FIL&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;fi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Type it without any additional text and it prints out the last few
lines for your pleasure.  If you copy this for your own use, do note that
my bash is in /usr/local/bin because I use the &lt;a href=&quot;https://brew.sh/&quot;&gt;Homebrew&lt;/a&gt; installation,
and ~/iCloudW is a &lt;a href=&quot;https://en.wikipedia.org/wiki/Symbolic_link&quot;&gt;link&lt;/a&gt; to the directory
~/Library/Mobile Documents/iCloud~is~workflow~my~workflows/Documents 
because nobody wants to type that out but it sure is nice to find the
stuff.  That directory link and the date format evolved out of what I
later needed to do to have a matching solution on my iPhone.&lt;/p&gt;

&lt;p&gt;Synchronising between iPhone and Mac is the easy part, as both have
access to documents stored in iCloud.  The next step was finding
&lt;a href=&quot;https://kodex.app/&quot;&gt;Kodex&lt;/a&gt;, a brilliant little text editor for iOS that immediately got a
place on my first page of apps.  This left &lt;a href=&quot;https://domainwebcenter.com/iphone-ios-13-shortcut-automation-to-insert-date-time-stamp-into-notes/&quot;&gt;getting the time/datestamp at least on to the clipboard&lt;/a&gt;,
and that’s how I initially discovered &lt;a href=&quot;https://support.apple.com/en-gb/guide/shortcuts/welcome/ios&quot;&gt;iOS Shortcuts&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;doing-it-ios-shortcuts&quot;&gt;Doing it (iOS shortcuts):&lt;/h2&gt;
&lt;p&gt;I leave it as an exercise to the reader to follow down &lt;a href=&quot;https://www.imore.com/all-shortcuts-actions-apple-apps&quot;&gt;that&lt;/a&gt; &lt;a href=&quot;https://www.matthewcassinelli.com/ios-13-siri-shortcuts-library/&quot;&gt;rabbit&lt;/a&gt;
&lt;a href=&quot;https://sharecuts.app/&quot;&gt;hole&lt;/a&gt; on their own, and simply present my own answer here.  I broke it
into two parts when I found the weather API has all the annotations I
wanted (time, location and weather) - so &lt;strong&gt;Local Info Strings&lt;/strong&gt; is a ‘subroutine’, while
the main app called &lt;strong&gt;todayi&lt;/strong&gt; gets the text from Siri and appends it all to the file:&lt;/p&gt;

&lt;h2 id=&quot;local-info-strings&quot;&gt;&lt;a href=&quot;https://www.icloud.com/shortcuts/8538b693ca1c4ba7910f278b85fe867d&quot;&gt;Local Info Strings:&lt;/a&gt;&lt;/h2&gt;

&lt;table&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Weather&lt;/td&gt;
      &lt;td&gt;Get current weather at&lt;/td&gt;
      &lt;td&gt;Current Location&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Weather&lt;/td&gt;
      &lt;td&gt;Get&lt;/td&gt;
      &lt;td&gt;Date&lt;/td&gt;
      &lt;td&gt;from&lt;/td&gt;
      &lt;td&gt;Weather Conditions&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Weather&lt;/td&gt;
      &lt;td&gt;Get&lt;/td&gt;
      &lt;td&gt;Temperature&lt;/td&gt;
      &lt;td&gt;from&lt;/td&gt;
      &lt;td&gt;Weather Conditions&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Weather&lt;/td&gt;
      &lt;td&gt;Get&lt;/td&gt;
      &lt;td&gt;Location&lt;/td&gt;
      &lt;td&gt;from&lt;/td&gt;
      &lt;td&gt;Weather Conditions&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Weather&lt;/td&gt;
      &lt;td&gt;Get&lt;/td&gt;
      &lt;td&gt;Condition&lt;/td&gt;
      &lt;td&gt;from&lt;/td&gt;
      &lt;td&gt;Weather Conditions&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Weather&lt;/td&gt;
      &lt;td&gt;Get&lt;/td&gt;
      &lt;td&gt;Humidity&lt;/td&gt;
      &lt;td&gt;from&lt;/td&gt;
      &lt;td&gt;Weather Conditions&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Weather&lt;/td&gt;
      &lt;td&gt;Get&lt;/td&gt;
      &lt;td&gt;UV Index&lt;/td&gt;
      &lt;td&gt;from&lt;/td&gt;
      &lt;td&gt;Weather Conditions&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Weather&lt;/td&gt;
      &lt;td&gt;Get&lt;/td&gt;
      &lt;td&gt;Air Quality Index&lt;/td&gt;
      &lt;td&gt;from&lt;/td&gt;
      &lt;td&gt;Weather Conditions&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Weather&lt;/td&gt;
      &lt;td&gt;Get&lt;/td&gt;
      &lt;td&gt;Air Quality Category&lt;/td&gt;
      &lt;td&gt;from&lt;/td&gt;
      &lt;td&gt;Weather Conditions&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Weather&lt;/td&gt;
      &lt;td&gt;Get&lt;/td&gt;
      &lt;td&gt;Air Pollutants&lt;/td&gt;
      &lt;td&gt;from&lt;/td&gt;
      &lt;td&gt;Weather Conditions&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Location&lt;/td&gt;
      &lt;td&gt;Get&lt;/td&gt;
      &lt;td&gt;Street&lt;/td&gt;
      &lt;td&gt;from&lt;/td&gt;
      &lt;td&gt;Location&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Location&lt;/td&gt;
      &lt;td&gt;Get&lt;/td&gt;
      &lt;td&gt;Town/City&lt;/td&gt;
      &lt;td&gt;from&lt;/td&gt;
      &lt;td&gt;Location&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Text&lt;/td&gt;
      &lt;td&gt;Date&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Variables&lt;/td&gt;
      &lt;td&gt;Set variable&lt;/td&gt;
      &lt;td&gt;Datestr&lt;/td&gt;
      &lt;td&gt;to&lt;/td&gt;
      &lt;td&gt;Text&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Text&lt;/td&gt;
      &lt;td&gt;Street Town/City&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Variables&lt;/td&gt;
      &lt;td&gt;Set variable&lt;/td&gt;
      &lt;td&gt;Locstr&lt;/td&gt;
      &lt;td&gt;to&lt;/td&gt;
      &lt;td&gt;Text&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Text&lt;/td&gt;
      &lt;td&gt;Temperature Condition hum Humidity uv UV Index aqi Air Quality Index (Air Quality Category) Air Pollutants&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Variables&lt;/td&gt;
      &lt;td&gt;Set variable&lt;/td&gt;
      &lt;td&gt;Wthrstr&lt;/td&gt;
      &lt;td&gt;to&lt;/td&gt;
      &lt;td&gt;Text&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;List&lt;/td&gt;
      &lt;td&gt;Datestr&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt;Locstr&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt;Wthrstr&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;todayi&quot;&gt;&lt;a href=&quot;https://www.icloud.com/shortcuts/5efbcce549ea4ab9ad0076fd28aa8f31&quot;&gt;todayi:&lt;/a&gt;&lt;/h2&gt;

&lt;table&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Documents&lt;/td&gt;
      &lt;td&gt;Dictate text&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Shortcuts&lt;/td&gt;
      &lt;td&gt;Run&lt;/td&gt;
      &lt;td&gt;Local Info Strings&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Scripting&lt;/td&gt;
      &lt;td&gt;Get&lt;/td&gt;
      &lt;td&gt;First Item&lt;/td&gt;
      &lt;td&gt;from&lt;/td&gt;
      &lt;td&gt;Shortcut Result&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Scripting&lt;/td&gt;
      &lt;td&gt;Get&lt;/td&gt;
      &lt;td&gt;Last Item&lt;/td&gt;
      &lt;td&gt;from&lt;/td&gt;
      &lt;td&gt;Shortcut Result&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Scripting&lt;/td&gt;
      &lt;td&gt;Get&lt;/td&gt;
      &lt;td&gt;Item At Index&lt;/td&gt;
      &lt;td&gt;2&lt;/td&gt;
      &lt;td&gt;from&lt;/td&gt;
      &lt;td&gt;Shortcut Result&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Text&lt;/td&gt;
      &lt;td&gt;Item from List Dictated Text [Item from List - Item From List]&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Documents&lt;/td&gt;
      &lt;td&gt;Append&lt;/td&gt;
      &lt;td&gt;Text&lt;/td&gt;
      &lt;td&gt;iCloud Drive&lt;/td&gt;
      &lt;td&gt;/todayi.txt&lt;/td&gt;
      &lt;td&gt;Make New Line Yes&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;usage-and-conclusion&quot;&gt;Usage and Conclusion:&lt;/h2&gt;
&lt;p&gt;To use, start Siri and say “Today I” and wait.  Siri will ask ‘What text?’, then press the Siri button and say what you like.&lt;/p&gt;

&lt;p&gt;I added the Air Quality and other weather data because I move around a lot, and our next posting will be more polluted than our current one.  There’s still the problem that Siri dictated text may not always be perfect, but for that I just fix the entry with &lt;a href=&quot;https://kodex.app/&quot;&gt;Kodex&lt;/a&gt; - the todayi.txt file is under &lt;em&gt;Shortcuts&lt;/em&gt; in the iOS &lt;strong&gt;Files&lt;/strong&gt; app and your iCloud folder, or you can check the note on the directory link above fore the Bash script to find it on your Mac.&lt;/p&gt;

&lt;p&gt;Enjoy!&lt;/p&gt;

</content>
		</entry>
	
		<entry>
			<title>Card Skimmer in the Wild</title>
			<link href="http://rob-miller.github.io/2020/05/31/card-skimmer.html"/>
			<updated>2020-05-31T00:00:00+00:00</updated>
			<id>http://rob-miller.github.io/2020/05/31/card-skimmer</id>
			<content type="html">&lt;p class=&quot;head1&quot;&gt;
takehome:
&lt;/p&gt;
&lt;p&gt;To skim your card, they need to copy the mag strip and get your pin.  Therefore:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;em&gt;Cover your fingers when you key in the PIN.&lt;/em&gt;  Be especially wary of
privacy covers that cover your fingers.&lt;/li&gt;
  &lt;li&gt;Try to only use the ‘chip and pin’ chip: avoid putting your card in a device that takes in the entire card.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/assets/card-skimmer/IMG_5989.JPG&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Sometime in 2018 or so I received a WhatsApp message reporting a
friend’s card had been skimmed at a specific ATM.  I was between
projects, so I drove out to take a look. Note that the image above was taken some time later, after I realised I only had close-ups.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/card-skimmer/1_front.jpg&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I was initially skeptical, as my understanding was that a card skimmer would be some kind of ‘front end’ placed over the machine.  I recognised the design of this ATM (I use others with the same bank), so I was initially very skeptical.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/card-skimmer/2_lift.jpg&quot; /&gt;&lt;/p&gt;

&lt;p&gt;It was only when I touched around the slot that I could feel a rough edge that did not seem right and later found I could lift up this part with my finger nail.  I think the visible part of the skimmer is translucent plastic that picks up the green colour from the surrounding lighted plastic - but could be wrong.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/card-skimmer/3_cracking1.jpg&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The give-away is the cracking in the plastic - maybe from solvents in
the glue they used, or from having to force the slot open to get the skimmer in.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/card-skimmer/4_cracking.jpg&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Also the imperfect edge of the skimmer inside the more exposed part of the slot is (barely) visible.&lt;/p&gt;

&lt;p&gt;Next part is they need to get the PIN as well.  Took me a long time to find it but should have been obvious that there is only one place the camera could be.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/card-skimmer/5_camera.jpg&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I thought the long grey part was correctly part of the ATM (and the
bank staff I brought said it was) but it’s not.  I think it provides
cover for a battery and electronics, and is unnecessary as part of the
finger cover for the ATM.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/card-skimmer/6_camera2.jpg&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Definitely this finger-molded region is not standard equipment, so that is the other give-away.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/card-skimmer/7_camera3.jpg&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Here they had to colour match the rest of the material and did a good job to my eyes.  Still hard to tell that the longer section is part of the skimming system given where the rough edges are.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/card-skimmer/IMG_5990.JPG&quot; /&gt;
&lt;img src=&quot;/assets/card-skimmer/IMG_5991.JPG&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Above are photos of the finger guard some months later, with the skimmer
removed.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/card-skimmer/cc.jpg&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The ‘chip and pin’ system is better because the reader presents a challenge that
the chip must process along with the PIN and generate the
correct result electronically.  No skimmer will copy that circuit in
the time to make a purchase, but copying the mag strip on the back is
trivial.&lt;/p&gt;

&lt;p&gt;The take-homes for me are&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Don’t accept ‘normal wear-and-tear’ around the card slot without a
closer look and a good prodding feel.&lt;/li&gt;
  &lt;li&gt;Be especially wary of ATMs with the convenient finger cover as they
provide a great place to hide a camera.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you covered your fingers with another hand (like they tell you to
but I didn’t before this) 
that would likely solve the problem completely.&lt;/p&gt;

</content>
		</entry>
	
		<entry>
			<title>Vacuum Dryer for 3D Printer Filament</title>
			<link href="http://rob-miller.github.io/2018/05/18/filament-dryer.html"/>
			<updated>2018-05-18T00:00:00+00:00</updated>
			<id>http://rob-miller.github.io/2018/05/18/filament-dryer</id>
			<content type="html">&lt;p&gt;&lt;img src=&quot;/assets/filament-dryer/1.jpg&quot; /&gt;&lt;/p&gt;

&lt;p&gt;This post describes how I built a vacuum dryer for my 3D printer filament; I also use it for drying silica gel.&lt;/p&gt;

&lt;p class=&quot;warn&quot;&gt; 
DISCLAIMER: BUILD AT YOUR OWN RISK.  THIS PROJECT USES MAINS VOLTAGE (110/220V) AND WILL KILL YOU IF YOU MESS UP.  THIS IS FOR INFORMATIONAL PURPOSES ONLY.  DO NOT ATTEMPT THIS PROJECT.
&lt;/p&gt;

&lt;p class=&quot;warn&quot;&gt; 
PLEASE NOTE: I am NOT providing a wiring diagram for this project.  You require sufficient electronics skills to confidently and correctly assemble the parts described on your own.
&lt;/p&gt;

&lt;p class=&quot;warn&quot;&gt; 
ALSO NOTE: The 220V components used in this project have NO GROUND connections, so in my version of the project I grounded everything and everywhere I could think of.
&lt;/p&gt;

&lt;p&gt;I need this because (at the time of writing) I live on the coast of east Africa, where the humidity can be high:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/filament-dryer/2.jpg&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Parts list (see the photos):&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Vacuum pumps (2): described on eBay as “DC12V 65-120kPa mini vacuum pump negative pressure suction micropump 5L/min”.  These cost £10-20 and there seem to be lots of suppliers.  The useful thing is that they can be put in series to create a stronger vacuum.&lt;/li&gt;
  &lt;li&gt;12V power supply for the vacuum pumps, I use the common LED ones.&lt;/li&gt;
  &lt;li&gt;Vacuum pressure gauge: described on eBay as “Dry utility vacuum pressure gauge blk steel 1/4” NPT lower mount -30Hg/60PSI”.  Cost currently around £5.&lt;/li&gt;
  &lt;li&gt;Pressure cooker: I got one at a local Chinese supermarket, cost about US$25.  Must be large enough to hold your filament spool(s) or whatever you want to dry, plus some extra space for e.g. small blocks of wood to keep your objects from touching the sides.  Definitely get one with accessories you can take off (e.g. just bolted on) so you have some access holes - you need one for the vacuum gauge and a second for the internal temperature probe.  You also need a port for the vacuum hose (that’s three total ports now) and still have the vacuum release mechanism working (or some other way to release the vacuum).&lt;/li&gt;
  &lt;li&gt;Thermostat control switches (2): described on eBay as “12V/24V/220V digital LED temperature controller thermostat control switch probe”.  I used 220V to match the heating elements below.  Current cost about £4.&lt;/li&gt;
  &lt;li&gt;Constant temperature heaters (4): described on eBay as “110V/220V PTC heating element thermostat heater plate 50/80/100/140W high power”.   I think I used the 80W / 150C units to provide a little extra heating power, but the whole point of the system is to heat to a maximum of 100C.  Current cost around £4 each.&lt;/li&gt;
  &lt;li&gt;A vacuum trap of some sort to catch the evaporated water, otherwise it goes into the pumps and probably degrades them.&lt;/li&gt;
  &lt;li&gt;Various supplies - vacuum hose, silicone seal (I used high temp stuff because I had it), hose clamps and plumbing bits to go into the ports of the pressure cooker.  Also wiring, heat shrink tubing, wood, rubber sheets if you want to do it all as shown in the photos.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here is the layout of the base, before I added the second thermostatic control switch:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/filament-dryer/3.jpg&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Probably hard to tell from the photos, the heating units have a raised section and a larger base plate with mounting holes.  I’ve cut holes in the rubber sheeting for the raised sections to fit into.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/filament-dryer/4.jpg&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Here’s the pumps so you know what to look for on eBay:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/filament-dryer/5.jpg&quot; /&gt;&lt;/p&gt;

&lt;p&gt;See the photo at the top of the post for the big picture layout and the routing of the vacuum tubing.  Also see the v2.1 photo further below for some heat shielding added later.  (v1.0 used a weaker pot which collapsed under the vacuum)&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/filament-dryer/6.jpg&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Above the main device in action.  The sensor for the thermostatic control on the left is taped to the outside of the pot, while the one on the right goes through a silicone sealant filled tube and a plastic tube inside to the middle of the space.  Note the readouts: the outside is at 56.4C and power is enabled (blue light), while inside is warmer (60.2C) which is over the cutoff so power is disabled.  The thermostatic controls are wired in series, so both must be on to get power to the heaters.  There is a lot of hysteresis in the system, so just having one sensor could easily exceed target temperatures by 10C or more.&lt;/p&gt;

&lt;p&gt;I use a blanket over the system to trap heat inside while it is running.  You can see this in some of the photos.&lt;/p&gt;

&lt;p&gt;Here’s some more views of the top lid:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/filament-dryer/7.jpg&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/filament-dryer/8.jpg&quot; /&gt;&lt;/p&gt;

&lt;p&gt;As can be seen above, there’s lots of silicone sealant plus I added a small 12V fan to shift the air around a bit inside the pot.  Also the internal temperature sensor can be seen at the end of the plastic tube.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/filament-dryer/9.jpg&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;v2.1:&lt;/strong&gt; After 6 months or so of use one of the thermostatic controls died.  Could be they’re just poorly made, but seems like they can get too hot next to the pot so added the heat shield shown in the photo above.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/filament-dryer/10.jpg&quot; /&gt;&lt;/p&gt;

&lt;p&gt;This would be the best vacuum I ever got.  around -0.85 bar is more common.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/filament-dryer/11.jpg&quot; /&gt;&lt;/p&gt;

&lt;p&gt;For filament I’d normally only get a few mls off a spool, but enough to make a visible difference in printing.  The volume above was from drying out silica gel.&lt;/p&gt;

&lt;h2&gt;Usage:&lt;/h2&gt;

&lt;p&gt;Once you’ve built a vacuum dryer, the goal is to force water into the gaseous state at a temperature that will not melt your filament.&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;InHG&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Bar&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;H2O boiling point C&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Glass Transition Temp&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt; &lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt; &lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;105&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;ABS ~105&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;0&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;0&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;100&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;-4.92&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;-0.16661&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;96&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;-9.23&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;-0.31256&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;90&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;-10.24&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;-0.34667&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;89&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;-15.94&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;-0.53979&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;80&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;PETG 80-88&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;-20.72&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;-0.70166&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;70&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;-22.05&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;-0.74670&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;67&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;-24.04&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;-0.81409&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;60&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;PLA 60-65&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;-25.98&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;-0.87978&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;52&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;-26.28&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;-0.88994&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;50&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt; &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;The boiling point vs. pressure information above was worked out from &lt;a href=&quot;https://www.engineeringtoolbox.com/water-evacuation-pressure-temperature-d_1686.html&quot;&gt;engineering toolbox&lt;/a&gt; and &lt;a href=&quot;https://www.omnicalculator.com/chemistry/Boliling-point&quot;&gt;omnicalculator&lt;/a&gt; web pages.&lt;/p&gt;

&lt;p&gt;As shown, the system can get sufficient vacuum to boil water even below PLA’s glass transition temperature.&lt;/p&gt;

&lt;p&gt;Certainly you can dry filament in a regular oven at low temperatures at normal air pressure, but this should be more efficient.&lt;/p&gt;

&lt;p&gt;Stefan from CNC Kitchen in his YouTube video &lt;a href=&quot;https://www.youtube.com/watch?v=FAXUjZZER5E&quot;&gt;“Why you need to dry your filaments”&lt;/a&gt; recommends&lt;/p&gt;

&lt;p&gt;PLA 45C&lt;/p&gt;

&lt;p&gt;PETG 65C&lt;/p&gt;

&lt;p&gt;ABS and Nylon 80C&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Silica_gel&quot;&gt;Wikipedia&lt;/a&gt; recommends silica gel be dried 1-2 hours at 120C.&lt;/p&gt;

&lt;p&gt;For my use I stay about 10C below the relevant glass temperature in the table above for the max setting for the internal thermostat (as discussed above it creeps a few degrees above this) for 6 hours or so - I just leave it going until there doesn’t seem to be any more water coming out.  I have measured 0.2-1.0% change in weight for a 1Kg spool of PETG filament after 6 hours at 70C.  For silica gel I set it to 105C.&lt;/p&gt;

</content>
		</entry>
	

</feed>

