{
"type": "entry",
"published": "2019-11-07T20:31:28-05:00",
"url": "https://david.shanske.com/2019/11/07/airplane-wifi-location-tracking-to-tasker-to-compass/",
"name": "Airplane Wifi Location Tracking to Tasker to Compass",
"content": {
"text": "On my recent trip, I took Southwest Airlines for the first time in many years. At Indiewebcamp New Haven, I set up Aaron Parecki\u2019s compass project to send my location data to. I have 59MB of location data since March 3oth, 2019.\nThe problem is transforming the input from Southwest into the format another system can accept. I did not want to write an Android app for this\u2026I wish there was one.\nSo, instead I used Tasker,\u00a0 an automation app for Android that does have scripting in it.\nSo, if you retrieve http://getconnected.southwestwifi.com/current.json, you get the following JSON data.\n {\n \"pcent_flt_complete\": 0,\n \"altVal\": \"-24\",\n \"lon\": \"-73.867\",\n \"satcomm_status\": {\n \"commlink\": \"active\",\n \"linkparams\": \"not-stale\"\n },\n \"dtzone\": \"CDT\",\n \"within_us\": true,\n \"etad\": \"09:20 AM\",\n \"lat\": \"40.775\",\n \"gspdVal\": \"10\",\n \"ttgc\": \"2h 15m\",\n \"dist_remain\": \"888\",\n \"actime24\": \"07:05\"\n}\nThe Task I created consists of three actions. It uses the HTTP Request action to get the above JSON. Then it uses the below JavaScriptlet(Tasker allows you to write JavaScript, to convert the data into the GeoJSON that Compass expects. The third action posts that to Compass.\nvar parsed = JSON.parse( http_data );\nvar gmt = new Date().toISOString();\nvar alt = Math.round( parsed.altVal * 0.305 );\nvar feature = {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [parsed.lon, parsed.lat, alt]\n },\n \"properties\": {\n \"timestamp\": gmt,\n \"percent_complete\": parsed.pcent_flt_complete,\n \"dist_remain\": parsed.dist_remain,\n \"source\": \"flight\",\n \"airline\": \"wn\"\n }\n };\nvar compass = { \"locations\": [feature] };\nvar featurejson = JSON.stringify( compass );\nNow, I am known for not doing much JavaScript work, preferring PHP. But this was simple enough. I could have added more of their parameters, or, since Southwest does not put the flight number into their JSON, allow it to be set.\nIt is triggered when I am connected to SouthwestWifi, in Airplane Mode, and every 5 minutes. I wasn\u2019t sure if I should poll more often, but 5 minute intervals seemed reasonable. Regrettably, Southwest does not provide more parameters like speed.\nI wish some developer would write an app that would do this, partially because, if the wifi goes down, the request will fail and I\u2019ll lose it. I\u2019d rather cache and retry. Also, GPS Logger has some limitations. I wish there was an Android version of Aaron Parecki\u2019s Overland app. Being as he wrote Compass, it works well with that and has those caching features.\nI have two flights on two different airlines in the next month, and will see if I can write similar scripts. I enjoy the challenge of trying to write and test it on my phone live.\nNext, I need something to display a visualization of this with altitude.",
"html": "On my recent trip, I took Southwest Airlines for the first time in many years. At Indiewebcamp New Haven, I set up Aaron Parecki\u2019s compass project to send my location data to. I have 59MB of location data since March 3oth, 2019.\n<p>The problem is transforming the input from Southwest into the format another system can accept. I did not want to write an Android app for this\u2026I wish there was one.</p>\n<p>So, instead I used Tasker,\u00a0 an automation app for Android that does have scripting in it.</p>\n<p>So, if you retrieve <a href=\"http://getconnected.southwestwifi.com/current.json\">http://getconnected.southwestwifi.com/current.json</a>, you get the following JSON data.</p>\n<pre> {\n \"pcent_flt_complete\": 0,\n \"altVal\": \"-24\",\n \"lon\": \"-73.867\",\n \"satcomm_status\": {\n \"commlink\": \"active\",\n \"linkparams\": \"not-stale\"\n },\n \"dtzone\": \"CDT\",\n \"within_us\": true,\n \"etad\": \"09:20 AM\",\n \"lat\": \"40.775\",\n \"gspdVal\": \"10\",\n \"ttgc\": \"2h 15m\",\n \"dist_remain\": \"888\",\n \"actime24\": \"07:05\"\n}</pre>\n<p>The Task I created consists of three actions. It uses the HTTP Request action to get the above JSON. Then it uses the below JavaScriptlet(Tasker allows you to write JavaScript, to convert the data into the GeoJSON that Compass expects. The third action posts that to Compass.</p>\n<pre>var parsed = JSON.parse( http_data );\nvar gmt = new Date().toISOString();\nvar alt = Math.round( parsed.altVal * 0.305 );\nvar feature = {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [parsed.lon, parsed.lat, alt]\n },\n \"properties\": {\n \"timestamp\": gmt,\n \"percent_complete\": parsed.pcent_flt_complete,\n \"dist_remain\": parsed.dist_remain,\n \"source\": \"flight\",\n \"airline\": \"wn\"\n }\n };\nvar compass = { \"locations\": [feature] };\nvar featurejson = JSON.stringify( compass );</pre>\n<p>Now, I am known for not doing much JavaScript work, preferring PHP. But this was simple enough. I could have added more of their parameters, or, since Southwest does not put the flight number into their JSON, allow it to be set.</p>\n<p>It is triggered when I am connected to SouthwestWifi, in Airplane Mode, and every 5 minutes. I wasn\u2019t sure if I should poll more often, but 5 minute intervals seemed reasonable. Regrettably, Southwest does not provide more parameters like speed.</p>\n<p>I wish some developer would write an app that would do this, partially because, if the wifi goes down, the request will fail and I\u2019ll lose it. I\u2019d rather cache and retry. Also, GPS Logger has some limitations. I wish there was an Android version of Aaron Parecki\u2019s <a href=\"https://github.com/aaronpk/Overland-iOS\">Overland</a> app. Being as he wrote Compass, it works well with that and has those caching features.</p>\n<p>I have two flights on two different airlines in the next month, and will see if I can write similar scripts. I enjoy the challenge of trying to write and test it on my phone live.</p>\n<p>Next, I need something to display a visualization of this with altitude.</p>"
},
"author": {
"type": "card",
"name": "David Shanske",
"url": "https://david.shanske.com/",
"photo": "https://david.shanske.com/wp-content/uploads/avatar-privacy/cache/gravatar/2/c/2cb1f8afd9c8d3b646b4071c5ed887c970d81d625eeed87e447706940e2c403d-49.png"
},
"post-type": "article",
"_id": "6025033",
"_source": "1905"
}
Just watched Sword of Trust. Really dug it. Great performance by @marcmaron and the whole cast. Great to see "featuring music by Marc Maron" in the credits. Highly recommend...
{
"type": "entry",
"published": "2019-11-08T01:10:37+00:00",
"url": "https://twitter.com/afitnerd/status/1192610340665737217",
"content": {
"text": "Just watched Sword of Trust. Really dug it. Great performance by @marcmaron and the whole cast. Great to see \"featuring music by Marc Maron\" in the credits. Highly recommend...",
"html": "Just watched Sword of Trust. Really dug it. Great performance by <a href=\"https://twitter.com/marcmaron\">@marcmaron</a> and the whole cast. Great to see \"featuring music by Marc Maron\" in the credits. Highly recommend..."
},
"author": {
"type": "card",
"name": "Micah Silverman",
"url": "https://twitter.com/afitnerd",
"photo": "https://pbs.twimg.com/profile_images/1169746170740137984/R7RpX8Q7.jpg"
},
"post-type": "note",
"_id": "6024932",
"_source": "2773"
}
{
"type": "entry",
"published": "2019-11-08T01:05:57+00:00",
"url": "https://twitter.com/ZoeSchiffer/status/1192609165325111296",
"content": {
"text": "This might be my favorite @CaseyNewton newsletter to date. Leaked documents, paranoid executives, and ye olde Switcharoo Plan that will never not be funny. Featuring work by @oliviasolon @cfarivar @broderick & @Kantrowitz: getrevue.co/profile/caseyn\u2026",
"html": "This might be my favorite <a href=\"https://twitter.com/CaseyNewton\">@CaseyNewton</a> newsletter to date. Leaked documents, paranoid executives, and ye olde Switcharoo Plan that will never not be funny. Featuring work by <a href=\"https://twitter.com/oliviasolon\">@oliviasolon</a> <a href=\"https://twitter.com/cfarivar\">@cfarivar</a> <a href=\"https://twitter.com/broderick\">@broderick</a> & <a href=\"https://twitter.com/Kantrowitz\">@Kantrowitz</a>: <a href=\"https://www.getrevue.co/profile/caseynewton/issues/facebook-s-secret-switcharoo-plan-209079?utm_campaign=Issue&utm_content=view_in_browser&utm_medium=email&utm_source=The+Interface\">getrevue.co/profile/caseyn\u2026</a>"
},
"author": {
"type": "card",
"name": "Zoe Schiffer",
"url": "https://twitter.com/ZoeSchiffer",
"photo": "https://pbs.twimg.com/profile_images/808466807119978496/nmhE7XbI.jpg"
},
"post-type": "note",
"_id": "6024715",
"_source": "2773"
}
{
"type": "entry",
"published": "2019-11-08T00:32:16+00:00",
"url": "https://twitter.com/jackyalcine/status/1192600691497295872",
"content": {
"text": "Speaking of which, can I join NSBE without having done it in college or high school?"
},
"author": {
"type": "card",
"name": "jackyjackyjackyjacky",
"url": "https://twitter.com/jackyalcine",
"photo": "https://pbs.twimg.com/profile_images/1184322969549582336/T7KtYdaZ.jpg"
},
"post-type": "note",
"_id": "6024382",
"_source": "2773"
}
Tempted to get a Ring doorbell and just like take it around tethered to mobile data and take random doorbell pictures to really confuse whoever at Amazon is on spy duty that day.
{
"type": "entry",
"published": "2019-11-08T00:21:36+00:00",
"url": "https://twitter.com/fluffy/status/1192598004122800129",
"content": {
"text": "Tempted to get a Ring doorbell and just like take it around tethered to mobile data and take random doorbell pictures to really confuse whoever at Amazon is on spy duty that day."
},
"author": {
"type": "card",
"name": "fluffy \ud83d\udd1c GeekGirlCon '19 #101",
"url": "https://twitter.com/fluffy",
"photo": "https://pbs.twimg.com/profile_images/1113258016151707648/vzpeXCFt.png"
},
"post-type": "note",
"_id": "6024242",
"_source": "2773"
}
I still want something like Beaker Browser to be more usable. And it’s not even the browser’s fault, tbh. It’s adoption. (v2.jacky.wtf/post/d03479f3-…)
{
"type": "entry",
"published": "2019-11-07T23:51:18+00:00",
"url": "https://twitter.com/jackyalcine/status/1192590378374967296",
"content": {
"text": "I still want something like Beaker Browser to be more usable. And it\u2019s not even the browser\u2019s fault, tbh. It\u2019s adoption. (v2.jacky.wtf/post/d03479f3-\u2026)",
"html": "I still want something like Beaker Browser to be more usable. And it\u2019s not even the browser\u2019s fault, tbh. It\u2019s adoption. (<a href=\"https://v2.jacky.wtf/post/d03479f3-af55-4d64-9de8-024fd729c3c2\">v2.jacky.wtf/post/d03479f3-\u2026</a>)"
},
"author": {
"type": "card",
"name": "jackyjackyjackyjacky",
"url": "https://twitter.com/jackyalcine",
"photo": "https://pbs.twimg.com/profile_images/1184322969549582336/T7KtYdaZ.jpg"
},
"post-type": "note",
"_id": "6023788",
"_source": "2773"
}
Slides from my talk at #oredev today are posted!
"Smarter Home Automation without the Cloud"
It was fun geeking out about home automation for 40 minutes! I'll make sure...
{
"type": "entry",
"published": "2019-11-07T23:39:11+00:00",
"url": "https://twitter.com/Johannes_Ernst/status/1192587329950535680",
"quotation-of": "https://twitter.com/aaronpk/status/1192544334966452224",
"content": {
"text": "Here\u2019s an #indieiot example for you!",
"html": "Here\u2019s an <a href=\"https://twitter.com/search?q=%23indieiot\">#indieiot</a> example for you!"
},
"author": {
"type": "card",
"name": "Johannes Ernst",
"url": "https://twitter.com/Johannes_Ernst",
"photo": "https://pbs.twimg.com/profile_images/462335209015238656/ie0cRjdx.jpeg"
},
"post-type": "note",
"refs": {
"https://twitter.com/aaronpk/status/1192544334966452224": {
"type": "entry",
"published": "2019-11-07T20:48:20+00:00",
"url": "https://twitter.com/aaronpk/status/1192544334966452224",
"content": {
"text": "Slides from my talk at #oredev today are posted!\n\n\"Smarter Home Automation without the Cloud\"\n\nIt was fun geeking out about home automation for 40 minutes! I'll make sure to post again when the video is out!\n\nspeakerdeck.com/aaronpk/smarte\u2026",
"html": "Slides from my talk at <a href=\"https://twitter.com/search?q=%23oredev\">#oredev</a> today are posted!\n\n\"Smarter Home Automation without the Cloud\"\n\nIt was fun geeking out about home automation for 40 minutes! I'll make sure to post again when the video is out!\n\n<a href=\"https://speakerdeck.com/aaronpk/smarter-home-automation-without-the-cloud\">speakerdeck.com/aaronpk/smarte\u2026</a>"
},
"author": {
"type": "card",
"name": "Aaron Parecki",
"url": "https://twitter.com/aaronpk",
"photo": "https://pbs.twimg.com/profile_images/1103120425846857728/X3d0a2Tr.png"
},
"post-type": "note"
}
},
"_id": "6023503",
"_source": "2773"
}
{
"type": "entry",
"published": "2019-11-07T23:35:44+00:00",
"url": "https://twitter.com/jackyalcine/status/1192586462962733057",
"quotation-of": "https://twitter.com/KristyT/status/1192584874864996352",
"content": {
"text": "*cackles in Linux*\n\nbut on some real, this is something Zoom kept doing on Windows and I was like \"excuse me?\""
},
"author": {
"type": "card",
"name": "wait they didn't delete my account yet?",
"url": "https://twitter.com/jackyalcine",
"photo": "https://pbs.twimg.com/profile_images/1184322969549582336/T7KtYdaZ.jpg"
},
"post-type": "note",
"refs": {
"https://twitter.com/KristyT/status/1192584874864996352": {
"type": "entry",
"published": "2019-11-07T23:29:25+00:00",
"url": "https://twitter.com/KristyT/status/1192584874864996352",
"content": {
"text": "Is there no way to mute Zoom without turning down your entire system audio?"
},
"author": {
"type": "card",
"name": "Kristy Tillman",
"url": "https://twitter.com/KristyT",
"photo": "https://pbs.twimg.com/profile_images/970817612283129856/crSgUtXS.jpg"
},
"post-type": "note"
}
},
"_id": "6023506",
"_source": "2773"
}
Literally most of my favorite things ever: my fav #baonpdx player ever @NAngerer, figure skating, and an excuse to learn skating slang in Deutsch. Put it on a train, and this would be peak lily.
{
"type": "entry",
"published": "2019-11-07T23:12:01+00:00",
"url": "https://twitter.com/anomalily/status/1192580495357276161",
"quotation-of": "https://twitter.com/NAngerer/status/1192579811602030593",
"content": {
"text": "Literally most of my favorite things ever: my fav #baonpdx player ever @NAngerer, figure skating, and an excuse to learn skating slang in Deutsch. Put it on a train, and this would be peak lily.",
"html": "Literally most of my favorite things ever: my fav <a href=\"https://twitter.com/search?q=%23baonpdx\">#baonpdx</a> player ever <a href=\"https://twitter.com/NAngerer\">@NAngerer</a>, figure skating, and an excuse to learn skating slang in Deutsch. Put it on a train, and this would be peak lily."
},
"author": {
"type": "card",
"name": "Lillian Karabaic",
"url": "https://twitter.com/anomalily",
"photo": "https://pbs.twimg.com/profile_images/1123802400731664385/dsHQG1nZ.jpg"
},
"post-type": "note",
"refs": {
"https://twitter.com/NAngerer/status/1192579811602030593": {
"type": "entry",
"published": "2019-11-07T23:09:18+00:00",
"url": "https://twitter.com/NAngerer/status/1192579811602030593",
"video": [
"https://video.twimg.com/ext_tw_video/1192579751451529218/pu/vid/640x800/Sg2MR6xHh6k3eimT.mp4?tag=10"
],
"content": {
"text": "It\u2019s SHOWTIME!!! \u26f8Am 15.11 & 17.11 um 20:15 auf @sat1 Schaltet ein und dr\u00fcckt uns die Daumen. \ud83d\udcaa#dancingonice #rausausdercomfortzone #Anzeige",
"html": "It\u2019s SHOWTIME!!! \u26f8Am 15.11 & 17.11 um 20:15 auf <a href=\"https://twitter.com/sat1\">@sat1</a> Schaltet ein und dr\u00fcckt uns die Daumen. \ud83d\udcaa<a href=\"https://twitter.com/search?q=%23dancingonice\">#dancingonice</a> <a href=\"https://twitter.com/search?q=%23rausausdercomfortzone\">#rausausdercomfortzone</a> <a href=\"https://twitter.com/search?q=%23Anzeige\">#Anzeige</a>"
},
"author": {
"type": "card",
"name": "Nadine Angerer",
"url": "https://twitter.com/NAngerer",
"photo": "https://pbs.twimg.com/profile_images/1078442701408882689/ano7eGy1.jpg"
},
"post-type": "video"
}
},
"_id": "6023010",
"_source": "2773"
}
{
"type": "entry",
"published": "2019-11-07T23:04:20+00:00",
"url": "https://twitter.com/jgmac1106/status/1192578559237382145",
"content": {
"text": "Want to learn more about the #OER Ghana program brought to you by @goifoundation as part of @Mozilla's Open Leader X Program? Check out our presentation from #mozfest jgregorymcverry.com/notes/2019-11-\u2026 (jgregorymcverry.com/notes/2019-11-\u2026 )",
"html": "Want to learn more about the <a href=\"https://twitter.com/search?q=%23OER\">#OER</a> Ghana program brought to you by <a href=\"https://twitter.com/GOIFoundation\">@goifoundation</a> as part of <a href=\"https://twitter.com/mozilla\">@Mozilla</a>'s Open Leader X Program? Check out our presentation from <a href=\"https://twitter.com/search?q=%23mozfest\">#mozfest</a> <a href=\"https://jgregorymcverry.com/notes/2019-11-07-Ghana\">jgregorymcverry.com/notes/2019-11-\u2026</a> (<a href=\"https://jgregorymcverry.com/notes/2019-11-07-4.php\">jgregorymcverry.com/notes/2019-11-\u2026</a> )"
},
"author": {
"type": "card",
"name": "https://jgregorymcverry.com",
"url": "https://twitter.com/jgmac1106",
"photo": "https://pbs.twimg.com/profile_images/565227710104883200/g4MDcTnx.jpeg"
},
"post-type": "note",
"_id": "6022815",
"_source": "2773"
}
Wow!! @kretivmay checked out the music website. @goifoundation planning a big event in Feb to create networks of artists, tinkerers, and educators who own their content and connections. Maybe you'll have to bring the entertainment we bring the teaching
{
"type": "entry",
"published": "2019-11-07T21:36:21+0000",
"url": "https://quickthoughts.jgregorymcverry.com/2019/11/07/wow-kretivmay-checked-out-the-music-website",
"syndication": [
"https://twitter.com/jgmac1106/status/1192556433746931712"
],
"content": {
"text": "Wow!! @kretivmay checked out the music website. @goifoundation planning a big event in Feb to create networks of artists, tinkerers, and educators who own their content and connections. Maybe you'll have to bring the entertainment we bring the teaching"
},
"author": {
"type": "card",
"name": "Greg McVerry",
"url": "https://quickthoughts.jgregorymcverry.com/profile/jgmac1106",
"photo": "https://quickthoughts.jgregorymcverry.com/file/2d6c9cfed7ac8e849f492b5bc7e6a630/thumb.jpg"
},
"post-type": "note",
"_id": "6021870",
"_source": "1300"
}
Wow!! @kretivmay checked out the music website. @goifoundation planning a big event in Feb to create networks of artists, tinkerers, and educators who own their content and connections. Maybe you'll have to bring the entertainment we bring the teaching (quickthoughts.jgregorymcverry.com/s/1FKVHP)
{
"type": "entry",
"published": "2019-11-07T21:36:25+00:00",
"url": "https://twitter.com/jgmac1106/status/1192556433746931712",
"content": {
"text": "Wow!! @kretivmay checked out the music website. @goifoundation planning a big event in Feb to create networks of artists, tinkerers, and educators who own their content and connections. Maybe you'll have to bring the entertainment we bring the teaching (quickthoughts.jgregorymcverry.com/s/1FKVHP)",
"html": "Wow!! <a href=\"https://twitter.com/kretivmay\">@kretivmay</a> checked out the music website. <a href=\"https://twitter.com/GOIFoundation\">@goifoundation</a> planning a big event in Feb to create networks of artists, tinkerers, and educators who own their content and connections. Maybe you'll have to bring the entertainment we bring the teaching (<a href=\"https://quickthoughts.jgregorymcverry.com/s/1FKVHP\">quickthoughts.jgregorymcverry.com/s/1FKVHP</a>)"
},
"author": {
"type": "card",
"name": "https://jgregorymcverry.com",
"url": "https://twitter.com/jgmac1106",
"photo": "https://pbs.twimg.com/profile_images/565227710104883200/g4MDcTnx.jpeg"
},
"post-type": "note",
"_id": "6021567",
"_source": "2773"
}
I POSSEd all my WordPress notes to @microdotblog so I could connect with an awesome community. I think many folks at an WordPress Meetup would enjoy our little corner of the web. (quickthoughts.jgregorymcverry.com/s/1kxx4B)
{
"type": "entry",
"published": "2019-11-07T21:33:03+00:00",
"url": "https://twitter.com/jgmac1106/status/1192555586703044616",
"content": {
"text": "I POSSEd all my WordPress notes to @microdotblog so I could connect with an awesome community. I think many folks at an WordPress Meetup would enjoy our little corner of the web. (quickthoughts.jgregorymcverry.com/s/1kxx4B)",
"html": "I POSSEd all my WordPress notes to <a href=\"https://twitter.com/microdotblog\">@microdotblog</a> so I could connect with an awesome community. I think many folks at an WordPress Meetup would enjoy our little corner of the web. (<a href=\"https://quickthoughts.jgregorymcverry.com/s/1kxx4B\">quickthoughts.jgregorymcverry.com/s/1kxx4B</a>)"
},
"author": {
"type": "card",
"name": "https://jgregorymcverry.com",
"url": "https://twitter.com/jgmac1106",
"photo": "https://pbs.twimg.com/profile_images/565227710104883200/g4MDcTnx.jpeg"
},
"post-type": "note",
"_id": "6021278",
"_source": "2773"
}