Sorry

This feed does not validate.

In addition, interoperability with the widest range of feed readers could be improved by implementing the following recommendation.

Source: http://blogit.vapaasuomi.fi/rss20.xml

  1. <?xml version="1.0"?>
  2. <rss version="2.0">
  3.  
  4. <channel>
  5. <title>blogit.vapaasuomi.fi</title>
  6. <link>default</link>
  7. <language>en</language>
  8. <description>blogit.vapaasuomi.fi - default</description>
  9.  
  10. <item>
  11. <title>Ville-Pekka Vainio: How to find the current ChromeOS Flex image</title>
  12. <guid isPermaLink="false">https://vpv.kapsi.fi/blog/?p=207</guid>
  13. <link>https://vpv.kapsi.fi/blog/2022/08/how-to-find-the-current-chromeos-flex-image/</link>
  14. <description>&lt;p&gt;Edit: The quick answer to the question by a reader of my blog, Julien:&lt;/p&gt;
  15.  
  16.  
  17.  
  18. &lt;blockquote class=&quot;wp-block-quote&quot;&gt;&lt;p&gt;The info to download Chrome OS Flex from Linux is a bit hidden, but official info and link is available here: &lt;a href=&quot;https://support.google.com/chromeosflex/answer/11543105?hl=en#zippy=%2Chow-do-i-create-a-chromeos-flex-usb-installer-on-linux&quot;&gt;https://support.google.com/chromeosflex/answer/11543105?hl=en#zippy=%2Chow-do-i-create-a-chromeos-flex-usb-installer-on-linux&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
  19.  
  20.  
  21.  
  22. &lt;p&gt;My dad has an Acer Chromebook 14 CB3-431, codenamed Edgar. Google just stopped supporting it with ChromeOS, but it’s still working well. Luckily, &lt;a href=&quot;https://cloud.google.com/blog/products/chrome-enterprise/chromeos-flex-ready-to-scale-to-pcs-and-macs&quot;&gt;Google also just released the first stable version of ChromeOS Flex.&lt;/a&gt; &lt;/p&gt;
  23.  
  24.  
  25.  
  26. &lt;p&gt;I decided to install the full UEFI image to the Chromebook from &lt;a href=&quot;https://mrchromebox.tech/&quot;&gt;https://mrchromebox.tech/&lt;/a&gt; so that starting Flex would be as easy as possible. That went well after &lt;a href=&quot;https://www.ifixit.com/Teardown/Acer+Chromebook+14+Teardown/76353&quot;&gt;finding and removing the write protect screw&lt;/a&gt;.&lt;/p&gt;
  27.  
  28.  
  29.  
  30. &lt;p&gt;But it wasn’t too easy to find the URL to download the current ChromeOS Flex installation image. Google’s Chromebook recovery extension for Chrome does not work on Linux. By reading through some reddit threads, I found out that you can get the download URLs from this json file: &lt;a href=&quot;https://dl.google.com/dl/edgedl/chromeos/recovery/cloudready_recovery2.json&quot;&gt;https://dl.google.com/dl/edgedl/chromeos/recovery/cloudready_recovery2.json&lt;/a&gt; So as of this writing, the current image is &lt;a href=&quot;https://dl.google.com/dl/edgedl/chromeos/recovery/chromeos_14816.99.0_reven_recovery_stable-channel_mp-v2.bin.zip&quot;&gt;https://dl.google.com/dl/edgedl/chromeos/recovery/chromeos_14816.99.0_reven_recovery_stable-channel_mp-v2.bin.zip&lt;/a&gt;&lt;/p&gt;
  31.  
  32.  
  33.  
  34. &lt;p&gt;Use &lt;code&gt;dd&lt;/code&gt; to write the image straight to a USB stick (not to a partition) and you should be good to go. Flex installs pretty much like a regular Linux distribution and seems to work well.&lt;/p&gt;</description>
  35. <pubDate>Wed, 03 Aug 2022 16:02:51 +0000</pubDate>
  36. </item>
  37. <item>
  38. <title>Ville-Pekka Vainio: SAS2008 LBA, Seagate Ironwolfs and scary log messages</title>
  39. <guid isPermaLink="false">http://vpv.kapsi.fi/blog/?p=202</guid>
  40. <link>https://vpv.kapsi.fi/blog/2022/07/sas2008-lba-seagate-ironwolfs-and-scary-log-messages/</link>
  41. <description>&lt;p&gt;I built a home NAS two years ago, that was the first COVID summer and I finally had the time. It’s running Proxmox, which is running TrueNAS (then Core, now Scale) as a VM. An HBA card is passed directly to the TrueNAS VM. The HBA card is a Dell PERC H310, but I’ve crossflashed it so that now it shows up as an LSI SAS2008 PCI-Express Fusion-MPT SAS-2. The system originally had five ST4000VN008 disks (4 TB) in a RAIDZ2.&lt;/p&gt;
  42.  
  43.  
  44.  
  45. &lt;p&gt;Pretty much from the beginning I noticed the system was spewing out storage related error messages when booting up. ZFS also noticed, but after the TrueNAS VM was completely up, there were no more errors and I quite rarely rebooted or shut down the system, so I wasn’t too worried. The few read errors I got each boot I cleared with &lt;code&gt;zpool clear&lt;/code&gt;, which probably was not the best idea.&lt;/p&gt;
  46.  
  47.  
  48.  
  49. &lt;p&gt;Last summer we had very cheap electricity here in Finland, something like 1-3 c/kWh plus transfer and taxes. Well, this summer it can be even 60 c/kWh during the worst times. I started shutting down my NAS when I knew we would not need it for a while. This made the disk issues worse.&lt;/p&gt;
  50.  
  51.  
  52.  
  53. &lt;p&gt;&lt;em&gt;I know the high electricity prices are partly due to Russia’s attack in Ukraine and the sanctions against Russia. I completely support Ukraine, they are fighting for the freedom of all of the Eastern EU border states. &lt;a href=&quot;https://www.defendukraine.org/donate&quot;&gt;Please donate to support Ukraine.&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
  54.  
  55.  
  56.  
  57. &lt;p&gt;TrueNAS keeps only one day of systemd journal data (why?) so I’ve already lost the actual error messages. By going through my Google search history I was able to find some of the errors I got. They were like this:&lt;/p&gt;
  58.  
  59.  
  60.  
  61. &lt;pre class=&quot;wp-block-preformatted&quot;&gt;Unaligned partial completion ...
  62. tag#0 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE ...
  63. print_req_error: critical medium error ... &lt;/pre&gt;
  64.  
  65.  
  66.  
  67. &lt;p&gt;Because there’s quite a lot of discussion on the web about Ironwolf firmware issues, issues with NCQ etc. I hoped this was something that could be fixed with software. I tried passing many kernel options found by googling to the TrueNAS Scale kernel. I came up with &lt;code&gt;libata.force=noncq mpt3sas.msix_disable=1 mpt3sas.max_queue_depth=10000&lt;/code&gt;. For more discussion on these issues, see &lt;a href=&quot;https://www.reddit.com/r/synology/comments/eri5dg/ds1019_ironwolf_8tb_softlocks_high_io_waits/&quot;&gt;here&lt;/a&gt;, &lt;a href=&quot;https://www.truenas.com/community/threads/synchronize-cache-command-timeout-error.55067/&quot;&gt;here&lt;/a&gt;, &lt;a href=&quot;https://forums.servethehome.com/index.php?threads/lsi9211-8i-on-ubuntu-15-10-timeouts.8820/page-2&quot;&gt;here&lt;/a&gt;, &lt;a href=&quot;https://forum.proxmox.com/threads/solved-proxmox-7-linux-5-11-22-issue-with-lsi-2008-controllers.93781/page-2&quot;&gt;here&lt;/a&gt;. &lt;a href=&quot;https://blog.quindorian.org/2019/09/ironwolf10tbfirmwarefix.html/&quot;&gt;Seagate has actually released a firmware update from SC60 to SC61 for the larger Ironwolfs&lt;/a&gt;, but I have the 4 TB ones without an update available.&lt;/p&gt;
  68.  
  69.  
  70.  
  71. &lt;p&gt;None of these options helped. Eventually the whole disk just disappeared. At this point it was clear to me that the issue was not a kernel bug, a disk firmware bug, an HBA firmware bug or anything like that. The disk had been faulty already on arrival.&lt;/p&gt;
  72.  
  73.  
  74.  
  75. &lt;p&gt;I noticed Seagate has come up with new versions of the Ironwolfs. The 4 TB version is now ST4000VN006 with 256 MB of cache instead of 64 MB. The new version is also physically thinner and might run cooler. I ordered one of those. Unfortunately the firmware version is still SC60.&lt;/p&gt;
  76.  
  77.  
  78.  
  79. &lt;p&gt;I replaced the faulty disk with the new one, ZFS resilvered the pool in about 8 hours and all is good again. I guess the moral of the story is that it seems like a disk could be defective, it probably is and you should start by replacing it.&lt;/p&gt;</description>
  80. <pubDate>Sun, 03 Jul 2022 15:50:56 +0000</pubDate>
  81. </item>
  82. <item>
  83. <title>Losca: Unboxing Dell XPS 13 - openSUSE Tumbleweed alongside preinstalled Ubuntu</title>
  84. <guid isPermaLink="false">tag:blogger.com,1999:blog-31939153.post-5725411947102284158</guid>
  85. <link>https://losca.blogspot.com/2022/01/unboxing-dell-xps-13-opensuse.html</link>
  86. <description>&lt;h2 class=&quot;post-subheading&quot;&gt;A look at the 2021 model of Dell XPS 13 - available with Linux pre-installed&lt;/h2&gt;&lt;div style=&quot;text-align: left;&quot; class=&quot;post-subheading&quot;&gt;I received a new laptop for work - a Dell XPS 13. Dell has been long  famous for offering certain models with pre-installed Linux as a  supported option, and opting for those is nice for moving some  euros/dollars from certain PC desktop OS monopoly towards Linux desktop  engineering costs. Notably Lenovo also offers Ubuntu and Fedora options  on many models these days (like Carbon X1 and P15 Gen 2).&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot; class=&quot;post-subheading&quot;&gt;&lt;div style=&quot;clear: both; text-align: center;&quot; class=&quot;separator&quot;&gt;&lt;a style=&quot;margin-left: 1em; margin-right: 1em;&quot; href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEicuZ7XvyUKRebCvC7ZmFWeS4Tilqv82EK5B42kscToOaLrCUZKKB0aup1bC9ZEEHLWGrh2uwT58I_3cs2N6KWxVy7WVQpxtA4E-DA0BIJ-xzGuW-L8S9G4OZ4P7LXB-Byk0qBJ6zFXLW07aUGnOImbvF78nqCSJ0Lqi7AcvlarHGlYfLUrhtk=s1280&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEicuZ7XvyUKRebCvC7ZmFWeS4Tilqv82EK5B42kscToOaLrCUZKKB0aup1bC9ZEEHLWGrh2uwT58I_3cs2N6KWxVy7WVQpxtA4E-DA0BIJ-xzGuW-L8S9G4OZ4P7LXB-Byk0qBJ6zFXLW07aUGnOImbvF78nqCSJ0Lqi7AcvlarHGlYfLUrhtk=w400-h301&quot; alt=&quot;black box&quot; border=&quot;0&quot; width=&quot;400&quot; height=&quot;301&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;clear: both; text-align: center;&quot; class=&quot;separator&quot;&gt;&lt;a style=&quot;margin-left: 1em; margin-right: 1em;&quot; href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhAQXfzLQ6p0ZMmSSoWQggPqiS_cGyQIoyc2kSTN_5vNYzB2nKhqzRQ_hMmgsMzl4KDDmX_A3hTmfW9Hx4vJO8VYjcF-1BIyzzRzJaxGAoEwdY5CEYkpCu39-AO0MSAjUKsHq1lyq_TVsq9RwShP0LKiVm85KYWG5g7hg-7Toypf_j3LeptQYA=s1280&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhAQXfzLQ6p0ZMmSSoWQggPqiS_cGyQIoyc2kSTN_5vNYzB2nKhqzRQ_hMmgsMzl4KDDmX_A3hTmfW9Hx4vJO8VYjcF-1BIyzzRzJaxGAoEwdY5CEYkpCu39-AO0MSAjUKsHq1lyq_TVsq9RwShP0LKiVm85KYWG5g7hg-7Toypf_j3LeptQYA=w301-h400&quot; alt=&quot;opened box&quot; border=&quot;0&quot; width=&quot;301&quot; height=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;clear: both; text-align: center;&quot; class=&quot;separator&quot;&gt;&lt;a style=&quot;margin-left: 1em; margin-right: 1em;&quot; href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhY-amtMR4CO1VWwAQoD_BIXTjqQTIea0fwtCyQi0hqprxvK5kqI7n02Zw45xcVF1ORm6m_IWAyaBLcGjTb6fK0M9PqzzXfeyIFawYEMCvZ36YKHjzVYtd_w7YD6Owj00mgoSrdrB4R5qegCxeI08PiKVZ8ZIeQk9l0Oyau4Q9tx8Xz8mJooJQ=s1280&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhY-amtMR4CO1VWwAQoD_BIXTjqQTIea0fwtCyQi0hqprxvK5kqI7n02Zw45xcVF1ORm6m_IWAyaBLcGjTb6fK0M9PqzzXfeyIFawYEMCvZ36YKHjzVYtd_w7YD6Owj00mgoSrdrB4R5qegCxeI08PiKVZ8ZIeQk9l0Oyau4Q9tx8Xz8mJooJQ=w640-h482&quot; alt=&quot;accessories and a leaflet about Linux support&quot; border=&quot;0&quot; width=&quot;640&quot; height=&quot;482&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;clear: both; text-align: center;&quot; class=&quot;separator&quot;&gt;&lt;a style=&quot;margin-left: 1em; margin-right: 1em;&quot; href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgM8700UA5ss6nvfXr6oJ67bJSemgNd02PRmopJL18UtqKPKpGMBv4SEmfZdO-zURQYEyXtnEL4IO7R2ng9vbAGFgKcC6K0VtaQGsiCd7Bo3_bmzOy4S2k13aRVsgjtZH1NvgkGd8ysgSnCAW6Rd1Ynb5u6kjGrlPa87ukclm7mikOTdw-6Heg=s1280&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgM8700UA5ss6nvfXr6oJ67bJSemgNd02PRmopJL18UtqKPKpGMBv4SEmfZdO-zURQYEyXtnEL4IO7R2ng9vbAGFgKcC6K0VtaQGsiCd7Bo3_bmzOy4S2k13aRVsgjtZH1NvgkGd8ysgSnCAW6Rd1Ynb5u6kjGrlPa87ukclm7mikOTdw-6Heg=w640-h482&quot; alt=&quot;laptop lifted from the box, closed&quot; border=&quot;0&quot; width=&quot;640&quot; height=&quot;482&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;clear: both; text-align: center;&quot; class=&quot;separator&quot;&gt;&lt;a style=&quot;margin-left: 1em; margin-right: 1em;&quot; href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjIvFbutG71WrXAlWVonB2TIVv-sCeS4eXafJ9DBtTjTa0wmpW-mm-lDgPOJlZWeueZ_aji5T7FHVV1sLXWdcwG2u9orijyoBXyRE_94FPpoX2uwClQWY8CiUncJtbgLOmR6IYICcb6PNpBCXmDxZ4Qa-0-2E4UTZzZkp2U7sJQMZvQyNhU5VM=s1280&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjIvFbutG71WrXAlWVonB2TIVv-sCeS4eXafJ9DBtTjTa0wmpW-mm-lDgPOJlZWeueZ_aji5T7FHVV1sLXWdcwG2u9orijyoBXyRE_94FPpoX2uwClQWY8CiUncJtbgLOmR6IYICcb6PNpBCXmDxZ4Qa-0-2E4UTZzZkp2U7sJQMZvQyNhU5VM=w301-h400&quot; alt=&quot;laptop with lid open&quot; border=&quot;0&quot; width=&quot;301&quot; height=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;clear: both; text-align: center;&quot; class=&quot;separator&quot;&gt;&lt;a style=&quot;margin-left: 1em; margin-right: 1em;&quot; href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEier6fU4z3Q0aPa-bhKlO5p5Z--2juSL2x7d8-N7hazlotVgL1f5kfI9UkVbdsqdpmGDu_s_3BIq3s5uhFhClXBm8HSAG2LlHFT_Er2pXlRQqUs9-ixGY4vD7B-8YHcvkWUGBor3d7MZ7eRPjy24KzYom-Pi4HqNzqQtCA26lYi2t9OogkxBCA=s1280&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEier6fU4z3Q0aPa-bhKlO5p5Z--2juSL2x7d8-N7hazlotVgL1f5kfI9UkVbdsqdpmGDu_s_3BIq3s5uhFhClXBm8HSAG2LlHFT_Er2pXlRQqUs9-ixGY4vD7B-8YHcvkWUGBor3d7MZ7eRPjy24KzYom-Pi4HqNzqQtCA26lYi2t9OogkxBCA=w640-h360&quot; alt=&quot;Ubuntu running&quot; border=&quot;0&quot; width=&quot;640&quot; height=&quot;360&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;clear: both; text-align: center;&quot; class=&quot;separator&quot;&gt;&lt;a style=&quot;margin-left: 1em; margin-right: 1em;&quot; href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEioIl_Uw-sF5LkYjrM1DC52PjBmxDLSktOn5x5LRdl9Lsh4txT5TFM8hfMFt5WtWhME-DBPsLAXsOg8F3Ek5CbP0D3tY7n9RjSMVJ7UxirSpa2KQKmPYXkyICcFR8ME_S40paJG_TQYsX-YXor7gLHZq4zzI9ivgCrzq8m95MIPIyCDXRQ17J0=s1280&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEioIl_Uw-sF5LkYjrM1DC52PjBmxDLSktOn5x5LRdl9Lsh4txT5TFM8hfMFt5WtWhME-DBPsLAXsOg8F3Ek5CbP0D3tY7n9RjSMVJ7UxirSpa2KQKmPYXkyICcFR8ME_S40paJG_TQYsX-YXor7gLHZq4zzI9ivgCrzq8m95MIPIyCDXRQ17J0=w640-h360&quot; alt=&quot;openSUSE runnin&quot; border=&quot;0&quot; width=&quot;640&quot; height=&quot;360&quot; /&gt;&lt;/a&gt;&lt;/div&gt; &lt;/div&gt;&lt;div style=&quot;text-align: left;&quot; class=&quot;post-subheading&quot;&gt;Obviously a smooth, ready-to-rock Ubuntu installation is nice for  most people already, but I need openSUSE, so after checking everything  is fine with Ubuntu, I continued to install openSUSE Tumbleweed as a  dual boot option. As I’m a funny little tinkerer, I obviously went with  some special things. I wanted:&lt;ul&gt;&lt;li&gt;Ubuntu to remain as the reference supported OS on a small(ish)  partition, useful to compare to if trying out new development versions  of software on openSUSE and finding oddities.&lt;/li&gt;&lt;li&gt;openSUSE as the OS consuming most of the space.&lt;/li&gt;&lt;li&gt;LUKS encryption for openSUSE without LVM.&lt;/li&gt;&lt;li&gt;ext4’s new fancy ‘fast_commit’ feature in use during filesystem creation.&lt;/li&gt;&lt;li&gt;As a result of all that, I ended up juggling back and forth  installation screens a couple of times (even more than shown below, and  also because I forgot I wanted to use encryption the first time around).&lt;/li&gt;&lt;/ul&gt;First boots to pre-installed Ubuntu and installation of openSUSE Tumbleweed as the dual-boot option: &lt;/div&gt;&lt;div style=&quot;text-align: left;&quot; class=&quot;post-subheading&quot;&gt;&lt;div style=&quot;clear: both; text-align: center;&quot; class=&quot;separator&quot;&gt;&lt;/div&gt;&lt;div style=&quot;clear: both; text-align: center;&quot; class=&quot;separator&quot;&gt;&lt;/div&gt;&lt;div style=&quot;clear: both; text-align: center;&quot; class=&quot;separator&quot;&gt;&lt;/div&gt;&lt;div style=&quot;clear: both; text-align: center;&quot; class=&quot;separator&quot;&gt;&lt;/div&gt;&lt;div style=&quot;clear: both; text-align: center;&quot; class=&quot;separator&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot; class=&quot;post-subheading&quot;&gt; &lt;/div&gt;&lt;div style=&quot;text-align: left;&quot; class=&quot;post-subheading&quot;&gt;(if the embedded video is not shown, use a &lt;a href=&quot;https://timojyrinki.gitlab.io/hugo/post/2022-01-26-dell-xps-13-developer-edition-ubuntu-opensuse/dellxps13video.webm&quot;&gt;direct link&lt;/a&gt;) &lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot; class=&quot;post-subheading&quot;&gt; &lt;/div&gt;&lt;div style=&quot;text-align: left;&quot; class=&quot;post-subheading&quot;&gt;Some notes from the openSUSE installation:&lt;ul&gt;&lt;li&gt;openSUSE installer’s partition editor apparently does not support  resizing or automatically installing side-by-side another Linux  distribution, so I did part of the setup completely on my own.&lt;/li&gt;&lt;li&gt;Installation package download hanged a couple of times, only passed  when I entered a mirror manually. On my TW I’ve also noticed download  problems recently, there might be a problem with some mirror I need to  escalate.&lt;/li&gt;&lt;li&gt;The installer doesn’t very clearly show encryption status of the  target installation - it took me a couple of attempts before I even  noticed the small “encrypted” column and icon (well, very small, see  below), which also did not spell out the device mapper name but only the  main partition name. In the end it was going to do the right thing  right away and use my pre-created encrypted target partition as I  wanted, but it could be a better UX. Then again I was doing my very own  tweaks anyway.&lt;/li&gt;&lt;li&gt;Let’s not go to the details why I’m so old-fashioned and use ext4 :)&lt;/li&gt;&lt;li&gt;openSUSE’s installer does not work fine with HiDPI screen. Funnily the tty consoles seem to be fine and with a big font.&lt;/li&gt;&lt;li&gt;At the end of the video I install the two GNOME extensions I can’t  live without, Dash to Dock and Sound Input &amp;amp; Output Device Chooser.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;</description>
  87. <pubDate>Wed, 26 Jan 2022 12:51:00 +0000</pubDate>
  88. <author>noreply@blogger.com (TJ)</author>
  89. </item>
  90. <item>
  91. <title>Losca: Working and warming up cats</title>
  92. <guid isPermaLink="false">tag:blogger.com,1999:blog-31939153.post-7024444298640709527</guid>
  93. <link>https://losca.blogspot.com/2021/12/working-and-warming-up-cats.html</link>
  94. <description>&lt;h2 class=&quot;post-subheading&quot;&gt;How to disable internal keyboard/touchpad when a cat arrives&lt;/h2&gt;&lt;article class=&quot;blog-post&quot;&gt;        &lt;p&gt;I’m using an external keyboard (&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;1&lt;/b&gt;&lt;/span&gt;) and mouse (&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;2&lt;/b&gt;&lt;/span&gt;), but the  laptop lid is usually still open for better cooling. That means the  internal keyboard (&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;3&lt;/b&gt;&lt;/span&gt;) and touchpad (&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;4&lt;/b&gt;&lt;/span&gt;) – made of comfortable materials –  are open to be used by a cat searching for warmth (&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;7&lt;/b&gt;&lt;/span&gt;), in the obvious  “every time” case that a normal non-heated nest (&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;6&lt;/b&gt;&lt;/span&gt;) is not enough.&lt;/p&gt;&lt;div style=&quot;clear: both; text-align: center;&quot; class=&quot;separator&quot;&gt;&lt;a style=&quot;margin-left: 1em; margin-right: 1em;&quot; href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjNVHf4gKBafCOycb9ngwogjPRA8YCyUl89dGgv0Mnd4dX7wkDB-b7sDCqR65vC3blHsvSO1evqeLkklAVAx3ot65RBQAi-xiJ7seM18tw1GZjnr3dUWB74yRp0RFUJkTYY_uhojiVTBqiqOKayd-pxWfNsfylhmP2Bp4XXxvUAAc0GHMyFvi8=s1280&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjNVHf4gKBafCOycb9ngwogjPRA8YCyUl89dGgv0Mnd4dX7wkDB-b7sDCqR65vC3blHsvSO1evqeLkklAVAx3ot65RBQAi-xiJ7seM18tw1GZjnr3dUWB74yRp0RFUJkTYY_uhojiVTBqiqOKayd-pxWfNsfylhmP2Bp4XXxvUAAc0GHMyFvi8=w640-h525&quot; border=&quot;0&quot; width=&quot;640&quot; height=&quot;525&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;The problem is, everything goes chaotic at that point in the default  configuration. The solution is to have quick shortcuts in my Dash to  Dock (&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;8&lt;/b&gt;&lt;/span&gt;) to both disable (&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;10&lt;/b&gt;&lt;/span&gt;) and enable (&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;9&lt;/b&gt;&lt;/span&gt;) keyboard and touchpad at a  very rapid pace.&lt;/p&gt;&lt;p&gt;It is to be noted that I’m not disabling the touch screen (&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;5&lt;/b&gt;&lt;/span&gt;) by  default, because most of the time the cat is not leaning on it – there  is also the added benefit that if one forgets about the internal  keyboard and touchpad disabling and detaches the laptop from the USB-C  monitor (&lt;span style=&quot;color: red;&quot;&gt;&lt;b&gt;11&lt;/b&gt;&lt;/span&gt;), there’s the possibility of using  the touch screen and on-screen keyboard to type in the password and tap  on the keyboard/touchpad enabling shortcut button again. If also touch  screen was disabled, the only way would be to go back to an external  keyboard or reboot.&lt;/p&gt;&lt;p&gt;So here are the scripts. First, the disabling script (pardon my copy-paste use of certain string manipulation tools):&lt;/p&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;chroma&quot;&gt;&lt;code class=&quot;language-bash hljs&quot;&gt;dconf write /org/gnome/desktop/peripherals/touchpad/send-events &lt;span class=&quot;s2&quot;&gt;&lt;span class=&quot;hljs-string&quot;&gt;&quot;'disabled'&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;sudo killall evtest&lt;br /&gt;sudo evtest --grab &lt;span class=&quot;k&quot;&gt;$(&lt;/span&gt;sudo libinput list-devices &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; grep -A &lt;span class=&quot;m&quot;&gt;&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&lt;span class=&quot;hljs-string&quot;&gt;&quot;AT Translated Set 2 keyboard&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; tail -n &lt;span class=&quot;m&quot;&gt;&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; sed &lt;span class=&quot;s1&quot;&gt;&lt;span class=&quot;hljs-string&quot;&gt;'s/.*\/dev/\/dev/'&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;&amp;amp;&lt;/span&gt;&lt;br /&gt;sudo evtest --grab &lt;span class=&quot;k&quot;&gt;$(&lt;/span&gt;sudo libinput list-devices &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; grep -A &lt;span class=&quot;m&quot;&gt;&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&lt;span class=&quot;hljs-string&quot;&gt;&quot;Dell WMI&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; tail -n &lt;span class=&quot;m&quot;&gt;&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; sed &lt;span class=&quot;s1&quot;&gt;&lt;span class=&quot;hljs-string&quot;&gt;'s/.*\/dev/\/dev/'&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;&amp;amp;&lt;/span&gt;&lt;br /&gt;sudo evtest --grab &lt;span class=&quot;k&quot;&gt;$(&lt;/span&gt;sudo libinput list-devices &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; grep -A &lt;span class=&quot;m&quot;&gt;&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&lt;span class=&quot;hljs-string&quot;&gt;&quot;Power&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; grep Kernel &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; tail -n &lt;span class=&quot;m&quot;&gt;&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; sed &lt;span class=&quot;s1&quot;&gt;&lt;span class=&quot;hljs-string&quot;&gt;'s/.*\/dev/\/dev/'&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;&amp;amp;&lt;/span&gt;&lt;br /&gt;sudo evtest --grab &lt;span class=&quot;k&quot;&gt;$(&lt;/span&gt;sudo libinput list-devices &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; grep -A &lt;span class=&quot;m&quot;&gt;&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&lt;span class=&quot;hljs-string&quot;&gt;&quot;Power&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; grep Kernel &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; head -n &lt;span class=&quot;m&quot;&gt;&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; sed &lt;span class=&quot;s1&quot;&gt;&lt;span class=&quot;hljs-string&quot;&gt;'s/.*\/dev/\/dev/'&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;&amp;amp;&lt;/span&gt;&lt;br /&gt;sudo evtest --grab &lt;span class=&quot;k&quot;&gt;$(&lt;/span&gt;sudo libinput list-devices &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; grep -A &lt;span class=&quot;m&quot;&gt;&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&lt;span class=&quot;hljs-string&quot;&gt;&quot;Sleep&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; grep Kernel &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; tail -n &lt;span class=&quot;m&quot;&gt;&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; sed &lt;span class=&quot;s1&quot;&gt;&lt;span class=&quot;hljs-string&quot;&gt;'s/.*\/dev/\/dev/'&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;&amp;amp;&lt;/span&gt;&lt;br /&gt;sudo evtest --grab &lt;span class=&quot;k&quot;&gt;$(&lt;/span&gt;sudo libinput list-devices &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; grep -A &lt;span class=&quot;m&quot;&gt;&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&lt;span class=&quot;hljs-string&quot;&gt;&quot;HID&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; grep Kernel &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; head -n &lt;span class=&quot;m&quot;&gt;&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; sed &lt;span class=&quot;s1&quot;&gt;&lt;span class=&quot;hljs-string&quot;&gt;'s/.*\/dev/\/dev/'&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;&amp;amp;&lt;/span&gt;&lt;br /&gt;sudo evtest --grab &lt;span class=&quot;k&quot;&gt;$(&lt;/span&gt;sudo libinput list-devices &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; grep -A &lt;span class=&quot;m&quot;&gt;&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&lt;span class=&quot;hljs-string&quot;&gt;&quot;HID&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; tail -n &lt;span class=&quot;m&quot;&gt;&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; sed &lt;span class=&quot;s1&quot;&gt;&lt;span class=&quot;hljs-string&quot;&gt;'s/.*\/dev/\/dev/'&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;&amp;amp;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;c1&quot;&gt;&lt;span class=&quot;hljs-comment&quot;&gt;#sudo evtest --grab $(sudo libinput list-devices | grep -A 1 &quot;ELAN&quot; | tail -n 1 | sed 's/.*\/dev/\/dev/') # Touch screen&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And the associated ~/.local/share/applications/disable-internal-input.desktop:&lt;/p&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;chroma&quot;&gt;&lt;code class=&quot;language-bash hljs&quot;&gt;&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;Desktop Entry&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;nv&quot;&gt;Version&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;hljs-number&quot;&gt;1.0&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;nv&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;Disable internal input&lt;br /&gt;&lt;span class=&quot;nv&quot;&gt;GenericName&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;Disable internal input&lt;br /&gt;&lt;span class=&quot;nv&quot;&gt;Exec&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/bin/bash -c /home/timo/Asiakirjat/helpers/&lt;span class=&quot;hljs-built_in&quot;&gt;disable&lt;/span&gt;-internal-input.sh&lt;br /&gt;&lt;span class=&quot;nv&quot;&gt;Icon&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;yast-keyboard&lt;br /&gt;&lt;span class=&quot;nv&quot;&gt;Type&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;Application&lt;br /&gt;&lt;span class=&quot;nv&quot;&gt;Terminal&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;&lt;span class=&quot;hljs-literal&quot;&gt;false&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;nv&quot;&gt;Categories&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;Utility&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;Development&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Here’s the enabling script:&lt;/p&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;chroma&quot;&gt;&lt;code class=&quot;language-bash hljs&quot;&gt;dconf write /org/gnome/desktop/peripherals/touchpad/send-events &lt;span class=&quot;s2&quot;&gt;&lt;span class=&quot;hljs-string&quot;&gt;&quot;'enabled'&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;sudo killall evtest&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;and the desktop file:&lt;/p&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;chroma&quot;&gt;&lt;code class=&quot;language-bash hljs&quot;&gt;&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;Desktop Entry&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;nv&quot;&gt;Version&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;hljs-number&quot;&gt;1.0&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;nv&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;Enable internal input&lt;br /&gt;&lt;span class=&quot;nv&quot;&gt;GenericName&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;Enable internal input&lt;br /&gt;&lt;span class=&quot;nv&quot;&gt;Exec&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/bin/bash -c /home/timo/Asiakirjat/helpers/&lt;span class=&quot;hljs-built_in&quot;&gt;enable&lt;/span&gt;-internal-input.sh&lt;br /&gt;&lt;span class=&quot;nv&quot;&gt;Icon&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/home/timo/.local/share/icons/hicolor/scalable/apps/yast-keyboard-enable.png&lt;br /&gt;&lt;span class=&quot;nv&quot;&gt;Type&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;Application&lt;br /&gt;&lt;span class=&quot;nv&quot;&gt;Terminal&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;&lt;span class=&quot;hljs-literal&quot;&gt;false&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;nv&quot;&gt;Categories&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;Utility&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;Development&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;With these, if I sense a cat or am just proactive  enough, I press &lt;i&gt;Super+9&lt;/i&gt;. If I’m about to detach my laptop from the  monitor, I press &lt;i&gt;Super+8&lt;/i&gt;. If I forget the latter (usually this is the  case) and haven’t yet locked the screen, I just tap the enabling icon on  the touch screen.&lt;/p&gt;       &lt;/article&gt;</description>
  95. <pubDate>Tue, 14 Dec 2021 07:29:00 +0000</pubDate>
  96. <author>noreply@blogger.com (TJ)</author>
  97. </item>
  98. <item>
  99. <title>Ville-Pekka Vainio: How I made Firefox much faster with an Estonian ID card</title>
  100. <guid isPermaLink="false">http://vpv.kapsi.fi/blog/?p=187</guid>
  101. <link>https://vpv.kapsi.fi/blog/2021/10/how-i-made-firefox-much-faster-with-an-estonian-id-card/</link>
  102. <description>&lt;p&gt;I haven’t blogged in almost ten years, wow. This time I discovered something that I think deserves a blog post.&lt;br /&gt;I have an &lt;a href=&quot;https://e-resident.gov.ee/&quot;&gt;Estonian e-Residency&lt;/a&gt; because I speak Estonian and visit quite often (at least when there’s not a pandemic going on). My default Firefox profile is easily more than 10 years old. With the Estonian ID card inserted into a card reader, Firefox has always been very slow with that profile, pretty much unusable.&lt;/p&gt;
  103.  
  104.  
  105.  
  106. &lt;p&gt;With a fresh Firefox profile everything has worked very well, there’s a bit of slowness that I can see when browsing with the ID card inserted compared to when the card is not in the reader, but it’s not significant. Today I wanted to register as a reader at the &lt;a href=&quot;https://keskraamatukogu.ee/&quot;&gt;Tallinn Central Library&lt;/a&gt;, because they offer Estonian e-books that I would like to read. Having to open a fresh Firefox profile to browse a library web site irritated me enough that I started looking for a solution. I found the solution by reading the &lt;a href=&quot;https://wiki.archlinux.org/title/Common_Access_Card&quot;&gt;CAC page of the Arch wiki&lt;/a&gt;.&lt;/p&gt;
  107.  
  108.  
  109.  
  110. &lt;p&gt;I went to Edit &lt;code&gt;-&amp;gt;&lt;/code&gt; Settings &lt;code&gt;-&amp;gt;&lt;/code&gt; Privacy &amp;amp; Security &lt;code&gt;-&amp;gt;&lt;/code&gt; Security Devices. I saw that my old profile had both “OpenSC PKCS” and “OpenSC PKCS#11 Module” in there. The fresh profiles did not have the “OpenSC PKSC” entry. So I removed that one and now the browser works faster.&lt;/p&gt;
  111.  
  112.  
  113.  
  114. &lt;p&gt;I typically use Finnish on the desktop, just because I believe everyone should be able to use free and open source software in their native language. I’ll attach a screenshot, which is in Finnish. The entry marked with a square is the one I had to remove. I’m using Firefox 93 on Fedora 35.&lt;/p&gt;
  115.  
  116.  
  117.  
  118. &lt;p&gt; &lt;/p&gt;
  119.  
  120.  
  121.  
  122. &lt;figure class=&quot;wp-block-image size-medium is-resized&quot;&gt;&lt;a href=&quot;https://vpv.kapsi.fi/blog/wp-content/uploads/2021/10/security_devices.png&quot;&gt;&lt;img src=&quot;https://vpv.kapsi.fi/blog/wp-content/uploads/2021/10/security_devices-300x132.png&quot; alt=&quot;Screenshot of the security devices screen in Firefox.&quot; width=&quot;464&quot; class=&quot;wp-image-192&quot; height=&quot;204&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;</description>
  123. <pubDate>Thu, 28 Oct 2021 19:09:34 +0000</pubDate>
  124. </item>
  125. <item>
  126. <title>Losca: MotionPhoto / MicroVideo File Formats on Pixel Phones</title>
  127. <guid isPermaLink="false">tag:blogger.com,1999:blog-31939153.post-8073088443065920753</guid>
  128. <link>https://losca.blogspot.com/2021/03/motionphoto-microvideo-file-formats-on.html</link>
  129. <description>&lt;p&gt;Google Pixel phones support what they call ”Motion Photo”  which is essentially a photo with a short video clip attached to it.  They are quite nice since they bring the moment alive, especially as the  capturing of the video starts a small moment before the shutter button  is pressed. For most viewing programs they simply show as static JPEG  photos, but there is more to the files. &lt;/p&gt;&lt;article class=&quot;blog-post&quot;&gt;&lt;p&gt;I’d really love proper Shotwell support for these file formats, so I  posted a longish explanation with many of the details in this blog post  to a ticket there too. Examples of the newer format are linked there  too.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://gitlab.gnome.org/GNOME/shotwell/-/issues/233#note_1064700&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style=&quot;clear: both; text-align: left;&quot; class=&quot;separator&quot;&gt;&lt;a style=&quot;margin-left: 1em; margin-right: 1em;&quot; href=&quot;https://gitlab.gnome.org/GNOME/shotwell/-/issues/233&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://1.bp.blogspot.com/-813s7YZ_2Cs/YGRVpi_V9PI/AAAAAAAADZc/Nv7pTzlTuK4kaH5INxnj9LkHW_eV4cRXQCLcBGAsYHQ/w251-h320/format-info-shotwell-ticket_small.png&quot; alt=&quot;Info posted to Shotwell ticket&quot; border=&quot;0&quot; width=&quot;251&quot; height=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;There are actually two different formats, an old one that is already  obsolete, and a newer current format. The older ones are those that your  Pixel phone recorded as ”MVIMG_[datetime].jpg&quot;, and they have the  following meta-data:&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;hljs&quot;&gt;Xmp.GCamera.MicroVideo                       XmpText     1  1&lt;br /&gt;Xmp.GCamera.MicroVideoVersion                XmpText     1  1&lt;br /&gt;Xmp.GCamera.MicroVideoOffset                 XmpText     7  4022143&lt;br /&gt;Xmp.GCamera.MicroVideoPresentationTimestampUs XmpText     7  1331607&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The offset is actually from &lt;i&gt;the end of the file&lt;/i&gt;,  so one needs to calculate accordingly. But it is exact otherwise, so  one simply extract a file with that meta-data information:&lt;/p&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;chroma&quot;&gt;&lt;code class=&quot;language-bash hljs&quot;&gt;&lt;span class=&quot;cp&quot;&gt;&lt;span class=&quot;hljs-shebang&quot;&gt;#!/bin/bash&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;cp&quot;&gt;&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;&lt;span class=&quot;hljs-comment&quot;&gt;#&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;c1&quot;&gt;&lt;span class=&quot;hljs-comment&quot;&gt;# Extracts the microvideo from a MVIMG_*.jpg file&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;c1&quot;&gt;&lt;span class=&quot;hljs-comment&quot;&gt;# The offset is from the ending of the file, so calculate accordingly&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;nv&quot;&gt;offset&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;$(&lt;/span&gt;exiv2 -p X &lt;span class=&quot;s2&quot;&gt;&lt;span class=&quot;hljs-string&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;&lt;span class=&quot;hljs-string&quot;&gt;&lt;span class=&quot;hljs-variable&quot;&gt;$1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&lt;span class=&quot;hljs-string&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; grep MicroVideoOffset &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; sed &lt;span class=&quot;s1&quot;&gt;&lt;span class=&quot;hljs-string&quot;&gt;'s/.*\&quot;\(.*\)&quot;/\1/'&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;nv&quot;&gt;filesize&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;$(&lt;/span&gt;du --apparent-size --block&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&lt;span class=&quot;hljs-string&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;&lt;span class=&quot;hljs-string&quot;&gt;&lt;span class=&quot;hljs-variable&quot;&gt;$1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&lt;span class=&quot;hljs-string&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; sed &lt;span class=&quot;s1&quot;&gt;&lt;span class=&quot;hljs-string&quot;&gt;'s/^\([0-9]*\).*/\1/'&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;nv&quot;&gt;extractposition&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;$(&lt;/span&gt;expr &lt;span class=&quot;nv&quot;&gt;&lt;span class=&quot;hljs-variable&quot;&gt;$filesize&lt;/span&gt;&lt;/span&gt; - &lt;span class=&quot;nv&quot;&gt;&lt;span class=&quot;hljs-variable&quot;&gt;$offset&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;nb&quot;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;echo&lt;/span&gt;&lt;/span&gt; offset: &lt;span class=&quot;nv&quot;&gt;&lt;span class=&quot;hljs-variable&quot;&gt;$offset&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;nb&quot;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;echo&lt;/span&gt;&lt;/span&gt; filesize: &lt;span class=&quot;nv&quot;&gt;&lt;span class=&quot;hljs-variable&quot;&gt;$filesize&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;nb&quot;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;echo&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;extractposition&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;&lt;span class=&quot;hljs-variable&quot;&gt;$extractposition&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;dd &lt;span class=&quot;k&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&lt;span class=&quot;hljs-string&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;&lt;span class=&quot;hljs-string&quot;&gt;&lt;span class=&quot;hljs-variable&quot;&gt;$1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&lt;span class=&quot;hljs-string&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;skip&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;bs&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;&lt;span class=&quot;hljs-variable&quot;&gt;$extractposition&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;of&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&lt;span class=&quot;hljs-string&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;&lt;span class=&quot;hljs-string&quot;&gt;&lt;span class=&quot;hljs-variable&quot;&gt;$(&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hljs-string&quot;&gt;&lt;span class=&quot;hljs-variable&quot;&gt;basename -s .jpg &lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;&lt;span class=&quot;hljs-string&quot;&gt;&lt;span class=&quot;hljs-variable&quot;&gt;$1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;&lt;span class=&quot;hljs-string&quot;&gt;&lt;span class=&quot;hljs-variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&lt;span class=&quot;hljs-string&quot;&gt;.mp4&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The newer format is recorded in filenames called ”PXL_[datetime].MP.jpg”, and they have a _lot_ of additional metadata:&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;hljs ruby&quot;&gt;&lt;span class=&quot;hljs-constant&quot;&gt;Xmp&lt;/span&gt;.&lt;span class=&quot;hljs-constant&quot;&gt;GCamera&lt;/span&gt;.&lt;span class=&quot;hljs-constant&quot;&gt;MotionPhoto&lt;/span&gt;                      &lt;span class=&quot;hljs-constant&quot;&gt;XmpText&lt;/span&gt;     &lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;  &lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;hljs-constant&quot;&gt;Xmp&lt;/span&gt;.&lt;span class=&quot;hljs-constant&quot;&gt;GCamera&lt;/span&gt;.&lt;span class=&quot;hljs-constant&quot;&gt;MotionPhotoVersion&lt;/span&gt;               &lt;span class=&quot;hljs-constant&quot;&gt;XmpText&lt;/span&gt;     &lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;  &lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;hljs-constant&quot;&gt;Xmp&lt;/span&gt;.&lt;span class=&quot;hljs-constant&quot;&gt;GCamera&lt;/span&gt;.&lt;span class=&quot;hljs-constant&quot;&gt;MotionPhotoPresentationTimestampUs&lt;/span&gt; &lt;span class=&quot;hljs-constant&quot;&gt;XmpText&lt;/span&gt;     &lt;span class=&quot;hljs-number&quot;&gt;6&lt;/span&gt;  &lt;span class=&quot;hljs-number&quot;&gt;233320&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;hljs-constant&quot;&gt;Xmp&lt;/span&gt;.xmpNote.&lt;span class=&quot;hljs-constant&quot;&gt;HasExtendedXMP&lt;/span&gt;                   &lt;span class=&quot;hljs-constant&quot;&gt;XmpText&lt;/span&gt;    &lt;span class=&quot;hljs-number&quot;&gt;32&lt;/span&gt;  &lt;span class=&quot;hljs-constant&quot;&gt;E1F7505D2DD64EA6948D2047449F0FFA&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;hljs-constant&quot;&gt;Xmp&lt;/span&gt;.&lt;span class=&quot;hljs-constant&quot;&gt;Container&lt;/span&gt;.&lt;span class=&quot;hljs-constant&quot;&gt;Directory&lt;/span&gt;                      &lt;span class=&quot;hljs-constant&quot;&gt;XmpText&lt;/span&gt;     &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;  type=&lt;span class=&quot;hljs-string&quot;&gt;&quot;Seq&quot;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;hljs-constant&quot;&gt;Xmp&lt;/span&gt;.&lt;span class=&quot;hljs-constant&quot;&gt;Container&lt;/span&gt;.&lt;span class=&quot;hljs-constant&quot;&gt;Directory&lt;/span&gt;[&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;]                   &lt;span class=&quot;hljs-constant&quot;&gt;XmpText&lt;/span&gt;     &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;  type=&lt;span class=&quot;hljs-string&quot;&gt;&quot;Struct&quot;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;hljs-constant&quot;&gt;Xmp&lt;/span&gt;.&lt;span class=&quot;hljs-constant&quot;&gt;Container&lt;/span&gt;.&lt;span class=&quot;hljs-constant&quot;&gt;Directory&lt;/span&gt;[&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;]/&lt;span class=&quot;hljs-constant&quot;&gt;Container&lt;/span&gt;&lt;span class=&quot;hljs-symbol&quot;&gt;:Item&lt;/span&gt;    &lt;span class=&quot;hljs-constant&quot;&gt;XmpText&lt;/span&gt;     &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;  type=&lt;span class=&quot;hljs-string&quot;&gt;&quot;Struct&quot;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;hljs-constant&quot;&gt;Xmp&lt;/span&gt;.&lt;span class=&quot;hljs-constant&quot;&gt;Container&lt;/span&gt;.&lt;span class=&quot;hljs-constant&quot;&gt;Directory&lt;/span&gt;[&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;]/&lt;span class=&quot;hljs-constant&quot;&gt;Container&lt;/span&gt;&lt;span class=&quot;hljs-symbol&quot;&gt;:Item/Item&lt;/span&gt;&lt;span class=&quot;hljs-symbol&quot;&gt;:Mime&lt;/span&gt; &lt;span class=&quot;hljs-constant&quot;&gt;XmpText&lt;/span&gt;    &lt;span class=&quot;hljs-number&quot;&gt;10&lt;/span&gt;  image/jpeg&lt;br /&gt;&lt;span class=&quot;hljs-constant&quot;&gt;Xmp&lt;/span&gt;.&lt;span class=&quot;hljs-constant&quot;&gt;Container&lt;/span&gt;.&lt;span class=&quot;hljs-constant&quot;&gt;Directory&lt;/span&gt;[&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;]/&lt;span class=&quot;hljs-constant&quot;&gt;Container&lt;/span&gt;&lt;span class=&quot;hljs-symbol&quot;&gt;:Item/Item&lt;/span&gt;&lt;span class=&quot;hljs-symbol&quot;&gt;:Semantic&lt;/span&gt; &lt;span class=&quot;hljs-constant&quot;&gt;XmpText&lt;/span&gt;     &lt;span class=&quot;hljs-number&quot;&gt;7&lt;/span&gt;  &lt;span class=&quot;hljs-constant&quot;&gt;Primary&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;hljs-constant&quot;&gt;Xmp&lt;/span&gt;.&lt;span class=&quot;hljs-constant&quot;&gt;Container&lt;/span&gt;.&lt;span class=&quot;hljs-constant&quot;&gt;Directory&lt;/span&gt;[&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;]/&lt;span class=&quot;hljs-constant&quot;&gt;Container&lt;/span&gt;&lt;span class=&quot;hljs-symbol&quot;&gt;:Item/Item&lt;/span&gt;&lt;span class=&quot;hljs-symbol&quot;&gt;:Length&lt;/span&gt; &lt;span class=&quot;hljs-constant&quot;&gt;XmpText&lt;/span&gt;     &lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;  &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;hljs-constant&quot;&gt;Xmp&lt;/span&gt;.&lt;span class=&quot;hljs-constant&quot;&gt;Container&lt;/span&gt;.&lt;span class=&quot;hljs-constant&quot;&gt;Directory&lt;/span&gt;[&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;]/&lt;span class=&quot;hljs-constant&quot;&gt;Container&lt;/span&gt;&lt;span class=&quot;hljs-symbol&quot;&gt;:Item/Item&lt;/span&gt;&lt;span class=&quot;hljs-symbol&quot;&gt;:Padding&lt;/span&gt; &lt;span class=&quot;hljs-constant&quot;&gt;XmpText&lt;/span&gt;     &lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;  &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;hljs-constant&quot;&gt;Xmp&lt;/span&gt;.&lt;span class=&quot;hljs-constant&quot;&gt;Container&lt;/span&gt;.&lt;span class=&quot;hljs-constant&quot;&gt;Directory&lt;/span&gt;[&lt;span class=&quot;hljs-number&quot;&gt;2&lt;/span&gt;]                   &lt;span class=&quot;hljs-constant&quot;&gt;XmpText&lt;/span&gt;     &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;  type=&lt;span class=&quot;hljs-string&quot;&gt;&quot;Struct&quot;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;hljs-constant&quot;&gt;Xmp&lt;/span&gt;.&lt;span class=&quot;hljs-constant&quot;&gt;Container&lt;/span&gt;.&lt;span class=&quot;hljs-constant&quot;&gt;Directory&lt;/span&gt;[&lt;span class=&quot;hljs-number&quot;&gt;2&lt;/span&gt;]/&lt;span class=&quot;hljs-constant&quot;&gt;Container&lt;/span&gt;&lt;span class=&quot;hljs-symbol&quot;&gt;:Item&lt;/span&gt;    &lt;span class=&quot;hljs-constant&quot;&gt;XmpText&lt;/span&gt;     &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;  type=&lt;span class=&quot;hljs-string&quot;&gt;&quot;Struct&quot;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;hljs-constant&quot;&gt;Xmp&lt;/span&gt;.&lt;span class=&quot;hljs-constant&quot;&gt;Container&lt;/span&gt;.&lt;span class=&quot;hljs-constant&quot;&gt;Directory&lt;/span&gt;[&lt;span class=&quot;hljs-number&quot;&gt;2&lt;/span&gt;]/&lt;span class=&quot;hljs-constant&quot;&gt;Container&lt;/span&gt;&lt;span class=&quot;hljs-symbol&quot;&gt;:Item/Item&lt;/span&gt;&lt;span class=&quot;hljs-symbol&quot;&gt;:Mime&lt;/span&gt; &lt;span class=&quot;hljs-constant&quot;&gt;XmpText&lt;/span&gt;     &lt;span class=&quot;hljs-number&quot;&gt;9&lt;/span&gt;  video/mp4&lt;br /&gt;&lt;span class=&quot;hljs-constant&quot;&gt;Xmp&lt;/span&gt;.&lt;span class=&quot;hljs-constant&quot;&gt;Container&lt;/span&gt;.&lt;span class=&quot;hljs-constant&quot;&gt;Directory&lt;/span&gt;[&lt;span class=&quot;hljs-number&quot;&gt;2&lt;/span&gt;]/&lt;span class=&quot;hljs-constant&quot;&gt;Container&lt;/span&gt;&lt;span class=&quot;hljs-symbol&quot;&gt;:Item/Item&lt;/span&gt;&lt;span class=&quot;hljs-symbol&quot;&gt;:Semantic&lt;/span&gt; &lt;span class=&quot;hljs-constant&quot;&gt;XmpText&lt;/span&gt;    &lt;span class=&quot;hljs-number&quot;&gt;11&lt;/span&gt;  &lt;span class=&quot;hljs-constant&quot;&gt;MotionPhoto&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;hljs-constant&quot;&gt;Xmp&lt;/span&gt;.&lt;span class=&quot;hljs-constant&quot;&gt;Container&lt;/span&gt;.&lt;span class=&quot;hljs-constant&quot;&gt;Directory&lt;/span&gt;[&lt;span class=&quot;hljs-number&quot;&gt;2&lt;/span&gt;]/&lt;span class=&quot;hljs-constant&quot;&gt;Container&lt;/span&gt;&lt;span class=&quot;hljs-symbol&quot;&gt;:Item/Item&lt;/span&gt;&lt;span class=&quot;hljs-symbol&quot;&gt;:Length&lt;/span&gt; &lt;span class=&quot;hljs-constant&quot;&gt;XmpText&lt;/span&gt;     &lt;span class=&quot;hljs-number&quot;&gt;7&lt;/span&gt;  &lt;span class=&quot;hljs-number&quot;&gt;1679555&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;hljs-constant&quot;&gt;Xmp&lt;/span&gt;.&lt;span class=&quot;hljs-constant&quot;&gt;Container&lt;/span&gt;.&lt;span class=&quot;hljs-constant&quot;&gt;Directory&lt;/span&gt;[&lt;span class=&quot;hljs-number&quot;&gt;2&lt;/span&gt;]/&lt;span class=&quot;hljs-constant&quot;&gt;Container&lt;/span&gt;&lt;span class=&quot;hljs-symbol&quot;&gt;:Item/Item&lt;/span&gt;&lt;span class=&quot;hljs-symbol&quot;&gt;:Padding&lt;/span&gt; &lt;span class=&quot;hljs-constant&quot;&gt;XmpText&lt;/span&gt;     &lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;  &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Sounds like fun and lots of information. However I  didn’t see why the “length” in first item is 0 and I didn’t see how to  use the latter Length info. But I can use the mp4 headers to extract it:&lt;/p&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;chroma&quot;&gt;&lt;code class=&quot;language-bash hljs&quot;&gt;&lt;span class=&quot;cp&quot;&gt;&lt;span class=&quot;hljs-shebang&quot;&gt;#!/bin/bash&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;&lt;span class=&quot;hljs-comment&quot;&gt;#&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;c1&quot;&gt;&lt;span class=&quot;hljs-comment&quot;&gt;# Extracts the motion part of a MotionPhoto file PXL_*.MP.mp4&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;nv&quot;&gt;extractposition&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;$(&lt;/span&gt;grep --binary --byte-offset --only-matching --text \&lt;br /&gt;-P &lt;span class=&quot;s2&quot;&gt;&lt;span class=&quot;hljs-string&quot;&gt;&quot;\x00\x00\x00\x18\x66\x74\x79\x70\x6d\x70\x34\x32&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;&lt;span class=&quot;hljs-variable&quot;&gt;$1&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; sed &lt;span class=&quot;s1&quot;&gt;&lt;span class=&quot;hljs-string&quot;&gt;'s/^\([0-9]*\).*/\1/'&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;dd &lt;span class=&quot;k&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&lt;span class=&quot;hljs-string&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;&lt;span class=&quot;hljs-string&quot;&gt;&lt;span class=&quot;hljs-variable&quot;&gt;$1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&lt;span class=&quot;hljs-string&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;skip&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;bs&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;&lt;span class=&quot;hljs-variable&quot;&gt;$extractposition&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;of&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&lt;span class=&quot;hljs-string&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;&lt;span class=&quot;hljs-string&quot;&gt;&lt;span class=&quot;hljs-variable&quot;&gt;$(&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hljs-string&quot;&gt;&lt;span class=&quot;hljs-variable&quot;&gt;basename -s .jpg &lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;&lt;span class=&quot;hljs-string&quot;&gt;&lt;span class=&quot;hljs-variable&quot;&gt;$1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;&lt;span class=&quot;hljs-string&quot;&gt;&lt;span class=&quot;hljs-variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&lt;span class=&quot;hljs-string&quot;&gt;.mp4&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;b&gt;UPDATE: I wrote most of this blog post  earlier. When now actually getting to publishing it a week later, I see  the obvious ie the ”Length” is again simply the offset from the end of  the file so one could do the same less brute force approach as for  MVIMG. I’ll leave the above as is however for the ❤️ of binary grepping.&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;UPDATE 08/2021: Here's the script to extract also MP without brute force:&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;code class=&quot;language-bash hljs&quot;&gt;&lt;span class=&quot;cp&quot;&gt;&lt;span class=&quot;hljs-shebang&quot;&gt;#!/bin/bash&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;code class=&quot;language-bash hljs&quot;&gt;&lt;br /&gt;#&lt;br /&gt;# Extracts the motion part of a MotionPhoto file PXL_*.MP.mp4&lt;br /&gt;&lt;br /&gt;set -e&lt;br /&gt;# Brute force&lt;br /&gt;#extractposition=$(grep --binary --byte-offset --only-matching --text -P &quot;\x00\x00\x00\x18\x66\x74\x79\x70\x6d\x70\x34\x32&quot; $1 | sed 's/^\([0-9]*\).*/\1/')&lt;br /&gt;&lt;br /&gt;# Metadata&lt;br /&gt;offset=$(exiv2 -p x &quot;$1&quot; | grep Length | tail -n 1 |  rev | cut -d ' ' -f 1 | rev)&lt;br /&gt;echo offset: ${offset}&lt;br /&gt;re='^[0-9]+$'&lt;br /&gt;if ! [[ $offset =~ $re ]] ; then&lt;br /&gt;   echo &quot;offset not found&quot;&lt;br /&gt;   exit 1&lt;br /&gt;fi&lt;br /&gt;filesize=$(du --apparent-size --block=1 &quot;$1&quot; | sed 's/^\([0-9]*\).*/\1/')&lt;br /&gt;&lt;br /&gt;echo filesize: $filesize&lt;br /&gt;extractposition=$(expr $filesize - $offset)&lt;br /&gt;echo extractposition=$extractposition&lt;br /&gt;&lt;br /&gt;dd if=&quot;$1&quot; skip=1 bs=$extractposition of=&quot;$(basename -s .jpg $1).mp4&quot;&lt;br /&gt;&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;(cross-posted to my &lt;a href=&quot;https://timojyrinki.gitlab.io/hugo/post/2021-03-30-pixel-motionphoto-microvideo-file-formats/&quot;&gt;other blog&lt;/a&gt;)&lt;/span&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/article&gt;</description>
  130. <pubDate>Wed, 31 Mar 2021 11:06:00 +0000</pubDate>
  131. <author>noreply@blogger.com (TJ)</author>
  132. </item>
  133. <item>
  134. <title>Riku Voipio: This is the year not to fly</title>
  135. <guid isPermaLink="false">tag:blogger.com,1999:blog-997920555510565452.post-1077727399903521805</guid>
  136. <link>http://suihkulokki.blogspot.com/2020/03/this-is-year-not-to-fly.html</link>
  137. <description>&lt;img src=&quot;https://kos.to/plane.jpg&quot; width=&quot;488&quot; height=&quot;320&quot; /&gt; &lt;p&gt;If you have to choose one year when you won't fly, this year, 2020, is the one to choose. Why? Because CORSIA.&lt;/p&gt; &lt;h3&gt;What the heck is CORSIA?&lt;/h3&gt; &lt;p&gt;&lt;a href=&quot;https://www.icao.int/environmental-protection/CORSIA/Pages/default.aspx&quot;&gt;CORSIA&lt;/a&gt; is not a novel virus, but &quot;Carbon Offsetting and Reduction Scheme for International Aviation&quot;. In a nutshell, the aviation industry says they will freeze their co2 emissions from growing. Actually, aviation emissions are still going to grow. The airlines will just pay someone else to reduce emissions with the same amount aviation emissions rise - the &quot;Offsetting&quot; word in CORSIA. If that sounds like greenwashing, well it pretty much is. But that was expected. Getting every country and airline abroad CORSIA would not have been possible if the scheme would actually bite. So it's pretty much a joke. &lt;/p&gt; &lt;img src=&quot;https://kos.to/corsia.png&quot; width=&quot;488&quot; height=&quot;227&quot; /&gt;  &lt;h3&gt;What does it have to do with *this* Year?&lt;/h3&gt; &lt;p&gt;The first phase of CORSIA will start next year, so the emissions are frozen to year 2020 levels. Due to  certain recent events, lots of flights have already been cancelled - which means the reference year aviation emissions are already a lot less than the aviation industry was expecting. By avoiding flying this year, the aviation emissions are going to be frozen at an even lower level. This will increase cost of co2 offsetting for airlines, and the joke is going to be on them. &lt;/p&gt; &lt;p&gt;So consider skipping business travel and taking your holiday trip this year with something else than a plane. Wouldn't recommend a cruise ship, tho...&lt;/p&gt;</description>
  138. <pubDate>Wed, 11 Mar 2020 20:43:18 +0000</pubDate>
  139. <author>noreply@blogger.com (Riku Voipio)</author>
  140. </item>
  141. <item>
  142. <title>Viikon VALO: Jupyter Notebook</title>
  143. <guid isPermaLink="true">https://viikonvalo.fi/jupyter_notebook/</guid>
  144. <link>https://viikonvalo.fi/jupyter_notebook/</link>
  145. <description>Jupyter Notebook on datatieteilijöiden keskuudessa suosittu ohjelmointiympäristö, jolla luodaan tekstiä, kuvia ja ohjelmointikieltä yhdistäviä muistioita.
  146. Tietotekniikan maailmassa on noussut trendikkääksi termiksi datatiede, jolla pyritään tilastollisin menetelmin ja koneoppimisen keinoin löytämään tietomassasta poikkeamia, toistuvia malleja ja sääntöjä. Esimerkiksi datatieteilijä voi selvittää asiakkaan ostohistorian perusteella, mitä tuotetta kannattaa seuraavaksi suositella. Tämän tyylisiä analyyseja voi tehdä useilla eri välineillä, mutta suosituiksi työkaluiksi ovat tulleet Python-ohjelmointikieli ja sen kehitysympäristö Jupyter Notebook.
  147. Jupyter Notebook on selaimella käytettävä ohjelmointityökalu, jolla voi Pythonin lisäksi ohjelmoida useilla eri kielillä, kuten R:llä, Julialla tai Octavella, kunhan asentaa tarvittavat ytimet.</description>
  148. <pubDate>Sat, 08 Jun 2019 05:30:00 +0000</pubDate>
  149. </item>
  150. <item>
  151. <title>Riku Voipio: On the #uploadfilter problem</title>
  152. <guid isPermaLink="false">tag:blogger.com,1999:blog-997920555510565452.post-4202697587559438234</guid>
  153. <link>http://suihkulokki.blogspot.com/2019/03/on-uploadfilter-problem.html</link>
  154. <description>The copyright holders in europe are pushing hard mandate upload filters for internet. We have been here before - when they outlawed circumventing DRM. Both have roots in the same problem. The copyright holders look at computers and see bad things happening to their revenue. They come to IT companies and say &quot;FIX IT&quot;. It industry comes back and says.. &quot;We cant.. &lt;b&gt;making data impossible to copy is like trying to make water not wet!&lt;/b&gt;&quot;. But we fail at convincing copyright holders in how perfect DRM or upload filter is not possible. Then copyright holders go to law makers and ask them in turn to fix it. &lt;p&gt;We need to turn tables around. If they want something impossible, it should be upto them to implement it. &lt;/p&gt;&lt;p&gt;It is simply unfair to require each online provider to implement an AI to detect copyright infringement, manage a database of copyrighted content and pay for the costs running it all.. ..And getting slapped with a lawsuit anyways, since copyrighted content is still slipping through. &lt;/p&gt;&lt;p&gt;&lt;b&gt;The burden of implementing #uploadfilter should be on the copyright holder organizations&lt;/b&gt;. Implement as a SaaS. Youtube other web platforms call your API and pay $0.01 each time a pirate content is detected. On the other side, to ensure correctness of the filter, copyright holders have to pay any lost revenue, court costs and so on for each false positive. &lt;/p&gt;&lt;p&gt;Filtering uploads is still problematic. But it's now the copyright holders problem. Instead people blaming web companies for poor filters, it's the copyright holders now who have to answer to the public why their filters are rejecting content that doesn't belong to them. &lt;/p&gt;&lt;p&gt;&lt;/p&gt;</description>
  155. <pubDate>Sat, 23 Mar 2019 16:07:46 +0000</pubDate>
  156. <author>noreply@blogger.com (Riku Voipio)</author>
  157. </item>
  158. <item>
  159. <title>Riku Voipio: Linus Torvalds is wrong - PC no longer defines a platform</title>
  160. <guid isPermaLink="false">tag:blogger.com,1999:blog-997920555510565452.post-3110818024758392672</guid>
  161. <link>http://suihkulokki.blogspot.com/2019/02/linus-torvalds-is-wrong-pc-not-longer.html</link>
  162. <description>Hey, I can do these clickbait headlines too! Recently it has gotten  &lt;a href=&quot;https://www.theregister.co.uk/2019/02/23/linus_torvalds_arm_x86_servers/&quot;&gt;media's attention&lt;/a&gt; that Linus is &lt;a href=&quot;https://www.realworldtech.com/forum/?threadid=183440&amp;amp;curpostid=183486&quot;&gt;dismissive of ARM servers&lt;/a&gt;. The argument is roughly &quot;Developers use X86 PCs, cross-platform development is painful, and therefor devs will use X86 servers, unless they get ARM PCs to play with&quot;. &lt;p&gt;This ignores the reality where majority of developers do cross-platform development every day. They develop on &lt;a href=&quot;https://insights.stackoverflow.com/survey/2018/#technology-developers-primary-operating-systems&quot;&gt;Mac and Windows PC's&lt;/a&gt; and deploy on Linux servers or mobile phones. The two biggest Linux success stories, cloud and Android, are built on cross-platform development. Yes, cross-platform development sucks. But it's just one of the many things that sucks in software development.  &lt;/p&gt;&lt;p&gt;More importantly, the ship of &quot;local dev enviroment&quot; has long since sailed. Using Linus's other great innovation, git, developers push their code to a &lt;a href=&quot;https://github.com/&quot;&gt;Microsoft server&lt;/a&gt;, which triggers a Rube Goldberg machine of software build, container assembly, unit tests, deployment to test environment and so on - all in cloud servers.  &lt;/p&gt;&lt;p&gt;Yes, the ability to easily by a cheap whitebox PC from CompUSA was the important factor in making X86 dominate server space. But people get cheap servers from cloud now, and even that is getting out of fashion. Services like &lt;a href=&quot;https://aws.amazon.com/lambda/&quot;&gt;AWS lambda&lt;/a&gt; abstract the whole server away, and the instruction set becomes irrelevant. Which CPU and architecture will be used to run these &quot;serverless&quot; services is not going to depend on developers having Arm Linux Desktop PC's. &lt;/p&gt;&lt;p&gt;Of course there are still plenty of people like me who use Linux Desktop and run things locally. But in the big picture things are just going one way. The way where it gets easier to test things in your git-based CI loop rather than in local development setup. &lt;/p&gt;&lt;p&gt;But like Linus, I still do want to see an powerful PC-like Arm NUC or Laptop. One that could run mainline Linux kernel and offer a PC-like desktop experience. Not because ARM depends on it to succeed in server space (what it needs is out of scope for this blogpost) - but because PC's are useful in their own.&lt;/p&gt;</description>
  163. <pubDate>Tue, 26 Feb 2019 21:03:30 +0000</pubDate>
  164. <author>noreply@blogger.com (Riku Voipio)</author>
  165. </item>
  166. <item>
  167. <title>Viikon VALO: Power Ampache</title>
  168. <guid isPermaLink="true">https://viikonvalo.fi/powerampache/</guid>
  169. <link>https://viikonvalo.fi/powerampache/</link>
  170. <description>Power Ampache on musiikkia verkon yli Ampache-palvelimelta soittava Android-sovellus.
  171. Musiikin soittamisessa on viime vuosina tapahtunut voimakas siirtymä ostetuista cd-levyistä ja omalla laitteella olevista musiikkitiedostoista verkon suoratoistopalveluiden, kuten Spotifyn käyttöön. Kun mobiililaitteiden verkkoyhteyksistä on tullut nopeampia ja luotettavampia, eivät käyttäjät vaivaudu enää kopioimaan haluamaansa musiikkia mobililaitteelleen vaan kuuntelevat musiikin usein suoraan verkosta. Musiikkitiedostoja ei tarvitse myöskään synkronoida useamman laitteen välillä.
  172. Toisinaan on kuitenkin syitä, joiden takia itselle ostetut ja omalle laitteelle ladatut musiikkitiedostot ovat parempi vaihtoehto.</description>
  173. <pubDate>Sun, 28 Oct 2018 12:30:00 +0000</pubDate>
  174. </item>
  175. <item>
  176. <title>Viikon VALO: Nextcloud</title>
  177. <guid isPermaLink="true">https://viikonvalo.fi/nextcloud/</guid>
  178. <link>https://viikonvalo.fi/nextcloud/</link>
  179. <description>Nextcloud on pilvipalvelualusta, jonka voi asentaa omalle palvelimelle. Omassa ylläpidossa oma data on omassa hallinnassa.
  180. Kun on tarve käyttää pilveen synkronoitavia palveluita, kuten tiedostojen, yhteystietojen ja kalenterin synkronointia useamman laitteen välillä, muttei halua luottaa tietojaan suurten palveluntarjoajien haltuun, on itse omalla palvelimella ylläpidettävä Nextcloud hyvä vaihtoehto. Näkyvimpänä ominaisuutena Nextcloudissa on tiedostojen pilvitallennus, joka vastaa esimerkiksi Dropbox-, GoogleDrive- ja OneCloud-palveluita. Sen lisäksi Nextcloud voi kuitenkin sisältää myös monia muita sovelluksia, joita siihen on mahdollista asentaa sisäänrakennetun sovellusvalikoiman kautta.</description>
  181. <pubDate>Sat, 01 Sep 2018 12:02:01 +0000</pubDate>
  182. </item>
  183. <item>
  184. <title>Losca: Repeated prompts for SSH key passphrase after upgrading to Ubuntu 18.04 LTS?</title>
  185. <guid isPermaLink="false">tag:blogger.com,1999:blog-31939153.post-890521543510982914</guid>
  186. <link>https://losca.blogspot.com/2018/08/repeated-prompts-for-ssh-key-passphrase.html</link>
  187. <description>This was a tricky one (for me, anyway) so posting a note to help others.&lt;br /&gt;&lt;br /&gt;The problem was that after upgrading to Ubuntu 18.04 LTS from 16.04 LTS, I had trouble with my SSH agent. I was always being asked for the passphrase again and again, even if I had just used the key. This wouldn't have been a showstopper otherwise, but it made using virt-manager over SSH impossible because it was asking for the passphrase tens of times.&lt;br /&gt;&lt;br /&gt;I didn't find anything on the web, and I didn't find any legacy software or obsolete configs to remove to fix the problem. I only got a hint when I tried &lt;span&gt;ssh-add -l&lt;/span&gt;, with which I got the error message ”&lt;i&gt;error fetching identities: Invalid key length&lt;/i&gt;”. This lead me on the right track, since after a while I started suspecting my old keys in .ssh that I hadn't used for years. And right on: after I removed one id_dsa (!) key and one old RSA key from .ssh directory (with GNOME's Keyring app to be exact), &lt;span&gt;ssh-add -l&lt;/span&gt; started working and at the same time the familiar SSH agent behavior resumed and I was able to use my remote VMs fine too!&lt;br /&gt;&lt;br /&gt;Hope this helps.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ps. While at the topic, remember to upgrade your private keys' internal format to the new OpenSSH format from the ”worse than plaintext” format with the &lt;span&gt;-o&lt;/span&gt; option: &lt;a href=&quot;https://latacora.singles/2018/08/03/the-default-openssh.html&quot;&gt;blog post&lt;/a&gt; – tl; dr; &lt;span&gt;ssh-keygen -p -o -f id_rsa&lt;/span&gt; and retype your passphrase. &lt;/b&gt;</description>
  188. <pubDate>Tue, 28 Aug 2018 07:46:00 +0000</pubDate>
  189. <author>noreply@blogger.com (TJ)</author>
  190. </item>
  191. <item>
  192. <title>Viikon VALO: Joplin</title>
  193. <guid isPermaLink="true">https://viikonvalo.fi/joplin/</guid>
  194. <link>https://viikonvalo.fi/joplin/</link>
  195. <description>Vapaa ojelmisto muistiinpanojen ja tehtävälistojen tekemiseen, järjestämiseen muistikirjoiksi sekä synkronoimiseen eri laitteille.
  196. Joplinissa käyttäjä voi organisoida muistiinpanonsa muistikirjoiksi, joita voi järjestellä myös sisäkkäin. Yksittäiset muistiinpanot ovat tyypiltään joko pelkkiä muistiinpanoja taikka tehtäviä.
  197. Muistiinpano on Markdown-kielellä kirjoitettu teksti. Teksti voi sisältää muun muassa:
  198. otsikoita kappaleita listoja todo-listoja, joissa lista-alkion eteen tulee rastiruutu linkkejä kuvia  Tavallisten Markdown-ominaisuuksien lisäksi Joplin tukee LaTeX-muodossa kirjoitettua matematiikkaa. Muistiinpanoon voi lisäksi liittää liitetiedostoja, esimerkiksi kuvia tai muita liitteitä, sekä aihetunnisteita (tageja).</description>
  199. <pubDate>Sun, 26 Aug 2018 08:04:19 +0000</pubDate>
  200. </item>
  201. <item>
  202. <title>Losca: Converting an existing installation to LUKS using luksipc - 2018 notes</title>
  203. <guid isPermaLink="false">tag:blogger.com,1999:blog-31939153.post-7802255375998902821</guid>
  204. <link>https://losca.blogspot.com/2018/05/converting-existing-installation-to.html</link>
  205. <description>Time for a laptop upgrade. Encryption was still not the default for the new Dell XPS 13 Developer Edition (9370) that shipped with Ubuntu 16.04 LTS, so I followed &lt;a href=&quot;http://losca.blogspot.fi/2015/11/converting-existing-installation-to.html&quot;&gt;my own notes&lt;/a&gt; from 3 years ago together with the &lt;a href=&quot;https://www.johannes-bauer.com/linux/luksipc/&quot;&gt;official documentation&lt;/a&gt; to convert the unencrypted OEM Ubuntu installation to LUKS during the weekend. This only took under 1h altogether.&lt;br /&gt;&lt;br /&gt;On this new laptop model, EFI boot was already in use, Secure Boot was enabled and the SSD had GPT from the beginning. The only thing I wanted to change thus was the / to be encrypted.&lt;br /&gt;&lt;br /&gt;Some notes for 2018 to clarify what is needed and what is not needed:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Before luksipc, remember to resize existing partitions to have 10 MB of free space at the end of the / partition, and also create a new partition of eg 1 GB size partition for /boot.&lt;/li&gt;&lt;li&gt;To get the code and compile luksipc on Ubuntu 16.04.4 LTS live USB, just &lt;span&gt;apt install git build-essential&lt;/span&gt; is needed. cryptsetup package is already installed.&lt;/li&gt;&lt;li&gt;After luksipc finishes and you've added your own passphrase and removed the initial key (slot 0), it's useful to &lt;span&gt;cryptsetup luksOpen&lt;/span&gt; it and mount it still under the live session - however, when using ext4, the mounting fails due to a size mismatch in ext4 metadata! This is simple to correct: &lt;span&gt;sudo resize2fs /dev/mapper/root&lt;/span&gt;. Nothing else is needed.&lt;/li&gt;&lt;li&gt;I mounted both the newly encrypted volume (to /mnt) and the new /boot volume (to /mnt2 which I created), and moved /boot/* from the former to latter.&lt;/li&gt;&lt;li&gt;I edited /etc/fstab of the encrypted volume to add the /boot partition&lt;/li&gt;&lt;li&gt;Mounted as following in /mnt:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span&gt;mount -o bind /dev dev&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;mount -o bind /sys sys&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;mount -t proc proc proc&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Then:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span&gt;chroot /mnt&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;mount -a&lt;/span&gt; # (to mount /boot and /boot/efi)&lt;/li&gt;&lt;li&gt;Edited files /etc/crypttab (added one line: root UUID none luks) and /etc/grub/default (I copied over my overkill configuration that specifies all of cryptopts and cryptdevice some of which may be obsolete, but at least one of them and root=/dev/mapper/root is probably needed). &lt;/li&gt;&lt;li&gt;Ran &lt;span&gt;grub-install ; update-grub ; mkinitramfs -k all -c&lt;/span&gt; (notably no other parameters were needed)&lt;span&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Rebooted.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;What I did not need to do:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Modify anything in /etc/initramfs-tools.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;If the passphrase input shows on your next boot, but your correct passphrase isn't accepted, it's likely that the initramfs wasn't properly updated yet. I first forgot to run the mkinitramfs command and faced this.&lt;br /&gt;</description>
  206. <pubDate>Mon, 07 May 2018 11:08:00 +0000</pubDate>
  207. <author>noreply@blogger.com (TJ)</author>
  208. </item>
  209. <item>
  210. <title>Riku Voipio: Making sense of /proc/cpuinfo on ARM</title>
  211. <guid isPermaLink="false">tag:blogger.com,1999:blog-997920555510565452.post-7520974196815490000</guid>
  212. <link>http://suihkulokki.blogspot.com/2018/02/making-sense-of-proccpuinfo-on-arm.html</link>
  213. <description>Ever stared at output of /proc/cpuinfo and wondered what the CPU is? &lt;pre&gt;&lt;br /&gt;...&lt;br /&gt;processor       : 7&lt;br /&gt;BogoMIPS        : 2.40&lt;br /&gt;Features        : fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid&lt;br /&gt;CPU implementer : 0x41&lt;br /&gt;CPU architecture: 8&lt;br /&gt;CPU variant     : 0x0&lt;br /&gt;CPU part        : 0xd03&lt;br /&gt;CPU revision    : 3&lt;br /&gt;&lt;/pre&gt;Or maybe like: &lt;pre&gt;&lt;br /&gt;$ cat /proc/cpuinfo&lt;br /&gt;processor       : 0&lt;br /&gt;model name      : ARMv7 Processor rev 2 (v7l)&lt;br /&gt;BogoMIPS        : 50.00&lt;br /&gt;Features        : half thumb fastmult vfp edsp thumbee vfpv3 tls idiva idivt vfpd32 lpae&lt;br /&gt;CPU implementer : 0x56&lt;br /&gt;CPU architecture: 7&lt;br /&gt;CPU variant     : 0x2&lt;br /&gt;CPU part        : 0x584&lt;br /&gt;CPU revision    : 2&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;The bits &quot;CPU implementer&quot; and &quot;CPU part&quot; could be mapped to human understandable strings. But the Kernel developers are heavily against the idea. Therefor, to the next idea: Parse in userspace. Turns out, there is a common tool almost everyone has installed does similar stuff. &lt;a href=&quot;https://manpages.debian.org/unstable/util-linux/lscpu.1.en.html&quot;&gt;lscpu(1)&lt;/a&gt; from util-linux. So I proposed a patch to do &lt;a href=&quot;https://github.com/karelzak/util-linux/pull/564&quot;&gt;ID mapping&lt;/a&gt; on arm/arm64 to util-linux, and it was accepted! So using lscpu from util-linux 2.32 (hopefully to be released soon) the above two systems look like: &lt;pre&gt;&lt;br /&gt;Architecture:        aarch64&lt;br /&gt;Byte Order:          Little Endian&lt;br /&gt;CPU(s):              8&lt;br /&gt;On-line CPU(s) list: 0-7&lt;br /&gt;Thread(s) per core:  1&lt;br /&gt;Core(s) per socket:  4&lt;br /&gt;Socket(s):           2&lt;br /&gt;NUMA node(s):        1&lt;br /&gt;Vendor ID:           ARM&lt;br /&gt;Model:               3&lt;br /&gt;Model name:          Cortex-A53&lt;br /&gt;Stepping:            r0p3&lt;br /&gt;CPU max MHz:         1200.0000&lt;br /&gt;CPU min MHz:         208.0000&lt;br /&gt;BogoMIPS:            2.40&lt;br /&gt;L1d cache:           unknown size&lt;br /&gt;L1i cache:           unknown size&lt;br /&gt;L2 cache:            unknown size&lt;br /&gt;NUMA node0 CPU(s):   0-7&lt;br /&gt;Flags:               fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid&lt;br /&gt;&lt;/pre&gt;And &lt;pre&gt;&lt;br /&gt;$ lscpu&lt;br /&gt;Architecture:        armv7l&lt;br /&gt;Byte Order:          Little Endian&lt;br /&gt;CPU(s):              4&lt;br /&gt;On-line CPU(s) list: 0-3&lt;br /&gt;Thread(s) per core:  1&lt;br /&gt;Core(s) per socket:  4&lt;br /&gt;Socket(s):           1&lt;br /&gt;Vendor ID:           Marvell&lt;br /&gt;Model:               2&lt;br /&gt;Model name:          PJ4B-MP&lt;br /&gt;Stepping:            0x2&lt;br /&gt;CPU max MHz:         1333.0000&lt;br /&gt;CPU min MHz:         666.5000&lt;br /&gt;BogoMIPS:            50.00&lt;br /&gt;Flags:               half thumb fastmult vfp edsp thumbee vfpv3 tls idiva idivt vfpd32 lpae&lt;br /&gt;&lt;/pre&gt;As we can see, lscpu is quite versatile and can show more information than just what is available in cpuinfo.</description>
  214. <pubDate>Tue, 13 Feb 2018 19:18:06 +0000</pubDate>
  215. <author>noreply@blogger.com (Riku Voipio)</author>
  216. </item>
  217. <item>
  218. <title>Riku Voipio: Cross-compiling with debian stretch</title>
  219. <guid isPermaLink="false">tag:blogger.com,1999:blog-997920555510565452.post-4226478412660458507</guid>
  220. <link>http://suihkulokki.blogspot.com/2017/06/cross-compiling-with-debian-stretch.html</link>
  221. <description>Debian stretch comes with cross-compiler packages for selected architectures:  &lt;pre&gt; $ apt-cache search cross-build-essential&lt;br /&gt;crossbuild-essential-arm64 - Informational list of cross-build-essential packages for&lt;br /&gt;crossbuild-essential-armel - ...&lt;br /&gt;crossbuild-essential-armhf - ...&lt;br /&gt;crossbuild-essential-mipsel - ...&lt;br /&gt;crossbuild-essential-powerpc - ...&lt;br /&gt;crossbuild-essential-ppc64el - ...&lt;br /&gt;⏎                                                                                       &lt;br /&gt;&lt;/pre&gt; Lets have a quick exact steps guide. But first - while you can use do all this in your desktop PC rootfs, it is more wise to contain yourself. Fortunately, Debian comes with a container tool out of box:  &lt;pre&gt;&lt;br /&gt;sudo debootstrap stretch /var/lib/container/stretch http://deb.debian.org/debian&lt;br /&gt;echo &quot;strech_cross&quot; | sudo tee /var/lib/container/stretch/etc/debian_chroot&lt;br /&gt;sudo systemd-nspawn -D /var/lib/container/stretch&lt;br /&gt;&lt;/pre&gt; Then we set up cross-building enviroment for arm64 inside the container:  &lt;pre&gt;&lt;br /&gt;# Tell dpkg we can install arm64&lt;br /&gt;dpkg --add-architecture arm64&lt;br /&gt;# Add src line to make &quot;apt-get source&quot; work&lt;br /&gt;echo &quot;deb-src http://deb.debian.org/debian stretch main&quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;apt-get update&lt;br /&gt;# Install cross-compiler and other essential build tools&lt;br /&gt;apt install --no-install-recommends build-essential crossbuild-essential-arm64&lt;br /&gt;&lt;/pre&gt; Now we have a nice build enviroment,  lets choose something more complicated than the usual kernel/BusyBox to cross-build, qemu:  &lt;pre&gt;&lt;br /&gt;# Get qemu sources from debian&lt;br /&gt;apt-get source qemu&lt;br /&gt;cd qemu-*&lt;br /&gt;# New in stretch: build-dep works in unpacked source tree &lt;br /&gt;apt-get build-dep -a arm64 .&lt;br /&gt;# Cross-build Qemu for arm64&lt;br /&gt;dpkg-buildpackage -aarm64 -j6 -b&lt;br /&gt;&lt;/pre&gt; Now that works perfectly for Qemu. For other packages, challenges may appear. For example you may have to se &quot;nocheck&quot; flag to skip build-time unit tests. Or some of the build-dependencies may not be multiarch-enabled. So work continues :)</description>
  222. <pubDate>Sat, 24 Jun 2017 16:03:40 +0000</pubDate>
  223. <author>noreply@blogger.com (Riku Voipio)</author>
  224. </item>
  225. <item>
  226. <title>Viikon VALO: ReText</title>
  227. <guid isPermaLink="true">https://viikonvalo.fi/retext/</guid>
  228. <link>https://viikonvalo.fi/retext/</link>
  229. <description>ReText on yksinkertainen, mutta tehokas, työkalu tekstien ja muistiinpanojen kirjoittamiseen Markdown-, reStructuredText- tai Textile-merkintäkielillä.
  230. Markdown, reStructuredText ja Textile ovat merkintäkieliä, joilla muotoiluja sisältäviä tekstidokumentteja voidaan kirjoittaa puhtaasti tekstimuotoisena. Valmis dokumentti käännetään yleensä näytettäväksi johonkin toiseen muotoon, kuten html- tai pdf-tiedostoiksi. Näissä kielissä muotoilut merkitään mahdollisimman luonnollisilla tavoin, jolloin myös merkintäkielinen alkuperäinen teksti pysyy helposti luettavana. Esimerkiksi luettelot merkitään rivin aloittavilla &quot;-&quot;-merkeillä.
  231. ReText on sovellus, jolla näillä kielillä kirjoitettujen dokumenttien muokkaaminen on helppoa.</description>
  232. <pubDate>Sun, 01 Jan 2017 14:00:00 +0000</pubDate>
  233. </item>
  234. <item>
  235. <title>Jouni Roivas: QGraphicsWidget</title>
  236. <guid isPermaLink="false">tag:blogger.com,1999:blog-31063096.post-4995488537144050308</guid>
  237. <link>http://osstalk.blogspot.com/2013/03/usually-its-easy-to-get-things-working.html</link>
  238. <description>Usually it's easy to get things working with Qt (&lt;a href=&quot;http://qt-project.org&quot;&gt;http://qt-project.org&lt;/a&gt;), but recently I encoutered an issue when trying to implement simple component derived from QGraphicsWidget. My initial idea was to use QGraphicsItem, so I made this little class:  &lt;pre&gt;&lt;br /&gt;class TestItem : public QGraphicsItem&lt;br /&gt;{&lt;br /&gt;public:&lt;br /&gt;        TestItem(QGraphicsItem *parent=0) : QGraphicsItem(parent) {}&lt;br /&gt;        void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);&lt;br /&gt;        virtual QRectF boundingRect () const;&lt;br /&gt;&lt;br /&gt;protected:&lt;br /&gt;        virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);&lt;br /&gt;        virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;void TestItem::mousePressEvent(QGraphicsSceneMouseEvent *event)&lt;br /&gt;{&lt;br /&gt;        qDebug() &amp;lt;&amp;lt; __PRETTY_FUNCTION__ &amp;lt;&amp;lt; &quot;press&quot;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void TestItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)&lt;br /&gt;{&lt;br /&gt;        qDebug() &amp;lt;&amp;lt; __PRETTY_FUNCTION__ &amp;lt;&amp;lt;  &quot;release&quot;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void TestItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)&lt;br /&gt;{&lt;br /&gt;        Q_UNUSED(option)&lt;br /&gt;        Q_UNUSED(widget)&lt;br /&gt;        painter-&amp;gt;fillRect(boundingRect(), QColor(255,0,0,100));&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;QRectF TestItem::boundingRect () const&lt;br /&gt;{&lt;br /&gt;        return QRectF(-100, -40, 100, 40);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt; Everything was working like expected, but in order to use a QGraphicsLayout, I wanted to derive that class from QGraphicsWidget. The naive way was to make minimal changes:  &lt;pre&gt;&lt;br /&gt;class TestWid : public QGraphicsWidget&lt;br /&gt;{&lt;br /&gt;        Q_OBJECT&lt;br /&gt;public:&lt;br /&gt;        TestWid(QGraphicsItem *parent=0) : QGraphicsWidget(parent) { }&lt;br /&gt;        void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);&lt;br /&gt;        virtual QRectF boundingRect () const;&lt;br /&gt;&lt;br /&gt;protected:&lt;br /&gt;        virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);&lt;br /&gt;        virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;void TestWid::mousePressEvent(QGraphicsSceneMouseEvent *event)&lt;br /&gt;{&lt;br /&gt;        qDebug() &amp;lt;&amp;lt; __PRETTY_FUNCTION__ &amp;lt;&amp;lt;  &quot;press&quot;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void TestWid::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)&lt;br /&gt;{&lt;br /&gt;        qDebug() &amp;lt;&amp;lt; __PRETTY_FUNCTION__ &amp;lt;&amp;lt;  &quot;release&quot;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void TestWid::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)&lt;br /&gt;{&lt;br /&gt;        Q_UNUSED(option)&lt;br /&gt;        Q_UNUSED(widget)&lt;br /&gt;        painter-&amp;gt;fillRect(boundingRect(), QColor(0,0,255,100));&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;QRectF TestWid::boundingRect () const&lt;br /&gt;{&lt;br /&gt;        return QRectF(-100, -40, 100, 40);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;Pretty straightforward, isn't it? It showed and painted things like expected, but I didn't get any mouse events. Wait what? &lt;/p&gt; &lt;p&gt;I spent hours just trying out things and googling this problem. I knew I had this very same issue earlier but didn't remember how I solved it. Until I figured out a very crucial thing, in case of QGraphicsWidget you must &lt;b&gt;NOT&lt;/b&gt; implement boundingRect(). Instead use setGeometry for the object. &lt;/p&gt; &lt;p&gt;So the needed changes was to remote the boundingRect() method, and to call setGeometry in TestWid constructor: &lt;/p&gt;  &lt;pre&gt;setGeometry(QRectF(-100, -40, 100, 40));&lt;/pre&gt; &lt;p&gt;After these very tiny little changes I finally got everthing working. That all thing made me really frustrated. Solving this issue didn't cause good feeling, I was just feeling stupid. Sometimes programming is a great waste of time.&lt;/p&gt;</description>
  239. <pubDate>Sat, 30 Mar 2013 13:57:01 +0000</pubDate>
  240. <author>noreply@blogger.com (Jouni Roivas)</author>
  241. </item>
  242. <item>
  243. <title>Jouni Roivas: Adventures in Ubuntu land with Ivy Bridge</title>
  244. <guid isPermaLink="false">tag:blogger.com,1999:blog-31063096.post-7718605479664373682</guid>
  245. <link>http://osstalk.blogspot.com/2012/08/adventures-in-ubuntu-land-with-ivy.html</link>
  246. <description>Recently I got a Intel Ivy Bridge based laptop. Generally I'm quite satisfied with it. Of course installed latest Ubuntu on it. First problem was EFI boot and BIOS had no other options. Best way to work around it was to use EFI aware grub2. I wanted to keep the preinstalled Windows 7 there for couple of things, so needed dual boot.&lt;br /&gt;&lt;br /&gt;After digging around this German links was most relevant and helpful: &lt;a href=&quot;http://thinkpad-forum.de/threads/123262-EFI-Grub2-Multiboot-HowTo&quot;&gt;http://thinkpad-forum.de/threads/123262-EFI-Grub2-Multiboot-HowTo&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;In the end all I needed to do was to install Grub2 to EFI boot parition (/dev/sda1 on my case) and create the grub.efi binary under that. Then just copy /boot/grub/grub.cfg under it as well. On BIOS set up new boot label to boot \EFI\grub\grub.efi &lt;br /&gt;&lt;br /&gt;After using the system couple of days found out random crashes. The system totally hanged. Finally traced the problem to HD4000 graphics driver: &lt;a href=&quot;http://partiallysanedeveloper.blogspot.fi/2012/05/ivy-bridge-hd4000-linux-freeze.html&quot;&gt;http://partiallysanedeveloper.blogspot.fi/2012/05/ivy-bridge-hd4000-linux-freeze.html&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;Needed to update Kernel. But which one? After multiple tries, I took the &quot;latest&quot; and &quot;shiniest&quot; one: &lt;a href=&quot;http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.4-precise/&quot;&gt;http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.4-precise/&lt;/a&gt;. With that kernel I got almost all the functionality and stability I needed. &lt;br /&gt;&lt;br /&gt;However one BIG problem: headphones. I got sound normally from the speakers but after plugging in the headphones I got nothing. This problem seems to be on almost all the kernels I tried. Then I somehow figured out a important thing related to this. When I boot with headphone plugged in I got no sound from them. When I boot WITHOUT headphones plugged then they work just fine. Of course I debugged this problem all the time with the headphones plugged in and newer noticed this could be some weird detection problem. Since I kind of found solution for this I didn't bother to google it down. And of course Canonical does not provide support for unsupported kernels. If I remember correctly with the original Ubuntu 12.04 kernel this worked, but the HD4000 problem is on my scale bigger one than remember to boot without plugging anything to the 3.5&quot; jack.... &lt;br /&gt;&lt;br /&gt;Of course my hopes are on 12.10 and don't want to dig it deeper, just wanted to inform you about this one.</description>
  247. <pubDate>Fri, 31 Aug 2012 19:57:17 +0000</pubDate>
  248. <author>noreply@blogger.com (Jouni Roivas)</author>
  249. </item>
  250. <item>
  251. <title>Ville-Pekka Vainio: SSD TRIM/discard on Fedora 17 with encypted partitions</title>
  252. <guid isPermaLink="false">http://vpv.kapsi.fi/blog/?p=147</guid>
  253. <link>https://vpv.kapsi.fi/blog/2012/07/ssd-trimdiscard-on-fedora-17-with-encypted-partitions/</link>
  254. <description>&lt;p&gt;I have not blogged for a while, now that I am on summer holiday and got a new laptop I finally have something to blog about. I got a &lt;a href=&quot;http://en.wikipedia.org/wiki/ThinkPad_T_Series&quot;&gt;Thinkpad T430&lt;/a&gt; and installed a &lt;a href=&quot;http://www.anandtech.com/show/4863/the-samsung-ssd-830-review&quot;&gt;Samsung SSD 830&lt;/a&gt; myself. The 830 is not actually the best choice for a Linux user because  you can only download firmware updates with a Windows tool. The tool does let you make a bootable FreeDOS USB disk with which you can apply the update, so you can use a Windows system to download the update and apply it just fine on a Linux system. The reason I got this SSD is that it is 7 mm in height and fits into the T430 without removing any spacers.&lt;/p&gt;
  255. &lt;p&gt;I installed Fedora 17 on the laptop and selected drive encryption in the Anaconda installer. I used ext4 and did not use LVM, I do not think it would be of much use on a laptop. After the installation I discovered that Fedora 17 does not enable SSD &lt;a href=&quot;http://en.wikipedia.org/wiki/TRIM&quot;&gt;TRIM&lt;/a&gt;/discard automatically. That is probably a good default, apparently all SSDs do not support it. When you have ext4 partitions encrypted with &lt;a href=&quot;http://en.wikipedia.org/wiki/LUKS&quot;&gt;LUKS&lt;/a&gt; as Anaconda does it, you need to change two files and regenerate your &lt;a href=&quot;http://en.wikipedia.org/wiki/Initrd&quot;&gt;initramfs&lt;/a&gt; to enable TRIM.&lt;/p&gt;
  256. &lt;p&gt;First, edit your &lt;tt&gt;/etc/fstab&lt;/tt&gt; and add &lt;tt&gt;discard&lt;/tt&gt; to each ext4 mount. Here is an example of my root mount:&lt;br /&gt;
  257. &lt;code&gt;/dev/mapper/luks-secret-id-here /                       ext4    defaults,discard        1 1&lt;/code&gt;&lt;/p&gt;
  258. &lt;p&gt;Second, edit your &lt;tt&gt;/etc/crypttab&lt;/tt&gt; and add &lt;tt&gt;allow-discards&lt;/tt&gt; to each line to allow the &lt;a href=&quot;http://en.wikipedia.org/wiki/Dm-crypt&quot;&gt;dmcrypt&lt;/a&gt; layer to pass TRIM requests to the disk. Here is an example:&lt;br /&gt;
  259. &lt;code&gt;luks-secret-id-here UUID=uuid-here none allow-discards&lt;/code&gt;&lt;/p&gt;
  260. &lt;p&gt;You need at least &lt;a href=&quot;https://admin.fedoraproject.org/updates/FEDORA-2012-9847/dracut-018-78.git20120622.fc17&quot;&gt;dracut-018-78.git20120622.fc17&lt;/a&gt; for this to work, which you should already have on an up-to-date Fedora 17.&lt;/p&gt;
  261. &lt;p&gt;Third, regenerate your initramfs by doing &lt;tt&gt;dracut -f&lt;/tt&gt;. You may want to take a backup of the old initramfs file in &lt;tt&gt;/boot&lt;/tt&gt; but then again, real hackers do not make backups &lt;img src=&quot;https://s.w.org/images/core/emoji/14.0.0/72x72/1f609.png&quot; alt=&quot;😉&quot; style=&quot;height: 1em;&quot; class=&quot;wp-smiley&quot; /&gt; .&lt;/p&gt;
  262. &lt;p&gt;Fourth, reboot and check with &lt;tt&gt;cryptsetup status luks-secret-id-here&lt;/tt&gt; and &lt;tt&gt;mount&lt;/tt&gt; that your file systems actually use discard now.&lt;/p&gt;
  263. &lt;p&gt;&lt;a href=&quot;http://www.truecrypt.org/docs/?s=trim-operation&quot;&gt;Please note that apparently enabling TRIM on encrypted file systems may reveal unencrypted data.&lt;/a&gt;&lt;/p&gt;</description>
  264. <pubDate>Wed, 04 Jul 2012 18:14:43 +0000</pubDate>
  265. </item>
  266. <item>
  267. <title>Ville-Pekka Vainio: Getting Hauppauge WinTV-Nova-TD-500 working with VDR 1.6.0 and Fedora 16</title>
  268. <guid isPermaLink="false">http://vpv.kapsi.fi/blog/?p=142</guid>
  269. <link>https://vpv.kapsi.fi/blog/2011/10/hauppauge-wintv-nova-td-500-vdr-16/</link>
  270. <description>&lt;p&gt;The &lt;a href=&quot;http://linuxtv.org/wiki/index.php/Hauppauge_WinTV-NOVA-T-500#WinTV-NOVA-TD-500&quot; title=&quot;Hauppauge WinTV-Nova-TD-500&quot;&gt;Hauppauge WinTV-Nova-TD-500&lt;/a&gt; is a nice dual tuner DVB-T PCI card (well, actually it’s a PCI-USB thing and the system sees it as a USB device). It works out-of-the-box with the upcoming Fedora 16. It needs a firmware, but that’s available by default in the linux-firmware package.&lt;/p&gt;
  271. &lt;p&gt;However, when using the Nova-TD-500 with &lt;a href=&quot;http://www.tvdr.de/&quot; title=&quot;VDR&quot;&gt;VDR&lt;/a&gt; a couple of settings need to be tweaked or the signal will eventually disappear for some reason. The logs (typically /var/log/messages in Fedora) will have something like this in them:&lt;br /&gt;
  272. &lt;tt&gt;vdr: [pidnumber] PES packet shortened to n bytes (expected: m bytes)&lt;/tt&gt;&lt;br /&gt;
  273. Maybe the drivers or the firmware have a bug which is only triggered by VDR. This problem can be fixed by tweaking VDR’s &lt;a href=&quot;http://en.wikipedia.org/wiki/Electronic_program_guide&quot; title=&quot;EPG&quot;&gt;EPG&lt;/a&gt; scanning settings. I’ll post the settings here in case someone is experiencing the same problems. These go into /etc/vdr/setup.conf in Fedora:&lt;/p&gt;
  274. &lt;p&gt;&lt;tt&gt;&lt;br /&gt;
  275. EPGBugfixLevel = 0&lt;br /&gt;
  276. EPGLinger = 0&lt;br /&gt;
  277. EPGScanTimeout = 0&lt;br /&gt;
  278. &lt;/tt&gt;&lt;/p&gt;
  279. &lt;p&gt;It is my understanding that these settings will disable all EPG scanning which is done in the background and VDR will only scan the EPGs of the channels on the transmitters it is currently tuned to. In Finland, most of the interesting free-to-air channels are on two transmitters and the Nova-TD-500 has two tuners, so in practice this should not cause much problems with outdated EPG data.&lt;/p&gt;</description>
  280. <pubDate>Sat, 29 Oct 2011 18:07:14 +0000</pubDate>
  281. </item>
  282. <item>
  283. <title>Jouni Roivas: Wayland</title>
  284. <guid isPermaLink="false">tag:blogger.com,1999:blog-31063096.post-7894039376973318483</guid>
  285. <link>http://osstalk.blogspot.com/2011/03/wayland.html</link>
  286. <description>Recently Wayland have become a hot topic. Canonical has announced that &lt;a href=&quot;http://www.markshuttleworth.com/archives/551&quot;&gt;Ubuntu will go to Wayland&lt;/a&gt;. Also &lt;a href=&quot;http://meego.com/&quot;&gt;MeeGo&lt;/a&gt; has &lt;a href=&quot;http://permalink.gmane.org/gmane.comp.handhelds.meego.devel/6643&quot;&gt;great interest&lt;/a&gt; on it.&lt;br /&gt;&lt;br /&gt;Qt has had (experimental) &lt;a href=&quot;http://qt.gitorious.org/qt/qt/trees/master/src/plugins/platforms/wayland&quot;&gt;Wayland client&lt;/a&gt; support for some time now.&lt;br /&gt;&lt;br /&gt;A very new thing is support for Qt as &lt;a href=&quot;http://labs.qt.nokia.com/2011/03/18/multi-process-lighthouse/&quot;&gt;Wayland server&lt;/a&gt;. With that one can easily make own Qt based Wayland compositor. This is huge. Since this the only working Wayland compositor has been under wayland-demos. Using Qt for this opens many opportunities.&lt;br /&gt;&lt;br /&gt;My vision is that Wayland is the future. And the future might be there sooner than you think...</description>
  287. <pubDate>Mon, 21 Mar 2011 09:42:11 +0000</pubDate>
  288. <author>noreply@blogger.com (Jouni Roivas)</author>
  289. </item>
  290. <item>
  291. <title>Jouni Roivas: MeeGo status</title>
  292. <guid isPermaLink="false">tag:blogger.com,1999:blog-31063096.post-7540060911156827764</guid>
  293. <link>http://osstalk.blogspot.com/2011/02/meego-status.html</link>
  294. <description>Our CEO started a blog: &lt;a href=&quot;http://cannedbypasi.blogspot.com/&quot;&gt;http://cannedbypasi.blogspot.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;He wrote first entry about &lt;a href=&quot;http://cannedbypasi.blogspot.com/2011/02/meego-qt-alive-and-kicking.html&quot;&gt;MeeGo and Qt status&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Shortly: &lt;a href=&quot;http://meego.com&quot;&gt;MeeGo&lt;/a&gt; is alive and kicking.</description>
  295. <pubDate>Thu, 24 Feb 2011 11:10:21 +0000</pubDate>
  296. <author>noreply@blogger.com (Jouni Roivas)</author>
  297. </item>
  298. <item>
  299. <title>Jouni Roivas: Encrypted rootfs on MeeGo 1.1 netbook</title>
  300. <guid isPermaLink="false">tag:blogger.com,1999:blog-31063096.post-7830115184477138393</guid>
  301. <link>http://osstalk.blogspot.com/2010/11/encrypted-rootfs-on-meego-11-netbook.html</link>
  302. <description>I promised my scripts to encrypt the rootfs on my Lenovo Ideapad running MeeGo 1.1. It's currently just a dirty hack but thought it could be nice to share it with you.&lt;br /&gt;&lt;br /&gt;My scripts uses cryptoloop. Unfortunately MeeGo 1.1 netbook stock kernel didn't support md_crypt so that was a no go. Of course I could compile the module myself but I wanted out-of-the box solution.&lt;br /&gt;&lt;br /&gt;Basic idea is to create custom initrd and use it. My solution needs Live USB stick to boot and do the magic. Also another USB drive is needed to get the current root filesystem in safe while encrypting the partition. I don't know if it's possible to encrypt &quot;in place&quot; meaning to use two loopback devices. However this is the safe solution.&lt;br /&gt;&lt;br /&gt;For the busy ones, just boot the MeeGo 1.1 Live USB and grab these files:&lt;br /&gt;&lt;pre&gt;&lt;a href=&quot;http://kaaos.huutonauru.net/meego/netbook_rootfs_crypt/crypt_hd.sh&quot;&gt;http://kaaos.huutonauru.net/meego/netbook_rootfs_crypt/crypt_hd.sh&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://kaaos.huutonauru.net/meego/netbook_rootfs_crypt/mkcryptrd.sh&quot;&gt;http://kaaos.huutonauru.net/meego/netbook_rootfs_crypt/mkcryptrd.sh&lt;/a&gt;&lt;/pre&gt;&lt;br /&gt;Then: &lt;pre&gt;chmod a+x crypt_hd.sh mkcryptrd.sh&lt;br /&gt;su&lt;br /&gt;./crypt_hd.sh&lt;/pre&gt;&lt;br /&gt;And follow the instructions.&lt;br /&gt;&lt;br /&gt;The ones who have more time and want to double check everything, please follow instructions at: &lt;a href=&quot;http://kaaos.huutonauru.net/meego/netbook_rootfs_crypt/README&quot;&gt;http://kaaos.huutonauru.net/meego/netbook_rootfs_crypt/README&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This solution has at least one drawback. Once the kernel updates you have to recreate the initrd. For that purposes I created a tiny script than can be run after kernel update:&lt;pre&gt;&lt;a href=&quot;http://kaaos.huutonauru.net/meego/netbook_rootfs_crypt/update_initrd.sh&quot;&gt;http://kaaos.huutonauru.net/meego/netbook_rootfs_crypt/update_initrd.sh&lt;/a&gt;&lt;/pre&gt;&lt;br /&gt;That script also needs the mkcryptrd.sh script above.&lt;br /&gt;&lt;br /&gt;Of course that may break your system at any time, so be warned.&lt;br /&gt;&lt;br /&gt;For my Lenovo Ideapad S10-3t and MeeGo 1.1 netbook it worked fine. My test case was to make very fresh installation first from the Live/installation USB. Boot again and setup the cryptoloop from Live USB. After that I could easily boot my crypted MeeGo 1.1. It asks password in very early phase of boot process. After it's written correctly the MeeGo 1.1 system should boot up normally.&lt;br /&gt;&lt;br /&gt;This worked for me, and I give no guarantee that this works for you. However you're welcome to send patches and improvements.&lt;br /&gt;&lt;br /&gt;UPDATE 29.11.2010:&lt;br /&gt;Some people have reported problems when they have different kernel version than on Live USB. The're unable to boot back to their system. I try to figure out solution for this issue.</description>
  303. <pubDate>Mon, 29 Nov 2010 12:48:07 +0000</pubDate>
  304. <author>noreply@blogger.com (Jouni Roivas)</author>
  305. </item>
  306. <item>
  307. <title>Vapaakoodi: Finhack tulee taas, tule sinäkin!</title>
  308. <guid isPermaLink="false">http://vapaakoodi.wordpress.com/?p=64</guid>
  309. <link>https://vapaakoodi.wordpress.com/2009/10/12/finhack-tulee-taas-tule-sinakin/</link>
  310. <description>&lt;div&gt;
  311. &lt;p&gt;Finhack on kahdesti vuodessa järjestettävä vapaa tapaaminen suomalaisille vapaaohjelmistoaktiiveille. Finhack Syksy ‘09 järjestetään tällä kertaa ensi lauantaina 17.10 Forssan Ammattikorkeakoululla (&lt;a href=&quot;http://maps.google.com/maps?f=q&amp;amp;source=s_q&amp;amp;hl=fi&amp;amp;geocode=&amp;amp;q=Wahreeninkatu+11,+forssa&amp;amp;sll=37.0625,-95.677068&amp;amp;sspn=54.005807,60.732422&amp;amp;ie=UTF8&amp;amp;hq=Wahreeninkatu+11,&amp;amp;hnear=Forssa,+Suomi&amp;amp;z=16&quot;&gt;Wahreeninkatu 11&lt;/a&gt;). Ohjelmassa on mm. &lt;a href=&quot;http://podcastit.tv/?q=blog/6&quot;&gt;LinuCastin&lt;/a&gt; nauhoitusta Henrik Anttosen johdolla, Timo Jyringin ja Niklas Laxströmin &lt;a href=&quot;http://www.debian.org/intl/l10n/ddtp&quot;&gt;DDTP-työpaja&lt;/a&gt;, Hannu Mäkäräisen johdanto Freejam projektiin sekä Otto Kekäläisen tilannekatsaus Suomen vapaaohjelmistoelämään ja &lt;a href=&quot;http://fsfe.org/&quot;&gt;FSFE:n&lt;/a&gt; suomen jaoston perustaminen.&lt;/p&gt;
  312. &lt;p&gt;Lisää tietoa ohjelmasta löydät Finhackin &lt;a href=&quot;http://finhack.org/doku.php?id=aikataulu&quot;&gt;kotisivuilta&lt;/a&gt;.&lt;/p&gt;
  313. &lt;p&gt;Tapahtumaan on vapaa pääsy, eikä edellytä etukäteisrekisteröintiä. Kuitenkin järjestäjiä auttaisi, jos pistäisit nimesi &lt;a href=&quot;http://finhack.org/doku.php?id=osallistujalista&quot;&gt;osallistujalistaan&lt;/a&gt;.&lt;/p&gt;
  314. &lt;p&gt;Nähdään paikanpäällä!&lt;/p&gt;
  315. &lt;p&gt;Terveisin,&lt;br /&gt;
  316. Ville “Solarius” Sundell&lt;br /&gt;
  317. Järjestäjä&lt;/p&gt;
  318. &lt;p&gt;PS. Tätä viestiä saa levittää vapaasti muuttamattomana, blogeissa, foorumeilla, postituslistoilla ja missä nyt ikinä keksitkään &lt;img src=&quot;https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f642.png&quot; alt=&quot;🙂&quot; style=&quot;height: 1em;&quot; class=&quot;wp-smiley&quot; /&gt;&lt;/p&gt;
  319. &lt;/div&gt;</description>
  320. <pubDate>Mon, 12 Oct 2009 11:29:51 +0000</pubDate>
  321. </item>
  322. <item>
  323. <title>Vapaakoodi: Kiitä kehittäjää!</title>
  324. <guid isPermaLink="false">http://vapaakoodi.wordpress.com/?p=61</guid>
  325. <link>https://vapaakoodi.wordpress.com/2009/03/27/kiita-kehittajaa/</link>
  326. <description>&lt;p&gt;Nyt on ensimmäinen kansainvälinen&lt;a href=&quot;https://vapaakoodi.wordpress.com/feed/thankadev.wordpress.com&quot;&gt; Kiitä kehittäjääsi&lt;/a&gt;-päivä, keitä sinä ajattelit kiittää? Itse aamuyöstä kiitin &lt;a href=&quot;http://en.wikipedia.org/wiki/DJB&quot;&gt;Daniel J. Bernsteiniä&lt;/a&gt; tietoturvallisista ratkaisuista, sekä Transmission-bittorrent asiakasohjelman nykyistä kehittäjää Charles Kerriä hyvästä ohjelmasta, sekä &lt;a href=&quot;http://users.tkk.fi/~tajyrink/&quot;&gt;Timo Jyrinkiä&lt;/a&gt; pitkäaikaisesta työstä suomalaisen vapaaohjelmistoyhteisön hyväksi. Tänään olisi tarkoitus lähettää vielä &lt;a href=&quot;http://en.wikipedia.org/wiki/JWM&quot;&gt;JWM&lt;/a&gt;:n kehittäjälle postia, sekä luultavasti pariin muuhunkin projektiin.&lt;/p&gt;
  327. &lt;p&gt;Kiitä sinäkin kehittäjiä jotka ovat vaikuttaneet tietokoneen käyttöösi!&lt;/p&gt;</description>
  328. <pubDate>Fri, 27 Mar 2009 12:29:01 +0000</pubDate>
  329. </item>
  330. <item>
  331. <title>Vapaakoodi: Arvosta vapaiden ohjelmistojen kehittäjiä – Thank a Dev Day</title>
  332. <guid isPermaLink="false">http://vapaakoodi.wordpress.com/?p=57</guid>
  333. <link>https://vapaakoodi.wordpress.com/2009/03/07/arvosta-vapaiden-ohjelmistojen-kehittajia-thank-a-dev-day/</link>
  334. <description>&lt;p&gt;&lt;a href=&quot;http://thankadev.wordpress.com&quot;&gt;Thank a Dev Day&lt;/a&gt; on päivä, jonka tarkoituksena on muistaa niitä henkilöitä, jotka ovat suosikkikoodisi takana. Tänävuonna sitä vietetään 27.3, ja tästä eteenpäin joka vuoden maaliskuun viimeinen perjantai.&lt;/p&gt;
  335. &lt;p&gt;Muista sinäkin sitä henkilöä, jonka koet muuttaneesi sinun tietokoneen käyttöä, tai muuten vaan saanut hyvälle mielelle!&lt;/p&gt;</description>
  336. <pubDate>Sat, 07 Mar 2009 00:57:56 +0000</pubDate>
  337. </item>
  338. <item>
  339. <title>Vapaakoodi: Finhack tapaaminen tulee – tule sinäkin!</title>
  340. <guid isPermaLink="false">http://vapaakoodi.wordpress.com/?p=54</guid>
  341. <link>https://vapaakoodi.wordpress.com/2008/11/22/finhack-tapaaminen-tulee-tule-sinakin/</link>
  342. <description>&lt;p&gt;Eli, Finhack vapaaohjelmisto-tapahtuma järjestetään &lt;strong&gt;Lauantaina 29.11 HAMKin Forssan toimipisteellä&lt;/strong&gt;.&lt;/p&gt;
  343. &lt;p&gt;Kaikki vapaista ohjelmistoista kiinnostuneet ovat tervetulleita.&lt;/p&gt;
  344. &lt;p&gt;Lisätietoa löytyy täältä: &lt;a href=&quot;http://finhack.pieni.net&quot;&gt;finhack.pieni.net&lt;/a&gt;&lt;/p&gt;</description>
  345. <pubDate>Sat, 22 Nov 2008 13:26:41 +0000</pubDate>
  346. </item>
  347. <item>
  348. <title>Vapaakoodi: identi.ca &amp; laconi.ca – vapaata mikroblogausta</title>
  349. <guid isPermaLink="false">http://vapaakoodi.wordpress.com/?p=51</guid>
  350. <link>https://vapaakoodi.wordpress.com/2008/07/15/identica-laconica-vapaata-mikroblogausta/</link>
  351. <description>&lt;p&gt;&lt;a href=&quot;http://www.identi.ca&quot;&gt;www.identi.ca&lt;/a&gt; on mikroblogi-sivusto, muista, kuten Twitteristä ja Jaikusta poiketen, se kuitenkin perustuu Laconica-ohjelmistoon, joka on Affero GPL:n alla.&lt;/p&gt;
  352. &lt;p&gt;Tästä sivustosta vinkin antoi Mirv, #vapaakoodi-kanavalla.&lt;/p&gt;</description>
  353. <pubDate>Tue, 15 Jul 2008 22:03:10 +0000</pubDate>
  354. </item>
  355.  
  356. </channel>
  357. </rss>
  358.  
Copyright © 2002-9 Sam Ruby, Mark Pilgrim, Joseph Walton, and Phil Ringnalda