<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Peek Read Info (Posts about hacking)</title><link>https://peekread.info/</link><description></description><atom:link href="https://peekread.info/tags/hacking.xml" rel="self" type="application/rss+xml"></atom:link><language>en</language><copyright>Contents © 2024 &lt;a href="mailto:dugite-code@peekread.info"&gt;Dugite-Code&lt;/a&gt; 
&lt;a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/"&gt;
&lt;img alt="Creative Commons License BY-SA"
width="88px" height="31px" style="border-width:0; margin-bottom:12px;"
src="https://i.creativecommons.org/l/by-sa/4.0/88x31.png"&gt;&lt;/a&gt;</copyright><lastBuildDate>Wed, 14 Feb 2024 06:33:09 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Removing 3g modem from a Kindle Paperwhite 2</title><link>https://peekread.info/tech/20210120-removing-3g-modem-from-a-kindle-paperwhite-2/</link><dc:creator>Dugite-Code</dc:creator><description>&lt;p&gt;&lt;/p&gt;&lt;div class="d-flex position-relative pt-3 pb-3"&gt;
    &lt;div class="flex-shrink-0 me-3"&gt;
        &lt;img data-pagefind-meta="image[src], image_alt[alt]" style="height:89px;" src="https://peekread.info/images/2021/0122-removing-3g-modem-from-a-kindle-paperwhite-2/kindle.png" alt="Why do I need the cloud?"&gt;
    &lt;/div&gt;
    &lt;div&gt;
        &lt;p class="mt-3"&gt;&lt;/p&gt;&lt;p&gt;Do I need the cloud connectivity on my kindle everywhere I go? Probably not.&lt;/p&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;A few years ago I received an old Kindle 3g Paperwhite 2 (2013) 6th from my mother. She wasn't a fan of the screen and decided she preferred a full tablet for reading while I quickly fell in love with the e-ink screen. However my use-case involves mainly e-novels/websites I scrape and upload via Calibre. Given how privacy conscious I have become, and how much of a power drain a 3g modem can be, I've basically had it in airplane mode since I received it.&lt;/p&gt;
&lt;p&gt;But walking to my desktop to sync books when the device has wifi capability felt wasteful. Searches on the internet proved fruitless on ways to disable the 3g.&lt;/p&gt;
&lt;h3&gt;Modular hardware&lt;/h3&gt;
&lt;p&gt;While searching for a teardown video to determine what the internals even looked like I stumbled upon &lt;a href="https://www.youtube.com/watch?v=lD-wPmowR-Y"&gt;this video&lt;/a&gt; for an older kindle model where it was pointed out how modular Kindle hardware really is. After seeing the wifi paperwhite internals and seeing this video I felt it was likely they were still utilizing this modular design method (after all, if it works), so I cracked open my kindle following this &lt;a href="https://www.ifixit.com/Guide/Kindle+Paperwhite+2nd+Generation+Motherboard+Replacement/71196"&gt;ifixit guide&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Well that was simpler than it looked&lt;/h3&gt;
&lt;p&gt;Thankfully removing the 3g modem is a non-destructive process (apart from the glue when removing the bezel).&lt;/p&gt;
&lt;div class="container"&gt;
&lt;div class="row"&gt;
&lt;div class="col-12 col-lg-6"&gt;

&lt;img alt="Kindle paperwhite 2 internals" class="img-fluid dark-image mx-auto d-block text-center text-light" loading="lazy" max-height="640" max-width="480" src="https://peekread.info/images/2021/0122-removing-3g-modem-from-a-kindle-paperwhite-2/image01.png"&gt;

&lt;ol&gt;
&lt;li&gt;Is the 3g antenna - I didn't remove this.&lt;/li&gt;
&lt;li&gt;Is the 3g modem - Held in by 4 screws and attached with a tiny connection plug.&lt;/li&gt;
&lt;li&gt;Is simcard slot - Simply push the tray lid in the direction of the arrow to open.&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div class="col-12 col-lg-6"&gt;

&lt;img alt="3g Modem removed" class="img-fluid dark-image mx-auto d-block text-center text-light" loading="lazy" max-height="640" max-width="480" src="https://peekread.info/images/2021/0122-removing-3g-modem-from-a-kindle-paperwhite-2/image02.png"&gt;

&lt;ol&gt;
&lt;li&gt;Is the 3g antenna connector - This is a simple push connector. A firm pull up away from the board will disconnect this without damage. I used some tape to secure the wire for re-assembly&lt;/li&gt;
&lt;li&gt;A loose metal washer, I secured this back in place with the screw I removed previously.&lt;/li&gt;
&lt;li&gt;A loose metal washer, I secured this back in place with the screw I removed previously.&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;Re-assembly&lt;/h3&gt;
&lt;p&gt;This was simply a matter of re-placing the board, screws and lightly clamping the bezel back in place. The glue on the bezel was, thankfully, still sticky enough to re-attach without any issue. As the bezel has no mechanical stresses on it I don't see this ever being and issue.&lt;/p&gt;
&lt;h3&gt;My next steps&lt;/h3&gt;
&lt;p&gt;My next steps where to jailbreak/root my kindle to install a couple of useful tools (i.e. a firewall). I plan to go over this in detail along with my remote book managment solution in another post so Stay tuned.&lt;/p&gt;</description><category>hacking</category><category>hardware</category><guid>https://peekread.info/tech/20210120-removing-3g-modem-from-a-kindle-paperwhite-2/</guid><pubDate>Tue, 19 Jan 2021 16:00:00 GMT</pubDate></item><item><title>Fixing a Patreon feed's cover artwork</title><link>https://peekread.info/tech/20190919-fixing-a-patreon-rss-cover-image/</link><dc:creator>Dugite-Code</dc:creator><description>&lt;p&gt;&lt;/p&gt;&lt;div class="d-flex position-relative pt-3 pb-3"&gt;
    &lt;div class="flex-shrink-0 me-3"&gt;
        &lt;img data-pagefind-meta="image[src], image_alt[alt]" style="height:89px;" src="https://peekread.info/images/2019/0919-fixing-a-patreon-rss-cover-image/image02.png" alt="Antennapod"&gt;
    &lt;/div&gt;
    &lt;div&gt;
        &lt;p class="mt-3"&gt;&lt;/p&gt;&lt;p&gt;With the recent &lt;a href="https://blog.pocketcasts.com/we-heard-you/"&gt;Pocketcast PR blunder&lt;/a&gt; I finally decided to jump back to open source Antennapod. This has been painless especially with the introduction of the &lt;a href="https://github.com/AntennaPod/AntennaPod/pull/2961"&gt;Remove silence&lt;/a&gt; feature, the main feature that kept me with Pocketcasts for so long.&lt;/p&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The only issue I had was a Private feed with broken cover artwork, this was frustrating but it looks to be an issue on Patreons end. Thankfully Node Red is available to rescue the situation!&lt;/p&gt;
&lt;p&gt;The flow is really simple, the only additional node I have added is the &lt;a href="https://github.com/endemecio02/node-red-contrib-httpauth"&gt;node-red-contrib-httpauth&lt;/a&gt;.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;On a HTTP request, fetch the RSS feed.&lt;/li&gt;
&lt;li&gt;Convert from XML to and Object.&lt;/li&gt;
&lt;li&gt;Replace &lt;code&gt;msg.payload.rss.channel[0].image[0].url[0]&lt;/code&gt; with a good url from the podcasters website.&lt;/li&gt;
&lt;li&gt;Create the &lt;code&gt;txt/xml&lt;/code&gt; headers&lt;/li&gt;
&lt;li&gt;Return the fixed RSS Feed&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt="Node-Red Flow" class="img-fluid dark-image mx-auto d-block text-center text-light" loading="lazy" max-height="155" max-width="776" src="https://peekread.info/images/2019/0919-fixing-a-patreon-rss-cover-image/image01.png"&gt;&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="nt"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"8d2a4ad1.4599a"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"http request"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"z"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"d437ad18.0999c"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"method"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"GET"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"ret"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"txt"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"paytoqs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"https://www.patreon.com/rss/yaddayada"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"tls"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"proxy"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"authType"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"x"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;367.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"y"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;31&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"wires"&lt;/span&gt;&lt;span class="p"&gt;:[[&lt;/span&gt;&lt;span class="s2"&gt;"4c5cdedd.6772c8"&lt;/span&gt;&lt;span class="p"&gt;]]},{&lt;/span&gt;&lt;span class="nt"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"4c5cdedd.6772c8"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"xml"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"z"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"d437ad18.0999c"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"XML To Object"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"property"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"payload"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"attr"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"chr"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"x"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;230.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"y"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;78&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"wires"&lt;/span&gt;&lt;span class="p"&gt;:[[&lt;/span&gt;&lt;span class="s2"&gt;"adbd8c2e.7fbcd"&lt;/span&gt;&lt;span class="p"&gt;]]},{&lt;/span&gt;&lt;span class="nt"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"7475a34e.9f953c"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"http in"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"z"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"d437ad18.0999c"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"rss"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"/mystupidRSS"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"method"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"get"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"upload"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"swaggerDoc"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"x"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;69.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"y"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;31&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"wires"&lt;/span&gt;&lt;span class="p"&gt;:[[&lt;/span&gt;&lt;span class="s2"&gt;"26c3aede.f41d4a"&lt;/span&gt;&lt;span class="p"&gt;]]},{&lt;/span&gt;&lt;span class="nt"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"26c3aede.f41d4a"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"node-red-contrib-httpauth"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"z"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"d437ad18.0999c"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"file"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"cred"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"authType"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Basic"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"realm"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"username"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"password"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"hashed"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"x"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;213.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"y"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;31&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"wires"&lt;/span&gt;&lt;span class="p"&gt;:[[&lt;/span&gt;&lt;span class="s2"&gt;"8d2a4ad1.4599a"&lt;/span&gt;&lt;span class="p"&gt;]]},{&lt;/span&gt;&lt;span class="nt"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"56731f49.b7f77"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"xml"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"z"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"d437ad18.0999c"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Object to XML"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"property"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"payload"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"attr"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"chr"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"x"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;647.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"y"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;79&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"wires"&lt;/span&gt;&lt;span class="p"&gt;:[[&lt;/span&gt;&lt;span class="s2"&gt;"5aa22446.612044"&lt;/span&gt;&lt;span class="p"&gt;]]},{&lt;/span&gt;&lt;span class="nt"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"5aa22446.612044"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"change"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"z"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"d437ad18.0999c"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Set Headers"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"rules"&lt;/span&gt;&lt;span class="p"&gt;:[{&lt;/span&gt;&lt;span class="nt"&gt;"t"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"set"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"p"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"headers"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"pt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"msg"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"to"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"{}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"tot"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"json"&lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="nt"&gt;"t"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"set"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"p"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"headers.content-type"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"pt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"msg"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"to"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"text/xml"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"tot"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"str"&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;&lt;span class="nt"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"property"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"from"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"to"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"reg"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"x"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;219&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"y"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;131&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"wires"&lt;/span&gt;&lt;span class="p"&gt;:[[&lt;/span&gt;&lt;span class="s2"&gt;"8df07127.e9d0c8"&lt;/span&gt;&lt;span class="p"&gt;]]},{&lt;/span&gt;&lt;span class="nt"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"8df07127.e9d0c8"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"http response"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"z"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"d437ad18.0999c"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"statusCode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"headers"&lt;/span&gt;&lt;span class="p"&gt;:{},&lt;/span&gt;&lt;span class="nt"&gt;"x"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;391&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"y"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;131&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"wires"&lt;/span&gt;&lt;span class="p"&gt;:[]},{&lt;/span&gt;&lt;span class="nt"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"adbd8c2e.7fbcd"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"change"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"z"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"d437ad18.0999c"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Replace Cover Image"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"rules"&lt;/span&gt;&lt;span class="p"&gt;:[{&lt;/span&gt;&lt;span class="nt"&gt;"t"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"set"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"p"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"payload.rss.channel[0].image[0].url[0]"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"pt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"msg"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"to"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/cover_art.png"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"tot"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"str"&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;&lt;span class="nt"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"property"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"from"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"to"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"reg"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"x"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;440.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"y"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;79&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"wires"&lt;/span&gt;&lt;span class="p"&gt;:[[&lt;/span&gt;&lt;span class="s2"&gt;"56731f49.b7f77"&lt;/span&gt;&lt;span class="p"&gt;]]}]&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;</description><category>hacking</category><category>node-red</category><category>rss</category><guid>https://peekread.info/tech/20190919-fixing-a-patreon-rss-cover-image/</guid><pubDate>Wed, 18 Sep 2019 16:00:00 GMT</pubDate></item><item><title>Something neat I did with FitNotes and Tasker</title><link>https://peekread.info/tech/20190722-fitnotes-and-tasker/</link><dc:creator>Dugite-Code</dc:creator><description>&lt;p&gt;&lt;/p&gt;&lt;div class="d-flex position-relative pt-3 pb-3"&gt;
    &lt;div class="flex-shrink-0 me-3"&gt;
        &lt;img data-pagefind-meta="image[src], image_alt[alt]" style="height:89px;" src="https://peekread.info/images/2019/0722-fitnotes-and-tasker/image1.png" alt="FitNotes App for Android"&gt;
    &lt;/div&gt;
    &lt;div&gt;
        &lt;p class="mt-3"&gt;&lt;/p&gt;&lt;p&gt;I use the fitness tracking app FitNotes on Android. It's a great application that I have happily used for years. The greatest issue I had with it was manually entering my body weight. Well I finally got myself into gear and fixed that issue using the fantastic staple of Android automation, &lt;a href="https://tasker.joaoapps.com/"&gt;Tasker&lt;/a&gt;&lt;/p&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Using a Xiaomi Mi Smart Scale that I hooked up to my home server using my &lt;a href="https://github.com/dugite-code/miscale.py"&gt;python gatttool wrapper&lt;/a&gt; I Dump it's weight data into a Google spreadsheet.&lt;/p&gt;
&lt;p&gt;Using my &lt;a href="https://github.com/dugite-code/GSheet-Scripts/tree/master/Simple%20API"&gt;Simple API&lt;/a&gt; (Because Google's own API is a pain) and the helper task &lt;a href="http://tasker.wikidot.com/getformatteddate"&gt;getformatteddate&lt;/a&gt;, I pull a unix timestamp and the weight onto my Phone. I then run a &lt;code&gt;INSERT&lt;/code&gt; SQL command on FitNote's database (using root of course)&lt;/p&gt;
&lt;p&gt;I also did a bulk body weight record import via &lt;code&gt;.csv&lt;/code&gt; using &lt;a href="https://sqlitebrowser.org/"&gt;sqlitebrowser&lt;/a&gt;. Now I no longer have to manually enter my body weight, should have done this years ago.&lt;/p&gt;
&lt;p&gt;Here is my Tasker task if you are interested:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="w"&gt;    &lt;/span&gt;Healthapi&lt;span class="w"&gt; &lt;/span&gt;(&lt;span class="m"&gt;44&lt;/span&gt;)
&lt;span class="w"&gt;        &lt;/span&gt;A1:&lt;span class="w"&gt; &lt;/span&gt;Flash&lt;span class="w"&gt; &lt;/span&gt;[&lt;span class="w"&gt; &lt;/span&gt;Text:%date&lt;span class="w"&gt; &lt;/span&gt;%time&lt;span class="w"&gt; &lt;/span&gt;Long:Off&lt;span class="w"&gt; &lt;/span&gt;]
&lt;span class="w"&gt;        &lt;/span&gt;A2:&lt;span class="w"&gt; &lt;/span&gt;Flash&lt;span class="w"&gt; &lt;/span&gt;[&lt;span class="w"&gt; &lt;/span&gt;Text:Updating&lt;span class="w"&gt; &lt;/span&gt;Health&lt;span class="w"&gt; &lt;/span&gt;Report&lt;span class="w"&gt; &lt;/span&gt;Long:Off&lt;span class="w"&gt; &lt;/span&gt;]
&lt;span class="w"&gt;        &lt;/span&gt;A3:&lt;span class="w"&gt; &lt;/span&gt;HTTP&lt;span class="w"&gt; &lt;/span&gt;Get&lt;span class="w"&gt; &lt;/span&gt;[&lt;span class="w"&gt; &lt;/span&gt;Server:Port:https://script.google.com&lt;span class="w"&gt; &lt;/span&gt;Path:/macros/s/myprivatesheet/exec&lt;span class="w"&gt; &lt;/span&gt;Attributes:key=myapikey&lt;span class="w"&gt; &lt;/span&gt;Cookies:&lt;span class="w"&gt; &lt;/span&gt;User&lt;span class="w"&gt; &lt;/span&gt;Agent:&lt;span class="w"&gt; &lt;/span&gt;Timeout:&lt;span class="m"&gt;20&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Mime&lt;span class="w"&gt; &lt;/span&gt;Type:&lt;span class="w"&gt; &lt;/span&gt;Output&lt;span class="w"&gt; &lt;/span&gt;File:&lt;span class="w"&gt; &lt;/span&gt;Trust&lt;span class="w"&gt; &lt;/span&gt;Any&lt;span class="w"&gt; &lt;/span&gt;Certificate:Off&lt;span class="w"&gt; &lt;/span&gt;]
&lt;span class="w"&gt;        &lt;/span&gt;A4:&lt;span class="w"&gt; &lt;/span&gt;Variable&lt;span class="w"&gt; &lt;/span&gt;Set&lt;span class="w"&gt; &lt;/span&gt;[&lt;span class="w"&gt; &lt;/span&gt;Name:%data&lt;span class="w"&gt; &lt;/span&gt;To:%HTTPD&lt;span class="w"&gt; &lt;/span&gt;Recurse&lt;span class="w"&gt; &lt;/span&gt;Variables:Off&lt;span class="w"&gt; &lt;/span&gt;Do&lt;span class="w"&gt; &lt;/span&gt;Maths:Off&lt;span class="w"&gt; &lt;/span&gt;Append:Off&lt;span class="w"&gt; &lt;/span&gt;]
&lt;span class="w"&gt;        &lt;/span&gt;A5:&lt;span class="w"&gt; &lt;/span&gt;Variable&lt;span class="w"&gt; &lt;/span&gt;Set&lt;span class="w"&gt; &lt;/span&gt;[&lt;span class="w"&gt; &lt;/span&gt;Name:%newline&lt;span class="w"&gt; &lt;/span&gt;To:
&lt;span class="w"&gt;     &lt;/span&gt;Recurse&lt;span class="w"&gt; &lt;/span&gt;Variables:Off&lt;span class="w"&gt; &lt;/span&gt;Do&lt;span class="w"&gt; &lt;/span&gt;Maths:Off&lt;span class="w"&gt; &lt;/span&gt;Append:Off&lt;span class="w"&gt; &lt;/span&gt;]
&lt;span class="w"&gt;        &lt;/span&gt;A6:&lt;span class="w"&gt; &lt;/span&gt;Variable&lt;span class="w"&gt; &lt;/span&gt;Split&lt;span class="w"&gt; &lt;/span&gt;[&lt;span class="w"&gt; &lt;/span&gt;Name:%data&lt;span class="w"&gt; &lt;/span&gt;Splitter:%newline&lt;span class="w"&gt; &lt;/span&gt;Delete&lt;span class="w"&gt; &lt;/span&gt;Base:Off&lt;span class="w"&gt; &lt;/span&gt;]
&lt;span class="w"&gt;        &lt;/span&gt;A7:&lt;span class="w"&gt; &lt;/span&gt;Variable&lt;span class="w"&gt; &lt;/span&gt;Split&lt;span class="w"&gt; &lt;/span&gt;[&lt;span class="w"&gt; &lt;/span&gt;Name:%data1&lt;span class="w"&gt; &lt;/span&gt;Splitter:,&lt;span class="w"&gt; &lt;/span&gt;Delete&lt;span class="w"&gt; &lt;/span&gt;Base:Off&lt;span class="w"&gt; &lt;/span&gt;]
&lt;span class="w"&gt;        &lt;/span&gt;A8:&lt;span class="w"&gt; &lt;/span&gt;Read&lt;span class="w"&gt; &lt;/span&gt;File&lt;span class="w"&gt; &lt;/span&gt;[&lt;span class="w"&gt; &lt;/span&gt;File:Tasker/lastdate.dat&lt;span class="w"&gt; &lt;/span&gt;To&lt;span class="w"&gt; &lt;/span&gt;Var:%lastdate&lt;span class="w"&gt; &lt;/span&gt;Continue&lt;span class="w"&gt; &lt;/span&gt;Task&lt;span class="w"&gt; &lt;/span&gt;After&lt;span class="w"&gt; &lt;/span&gt;Error:On&lt;span class="w"&gt; &lt;/span&gt;]
&lt;span class="w"&gt;        &lt;/span&gt;A9:&lt;span class="w"&gt; &lt;/span&gt;If&lt;span class="w"&gt; &lt;/span&gt;[&lt;span class="w"&gt; &lt;/span&gt;%lastdate&lt;span class="w"&gt; &lt;/span&gt;neq&lt;span class="w"&gt; &lt;/span&gt;%data11&lt;span class="w"&gt; &lt;/span&gt;]
&lt;span class="w"&gt;        &lt;/span&gt;A10:&lt;span class="w"&gt; &lt;/span&gt;Write&lt;span class="w"&gt; &lt;/span&gt;File&lt;span class="w"&gt; &lt;/span&gt;[&lt;span class="w"&gt; &lt;/span&gt;File:Tasker/lastdate.dat&lt;span class="w"&gt; &lt;/span&gt;Text:%data11&lt;span class="w"&gt; &lt;/span&gt;Append:Off&lt;span class="w"&gt; &lt;/span&gt;Add&lt;span class="w"&gt; &lt;/span&gt;Newline:Off&lt;span class="w"&gt; &lt;/span&gt;]
&lt;span class="w"&gt;        &lt;/span&gt;A11:&lt;span class="w"&gt; &lt;/span&gt;Perform&lt;span class="w"&gt; &lt;/span&gt;Task&lt;span class="w"&gt; &lt;/span&gt;[&lt;span class="w"&gt; &lt;/span&gt;Name:getFormattedDate&lt;span class="w"&gt; &lt;/span&gt;Priority:%priority&lt;span class="w"&gt; &lt;/span&gt;Parameter&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;(%par1):%data11&lt;span class="w"&gt; &lt;/span&gt;Parameter&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;(%par2):yyyy-mm-dd&lt;span class="w"&gt; &lt;/span&gt;Return&lt;span class="w"&gt; &lt;/span&gt;Value&lt;span class="w"&gt; &lt;/span&gt;Variable:%date&lt;span class="w"&gt; &lt;/span&gt;Stop:Off&lt;span class="w"&gt; &lt;/span&gt;]
&lt;span class="w"&gt;        &lt;/span&gt;A12:&lt;span class="w"&gt; &lt;/span&gt;Perform&lt;span class="w"&gt; &lt;/span&gt;Task&lt;span class="w"&gt; &lt;/span&gt;[&lt;span class="w"&gt; &lt;/span&gt;Name:getFormattedDate&lt;span class="w"&gt; &lt;/span&gt;Priority:%priority&lt;span class="w"&gt; &lt;/span&gt;Parameter&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;(%par1):%data11&lt;span class="w"&gt; &lt;/span&gt;Parameter&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;(%par2):hh:nn:ss&lt;span class="w"&gt; &lt;/span&gt;Return&lt;span class="w"&gt; &lt;/span&gt;Value&lt;span class="w"&gt; &lt;/span&gt;Variable:%time&lt;span class="w"&gt; &lt;/span&gt;Stop:Off&lt;span class="w"&gt; &lt;/span&gt;]
&lt;span class="w"&gt;        &lt;/span&gt;A13:&lt;span class="w"&gt; &lt;/span&gt;Variable&lt;span class="w"&gt; &lt;/span&gt;Set&lt;span class="w"&gt; &lt;/span&gt;[&lt;span class="w"&gt; &lt;/span&gt;Name:%measurement_id&lt;span class="w"&gt; &lt;/span&gt;To:&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Do&lt;span class="w"&gt; &lt;/span&gt;Maths:Off&lt;span class="w"&gt; &lt;/span&gt;Append:On&lt;span class="w"&gt; &lt;/span&gt;]
&lt;span class="w"&gt;        &lt;/span&gt;A14:&lt;span class="w"&gt; &lt;/span&gt;Variable&lt;span class="w"&gt; &lt;/span&gt;Set&lt;span class="w"&gt; &lt;/span&gt;[&lt;span class="w"&gt; &lt;/span&gt;Name:%value&lt;span class="w"&gt; &lt;/span&gt;To:%data12&lt;span class="w"&gt; &lt;/span&gt;Do&lt;span class="w"&gt; &lt;/span&gt;Maths:Off&lt;span class="w"&gt; &lt;/span&gt;Append:On&lt;span class="w"&gt; &lt;/span&gt;]
&lt;span class="w"&gt;        &lt;/span&gt;A15:&lt;span class="w"&gt; &lt;/span&gt;Variable&lt;span class="w"&gt; &lt;/span&gt;Set&lt;span class="w"&gt; &lt;/span&gt;[&lt;span class="w"&gt; &lt;/span&gt;Name:%query&lt;span class="w"&gt; &lt;/span&gt;To:INSERT&lt;span class="w"&gt; &lt;/span&gt;INTO&lt;span class="w"&gt; &lt;/span&gt;MeasurementRecord&lt;span class="w"&gt; &lt;/span&gt;(measurement_id,&lt;span class="w"&gt; &lt;/span&gt;date,&lt;span class="w"&gt; &lt;/span&gt;time,&lt;span class="w"&gt; &lt;/span&gt;value,&lt;span class="w"&gt; &lt;/span&gt;comment)&lt;span class="w"&gt; &lt;/span&gt;VALUES&lt;span class="w"&gt; &lt;/span&gt;("%measurement_id",&lt;span class="w"&gt; &lt;/span&gt;"%date",&lt;span class="w"&gt; &lt;/span&gt;"%time",&lt;span class="w"&gt; &lt;/span&gt;"%value","");&lt;span class="w"&gt; &lt;/span&gt;Do&lt;span class="w"&gt; &lt;/span&gt;Maths:Off&lt;span class="w"&gt; &lt;/span&gt;Append:Off&lt;span class="w"&gt; &lt;/span&gt;]
&lt;span class="w"&gt;        &lt;/span&gt;A16:&lt;span class="w"&gt; &lt;/span&gt;SQL&lt;span class="w"&gt; &lt;/span&gt;Query&lt;span class="w"&gt; &lt;/span&gt;[&lt;span class="w"&gt; &lt;/span&gt;Mode:Raw&lt;span class="w"&gt; &lt;/span&gt;File:/data/data/com.github.jamesgay.fitnotes/databases/database.db&lt;span class="w"&gt; &lt;/span&gt;Table:&lt;span class="w"&gt; &lt;/span&gt;Columns:&lt;span class="w"&gt; &lt;/span&gt;Query:%query&lt;span class="w"&gt; &lt;/span&gt;Selection&lt;span class="w"&gt; &lt;/span&gt;Parameters:&lt;span class="w"&gt; &lt;/span&gt;Order&lt;span class="w"&gt; &lt;/span&gt;By:&lt;span class="w"&gt; &lt;/span&gt;Output&lt;span class="w"&gt; &lt;/span&gt;Column&lt;span class="w"&gt; &lt;/span&gt;Divider:&lt;span class="w"&gt; &lt;/span&gt;Variable&lt;span class="w"&gt; &lt;/span&gt;Array:%test&lt;span class="w"&gt; &lt;/span&gt;Use&lt;span class="w"&gt; &lt;/span&gt;Root:On&lt;span class="w"&gt; &lt;/span&gt;]
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;I hope you found this interesting, if only in the abstract &lt;em&gt;"hey that's a thing you can totally do"&lt;/em&gt; kind of way. If you want me to write a complete how-to let me know in the comments down below.&lt;/p&gt;</description><category>hacking</category><category>quick post</category><guid>https://peekread.info/tech/20190722-fitnotes-and-tasker/</guid><pubDate>Mon, 22 Jul 2019 05:00:00 GMT</pubDate></item></channel></rss>