tag:blogger.com,1999:blog-65023680179891746452024-03-06T00:04:40.797+01:00Please, don't touch the screen.Countless times I've found solutions on the net: I'll try to give back some, by sharing interesting things I'll come across.Alessandro Iacopettihttp://www.blogger.com/profile/16100651220450712655noreply@blogger.comBlogger187125tag:blogger.com,1999:blog-6502368017989174645.post-10186632546905346492014-08-20T21:00:00.000+02:002014-08-20T21:00:02.160+02:00Importing contacts in CSV format into Gmail / AndroidImporting contacts from a Blackberry CSV file require the following fields to be renamed <br />
<br />
Company Name = Company<br />
Work Phone = Business Phone<br />
<br />
Field names that worked for me:<br />
<br />
First Name,Last Name,Company,Business Phone,Mobile Phone<br />
<br />
<br />Alessandro Iacopettihttp://www.blogger.com/profile/16100651220450712655noreply@blogger.com0tag:blogger.com,1999:blog-6502368017989174645.post-91870316970598886502014-06-19T19:02:00.001+02:002014-06-19T19:02:17.589+02:00Vodafone DrivexoneSomeone else believes in <a href="http://pleasedonttouchthescreen.blogspot.it/2013/02/steam-on-your-car-dashboard.html">driving gamification</a>:<br />
<a href="http://www.androidiani.com/il-meglio-della-settimana-android/vodafone-drivexone-la-recensione-209962">http://www.androidiani.com/il-meglio-della-settimana-android/vodafone-drivexone-la-recensione-209962</a><br />
<br />Alessandro Iacopettihttp://www.blogger.com/profile/16100651220450712655noreply@blogger.com0tag:blogger.com,1999:blog-6502368017989174645.post-9425711067078534702014-05-04T12:28:00.001+02:002014-05-04T12:28:38.991+02:00Is Google Docs still a toy?Despite the <a href="https://support.google.com/drive/answer/3541068">new version removing some limits</a>, working with Google Docs is still somewhat a lottery.<br />
Here's the error of the day, on a chart that always used to work:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjX4mcm41aprGgAyVJeiUN5JBJcS8Agmp6GsjRIOMfVKr13KqCZFjSSU_wD_wQWXerY2kCO1oITyXG7sMtFBZ1dayWABponUB1OQpkgIXoLTwC4vOYeH4N1s6CQ6M-e2NojwDapM2wGOKKB/s1600/stilljoke.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjX4mcm41aprGgAyVJeiUN5JBJcS8Agmp6GsjRIOMfVKr13KqCZFjSSU_wD_wQWXerY2kCO1oITyXG7sMtFBZ1dayWABponUB1OQpkgIXoLTwC4vOYeH4N1s6CQ6M-e2NojwDapM2wGOKKB/s1600/stilljoke.PNG" /></a></div>
<br />
I've reported the error, but I've never had a feedback on previous reports...<br />
<br />Alessandro Iacopettihttp://www.blogger.com/profile/16100651220450712655noreply@blogger.com0tag:blogger.com,1999:blog-6502368017989174645.post-67506941074266130552014-05-03T12:30:00.000+02:002014-05-03T12:30:23.104+02:00Set lockscreen wallpaper with MuzeiThis was tricky as it seems not to be documented anywhere.<br />
<div>
It's possible to set the wallpaper of the lockscreen using Muzei, but it's not really intuitive:</div>
<div>
<br />
Go in the screen settings.</div>
<div>
Set BOTH wallpapers (home and lockscreen)</div>
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixsVu4GB5XneH017sMsn0F4Qi09J9VXQauZ6KOGn54m2Xik9rKr9OnNGMQb0AWrca4s50FEd249r7PT0h0K6OnnO2pXk8wDX619o0GOpcTp2YnrHGLW-Yt13ULyqH_AFjqcoZOH9EiN3yF/s640/2014-05-03%25252011.26.52.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixsVu4GB5XneH017sMsn0F4Qi09J9VXQauZ6KOGn54m2Xik9rKr9OnNGMQb0AWrca4s50FEd249r7PT0h0K6OnnO2pXk8wDX619o0GOpcTp2YnrHGLW-Yt13ULyqH_AFjqcoZOH9EiN3yF/s640/2014-05-03%25252011.26.52.png" height="400" width="240" /></a></div>
Select Live Wallpaper</div>
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicQJ5KsVON8PQ1nf0XpampxwHcUzm6Rh7gDwu0OhQLvifkKzsp3fh-X14o9eDotlr5HbyV9vqbEF9TwkwvP_XT5mdylfDcenmqmj65NdnQVErAGMOpAq9pQMRlQuUyNe7gJo_9ZKKSrSL2/s640/2014-05-03%25252011.26.28.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicQJ5KsVON8PQ1nf0XpampxwHcUzm6Rh7gDwu0OhQLvifkKzsp3fh-X14o9eDotlr5HbyV9vqbEF9TwkwvP_XT5mdylfDcenmqmj65NdnQVErAGMOpAq9pQMRlQuUyNe7gJo_9ZKKSrSL2/s640/2014-05-03%25252011.26.28.png" height="400" width="240" /></a></div>
Select Muzei.</div>
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdZ7cJLtT-jb1TOdbY_layqGZMelN_nEX9Y9MZJE0LFzRcFRXQIl1yNlnTC8VL68tNqGL5s14TVhHhSQVQOhKXC3SHtye4CXyLDFPCotStjBKs1-VQBHGSefPdlKHCg_pbWlTmBq1KhNjs/s640/2014-05-03%25252011.25.53.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdZ7cJLtT-jb1TOdbY_layqGZMelN_nEX9Y9MZJE0LFzRcFRXQIl1yNlnTC8VL68tNqGL5s14TVhHhSQVQOhKXC3SHtye4CXyLDFPCotStjBKs1-VQBHGSefPdlKHCg_pbWlTmBq1KhNjs/s640/2014-05-03%25252011.25.53.png" height="400" width="240" /></a></div>
Now the lockscreen wallpaper will be set along the home screen one.</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<!-- Blogger automated replacement: "https://images-blogger-opensocial.googleusercontent.com/gadgets/proxy?url=http%3A%2F%2Flh5.ggpht.com%2F-NDP28SyJVq8%2FU2S-q75FcmI%2FAAAAAAAABow%2Fospn88rgvxE%2Fs640%2F2014-05-03%2525252011.26.52.png&container=blogger&gadget=a&rewriteMime=image%2F*" with "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixsVu4GB5XneH017sMsn0F4Qi09J9VXQauZ6KOGn54m2Xik9rKr9OnNGMQb0AWrca4s50FEd249r7PT0h0K6OnnO2pXk8wDX619o0GOpcTp2YnrHGLW-Yt13ULyqH_AFjqcoZOH9EiN3yF/s640/2014-05-03%25252011.26.52.png" --><!-- Blogger automated replacement: "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixsVu4GB5XneH017sMsn0F4Qi09J9VXQauZ6KOGn54m2Xik9rKr9OnNGMQb0AWrca4s50FEd249r7PT0h0K6OnnO2pXk8wDX619o0GOpcTp2YnrHGLW-Yt13ULyqH_AFjqcoZOH9EiN3yF/s640/2014-05-03%25252011.26.52.png" with "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixsVu4GB5XneH017sMsn0F4Qi09J9VXQauZ6KOGn54m2Xik9rKr9OnNGMQb0AWrca4s50FEd249r7PT0h0K6OnnO2pXk8wDX619o0GOpcTp2YnrHGLW-Yt13ULyqH_AFjqcoZOH9EiN3yF/s640/2014-05-03%25252011.26.52.png" --><!-- Blogger automated replacement: "https://images-blogger-opensocial.googleusercontent.com/gadgets/proxy?url=http%3A%2F%2Flh6.ggpht.com%2F-fsHYoSInECo%2FU2S-rnpnmYI%2FAAAAAAAABo4%2F3LZ66aVIwEg%2Fs640%2F2014-05-03%2525252011.26.28.png&container=blogger&gadget=a&rewriteMime=image%2F*" with "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicQJ5KsVON8PQ1nf0XpampxwHcUzm6Rh7gDwu0OhQLvifkKzsp3fh-X14o9eDotlr5HbyV9vqbEF9TwkwvP_XT5mdylfDcenmqmj65NdnQVErAGMOpAq9pQMRlQuUyNe7gJo_9ZKKSrSL2/s640/2014-05-03%25252011.26.28.png" --><!-- Blogger automated replacement: "https://images-blogger-opensocial.googleusercontent.com/gadgets/proxy?url=http%3A%2F%2Flh5.ggpht.com%2F-2YZKKX0NfZg%2FU2S-ss2uKDI%2FAAAAAAAABpA%2FxRdPjODhoJ0%2Fs640%2F2014-05-03%2525252011.25.53.png&container=blogger&gadget=a&rewriteMime=image%2F*" with "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdZ7cJLtT-jb1TOdbY_layqGZMelN_nEX9Y9MZJE0LFzRcFRXQIl1yNlnTC8VL68tNqGL5s14TVhHhSQVQOhKXC3SHtye4CXyLDFPCotStjBKs1-VQBHGSefPdlKHCg_pbWlTmBq1KhNjs/s640/2014-05-03%25252011.25.53.png" --><!-- Blogger automated replacement: "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicQJ5KsVON8PQ1nf0XpampxwHcUzm6Rh7gDwu0OhQLvifkKzsp3fh-X14o9eDotlr5HbyV9vqbEF9TwkwvP_XT5mdylfDcenmqmj65NdnQVErAGMOpAq9pQMRlQuUyNe7gJo_9ZKKSrSL2/s640/2014-05-03%25252011.26.28.png" with "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicQJ5KsVON8PQ1nf0XpampxwHcUzm6Rh7gDwu0OhQLvifkKzsp3fh-X14o9eDotlr5HbyV9vqbEF9TwkwvP_XT5mdylfDcenmqmj65NdnQVErAGMOpAq9pQMRlQuUyNe7gJo_9ZKKSrSL2/s640/2014-05-03%25252011.26.28.png" --><!-- Blogger automated replacement: "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdZ7cJLtT-jb1TOdbY_layqGZMelN_nEX9Y9MZJE0LFzRcFRXQIl1yNlnTC8VL68tNqGL5s14TVhHhSQVQOhKXC3SHtye4CXyLDFPCotStjBKs1-VQBHGSefPdlKHCg_pbWlTmBq1KhNjs/s640/2014-05-03%25252011.25.53.png" with "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdZ7cJLtT-jb1TOdbY_layqGZMelN_nEX9Y9MZJE0LFzRcFRXQIl1yNlnTC8VL68tNqGL5s14TVhHhSQVQOhKXC3SHtye4CXyLDFPCotStjBKs1-VQBHGSefPdlKHCg_pbWlTmBq1KhNjs/s640/2014-05-03%25252011.25.53.png" -->Alessandro Iacopettihttp://www.blogger.com/profile/16100651220450712655noreply@blogger.com6tag:blogger.com,1999:blog-6502368017989174645.post-21679666911238117342013-12-31T15:51:00.000+01:002013-12-31T15:51:30.041+01:00More on engine temperatureGiven the consistent results I've got with my previous modification, I've dared a little more.<br />
I fitted some cheap pipe insulators in the remaining slots of the radiator grill:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj045ZNZZsk9vzGe3OdRNjV01Hi7X5mswNGTS-3wuo6j5KGaq4VRJxRWeGDJa6-MUsxmnIDI0YV3It4drssMheuNkGg7K9unYmvRNqi1LIq0i8to7LlcCXkAoQpVKJFX-EPM_TIty_eVS46/s1600/2tubi1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj045ZNZZsk9vzGe3OdRNjV01Hi7X5mswNGTS-3wuo6j5KGaq4VRJxRWeGDJa6-MUsxmnIDI0YV3It4drssMheuNkGg7K9unYmvRNqi1LIq0i8to7LlcCXkAoQpVKJFX-EPM_TIty_eVS46/s1600/2tubi1.jpg" /></a></div>
<br />
The lower insulator is kept in place by pressure from the license plate, while I fixed the upper one with a couple plastic ties.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnv4sjJug0NW1x9ITj2GE0sR5H_IRsx6usIrxisZXUGGrEMJi3Y9OtCFTX9C7bn9c7eO7iSXKe6nuz-4QKVOh4vYAWkmBXDVp0z19cpUbOCk08ZaLcQiH9N_-39DAD93VW2NjN-sDKViZ4/s1600/2tubi2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnv4sjJug0NW1x9ITj2GE0sR5H_IRsx6usIrxisZXUGGrEMJi3Y9OtCFTX9C7bn9c7eO7iSXKe6nuz-4QKVOh4vYAWkmBXDVp0z19cpUbOCk08ZaLcQiH9N_-39DAD93VW2NjN-sDKViZ4/s1600/2tubi2.jpg" /></a></div>
<br />
I was worried this type of insulation will prevent the engine from refreshing and will cause it to overheat.<br />
As a stress test, I drove for an hour on various medium/high speed roads and some steep hills.<br />
Even though the weather was sunny and the ambient temperature was 7 degress, coolant temperature reached 90 degrees and didn't go any further.<br />
<br />Alessandro Iacopettihttp://www.blogger.com/profile/16100651220450712655noreply@blogger.com0tag:blogger.com,1999:blog-6502368017989174645.post-7157221091705629212013-12-18T18:30:00.000+01:002013-12-31T15:51:47.834+01:00Covering the Yaris radiator<a href="http://torqueloganalyzer.blogspot.it/2013/12/ambient-temperature-effect-on-mileage.html">Low temperature causes higher fuel consumption</a>, so I tried an old trick.<br />
In a car accessory shop, I've found and old Fiat 127 radiator rubber cover. The owner was pleased to sell it to me at a discounted price, since he said nobody uses it anymore.<br />
Colour and size are just fine for the Yaris.<br />
I just had to cut some holes to fit 3 plastic cable ties to grab it to the rear mask.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfDPxOZeP7y1oMMeKX30lh_HMq9PFVwBsNOxg6HcedBxV8K1t5MBqDzuWOxJL17e5OLx-lUFkmCLfZtArW0XAh2g2Wn-k2j625QcTYK_3ch-RXe5xEwYARd1KU5wFwR3DfQi7v33JNZxWC/s1600/fronte-radiatore.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfDPxOZeP7y1oMMeKX30lh_HMq9PFVwBsNOxg6HcedBxV8K1t5MBqDzuWOxJL17e5OLx-lUFkmCLfZtArW0XAh2g2Wn-k2j625QcTYK_3ch-RXe5xEwYARd1KU5wFwR3DfQi7v33JNZxWC/s1600/fronte-radiatore.jpg" /></a></div>
<br />
There are even some windows that can be opened to regulate air flow in warmer days.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9o-p1-T1Hk0HY8WbSQdkc7P_-CVCLJXojnyTeMV7tAgsOQUL2RCmXGnWhWrmO_qvP4PBgGGi0Bw88FshI4QtodKHrK5v0haZHcqhfujKQqozoKkVAe7btAuhF1iwIJfwi-ZGuFhnbf3n6/s1600/lato-radiatore.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9o-p1-T1Hk0HY8WbSQdkc7P_-CVCLJXojnyTeMV7tAgsOQUL2RCmXGnWhWrmO_qvP4PBgGGi0Bw88FshI4QtodKHrK5v0haZHcqhfujKQqozoKkVAe7btAuhF1iwIJfwi-ZGuFhnbf3n6/s1600/lato-radiatore.jpg" /></a></div>
<br />
Results are <a href="http://torqueloganalyzer.blogspot.com/2013/12/increasing-engine-temperature-for-fun.html">encouraging</a>.<br />
<br />
<br />Alessandro Iacopettihttp://www.blogger.com/profile/16100651220450712655noreply@blogger.com0tag:blogger.com,1999:blog-6502368017989174645.post-15969961032098721832013-12-15T17:39:00.000+01:002013-12-15T17:39:11.755+01:00Yaris 12V again<div class="separator" style="clear: both; text-align: left;">
It seems that even the older Yaris has a 12V clamp in the hood that can be used for jump starting the car.</div>
According to this Spanish forum:<br />
It's possible to use the highlighted connector in the HV fuse box that carries the +12V from the battery.<br />
The bolt in the lower right corner can be used for the negative clamp.<br />
<br />
<a href="http://mitoyotaprius.mforos.com/2042955/11364755-yaris-HSD-jump-start-clamps-in-the-hood/"><span style="color: #026cb1; font-family: Verdana, Arial, sans-serif; font-size: x-small;"><span style="line-height: 18px;">http://mitoyotaprius.mforos.com/2042955/11364755-yaris-HSD</span></span><span style="background-color: #d0d0ff; font-family: Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;">-jump-start-clamps-in-the-hood/</span></a><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiod-XaPzawHW8VQXhHv6YZgDEinUyG83HsPyDtILKoxYK8kJb74iNdnWqYqUrvQxZS1GJT-2FVrD_zpWPKDVoqewemdnFDDq47SHvP1euj-5qHvXx9OEh-dfNhapqxSJRiAvzOcmZhx5GK/s1600/fusebox.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiod-XaPzawHW8VQXhHv6YZgDEinUyG83HsPyDtILKoxYK8kJb74iNdnWqYqUrvQxZS1GJT-2FVrD_zpWPKDVoqewemdnFDDq47SHvP1euj-5qHvXx9OEh-dfNhapqxSJRiAvzOcmZhx5GK/s1600/fusebox.jpg" /></a></div>
<br />Alessandro Iacopettihttp://www.blogger.com/profile/16100651220450712655noreply@blogger.com0tag:blogger.com,1999:blog-6502368017989174645.post-68424226295129267802013-12-15T17:12:00.000+01:002013-12-15T17:12:36.976+01:00Checking the 12V battery from the OBD portThe OBD port, located under the steering wheel, carries a +12V line from the battery.<br />
It can be used to check battery charge without opening anything.<br />
Just put your tester terminals on pins 4 and 16:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPPryAocG_A0ISsRnAsH-8bJqTZIkinwaYQvNkQX5vFvy6nnTDzMXbuW4CJL4Wb27nvhe5cSFe-2RTPuhM1-Hg7JsRinvNHjkHV4ZRyUdJslCc_Onsq4PSb3x_hUWBEMeHC8DpF179D_0U/s1600/12v.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPPryAocG_A0ISsRnAsH-8bJqTZIkinwaYQvNkQX5vFvy6nnTDzMXbuW4CJL4Wb27nvhe5cSFe-2RTPuhM1-Hg7JsRinvNHjkHV4ZRyUdJslCc_Onsq4PSb3x_hUWBEMeHC8DpF179D_0U/s1600/12v.jpg" /></a></div>
<br />Alessandro Iacopettihttp://www.blogger.com/profile/16100651220450712655noreply@blogger.com1tag:blogger.com,1999:blog-6502368017989174645.post-4485506294711398652013-12-15T12:21:00.003+01:002013-12-15T12:24:16.192+01:00Torque Log Analyzer: Introduction to Hybrid<a href="http://torqueloganalyzer.blogspot.com/2013/11/introduction-to-hybrid.html?spref=bl">Torque Log Analyzer: Introduction to Hybrid</a>: Driving an hybrid car seems to scare some people. Here is a "for dummies"-style introduction which I gave a little contribution i...Alessandro Iacopettihttp://www.blogger.com/profile/16100651220450712655noreply@blogger.com0tag:blogger.com,1999:blog-6502368017989174645.post-5395694560222358782013-12-15T12:21:00.001+01:002013-12-15T12:24:16.196+01:00Torque Log Analyzer: Bookmarks<a href="http://torqueloganalyzer.blogspot.com/2013/11/bookmarks.html?spref=bl">Torque Log Analyzer: Bookmarks</a>: Some useful info about inner working of HSD: http://prius.ecrostech.com/original/Understanding/ContinuouslyVariableTransmission.htm http:/...Alessandro Iacopettihttp://www.blogger.com/profile/16100651220450712655noreply@blogger.com0tag:blogger.com,1999:blog-6502368017989174645.post-50711652803809746272013-11-25T19:00:00.000+01:002013-11-25T19:00:05.348+01:00Revenge of the Nerds?Does Google favour programmers over users?<br />
<div>
I'm writing <a href="http://torqueloganalyzer.blogspot.it/">some code on Google Docs</a> and if I run it from the user interface I get the following error:</div>
<div>
"Service invoked too many times in a short time: spreadsheet. Try Utilities.sleep(1000) between calls."</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBnSx8JcRWMBRkrb7FyeTwGxSVldKCuaLj6E9LCdtRbSmL2MqU4j8wgFo9DseySUTe96iqrUjYiAGotSXRTnoQil-A4dHQMiunx2lejef-zHnMPFgXGjnz658j-fHiRtBXLiTK3o_hf2g/s1600/err.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBnSx8JcRWMBRkrb7FyeTwGxSVldKCuaLj6E9LCdtRbSmL2MqU4j8wgFo9DseySUTe96iqrUjYiAGotSXRTnoQil-A4dHQMiunx2lejef-zHnMPFgXGjnz658j-fHiRtBXLiTK3o_hf2g/s1600/err.PNG" /></a></div>
<div>
<br /></div>
<div>
If I run it from the code editor, it runs fine.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixwyAM5N6qeBGX3P7Bysw3iRMhB-icUxrwYUajBI9dGZnpQN4wZqFfBTd5AkouPcuSgb8-0znO7DhrVD2sIBgMwDpubSQEdD-DQIoUNjzYENoFE4kCA3oqDE3E0cluOQHb2zdZS-2UcuJW/s1600/edit.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixwyAM5N6qeBGX3P7Bysw3iRMhB-icUxrwYUajBI9dGZnpQN4wZqFfBTd5AkouPcuSgb8-0znO7DhrVD2sIBgMwDpubSQEdD-DQIoUNjzYENoFE4kCA3oqDE3E0cluOQHb2zdZS-2UcuJW/s1600/edit.PNG" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
Alessandro Iacopettihttp://www.blogger.com/profile/16100651220450712655noreply@blogger.com0tag:blogger.com,1999:blog-6502368017989174645.post-9812895483221110332013-11-20T19:00:00.000+01:002013-11-20T19:00:06.112+01:00ComicsI'm looking forward for the collectibles section<br />
<a href="http://checkpointcomics.it/">http://checkpointcomics.it/</a><br />
<br />Alessandro Iacopettihttp://www.blogger.com/profile/16100651220450712655noreply@blogger.com0tag:blogger.com,1999:blog-6502368017989174645.post-53698364663044829162013-10-26T23:47:00.001+02:002013-10-26T23:47:27.796+02:00Impressive<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/3G-ziTBAkbQ?feature=player_embedded' frameborder='0'></iframe></div>
<br />Alessandro Iacopettihttp://www.blogger.com/profile/16100651220450712655noreply@blogger.com0tag:blogger.com,1999:blog-6502368017989174645.post-82130161198339686372013-10-20T14:24:00.002+02:002013-10-20T14:24:49.937+02:00Reverse engineering of Google ChartsGoogle Docs charts are still giving me headaches, but I've found a way to extract options from an existing chart and reuse them in javascript code:<br />
<br />
<a href="http://stackoverflow.com/questions/13594839/google-apps-script-how-to-set-use-column-a-as-labels-in-chart-embedded-in-spr">http://stackoverflow.com/questions/13594839/google-apps-script-how-to-set-use-column-a-as-labels-in-chart-embedded-in-spr</a><br />
<br />Alessandro Iacopettihttp://www.blogger.com/profile/16100651220450712655noreply@blogger.com0tag:blogger.com,1999:blog-6502368017989174645.post-11334233000862496722013-10-13T14:54:00.000+02:002013-10-13T16:36:33.675+02:00Is google docs just a toy?Lately I'm working on a <a href="http://torqueloganalyzer.blogspot.it/">project </a>involving the spreadsheet application of google docs.<br />
I've chosen it because it's cross platform, it's easy to share, it's scriptable using javascript with little effort.<br />
Things went fine with all the simple test cases, but when I begun using it with real-life data I came into this:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIQ5lWs_QX-rvOk2ze4tcsWDlCYfrQQw3l5rMXMu-4MO2GTfQ_KReiyCIdeaDL1wmabZH5dvkRcJu6-Cs8izF5VcyQUbi59j-AggFlkZ5VlTbTII72gG1CJnrj-a_eaoMlkL4AYaLEFaa_/s1600/docs.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIQ5lWs_QX-rvOk2ze4tcsWDlCYfrQQw3l5rMXMu-4MO2GTfQ_KReiyCIdeaDL1wmabZH5dvkRcJu6-Cs8izF5VcyQUbi59j-AggFlkZ5VlTbTII72gG1CJnrj-a_eaoMlkL4AYaLEFaa_/s1600/docs.PNG" /></a></div>
<br />
But I'm well far from the <a href="https://support.google.com/drive/answer/2505921">declared limits</a> of the application itself:<br />
<br />
<h1 style="border: 0px; color: #444444; font-family: 'open sans', sans-serif; font-size: 36px; font-weight: 300; line-height: 44px; margin: 0px 0px 30px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: #ffd966;">Google spreadsheets size and complexity limits</span></h1>
<h3 class="drop-head" style="border: 0px; color: #777777; font-family: 'open sans', sans-serif; font-size: 16px; line-height: 22px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: #ffd966;">Learn how to keep your spreadsheet up-and-running by avoiding size and complexity limits.</span></h3>
<div class="main-section--answer main-section content-container" style="border: 0px; color: #444444; font-family: 'Helvetica Neue', HelveticaNeue, Helvetica, sans-serif; font-size: 13px; line-height: 22px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; word-wrap: break-word;">
<h3 style="border: 0px; font-family: 'open sans', sans-serif; font-size: 16px; font-style: inherit; margin: 1em 0px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: #ffd966;">Size limits</span></h3>
<div style="border: 0px; font-family: inherit; font-style: inherit; margin-bottom: 1em; margin-top: 1em; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: #ffd966;">If you're close to exceeding Google spreadsheets size limits, you'll see a message at the top of your spreadsheet that indicates what limit you're about to reach.</span></div>
<ul style="border: 0px; font-family: inherit; font-style: inherit; margin: 1em 0px; outline: 0px; padding: 0px; vertical-align: baseline;">
<li style="border: 0px; font-family: inherit; font-style: inherit; margin: 0px 0px 0px 2em; outline: 0px; padding: 0px; vertical-align: baseline;"><span style="background-color: #ffd966;"><strong style="border: 0px; font-family: inherit; font-style: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Number of cells</strong>: 400,000 total cells across all sheets</span></li>
<li style="border: 0px; font-family: inherit; font-style: inherit; margin: 0px 0px 0px 2em; outline: 0px; padding: 0px; vertical-align: baseline;"><span style="background-color: #ffd966;"><strong style="border: 0px; font-family: inherit; font-style: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Number of columns</strong>: 256 columns per sheet</span></li>
<li style="border: 0px; font-family: inherit; font-style: inherit; margin: 0px 0px 0px 2em; outline: 0px; padding: 0px; vertical-align: baseline;"><span style="background-color: #ffd966;"><strong style="border: 0px; font-family: inherit; font-style: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Number of formulas</strong>: 40,000 cells containing formulas across all sheets</span></li>
<li style="border: 0px; font-family: inherit; font-style: inherit; margin: 0px 0px 0px 2em; outline: 0px; padding: 0px; vertical-align: baseline;"><span style="background-color: #ffd966;"><strong style="border: 0px; font-family: inherit; font-style: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Number of tabs</strong>: 200 sheets per workbook</span></li>
<li style="border: 0px; font-family: inherit; font-style: inherit; margin: 0px 0px 0px 2em; outline: 0px; padding: 0px; vertical-align: baseline;"><span style="background-color: #ffd966;"><strong style="border: 0px; font-family: inherit; font-style: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">GoogleFinance formulas</strong>: 1,000 <a href="https://support.google.com/drive/answer/answer.py?answer=54198" style="border: 0px; color: #7759ae; font-family: inherit; font-style: inherit; margin: 0px; outline: 0px; padding: 0px; text-decoration: none; vertical-align: baseline;">GoogleFinance formulas</a></span></li>
<li style="border: 0px; font-family: inherit; font-style: inherit; margin: 0px 0px 0px 2em; outline: 0px; padding: 0px; vertical-align: baseline;"><span style="background-color: #ffd966;"><strong style="border: 0px; font-family: inherit; font-style: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">ImportRange formulas</strong>: 50 <a href="https://support.google.com/drive/answer/answer.py?answer=98757" style="border: 0px; color: #7759ae; font-family: inherit; font-style: inherit; margin: 0px; outline: 0px; padding: 0px; text-decoration: none; vertical-align: baseline;">cross-workbook reference formulas</a></span></li>
<li style="border: 0px; font-family: inherit; font-style: inherit; margin: 0px 0px 0px 2em; outline: 0px; padding: 0px; vertical-align: baseline;"><span style="background-color: #ffd966;"><strong style="border: 0px; font-family: inherit; font-style: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">ImportData, ImportHtml, ImportFeed, or ImportXml formulas</strong>: 50 functions for external data.</span></li>
</ul>
<div class="note" style="background-image: none; background-position: 2% 7px; background-size: auto 32px; border-bottom-color: rgb(238, 238, 238); border-bottom-style: solid; border-top-color: rgb(238, 238, 238); border-top-style: solid; border-width: 1px 0px; font-family: inherit; font-style: inherit; margin: 1em 0px; min-height: 0px; outline: 0px; padding: 8px 0px; vertical-align: baseline;">
<span style="background-color: #ffd966;">Spreadsheets also have overall storage limits. Some spreadsheets may reach these before hitting the 400,000 cell limit, particularly when individual cells have large amounts of text. In such cases, the spreadsheet will go into read-only mode to prevent data loss.</span></div>
<h4 style="border: 0px; font-family: inherit; font-style: inherit; margin: 1em 0px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: #ffd966;">Google forms size limits</span></h4>
<div style="border: 0px; font-family: inherit; font-style: inherit; margin-bottom: 1em; margin-top: 1em; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: #ffd966;">These size limits also impact the spreadsheets that collect form responses (for example, if you send a survey). To determine the number of responses that a form can handle, take the number of questions in your form and the number of cells containing other data into account.</span></div>
<h3 style="border: 0px; font-family: 'open sans', sans-serif; font-size: 16px; font-style: inherit; margin: 1em 0px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: #ffd966;">Complex Calculations</span></h3>
<div style="border: 0px; font-family: inherit; font-style: inherit; margin-bottom: 1em; margin-top: 1em; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: #ffd966;">Google spreadsheets also have complexity limits. Every time a cell is updated, any cell that references it will also be recalculated. If formulas become too complex or take too long to calculate, the spreadsheet will timeout during calculation.</span></div>
<div style="border: 0px; font-family: inherit; font-style: inherit; margin-bottom: 1em; margin-top: 1em; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: #ffd966;">Formulas that increase the complexity of a spreadsheet include:</span></div>
<ul style="border: 0px; font-family: inherit; font-style: inherit; margin: 1em 0px; outline: 0px; padding: 0px; vertical-align: baseline;">
<li style="border: 0px; font-family: inherit; font-style: inherit; margin: 0px 0px 0px 2em; outline: 0px; padding: 0px; vertical-align: baseline;"><span style="background-color: #ffd966;">VLOOKUP, QUERY, SUMIF, and many similar formulas that take a large range of cells as input.</span></li>
<li style="border: 0px; font-family: inherit; font-style: inherit; margin: 0px 0px 0px 2em; outline: 0px; padding: 0px; vertical-align: baseline;"><span style="background-color: #ffd966;">Volatile formulas (e.g., NOW, RAND, OFFSET, INDIRECT) are recalculated every time the spreadsheet is modified. If there are a large number of formulas that depend on cells with volatile formulas, they will be re-calculated on each edit, which may slow down a spreadsheet.</span></li>
<li style="border: 0px; font-family: inherit; font-style: inherit; margin: 0px 0px 0px 2em; outline: 0px; padding: 0px; vertical-align: baseline;"><span style="background-color: #ffd966;">Import-based formulas (e.g., IMPORTRANGE) are recalculated periodically and magnify complexity.</span></li>
</ul>
<div style="border: 0px; font-family: inherit; font-style: inherit; margin-bottom: 1em; margin-top: 1em; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: white;"><br /></span>
<span style="background-color: white;"><br /></span></div>
<div style="border: 0px; font-family: inherit; font-style: inherit; margin-bottom: 1em; margin-top: 1em; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: white;">we're talking about a 4000 rows spreadsheet here, and all the scripts works fine on smaller sheets.</span></div>
<div style="background-color: white; border: 0px; font-family: inherit; font-style: inherit; margin-bottom: 1em; margin-top: 1em; outline: 0px; padding: 0px; vertical-align: baseline;">
Update:<br />
I investigated a little more: it seems that I hit the 40.000 formulas limit.<br />
Quite a low limit: I had to copy some columns and paste back only the values to go on.<br />
<br /></div>
</div>
Alessandro Iacopettihttp://www.blogger.com/profile/16100651220450712655noreply@blogger.com0tag:blogger.com,1999:blog-6502368017989174645.post-81295760475425221882013-09-28T15:43:00.001+02:002013-09-28T15:46:08.243+02:00Get SmartCall me <a href="https://plus.google.com/app/basic/stream/z12xepegplybit3xc04cj1yx1py4xrsb1ps0k">envious</a>, but my SSD just broke abruptly.<br>
<div>
Dead.</div>
<div>
Not even recognized by BIOS.</div>
<div>
I had S.M.A.R.T. Monitoring enabled, but I had no signs of the impending doom.</div>
<div>
At least mechanical disk usually begin to rattle a little before dying.</div>
Alessandro Iacopettihttp://www.blogger.com/profile/16100651220450712655noreply@blogger.com0tag:blogger.com,1999:blog-6502368017989174645.post-89004384479694213902013-09-24T21:31:00.001+02:002013-09-24T21:31:10.498+02:00Torque Log Analyzer has now its own web site.Torque Log Analyzer has grown up: <a href="http://torqueloganalyzer.blogspot.it/">http://torqueloganalyzer.blogspot.it/</a><br />
<br />Alessandro Iacopettihttp://www.blogger.com/profile/16100651220450712655noreply@blogger.com0tag:blogger.com,1999:blog-6502368017989174645.post-23608382482132158402013-09-22T23:10:00.000+02:002013-09-22T23:10:17.204+02:00Multiple Vertical Axes in Google Spreadsheet Charts in JavascriptThis was tricky.<br />
Chart options are documented in a wide galaxy of different documents, and none of them seems to explain multiple axes charts: <br />
<br />
<span style="font-family: "Courier New",Courier,monospace;">var ss = SpreadsheetApp.getActiveSpreadsheet();<br />var sheet = ss.getSheetByName(GlideChartName);<br />var chart = sheet.newChart()<br /> .setChartType(Charts.ChartType.AREA)<br /> .addRange(sheet.getRange("A:A"))<br /> .addRange(sheet.getRange("B:B"))<br /> .setOption("title", "Chart Name")<br /> .setOption("width", 800)<br /> .setOption("height", 600)<br /> .setOption("hAxis.title", "X")<br /> .setOption("series", { 0: { targetAxisIndex: 0 }, 1: { targetAxisIndex: 1 } })<br /> .setOption("vAxes", { 0: { title: "Y1" }, 1: { title: "Y2" } })<br /> .setPosition(1, 1, 0, 0)<br /> .build();<br /><br />sheet.insertChart(chart);</span>Alessandro Iacopettihttp://www.blogger.com/profile/16100651220450712655noreply@blogger.com0tag:blogger.com,1999:blog-6502368017989174645.post-91883493030579598622013-09-21T19:38:00.000+02:002013-09-21T19:38:46.243+02:00TrickedIn?What's going on with LinkedIn?<br />
Some weeks ago the list of people I may know began containing a person I really know, but he's completely outside of my working circle.<br />
We don't have any common contacts, he's even living in another country.<br />
I only contacted him last year using the email address I used to register myself on LinkedIn, a yahoo address.<br />
I used yahoo to contact him on gmail, I didn't send any email through LinkedIn nor did him.<br />
Actually I can't think any other mean of relating the two of us other than looking at the history of our mailboxes.<br />
And now this:<br />
<a href="http://www.businessweek.com/news/2013-09-20/linkedin-customers-say-company-hacked-their-e-mail-address-books">http://www.businessweek.com/news/2013-09-20/linkedin-customers-say-company-hacked-their-e-mail-address-books</a><br />
Maybe 2 clues don't build an evidence, but they leave a doubt.<br />
<br />Alessandro Iacopettihttp://www.blogger.com/profile/16100651220450712655noreply@blogger.com0tag:blogger.com,1999:blog-6502368017989174645.post-11930410713156959492013-09-15T19:08:00.000+02:002013-09-24T21:37:58.797+02:00Torque Log Analyzer Tool for Google Drive<div style="text-align: left;">
NOTE: this post refers to an older version of Torque Log Analyzer.<br />
The new version is here: <a href="http://torqueloganalyzer.blogspot.it/">http://torqueloganalyzer.blogspot.it/</a><br />
Follow <a href="http://torqueloganalyzer.blogspot.it/">this link</a>. <br />
<br />
<br />
<br />
<br />
I leave the older version here for reference. <br />
<br />
<br />
<br />
<br />
NOTE: this post has been updated: there is new code attached.<br />
<br />
Following up my previous <a href="http://pleasedonttouchthescreen.blogspot.it/2013/09/torque-game.html">rants on driving gamification</a>, I've made a prototype of a Log Analyzer for Torque, that computes some driving parameters.<br />
It's particularly aimed for Toyota HSD hybrid cars.<br />
It's written in Google Script for Google Drive, so it can be used on as many platforms as possible.<br />
<br />
First, you need some logs from Torque: <a href="http://pleasedonttouchthescreen.blogspot.it/2013/06/torque-logging-tutorial.html">here is a tutorial</a> on that. <br />
The PIDs you need to log are:<br />
"Speed (OBD)(km/h)"<br />
"Engine RPM(rpm)"<br />
"Batt Pack Current Val(Amperes)"<br />
"State of Charge(%)"<br />
These PIDs are contained in a HSD specific file you can find <a href="http://pleasedonttouchthescreen.blogspot.it/2013/05/using-torque-with-yaris-hybrid.html">here</a>.<br />
<br />
Once you've logged your data with Torque, you should end up with a zip file.</div>
<div style="text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<img border="0" height="480" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAL7r4hfLoOG0m4RD5_L8V71rYaQEf0KrWennVragsXz3kfunzNSZZbpULsabH5Qs04JhpnRa4oIF7d0AKlQp9e2osEz-fxGm3qPENqVL-q8_c11fJzdPZlsVnehQr1a4rGbpo0CjGneIG/s640/Screenshot+from+2013-06-14+13:30:50.png" width="640" /></div>
<br />
you'll find the actual data inside a CSV file.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAq2pSpMtwdvwJgf-pMeW4LOI0gBU5h2jnHG3s-KV3fxhsNWOURRcRS70a4GkCf0WmkFvos03wmZ5twVRFg4bD73-JHcl65VpGEc1gLBuBdKHWEr-p0sIIiOHdTRlB9k5MtEm8wm9iEL0T/s1600/Screenshot+from+2013-06-14+13:31:26.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="397" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAq2pSpMtwdvwJgf-pMeW4LOI0gBU5h2jnHG3s-KV3fxhsNWOURRcRS70a4GkCf0WmkFvos03wmZ5twVRFg4bD73-JHcl65VpGEc1gLBuBdKHWEr-p0sIIiOHdTRlB9k5MtEm8wm9iEL0T/s640/Screenshot+from+2013-06-14+13:31:26.png" width="640" /></a></div>
<br />
extract it.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWe0bTW9BKhbguqEEMqE2Zaox-Et7Y0-Jijoug7z8sYd0gkNgQLGJM76eYzeEktkLoH9u5niubNgeMNaokHo9578ztclkeHY2AHkeVpAd-vVpGeHE7tyPGVUYwgX_e2qN9ICb_b5hjc-5_/s1600/Screenshot+from+2013-06-14+13:33:44.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="370" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWe0bTW9BKhbguqEEMqE2Zaox-Et7Y0-Jijoug7z8sYd0gkNgQLGJM76eYzeEktkLoH9u5niubNgeMNaokHo9578ztclkeHY2AHkeVpAd-vVpGeHE7tyPGVUYwgX_e2qN9ICb_b5hjc-5_/s640/Screenshot+from+2013-06-14+13:33:44.png" width="640" /></a></div>
<br />
drag it into google drive, selecting "Convert document"<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqrrfJRQXuvKrz4GZ5PEKwCwAaTSPhjCGk3dYhp2y5ovsKXjIoOa8xoLIWYJdtyS7ZgUc0GYquV2bexB5kbcKyigcERRCz4LomfQSCMgtpNqoSg4fhsXBLB8BtmL6HTje4kDxVTYzBmBab/s1600/Screenshot+from+2013-06-14+13:42:02.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="373" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqrrfJRQXuvKrz4GZ5PEKwCwAaTSPhjCGk3dYhp2y5ovsKXjIoOa8xoLIWYJdtyS7ZgUc0GYquV2bexB5kbcKyigcERRCz4LomfQSCMgtpNqoSg4fhsXBLB8BtmL6HTje4kDxVTYzBmBab/s640/Screenshot+from+2013-06-14+13:42:02.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikgXzuDCRg65fVm4ADBwcajbEVoIntaXet0p1M-gPlvEsSZUqf-8YnmH6CiqzlC4KtHySNxgwzksdvjv-VdBpEXPEeLFis1LkbJi88iBB4I3Qiybw_VYEovibGoLNb6Tz4xEwTMnXTjDOy/s1600/Screenshot+from+2013-06-14+13:42:02.png" style="margin-left: 1em; margin-right: 1em;"><br /></a></div>
<br />
google drive will convert it to a spreadsheet document. <br />
warning: columns order and name may vary according to your PID logging configuration. <br />
<br />
<br />
Open the newly created spreadsheet document.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihqfyETfZoezFPxFrR8wX7qBO7RHZOlNfPrAeAj9cgFrwCEKOEvpCMrchMYKsZp5zCfo0t4U-dCCor6VzuFg4nF-hYNzyTfgL6z2CbPLngoyMpTSwog6Hg5ImDtxnpmGhr2n5UtWECDWLh/s1600/Screenshot+from+2013-09-15+18:55:44.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="532" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihqfyETfZoezFPxFrR8wX7qBO7RHZOlNfPrAeAj9cgFrwCEKOEvpCMrchMYKsZp5zCfo0t4U-dCCor6VzuFg4nF-hYNzyTfgL6z2CbPLngoyMpTSwog6Hg5ImDtxnpmGhr2n5UtWECDWLh/s640/Screenshot+from+2013-09-15+18:55:44.png" width="640" /></a></div>
<br />
Select "Tool/Script editor..."<br />
<br />
Close the wizard window.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdXDouMC-U2JHGwLCX9mNYyxyObBnAaVRsGulTM2nKP4YdDnFmnJHhfsqVI3qENbh_gBHd79XLnHDcXWHsH2qff_jGeHzLUyyETWEFLtWwxifPVT6G9xRRbpdxff2HH_l_wfXdQYO9vNjy/s1600/Screenshot+from+2013-09-15+18:30:12.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="532" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdXDouMC-U2JHGwLCX9mNYyxyObBnAaVRsGulTM2nKP4YdDnFmnJHhfsqVI3qENbh_gBHd79XLnHDcXWHsH2qff_jGeHzLUyyETWEFLtWwxifPVT6G9xRRbpdxff2HH_l_wfXdQYO9vNjy/s640/Screenshot+from+2013-09-15+18:30:12.png" width="640" /></a></div>
<br />
Delete any existing code.<br />
Copy and paste the following code:<br />
<br />
=== CUT HERE === <br />
<br />
<span style="font-family: Courier New, Courier, monospace;">// Torque Log Analyzer for Google Drive</span><br />
<span style="font-family: Courier New, Courier, monospace;">//</span><br />
<span style="font-family: Courier New, Courier, monospace;">// Alessandro Iacopetti, http://pleasedonttouchthescreen.blogspot.it/2013/09/torque-log-analyzer-tool-for-google.html</span><br />
<span style="font-family: Courier New, Courier, monospace;">// free use for non-commercial purposes.</span><br />
<span style="font-family: Courier New, Courier, monospace;">//</span><br />
<span style="font-family: Courier New, Courier, monospace;">// usage:</span><br />
<span style="font-family: Courier New, Courier, monospace;">// load your csv formatted torque log in an empty spreadsheet and then run this script against it</span><br />
<span style="font-family: Courier New, Courier, monospace;">//</span><br />
<span style="font-family: Courier New, Courier, monospace;">// 2013/09/15 - first release</span><br />
<span style="font-family: Courier New, Courier, monospace;">// 2013/09/20 - added some sanity checks, speed variation index, ignitions count</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;">// name of the columns we use</span><br />
<span style="font-family: Courier New, Courier, monospace;">var OBDSpeedName = "Speed (OBD)(km/h)";</span><br />
<span style="font-family: Courier New, Courier, monospace;">var RPMName = "Engine RPM(rpm)";</span><br />
<span style="font-family: Courier New, Courier, monospace;">var BattPackCurrentName = "Batt Pack Current Val(Amperes)";</span><br />
<span style="font-family: Courier New, Courier, monospace;">var SOCName = "State of Charge(%)";</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;">// parameters</span><br />
<span style="font-family: Courier New, Courier, monospace;">var SOCBestValue = 60; // HSD system always tries to maintain this level</span><br />
<span style="font-family: Courier New, Courier, monospace;">var IgnitionMinTime = 5; // seconds under which ICE ignition is considered inefficient</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;">// no user customization under this line</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;">// support columns to be added</span><br />
<span style="font-family: Courier New, Courier, monospace;">var GlideName = "Glide";</span><br />
<span style="font-family: Courier New, Courier, monospace;">var SpeedVarName = "Speed Variation";</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;">// position of columns used in calculation</span><br />
<span style="font-family: Courier New, Courier, monospace;">var OBDSpeed = -1;</span><br />
<span style="font-family: Courier New, Courier, monospace;">var RPM = -1;</span><br />
<span style="font-family: Courier New, Courier, monospace;">var BattPackCurrent = -1;</span><br />
<span style="font-family: Courier New, Courier, monospace;">var SOC = -1;</span><br />
<span style="font-family: Courier New, Courier, monospace;">var Glide = -1;</span><br />
<span style="font-family: Courier New, Courier, monospace;">var SpeedVar = -1;</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;">var NumShortIgnitions = 0;</span><br />
<span style="font-family: Courier New, Courier, monospace;">var NumIgnitions = 0;</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;">function AnalyzeTorqueLogs() {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> </span><br />
<span style="font-family: Courier New, Courier, monospace;"> // logging helpers</span><br />
<span style="font-family: Courier New, Courier, monospace;"> </span><br />
<span style="font-family: Courier New, Courier, monospace;"> function addLogSheet() {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var ss = SpreadsheetApp.getActiveSpreadsheet();</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var activesheet = SpreadsheetApp.getActiveSheet();</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var sheet = ss.getSheetByName("Log");</span><br />
<span style="font-family: Courier New, Courier, monospace;"> if (sheet == null) {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> sheet = ss.insertSheet("Log", 1);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"> sheet.setColumnWidth(1, 500);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> ss.setActiveSheet(activesheet);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"> </span><br />
<span style="font-family: Courier New, Courier, monospace;"> function printLog(log) {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var ss = SpreadsheetApp.getActiveSpreadsheet();</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var activesheet = SpreadsheetApp.getActiveSheet();</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var sheet = ss.getSheetByName("Log");</span><br />
<span style="font-family: Courier New, Courier, monospace;"> sheet.appendRow([ log ])</span><br />
<span style="font-family: Courier New, Courier, monospace;"> ss.setActiveSheet(activesheet);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"> </span><br />
<span style="font-family: Courier New, Courier, monospace;"> </span><br />
<span style="font-family: Courier New, Courier, monospace;"> // data processing</span><br />
<span style="font-family: Courier New, Courier, monospace;"> </span><br />
<span style="font-family: Courier New, Courier, monospace;"> function setDataName() {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var ss = SpreadsheetApp.getActiveSpreadsheet();</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var sheet = ss.getSheets()[0];</span><br />
<span style="font-family: Courier New, Courier, monospace;"> sheet.setName("Data");</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"> </span><br />
<span style="font-family: Courier New, Courier, monospace;"> // count RPM sequences != 0 less then minimum time</span><br />
<span style="font-family: Courier New, Courier, monospace;"> function countShortIgnitions() {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var ss = SpreadsheetApp.getActiveSpreadsheet();</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var sheet = ss.getSheets()[0];</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var range = sheet.getRange(RPM + "2:" + RPM);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var height = range.getHeight();</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var values = range.getValues();</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;"> sequencelength = 0;</span><br />
<span style="font-family: Courier New, Courier, monospace;"> lastrpm = 0;</span><br />
<span style="font-family: Courier New, Courier, monospace;"> for (var i = 0; i < height; ++i) {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> if (values[i] != 0) {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> sequencelength++;</span><br />
<span style="font-family: Courier New, Courier, monospace;"> if (lastrpm == 0)</span><br />
<span style="font-family: Courier New, Courier, monospace;"> NumIgnitions++;</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"> if (values[i] == 0) {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> if (lastrpm != 0) {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> if (sequencelength < IgnitionMinTime)</span><br />
<span style="font-family: Courier New, Courier, monospace;"> NumShortIgnitions++;</span><br />
<span style="font-family: Courier New, Courier, monospace;"> sequencelength = 0;</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"> lastrpm = values[i];</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"> </span><br />
<span style="font-family: Courier New, Courier, monospace;"> function addAnalysisSheet() {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var ss = SpreadsheetApp.getActiveSpreadsheet();</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var sheet = ss.getSheetByName("Analysis");</span><br />
<span style="font-family: Courier New, Courier, monospace;"> if (sheet == null) {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> sheet = ss.insertSheet("Analysis", 1);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"> </span><br />
<span style="font-family: Courier New, Courier, monospace;"> // SOC</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var values = [</span><br />
<span style="font-family: Courier New, Courier, monospace;"> [ "Start SOC %" ],</span><br />
<span style="font-family: Courier New, Courier, monospace;"> [ "End SOC %" ],</span><br />
<span style="font-family: Courier New, Courier, monospace;"> [ "SOC Gain %" ],</span><br />
<span style="font-family: Courier New, Courier, monospace;"> [ "Average SOC %" ],</span><br />
<span style="font-family: Courier New, Courier, monospace;"> [ "Difference from best %" ],</span><br />
<span style="font-family: Courier New, Courier, monospace;"> [ "Standard Deviation" ],</span><br />
<span style="font-family: Courier New, Courier, monospace;"> ];</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var range = sheet.getRange(1, 1, 6, 1);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> range.setValues(values);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> </span><br />
<span style="font-family: Courier New, Courier, monospace;"> var values = [</span><br />
<span style="font-family: Courier New, Courier, monospace;"> [ "=Data!" + SOC + "2" ],</span><br />
<span style="font-family: Courier New, Courier, monospace;"> [ "=INDEX(Data!" + SOC + ":" + SOC + "; COUNT(Data!" + SOC + ":" + SOC + "))" ],</span><br />
<span style="font-family: Courier New, Courier, monospace;"> [ "=B2-B1" ],</span><br />
<span style="font-family: Courier New, Courier, monospace;"> [ "=AVERAGE(Data!" + SOC + ":" + SOC + ")" ],</span><br />
<span style="font-family: Courier New, Courier, monospace;"> [ "=B4-" + SOCBestValue ],</span><br />
<span style="font-family: Courier New, Courier, monospace;"> [ "=STDEVP(Data!" + SOC + ":" + SOC + ")" ],</span><br />
<span style="font-family: Courier New, Courier, monospace;"> ];</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var range = sheet.getRange(1, 2, 6, 1);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> range.setFormulas(values);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> range.setNumberFormat("0.00");</span><br />
<span style="font-family: Courier New, Courier, monospace;"> </span><br />
<span style="font-family: Courier New, Courier, monospace;"> printLog("SOC Analysis added");</span><br />
<span style="font-family: Courier New, Courier, monospace;"> </span><br />
<span style="font-family: Courier New, Courier, monospace;"> // Hybrid</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var values = [</span><br />
<span style="font-family: Courier New, Courier, monospace;"> [ "ICE off %", "", "Percentage of trip time where the engine was off" ],</span><br />
<span style="font-family: Courier New, Courier, monospace;"> [ "Ignitions", "", "Times ICE was turned on" ],</span><br />
<span style="font-family: Courier New, Courier, monospace;"> [ "Inefficient Ignitions", "", "Times ICE was turned on for less than " + IgnitionMinTime + " seconds" ],</span><br />
<span style="font-family: Courier New, Courier, monospace;"> [ "Glide %", "", "Percentage of driving time where the car was gliding" ],</span><br />
<span style="font-family: Courier New, Courier, monospace;"> [ "Longest Glide sequence", "", "Longest glide, in seconds" ],</span><br />
<span style="font-family: Courier New, Courier, monospace;"> [ "Battery Stress", "", "Quadratic average of battery current flow" ],</span><br />
<span style="font-family: Courier New, Courier, monospace;"> ];</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var range = sheet.getRange(8, 1, 6, 3);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> range.setValues(values);</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;"> // formulas are</span><br />
<span style="font-family: Courier New, Courier, monospace;"> //=(100*countif(Data!RPM:RPM;0))/count(Data!RPM:RPM)</span><br />
<span style="font-family: Courier New, Courier, monospace;"> //=NumIgnitions</span><br />
<span style="font-family: Courier New, Courier, monospace;"> //=NumShortIgnitions</span><br />
<span style="font-family: Courier New, Courier, monospace;"> //=sum(Data!GLIDE:GLIDE)/countif(Data!SPEED:SPEED, ">0")*100</span><br />
<span style="font-family: Courier New, Courier, monospace;"> //=arrayformula(MAX(FREQUENCY(IF(Data!GLIDE:GLIDE=1,ROW(Data!GLIDE:GLIDE)),IF(Data!GLIDE:GLIDE<>1,ROW(Data!GLIDE:GLIDE)))))</span><br />
<span style="font-family: Courier New, Courier, monospace;"> //=sqrt(sumsq(Data!BATTERY:BATTERY)/count(Data!BATTERY:BATTERY)) </span><br />
<span style="font-family: Courier New, Courier, monospace;"> countShortIgnitions(); </span><br />
<span style="font-family: Courier New, Courier, monospace;"> var values = [</span><br />
<span style="font-family: Courier New, Courier, monospace;"> [ "=(100*countif(Data!" + RPM + ":" + RPM + ";0))/count(Data!" + RPM + ":" + RPM + ")" ],</span><br />
<span style="font-family: Courier New, Courier, monospace;"> [ NumIgnitions ],</span><br />
<span style="font-family: Courier New, Courier, monospace;"> [ NumShortIgnitions ],</span><br />
<span style="font-family: Courier New, Courier, monospace;"> [ "=sum(Data!" + Glide + ":" + Glide + ")/countif(Data!" + OBDSpeed + ":" + OBDSpeed + "; \">0\")*100" ],</span><br />
<span style="font-family: Courier New, Courier, monospace;"> [ "=arrayformula(MAX(FREQUENCY(IF(Data!" + Glide + ":" + Glide + "=1;ROW(Data!" + Glide + ":" + Glide + "));IF(Data!" + Glide + ":" + Glide + "<>1;ROW(Data!" + Glide + ":" + Glide + ")))))" ],</span><br />
<span style="font-family: Courier New, Courier, monospace;"> [ "=sqrt(sumsq(Data!" + BattPackCurrent + ":" + BattPackCurrent + ")/count(Data!" + BattPackCurrent + ":" + BattPackCurrent + "))" ],</span><br />
<span style="font-family: Courier New, Courier, monospace;"> ];</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var range = sheet.getRange(8, 2, 6, 1);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> range.setFormulas(values);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> range.setNumberFormat("0.00");</span><br />
<span style="font-family: Courier New, Courier, monospace;"> </span><br />
<span style="font-family: Courier New, Courier, monospace;"> printLog("Hybrid Analysis added");</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;"> var values = [</span><br />
<span style="font-family: Courier New, Courier, monospace;"> [ "Average Speed", "", "Km/h" ],</span><br />
<span style="font-family: Courier New, Courier, monospace;"> [ "Top Speed", "", "Km/h" ],</span><br />
<span style="font-family: Courier New, Courier, monospace;"> [ "Average Absolute Variation", "", "Speed variations during the trip (only while moving): measure your driving style" ],</span><br />
<span style="font-family: Courier New, Courier, monospace;"> ];</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var range = sheet.getRange(15, 1, 3, 3);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> range.setValues(values);</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;"> // formulas are</span><br />
<span style="font-family: Courier New, Courier, monospace;"> //=AVERAGE(Data!SPEED:SPEED)</span><br />
<span style="font-family: Courier New, Courier, monospace;"> //=Max(Data!SPEED:SPEED)</span><br />
<span style="font-family: Courier New, Courier, monospace;"> //=sqrt(sumsq(Data!SPEEDVAR:SPEEDVAR)/countif(Data!SPEED:SPEED, ">0"))</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var values = [</span><br />
<span style="font-family: Courier New, Courier, monospace;"> [ "=AVERAGE(Data!" + OBDSpeed + ":" + OBDSpeed + ")" ],</span><br />
<span style="font-family: Courier New, Courier, monospace;"> [ "=Max(Data!" + OBDSpeed + ":" + OBDSpeed + ")" ],</span><br />
<span style="font-family: Courier New, Courier, monospace;"> [ "=sqrt(sumsq(Data!" + SpeedVar + ":" + SpeedVar + ")/countif(Data!" + OBDSpeed + ":" + OBDSpeed + "; \">0\"))" ],</span><br />
<span style="font-family: Courier New, Courier, monospace;"> ];</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var range = sheet.getRange(15, 2, 3, 1);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> range.setFormulas(values);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> range.setNumberFormat("0.00");</span><br />
<span style="font-family: Courier New, Courier, monospace;"> </span><br />
<span style="font-family: Courier New, Courier, monospace;"> sheet.autoResizeColumn(1);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> sheet.autoResizeColumn(2);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> sheet.autoResizeColumn(3);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> </span><br />
<span style="font-family: Courier New, Courier, monospace;"> printLog("Analysis sheet added");</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"> </span><br />
<span style="font-family: Courier New, Courier, monospace;"> function insertSeparatorColumn() {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var alreadyexist = findColumnByName("|");</span><br />
<span style="font-family: Courier New, Courier, monospace;"> if (alreadyexist != -1) {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> return;</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"> </span><br />
<span style="font-family: Courier New, Courier, monospace;"> var ss = SpreadsheetApp.getActiveSpreadsheet();</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var sheet = ss.getSheetByName("Data");</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var last = sheet.getLastColumn();</span><br />
<span style="font-family: Courier New, Courier, monospace;"> sheet.insertColumnAfter(last);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var cell = sheet.getRange(1, last + 1);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> cell.setValue("|");</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var rangeToCopy = sheet.getRange(1, last + 1, 1, 1);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> rangeToCopy.copyTo(sheet.getRange(2, last + 1, sheet.getLastRow() - 1, 1));</span><br />
<span style="font-family: Courier New, Courier, monospace;"> sheet.autoResizeColumn(1);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> </span><br />
<span style="font-family: Courier New, Courier, monospace;"> printLog("separator column added");</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"> </span><br />
<span style="font-family: Courier New, Courier, monospace;"> function insertSpeedVarColumn() {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> SpeedVar = findColumnByName(SpeedVarName);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> if (SpeedVar != -1) {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> return;</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"> </span><br />
<span style="font-family: Courier New, Courier, monospace;"> var ss = SpreadsheetApp.getActiveSpreadsheet();</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var sheet = ss.getSheetByName("Data");</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var last = sheet.getLastColumn();</span><br />
<span style="font-family: Courier New, Courier, monospace;"> sheet.insertColumnAfter(last);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> </span><br />
<span style="font-family: Courier New, Courier, monospace;"> // first 2 cells are constant</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var values = [</span><br />
<span style="font-family: Courier New, Courier, monospace;"> [ SpeedVarName ], </span><br />
<span style="font-family: Courier New, Courier, monospace;"> [ "0" ], </span><br />
<span style="font-family: Courier New, Courier, monospace;"> ];</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var range = sheet.getRange(1, last + 1, 2, 1);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> range.setValues(values);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> </span><br />
<span style="font-family: Courier New, Courier, monospace;"> // formula is "=SPEED3-SPEED2"</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var cell = sheet.getRange(3, last + 1);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> cell.setFormula("=" + OBDSpeed + "3-" + OBDSpeed + "2");</span><br />
<span style="font-family: Courier New, Courier, monospace;"> </span><br />
<span style="font-family: Courier New, Courier, monospace;"> var rangeToCopy = sheet.getRange(3, last + 1, 1, 1);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> rangeToCopy.copyTo(sheet.getRange(3, last + 1, sheet.getLastRow() - 2, 1));</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;"> SpeedVar = findColumnByName(SpeedVarName); </span><br />
<span style="font-family: Courier New, Courier, monospace;"> printLog("speed variation column added");</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"> </span><br />
<span style="font-family: Courier New, Courier, monospace;"> function insertGlideColumn() {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> Glide = findColumnByName(GlideName);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> if (Glide != -1) {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> return;</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"> </span><br />
<span style="font-family: Courier New, Courier, monospace;"> var ss = SpreadsheetApp.getActiveSpreadsheet();</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var sheet = ss.getSheetByName("Data");</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var last = sheet.getLastColumn();</span><br />
<span style="font-family: Courier New, Courier, monospace;"> sheet.insertColumnAfter(last);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> </span><br />
<span style="font-family: Courier New, Courier, monospace;"> var range = sheet.getRange(1, last + 1, 1, 1);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> range.setValue(GlideName);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> </span><br />
<span style="font-family: Courier New, Courier, monospace;"> // formula is "=if(and(RPM2<500;SPEED2>10;abs(BATTPACKCURRENT2)<5);1;0)"</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var cell = sheet.getRange(2, last + 1);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> cell.setFormula("=if(and(" + RPM + "2<500;" + OBDSpeed + "2>10;abs(" + BattPackCurrent + "2)<5);1;0)");</span><br />
<span style="font-family: Courier New, Courier, monospace;"> </span><br />
<span style="font-family: Courier New, Courier, monospace;"> var rangeToCopy = sheet.getRange(2, last + 1, 1, 1);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> rangeToCopy.copyTo(sheet.getRange(2, last + 1, sheet.getLastRow() - 1, 1));</span><br />
<span style="font-family: Courier New, Courier, monospace;"> </span><br />
<span style="font-family: Courier New, Courier, monospace;"> Glide = findColumnByName(GlideName);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> printLog("glide column added");</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"> </span><br />
<span style="font-family: Courier New, Courier, monospace;"> function activateSheetByName(name) {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var ss = SpreadsheetApp.getActiveSpreadsheet();</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var sheet = ss.getSheetByName(name);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> ss.setActiveSheet(sheet);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"> </span><br />
<span style="font-family: Courier New, Courier, monospace;"> // returns only letter of the column with the given name in the first cell</span><br />
<span style="font-family: Courier New, Courier, monospace;"> function findColumnByName(name) {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var ss = SpreadsheetApp.getActiveSpreadsheet();</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var sheet = ss.getSheetByName("Data");</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var last = sheet.getLastColumn();</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var foundcolumn = -1;</span><br />
<span style="font-family: Courier New, Courier, monospace;"> </span><br />
<span style="font-family: Courier New, Courier, monospace;"> for (var i = 1; i <= last; i++) {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var cell = sheet.getRange(1, i);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var value = cell.getValue();</span><br />
<span style="font-family: Courier New, Courier, monospace;"> </span><br />
<span style="font-family: Courier New, Courier, monospace;"> if (value == name) {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> foundcolumn = cell.getA1Notation();</span><br />
<span style="font-family: Courier New, Courier, monospace;"> printLog("Found column " + name + " at " + foundcolumn);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"> if (foundcolumn == -1) {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> printLog("Column " + name + " not found");</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"> else {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> foundcolumn = foundcolumn.substring(0, foundcolumn.length - 1);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"> </span><br />
<span style="font-family: Courier New, Courier, monospace;"> return foundcolumn;</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<br />
<span style="font-family: Courier New, Courier, monospace;"> // set "-" to "0" and check if there are values > max</span><br />
<span style="font-family: Courier New, Courier, monospace;"> function sanitizeColumn(column, max) {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var ss = SpreadsheetApp.getActiveSpreadsheet();</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var sheet = ss.getSheets()[0];</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var range = sheet.getRange(column + ":" + column );</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var height = range.getHeight();</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var values = range.getValues();</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var foundnull = false;</span><br />
<span style="font-family: Courier New, Courier, monospace;"> </span><br />
<span style="font-family: Courier New, Courier, monospace;"> printLog("checking " + height + " values at column " + column);</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;"> for (var i = 0; i < height; ++i) {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> if (values[i] == "-") {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> var cell = range.getCell(i + 1, 1);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> cell.setValue(0);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> foundnull = true;</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"> if (values[i] > max) {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> printLog("ERROR: Values in column " + column + " out of range, check for import errors");</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"> if (foundnull)</span><br />
<span style="font-family: Courier New, Courier, monospace;"> printLog("some missing values in column " + column);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;"> // set global vars to columns position</span><br />
<span style="font-family: Courier New, Courier, monospace;"> function findNeededColumns() {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> OBDSpeed = findColumnByName(OBDSpeedName);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> RPM = findColumnByName(RPMName);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> BattPackCurrent = findColumnByName(BattPackCurrentName);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> SOC = findColumnByName(SOCName);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"> function sanitizeNeededColumns() {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> sanitizeColumn(OBDSpeed, 300);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> sanitizeColumn(RPM, 10000);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> sanitizeColumn(BattPackCurrent, 300);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> sanitizeColumn(SOC, 100);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;"> // main</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;"> addLogSheet();</span><br />
<span style="font-family: Courier New, Courier, monospace;"> printLog("Begin data processing");</span><br />
<span style="font-family: Courier New, Courier, monospace;"> setDataName();</span><br />
<span style="font-family: Courier New, Courier, monospace;"> activateSheetByName("Data");</span><br />
<span style="font-family: Courier New, Courier, monospace;"> findNeededColumns();</span><br />
<span style="font-family: Courier New, Courier, monospace;"> sanitizeNeededColumns();</span><br />
<span style="font-family: Courier New, Courier, monospace;"> insertSeparatorColumn();</span><br />
<span style="font-family: Courier New, Courier, monospace;"> </span><br />
<span style="font-family: Courier New, Courier, monospace;"> if (OBDSpeed != -1) {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> insertSpeedVarColumn();</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"> else {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> printLog("ERROR: Could not add speed variance column");</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"> </span><br />
<span style="font-family: Courier New, Courier, monospace;"> if ((OBDSpeed != -1) && (RPM != -1) && (BattPackCurrent != -1)) {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> insertGlideColumn();</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"> else {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> printLog("ERROR: Could not add glide column");</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;"> addAnalysisSheet();</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> </span><br />
<span style="font-family: Courier New, Courier, monospace;"> printLog("End data processing");</span><br />
<span style="font-family: Courier New, Courier, monospace;">}</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
=== CUT HERE ===<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFycKnw-cDC_27-BCi-vAOrtfcCI0VTSsX06SPk063gytugDF82boznM8sO82A149fI4kuSBQ0ITgfC18HXyv2WFdeIgvSUM1kUP86MqoZglyGr3j-f2Qew_wmBqredZ9ym7JdZ3bWg3DY/s1600/Screenshot+from+2013-09-15+18:31:19.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="532" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFycKnw-cDC_27-BCi-vAOrtfcCI0VTSsX06SPk063gytugDF82boznM8sO82A149fI4kuSBQ0ITgfC18HXyv2WFdeIgvSUM1kUP86MqoZglyGr3j-f2Qew_wmBqredZ9ym7JdZ3bWg3DY/s640/Screenshot+from+2013-09-15+18:31:19.png" width="640" /></a></div>
<br />
Now select "File / Save" and then "Run / AnalyzeTorqueLogs"<br />
<br />
You will have to authorize the script<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPNPfljelVcCN40jBm3rfFTnksRJmI2Xgcdh6oKU5dkvH_69YL4g9B18wpiMGQZ6g4FE15DZ5TKHEiEQp6iAJPYBGT8Df-_RFZQJXEfW22zE5qkWkTzUZdtF3oq6bkavwVMdiY9FASMmjy/s1600/Screenshot+from+2013-09-15+18:32:59.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="532" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPNPfljelVcCN40jBm3rfFTnksRJmI2Xgcdh6oKU5dkvH_69YL4g9B18wpiMGQZ6g4FE15DZ5TKHEiEQp6iAJPYBGT8Df-_RFZQJXEfW22zE5qkWkTzUZdtF3oq6bkavwVMdiY9FASMmjy/s640/Screenshot+from+2013-09-15+18:32:59.png" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCdl2BJWKdMrQiSqQGGuyYPdNjjdMfAZvo9hyphenhyphenXAdt-24q2EFmE2rDYxSd2h1fuGbK47626kk9SXmqSmSOvYLQcX3ijYx5XXYDCAzUrwIdfcV2kO65gWHSI_WQYqOGC2DRSRUPRlccYyD2H/s1600/Screenshot+from+2013-09-15+18:33:36.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="596" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCdl2BJWKdMrQiSqQGGuyYPdNjjdMfAZvo9hyphenhyphenXAdt-24q2EFmE2rDYxSd2h1fuGbK47626kk9SXmqSmSOvYLQcX3ijYx5XXYDCAzUrwIdfcV2kO65gWHSI_WQYqOGC2DRSRUPRlccYyD2H/s640/Screenshot+from+2013-09-15+18:33:36.png" width="640" /></a></div>
<br />
After the script has finished running, switch back to the spreadsheet, and you'll see a new tab named "Analysis".<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYDje06evk0MVCwD8btDCg5X7KJcgNzUE7GcMEaQRp8PH3N4sBkolMh4BWP7Y6oCsUzG9mCJhBZG9VcOE24PwxzLwb2IgKNanRsAdc-gta_9k_1kIu0celQTEsLMsL5hrIli3SmY094SP3/s1600/Screenshot+from+2013-09-15+18:34:45.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="532" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYDje06evk0MVCwD8btDCg5X7KJcgNzUE7GcMEaQRp8PH3N4sBkolMh4BWP7Y6oCsUzG9mCJhBZG9VcOE24PwxzLwb2IgKNanRsAdc-gta_9k_1kIu0celQTEsLMsL5hrIli3SmY094SP3/s640/Screenshot+from+2013-09-15+18:34:45.png" width="640" /></a></div>
<br />
This first version compute some sample parameters regarding the HV battery:<br />
start and end charge, and average value vs the value considered the best by some hypermilers (60%).<br />
<br />
There are some other values that may answer some curiosity about the car inner working:<br />
the percentage of the time the petrol engine was actually off during the trip,<br />
the percentage of time the car was moving using very little energy (glide),<br />
the longest glide time of the trip<br />
a battery "stress" value, that evaluates how may amperes have flown in and out of the battery: a higher value means higher stress, but a meaningful range has yet to be established.<br />
<br />
NOTE:<br />
This new version add some parameters:<br />
how many times ICE was turned on during the trip<br />
how many ICE ignitions lasted less than 5 seconds (those are considered just a waste of fuel)<br />
an evaluation of speed variance during the trip: this should give an idea of your driving stile (calm or aggressive).<br />
<br />
<table cellpadding="0" cellspacing="0" dir="ltr" style="font-family: arial,sans,sans-serif; font-size: 13px; table-layout: fixed;"><colgroup><col width="177"></col><col width="40"></col><col width="335"></col></colgroup><tbody>
<tr style="height: 17px;"><td style="border: 1px solid rgb(204, 204, 204); direction: ltr; padding: 0px 3px; vertical-align: bottom;">Ignitions</td><td style="border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; padding: 0px 3px; text-align: right; vertical-align: bottom;">13.00</td><td style="border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; direction: ltr; padding: 0px 3px; vertical-align: bottom;">Times ICE was turned on</td></tr>
<tr style="height: 17px;"><td style="border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; direction: ltr; padding: 0px 3px; vertical-align: bottom;">Inefficient Ignitions</td><td style="border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; padding: 0px 3px; text-align: right; vertical-align: bottom;">1.00</td><td style="border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; direction: ltr; padding: 0px 3px; vertical-align: bottom;">Times ICE was turned on for less than 5 seconds</td></tr>
<tr style="height: 17px;"><td style="border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; direction: ltr; padding: 0px 3px; vertical-align: bottom;"><br /></td><td style="border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; padding: 0px 3px; text-align: right; vertical-align: bottom;"><br /></td><td style="border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; direction: ltr; padding: 0px 3px; vertical-align: bottom;"><br /></td></tr>
<tr style="height: 17px;"><td style="border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; direction: ltr; padding: 0px 3px; vertical-align: bottom;">Average Speed</td><td style="border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; padding: 0px 3px; text-align: right; vertical-align: bottom;">41.08</td><td style="border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; direction: ltr; padding: 0px 3px; vertical-align: bottom;"></td></tr>
<tr style="height: 17px;"><td style="border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; direction: ltr; padding: 0px 3px; vertical-align: bottom;">Top Speed</td><td style="border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; padding: 0px 3px; text-align: right; vertical-align: bottom;">77.00</td><td style="border-bottom: 1px solid #ccc; border-right: 1px solid #ccc; padding: 0 3px; vertical-align: bottom;"></td></tr>
<tr style="height: 17px;"><td style="border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; direction: ltr; padding: 0px 3px; vertical-align: bottom;">Average Absolute Variation</td><td style="border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; padding: 0px 3px; text-align: right; vertical-align: bottom;">1.97</td><td style="border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; direction: ltr; padding: 0px 3px; vertical-align: bottom;">Speed variations during the trip (only while moving)</td></tr>
</tbody></table>
Alessandro Iacopettihttp://www.blogger.com/profile/16100651220450712655noreply@blogger.com0tag:blogger.com,1999:blog-6502368017989174645.post-69235873131590905022013-09-14T15:38:00.000+02:002013-09-14T15:38:48.071+02:00Rorschach TestThese are data of car speed at various RPMs.<br />
Same road, different driving stile: <br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJ0UbRPtIuX_UCIf2vrrZgr9ufq8HCpjEfBJDa8Po3xSjBQ3Xs8_6hivRvCxtkluYLA7tEhBApzyWR_WlKKydkyxF7S7eBBOVK_W2IDpPqKsTa0sGwEq7rFo0U1D6toPPrYUHMyO8e4seq/s1600/chart_2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJ0UbRPtIuX_UCIf2vrrZgr9ufq8HCpjEfBJDa8Po3xSjBQ3Xs8_6hivRvCxtkluYLA7tEhBApzyWR_WlKKydkyxF7S7eBBOVK_W2IDpPqKsTa0sGwEq7rFo0U1D6toPPrYUHMyO8e4seq/s1600/chart_2.png" /> </a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhF0JSmODjyBqD_ib52OoZnqU6RtxNEwYIlwbSpG6VAZtE6Uj_pFj-elsO5jWinyMem327kpjP5sVN88_ir8c0Tfmd_0N3RrSNJN_tFaC8nzNGs-muvSWmP7I8GKL3SMxqfpWd2e6nYu0lA/s1600/chart_3(1).png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhF0JSmODjyBqD_ib52OoZnqU6RtxNEwYIlwbSpG6VAZtE6Uj_pFj-elsO5jWinyMem327kpjP5sVN88_ir8c0Tfmd_0N3RrSNJN_tFaC8nzNGs-muvSWmP7I8GKL3SMxqfpWd2e6nYu0lA/s1600/chart_3(1).png" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAWhYKCpC7aqP0qxos7vOYjvGbGRuGEy7l33OINabp5s8ho30IY2jLO_v9q2ICP3iCrq35Vp_kZBa91GGjHhAw-vJzJ96ynOMoi8PU7BjOycIf08H_Vz7DPvukfmFi8Rcpbduho_KV1frW/s1600/chart_3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><br /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZ3ABKXrsNznI9iXd_xAOcwpy3dq1S22BRhgsT3e8Pe9JMAxcXgI3HBstAX9g7t1VaiIJvbIZxrFNRIMO1kxOqc7XvtIZU5rUFfxRVWOsqAW2uEfIaf4hBXPhgAMTm1Aft-NGHdB-K7sSi/s1600/chart_4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZ3ABKXrsNznI9iXd_xAOcwpy3dq1S22BRhgsT3e8Pe9JMAxcXgI3HBstAX9g7t1VaiIJvbIZxrFNRIMO1kxOqc7XvtIZU5rUFfxRVWOsqAW2uEfIaf4hBXPhgAMTm1Aft-NGHdB-K7sSi/s1600/chart_4.png" /></a></div>
We always have 2 aggregation points:<br />
one at 0 RPM, where we have the car running on electric power up to 70 km/h, and one at 1300 RPM, that seems to be the sweet spot of the engine.<br />
Speedy driving leads to higher RPM and a wider distribution.<br />
Use of EV mode, leads to higher RPM than normal: note the aggregation around 2100 and the gap between 1300 and 1600.<br />
<br />Alessandro Iacopettihttp://www.blogger.com/profile/16100651220450712655noreply@blogger.com0tag:blogger.com,1999:blog-6502368017989174645.post-50388023748748627212013-09-14T15:08:00.002+02:002013-09-14T15:20:48.837+02:00Is this the best possible use of a car and an iPad?<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' src='https://www.youtube.com/embed/slETbZ7FIs0?feature=player_embedded' frameborder='0'></iframe></div>
<br />
Did someone talked about gamification of the driving experience?<br />
<br />Alessandro Iacopettihttp://www.blogger.com/profile/16100651220450712655noreply@blogger.com0tag:blogger.com,1999:blog-6502368017989174645.post-82993197621753982102013-09-13T23:12:00.000+02:002013-09-13T23:12:18.276+02:00Battery thief framed by app: all details insideFollowing up from a <a href="http://pleasedonttouchthescreen.blogspot.it/2013/08/who-stealing-my-battery.html">battery draining problem</a>, I've found a tool (<a href="https://play.google.com/store/apps/details?id=com.asksven.betterbatterystats">BetterBatteryStats</a>) that profiles battery usage in grater detail than the Android stock battery tool:<br />
<br />
<a href="http://www.howtogeek.com/139592/how-to-find-the-root-cause-of-your-android-battery-problems/">http://www.howtogeek.com/139592/how-to-find-the-root-cause-of-your-android-battery-problems/</a><br />
<br />
Here is the profile of a full day plagued by anomalous battery consumption:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbZtFvr-K4exPKfOoPXnKrwPekfGiKRDc_wdlcAN-s6OMz72ksJtBiIJZIK614L4AzrXni4RLr4N5AJN1VIiKzVBtghn5Fwt2jj-zUiW_5f_NIsquY9U-qUTZd1G16Q-1w0k3h-FrlgiQG/s1600/2013-08-26+06.57.31.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbZtFvr-K4exPKfOoPXnKrwPekfGiKRDc_wdlcAN-s6OMz72ksJtBiIJZIK614L4AzrXni4RLr4N5AJN1VIiKzVBtghn5Fwt2jj-zUiW_5f_NIsquY9U-qUTZd1G16Q-1w0k3h-FrlgiQG/s1600/2013-08-26+06.57.31.gif" /></a></div>
<br />
BetterBatteryStats has found RILJ to be the prime suspect:<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjifjSjZp9th27mTtEpluB5owq9kjAs_igwM0YuUJPNM19CsGmUsTVCChrKAMLCMcSYKwNWolT4pCkA4OuXlVUOoAmguvH5nMaEQjUo0hCDF2cDIwFfRL0Ecb1xpG3-wYj3v7td3mZHNsYE/s1600/2013-08-26+06.58.25.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjifjSjZp9th27mTtEpluB5owq9kjAs_igwM0YuUJPNM19CsGmUsTVCChrKAMLCMcSYKwNWolT4pCkA4OuXlVUOoAmguvH5nMaEQjUo0hCDF2cDIwFfRL0Ecb1xpG3-wYj3v7td3mZHNsYE/s1600/2013-08-26+06.58.25.gif" /></a></div>
<br />
It seems to be a known behavior as said here: <br />
<a href="http://forum.xda-developers.com/showthread.php?p=31352333">http://forum.xda-developers.com/showthread.php?p=31352333</a><br />
<br />
<a href="http://forum.xda-developers.com/showthread.php?t=1878692">http://forum.xda-developers.com/showthread.php?t=1878692</a><br />
<a href="http://forum.xda-developers.com/showthread.php?p=31352333">http://forum.xda-developers.com/showthread.php?p=31352333</a><br />
<br />
<br />
<br />
I've followed the instruction and disabled Google geolocalization:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhC9dQl5agPBEAoJ6C_JJ4DL8JHrIcAFONKj75vLLXvMOEJrDhypEda-UlHVw7Uk8GWQDxA7nxKa3BjotCJzrc0B_136ta56TKw5x5x4V5ApgbtKflXmR0jU4W4WB56hLWr8zfOIczCGoFp/s1600/2013-08-26+14.09.04.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhC9dQl5agPBEAoJ6C_JJ4DL8JHrIcAFONKj75vLLXvMOEJrDhypEda-UlHVw7Uk8GWQDxA7nxKa3BjotCJzrc0B_136ta56TKw5x5x4V5ApgbtKflXmR0jU4W4WB56hLWr8zfOIczCGoFp/s640/2013-08-26+14.09.04.png" width="384" /></a></div>
<br />
After some time running, RILJ is still top in battery usage, but it's weight is comparable to other processes, and battery consumption is a reasonable 1%/h<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjEeqwhLvbOomKnAn3PrhTi7riMR_IyEptjaPLRO7E84IxtWfzRIJRI3e8x_PjovzL4vTyxAYCuVjTOQt6-T_qeZaSV9pi0_b-d96qpkVLj37kemX9JgyuGmo0CxjX6-VSdaBpHkseMaMI/s1600/2013-08-27+06.32.33.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjEeqwhLvbOomKnAn3PrhTi7riMR_IyEptjaPLRO7E84IxtWfzRIJRI3e8x_PjovzL4vTyxAYCuVjTOQt6-T_qeZaSV9pi0_b-d96qpkVLj37kemX9JgyuGmo0CxjX6-VSdaBpHkseMaMI/s640/2013-08-27+06.32.33.png" width="384" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglFm2y68a5h2NiqAhS1f6BAenISjj24cjhvsGcQAADks8rln367s3rry9nTBFmaDmV9VLJr5ejvc9F8qdFpw_sHt47zLw14yNdTR6GmKQxv515buro6iIfoKiB-iXgCUO5atubxUIPmw6W/s1600/2013-08-27+06.32.54.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglFm2y68a5h2NiqAhS1f6BAenISjj24cjhvsGcQAADks8rln367s3rry9nTBFmaDmV9VLJr5ejvc9F8qdFpw_sHt47zLw14yNdTR6GmKQxv515buro6iIfoKiB-iXgCUO5atubxUIPmw6W/s640/2013-08-27+06.32.54.png" width="384" /></a></div>
<br />
All went fine for some days, when after sending an SMS and receiving a call, the issue surfaced again.<br />
<div>
<br />
<a href="http://code.google.com/p/android/issues/detail?id=17383"><span style="font-size: small;"><span style="font-family: inherit;"><span style="line-height: 19px; white-space: nowrap;">http://code.google.com/p/android/issues/detail?id=17383</span></span></span></a><br />
<br />
<span style="font-size: small;"><span style="font-family: inherit;"><span style="line-height: 19px; white-space: nowrap;">I tried disabling "increase volume when in pocket".</span></span></span><br />
<span style="font-size: small;"><span style="font-family: inherit;"><span style="line-height: 19px; white-space: nowrap;"></span></span></span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1xVLO1q9fhQHg6o9Qmymwg7hK6UoYLl2g-p5XG3ttoNycGaDL080OrPNRuw2NoW_iJMbHsBtjdMxK57H4uBBb20Dxy75j1_dfKIKBzPDjGpVv7JcJxh7HMANvJD7xwxwvCnPoUmjgCykE/s1600/2013-08-31+20.34.19.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1xVLO1q9fhQHg6o9Qmymwg7hK6UoYLl2g-p5XG3ttoNycGaDL080OrPNRuw2NoW_iJMbHsBtjdMxK57H4uBBb20Dxy75j1_dfKIKBzPDjGpVv7JcJxh7HMANvJD7xwxwvCnPoUmjgCykE/s640/2013-08-31+20.34.19.png" width="384" /></a></div>
<br />
<span style="font-size: small;"><span style="font-family: inherit;"></span></span><br />
<span style="font-size: small;"><span style="font-family: inherit;"><span style="line-height: 19px; white-space: nowrap;">My phone is running fine since then.</span></span></span></div>
Alessandro Iacopettihttp://www.blogger.com/profile/16100651220450712655noreply@blogger.com0tag:blogger.com,1999:blog-6502368017989174645.post-91589283032717785242013-09-09T08:20:00.001+02:002013-09-09T08:20:45.439+02:00Shine on you, crazy Clio<p dir="ltr">Renault is my favorite target in these days.<br>
Here is the Clio dashboard. <br>
Some designer might have thought that chrome plated finish are sexy.<br>
Truth is that no matter where the sun is, a ray will reflect exactly into your eyes. </p>
<div class="separator" style="clear: both; text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEit_fmDQcAC3ATPVvA6ZPiSsGHU1i0CV4ZlWD52fNu_E0VCMfM59QNL2d1KxH_v0cl75nllk_zosdIxqVOtRwo9UoHLZwRHA4CbXqr-D-0cd3iRB3y_TpXbHxqNJsQUSflL43e8pDuczaLJ/s1600/2013-09-08%25252022.54.55.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"> <img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEit_fmDQcAC3ATPVvA6ZPiSsGHU1i0CV4ZlWD52fNu_E0VCMfM59QNL2d1KxH_v0cl75nllk_zosdIxqVOtRwo9UoHLZwRHA4CbXqr-D-0cd3iRB3y_TpXbHxqNJsQUSflL43e8pDuczaLJ/s640/2013-09-08%25252022.54.55.jpg"> </a> </div>Alessandro Iacopettihttp://www.blogger.com/profile/16100651220450712655noreply@blogger.com0tag:blogger.com,1999:blog-6502368017989174645.post-4394252697183368532013-09-08T09:24:00.001+02:002013-09-08T09:24:09.132+02:00More car keys nonsense<p dir="ltr">This is a Renault credit card sized car key.<br>
Probably the most uncomfortable key design ever.<br>
You have to insert it in a slot to start the car, so you can't keep it in the wallet with your other cards.<br>
It wouldn't be possible anyway because it's too thick. <br>
It's even too big to stay comfortably in you pockets without fearing to break it every time you sit down.<br>
Congrats Renault! <br>
</p>
<div class="separator" style="clear: both; text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJ2-3VW50QI8_q40M9s5IPYm3bwjKshbIw-cTeWtPrruewxdCpeT5XKCfTEnaKf4kpLX6eHiEbT4_kYX2BfuiIpicao0VkdAn3p0H6CWA66Fn1YLBt2WK6E3WSbxq-0DTPzLMgBRn1Ovcx/s1600/2013-09-08%25252009.10.34.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"> <img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJ2-3VW50QI8_q40M9s5IPYm3bwjKshbIw-cTeWtPrruewxdCpeT5XKCfTEnaKf4kpLX6eHiEbT4_kYX2BfuiIpicao0VkdAn3p0H6CWA66Fn1YLBt2WK6E3WSbxq-0DTPzLMgBRn1Ovcx/s640/2013-09-08%25252009.10.34.jpg"> </a> </div>Alessandro Iacopettihttp://www.blogger.com/profile/16100651220450712655noreply@blogger.com0