<rss version="2.0">
  <channel>
    <title>TJ Palanca</title>
    <link>https://tjpalanca.com/</link>
    <description></description>
    
    <language>en</language>
    
    <lastBuildDate>Sun, 21 Sep 2025 08:19:23 +0800</lastBuildDate>
    <item>
      <title>3 ways to connect to a homelab</title>
      <link>https://tjpalanca.com/2025/01/30/ways-to-connect-to-a.html</link>
      <pubDate>Thu, 30 Jan 2025 11:12:36 +0800</pubDate>
      
      <guid>http://tjpalanca.micro.blog/2025/01/30/ways-to-connect-to-a.html</guid>
      <description>&lt;p&gt;I bought an M1 Mac Mini (configured with additional RAM), and figured that it would be a great &lt;a href=&#34;https://linuxhandbook.com/homelab/&#34;&gt;homelab&lt;/a&gt; for occasional use and tinkering. It would also open me up to enabling a primarily local instead of cloud-based smart home using &lt;a href=&#34;https://www.home-assistant.io&#34;&gt;Home Assistant&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/169476/2025/b0b08938-be4e-4638-87cc-f77573056e7f.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;My homelab has been great at allowing me to remove subscriptions for seldom-used cloud services. (Image by ChatGPT 4o)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I also wanted it to be the main place where compute happens for hobby projects, whether I am using my iPad, Chromebook, or any other device. &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;One of the key decisions was how to enable secure connections from the outside when I need to do compute from my iPad while outside my home. I added a way to access the desktop remotely and development tools accessible via a browser, such as VS Code and RStudio.&lt;/p&gt;
&lt;h2 id=&#34;requirements-for-connection-methods&#34;&gt;Requirements for connection methods&lt;/h2&gt;
&lt;p&gt;I needed the solution to fulfil the following requirements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;allows access from anywhere in the world&lt;/li&gt;
&lt;li&gt;adds a layer of authentication via consumer-grade SSO such as Google or GitHub on top of the web applications&lt;/li&gt;
&lt;li&gt;trusted and reliable; the tool has a track record of delivering secure access over a decently long amount of time.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;as well as are some negative requirements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;does not expose any ports to the open internet: there must always be a trusted proxy service that not just I maintain&lt;/li&gt;
&lt;li&gt;no open-source or hand rolled authentication mechanisms that could degrade security if I don&amp;rsquo;t keep up with vulnerabilities&lt;/li&gt;
&lt;li&gt;does not require a static IP; my internet provider charges extra&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In my search, I&amp;rsquo;ve found a few solutions that fit the bill.&lt;/p&gt;
&lt;h2 id=&#34;vs-code-tunnels&#34;&gt;VS Code Tunnels&lt;/h2&gt;
&lt;p&gt;VS Code has a &lt;a href=&#34;https://code.visualstudio.com/docs/remote/tunnels&#34;&gt;great feature&lt;/a&gt; where you could connect to an instance of VS Code running on the homelab via vscode.dev. The experience is virtually identical to a local instance of VS Code — extensions, settings, and other customisations all work quite well.&lt;/p&gt;
&lt;p&gt;Although the established SSH tunnel between your remote machine and homelab is end-to-end encrypted, your traffic is routed through an Azure service&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;. You&amp;rsquo;ll need to trust that Microsoft has put in place security measures to prevent that from being misused&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;The main limitation of this approach is that you are confined to using VS Code — although that may not really be a dealbreaker as everything you need to develop is already inside the tool.&lt;/p&gt;
&lt;h2 id=&#34;tailscale&#34;&gt;Tailscale&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://tailscale.com&#34;&gt;Tailscale&lt;/a&gt; is a &amp;ldquo;mesh VPN&amp;rdquo; that allows you to connect all kinds of devices to each other by simply using the same shared credentials. It works by having a &amp;ldquo;coordination server&amp;rdquo; to allow your devices to discover each other and connect directly to each other. Your actual data flow is handled peer-to-peer, and Tailscale itself isn&amp;rsquo;t privy to this traffic.&lt;/p&gt;
&lt;p&gt;One limitation of Tailscale is that it &lt;a href=&#34;https://tailscale.com/kb/1105/other-vpns&#34;&gt;cannot usually work with another VPN&lt;/a&gt;, and this is true on my iPad as there is a system limitation of 1 only VPN connected at a time. As far as I can tell, you can&amp;rsquo;t have both IP anonymisation and access to local homelab networks.&lt;/p&gt;
&lt;h2 id=&#34;cloudflare-tunnels&#34;&gt;Cloudflare Tunnels&lt;/h2&gt;
&lt;p&gt;Cloudflare is a lot of things, but one product that they offer is &lt;a href=&#34;https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/&#34;&gt;Cloudflare Tunnels&lt;/a&gt;. You run the tunnel on your homelab, and then it connects to the cloudflare network without creating a publicly accessible IP address. You can then access these services using a specially created domain, or if you already use Cloudflare as a DNS, domains or subdomains that you won. In addition to that, you can layer on &lt;a href=&#34;https://developers.cloudflare.com/cloudflare-one/&#34;&gt;Cloudflare Zero Trust&lt;/a&gt; to add authentication on top of your applications running behind the tunnel.&lt;/p&gt;
&lt;p&gt;When you create a Cloudflare Tunnel, you connect your host to CloudFlare&amp;rsquo;s edge network. This means that you&amp;rsquo;ll inherently be trusting that they will protect access to your network and not use it for any nefarious purposes themselves.&lt;/p&gt;
&lt;h2 id=&#34;which-to-pick&#34;&gt;Which to pick?&lt;/h2&gt;
&lt;p&gt;You&amp;rsquo;ll have to consider your needs, but I think I&amp;rsquo;ve boiled down the distinction to the following.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If you require both IP anonymisation and access to HomeLab at the same time, or want to expose some homelab services to the internet with or without authentication, then Cloudflare Tunnels is a good choice.&lt;/li&gt;
&lt;li&gt;If you aren&amp;rsquo;t comfortable trusting a third-party service with your traffic, then Tailscale&amp;rsquo;s mesh VPN will keep your traffic between your devices only.&lt;/li&gt;
&lt;li&gt;If you are only interested in coding via VS Code from a Chromebook or iPad, then VS Code Tunnels is the easiest way to go.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I ended up going with Cloudflare Tunnel for the following reasons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I was already trusting Cloudflare as my DNS provider and proxy, so I felt that using Cloudflare Tunnels had plenty of good ecosystem effects with minimal marginal risk.&lt;/li&gt;
&lt;li&gt;Most of my computing time is spent on iOS devices, so I’d need a solution that offered IP anonymisation and a connection to my homelab, so I could not use Tailscale.&lt;/li&gt;
&lt;li&gt;Based on an unscientific test of connecting from different places, it offered the best performance.&lt;/li&gt;
&lt;/ul&gt;
&lt;section class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34; role=&#34;doc-endnote&#34;&gt;
&lt;p&gt;I really only use an iPad in conjunction with my Mac Mini server, when I used to also have a Macbook Air and a Chromebook in the past. I find that the Mac Mini on a desktop enforces discipline when doing &amp;ldquo;real work&amp;rdquo;.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34; role=&#34;doc-endnote&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://code.visualstudio.com/docs/remote/tunnels#_how-are-tunnels-secured&#34;&gt;VS Code Tunnels - How are tunnels secured&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34; role=&#34;doc-endnote&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://learn.microsoft.com/en-sg/azure/developer/dev-tunnels/security&#34;&gt;VS Code Dev Tunnels Security&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</description>
    </item>
    
    <item>
      <title>dbt Singapore meetup: Using dbt for accounting and investment reporting</title>
      <link>https://tjpalanca.com/2024/09/13/dbt-singapore-meetup.html</link>
      <pubDate>Fri, 13 Sep 2024 19:57:47 +0800</pubDate>
      
      <guid>http://tjpalanca.micro.blog/2024/09/13/dbt-singapore-meetup.html</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/169476/2024/37c19ab7-7a71-4f26-95c8-7bbc3e6e10bd.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve always believed that there is still a lot of value in tackling bread and butter reporting using the modern stack of data tools. One of the most valuable and important reporting workflows in any business isn&amp;rsquo;t in the marketing, product, or engineering teams - it&amp;rsquo;s in the finance team.&lt;/p&gt;
&lt;p&gt;Reporting on the financial performance and health of companies and investments is usually done by large teams exerting a large amount of elbow grease. By leveraging &lt;code&gt;dbt&lt;/code&gt; in our firm&amp;rsquo;s accounting and investment reporting, we were able to deliver both accounting and investment reporting on a daily basis and in an automated fashion.&lt;/p&gt;
&lt;p&gt;The presentation was intended to give an overview of what &lt;code&gt;dbt&lt;/code&gt; users who are tackling similar challenges could face and what worked best for us in overcoming those challenges.&lt;/p&gt;
&lt;div class=&#34;resize&#34;&gt;&lt;iframe src=&#34;https://docs.google.com/presentation/d/1l92p20WwBu7zc0P6UjsiKAs2TPO8TJgff7dhDy5i2dQ/embed?start=false&amp;loop=true&amp;delayms=3000&#34; frameborder=&#34;0&#34; width=&#34;1440&#34; height=&#34;839&#34; allowfullscreen=&#34;true&#34; mozallowfullscreen=&#34;true&#34; webkitallowfullscreen=&#34;true&#34;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;p&gt;We also wrote about this talk on the &lt;a href=&#34;https://www.titaniumbirch.com/blog/tj-2024-08-dbt-meetup-talk&#34;&gt;Titanium Birch blog&lt;/a&gt;.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Exploring the Polars Dataframe Library</title>
      <link>https://tjpalanca.com/2024/09/06/exploring-the-polars.html</link>
      <pubDate>Fri, 06 Sep 2024 13:14:22 +0800</pubDate>
      
      <guid>http://tjpalanca.micro.blog/2024/09/06/exploring-the-polars.html</guid>
      <description>&lt;p&gt;Polars is a relatively new data frame library that I don&amp;rsquo;t yet have experience, but I do want to use it for storing data related to this library, so I&amp;rsquo;m recording my experiments here.&lt;/p&gt;
&lt;link rel=&#34;stylesheet&#34; href=&#34;&#34;&gt;
&lt;style&gt;
    @import &#34;https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/atom-one-light.min.css&#34; screen;
    @import &#34;https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/atom-one-dark.min.css&#34; screen and (prefers-color-scheme: dark);
&lt;/style&gt;
&lt;script src=&#34;https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/highlight.min.js&#34;&gt;&lt;/script&gt;

  
  
    
    
      &lt;script src=&#34;https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/languages/[%27python%27].min.js&#34;&gt;&lt;/script&gt;
    
  

&lt;script&gt;
document.addEventListener(&#34;DOMContentLoaded&#34;, function () {
  document.querySelectorAll(&#39;article.post-content pre code&#39;).forEach((el) =&gt; {
    hljs.highlightElement(el);
  });
});
&lt;/script&gt;
&lt;pre&gt;&lt;code&gt;import polars as pl
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;quick-start&#34;&gt;Quick Start&lt;/h2&gt;
&lt;p&gt;The syntax looks very much like &lt;code&gt;{dplyr}&lt;/code&gt;, following simple verbs that can be chained together via method chaining. You can use the backslash for line continuation but I prefer using parentheses.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;df = pl.read_csv(&amp;quot;https://j.mp/iriscsv&amp;quot;)
(
    df.filter(pl.col(&amp;quot;sepal_length&amp;quot;) &amp;gt; 5)
    .groupby(&amp;quot;species&amp;quot;)
    .agg(pl.col(&amp;quot;sepal_length&amp;quot;).sum())
)
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;polars-expressions&#34;&gt;Polars Expressions&lt;/h2&gt;
&lt;p&gt;An expression is essentially a definition of a data transformation on a polars data frame. By being able to optimize the query on that expression and parallelizing, Polars is able to achieve performance.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Select the column foo, sort it ascending, and get first 2 elements
pl.col(&amp;quot;foo&amp;quot;).sort().head(2)

# You can pipe expressions together
df.select(
    [pl.col(&amp;quot;foo&amp;quot;).sort().head(2), pl.col(&amp;quot;bar&amp;quot;).filter(pl.col(&amp;quot;foo&amp;quot;) == 1).sum()]
)

import polars as pl
import numpy as np

np.random.seed(12)

df = pl.DataFrame(
    {
        &amp;quot;nrs&amp;quot;: [1, 2, 3, None, 5],
        &amp;quot;names&amp;quot;: [&amp;quot;foo&amp;quot;, &amp;quot;ham&amp;quot;, &amp;quot;spam&amp;quot;, &amp;quot;egg&amp;quot;, None],
        &amp;quot;random&amp;quot;: list(np.random.rand(5)),
        &amp;quot;groups&amp;quot;: [&amp;quot;A&amp;quot;, &amp;quot;A&amp;quot;, &amp;quot;B&amp;quot;, &amp;quot;C&amp;quot;, &amp;quot;B&amp;quot;],
    }
)
df

# Take the names vector, count how many, unique, and name a column
df.select(
    [
        pl.col(&amp;quot;names&amp;quot;).n_unique().alias(&amp;quot;unique_names_1&amp;quot;),
        pl.col(&amp;quot;names&amp;quot;).unique().count().alias(&amp;quot;unique_names_2&amp;quot;),
    ]
)

# Summing, minimum, maximum, std dev, and variance
df.select(
    [
        pl.sum(&amp;quot;random&amp;quot;).alias(&amp;quot;sum&amp;quot;),
        pl.min(&amp;quot;random&amp;quot;).alias(&amp;quot;min&amp;quot;),
        pl.max(&amp;quot;random&amp;quot;).alias(&amp;quot;max&amp;quot;),
        pl.col(&amp;quot;random&amp;quot;).max().alias(&amp;quot;other_max&amp;quot;),
        pl.std(&amp;quot;random&amp;quot;).alias(&amp;quot;std dev&amp;quot;),
        pl.var(&amp;quot;random&amp;quot;).alias(&amp;quot;variance&amp;quot;),
    ]
)

# Get all names where the name contains am at the end
df.select(
    [
        pl.col(&amp;quot;names&amp;quot;).filter(pl.col(&amp;quot;names&amp;quot;).str.contains(r&amp;quot;am$&amp;quot;)).count(),
    ]
)

# When the random field is &amp;gt;0.5, then use 0 else use the random, multiple by nrs
df.select(
    [
        pl.when(pl.col(&amp;quot;random&amp;quot;) &amp;gt; 0.5).then(0).otherwise(pl.col(&amp;quot;random&amp;quot;))
        * pl.sum(&amp;quot;nrs&amp;quot;),
    ]
)

# Window functions in SQL, get the sum of random over groups, and get the list of random over names
df.select(
    [
        pl.col(&amp;quot;*&amp;quot;),  # select all
        pl.col(&amp;quot;random&amp;quot;).sum().over(&amp;quot;groups&amp;quot;).alias(&amp;quot;sum[random]/groups&amp;quot;),
        pl.col(&amp;quot;random&amp;quot;).list().over(&amp;quot;names&amp;quot;).alias(&amp;quot;random/name&amp;quot;),
    ]
)
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;expression-contexts&#34;&gt;Expression Contexts&lt;/h2&gt;
&lt;p&gt;Expression contexts define how the expression is evaluated.&lt;/p&gt;
&lt;h3 id=&#34;select-context&#34;&gt;Select Context&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Does operations over columns&lt;/li&gt;
&lt;li&gt;Must produce &lt;code&gt;Series&lt;/code&gt; of same length or length 1 (broadcasted)&lt;/li&gt;
&lt;li&gt;You can add &lt;code&gt;pl.all()&lt;/code&gt; to make it more like &lt;code&gt;{dplyr}&lt;/code&gt;&amp;rsquo;s &lt;code&gt;mutate()&lt;/code&gt;, otherwise&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;it behaves like &lt;code&gt;transmute()&lt;/code&gt;.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;df.select(
    [
        pl.all(),
        pl.sum(&amp;quot;nrs&amp;quot;).alias(&amp;quot;nrs2&amp;quot;),
        pl.col(&amp;quot;names&amp;quot;).sort().alias(&amp;quot;names2&amp;quot;),
        pl.col(&amp;quot;names&amp;quot;).first().alias(&amp;quot;first name&amp;quot;),
        (pl.mean(&amp;quot;nrs&amp;quot;) * 10).alias(&amp;quot;10xnrs&amp;quot;),
    ]
)
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&#34;add-columns&#34;&gt;Add Columns&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;df.with_columns(
    [
        pl.sum(&amp;quot;nrs&amp;quot;).alias(&amp;quot;nrs_sum&amp;quot;),
        pl.col(&amp;quot;random&amp;quot;).count().alias(&amp;quot;count&amp;quot;),
    ]
)
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Behaves like &lt;code&gt;dplyr::mutate()&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;groupby-context&#34;&gt;GroupBy Context&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;df.groupby(&amp;quot;groups&amp;quot;).agg(
    [
        pl.sum(&amp;quot;nrs&amp;quot;),  # sum nrs by groups
        pl.col(&amp;quot;random&amp;quot;).count().alias(&amp;quot;count&amp;quot;),  # count group members
        # sum random where name != null
        pl.col(&amp;quot;random&amp;quot;).filter(pl.col(&amp;quot;names&amp;quot;).is_not_null()).sum().suffix(&amp;quot;_sum&amp;quot;),
        pl.col(&amp;quot;names&amp;quot;).reverse().alias((&amp;quot;reversed names&amp;quot;)),
    ]
)
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Expressions work on groups&lt;/li&gt;
&lt;li&gt;You may return any length&lt;/li&gt;
&lt;li&gt;You use &lt;code&gt;agg()&lt;/code&gt; after a a &lt;code&gt;groupby()&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;thoughts&#34;&gt;Thoughts&lt;/h2&gt;
&lt;p&gt;I do think this API is much more user-friendly, tractable, and less error-prone than the &lt;code&gt;pandas&lt;/code&gt; API. I would like, as much as possible, for my workflow sot use &lt;code&gt;polars&lt;/code&gt; whenever I start something new, and avoid having to use &lt;code&gt;pandas&lt;/code&gt; unless there is some package compatibility quirk that needs to be resolved.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>#8: Writing is thinking, weak passport problems, and economic growth</title>
      <link>https://tjpalanca.com/2024/08/20/writing-is-thinking.html</link>
      <pubDate>Tue, 20 Aug 2024 19:52:00 +0800</pubDate>
      
      <guid>http://tjpalanca.micro.blog/2024/08/20/writing-is-thinking.html</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/169476/2024/886b38d4-b745-4361-8166-310b2e17905a.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;No amount of organising beats writing when it comes to synthesising new information&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I consume a lot of media. On a regular day, my feed reader pushes the latest gadget reviews from &lt;a href=&#34;https://www.theverge.com&#34;&gt;The Verge&lt;/a&gt;, updates on Southeast Asia from &lt;a href=&#34;https://darimulut.substack.com&#34;&gt;Dari Mulut Ke Mulut&lt;/a&gt;, or my Kindle asks me to finish reading &lt;a href=&#34;https://www.goodreads.com/book/show/38103723&#34;&gt;The Montessori Toddler&lt;/a&gt;, along with all the other books in my &lt;a href=&#34;https://www.goodreads.com/review/list/123020823?shelf=to-read&#34;&gt;ever-growing reading list&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I tell myself that this isn’t mindless consumption. I imagine myself quoting a book I read 2 years ago, or relating some tidbit in a newsletter to a problem I’m facing at work, or applying some sage parenting advice while playing with my daughter.&lt;/p&gt;
&lt;p&gt;This wasn’t really happening, though. There was something missing in the process — I wasn’t taking the time to coalesce my thoughts from amorphous human brain file format to concrete written prose. Worse, the more time I spent without writing anything, the more I tried to keep things in my head, taking up cycles and leaving me scatterbrained.&lt;/p&gt;
&lt;p&gt;I set myself a goal of 300 words per day in &lt;a href=&#34;https://ulysses.app&#34;&gt;Ulysses&lt;/a&gt;, a beautiful writing app that tracks this for me. Did it work? I&amp;rsquo;m not sure yet, but I definitely feel better!&lt;/p&gt;
&lt;h2 id=&#34;book-everybody-writes-by-ann-handley&#34;&gt;Book: Everybody Writes by Ann Handley&lt;/h2&gt;
&lt;p&gt;I finished reading Everybody Writes by Ann Handley, and &lt;a href=&#34;https://tjpalanca.com/2024/08/06/book-notes-everybody.html&#34;&gt;assembled some book notes&lt;/a&gt;. It&amp;rsquo;s a great book on writing from a marketing perspective. Even if you don&amp;rsquo;t write or market for a living, I find that the advice applies well to blogs, newsletters, and speeches.&lt;/p&gt;
&lt;p&gt;Some of my favourite takeaways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Words are your ambassador, and can make or break you.&lt;/li&gt;
&lt;li&gt;If you want to get better at writing, just write! Edit and refine later.&lt;/li&gt;
&lt;li&gt;High-quality content should have utility, inspiration, and empathy.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&amp;rsquo;d highly encourage anyone who does any sort of business writing to give it a look.&lt;/p&gt;
&lt;h2 id=&#34;renewing-my-us-visa&#34;&gt;Renewing my US Visa&lt;/h2&gt;
&lt;p&gt;I renewed my US visa recently as a Philippine passport holder in Singapore. &lt;a href=&#34;https://tjpalanca.com/2024/08/02/renewing-a-us.html&#34;&gt;Here&amp;rsquo;s my detailed write-up of the experience&lt;/a&gt;. For those who don’t know, the US visa is also useful for obtaining an electronic travel authorisation to Canada.&lt;/p&gt;
&lt;p&gt;The process was not well documented, but once you know what to do it&amp;rsquo;s a very straightforward process.&lt;/p&gt;
&lt;h2 id=&#34;reading&#34;&gt;Reading&lt;/h2&gt;
&lt;p&gt;Here&amp;rsquo;s a brief rundown of the most notable articles from my recent reading history:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.counting-stuff.com/the-importance-of-looking-outside-of-the-data/&#34;&gt;&lt;strong&gt;The importance of looking outside of &amp;ldquo;the data&amp;rdquo;&lt;/strong&gt;&lt;/a&gt; — Randy Au breaks down Nike&amp;rsquo;s recent crash due to an over-reliance on the data they currently collect, not realising that it&amp;rsquo;s the data that they don&amp;rsquo;t collect (churned and non-customers) that they needed to focus on.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.financialsamurai.com/primary-residence-value-as-a-percentage-of-net-worth-guide/#&#34;&gt;&lt;strong&gt;Primary Residence Value As A Percentage Of Net Worth Guide&lt;/strong&gt;&lt;/a&gt; — As a percentage of your long-term net worth, Financial Samurai says your primary residence should be no more than 30%.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Global economic growth has always fallen short of expectations&lt;/strong&gt; — I&amp;rsquo;m currently reading &lt;a href=&#34;https://theimaginationmachine.org&#34;&gt;The Imagination Machine&lt;/a&gt;, and one of the most striking visuals at the start of the book illustrates this point:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/169476/2024/f15f5088-a9a3-442c-97c9-aa2ba04fe279.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;The authors make the case that this is because growth opportunities now require a lot more &amp;ldquo;imagination&amp;rdquo; than before, where process development and technological innovation were enough.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I actually produced a newsletter post beyond the original &amp;ldquo;I am restarting my newsletter&amp;rdquo; post. 🎉 I&amp;rsquo;d appreciate your feedback, just hit reply.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>#7: Digital gardening didn&#39;t work for me, getting serious about writing, and my new role</title>
      <link>https://tjpalanca.com/2024/07/24/digital-gardening-didnt.html</link>
      <pubDate>Wed, 24 Jul 2024 22:25:36 +0800</pubDate>
      
      <guid>http://tjpalanca.micro.blog/2024/07/24/digital-gardening-didnt.html</guid>
      <description>&lt;p&gt;Welcome back to what is essentially an annual newsletter 🥲. In this issue, find out why digital gardening didn’t work for me, how I want to own my content, and my new gig combining accounting and data engineering.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/169476/2024/57542d63-781f-4e21-8935-5f3501ab4921.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Obsidian&amp;rsquo;s graph view was very fun to look at, but I quickly realised that it wasn&amp;rsquo;t going to really help with my writing.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&#34;a-reflection-on-digital-gardening&#34;&gt;A reflection on digital gardening&lt;/h2&gt;
&lt;p&gt;In my &lt;a href=&#34;https://tjpalanca.com/2023/05/25/digital-gardens-parenting.html&#34;&gt;previous newsletter&lt;/a&gt;, I was singing the praises of digital gardens, and how they were supposed to lower the barrier for entry for writing.&lt;/p&gt;
&lt;p&gt;Well, I&amp;rsquo;m pleased to report that it was successful in lowering the barrier to entry, I&amp;rsquo;ve added many notes to my garden, from new Julia packages to the economy of Somalia. However, I still &lt;em&gt;failed to produce any substantial writing&lt;/em&gt; 😕.&lt;/p&gt;
&lt;p&gt;The whole &amp;ldquo;idea emergence&amp;rdquo; thing, where if I link notes together and then somehow use the network to generate new ideas, didn’t really work for me.&lt;/p&gt;
&lt;p&gt;Whenever I tried to synthesise my thoughts, the result looked more like a review of related literature than anything original or &amp;ldquo;emergent&amp;rdquo;. I felt compelled to stick to the confines of the linked material, rather than consciously think through the topic and form my thoughts.&lt;/p&gt;
&lt;p&gt;Another reason I decided to abandon full-blown digital gardening is that I realised that the end product wasn&amp;rsquo;t really enjoyable to read.&lt;a href=&#34;https://maxwellforbes.com/blog/praise-critique-digital-gardens/&#34;&gt; My garden was overgrown, and it became too much work to &amp;ldquo;tend&amp;rdquo; to it.&lt;/a&gt; You could start on a very polished note and then end up with the bits and ends which are of no value to anyone but me.&lt;/p&gt;
&lt;h2 id=&#34;publish-on-your-site-syndicate-elsewhere-posse&#34;&gt;Publish on your site, syndicate elsewhere (POSSE)&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/169476/2024/6cae47e5-3353-404a-975f-4966be2234d9.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Yet another iteration of this website, hopefully it&amp;rsquo;ll stick! 🤞&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;If you’re getting this newsletter in your inbox and the sender is unfamiliar, it’s because I’ve moved over to a service called &lt;a href=&#34;https://micro.blog&#34;&gt;Micro.Blog&lt;/a&gt;. It started as a kickstarter in 2017 and has grown since then. The same &lt;a href=&#34;https://tjpalanca.com/policies/privacy&#34;&gt;privacy policy&lt;/a&gt; applies — your email is only used to send you this newsletter and nothing else.&lt;/p&gt;
&lt;p&gt;If there&amp;rsquo;s one thing that Twitter&amp;rsquo;s chaotic few years has pushed me to do, is to make sure all the content I create isn&amp;rsquo;t confined to one place. Micro.blog’s founder Manton Reece has written &lt;a href=&#34;https://book.micro.blog&#34;&gt;a book&lt;/a&gt; that lays out his vision for people to &lt;a href=&#34;https://book.micro.blog/domain-names/&#34;&gt;blog on their domain names&lt;/a&gt; and &lt;a href=&#34;https://book.micro.blog/syndication/&#34;&gt;syndicate that out with feeds&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I resonate with that vision.&lt;/p&gt;
&lt;p&gt;I post all my writing, including microposts (or tweets, or toots, or whatever you call them), on tjpalanca.com first (publish your own site). Afterward, a combination of micro.blog&amp;rsquo;s syndication tools, &lt;a href=&#34;https://zapier.com&#34;&gt;Zapier&lt;/a&gt;, and &lt;a href=&#34;https://buffer.com&#34;&gt;Buffer&lt;/a&gt;, syndicate the content out to Facebook, Twitter, Mastodon, Medium, and any other network, protocol, or site now and in the future.&lt;/p&gt;
&lt;p&gt;If any of these networks decides it no longer wants to exist, my content is still safely, and originally, on my website.&lt;/p&gt;
&lt;h2 id=&#34;working-at-titanium-birch-standardising-disparate-data-feeds-for-investment-reporting-and-accounting&#34;&gt;Working at Titanium Birch: Standardising disparate data feeds for investment reporting and accounting&lt;/h2&gt;
&lt;p&gt;I started a new role as CFO / Software Engineer at &lt;a href=&#34;https://titaniumbirch.com&#34;&gt;Titanium Birch&lt;/a&gt;, a single family office started by the co-founder of ExpressVPN.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve written a &lt;a href=&#34;https://www.titaniumbirch.com/blog/standardising-data-for-reporting-and-accounting&#34;&gt;blog post&lt;/a&gt; on the company blog about what we have been working on recently — turning data feeds from disparate banks and brokers into useful and actionable reports and financial statements.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s quite interesting to apply a data engineering lens to a very well established problem such as bookkeeping — the underlying principles remain the same: standardise your source feeds into objects, and then obey that interface when creating business objects — this allows standardisation code and analysis code to evolve independently.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;That’s the first installment — hoping I can keep up my newsletter habit, at least for the next trip around the sun. See you on the next one!&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Review: dBrand Skin for iPhone and iPad</title>
      <link>https://tjpalanca.com/2024/07/07/dbrand-skin-for.html</link>
      <pubDate>Sun, 07 Jul 2024 22:13:11 +0800</pubDate>
      
      <guid>http://tjpalanca.micro.blog/2024/07/07/dbrand-skin-for.html</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/169476/2024/ab37b45f-736a-440a-a4cc-2761c3398158.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;dbrand Matte Black skin and the Moft snap case&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Since we had a baby, we added AppleCare+ &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;to all our Apple devices, as the risk is now much higher that our devices meet an untimely demise.&lt;/p&gt;
&lt;p&gt;A side effect of the warranty is that it made me brave enough to go caseless. However, I quickly noticed after a few days that a bare iPhone is too slippery and cold to the touch. I needed something that didn&amp;rsquo;t add any additional heft while making the texture a lot more comfortable.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s where the dbrand skin comes in.&lt;/p&gt;
&lt;div id=&#34;TableOfContentsWrapper&#34;&gt;
&lt;span style=&#34;font-size: 0.8em; font-weight: 600;&#34;&gt;TABLE OF CONTENTS&lt;/span&gt;
&lt;nav id=&#34;TableOfContents&#34;&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&#34;#selecting-a-pattern-and-ordering&#34;&gt;Selecting a pattern and ordering&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#applying-the-skin&#34;&gt;Applying the skin&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#first-impressions&#34;&gt;First impressions&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#after-a-week-of-use&#34;&gt;After a week of use&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#34;#conclusion&#34;&gt;Conclusion&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;/nav&gt;
&lt;/div&gt;
&lt;style&gt; 
#TableOfContents {
	margin-top: -0.5em; 
}
#TableOfContents li {
	display: block;
}
&lt;/style&gt;



&lt;h2 id=&#34;selecting-a-pattern-and-ordering&#34;&gt;Selecting a pattern and ordering&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/169476/2024/image-07-07-2024-7-29pm.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The dbrand checkout experience makes it easy to pick and compare styles, but the reflectivity of the skin isn&amp;rsquo;t as obvious.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I ordered from Singapore, with free delivery on orders above USD 60. I ordered 2 skins for my iPhone 15 Plus and 1 skin for iPad, assuming that the iPhone skins would wear earlier.&lt;/p&gt;
&lt;p&gt;For those who wanted the leather skin like I did, the iPhone leather case didn&amp;rsquo;t cover the sides, and the iPad leather case was noted to interfere with the Magic Keyboard connection.&lt;/p&gt;
&lt;p&gt;The website was pretty clear and easy to navigate. While they do a good job of representing the skin in the pictures, one thing that is difficult to judge is how it reflects the light. In a previous order, I had gotten the &amp;ldquo;Swarm&amp;rdquo; pattern as I loved the hexagons, but it ended up being so bedazzled and shiny that it didn&amp;rsquo;t look premium at all. I swapped it for a Matte Black version instead.&lt;/p&gt;
&lt;p&gt;The package arrived within a week with no issues; it was well protected and all the skins were not folded or bent.&lt;/p&gt;
&lt;h2 id=&#34;applying-the-skin&#34;&gt;Applying the skin&lt;/h2&gt;
&lt;p&gt;DBrand has some &lt;a href=&#34;https://dbrand.com/how&#34;&gt;well-made how-to videos&lt;/a&gt; on applying the skin. They&amp;rsquo;re pretty clear and all you need is some concentration and a hair dryer. Allot at least an hour to apply the skin properly, with nothing rushing you, as it is very possible to botch the application.&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;What helped was to make sure that everything is completely, perfectly aligned as soon as the skin touches the device. Removing and re-applying the skin is no issue as long as it hasn&amp;rsquo;t been a while.&lt;/p&gt;
&lt;h2 id=&#34;first-impressions&#34;&gt;First impressions&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/169476/2024/image-07-07-2024-4-31pm.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;iPhone 15 Plus with Matte Black dbrand skin&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;It felt a little silly to make this purchase, when I could have bought a basic case for much less. The feeling disappeared when I put the skin on and walked around with the phone for a full day. The phone was so much easier to handle and felt warm to the touch. Using the phone on the subway or walking around was much more enjoyable (and safe).&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/169476/2024/fadee249-7c2c-43ff-8d34-470b52602160.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;iPad Pro M4 in Matte Black and Magic Keyboard in Matrix&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The iPad skin was more basic — it was just a simple skin over the back (not the sides). It largely served the purpose of adding grippiness while protecting the back from scratches. I also chose the one without the logo cutout as it was usually in landscape, but the logo was not.&lt;/p&gt;
&lt;h2 id=&#34;after-a-week-of-use&#34;&gt;After a week of use&lt;/h2&gt;
&lt;p&gt;Inevitably, my 2-year-old picked up and dropped the phone, and there is now a slight scratch on the skin and the phone itself. The skin definitely doesn&amp;rsquo;t protect as well as a case, but as far as micro-scratches from keys or anything your device might share a pocket with, it&amp;rsquo;s been great.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/169476/2024/da0f0e89-bc6e-4093-ae1b-9dc5124335e0.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Slight bump after falling on a hard floor from a 2-meter height&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I did notice a small tear in the corner where the skin wasn&amp;rsquo;t completely applied. I&amp;rsquo;m pretty sure this will become an issue in the future. By then, I&amp;rsquo;ll apply my second skin, but this is something to note — any slight imperfection in the application will probably result in the skin peeling off in some way.&lt;/p&gt;
&lt;h2 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;There are legitimate reasons to get this setup:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;you find any iPhone case bulky, especially with Plus or Pro models,&lt;/li&gt;
&lt;li&gt;you already have AppleCare+, so aren&amp;rsquo;t worried about catastrophic falls, and&lt;/li&gt;
&lt;li&gt;you don&amp;rsquo;t mind having minor bumps and scratches that aren&amp;rsquo;t covered.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If this sounds like you, I&amp;rsquo;d recommend you give a dbrand skin a try. If you&amp;rsquo;re just looking for the cheapest way to protect your case or don&amp;rsquo;t have AppleCare+, even the most basic case will be more protection at a fraction of the cost and hassle.&lt;/p&gt;
&lt;section class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34; role=&#34;doc-endnote&#34;&gt;
&lt;p&gt;AppleCare+ is an additional purchase that extends the warranty to 2 years and includes accidental damage.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34; role=&#34;doc-endnote&#34;&gt;
&lt;p&gt;I&amp;rsquo;ve heard that dbrand may sometimes send you a replacement, but that isn&amp;rsquo;t an established policy that I&amp;rsquo;ve read anywhere.&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</description>
    </item>
    
    <item>
      <title>Moving Shares from Shareworks Solium to Interactive Brokers</title>
      <link>https://tjpalanca.com/2023/07/04/moving-shares-from.html</link>
      <pubDate>Tue, 04 Jul 2023 00:00:00 +0800</pubDate>
      
      <guid>http://tjpalanca.micro.blog/2023/07/04/moving-shares-from.html</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://images.unsplash.com/photo-1611974789855-9c2a0a7236a3?crop=entropy&amp;amp;cs=tinysrgb&amp;amp;fit=max&amp;amp;fm=jpg&amp;amp;ixid=M3wzNjAwOTd8MHwxfHNlYXJjaHwzfHxzdG9ja3N8ZW58MHwwfHx8MTY4ODQ2NjA1N3ww&amp;amp;ixlib=rb-4.0.3&amp;amp;q=80&amp;amp;w=1080&#34; alt=&#34;Stock and Crypto Market Values. Photo by Maxim Hopman on Unsplash&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Stock and Crypto Market Values. Photo by &lt;a href=&#34;https://unsplash.com/@nampoh?utm_source=Obsidian%20Image%20Inserter%20Plugin&amp;amp;utm_medium=referral&#34;&gt;Maxim Hopman&lt;/a&gt; on &lt;a href=&#34;https://unsplash.com/?utm_source=Obsidian%20Image%20Inserter%20Plugin&amp;amp;utm_medium=referral&#34;&gt;Unsplash&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I was lucky enough to be part of two companies that went public via an IPO: Uber and Grab, both ridesharing companies.&lt;/p&gt;
&lt;p&gt;A common platform for managing and distributing these employee shares is &lt;a href=&#34;https://www.shareworks.com/&#34;&gt;Shareworks/Solium (now part of Morgan Stanley at work)&lt;/a&gt;. While it&amp;rsquo;s great for seeing your stock compensation as you earn it, it&amp;rsquo;s not really a platform that you could use once those shares are granted to you and tradeable in the public market.&lt;/p&gt;
&lt;p&gt;I use &lt;a href=&#34;https://ibkr.com/referral/troyjames476&#34;&gt;Interactive Brokers&lt;/a&gt;&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; for managing my non-fund equity investments. It&amp;rsquo;s a great platform with very low fees. I wanted to transfer my employee shares to IBKR so I can manage them and liquidate them with low fees.&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;This TIL is just my personal experience, your mileage may vary. Please try with a small test transfer before sending a larger amount of shares.&lt;/p&gt;
&lt;p&gt;First, initiate the transfer in IBKR by going to &lt;strong&gt;Transfer &amp;amp; Pay &amp;gt; Transfer Positions&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://i.imgur.com/R6DMAr8.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Afterward, select &lt;strong&gt;United States&lt;/strong&gt; as your region (as both Solium/Shareworks and IBKR are located in the US).&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://i.imgur.com/JATSwMG.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Select &lt;strong&gt;Free of Payment Transfer of US Securities&lt;/strong&gt; as your preferred method. This is the best method as it does not involve any fees (hence the name).&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://i.imgur.com/xmO2b7O.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Enter &lt;strong&gt;Solium Capital&lt;/strong&gt; as your broker, your Soliium Employee Number as the account number, and other relevant information. You also need to put in which and how many shares you would like to transfer.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://i.imgur.com/hIYgZvt.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Sign your name in transfer verification.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://i.imgur.com/RMHJR0b.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Click on &lt;strong&gt;View Form&lt;/strong&gt; to get the information that you need to give Solium. Note the &lt;strong&gt;DTC Number 0534&lt;/strong&gt; which is critical for making sure the shares move to the right broker.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://i.imgur.com/skIHN3g.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Now, log into solium to initiate the transfer from their end. In Shareworks/Solium:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;View your portfolio, then select &lt;strong&gt;Sell or Transfer&lt;/strong&gt;. Input the Brokerage information that you have received before. The critical parts are the &lt;strong&gt;DTC Number&lt;/strong&gt; and the &lt;strong&gt;Interactive Brokers Account Number&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Go through confirmation steps to request Solium to transfer shares to IBKR.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;It takes 3-5 business days for the transfer to proceed. Since FOP notifications expire after 5 business days, make sure to take these steps in one sitting rather than doing them in parts.&lt;/p&gt;
&lt;pre hidden&gt;
Writing/Learning/Moving+Shares+from+Shareworks+Solium+to+Interactive+Brokers
&lt;/pre&gt;
&lt;section class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34; role=&#34;doc-endnote&#34;&gt;
&lt;p&gt;This is a referral link! If you don&amp;rsquo;t want to use it, just go to the regular &lt;a href=&#34;https://interactivebrokers.com&#34;&gt;website&lt;/a&gt;.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34; role=&#34;doc-endnote&#34;&gt;
&lt;p&gt;Incidentally, it&amp;rsquo;s also a &lt;strong&gt;great&lt;/strong&gt; place to do currency conversion. The rates are near spot with very minimal fixed commissions. You shouldn&amp;rsquo;t use the broker as a currency exchange (they will take action against your account for that), but if you are looking to change your currency exposure over a long period of time then it&amp;rsquo;s great.&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</description>
    </item>
    
    <item>
      <title>Digital gardens, Parenting, and Coffee</title>
      <link>https://tjpalanca.com/2023/05/25/digital-gardens-parenting.html</link>
      <pubDate>Thu, 25 May 2023 00:00:00 +0800</pubDate>
      
      <guid>http://tjpalanca.micro.blog/2023/05/25/digital-gardens-parenting.html</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/169476/2024/decfdb0960.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Newborn Sleep Patterns&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&#34;welcome-to-my-digital-garden&#34;&gt;Welcome to my digital garden&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve long lamented the inactivity of my website - but not for lack of trying. In the old website, I had 10 drafts sitting in the inbox queue, but could never bring myself to hit publish because they weren&amp;rsquo;t exactly as polished as the other posts from almost a decade ago.&lt;/p&gt;
&lt;p&gt;Also, the whole publishing process as quite laborious - I didn&amp;rsquo;t have an easy way to just go from my internal Notion ideas to the Quarto website that I set up last year - I had to be at my laptop, completely focused, to publish anything, which is a rare occurrence now that On Newborn Parenting|we are of child.&lt;/p&gt;
&lt;p&gt;I &lt;em&gt;think&lt;/em&gt; I&amp;rsquo;ve found a good solution, by creating a digital garden:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;This lowers the barrier to entry and publishing of ideas, I can keep them knocking around in the digital garden and make sense of all the information before I publish them into the writing section of my website, and&lt;/li&gt;
&lt;li&gt;I&amp;rsquo;ve integrated all my thinking into one tool (my Building a Second Brain|second brain for both thinking and publishing in Obsidian and its Obsidian Publish service. If you &lt;a href=&#34;https://tjpalanca.com&#34;&gt;go to my site&lt;/a&gt; now, you&amp;rsquo;ll see that it&amp;rsquo;s changed to that form. I&amp;rsquo;ll write more at length about this setup in the future.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So, that&amp;rsquo;s inspired a fresh new attempt to revive my regular newsletter habit.&lt;/p&gt;
&lt;h2 id=&#34;privacy-friendly-google-analytics&#34;&gt;Privacy-friendly Google Analytics?&lt;/h2&gt;
&lt;p&gt;I wrote about Nerfing Google Analytics to be more privacy-friendly. As I revamped the website, I thought I&amp;rsquo;d turn to free tools, as opposed to my Plausible Analytics self-hosted setup.&lt;/p&gt;
&lt;p&gt;But it&amp;rsquo;s no longer as simple as slapping Google Analytics on the website and calling it a day due to changes in privacy regulation. This post writes down how I&amp;rsquo;ve managed to lock down all the unnecessary ad tracking and data sharing agreements to keep my Privacy Policy|privacy policy as simple as &amp;ldquo;I collect anonymized analytics on pageviews so I can make the site better, and nothing else.&amp;rdquo;&lt;/p&gt;
&lt;h2 id=&#34;newborn-parenting&#34;&gt;Newborn parenting&lt;/h2&gt;
&lt;p&gt;I wrote a short piece &lt;a href=&#34;https://tjpalanca.com/2023/05/23/on-newborn-parenting.html&#34;&gt;On Newborn Parenting&lt;/a&gt; and the various adjustments we&amp;rsquo;ve had to make as a result of now having a beautiful daughter in our home.&lt;/p&gt;
&lt;h2 id=&#34;reading-highlights&#34;&gt;Reading highlights&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;10 Thoughts From the Fourth Trimester&lt;/strong&gt; by Tim Urban · &lt;a href=&#34;https://readwise.io/reader/shared/01h15cmy616rn8cza5jz8dmdxc&#34;&gt;Highlights&lt;/a&gt; · &lt;a href=&#34;https://waitbutwhy.com/2023/05/baby.html&#34;&gt;Original&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This was a hilarious point of view of Parenting from Tim Urban of Wait But Why fame. My favorite points were:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The labor experience for couples and how they are wonderfully mundane compared to what we see in the movies.&lt;/li&gt;
&lt;li&gt;How newborns are basically fetuses outside the womb and they aren&amp;rsquo;t cute at all until they&amp;rsquo;re actually babies at 3 months.&lt;/li&gt;
&lt;li&gt;How there is no regulation at all around parenting despite being completely in control of a child&amp;rsquo;s life&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;A Brief History &amp;amp; Ethos of the Digital Garden&lt;/strong&gt; by Maggie Appleton · &lt;a href=&#34;https://readwise.io/reader/shared/01gzvcae29wsj70a42phc00m5a&#34;&gt;Highlights&lt;/a&gt; · &lt;a href=&#34;https://maggieappleton.com/garden-history&#34;&gt;Original&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;As I got deeper and deeper into building a second brain, I&amp;rsquo;ve turned my focus to my website and how it&amp;rsquo;s gotten so stale. A digital garden is all about lowering the barriers to publishing my moving away from &amp;ldquo;articles&amp;rdquo; and &amp;ldquo;essays&amp;rdquo; where everything must be perfect, to publishing field notes or other unfinished work for continual refinement in public. Maggie Appleton describes this style of publishing excellently and with amazing pictures.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;As Filipinos Crave More for Local Java, Philippine Coffee Farms Brew a Plan&lt;/strong&gt; by Isabel Martinez · &lt;a href=&#34;https://readwise.io/reader/shared/01h188wz4xcv2txfnhg8grjnt2&#34;&gt;Highlights&lt;/a&gt; · &lt;a href=&#34;https://the-ken.com/story/as-filipinos-crave-more-for-local-java-philippine-coffee-farms-brew-a-plan/&#34;&gt;Original&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Philippine Agriculture has always been about rice - not even increasing yield or reducing distribution costs - just about import tariffs and trade controls. It&amp;rsquo;s great to see that despite great odds the coffee industry in the Philippines has started to see green shoots, thanks to increasing domestic (read: robust and less recession-sensitive) demand for artisanal, high value coffee, and an increase in coffee productvity.&lt;/p&gt;
&lt;pre hidden&gt;
newsletter/2023-05-25
&lt;/pre&gt;</description>
    </item>
    
    <item>
      <title>On Newborn Parenting</title>
      <link>https://tjpalanca.com/2023/05/23/on-newborn-parenting.html</link>
      <pubDate>Tue, 23 May 2023 00:00:00 +0800</pubDate>
      
      <guid>http://tjpalanca.micro.blog/2023/05/23/on-newborn-parenting.html</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/169476/2024/b1e89c69e7.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Photo by Kelly Sikkema (Unsplash)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;We recently added a beautiful baby girl to our family, and it&amp;rsquo;s been a wild ride. Since tech workers are a fairly new phenomenon, I suspect that a majority of tech workers are now currently in the same life stage. As this happens, I suspect that tech companies will change how work is done, now that more and more of the workforce leaves their 20s and moves into their 30s.&lt;/p&gt;
&lt;h2 id=&#34;life-adjustments&#34;&gt;Life adjustments&lt;/h2&gt;
&lt;p&gt;Simplify your life. The financial cost of having a child is well-understood and requires no elaboration, but having a child does have a huge time cost (well spent!). In that I&amp;rsquo;ve found that eliminating some distractions, like not following consumer tech so much, eliminating excess subscriptions, has allowed me to focus on work, family life, and one other hobby without sacrificing quality.&lt;/p&gt;
&lt;h2 id=&#34;maintaining-friendships&#34;&gt;Maintaining friendships&lt;/h2&gt;
&lt;p&gt;Do the work to maintain friendships. It&amp;rsquo;s very common for new parents to slink away into the world and cease to develop friendships. I didn&amp;rsquo;t want to do that, so I deliberately put in the work to schedule and follow through on meeting and spending time with friends (whether or not they had kids of their own!). I also think that&amp;rsquo;s why it&amp;rsquo;s important to still have hobbies, so that you can talk about something that isn&amp;rsquo;t your kids.&lt;/p&gt;
&lt;h2 id=&#34;reading-about-parenting&#34;&gt;Reading about parenting&lt;/h2&gt;
&lt;p&gt;It&amp;rsquo;s more important than ever to load up on science-backed ways to effectively parent your child. There&amp;rsquo;s an abundance of (sometimes unsolicited) parenting advice out there, so make sure you are only selecting a few trusted sources: people, books, websites. Otherwise, everything will conflict and be very confusing.&lt;/p&gt;
&lt;h2 id=&#34;tips-and-tricks&#34;&gt;Tips and Tricks&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Invest in a good set of wireless earbuds (I prefer Airpods). There is an non-trivial opportunity to listen to your favorite podcasts while carrying the baby.&lt;/li&gt;
&lt;li&gt;Learn to not panic when the baby is crying - it&amp;rsquo;s just the baby&amp;rsquo;s way of communicating that something is not right. It&amp;rsquo;s very easy to get overwhelmed.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre hidden&gt;
content/thoughts/2023-02-25-newborn-parenting/index.html
thoughts/on-newborn-parenting
content/thoughts/2023-02-25-newborn-parenting
&lt;/pre&gt;</description>
    </item>
    
    <item>
      <title>Nerfing Google Analytics to be more privacy-friendly</title>
      <link>https://tjpalanca.com/2023/05/20/nerfing-google-analytics.html</link>
      <pubDate>Sat, 20 May 2023 01:00:00 +0800</pubDate>
      
      <guid>http://tjpalanca.micro.blog/2023/05/20/nerfing-google-analytics.html</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://images.unsplash.com/photo-1557597774-9d273605dfa9?crop=entropy&amp;amp;cs=tinysrgb&amp;amp;fit=max&amp;amp;fm=jpg&amp;amp;ixid=M3wzNjAwOTd8MHwxfHNlYXJjaHw1fHxwcml2YWN5fGVufDB8MHx8fDE2ODQ2MzkyODh8MA&amp;amp;ixlib=rb-4.0.3&amp;amp;q=80&amp;amp;w=1080&#34; alt=&#34;assorted-color security cameras&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Photo by &lt;a href=&#34;https://unsplash.com/@lianhao?utm_source=Obsidian%20Image%20Inserter%20Plugin&amp;amp;utm_medium=referral&#34;&gt;Lianhao Qu&lt;/a&gt; on &lt;a href=&#34;https://unsplash.com/?utm_source=Obsidian%20Image%20Inserter%20Plugin&amp;amp;utm_medium=referral&#34;&gt;Unsplash&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I am not a lawyer and this is not legal advice. I&amp;rsquo;m only sharing how I navigated privacy legislation and attempted compliance on a personal website.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I recently revamped my personal website to connect more closely to my &amp;ldquo;second brain&amp;rdquo; which is in Obsidian. It&amp;rsquo;s now published via &lt;a href=&#34;https://publish.obsidian.md&#34;&gt;Obsidian Publish&lt;/a&gt;. I&amp;rsquo;m pretty happy with it so far!&lt;/p&gt;
&lt;p&gt;As I polished it up, I realized that I wanted to understand how readers read, interacted, and understood, especially as they go through the digital garden part of the site, hence my exploration of website tracking tools.&lt;/p&gt;
&lt;link rel=&#34;stylesheet&#34; href=&#34;&#34;&gt;
&lt;style&gt;
    @import &#34;https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/atom-one-light.min.css&#34; screen;
    @import &#34;https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/atom-one-dark.min.css&#34; screen and (prefers-color-scheme: dark);
&lt;/style&gt;
&lt;script src=&#34;https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/highlight.min.js&#34;&gt;&lt;/script&gt;

  
  
    
    
      &lt;script src=&#34;https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/languages/[%27js%27].min.js&#34;&gt;&lt;/script&gt;
    
  

&lt;script&gt;
document.addEventListener(&#34;DOMContentLoaded&#34;, function () {
  document.querySelectorAll(&#39;article.post-content pre code&#39;).forEach((el) =&gt; {
    hljs.highlightElement(el);
  });
});
&lt;/script&gt;
&lt;h2 id=&#34;privacy-regulations-have-changed&#34;&gt;Privacy regulations have changed&lt;/h2&gt;
&lt;p&gt;As a data professional, I already knew that the privacy landscape has changed dramatically, including GDPR in the European Union, CCPR in the US State of California, and a whole host of privacy regulations across ASEAN. Even though my site as small, I wanted to make it as transparent and privacy-friendly.&lt;/p&gt;
&lt;h2 id=&#34;exploring-website-tracking-solutions&#34;&gt;Exploring website tracking solutions&lt;/h2&gt;
&lt;p&gt;I used to use (and may eventually move over to&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;) a self-hosted version of Plausible Analytics for privacy-friendly Google Analytics. However, it is still tracking that I need to disclose on my privacy policy, and I&amp;rsquo;m not sure about whether self-hosting analytics solutions is really that responsible compared to relying on services who have teams looking after the security of their data.&lt;/p&gt;
&lt;p&gt;So, I&amp;rsquo;ve decided to take a look at the oft-maligned Google Analytics to see if I can use the new Google Analytics 4 in a more privacy-friendly way, while providing me with free, simple, easy-to-use, and reliable website analytics.&lt;/p&gt;
&lt;h2 id=&#34;nerfing-google-analytics&#34;&gt;Nerfing Google Analytics&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve done quite a bit of research into the various configuration options, and I&amp;rsquo;ve settled on the following adjustments (read: nerfs), to make Google Analytics just do website analytics without all the other stuff.&lt;/p&gt;
&lt;p&gt;By default, here are some assurances:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;IP addresses are not logged or stored as long as you &lt;a href=&#34;https://support.google.com/analytics/answer/9019185?hl=en#zippy=%2Cin-this-article&#34;&gt;use the new GA4 tags&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Here are some of the adjustments that need to be made to the analytics itself:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Configured &lt;a href=&#34;https://developers.google.com/tag-platform/devguides/privacy?sjid=5699448068537016771-AP#other_privacy_parameters&#34;&gt;extra features&lt;/a&gt; in the initial &lt;code&gt;config&lt;/code&gt; call, such as:
&lt;ul&gt;
&lt;li&gt;disabling Google Signals which allows Google to infer interests and other demographics for ad targeting,&lt;/li&gt;
&lt;li&gt;disabling ad personalization signals which allows the events from the tag to be used to personalize ads served to that user.&lt;/li&gt;
&lt;li&gt;enabling restricted data processing which disallows using it for various re-marketing purposes&lt;/li&gt;
&lt;li&gt;disabling URL passthrough which is a way to track across sessions without using cookies.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;pre&gt;&lt;code&gt;// Load Google Analytics with optional features disabled
gtag(&#39;config&#39;, ga_measurement_id, {
	&#39;allow_google_signals&#39;: false,
	&#39;allow_ad_personalization_signals&#39;: false,
	&#39;restricted_data_processing&#39;: true,
	&#39;url_passthrough&#39;: false
});
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Enabled &lt;a href=&#34;https://support.google.com/analytics/answer/9976101?sjid=5699448068537016771-AP&#34;&gt;consent mode&lt;/a&gt; for google analytics, with &lt;code&gt;ad_storage&lt;/code&gt; always set to false since I had no use for the analytics, and &lt;code&gt;analytics_storage&lt;/code&gt; being opt-in for European Union + UK users (due to GDPR) and opt-out for everyone else.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;pre&gt;&lt;code&gt;// Consent Setup
// Default: Opt-Out of Analytics
gtag(&#39;consent&#39;, &#39;default&#39;, {  
	&#39;ad_storage&#39;: &#39;denied&#39;,  
	&#39;analytics_storage&#39;: &#39;granted&#39;
});
// European Union and the United Kingdom: Opt-In to Analytics
gtag(&#39;consent&#39;, &#39;default&#39;, {
	&#39;ad_storage&#39;: &#39;denied&#39;,  
	&#39;analytics_storage&#39;: &#39;denied&#39;,
	&#39;region&#39;: [&#39;BE&#39;, &#39;BG&#39;, &#39;CZ&#39;, &#39;DK&#39;, &#39;DE&#39;, &#39;EE&#39;, &#39;IE&#39;, &#39;GR&#39;, &#39;GB&#39;, &#39;ES&#39;, &#39;FR&#39;, &#39;HR&#39;, &#39;IT&#39;, &#39;CY&#39;, &#39;LV&#39;, &#39;LT&#39;, &#39;LU&#39;, &#39;HU&#39;, &#39;MT&#39;, &#39;NL&#39;, &#39;AT&#39;, &#39;PL&#39;, &#39;PT&#39;, &#39;RO&#39;, &#39;SI&#39;, &#39;SK&#39;, &#39;FI&#39;, &#39;SE&#39;]
});
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Added a tracking consent banner that asks users whether to accept or reject tracking, that then modifies the default consent settings based on whether users accepted or rejected the tracking by setting:
&lt;ul&gt;
&lt;li&gt;the following for when consent is granted (with the consent lasting for 365 days to make it finite), and&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;pre&gt;&lt;code&gt;gtag(&#39;consent&#39;, &#39;update&#39;, {&#39;analytics_storage&#39;: &#39;granted&#39;});
Cookies.set(consent_cookie, &#39;accept&#39;, { expires: 365 });	
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;the following for when consent is not granted. Adding the &lt;code&gt;window&lt;/code&gt; variable is important because even when denied, GA4 still sends &amp;ldquo;cookieless pings&amp;rdquo; for modelling which for me is a gray area but still a form of tracking I don&amp;rsquo;t need.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;pre&gt;&lt;code&gt;window[`ga-disable-${ga_measurement_id}`] = true;
gtag(&#39;consent&#39;, &#39;update&#39;, {&#39;analytics_storage&#39;: &#39;denied&#39;}); 
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Some options that need to be configured on the Google Analytics Property:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Disabled &lt;a href=&#34;https://support.google.com/analytics/answer/12002752?hl=en&amp;amp;utm_id=ad&#34;&gt;granular location data&lt;/a&gt; which collects city-level data (not the actual geolocation) and some user agent and device model information. These are not directly sensitive but may be used for fingerprinting, so I&amp;rsquo;ve decided to do away with it since I have no real use for this information.&lt;/li&gt;
&lt;li&gt;Turned off &lt;a href=&#34;https://support.google.com/analytics/answer/1011397?sjid=5699448068537016771-AP#zippy=%2Cin-this-article&#34;&gt;all data sharing with Google&lt;/a&gt;. Any data sharing needs to be disclosed to users and I had no real use for sharing this information with Google since I did not use digital ads nor serve them on my site. I still linked it to &lt;a href=&#34;https://support.google.com/analytics/answer/10737381?hl=en&#34;&gt;Search Console&lt;/a&gt; as that only shared limited data for SEO optimization which I need.&lt;/li&gt;
&lt;li&gt;Set a retention period. I use 14 months because I want to see seasonality in the data, and I disclosed that in my privacy policy.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;i-added-a-section-to-my-privacy-policy&#34;&gt;I added a section to my privacy policy&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve written down, in as clear language as possible, how I do this in my Privacy Policy. In it, I attempt to explain:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;what tools I used to process data,&lt;/li&gt;
&lt;li&gt;what data those tools collect,&lt;/li&gt;
&lt;li&gt;what uses I have for that data,&lt;/li&gt;
&lt;li&gt;how long I retain that data, and&lt;/li&gt;
&lt;li&gt;what uses I prohibit for the data.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is the section I have for Google Analytics:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Google Analytics Privacy Policy&lt;/p&gt;
&lt;p&gt;I use &lt;a href=&#34;https://analytics.google.com/&#34;&gt;Google Analytics&lt;/a&gt; to understand how users use the website, navigate through the content, and subscribe to the newsletter. This allows me to improve the website&amp;rsquo;s content, understand pain points in navigating the site, and make a more compelling newsletter.&lt;/p&gt;
&lt;p&gt;I do not collect or link any personally identifiable information, including the email collected for the newsletter to this traffic. My use case requires only aggregated and anonymized data and not any specific user&amp;rsquo;s activity.&lt;/p&gt;
&lt;p&gt;All of the following have been done to ensure that we protect privacy as much as possible:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Google Signals measurement is disabled&lt;/li&gt;
&lt;li&gt;Google Ad Personalization is disabled&lt;/li&gt;
&lt;li&gt;Restricted Data Processing is enabled&lt;/li&gt;
&lt;li&gt;URL Passthrough is disabled&lt;/li&gt;
&lt;li&gt;Data Sharing is disabled except for sharing anonymized statistics with Google Search Console, to improve the discoverability of my website.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;https://support.google.com/analytics/answer/9976101?hl=en&#34;&gt;Consent mode&lt;/a&gt; is activated in the website. For users in the European Union, consent is opt-in, while consent is opt-out for the rest of the world.&lt;/p&gt;
&lt;p&gt;Data is retained for a period of 14 months, to ensure that I can understand the trends in seasonality and be able to provide good content at the right time.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I believe it&amp;rsquo;s clear and transparent enough that anyone coming into the website should be able to understand collection and use. I think it&amp;rsquo;s definitely better than those auto-generated ones full of legalese.&lt;/p&gt;
&lt;pre hidden&gt;
Writing/Learning/Nerfing+Google+Analytics+to+be+more+privacy-friendly
&lt;/pre&gt;
&lt;section class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34; role=&#34;doc-endnote&#34;&gt;
&lt;p&gt;If I ever move back to Plausible, I&amp;rsquo;m just going to pay for their hosted version.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</description>
    </item>
    
    <item>
      <title>How the 2008 Financial Crisis Still Affects Us</title>
      <link>https://tjpalanca.com/2022/11/08/how-the-financial.html</link>
      <pubDate>Tue, 08 Nov 2022 11:00:00 +0800</pubDate>
      
      <guid>http://tjpalanca.micro.blog/2022/11/08/how-the-financial.html</guid>
      <description>&lt;p&gt;I had recently stumbled upon &lt;a href=&#34;https://www.youtube.com/embed/U1dpWiZoiJU&#34;&gt;this video&lt;/a&gt; that stitches together the great recession of 2008 to the crisis we are experiencing now. It&amp;rsquo;s a great video, and I recommend watching it in its entirety.&lt;/p&gt;
&lt;p&gt;One thing I found super fun to build was a map of the root causes and effects stemming from 20 years ago all the way to today, and I wanted to share it here in case it helps anyone make sense of the mess.&lt;/p&gt;
&lt;pre class=&#34;mermaid outset&#34;&gt;
flowchart TD
    classDef root fill:#f66;
    classDef effect fill:lightblue;
    classDef speculation fill:lightgreen,stroke:dash;
    PEP --&gt; HPK
	GSA[[1999, Repeal of Glass-Steagall Act]]:::root --&gt; BRI[Banks could start taking risky\ninvestments on their own balance sheet] 
    GSA --&gt; IBI
	S11[[2001, Sep 11 Attacks and\nEnron Scandals]]:::root --&gt; LCC[Low consumer confidence] --&gt; FLR[Fed lowering rates\nto 1% from 7%] --&gt; PEP
	PEP[Period of economic prosperity] --&gt; HON[Everyone who could\nown a home already did]
	HPK[Home prices kept going up] --&gt; SPM
	HON --&gt; SPM[Mortgage lenders started\nissuing adjustable rate\nsub-prime mortgages]
	SPM --&gt; ORM[Mortgages needed to offload\nrisky mortgages]
    FLR --&gt; FLY[Funds looking for\nhigh yield investments]
    FLY --&gt; CDO[CDOs, amalgamation of\n debt divided into tranches, were created] 
    ORM --&gt; CDO
    CRP[Credit rating profits\nhad perverse incentives] --&gt; CRA
    IBI[Investment banks\nhad perverse incentives,\n no penalty for creating risk] --&gt; CDO
    IBI --&gt; FOR[Banks would\nforum shop for credit rating agencies] --&gt; CRP
    CRA[Credit Rating Agencies rated as AAA] --&gt; CDO
    FGE --&gt; AVO[Avoided calling CDSes insurance,\nas they would not be regulated] --&gt; CDS
    FGE[Geniuses were hired to create\nincreasingly complex products] 
    CDS[Mortgage credit default swap or CDS,\ninsurance for failed mortgages,\nwere created]
    CDO --&gt; CDI[CDOs exploded in\nadoption] 
    CDI --&gt; BCDS[Banks continued betting and hedging on\nmortgages and CDOs using CDS] 
    CDS --&gt; BCDS 
    BRI --&gt; BLA[Banks could take on even more risk] --&gt; BCDS
    SEC[[2004, SEC relaxed liquidity requirements\nof 5 biggest banks]]:::root --&gt; BLA
    BCDS --&gt; BLI[Bank Liabilities\nexploded]
    ERE[[2004, economy recovered]]:::root --&gt; FRR[Fed raises rates] 
    FRR --&gt; SPU[Sub-prime mortgages\nstarted to default] 
    SPM --&gt; SPU
    SPU --&gt; SPL[Sub-prime lenders\nstarted to go bankrupt]
    BLI --&gt; BBS[[2008, Bank balance sheets\nwere in trouble]]:::root
    SPL --&gt; CDD[No one wanted to buy\nthe CDOs anymore] --&gt; VM[Value of real estate investments\nplummeted] --&gt; BBS
    BBS --&gt; BSD[Bear Stearns goes bankrupt] --&gt; JPM[JPM bought Bear Stearns at a 98% discount] --&gt; BSF
    BBS --&gt; LBD[Lehman Brothers goes bankrupt due to\n 30x leverage on real estate, hidden by\n accounting gimmicks] --&gt; BSF
    BBS --&gt; GSM[Goldman Sachs and Morgan Stanley bet against\nthe instruments they were still selling to save themselves] --&gt; BSF
    BBS --&gt; ML[Merill-Lynch merges with\nBank of America to save themselves] --&gt; BSF
    BSF[Banking system was frozen,\n no one would lend anything] --&gt; FL[Firms like GE can&#39;t get even short-term credit,\n wages were not paid] 
    BBS --&gt; BOS[[2008, bailouts started,\nUSD2.5T]]:::root --&gt; AIG[Federal Reserve buys AIG,\n because it was deemed too big to fail]
    FL --&gt; BOS --&gt; DTI[Distrust in institutions] --&gt; BTC[[Bitcoin was created]]:::effect
    DTI --&gt; OWS[[Occupy Wall Street started]]:::effect
    BOS --&gt; LTB[Loans to large banks to\nconsolidate and buy up smaller banks]
    BSF --&gt; ICE[Iceland government is in financial trouble\ndue to bank bailouts] --&gt; EUR
    BSF --&gt; GRC[Greece is in financial trouble] --&gt; EUR
    BSF --&gt; UK[UK had to bailout its banking system] --&gt; EUR
    EUR[[Eurozone Debt Crisis\nGreece, Ireland, Portugal, Spain Italy]]:::effect
    BSF --&gt; UN[[6 million unemployed in the US]]:::effect --&gt; DFA
    DTI --&gt; DFA[[Dodd-Frank Act]]:::effect --&gt; DS[Did not seem to work] --&gt; BCSO
    BCSO[Bespoke Collateralized Synthetic Obligations\non Corporate Debt] --&gt; CS[Systemic corporate debt effect?\n Hopefully not]:::speculation
    UN --&gt; REAL[[Real GDP per capita has never recovered since 2008\nA whole generation was poorer than their parents]]:::effect
    EUR --&gt; REAL --&gt; CBR[Central banks kept lowering interest rates]
    CBR --&gt; INT[Cheap interest rates became the norm]
    REAL --&gt; PROD[Productivity of labor has not increased since 2008] 
    COVID[[2020, COVID-19 Pandemic]]:::root --&gt; MP[Further monetary stimulus\nvia asset purchases] 
    MP --&gt; SM[Stock market has been going up] --&gt; INF
    MP --&gt; NFT[Investments in risky assets such as NFTs] --&gt; INF
    COVID --&gt; PRD[Supply chain disruptions] 
    MP --&gt; INF[[Inflation]]:::effect
    PRD --&gt; INF
    INF --&gt; CBR2[Central banks raise interest rates]
    CBR2 --&gt; DMD[Demand for everything reduced]
    DMD --&gt; REC[[2022, Another Recession!]]:::speculation
    INT --&gt; REC 
    PROD --&gt; REC
    INT --&gt; VRM[Lots of variable rate mortgages\nsnapping to market rates soon\nin Australia, UK, EU] --&gt; REC
    CBR2 --&gt; BNK
    INT --&gt; BNK[Credit Suisse is in trouble\nwith their debt] --&gt; REC
&lt;/pre&gt;
&lt;details&gt;&lt;summary&gt;Here&#39;s an image version.&lt;/summary&gt;
&lt;p&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/169476/2024/2022-11-08-cause-and-effect-financial-crisis.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/details&gt;
&lt;p&gt;Here&amp;rsquo;s the original video embedded in case you want to watch the whole video:&lt;/p&gt;
&lt;div class=&#34;resize&#34;&gt;&lt;iframe width=&#34;800&#34; height=&#34;450&#34; src=&#34;https://www.youtube.com/embed/U1dpWiZoiJU&#34; title=&#34;YouTube video player&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&#34; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;script type=&#34;module&#34;&gt;
      import mermaid from &#39;https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.esm.min.mjs&#39;;
      mermaid.initialize({ startOnLoad: true });
&lt;/script&gt;
&lt;style&gt; 
pre.mermaid {
    display: none; 
}
pre.mermaid[data-processed] {
	display: block;
}
&lt;/style&gt;



&lt;pre hidden&gt;
content/thoughts/2022-11-08-financial-crisis/2022-11-08-financial-crisis.html
thoughts/financial-crisis-still-affects-us
&lt;/pre&gt;</description>
    </item>
    
    <item>
      <title>Losing the Wings</title>
      <link>https://tjpalanca.com/2022/11/06/losing-the-wings.html</link>
      <pubDate>Sun, 06 Nov 2022 15:00:00 +0800</pubDate>
      
      <guid>http://tjpalanca.micro.blog/2022/11/06/losing-the-wings.html</guid>
      <description>&lt;p&gt;Portents of economic malaise, from the bird to the elephant, and the ticking time bomb of the Philippines rural banking system.&lt;/p&gt;
&lt;h2 id=&#34;self-hosting-mastodon&#34;&gt;Self-hosting Mastodon&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; I&amp;rsquo;ve since moved to &lt;a href=&#34;https://micro.blog&#34; title=&#34;Micro.Blog&#34;&gt;Micro.Blog&lt;/a&gt; because I didn&amp;rsquo;t really see myself constantly browsing mastodon feeds and using it in the same way I used Twitter. I&amp;rsquo;m very happy to have cut out a huge time sink in my life.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/169476/2024/mastodon.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Behold, Mastodon!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I got deep into Mastodon today - mainly driven by the unsustainability of the platform, but also because the idea of a federated social network is quite interesting. The idea of owning my own piece of the network while still retaining connectivity appeals to me, who once tried to move off of Google&amp;rsquo;s ecosystem and go completely self-hosted.&lt;/p&gt;
&lt;p&gt;My Mastodon profile is &lt;a href=&#34;https://mastodon.tjpalanca.com/@tjpalanca&#34;&gt;here&lt;/a&gt;, and you can follow me from any public or self-hosted server; Mastodon&amp;rsquo;s protocols will take care of the communication between our nodes.&lt;/p&gt;
&lt;p&gt;The terraform code to deploy onto the main kubernetes environment is in the &lt;a href=&#34;https://github.com/tjpalanca/tjcloud/blob/master/modules/mastodon/main.tf&#34;&gt;TJCloud Repo&lt;/a&gt;. It requires the Mastodon Docker image, which is available on &lt;a href=&#34;https://hub.docker.com/r/tootsuite/mastodon&#34;&gt;Docker Hub&lt;/a&gt;, a Postgres database, and a redis instance. There&amp;rsquo;s an option to add ElasticSearch for full-text search capabilities but I didn&amp;rsquo;t bother.&lt;/p&gt;
&lt;p&gt;The main gotchas were ensuring that you had valid redirects for &lt;code&gt;/.well-known/host-meta&lt;/code&gt; and &lt;code&gt;/.well-known/webfinger&lt;/code&gt; at the root of the domain if you weren&amp;rsquo;t serving Mastodon at the top level (I served mine out of &lt;code&gt;mastodon.tjpalanca.com&lt;/code&gt;). I used nifty &lt;a href=&#34;https://developers.cloudflare.com/rules/url-forwarding/dynamic-redirects/&#34;&gt;Cloudflare redirect rules (in beta)&lt;/a&gt; to make that happen.&lt;/p&gt;
&lt;p&gt;The user experience is better than I expected, although there are still quite a few rough edges. Some accounts I could not follow presumably due to some server incompatibility, and there&amp;rsquo;s some sluggishness that is expected because of all the nodes that have to communicate. It is a usable experience though, so the crucial thing is just getting the right communities onto Mastodon so that it can be a viable alternative to Twitter.&lt;/p&gt;
&lt;h2 id=&#34;hard-economic-times&#34;&gt;Hard economic times&lt;/h2&gt;
&lt;p&gt;Ever since the pandemic shut down every aspect of production globally for a good few months, I&amp;rsquo;ve been wondering where the economic devastation would hit. Now it&amp;rsquo;s clear that those times are upon us, I&amp;rsquo;ve not worked in a [[recession]], and find myself wondering what I should do differently - do I prioritize job security, or building up savings, or do I just keep doing what I&amp;rsquo;m doing and hope for the best?&lt;/p&gt;
&lt;h2 id=&#34;what-ive-been-reading&#34;&gt;What I&amp;rsquo;ve been reading&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=-1kznV38bCk&#34;&gt;November 2022 FOMC Press Conference&lt;/a&gt; - Inflation is high, and the Fed continues to raise rates - FOMC meetings are super exciting again. The idea of steering whole economies with just a single policy instrument is so fascinating and brings out the old econ nerd in me.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://the-ken.com/sea/story/the-philippines-rural-banks-are-facing-an-analog-to-digital-existential-crisis/&#34;&gt;The Philippines’ rural banks are facing an analog-to-digital existential crisis - The Ken (Paywalled)&lt;/a&gt; - The Philippine rural banking system is in a period of change due to: (a) increased capital requirements, (b) e-wallets coming for their deposit base, and (c) digitization with staff that are content to stay in less urban areas of the country. Send me a message if you&amp;rsquo;d like a gift link to the full article.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://benn.substack.com/p/how-dbt-fails&#34;&gt;How dbt fails - Benn Stancil&lt;/a&gt; - Benn narrates the evolution of dbt and its company and does a &amp;ldquo;pre-mortem&amp;rdquo; on the company:
&lt;ul&gt;
&lt;li&gt;dbt was initially sold without any preconditions - it&amp;rsquo;s just SQL, but with the new semantic layer stuff introduced in 2022, it is no longer that simple, product development didn&amp;rsquo;t keep up with demand, and it made dbt opaque.&lt;/li&gt;
&lt;li&gt;dbt is still a very good product, because it makes thousands of people capable of doing things they otherwise couldn&amp;rsquo;t, but now it&amp;rsquo;s an incumbent and it&amp;rsquo;s going to have to continue to fight to stay relevant.&lt;/li&gt;
&lt;li&gt;honestly, this was a little depressing, but the fact that we can&amp;rsquo;t imagine dbt Labs crashing and burning is remarkable.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre hidden&gt;
content/news/2022-11-06.html
newsletter/2022-11-06
&lt;/pre&gt;</description>
    </item>
    
    <item>
      <title>Stack Upgrades</title>
      <link>https://tjpalanca.com/2022/10/17/stack-upgrades.html</link>
      <pubDate>Mon, 17 Oct 2022 15:00:00 +0800</pubDate>
      
      <guid>http://tjpalanca.micro.blog/2022/10/17/stack-upgrades.html</guid>
      <description>&lt;h2 id=&#34;1password-can-sign-git-commits-for-you&#34;&gt;1Password can sign git commits for you&lt;/h2&gt;
&lt;p&gt;You can use the beta version of 1Password 8 to &lt;a href=&#34;https://developer.1password.com/docs/ssh/git-commit-signing&#34;&gt;sign git commits&lt;/a&gt;! You can generate a private key with it and then protect that key with your Touch ID. Pretty nifty way to ensure your commits aren&amp;rsquo;t being impersonated.&lt;/p&gt;
&lt;h2 id=&#34;transitioning-to-terraform-cloud&#34;&gt;Transitioning to Terraform Cloud&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve always been loathe to manage cloud infrastructure directly, especially for my personal stack. I&amp;rsquo;ve historically used &lt;a href=&#34;https://www.cloud66.com/&#34;&gt;Cloud66&lt;/a&gt; to manage a Kubernetes cluster and related applications, but apart from the cost, I&amp;rsquo;ve necessarily reached some limitations when accessing more Kubernetes features, or with the domain specific YAML configurations that C66 provides.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve since then moved to Infrastructure-as-Code (Terraform Cloud) for my personal stack &lt;a href=&#34;https://github.com/tjpalanca/tjcloud&#34;&gt;here&lt;/a&gt;. It has Kubernetes on Linode, Cloudflare, Ingresses, OAuth2 Gateways with Keycloak, PGAdmin, a development stack, and my Plausible Analytics tracking - basically everything I need to be fully productive on the cloud, without ever needing to develop locally.&lt;/p&gt;
&lt;h2 id=&#34;from-the-notes-fastapi&#34;&gt;From the notes: FastAPI&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve never seriously taken a look at FastAPI since I&amp;rsquo;ve not had a use case for it, but I finally found the time to do a thorough read through of the documentation. The notes are here: FastAPI.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s pretty nifty, and my next task is to look at leveraging &lt;a href=&#34;https://hotwired.dev&#34;&gt;Hotwire&lt;/a&gt; to build server-render applications with minimal JavaScript, and extend that to an idea I had about making Business Intelligence more impactful.&lt;/p&gt;
&lt;h2 id=&#34;what-ive-been-reading&#34;&gt;What I&amp;rsquo;ve been reading&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.foreignaffairs.com/ukraine/ukraines-path-victory&#34;&gt;Ukraine&amp;rsquo;s Path to Victory - Foreign Policy&lt;/a&gt; is a thorough run-down of how Ukraine can wrest victory from Russia&amp;rsquo;s hands. It&amp;rsquo;s a great article but I&amp;rsquo;m not sure I can really validate all the claims that it makes.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://every.to/almanack/why-the-ethereum-merge-is-a-big-deal&#34;&gt;Why The Ethereum Merge is a Big Deal - Every&lt;/a&gt; is a great explainer on the changes with the Ethereum merge. It&amp;rsquo;s quite exciting to see cryptocurrencies come up with some really grown-up governance process and utilize it to create sweeping changes, particularly to address energy use.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://betanalpha.github.io/assets/case_studies/principled_bayesian_workflow.html&#34;&gt;Towards a Principled Bayesian Workflow - Michael Betancourt&lt;/a&gt; is one of the gems I&amp;rsquo;ve re-read due to a personal project I&amp;rsquo;m tackling. Hands down still one of the best pieces of workflow writing in years, and one that really got me into using Bayesian statistics for my data science work for a while.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre hidden&gt;
content/news/2022-10-17.html
newsletter/2022-10-17
&lt;/pre&gt;</description>
    </item>
    
    <item>
      <title>Notebook-driven development, ASEAN, and Operational Excellence</title>
      <link>https://tjpalanca.com/2022/08/14/notebookdriven-development-asean.html</link>
      <pubDate>Sun, 14 Aug 2022 16:00:00 +0800</pubDate>
      
      <guid>http://tjpalanca.micro.blog/2022/08/14/notebookdriven-development-asean.html</guid>
      <description>&lt;p&gt;This newsletter post is about new Python tools like &lt;code&gt;{nbdev}&lt;/code&gt;, and what I&amp;rsquo;ve encountered trawling through the web.&lt;/p&gt;
&lt;h2 id=&#34;from-the-field-notes&#34;&gt;From the field notes&lt;/h2&gt;
&lt;p&gt;I dove into &lt;code&gt;{nbdev}&lt;/code&gt; from fast.ai, which is a way of developing python software purely from notebooks, which sounds terrifying at first, but becomes a little more sane upon looking in detail. See &lt;a href=&#34;https://news.dataelixir.com/t/t-l-apihky-aghitiku-n/&#34;&gt;this article&lt;/a&gt; for their announcement post for nbdev v2 and integration with Quarto. I ultimately ended up deciding not to adopt this approach in the end, because:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It lacks good editor support - I would love for an extension to help with these &lt;code&gt;#|&lt;/code&gt; comments similar to what Quarto has done with its VS Code extension,&lt;/li&gt;
&lt;li&gt;it&amp;rsquo;s tied to &lt;code&gt;{setuptools}&lt;/code&gt; and doesn&amp;rsquo;t integrate with &lt;code&gt;pyproject.toml&lt;/code&gt; and &lt;code&gt;{poetry}&lt;/code&gt; - I love poetry&amp;rsquo;s dependency management and can&amp;rsquo;t abandon it for nbdev, and&lt;/li&gt;
&lt;li&gt;there&amp;rsquo;s just &lt;em&gt;a lot&lt;/em&gt; of boilerplate which is just a personal preference.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;what-ive-been-reading&#34;&gt;What I&amp;rsquo;ve been reading&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://darimulut.substack.com/p/-even-superman-cannot-solve-the-myanmar&#34;&gt;Even Superman cannot solve the Myanmar problem&lt;/a&gt; - One of my favorite newsletters focusing on ASEAN writes about the difficulties ASEAN has in exerting leverage on the Myanmar junta to create a peaceful resolution to the current coup. It highlights how without any serious attempt at more economic and political integration, the bloc will not be able to withstand both internal and external pressure.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://locallyoptimistic.com/post/people-first-data-stacks/&#34;&gt;People-first data stacks&lt;/a&gt; - It&amp;rsquo;s a good reminder to ensure that good product management practices are adopted whenever we attempt migrating to new &amp;ldquo;Modern Data Stack&amp;rdquo; tech. Adoption is not just a function of fit-for-purpose products but also a process that encourages proper data tool adoption.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://hbr.org/2017/09/why-do-we-undervalue-competent-management?referral=03759&amp;amp;cm_vc=rr_item_page.bottom&#34;&gt;HBR - Why Do We Undervalue Competent Management?&lt;/a&gt; - This is an old one from 2017, but I think the findings are durable:
&lt;ul&gt;
&lt;li&gt;It&amp;rsquo;s hard to achieve operational excellence even with the right structures in place, due to the high variance in management quality across and within countries.&lt;/li&gt;
&lt;li&gt;Imporving management practice is just as costly as capital investment (buildings and equipment)&lt;/li&gt;
&lt;li&gt;Good management correlates with performance &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;Ultimately &lt;math xmlns=&#34;http://www.w3.org/1998/Math/MathML&#34;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mtext&gt;Results&lt;/mtext&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mtext&gt;Strategy&lt;/mtext&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mtext&gt;Execution&lt;/mtext&gt;&lt;/mrow&gt;&lt;annotation encoding=&#34;application/x-tex&#34;&gt;\text{Results} = \text{Strategy} \times \text{Execution}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;, and it&amp;rsquo;s important to instill in managers that &amp;ldquo;being strategic&amp;rdquo; (always a point of constructive feedback given to first-time managers) does not substitute for operational excellence.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre hidden&gt;
newsletter/2022-08-14
content/news/2022-08-14.html
&lt;/pre&gt;
&lt;section class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34; role=&#34;doc-endnote&#34;&gt;
&lt;p&gt;One skeptical thought though is that because this is based on a survey, the causality might be reversed - good performance is associated with increased investment in management practices due to lower pressure.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</description>
    </item>
    
    <item>
      <title>Restoring modification timestamps in cloned git repos</title>
      <link>https://tjpalanca.com/2022/08/07/restoring-modification-timestamps.html</link>
      <pubDate>Sun, 07 Aug 2022 09:00:00 +0800</pubDate>
      
      <guid>http://tjpalanca.micro.blog/2022/08/07/restoring-modification-timestamps.html</guid>
      <description>&lt;p&gt;I have a &lt;a href=&#34;https://github.com/tjpalanca/tjpalanca.github.io/blob/master/.github/workflows/publish.yml&#34;&gt;GitHub Actions Workflow&lt;/a&gt; that clones the repo, renders the content, then pushes it up to the &lt;code&gt;gh-pages&lt;/code&gt; branch to be published. However, the ordering of the field notes was dependent on the file modification timestamps. I imagine workflows that use Make will also be affected by this issue.&lt;/p&gt;
&lt;link rel=&#34;stylesheet&#34; href=&#34;&#34;&gt;
&lt;style&gt;
    @import &#34;https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/atom-one-light.min.css&#34; screen;
    @import &#34;https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/atom-one-dark.min.css&#34; screen and (prefers-color-scheme: dark);
&lt;/style&gt;
&lt;script src=&#34;https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/highlight.min.js&#34;&gt;&lt;/script&gt;

  
  
    
    
      &lt;script src=&#34;https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/languages/[%27yaml%27].min.js&#34;&gt;&lt;/script&gt;
    
  

&lt;script&gt;
document.addEventListener(&#34;DOMContentLoaded&#34;, function () {
  document.querySelectorAll(&#39;article.post-content pre code&#39;).forEach((el) =&gt; {
    hljs.highlightElement(el);
  });
});
&lt;/script&gt;
&lt;p&gt;I needed a solution that restored the modification timestamps after the repo is cloned. I chanced upon &lt;a href=&#34;https://github.com/MestreLion/git-tools&#34;&gt;&lt;code&gt;git-tools&lt;/code&gt;&lt;/a&gt; which contained a utility called &lt;code&gt;git-restore-mtime&lt;/code&gt; that served this purpose perfectly.&lt;/p&gt;
&lt;p&gt;To achieve this, I added a step to install and execute after cloning. Additionally, the whole history needs to be cloned by setting &lt;code&gt;fetch-depth&lt;/code&gt; to &lt;code&gt;0&lt;/code&gt; for the &lt;code&gt;actions/checkout&lt;/code&gt; action.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;- name: Check out repository
  uses: actions/checkout@v2
  with: 
    fetch-depth: 0

- name: Restore modification timestamps 
  run: sudo apt-get install -y git-restore-mtime &amp;amp;&amp;amp; git restore-mtime
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Note that this requires &lt;code&gt;git&lt;/code&gt; and a modern &lt;code&gt;python&lt;/code&gt; version. GitHub Actions does come with Python pre-installed, so this works well.&lt;/p&gt;
&lt;pre hidden&gt;
content/notes/til/git_restore_mtime.html
learning/git-restore-mtime
&lt;/pre&gt;
&lt;section class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34; role=&#34;doc-endnote&#34;&gt;
&lt;p&gt;I presume that the modification times are taken from the git log, but I may be mistaken.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</description>
    </item>
    
    <item>
      <title>Experimentation, Self-Service Analytics, and Forgiveness</title>
      <link>https://tjpalanca.com/2022/08/07/experimentation-selfservice-analytics.html</link>
      <pubDate>Sun, 07 Aug 2022 02:00:00 +0800</pubDate>
      
      <guid>http://tjpalanca.micro.blog/2022/08/07/experimentation-selfservice-analytics.html</guid>
      <description>&lt;h2 id=&#34;what-ive-been-reading&#34;&gt;What I&amp;rsquo;ve been reading&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://roundup.getdbt.com/p/down-with-experimentation-maximalism&#34;&gt;Down with Experimentation Maximalism&lt;/a&gt; is from the Analytics Engineering Roundup, and offers a great framework for thinking about how to use experimentation and product development:
&lt;ul&gt;
&lt;li&gt;before product-market fit (PMF), you should be developing bold hypothesis and attempting to get at the root of issues, which can just rely on descriptive statistics.&lt;/li&gt;
&lt;li&gt;after PMF,&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; you should more likely rely on a structured experimentation program to eke out the maximum returns from your current product&amp;rsquo;s monetization and quality.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://roundup.getdbt.com/p/four-frameworks-for-self-service?s=r&amp;amp;triedSigningIn=true&#34;&gt;Four frameworks for self-service analytics&lt;/a&gt; is another great newsletter post from the Analytics Engineering Roundup.
&lt;ul&gt;
&lt;li&gt;Frameworks always exist, even if they are just implicitly used.&lt;/li&gt;
&lt;li&gt;All have assumptions, implications, and limitations, and the wisdom is knowing how to translate those into decisions, and when to use a different framework.&lt;/li&gt;
&lt;li&gt;In self-serve analytics, there are a few frameworks that are commonly used:
&lt;ul&gt;
&lt;li&gt;to save analyst time for higher-level decisions -&amp;gt; usually ends up in a situation where the lowest-value items have the best documentation and support&lt;/li&gt;
&lt;li&gt;to break down data silos -&amp;gt; ends up in a situation where most time is spent on band-aid solutions that don&amp;rsquo;t address fundamental infrastructure issues&lt;/li&gt;
&lt;li&gt;to provide a single source of truth for highest value issues -&amp;gt; author clearlypresents this as a more preferred option =&amp;gt; ends up in a situation where the most time is spent on the highest leverage things&lt;/li&gt;
&lt;li&gt;to increase data-driven decision making =&amp;gt; too vague of a framework for anyone to most concretely facilitate in while performing their daily roles.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;I really like the iteration he&amp;rsquo;s come up with, breaking it down in 2 dimensions (positive vs normative, and within different decision types): &lt;img src=&#34;https://cdn.uploads.micro.blog/169476/2024/20220808-self-service-framework.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.theregister.com/2022/08/03/nist_quantum_resistant_crypto_cracked/&#34;&gt;Quantum Resistant Crypto Hacked&lt;/a&gt; is a reminder that when using blockchain technologies, trust shifts from human actors to the encryption algorithms and the rules of governance encoded in that blockchain. Risk management, instead of being rendered unnecessary, shifts from those human systems to the technologies employed.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;today-i-learned&#34;&gt;Today I learned&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Restoring modification timestamps in cloned git repos - This is useful in CI/CD workflows that rely on modification timestamps.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;peaceable-disposition-indeed&#34;&gt;Peaceable disposition, indeed&lt;/h2&gt;
&lt;p&gt;One of my favorite examples of sarcasm as early as the 1800s:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Mine is a most peaceable disposition. My wishes are: a humble cottage with a thatched roof, but a good bed, good food, the freshest milk and butter, flowers before my window, and a few fine trees before my door; and if God wants to make my happiness complete, he will grant me the joy of seeing some six or seven of my enemies hanging from those trees. Before death I shall, moved in my heart, forgive them all the wrong they did me in their lifetime. One must, it is true, forgive one&amp;rsquo;s enemies&amp;ndash; but not before they have been hanged. &lt;cite&gt;Heinrich Heine&lt;/cite&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;section class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34; role=&#34;doc-endnote&#34;&gt;
&lt;p&gt;I did add a note here, though, that even post-PMF companies should revert back to the first approach when venturing into new markets or product lines.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</description>
    </item>
    
    <item>
      <title>New Python Libraries, Quarto, and Viruses</title>
      <link>https://tjpalanca.com/2022/07/31/new-python-libraries.html</link>
      <pubDate>Sun, 31 Jul 2022 16:00:00 +0800</pubDate>
      
      <guid>http://tjpalanca.micro.blog/2022/07/31/new-python-libraries.html</guid>
      <description>&lt;p&gt;In this newsletter issue, I talk about my revised Python stack, getting COVID, and Quarto.&lt;/p&gt;
&lt;h2 id=&#34;python-tooling&#34;&gt;Python Tooling&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve spent quite a bit of time dabbling in Python recently, so I decided to do another sweep of the ecosystem to see how things have improved. These are the new gems I&amp;rsquo;ve adopted into my set.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://python-poetry.org&#34;&gt;&lt;code&gt;poetry&lt;/code&gt;&lt;/a&gt; is a python dependency manager that reminds me of &lt;code&gt;npm&lt;/code&gt;, and it just works. Dependency management via &lt;code&gt;conda&lt;/code&gt; or plain &lt;code&gt;virtualenv&lt;/code&gt;s has always been such a pain, and this really resolves one of Python&amp;rsquo;s key pain points for me. It even extends to publishing modules so that we don&amp;rsquo;t have to use &lt;code&gt;setuptools&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;A big reason why I used R when I started learning data science was because I really disliked &lt;code&gt;pandas&lt;/code&gt;&#39; API. &lt;a href=&#34;https://github.com/pola-rs/polars&#34;&gt;&lt;code&gt;polars&lt;/code&gt;&lt;/a&gt; is an alternative data frame written in Rust that comes with a Python interface. It not only boasts superior performance through parallel processing, it also was an opportunity to design a really good interface that is closer to &lt;code&gt;{dplyr}&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://pydantic-docs.helpmanual.io/&#34;&gt;&lt;code&gt;pydantic&lt;/code&gt;&lt;/a&gt; is a data validation library that allows you to use functional programming concepts in Python really easily. It reminds me of using types in Julia. Additionally it forms the basis for many other popular Python libraries like &lt;code&gt;fastapi&lt;/code&gt; and &lt;code&gt;sqlmodel&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Other libraries as I discover them are going to be in Python Libraries.&lt;/p&gt;
&lt;h2 id=&#34;quarto&#34;&gt;Quarto&lt;/h2&gt;
&lt;p&gt;It seems that RStudio has also decided to give Python a closer look now. They&amp;rsquo;ve even &lt;a href=&#34;https://www.rstudio.com/blog/rstudio-is-becoming-posit/&#34;&gt;rebranded to Posit&lt;/a&gt; to reflect the fact that they would not just be working on the R ecosystem moving forward. I am personally very excited about this change.&lt;/p&gt;
&lt;p&gt;One of the first projects they came up with is &lt;a href=&#34;https://quarto.org/&#34;&gt;Quarto&lt;/a&gt;, a scientific publishing tool written in Typescript but supporting R, Python, Julia, and Javascript (of the Observable Notebook variety). This allows all scientific languages to be used in one site.&lt;/p&gt;
&lt;p&gt;I was so excited that I spend my period of virus isolation mindlessly migrating my blog to this new format, so now I can author any piece of scientific publishing. If you notice that the blog looks slightly different, that&amp;rsquo;s because it&amp;rsquo;s now reborn as a Quarto Blog.&lt;/p&gt;
&lt;h2 id=&#34;testing-positive&#34;&gt;Testing Positive&lt;/h2&gt;
&lt;p&gt;I tested positive for COVID this week and am writing this while in isolation. I&amp;rsquo;ve ruminated on how annoying it is to spend 2 years ducking and dodging the virus only to get it now when we have a newborn, but I&amp;rsquo;ve convinced myself I&amp;rsquo;m underestimating what could have happened when my wife was still pregnant, or before we got vaccinated.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m almost out of it, and have learned a great deal about ART and PCR false positive and false negative rates.&lt;/p&gt;
&lt;pre hidden&gt;
content/news/2022-07-31.html
newsletter/2022-07-31
&lt;/pre&gt;</description>
    </item>
    
    <item>
      <title>Decision Reversibility</title>
      <link>https://tjpalanca.com/2021/12/01/decision-reversibility.html</link>
      <pubDate>Wed, 01 Dec 2021 15:00:00 +0800</pubDate>
      
      <guid>http://tjpalanca.micro.blog/2021/12/01/decision-reversibility.html</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/169476/2024/uturn.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;You can always make fast decisions if decisions are reversible. Don&amp;rsquo;t get caught up in analysis paralysis when you could have committed and reverted in the same amount of time.&lt;/p&gt;
&lt;h2 id=&#34;ensure-that-analysis-effort-leads-to-better-or-faster-decisions&#34;&gt;Ensure that analysis effort leads to better or faster decisions&lt;/h2&gt;
&lt;p&gt;One thing I always encourage data people to do is to determine exactly how analysis effort will lead to a better or faster decision:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;One trick can be as simple as plotting out (with your stakeholder) what action would be taken as a result of the analysis.&lt;/li&gt;
&lt;li&gt;Another is thinking about decision reversibility, especially in startups where your analysis bandwidth is necessarily limited and precious.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;highly-reversible-decisions-dont-require-a-lot-of-pre-decision-analysis&#34;&gt;Highly reversible decisions don’t require a lot of pre-decision analysis&lt;/h2&gt;
&lt;p&gt;The amount of time spent doing pre-decision data analysis on a decision should be inversely proportional to the reversibility of that decision. It’s more beneficial to do an analysis for launching a new market (very hard to &amp;ldquo;unlaunch&amp;rdquo; a market) than changing copy of a website (just throw some ideas and see what sticks using some experimentation).&lt;/p&gt;
&lt;p&gt;I find that I save people a lot of time on highly reversible decisions by just telling them to launch and iterate instead of spending tons of time digging into event logs and user behavior, and as a bonus, I get to spend my analysis bandwidth on less reversible, and therefore more consequential, decisions.&lt;/p&gt;
&lt;pre hidden&gt;
thoughts/decision-reversibility
content/thoughts/2021-12-01-decision-reversibility/decision-reversibility.html
&lt;/pre&gt;</description>
    </item>
    
    <item>
      <title>Analysis quality, software engineering, and proprietary systems</title>
      <link>https://tjpalanca.com/2021/11/30/analysis-quality-software.html</link>
      <pubDate>Tue, 30 Nov 2021 02:00:00 +0800</pubDate>
      
      <guid>http://tjpalanca.micro.blog/2021/11/30/analysis-quality-software.html</guid>
      <description>&lt;h2 id=&#34;analysis-quality&#34;&gt;Analysis quality&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;One of the great ironies of the analytics industry is its utter inability to measure itself. Despite “defining key metrics” for ambiguous business processes being a key responsibility in &lt;a href=&#34;https://careers.airbnb.com/positions/3398395/&#34;&gt;nearly&lt;/a&gt; &lt;a href=&#34;https://stripe.com/jobs/listing/data-analyst-payments/2934034&#34;&gt;every&lt;/a&gt; &lt;a href=&#34;https://boards.greenhouse.io/airtable/jobs/4999279002&#34;&gt;analytics&lt;/a&gt; &lt;a href=&#34;https://www.lifeatspotify.com/jobs/data-scientist-personalization-2&#34;&gt;role&lt;/a&gt;, we &lt;a href=&#34;https://hex.tech/blog/data-team-roi&#34;&gt;enthusiastically reject&lt;/a&gt; doing it for ourselves. - &lt;em&gt;&lt;strong&gt;Benn Stancil&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;There’s been a lot of ink spilled on what constitutes a good analysis, but I’ve found there’s a common thread coalescing around the idea that &lt;strong&gt;in a world without counterfactuals and rife with complex (&lt;a href=&#34;https://en.wikipedia.org/wiki/Emergence&#34;&gt;emergent&lt;/a&gt;) systems fast decisions are good decisions.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Making good business decisions is about making many falsifiable business decisions.&lt;/strong&gt; Most of our business ideas are bad, and there is little we can do to improve the quality of our business decisions, so the next best course of action is to make many business decisions and ensure that we can evaluate them objectively. Eric Colson lays it out extremely well in his article. &lt;a href=&#34;https://multithreaded.stitchfix.com/blog/2021/11/04/sobering-truth/&#34;&gt;Article&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Analysis quality is all about speed to action.** Benn Stancil writes about how a very simplified, non-nuanced metric such as speed to action is a good way to measure analysis quality. I think it’s an excellent take; it forces our analysts to stop hiding behind unnecessary nuance and details and express real empathy for the decisions we hope to influence. &lt;a href=&#34;https://t.co/hpKqHueJ7p?ssr=true&#34;&gt;Article&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;properietary-systems&#34;&gt;Properietary systems&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Bank Python is diverging from open source python, i.e. the atrophy of skill in proprietary software environments.&lt;/strong&gt; Cal Peterson writes about the different monolithic systems that exist in investment banks and how they are extremely different from everything outside of it. It’s an interesting look at how technology practices harden for specific industries. &lt;a href=&#34;https://calpaterson.com/bank-python.html&#34;&gt;Article&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;software-engineering&#34;&gt;Software engineering&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;People talk about innovation a whole lot, but what they are usually looking for is cheap wins and novelty. If you truly innovate, and change the way that people have to do things, expect mostly negative feedback. If you believe in what you’re doing, and know it will really improve things, then brace yourself for a long battle. &lt;em&gt;- &lt;strong&gt;Justin Etheridge&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;20 Things learned over 20 years as a software engineer.&lt;/strong&gt; Engineering is ultimately a creative process - what that means is that amount of calories spent banging out code ona keyboard does not equal to more productivity (it may even mean less). Maturity in software engineering involves guiding the creative process in a more principled way before starting work. &lt;a href=&#34;https://www.simplethread.com/20-things-ive-learned-in-my-20-years-as-a-software-engineer/&#34;&gt;Article&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;finding-a-micro-blogging-platform&#34;&gt;Finding a micro-blogging platform&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;This information is no longer up to date as clearly I am no longer using this solution for micro-blogging.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I’ve been trying to find a good blogging platform lately. I’d like to be able to: (a) write easily on an iPad and a Mac (maybe even on iPhone), (b) create fast feedback loops for content, and (c) be able to expand more advanced non-text elements, such as images and code blocks.&lt;/p&gt;
&lt;p&gt;I want this separate from my main blog because I want to write more updates on my life, random thoughts and interests, and keep the main blog free for more longform analysis-type articles (because after all the &lt;code&gt;distill&lt;/code&gt; format looks super weird for informal thinking).&lt;/p&gt;
&lt;p&gt;I tried apps like &lt;a href=&#34;https://ulysses.app&#34;&gt;Ulysses&lt;/a&gt; or &lt;a href=&#34;https://ia.net/writer&#34;&gt;iA Writer&lt;/a&gt;, but find that they are way too focused on the writing part and only publish to separate managed platforms like Wordpress or Ghost. Code blocks, tables, and images prove to be really difficult.&lt;/p&gt;
&lt;p&gt;I also likewise looked at things in the R world like &lt;code&gt;{blogdown}&lt;/code&gt; but found that the feedback loops are too slow, and working with them on an iPad would be quite clunky.&lt;/p&gt;
&lt;p&gt;I settled on what was starting me in the face anyway, which is Notion exposed in a subdomain via Cloudflare Workers (the overall solution is called &lt;a href=&#34;https://fruitionsite.com/771ef38657244c27b9389734a9cbff44&#34;&gt;Fruition&lt;/a&gt;). I can easily edit this anywhere (except maybe offline where I’ll use a standard markdown editor), then import afterward, it’s WYSIWYG so instant feedback loops, and can still accommodate some advanced code blocks and embeds.&lt;/p&gt;
&lt;pre hidden&gt;
newsletter/2021-11-30
&lt;/pre&gt;</description>
    </item>
    
    <item>
      <title>The Map is not the Territory</title>
      <link>https://tjpalanca.com/2021/09/18/the-map-is.html</link>
      <pubDate>Sat, 18 Sep 2021 15:00:00 +0800</pubDate>
      
      <guid>http://tjpalanca.micro.blog/2021/09/18/the-map-is.html</guid>
      <description>&lt;p&gt;The map is not the territory; seek ground truth whenever possible to accelerate learning.&lt;/p&gt;
&lt;p&gt;uberHOP is a little example from my experience. The product was a point-to-point (a.k.a UV express) service Uber launched in Manila, along with Seattle and Toronto.&lt;/p&gt;
&lt;p&gt;The way it worked was simple: you would make a request to take a specific route during peak hours, and we would batch you in with up to 6 people to take a high occupancy vehicle along the route.&lt;/p&gt;
&lt;h2 id=&#34;uberhop-needed-high-occupancy-to-become-profitable&#34;&gt;uberHOP needed high occupancy to become profitable&lt;/h2&gt;
&lt;p&gt;The pricing was at a 70% discount to uberX (the traditional ride product), and drivers were guaranteed earnings, so there was a minimum average occupancy needed to hit profitability. To get to that high occupancy, we needed to ensure that the routes selected were of high quality.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/169476/2024/uberhop1.png&#34; alt=&#34;A slide showing a news article and the interface for uberHOP.&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;initial-approach-clustering&#34;&gt;Initial approach: Clustering!&lt;/h2&gt;
&lt;p&gt;My first instinct as a data person was [[clustering]]. We needed to find pairs of longitude and latitude that had enough pickup and dropoff density in them to have a decent chance of becoming profitable.&lt;/p&gt;
&lt;p&gt;The launch routes were selected using this method, but we had limited success, even after a novelty period, cancellation rates remained high. I tried different algorithms, distance metrics, using various map features, dispatch radiuses, all for very incremental gains.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/169476/2024/uberhop2.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;We used clustering to find initial approaches, but the results were not as expected.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&#34;seeking-ground-truth&#34;&gt;Seeking ground truth&lt;/h2&gt;
&lt;p&gt;What did help was to actually seek ground truth, and the solution was embarrassingly obvious.&lt;/p&gt;
&lt;p&gt;When we physically went to the most successful route&amp;rsquo;s pickup, the two key factors were: (a) high density residential buildings (as opposed to commercial), and (b) a driveway so drivers weren&amp;rsquo;t a moving target.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/169476/2024/uberhop3.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;SM Light Residences was a great pickup that embodied all the factors that were required for a good pickup&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;We were able to turn the product profitable in a few weeks! This was easy to do because I was physically located in the market. However, this is a perennial challenge for distributed teams, so it&amp;rsquo;s even more important to consciously seek ground truth in those situations.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s an abridged version in Twitter thread form:&lt;/p&gt;
&lt;blockquote class=&#34;twitter-tweet&#34;&gt;&lt;p lang=&#34;en&#34; dir=&#34;ltr&#34;&gt;The map is not the territory; seek ground truth whenever possible to accelerate learning. 🧵&lt;br&gt;&lt;br&gt;Here&amp;#39;s a little example from my experience: uberHOP was a point-to-point (a.k.a UV express) service we launched in Manila. We needed high occupancy so route selection was critical. &lt;a href=&#34;https://t.co/dfGdDlfE1j&#34;&gt;pic.twitter.com/dfGdDlfE1j&lt;/a&gt;&lt;/p&gt;&amp;mdash; TJ Palanca (@tjpalanca) &lt;a href=&#34;https://twitter.com/tjpalanca/status/1438812960692977668?ref_src=twsrc%5Etfw&#34;&gt;September 17, 2021&lt;/a&gt;&lt;/blockquote&gt;
&lt;pre hidden&gt;
aliases:
  - content/thoughts/2021-09-18-the-map-is-not-the-territory/the-map-is-not-the-territory.html
  - posts/2021-09-18-the-map-is-not-the-territory
  - thoughts/the-map-is-not-the-territory
&lt;/pre&gt;
</description>
    </item>
    
    <item>
      <title>Data analytics in emerging markets</title>
      <link>https://tjpalanca.com/2021/09/16/data-analytics-in.html</link>
      <pubDate>Thu, 16 Sep 2021 00:00:00 +0800</pubDate>
      
      <guid>http://tjpalanca.micro.blog/2021/09/16/data-analytics-in.html</guid>
      <description>&lt;p&gt;I was invited by the Civil Service Commission of the Philippines to provide a short talk on data analytics in emerging markets.&lt;/p&gt;
&lt;p&gt;I wanted to provide an organization with a rough blueprint to building a sustainable data practice in an emerging market context, including to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;set a Data Strategy&lt;/li&gt;
&lt;li&gt;building Decision Systems&lt;/li&gt;
&lt;li&gt;achieve Data Adoption&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The slides are here:&lt;/p&gt;
&lt;div class=&#34;resize&#34;&gt;&lt;iframe src=&#34;https://docs.google.com/presentation/d/e/2PACX-1vToex5yLhSmPBG23ttRx18lNvyXDl19qkl1DQYFIhlvO6EMkT7Ud5tNpbczRgQfKTXNuavrg9gq6dwd/embed?start=false&amp;loop=false&amp;delayms=10000&#34; frameborder=&#34;0&#34; width=&#34;960&#34; height=&#34;569&#34; allowfullscreen=&#34;true&#34; mozallowfullscreen=&#34;true&#34; webkitallowfullscreen=&#34;true&#34;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;pre hidden&gt;
talks/data-analytics-in-emerging-markets
&lt;/pre&gt;</description>
    </item>
    
    <item>
      <title>Harnessing the Power of Data</title>
      <link>https://tjpalanca.com/2020/11/24/harnessing-the-power.html</link>
      <pubDate>Tue, 24 Nov 2020 01:00:00 +0800</pubDate>
      
      <guid>http://tjpalanca.micro.blog/2020/11/24/harnessing-the-power.html</guid>
      <description>&lt;p&gt;Prepared and presented this talk along with the data team at First Circle at Philippine Startup Week 2020. Focused on the practical aspects of actually creating a data function within a startup, from Data Strategy, to Data Engineering, and Data Analytics. We intentionally skipped Data Science.&lt;/p&gt;
&lt;div class=&#34;resize&#34;&gt;&lt;iframe width=&#34;560&#34; height=&#34;315&#34; src=&#34;https://www.youtube.com/embed/pHv5hEOaXbY&#34; title=&#34;YouTube video player&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&#34; allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;p&gt;Here are the slides for reference:&lt;/p&gt;
&lt;div class=&#39;resize&#39;&gt;&lt;iframe src=&#34;https://docs.google.com/presentation/d/e/2PACX-1vRHW2JOUMBCbqfE2YGAsNhWbHwSxBZsBJmfdLudGxHqVQHVYCwEpFFDbQ9EtVXo3rvxBavIj3NIFZQj/embed?start=false&amp;loop=false&amp;delayms=3000&#34; frameborder=&#34;0&#34; width=&#34;960&#34; height=&#34;569&#34; allowfullscreen=&#34;true&#34; mozallowfullscreen=&#34;true&#34; webkitallowfullscreen=&#34;true&#34;&gt;&lt;/iframe&gt;&lt;/div&gt;
</description>
    </item>
    
    <item>
      <title>A data team&#39;s product is decisions</title>
      <link>https://tjpalanca.com/2020/10/11/a-data-teams.html</link>
      <pubDate>Sun, 11 Oct 2020 00:00:00 +0800</pubDate>
      
      <guid>http://tjpalanca.micro.blog/2020/10/11/a-data-teams.html</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/169476/2024/data-has-a-better-idea.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Photo by Franki Chamaki (Unsplash)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Making your data team&amp;rsquo;s main product decisions, as opposed to reports, models, or engineered systems, is a great way of communicating the value of the team internally and externally.&lt;/p&gt;
&lt;h2 id=&#34;data-teams-dont-come-built-in&#34;&gt;Data teams don&amp;rsquo;t come built-in&lt;/h2&gt;
&lt;p&gt;Most data teams don&amp;rsquo;t come &amp;ldquo;built-in&amp;rdquo; to most companies that don&amp;rsquo;t start with data as the primary product.&lt;/p&gt;
&lt;p&gt;There will usually be a team in charge of sales and distribution (Sales, Marketing, Growth, Operations), a team in charge of product purchasing or development (Product, Engineering), and general administration (Finance, Leadership, HR).&lt;/p&gt;
&lt;p&gt;By the time companies begin to even consider the concept of a data team is when they have achieved some non-trivial amount of scale (read: post Product-Market fit).&lt;/p&gt;
&lt;p&gt;That doesn&amp;rsquo;t mean that data teams are of no utility - it just means that people who find themselves being data person #1 in a startup or large company usually encounter the issue of either finding the areas for which they or their team can be responsible or for proving relevance or value add to the business.&lt;/p&gt;
&lt;p&gt;One thing I have found very useful is centering your data team&amp;rsquo;s product around &lt;strong&gt;decisions&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&#34;a-data-teams-product-is-decisions&#34;&gt;A data team&amp;rsquo;s product is decisions&lt;/h2&gt;
&lt;p&gt;Regardless of where the type of data work is on the spectrum between data engineering, analytics, business intelligence, or modelling, the product of a data team is not the above, but decisions.&lt;/p&gt;
&lt;p&gt;At First Circle, our team&amp;rsquo;s goal is to ensure that &lt;strong&gt;all decisions, whether strategic or operational, augmented or automated with data.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;types-of-decisions&#34;&gt;Types of decisions&lt;/h2&gt;
&lt;p&gt;There are two types of decisions that are usually what a data team should target: (a) bespoke, luxury strategic decisions, and (b) mass-produced, repeatable, and fast operational decisions.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/169476/2024/strategic-vs-operational.png&#34; alt=&#34;Strategic vs Operational Decisions&#34; title=&#34;Strategic vs Operational Decisions&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;strategic-decisions&#34;&gt;Strategic Decisions&lt;/h3&gt;
&lt;p&gt;Strategic decisions are luxury, bespoke, and artisanal decisions; decisions that are made infrequently but have a large impact. There is a large amount of uncertainty and it&amp;rsquo;s unlikely there is going to be a frequent feedback loop. For augmenting these decisions one would benefit from a business mindset, communication skills, and an ability to extract information from limited data (heavily custom linear models or Bayesian techniques).&lt;/p&gt;
&lt;p&gt;Examples of strategic decisions are product or market expansions, budget and headcount planning, competitive analysis, mergers, and acquisitions.&lt;/p&gt;
&lt;h3 id=&#34;operational-decisions&#34;&gt;Operational Decisions&lt;/h3&gt;
&lt;p&gt;Operational decisions are mass-produced, repeatable decisions that are made hundreds or thousands of times a day. They may not be that impactful individually, but the sheer volume makes optimizing these kinds of decisions important as well. The decision systems behind operational decisions are usually algorithmic in order to be cost-beneficial and would need machine learning, data science, and strong data engineering to productionize a system.&lt;/p&gt;
&lt;p&gt;Examples of operational decisions are any per-transaction decisions, such as a bank&amp;rsquo;s personal loan grant algorithm, a ridesharing company&amp;rsquo;s driver dispatch algorithm, or an e-commerce company&amp;rsquo;s recommendation algorithm.&lt;/p&gt;
&lt;p&gt;Individuals who come into data science usually only think of the second type of a decision, but it&amp;rsquo;s critical that data teams address both if they are the only team dealing with data, as running a business successfully requires both types of decisions to be data-driven.&lt;/p&gt;
&lt;h2 id=&#34;considering-both-types-in-a-data-teams-roadmap&#34;&gt;Considering both types in a data team&amp;rsquo;s roadmap&lt;/h2&gt;
&lt;p&gt;When designing a data team&amp;rsquo;s roadmap, I&amp;rsquo;ve found that it&amp;rsquo;s important to be conscious of the difference between the two types of &amp;ldquo;products&amp;rdquo;, and to ensure that the mix is appropriate for the business.&lt;/p&gt;
&lt;p&gt;Too much spent on operational decisions may mean a long, drawn-out slog to first value delivered, as a lot of data collection and experimentation has to take place.&lt;/p&gt;
&lt;p&gt;Too much spent on strategic decisions may mean that your company doesn&amp;rsquo;t actually realize true technology value from data, you will then operate much like a traditional company that is just a little smarter with their information.&lt;/p&gt;
&lt;p&gt;Worse and more common is mixing up the two; treating strategic decisions as operational or vice versa. I&amp;rsquo;ve seen many situations where people are using random forest variable important for a one-time decision (&amp;ldquo;insighting&amp;rdquo;), or where a human&amp;rsquo;s role in a process is only pushing buttons and not actually applying any judgment.&lt;/p&gt;
&lt;p&gt;What I suggest is laying these out in a board and highlighting the high priority items in both buckets. This exercise should be done in conjunction with your team&amp;rsquo;s planning cycle.&lt;/p&gt;
&lt;p&gt;In a future post, I&amp;rsquo;ll write about how to structure a team that addresses these issues in a holistic way, and avoids the common pitfalls associated with &lt;a href=&#34;https://multithreaded.stitchfix.com/blog/2019/03/11/FullStackDS-Generalists/&#34;&gt;&amp;ldquo;pin factory&amp;rdquo; model&lt;/a&gt; that many new data teams adopt.&lt;/p&gt;
&lt;pre hidden&gt;
posts/2020-10-11-data-team-value
articles/data-team-value
&lt;/pre&gt;</description>
    </item>
    
    <item>
      <title>Dealing with model uncertainty in data products</title>
      <link>https://tjpalanca.com/2020/08/06/dealing-with-model.html</link>
      <pubDate>Thu, 06 Aug 2020 00:00:00 +0800</pubDate>
      
      <guid>http://tjpalanca.micro.blog/2020/08/06/dealing-with-model.html</guid>
      <description>&lt;p&gt;Uncertainty can stall the development of data products, particularly in areas where there are domain experts that don&amp;rsquo;t necessarily understand the end goal.&lt;/p&gt;
&lt;p&gt;As software moves closer and closer to traditional industry (think ridesharing, FinTech, AgriTech, etc.), more and more data products are being built to support or automate decisions that would normally be made by human experts. As this happens, there typically is a valid doubt as to whether a data product can automate a solution to a high enough standard that it becomes worth the investment.&lt;/p&gt;
&lt;p&gt;When unmanaged, this uncertainty can stall the production of otherwise good data products. Either the data product will be developed in a way that materially harms the business because the data scientists overestimated the value of their models, or human experts will reject the product entirely and never realise any value from their data.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m trying to write down some tips in dealing with design uncertainty in data products: (a) build in parameterization or agility into your data products, and (b) evolve your data products in an agile way. These concepts are typically not new to product management, but as data scientists find themselves in situations where they have to be their own product manager, I think it is useful to phrase it through this lens.&lt;/p&gt;
&lt;h2 id=&#34;building-in-parameterization-where-we-dont-have-data&#34;&gt;Building in parameterization where we don&amp;rsquo;t have data&lt;/h2&gt;
&lt;p&gt;Should we cap credit limits at 10 million PHP or 15 million PHP? Sometimes, there is no data-driven way to answer this question because we don&amp;rsquo;t have examples of how users would react to this policy. The domain expert may also be uncomfortable about making a strong decision on what that number should be, but in a typical software development context, there is a demand to spec that user story down to the exact parameter.&lt;/p&gt;
&lt;p&gt;In these cases, the best course of action is to invest time in parameterizing these decisions. We can set them at the value that makes sense for now but builds into the product functionality to quickly switch this parameter once we have new information (and to replace this with some machine-learned decision once we have enough examples).&lt;/p&gt;
&lt;p&gt;This way, product development can move forward without having to make potentially costly decisions that are hard to reverse down the line.&lt;/p&gt;
&lt;p&gt;Put another way: you can either build perfect prediction such that you know exactly what will happen as you roll out your data product, or you can build in split-second reaction times such that you&amp;rsquo;ll never really need the forecast.&lt;/p&gt;
&lt;h2 id=&#34;evolving-data-products&#34;&gt;Evolving data products&lt;/h2&gt;
&lt;p&gt;Not everything has to be a neural network at the start; in fact, if you are starting a project with statistical modelling or machine learning top of mind, you&amp;rsquo;ll probably face a lot of issues.&lt;/p&gt;
&lt;p&gt;A way to deal with model performance uncertainty is to take smaller steps in your automation journey. You can see here three distinct levels where data is taking an increasingly important role in making that decision. While progression from &amp;ldquo;Intuitive&amp;rdquo; to &amp;ldquo;Data-Driven&amp;rdquo; to &amp;ldquo;AI-Driven&amp;rdquo; is clear and probably no one will find issues with trying to progress up that ladder, it&amp;rsquo;s typically the green boxes (the level of AI involvement) where projects tend to trip up.&lt;/p&gt;
&lt;div class=&#34;outset&#34;&gt;
&lt;p&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/169476/2024/evolving-data-products.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;What one can do here is progress up the green boxes by really just starting with typical software - rules-based logic with fact-based inputs. Once we get comfortable and continue to collect data/reduce uncertainty around how to make the right decisions, you can progress up the chain and add more modeling elements to it.&lt;/p&gt;
&lt;p&gt;Two factors influence how fast you can progress across the green axis:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Cost of failure&lt;/strong&gt; - this is inherent to the decision you are trying to automate. The cost of failure of a poorly underwritten loan is going to be much lower than serving up the wrong recommendation on an e-commerce site.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Data completeness&lt;/strong&gt; - this is where data engineering fundamentals are absolutely critical. A problem like image processing is data complete; whatever info is needed to 100% say whether something is a dog or a cat is already in the image. Whereas, when you are trying to lend someone money, you can hardly observe every aspect of how that person manages his/her finances or runs his/her business. If you can automate data collection in a cheap and automated way, then you are much more likely to progress to more advanced forms of decision automation.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre hidden&gt;
content/thoughts/2020-08-06-dealing-with-model-uncertainty-in-data-products/dealing-with-model-uncertainty-in-data-products.html
posts/2020-08-06-dealing-with-model-uncertainty-in-data-products
thoughts/﻿dealing-with-model-uncertainty-in-data-products
&lt;/pre&gt;</description>
    </item>
    
    <item>
      <title>Data Science for Operational Impact</title>
      <link>https://tjpalanca.com/2018/06/23/010000.html</link>
      <pubDate>Sat, 23 Jun 2018 01:00:00 +0800</pubDate>
      
      <guid>http://tjpalanca.micro.blog/2018/06/23/010000.html</guid>
      <description>&lt;p&gt;Data science for operational impact is quite an interesting field of study that has more intersections with social sciences and requires more organizational savvy.&lt;/p&gt;
&lt;div class=&#39;resize&#39;&gt;&lt;iframe src=&#34;https://docs.google.com/presentation/d/e/2PACX-1vTXoMs7M-lpmnyV7dLb4wga9wvyPbkz3TwT-dBkc7gEg0Jb0_HSWX_xYkB8rLBEe8Msf5HifKA13zJb/embed?start=false&amp;loop=true&amp;delayms=3000&#34; frameborder=&#34;0&#34; width=&#34;960&#34; height=&#34;569&#34; allowfullscreen=&#34;true&#34; mozallowfullscreen=&#34;true&#34; webkitallowfullscreen=&#34;true&#34;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;p&gt;Much of the data science discourse at the time was geared towards what I call Product Data Science, where the goal was to build highly scalable machine learning systems that solve a general problem (think Uber&amp;rsquo;s surge algorithm). However, I think an equally interesting area of data science is what I&amp;rsquo;d call Operational Data Science, where there is significantly more iteration, working with domain experts (local marketers, country managers), to solve problems with &amp;ldquo;human-in-the-loop&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Thinking about data science this way has enabled me to overcome many adoption barriers in my past work.&lt;/p&gt;
&lt;p&gt;I presented this at SGInnovate, a data science incubator bootcamp in Singapore, while I was still at Uber.&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>
