<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Google on Micha Kops&#39; Tech Notes</title>
    <link>https://www.hascode.com/tags/google/</link>
    <description>Recent content in Google on Micha Kops&#39; Tech Notes</description>
    <generator>Hugo</generator>
    <language>en</language>
    <copyright>Copyright © 2010 - 2025 Micha Kops. #e9d956c0c0154a221ad83c925346a8fa0e72f866</copyright>
    <lastBuildDate>Fri, 28 Mar 2025 00:00:00 +0100</lastBuildDate>
    <atom:link href="https://www.hascode.com/tags/google/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>CVE Scanning and Guided Remediation with OSV Scanner</title>
      <link>https://www.hascode.com/cve-scanning-and-guided-remediation-with-osv-scanner/</link>
      <pubDate>Fri, 28 Mar 2025 00:00:00 +0100</pubDate>
      <guid>https://www.hascode.com/cve-scanning-and-guided-remediation-with-osv-scanner/</guid>
      <description>&lt;div id=&#34;preamble&#34;&gt;
&lt;div class=&#34;sectionbody&#34;&gt;
&lt;div class=&#34;imageblock&#34;&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;img src=&#34;osv-scanner-cover.webp&#34; alt=&#34;osv scanner cover&#34;/&gt;
&lt;/div&gt;
&lt;div class=&#34;title&#34;&gt;Figure 1. OSV Scanner&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Security is a critical aspect of software development, and staying ahead of vulnerabilities is essential for us application developers. Google’s OSV Scanner is a powerful tool that helps detect vulnerabilities in open-source dependencies.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;This article will guide us through setting up and using OSV Scanner to secure our projects, scan for invalid licenses, scan OCI images and finally how to fix findings via guided remediation.&lt;/p&gt;
&lt;/div&gt;</description>
    </item>
    <item>
      <title>Importing a Sitemap XML into Google Sheets</title>
      <link>https://www.hascode.com/importing-a-sitemap-xml-into-google-sheets/</link>
      <pubDate>Thu, 05 Jan 2023 00:00:00 +0100</pubDate>
      <guid>https://www.hascode.com/importing-a-sitemap-xml-into-google-sheets/</guid>
      <description>&lt;div class=&#34;sect1&#34;&gt;
&lt;h2 id=&#34;_the_goal&#34;&gt;The Goal&lt;/h2&gt;
&lt;div class=&#34;sectionbody&#34;&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;In the following short article, we want to import data from an existing sitemap XML file into a new Google Sheet document.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;The sheet must pull the sitemap via HTTP protocol and extract all the URLs from the sitemap and insert them. into the sheet.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;sect1&#34;&gt;
&lt;h2 id=&#34;_implementation&#34;&gt;Implementation&lt;/h2&gt;
&lt;div class=&#34;sectionbody&#34;&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Now let’s implement it .. it only takes 1 minute …​&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;For demonstration purpose, I’m going to use the sitemap from my old blog, to be found at &lt;code&gt;&lt;a href=&#34;https://www.hascode.com/sitemap.xml&#34; class=&#34;bare&#34;&gt;https://www.hascode.com/sitemap.xml&lt;/a&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;</description>
    </item>
    <item>
      <title>Factory Reset for Google Pixel-C Android Tablet</title>
      <link>https://www.hascode.com/factory-reset-for-google-pixel-c-android-tablet/</link>
      <pubDate>Sun, 13 Jun 2021 00:00:00 +0200</pubDate>
      <guid>https://www.hascode.com/factory-reset-for-google-pixel-c-android-tablet/</guid>
      <description>&lt;div class=&#34;sect1&#34;&gt;
&lt;h2 id=&#34;_steps&#34;&gt;Steps&lt;/h2&gt;
&lt;div class=&#34;sectionbody&#34;&gt;
&lt;div class=&#34;olist arabic&#34;&gt;
&lt;ol class=&#34;arabic&#34;&gt;
&lt;li&gt;
&lt;p&gt;Reboot the system by pressing &amp;#34;Power&amp;#34; and &amp;#34;Volume down&amp;#34; simultaneously&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Boot menu should appear, use &amp;#34;Volume up/down&amp;#34; to select the menu item &amp;#34;Android Recovery&amp;#34;, &amp;#34;Power&amp;#34; to confirm&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;System reboots, a screen appears with a message &amp;#34;No command&amp;#34; - this is no error though it looks like one&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Press &amp;#34;Power&amp;#34; and &amp;#34;Volume up&amp;#34; together and a menu &amp;#34;Android Recovery&amp;#34; appears&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use &amp;#34;Volume up/down&amp;#34; to select the menu item &amp;#34;Wipe data/factory reset&amp;#34;, &amp;#34;Power&amp;#34; to confirm&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;User data on the device is deleted and the original meu is shown&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Select the menu item &amp;#34;Reboot system now&amp;#34; and confirm by pressing the &amp;#34;Power&amp;#34; Button&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The device reboots and you may configure the Android system …​&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description>
    </item>
    <item>
      <title>Distributed Authorization and Contextual Caveats for Java with Macaroons and jmacaroons</title>
      <link>https://www.hascode.com/distributed-authorization-and-contextual-caveats-for-java-with-macaroons-and-jmacaroons/</link>
      <pubDate>Wed, 31 May 2017 00:00:00 +0200</pubDate>
      <guid>https://www.hascode.com/distributed-authorization-and-contextual-caveats-for-java-with-macaroons-and-jmacaroons/</guid>
      <description>&lt;div id=&#34;preamble&#34;&gt;
&lt;div class=&#34;sectionbody&#34;&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Google’s Macaroons are a mechanism to establish distributed authorization. The distinction to the classical bearer-token is their ability that they may be used to perform an action under certain restrictions and may then be used to create a new macaroon with stricter restrictions.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;The following short tutorial demonstrates how to create macaroons, serialize and deserialize them, add first- and third-party caveats and finally to verify them.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;imageblock&#34;&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;img src=&#34;jmacarons-in-intellij-1024x748.png&#34; alt=&#34;jmacarons in intellij 1024x748&#34;/&gt;
&lt;/div&gt;
&lt;div class=&#34;title&#34;&gt;Figure 1. jmacaroons example&lt;/div&gt;</description>
    </item>
    <item>
      <title>Creating In-Memory File Systems with Google’s Jimfs</title>
      <link>https://www.hascode.com/creating-in-memory-file-systems-with-googles-jimfs/</link>
      <pubDate>Wed, 18 Mar 2015 00:00:00 +0100</pubDate>
      <guid>https://www.hascode.com/creating-in-memory-file-systems-with-googles-jimfs/</guid>
      <description>&lt;div id=&#34;preamble&#34;&gt;
&lt;div class=&#34;sectionbody&#34;&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Sometimes when writing an application we might consider using an in-memory file system to speed up data access or to create some kind of cache.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;There are different libraries to help us here but one looks especially promising for me because it supports almost every functionality of the Java NIO File APIs added in Java 7 – from creating, reading, deleting files and directory to handling symbolic and hard links or watching directory changes with a WatchService.&lt;/p&gt;
&lt;/div&gt;</description>
    </item>
    <item>
      <title>How to create an Android App using Google’s App Inventor</title>
      <link>https://www.hascode.com/how-to-create-an-android-app-using-googles-app-inventor/</link>
      <pubDate>Wed, 04 Aug 2010 00:00:00 +0200</pubDate>
      <guid>https://www.hascode.com/how-to-create-an-android-app-using-googles-app-inventor/</guid>
      <description>&lt;div id=&#34;preamble&#34;&gt;
&lt;div class=&#34;sectionbody&#34;&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Today we’re going to take a look at Google’s App Inventor feature that offers programming-novices a nice possibility to enter the fabulous world of Android App programming without deeper knowledge of the API or complex SDK installations.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;So lets build some stuff ..&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;sect1&#34;&gt;
&lt;h2 id=&#34;_prerequisites&#34;&gt;Prerequisites&lt;/h2&gt;
&lt;div class=&#34;sectionbody&#34;&gt;
&lt;div class=&#34;ulist&#34;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;http://java.oracle.com&#34;&gt;Java 6 JDK&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;http://appinventor.googlelabs.com/learn/setup/index.html&#34;&gt;App Inventors Extras Software&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A Google App Inventor Beta Account – request one &lt;a href=&#34;https://services.google.com/fb/forms/appinventorinterest/&#34;&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;sect1&#34;&gt;
&lt;h2 id=&#34;_what_we_are_going_to_build&#34;&gt;What we are going to build&lt;/h2&gt;
&lt;div class=&#34;sectionbody&#34;&gt;
&lt;div class=&#34;ulist&#34;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;We are building a simple GUI with a Textbox and a button&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A click on the button starts an event that queries the acceleration sensor for coordinates&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If the sensor is active and enabled then the coordinates are displayed in the text box&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</description>
    </item>
    <item>
      <title>A look at Google’s Protocol Buffers</title>
      <link>https://www.hascode.com/a-look-at-googles-protocol-buffers/</link>
      <pubDate>Tue, 06 Jul 2010 00:00:00 +0200</pubDate>
      <guid>https://www.hascode.com/a-look-at-googles-protocol-buffers/</guid>
      <description>&lt;div id=&#34;preamble&#34;&gt;
&lt;div class=&#34;sectionbody&#34;&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Protocol Buffers are a serialization format developed by Google- you might ask if another IDL is really needed here – is Google barking at the wrong tree?&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;But protocol buffers offer some advantages over data serialization via XML or JSON – Google says they (compared to XML)..&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;ulist&#34;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;are 3 to 10 times smaller&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;are 20 to 100 times faster&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;provide generated data access classes for programmatic use&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;provide backward compatibility&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</description>
    </item>
    <item>
      <title>Google Docs Snippets</title>
      <link>https://www.hascode.com/google-docs-snippets/</link>
      <pubDate>Mon, 01 Mar 2010 00:00:00 +0100</pubDate>
      <guid>https://www.hascode.com/google-docs-snippets/</guid>
      <description>&lt;div class=&#34;sect1&#34;&gt;
&lt;h2 id=&#34;_importing_xml_data_in_google_sheets&#34;&gt;Importing XML Data in Google Sheets&lt;/h2&gt;
&lt;div class=&#34;sectionbody&#34;&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Use the &lt;a href=&#34;https://support.google.com/docs/answer/3093342?hl=en&#34;&gt;XMLIMPORT&lt;/a&gt; function&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;The syntax is &lt;code&gt;XMLIMPORT(&amp;#34;url&amp;#34;, &amp;#34;xpath&amp;#34;)&lt;/code&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;e.g. for importing an XML sitemap&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;listingblock&#34;&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;pre class=&#34;highlight&#34;&gt;&lt;code&gt;=IMPORTXML(&amp;#34;https://www.hascode.com/sitemap.xml&amp;#34;, &amp;#34;//\*[local-name()=&amp;#39;url&amp;#39;]/*[local-name()=&amp;#39;loc&amp;#39;]&amp;#34;)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;sect1&#34;&gt;
&lt;h2 id=&#34;_select_the_preceding_cell_in_google_sheets&#34;&gt;Select the preceding cell in Google Sheets&lt;/h2&gt;
&lt;div class=&#34;sectionbody&#34;&gt;
&lt;div class=&#34;listingblock&#34;&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;pre class=&#34;highlight&#34;&gt;&lt;code&gt;=INDIRECT(ADDRESS(ROW()-1,COLUMN())&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;sect1&#34;&gt;
&lt;h2 id=&#34;_create_a_todo_list_counter_in_google_sheets&#34;&gt;Create a Todo List Counter in Google Sheets&lt;/h2&gt;
&lt;div class=&#34;sectionbody&#34;&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Each empty cell is a todo, each filled cell is done.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;That allows us the following output, that counts all preceding cells of each type:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;listingblock&#34;&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;pre class=&#34;highlight&#34;&gt;&lt;code&gt;=&amp;#34;Done: &amp;#34;&amp;amp;(COUNTA(B3:INDIRECT(ADDRESS(ROW()-1,COLUMN())))&amp;amp;&amp;#34; Todo: &amp;#34; &amp;amp;COUNTIF(B3:INDIRECT(ADDRESS(ROW()-1,COLUMN())),&amp;#34;&amp;#34;))&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;This outputs a label like &amp;#34;Done: 35 Todo: 142&amp;#34;&lt;/p&gt;
&lt;/div&gt;</description>
    </item>
  </channel>
</rss>
