<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Mohammad Moshtaghi</title>
    <link>https://mhmmoshtaghi.github.io/</link>
      <atom:link href="https://mhmmoshtaghi.github.io/index.xml" rel="self" type="application/rss+xml" />
    <description>Mohammad Moshtaghi</description>
    <generator>Wowchemy (https://wowchemy.com)</generator><language>en-us</language><copyright>© 2023 Mohammad Moshtaghi</copyright><lastBuildDate>Fri, 17 Feb 2023 00:00:00 +0000</lastBuildDate>
    <image>
      <url>https://mhmmoshtaghi.github.io/media/logo_hu1dc8deb1865675db905a286e8af9308b_16380_300x300_fit_lanczos_3.png</url>
      <title>Mohammad Moshtaghi</title>
      <link>https://mhmmoshtaghi.github.io/</link>
    </image>

    <item>
      <title>Self-Organizing Particle Systems (SOPS)</title>
      <link>https://mhmmoshtaghi.github.io/project/sops/</link>
      <pubDate>Fri, 17 Feb 2023 00:00:00 +0000</pubDate>
      <guid>https://mhmmoshtaghi.github.io/project/sops/</guid>
      <description>&lt;p&gt;Self-Organizing Particle Systems (SOPS) is an abstraction of &lt;em&gt;programmable matter&lt;/em&gt;, a substance with the ability to change its physical properties (shape, density, conductivity, etc.) in a programmable fashion. In order for programmable matter to live up to the dream of being an all-purpose &amp;quot;bucket of stuff&amp;quot; deployable for any task at any scale, we need a rich toolbox of algorithmic primitives upon which we can program more complex behaviors. Although the eventual vision is to control a whole mass of programmable matter as a single entity, our toolbox of primitives should be defined at the level of individual &amp;quot;atoms&amp;quot; of programmable matter to enable arbitrary scalability. Thus, we must take a distributed computing approach to defining micro-scale behaviors that collectively induce macro-scale phenomena.&lt;/p&gt;
&lt;p&gt;Towards this goal, self-organizing particle systems abstractly envision programmable matter as an ensemble of tiny computational units called &lt;em&gt;particles&lt;/em&gt;. These particles are assumed to be very simple: they have very limited memory, no sense of orientation or direction, and only local movement and communication capabilities. Our formal model for these particle systems is the &lt;em&gt;amoebot model&lt;/em&gt;, which provides a theoretical framework for developing and analyzing our distributed algorithms for particle systems.&lt;/p&gt;
</description>
    </item>

    <item>
      <title>The Canonical Amoebot Model: Algorithms and Concurrency Control</title>
      <link>https://mhmmoshtaghi.github.io/publication/daymude2023-canonicalamoebot/</link>
      <pubDate>Fri, 17 Feb 2023 00:00:00 +0000</pubDate>
      <guid>https://mhmmoshtaghi.github.io/publication/daymude2023-canonicalamoebot/</guid>
      <description></description>
    </item>

    <item>
      <title>Invited Paper: Asynchronous Deterministic Leader Election in Three-Dimensional Programmable Matter</title>
      <link>https://mhmmoshtaghi.github.io/publication/briones2023-3dleader/</link>
      <pubDate>Wed, 04 Jan 2023 00:00:00 +0000</pubDate>
      <guid>https://mhmmoshtaghi.github.io/publication/briones2023-3dleader/</guid>
      <description></description>
    </item>

    <item>
      <title>Fable: Anniversary</title>
      <link>https://mhmmoshtaghi.github.io/review/videogame-fable-anniversary/</link>
      <pubDate>Thu, 23 Jun 2022 00:00:00 +0000</pubDate>
      <guid>https://mhmmoshtaghi.github.io/review/videogame-fable-anniversary/</guid>
      <description>&lt;p&gt;When the original &lt;em&gt;Fable&lt;/em&gt; was released in 2004, it made waves.
As Guildford Games wrote in their &lt;a href=&#34;https://guildford.games/developers/lionhead-studios&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;eulogy for Lionhead Studios&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The touchstones for &lt;em&gt;Fable&lt;/em&gt; were folklore, humour and a desire to offer the player an experience that didn’t demand too much from them, free of complexities&amp;hellip;
Microsoft’s involvement ensured focused marketing in America, but hardly any in the UK, leading it to gaining a substantial fanbase in America.
The US audience were beguiled by the fairy tale nature of the game, they applauded the progressive ‘love is love’ message and welcomed Fable into their hearts.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ten years and two celebrated sequels later, &lt;em&gt;Fable: Anniversary&lt;/em&gt; was released in 2014, updating the Xbox-era graphics with the power of the Xbox 360 and bringing the content of &lt;em&gt;Fable: The Lost Chapters&lt;/em&gt; into the fold.
Nearly another decade after that (well, seven years later, at Xbox&amp;rsquo;s 2021 not-E3), Playground Games &lt;a href=&#34;https://youtu.be/jdxE1j0hBJg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;announced a new &lt;em&gt;Fable&lt;/em&gt;&lt;/a&gt;, which is forever fated to be disambiguated as &lt;em&gt;Fable (202x)&lt;/em&gt; by game writers everywhere.
So here I am in 2022, having never touched a &lt;em&gt;Fable&lt;/em&gt; game, thinking: &amp;ldquo;What an exciting time to cherish an old classic!&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Well folks, mistakes were made.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-fable-anniversary/hero_hu368ae3dd97cf64c12c5df8af1390b967_3182096_3be9d77dea25367ae95bec811bc470c7.png 400w,
               /review/videogame-fable-anniversary/hero_hu368ae3dd97cf64c12c5df8af1390b967_3182096_9590c421bf4b736d4ea533c6d7cc5b97.png 760w,
               /review/videogame-fable-anniversary/hero_hu368ae3dd97cf64c12c5df8af1390b967_3182096_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-fable-anniversary/hero_hu368ae3dd97cf64c12c5df8af1390b967_3182096_3be9d77dea25367ae95bec811bc470c7.png&#34;
               width=&#34;760&#34;
               height=&#34;428&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;In all fairness, when I decided to play &lt;em&gt;Fable: Anniversary&lt;/em&gt;, I was braindead-tired from a long day of research and stuck in a hotel room with very poor Wi-Fi and a modest TV screen that was inexplicably tilted slightly upwards towards the ceiling.
This was not the vibe for continuing on in the masterwork that is &lt;em&gt;Mass Effect: Legendary Edition&lt;/em&gt;, nor for running duos with my wife in &lt;em&gt;Fortnite&lt;/em&gt; only to lag out once every five minutes.
No, this slumpy, tired-tech vibe was for an eight year-old remaster of an eighteen year-old classic with a single-player narrative and last-last-generation graphics.
And that&amp;rsquo;s exactly what &lt;em&gt;Fable: Anniversary&lt;/em&gt; shaped up to be.&lt;/p&gt;
&lt;p&gt;I could go on for too long about what didn&amp;rsquo;t age well: clumsy combat mechanics, early difficulty spikes followed by an obscenely long difficulty plateau, poor inventory management, romance with NPCs lacking any personality, &amp;ldquo;powerful&amp;rdquo; female characters with no agency whatsoever&amp;hellip; there&amp;rsquo;s a lot to suffer through, especially from a modern perspective.&lt;/p&gt;
&lt;p&gt;That being said, I think &lt;em&gt;Fable&lt;/em&gt; is delightfully nostalgic in two ways: not taking itself too seriously, and applying that same explorative approach to role-playing moral dichotomies.
While the occasional joke is &lt;em&gt;Fable&lt;/em&gt; is almost too dumb, the vast majority are good-natured and enjoyable.
Just as I was getting annoyed with &lt;em&gt;Fable&lt;/em&gt;&amp;rsquo;s excruciatingly long tutorial, the first side quest outside the Hero&amp;rsquo;s Guild was a triple fetch quest to get a series of haircuts that made me look increasingly stupid—as the mockery of all passerby NPCs confirmed—in order to impress a girl.
Turns out the girl didn&amp;rsquo;t exist, but her &amp;ldquo;father&amp;rdquo; greatly enjoyed making me look like an idiot.
And that&amp;rsquo;s exactly what I was in that instance: fresh out of guild training, ready to take on all of Albion, and already spending all the money I had on haircuts to meet a girl.
Good joke!&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-fable-anniversary/guard_hu671b1a836abdcf1c521e1111c30a6ca9_3028679_9123de145e5b89e0313e0a3b9e07a93e.png 400w,
               /review/videogame-fable-anniversary/guard_hu671b1a836abdcf1c521e1111c30a6ca9_3028679_73a40b0811e5ff4084ee4558734a70b7.png 760w,
               /review/videogame-fable-anniversary/guard_hu671b1a836abdcf1c521e1111c30a6ca9_3028679_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-fable-anniversary/guard_hu671b1a836abdcf1c521e1111c30a6ca9_3028679_9123de145e5b89e0313e0a3b9e07a93e.png&#34;
               width=&#34;760&#34;
               height=&#34;428&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;Unlike 2007&amp;rsquo;s &lt;em&gt;Mass Effect&lt;/em&gt; which treats choices between good and evil with the narrative and relational seriousness that earned that series its glowing reputation, &lt;em&gt;Fable&lt;/em&gt; takes a much more whimsical route.
Flirt with another person in front of your adoring spouse?
That&amp;rsquo;s not even a morally consequential issue.
Eat a crunchy chick or sacrifice a human being to Skorm?
Those are roughly equally bad.
Go on an indiscriminate murdering spree of innocent traders and bloodthirsty bandits?
It&amp;rsquo;ll all balance out.
Donate a crappy old axe to charity to outweigh all your sins?
Sure, why not!
As with everything else in &lt;em&gt;Fable&lt;/em&gt;, morality is inconsequential—which is not to say it isn&amp;rsquo;t meaningful, but rather that it&amp;rsquo;s a buffet of experiences to be enjoyed.&lt;/p&gt;
&lt;p&gt;Hidden in that treatment of morality is a much appreciated bit of gaming wisdom, one that has fallen out of vogue with modern RPGs (thanks, Bethesda) and one that made playing through this aging classic well worth it:
Good games can be silly.
Good games can be simple.
Good games can be fun.&lt;/p&gt;
</description>
    </item>

    <item>
      <title>Donut County</title>
      <link>https://mhmmoshtaghi.github.io/review/videogame-donut-county/</link>
      <pubDate>Mon, 23 May 2022 12:00:00 -0700</pubDate>
      <guid>https://mhmmoshtaghi.github.io/review/videogame-donut-county/</guid>
      <description>&lt;p&gt;This will be a short and sweet review for a short and sweet game.
&lt;em&gt;Donut County&lt;/em&gt; is a delightful and comical must-play in which you control as a hole in the ground that&amp;rsquo;s gobbling everything up.
Each hole starts small—fitting only a soda can or a pebble—but grows with each object consumed.
Pretty soon you&amp;rsquo;re dropping whole tables, cars, and houses into the abyss.
Clear the area of any and all objects, and you win!&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-donut-county/lagoon_huae14f9948a41b49dd39a8cc50d1a38b6_750641_31dabf6b3dfdd7d61aacaab82c757cb5.png 400w,
               /review/videogame-donut-county/lagoon_huae14f9948a41b49dd39a8cc50d1a38b6_750641_45439be4bc3c9a534bf8e0059212cc9a.png 760w,
               /review/videogame-donut-county/lagoon_huae14f9948a41b49dd39a8cc50d1a38b6_750641_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-donut-county/lagoon_huae14f9948a41b49dd39a8cc50d1a38b6_750641_31dabf6b3dfdd7d61aacaab82c757cb5.png&#34;
               width=&#34;760&#34;
               height=&#34;428&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;Destroying civilization as a hole in the ground is the most satisfying way of channeling your chaotic evil.
(Do you hate traffic jams but stifle your inner road rage? &lt;em&gt;Donut County&lt;/em&gt; has a level for you.)
By methodically working through a location&amp;rsquo;s objects, smallest to largest, I couldn&amp;rsquo;t help but make happy sighs of relief as all the junk slowly disappeared.
The hole does not discriminate among its targets, though; an upstanding farm in the countryside is just as fair game as a roach-infested greasy spoon.
Our consciences get to take a back seat to hilarity on this colorful and minimalist polygon art ride.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-donut-county/roaches_hu37bbe4c4fb81050bf2f28d15d1198476_712798_c902565c223c6b5e5a63d7f700f72415.png 400w,
               /review/videogame-donut-county/roaches_hu37bbe4c4fb81050bf2f28d15d1198476_712798_7c9abf128bf1b740b1dc286b99f8d560.png 760w,
               /review/videogame-donut-county/roaches_hu37bbe4c4fb81050bf2f28d15d1198476_712798_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-donut-county/roaches_hu37bbe4c4fb81050bf2f28d15d1198476_712798_c902565c223c6b5e5a63d7f700f72415.png&#34;
               width=&#34;760&#34;
               height=&#34;428&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;From the surprising physics of retrofitting the hole as a projectile gun to the descriptions of mundane objects—a dog dish is described as &amp;ldquo;drinking from this is like kissing a dog, but not as fun&amp;rdquo;—&lt;em&gt;Donut County&lt;/em&gt; kept me laughing throughout its few-hour playtime.
If you need an afternoon pick-me-up or a palette cleanser between longer games, &lt;em&gt;Donut County&lt;/em&gt; won&amp;rsquo;t fail to delight.&lt;/p&gt;
</description>
    </item>

    <item>
      <title>Bugsnax</title>
      <link>https://mhmmoshtaghi.github.io/review/videogame-bugsnax/</link>
      <pubDate>Sun, 22 May 2022 11:00:00 -0700</pubDate>
      <guid>https://mhmmoshtaghi.github.io/review/videogame-bugsnax/</guid>
      <description>&lt;p&gt;&lt;em&gt;Bugsnax&lt;/em&gt; tells the story of a ragtag band of grumpuses who followed the charismatic Aussie-explorer Elizabert Megafig to Snaktooth Island.
On arrival, they discover bugsnax—part bug, part snack!—which quickly become their primary source of food and mystery.
Only three things are certain: bugsnax are delicious, eating them changes body parts into the &amp;ldquo;-snax&amp;rdquo; part of bugsnax, and grumpuses are bizarrely okay with having curly fries for biceps and honeycombs for hands.
But just as eating too many bugsnax morphs grumpuses into foodie-Frankensteins, so too does stitching together a glut of individually tasty gaming morsels render &lt;em&gt;Bugsnax&lt;/em&gt; more off-putting than enjoyable.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-bugsnax/chandlo_hu67f43246ef3723f28ec9f658b8cbbbb9_11098875_bd59abff18c60c0e3dcec6295e350608.png 400w,
               /review/videogame-bugsnax/chandlo_hu67f43246ef3723f28ec9f658b8cbbbb9_11098875_22b7eec29dc315526d8ff4e63c32bd6a.png 760w,
               /review/videogame-bugsnax/chandlo_hu67f43246ef3723f28ec9f658b8cbbbb9_11098875_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-bugsnax/chandlo_hu67f43246ef3723f28ec9f658b8cbbbb9_11098875_bd59abff18c60c0e3dcec6295e350608.png&#34;
               width=&#34;760&#34;
               height=&#34;428&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;Young Horses, perhaps better known for their indie hit &lt;em&gt;Octodad: Dadliest Catch&lt;/em&gt;, write on their website that they&amp;rsquo;re &amp;ldquo;pushing the boundaries of game design in order to create experiences that players have not had before.&amp;rdquo;
I&amp;rsquo;ll give them this much: it&amp;rsquo;s true that I&amp;rsquo;ve never covered a hamster ball in cheese to lure a sentient nacho mantis into fighting a loaded baked potato crab before.
So, novel?
Yes.
Fun?
&amp;hellip;sometimes?
&amp;ldquo;Pushing the boundaries of game design&amp;rdquo;?
Well&amp;hellip;
If &lt;em&gt;Inspector Gadget&lt;/em&gt; meets &lt;em&gt;Pokémon&lt;/em&gt; meets &lt;em&gt;Slime Rancher&lt;/em&gt; meets &lt;em&gt;Sesame Street&lt;/em&gt; meets &lt;em&gt;The Sims&lt;/em&gt; sounds like your preferred way of pushing boundaries, then by all means &lt;em&gt;Bugsnax&lt;/em&gt; is probably a delightful way for you to spend 10–15 hours.
For me, it didn&amp;rsquo;t quite hit the spot.&lt;/p&gt;
&lt;p&gt;Gameplay is focused on entering a new area, finding its associated grumpuses who retreated there from the central town, convincing them to return to town via bugsnak-based fetch quests, and then coming back later to catch all the bugsnax you missed the first time.
Hunting bugsnax involves a light amount of physics- and tool-based puzzle solving.
Some need to be melted by tricking them to walk into a hot spring.
Others need to be chased out of their holes using your snak-in-a-hamster-ball.
Perhaps the most overpowered technique in the game is a carefully laid trip wire, ready to stun just about anything it touches.
Figuring out these idiosyncrasies for the first time is good fun— repeating them for another ten hours to catch &amp;lsquo;em all is less rewarding.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-bugsnax/party_hub288d71f368e3316dfa6d690adc1e376_10983763_094bcfa548c58507675cf3e4910ab6aa.png 400w,
               /review/videogame-bugsnax/party_hub288d71f368e3316dfa6d690adc1e376_10983763_feca1f4a5eefd60b8a983c2f196e6745.png 760w,
               /review/videogame-bugsnax/party_hub288d71f368e3316dfa6d690adc1e376_10983763_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-bugsnax/party_hub288d71f368e3316dfa6d690adc1e376_10983763_094bcfa548c58507675cf3e4910ab6aa.png&#34;
               width=&#34;760&#34;
               height=&#34;428&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;You&amp;rsquo;d hope, then, that the grumpuses and their &amp;ldquo;charming&amp;rdquo; personality stereotypes would be the missing ingredients in this mediocre stew.
Instead, they&amp;rsquo;re extra helpings of distraction with a dash of relational weight.
Which is the main course: Chandlo and Snorpy&amp;rsquo;s romantic tension, their outlandish obsessions with fitness and conspiracy theories, or their untreated anxiety?
Do we focus on Wambus and Triffy&amp;rsquo;s pursuits of career or their seemingly untrusting but fine marriage?
Is Beffica a real grumpus worthy of care and concern, or a plot device via which we learn about everyone else?
Without spoilers, the narrative wages a similarly bizarre subterfuge against its most important relationship between Eggabell and Lizbert; I couldn&amp;rsquo;t settle whether I was in their corner or wanted Eggabell to run for the hills.
And don&amp;rsquo;t even get me started on Wiggle.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-bugsnax/wiggle_hue586f5bdd12c1608f3a4e6947390d787_8826702_47d0ac2217c684824986cb63d2101bbb.png 400w,
               /review/videogame-bugsnax/wiggle_hue586f5bdd12c1608f3a4e6947390d787_8826702_2daff6c7bfebc6d36cd71123aa878bba.png 760w,
               /review/videogame-bugsnax/wiggle_hue586f5bdd12c1608f3a4e6947390d787_8826702_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-bugsnax/wiggle_hue586f5bdd12c1608f3a4e6947390d787_8826702_47d0ac2217c684824986cb63d2101bbb.png&#34;
               width=&#34;760&#34;
               height=&#34;428&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;We probably do need more games like &lt;em&gt;Bugsnax&lt;/em&gt; made with a huge amount of heart and goodwill.
A basic sense of goodness and grumpus-kindness runs through it all, from the bright and colorful characters to the whimsy and silliness of snak-hunting.
It may not have been the finest of dining, but would it satisfy at a family dinner?
Hopefully so.&lt;/p&gt;
</description>
    </item>

    <item>
      <title>Cutting Through the Noise to Infer Autonomous System Topology</title>
      <link>https://mhmmoshtaghi.github.io/publication/leyba2022-cuttingthrough/</link>
      <pubDate>Mon, 02 May 2022 00:00:00 +0000</pubDate>
      <guid>https://mhmmoshtaghi.github.io/publication/leyba2022-cuttingthrough/</guid>
      <description></description>
    </item>

    <item>
      <title>Adaptive Self-Organization in Anonymous Dynamic Networks</title>
      <link>https://mhmmoshtaghi.github.io/project/dynamic-networks/</link>
      <pubDate>Fri, 29 Apr 2022 00:00:00 +0000</pubDate>
      <guid>https://mhmmoshtaghi.github.io/project/dynamic-networks/</guid>
      <description>&lt;p&gt;Distributed computing theory has matured well beyond its original inspiration of dedicated computers linked together in static networks for message passing and file sharing.
A key theme across modern applications of distributed computing is the impact of &lt;em&gt;dynamics&lt;/em&gt;, or frequent changes in the system&amp;rsquo;s members or the connections among them.
This paradigm shift has enabled distributed computing to innovate both within computer science—e.g., in the construction of self-stabilizing overlay networks—and beyond the realm of engineering in, e.g., economics, biology, neurology, and active matter physics.
Motivated by these domains where individuals often have limited to no explicit computational power, we study the &lt;em&gt;algorithmic theory of dynamic networks&lt;/em&gt; where nodes are &lt;em&gt;anonymous&lt;/em&gt; (lacking unique identifiers), have &lt;em&gt;sublogarithmic memory&lt;/em&gt; (insufficient for computing identifiers), and communicate via &lt;em&gt;message passing&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;We are specifically interested in &lt;em&gt;asynchronous concurrency&lt;/em&gt; and &lt;em&gt;adaptive self-organization&lt;/em&gt;.
In studying asynchronous concurrency, we challenge the literature&amp;rsquo;s ubiquitous simplifying assumption that computation and network dynamics remain separated in time, instead designing algorithms that achieve their desired goals in spite of concurrent topological changes.
With adaptive self-organization, we initiate the study of an orthogonal type of dynamics, &lt;em&gt;time-varying system tasks&lt;/em&gt;, which require algorithms to simultaneously adapt to the environment and achieve self-stabilization.&lt;/p&gt;
</description>
    </item>

    <item>
      <title>Local Mutual Exclusion for Dynamic, Anonymous, Bounded Memory Message Passing Systems</title>
      <link>https://mhmmoshtaghi.github.io/publication/daymude2022-localmutual/</link>
      <pubDate>Fri, 29 Apr 2022 00:00:00 +0000</pubDate>
      <guid>https://mhmmoshtaghi.github.io/publication/daymude2022-localmutual/</guid>
      <description></description>
    </item>

    <item>
      <title>Reply to de Marchi: Modeling Polarization of Political Attitudes</title>
      <link>https://mhmmoshtaghi.github.io/publication/axelrod2022-polarizationreply/</link>
      <pubDate>Thu, 21 Apr 2022 00:00:00 +0000</pubDate>
      <guid>https://mhmmoshtaghi.github.io/publication/axelrod2022-polarizationreply/</guid>
      <description></description>
    </item>

    <item>
      <title>Local Mutual Exclusion for Dynamic, Anonymous, Bounded Memory Message Passing Systems</title>
      <link>https://mhmmoshtaghi.github.io/event/2022sand-localmutual/</link>
      <pubDate>Tue, 29 Mar 2022 17:20:00 +0000</pubDate>
      <guid>https://mhmmoshtaghi.github.io/event/2022sand-localmutual/</guid>
      <description></description>
    </item>

    <item>
      <title>Labor and Delivery Unit Closures in Rural Georgia from 2012 to 2016 and the Impact on Black Women: A Mixed-Methods Investigation</title>
      <link>https://mhmmoshtaghi.github.io/publication/daymude2022-labordelivery/</link>
      <pubDate>Fri, 18 Feb 2022 00:00:00 +0000</pubDate>
      <guid>https://mhmmoshtaghi.github.io/publication/daymude2022-labordelivery/</guid>
      <description>&lt;h3 id=&#34;abstract&#34;&gt;Abstract&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Background.&lt;/strong&gt; Obstetric provider coverage in rural Georgia has worsened, with nine rural labor and delivery units (LDUs) closing outside the Atlanta Metropolitan Statistical Area from 2012 to 2016.
Georgia consistently has one of the highest maternal mortality rates in the nation and faces increased adverse health consequences from this decline in obstetric care.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Objective.&lt;/strong&gt; This study explores what factors may be associated with rural hospital LDU closures in Georgia from 2012 to 2016.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Methods.&lt;/strong&gt; This study describes differences between rural Georgia hospitals based on LDU closure status through a quantitative analysis of 2011 baseline regional, hospital, and patient data, and a qualitative analysis of newspaper articles addressing the closures.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Results.&lt;/strong&gt; LDUs that closed had higher proportions of Black female residents in their Primary Care Service Areas (PCSAs), of Black birthing patients, and of patients with Medicaid, self-pay or other government insurance; lower LDU birth volume; more women giving birth within their PCSA of residence; fewer obstetricians and obstetric provider equivalents per LDU; and fewer average annual births per obstetric provider.
Qualitative results indicate financial distress primarily contributed to closures, but also suggest that low birth volume and obstetric provider shortage impacted closures.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conclusions for Practice.&lt;/strong&gt; Rural LDU closure in Georgia has a disproportionate impact on Black and low-income women and may be prevented through funding maternity healthcare and addressing provider shortages.&lt;/p&gt;
</description>
    </item>

    <item>
      <title>Moonglow Bay</title>
      <link>https://mhmmoshtaghi.github.io/review/videogame-moonglow-bay/</link>
      <pubDate>Sun, 13 Feb 2022 15:00:00 -0700</pubDate>
      <guid>https://mhmmoshtaghi.github.io/review/videogame-moonglow-bay/</guid>
      <description>&lt;p&gt;I so badly wanted to love &lt;em&gt;Moonglow Bay&lt;/em&gt; from the moment I saw its trailer at Wholesome Direct 2021.
Your late spouse loved the titular Canadian small town until the day they disappeared in its ocean.
Years later, it stands on the brink of economic collapse and it&amp;rsquo;s up to you to combine their passion for fishing with your love of cooking to save it.
Teaming up with your daughter, River, who drags you out of widowed depression, you sail the voxel-art seas in search of fish both familiar and fantastical—and then chop them up into meals for the townspeople.
Reinvesting their lunch money into town renovations slowly transforms a languishing municipality into a booming tourist location, and people love you for it.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-moonglow-bay/baylandscape_hu7b85d471563a583bdb0dab532a76c002_9150112_47f501742794d25379e4bcc5a1213465.png 400w,
               /review/videogame-moonglow-bay/baylandscape_hu7b85d471563a583bdb0dab532a76c002_9150112_230ed5e3dd34dd458950b86f9891db37.png 760w,
               /review/videogame-moonglow-bay/baylandscape_hu7b85d471563a583bdb0dab532a76c002_9150112_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-moonglow-bay/baylandscape_hu7b85d471563a583bdb0dab532a76c002_9150112_47f501742794d25379e4bcc5a1213465.png&#34;
               width=&#34;760&#34;
               height=&#34;428&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;When so many problems in the real world feel insurmountably big, saving a small town by putting homemade fishcakes in a vending machine is exactly the kind of videogame magical escapism I&amp;rsquo;m here for.
Unfortunately, &lt;em&gt;Moonglow Bay&lt;/em&gt; plays like my persuasive speech in seventh grade English class: solid for about thirty seconds, and then painfully bad for its long remainder.
By over-emphasizing its most tedious gameplay elements, failing to achieve cohesive design, and retaining a shockingly large number of near-game-breaking bugs months after release, this game scores lower than most I&amp;rsquo;ve reviewed.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-moonglow-bay/townhall_huc774a957b1dfdfd0a2e8e9e312f4aa33_9280176_ae1e913653e8b0d4f5449b1fa1be62f1.png 400w,
               /review/videogame-moonglow-bay/townhall_huc774a957b1dfdfd0a2e8e9e312f4aa33_9280176_9036faf82d5a6b1216c9e93281128548.png 760w,
               /review/videogame-moonglow-bay/townhall_huc774a957b1dfdfd0a2e8e9e312f4aa33_9280176_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-moonglow-bay/townhall_huc774a957b1dfdfd0a2e8e9e312f4aa33_9280176_ae1e913653e8b0d4f5449b1fa1be62f1.png&#34;
               width=&#34;760&#34;
               height=&#34;428&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;Let&amp;rsquo;s dive right into this (fish) roast.
After a brief tutorial, you&amp;rsquo;re told to get out there and talk to people; make friends!
I chatted up the twenty-something techy, Haru.
He immediately told me he hoped &amp;ldquo;that vending machine&amp;rdquo; was working out.
What vending machine?
Oh, the one that I won&amp;rsquo;t actually get for another three hours of gameplay.
Cool, cool.
I later buy said vending machine, but the game doesn&amp;rsquo;t register that this happened.
I remain stuck on this quest until I later buy another completely unrelated item from Haru.&lt;/p&gt;
&lt;p&gt;An identity crisis starts to emerge when my largely nautical experience is disrupted by the ability to disembark and do some light walking exploration.
In town, this is painful, as any elevation change results in weird voxel-clipping that makes it entirely unclear when I can safely go up or down steps.
Out on the sea, I walk for fifteen minutes along a gigantic ice bluff that&amp;rsquo;s so tall (and evidently not designed to walk on) that it clips out of the camera&amp;rsquo;s range.
Turns out there&amp;rsquo;s nothing to find—not even a cool view—and there was no reason for the game to let me come here.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-moonglow-bay/iceview_hu5f3a252fe0695601f1d01e2bbcbd1fc5_8627159_e7b14a769f785486e5ef114b455d1d3e.png 400w,
               /review/videogame-moonglow-bay/iceview_hu5f3a252fe0695601f1d01e2bbcbd1fc5_8627159_4537e7712f8a6f2ea77590422b2d7640.png 760w,
               /review/videogame-moonglow-bay/iceview_hu5f3a252fe0695601f1d01e2bbcbd1fc5_8627159_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-moonglow-bay/iceview_hu5f3a252fe0695601f1d01e2bbcbd1fc5_8627159_e7b14a769f785486e5ef114b455d1d3e.png&#34;
               width=&#34;760&#34;
               height=&#34;428&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;On my way back, I find a research outpost and a cave with a lever mechanism.
I try interacting with it, only to be scolded by River saying that I obviously don&amp;rsquo;t know what I&amp;rsquo;m doing.
She&amp;rsquo;s never actually animated in the world, but still randomly shows up to yell at me or inch the plot along.
As it happens, her scolding is a useful hint for a late-game quest if you&amp;rsquo;re stuck in the cave at that point, but means nothing for the first 70% of the game where for whatever reason it still triggers.
At this point, my feelings as a player are like:&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-moonglow-bay/questions_hu4384f2f48a3c02d93b63cc8494181e65_8344499_4c60f75de892259bf714dd9b43b10f78.png 400w,
               /review/videogame-moonglow-bay/questions_hu4384f2f48a3c02d93b63cc8494181e65_8344499_3bf4656805702a492ee71ed508d21ad9.png 760w,
               /review/videogame-moonglow-bay/questions_hu4384f2f48a3c02d93b63cc8494181e65_8344499_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-moonglow-bay/questions_hu4384f2f48a3c02d93b63cc8494181e65_8344499_4c60f75de892259bf714dd9b43b10f78.png&#34;
               width=&#34;760&#34;
               height=&#34;428&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;Narrative discontinuity and quest progression issues aside, you&amp;rsquo;d think that &lt;em&gt;Moonglow Bay&lt;/em&gt; could at least nail its core fishing mechanic.
Taken in isolation, catching a big one is, in fact, satisfying.
There&amp;rsquo;s a nice balance of reeling in the right direction with timing of strong pulls that makes the minigame feel more like a cartoon simplification of fishing in &lt;em&gt;Red Dead Redemption 2&lt;/em&gt; than a beefed up version of &lt;em&gt;Animal Crossing&lt;/em&gt; or &lt;em&gt;Stardew Valley&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;But so much of this game is catching specific fish—you need at least 90 species to complete the story and a good variety to cook the more advanced meals—and &lt;em&gt;Moonglow Bay&lt;/em&gt; chooses to make that experience deeply frustrating.
Listening to townspeople&amp;rsquo;s tall tales gives hints about possible species locations, but fails to narrow down the numerous combinations of rod type, lure type, bait type, specific fishing hole, and time of day at which to catch said fish at said location (there can easily be over 50 unique combinations of the above factors—per fish!).
Some locations aren&amp;rsquo;t locations at all, but rather regions that take up an entire quarter of the map.
Other information is only accessible after bonding with certain friends (fair enough), but come in the form of one-time hints that aren&amp;rsquo;t recorded in your fishing journal.
Either you realize you need to take notes yourself, or you&amp;rsquo;re resorting to Google later.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-moonglow-bay/dinghys_hufd5745a5dc9c56669ccb2f89dc592811_9568549_08684c86021ad74ca3a9e37d1b64a487.png 400w,
               /review/videogame-moonglow-bay/dinghys_hufd5745a5dc9c56669ccb2f89dc592811_9568549_dbef886ca1cbeeaa7bbc21dca33af807.png 760w,
               /review/videogame-moonglow-bay/dinghys_hufd5745a5dc9c56669ccb2f89dc592811_9568549_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-moonglow-bay/dinghys_hufd5745a5dc9c56669ccb2f89dc592811_9568549_08684c86021ad74ca3a9e37d1b64a487.png&#34;
               width=&#34;760&#34;
               height=&#34;428&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;Cooking is yet another decent idea turned tedious.
Each recipe has some fish ingredients to gather and then a series of steps to prepare.
Each step (washing, chopping, filleting, frying, boiling, and baking) is a dexterity-based minigame.
While your fellow Moonglow residents simply tell you that the more you cook, the more likely you are to be inspired to invent new recipes, the reality is that you need to cook each recipe perfectly (no dexterity mistakes!) up to nine(!) times to unlock yet another repetitive cooking experience composed of the same minigames.
There is an option to &amp;ldquo;batch cook&amp;rdquo; multiple meals of the same recipe simultaneously, but wait, those only count as one meal cooked towards the new recipe unlocks.
And did I mention there are 60 recipes in the game?
You do the math on that time sink.&lt;/p&gt;
&lt;p&gt;Then there&amp;rsquo;s the fact that the boat handles like crap, especially in a certain late-game region, which leads to complete jank like this:&lt;/p&gt;

&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
  &lt;iframe src=&#34;https://www.youtube.com/embed/xtuPntWQcpM&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; allowfullscreen title=&#34;YouTube Video&#34;&gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;br/&gt;
&lt;p&gt;I succeed in suspending my boat in midair, fishing some inanimate objects, and then sending my boat careening off map where a cutscene that I&amp;rsquo;ve already seen replays, this time with River talking to no one.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Moonglow Bay&lt;/em&gt;&amp;rsquo;s bright voxel art, excellent gender representation, and ostensibly chill vibes should have made it an easy win in my book.
Too bad it seized every opportunity to take that vision down with the ship.&lt;/p&gt;
</description>
    </item>

    <item>
      <title>Crying in H Mart</title>
      <link>https://mhmmoshtaghi.github.io/review/book-crying-in-h-mart/</link>
      <pubDate>Wed, 05 Jan 2022 13:00:00 -0800</pubDate>
      <guid>https://mhmmoshtaghi.github.io/review/book-crying-in-h-mart/</guid>
      <description>&lt;p&gt;I came to &lt;em&gt;Crying in H Mart&lt;/em&gt; with questions I&amp;rsquo;ve been asking my entire race- and ethnicity-conscious life.
Questions of place and perception, where I fit and how others see me.
Questions of whether people like me, my siblings, and Michelle Zauner will ever find ourselves in a world where we don&amp;rsquo;t have to explain ourselves as 한국사람 하고 미국사람, a biracial Korean and white person.
Or, more to the point:&lt;/p&gt;
&lt;p&gt;우리 엄마 한국사람, 아빠 미국사람.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;My mom is Korean and my dad is white.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Zauner processes these same questions during a span of years where her 할머니 (grandmother), 이모 (aunt), and finally her 어머니 (mother) all die of cancer, leaving her to ask what it means to be Korean when her blood ties have all passed on.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Within five years, I lost both my aunt and my mother to cancer.
So, when I go to H Mart, I&amp;rsquo;m not just on the hunt for cuttlefish and three bunches of scallions for a buck; I&amp;rsquo;m searching for memories.
I&amp;rsquo;m collecting the evidence that the Korean half of my identify didn&amp;rsquo;t die when they did.
H Mart is the bridge that guides me away from the memories that haunt me, of chemo head and skeletal bodies and logging milligrams of hydrocodone.
It reminds me of who they were before, beautiful and full of life, wiggling Chang Gu honey-cracker rings on all ten of their fingers, showing me how to suck a Korean grape from its skin and spit out the seeds.&lt;/p&gt;
&lt;p&gt;— &lt;em&gt;Crying in H Mart&lt;/em&gt;, pages 10–11&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is also—as the title suggests—a book about food, for food is the universal and accessible medium of cultural understanding.
Unlike the unique challenge of learning new languages, food graciously grants fluency in exchange for an adventurous will to try.
For a foreigner to communicate wonder with their eyes wide open as their mouth busily works to understand what they&amp;rsquo;ve just bitten into instantly makes them one with the table and those around it, even if just for a moment.
Zauner discovered this powerful language of love to be a bridge between herself and her mother, one that could transcend cultural divide and the many ways Zauner&amp;rsquo;s mother showed love in seemingly less than loving ways.&lt;/p&gt;
&lt;p&gt;It would be easy for an outsider to dismiss this disconnect between what a parent gives and what their child receives as typical familial misunderstanding.
Perhaps those with some sensitivity might also perceive the complexities of immigrant parents relating to their children raised in the United States.
But the tension of biraciality is finding identity not only in the collision of two historically separate worlds but also in the new, rare thing that is distinct from and more than the sum of its parts.
Being biracial is as much a both-and of the parent cultures as it is neither-nor, marked by a struggle to navigate two worlds that are our inheritance but have no box to put us in.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I had spent my adolescense trying to blend in with my peers in suburban America, and had come of age feeling like my belonging was something to prove.
Something that was always in the hands of other people to be given and never my own to take, to decide which side I was on, whom I was allowed to align with.
I could never be of both worlds, only half in and half out, waiting to be ejected at will by someone with greater claim than me.
Someone full.
Someone whole.&lt;/p&gt;
&lt;p&gt;— &lt;em&gt;Crying in H Mart&lt;/em&gt;, page 107&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;With age comes wisdom and suffering.
I don&amp;rsquo;t know which of the two proceeds from the other, or if together they form an &lt;a href=&#34;https://symbolsandmeanings.net/ouroboros-snake-eating-its-tail-infinity-symbol-meaning-origin/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;ouroboros&lt;/a&gt;, locked in a never-ending cycle.
Zauner experiences a great deal of both in the painful decline and death of her mother, a loss that took away more than just the love and stability of a parent.
Earlier in the memoir, Zauner describes visiting a Korean bathhouse with her mother, father, and boyfriend.
The spectacle in this scene are her white father and boyfriend stripping nude in the men&amp;rsquo;s partition—not Zauner&amp;rsquo;s identity.
Next to her mother, Zauner makes sense.
No one looks at her twice or asks her if she&amp;rsquo;s lost.
But years later, without her mother to implicitly justify her, Zauner is forced to explain herself in that familiar and humiliating admittance of other-ness.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[An ajumma] looked into my face as if searching for something.
I knew what she was looking for.
It was the same way the kids at school would look at me before they asked me what I was, but from the opposite angle.
She was looking for the hint of Koreanness in my face that she couldn&amp;rsquo;t quite put a finger on.
Something that resembled her own.&lt;/p&gt;
&lt;p&gt;&amp;hellip;It was ironic that I, who once longed to resemble my white peers and desperately hoped my Koreanness would go unnoticed, was now absolutely terrified that this stranger in the bathhouse could not see it.&lt;/p&gt;
&lt;p&gt;— &lt;em&gt;Crying in H Mart&lt;/em&gt;, pages 225–226&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Like Zauner, I have a Korean mother and a white father.
She and I both excitedly rushed off to examine our eyes in the mirror after our mothers taught us about the double eyelid envied by Koreans.
We&amp;rsquo;ve found some shred of Korean belonging in knowledge of its cuisine, perhaps especially when we share it with our white spouses.
We&amp;rsquo;ve lost our elders to time and asked ourselves what hope for belonging we lost with them, even if we carry them with us in our middle names.
We&amp;rsquo;ve tried to explain what being half-Korean feels like to our loving full-Korean mothers, only for them to tell us in a moment of blindsiding misunderstanding that we&amp;rsquo;re American, not Korean.
And in all this, we&amp;rsquo;ve come to learn that there are no clean answers to questions of half-white biraciality in a nation that has barely even begun its reckoning with its oppression of single-race minorities.&lt;/p&gt;
&lt;p&gt;Even still, it&amp;rsquo;s nice to not be alone.&lt;/p&gt;
</description>
    </item>

    <item>
      <title>Hades</title>
      <link>https://mhmmoshtaghi.github.io/review/videogame-hades/</link>
      <pubDate>Tue, 04 Jan 2022 13:00:00 -0800</pubDate>
      <guid>https://mhmmoshtaghi.github.io/review/videogame-hades/</guid>
      <description>&lt;p&gt;It&amp;rsquo;s very difficult at this point to say anything about &lt;em&gt;Hades&lt;/em&gt; that hasn&amp;rsquo;t already been said, not because of any lack on the part of this Underworld roguelite, but because &lt;a href=&#34;https://www.polygon.com/reviews/2020/9/24/21453043/hades-review-switch-windows-early-access-supergiant-roguelite-impressions&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;so&lt;/a&gt; &lt;a href=&#34;https://kotaku.com/hades-the-kotaku-review-1845204803&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;many&lt;/a&gt; &lt;a href=&#34;https://www.thegamer.com/hades-relationships/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;others&lt;/a&gt; &lt;a href=&#34;https://pandemics-and-games-essay-jam.pubpub.org/pub/t2elcdwu/release/3&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;before&lt;/a&gt; &lt;a href=&#34;&#34;&gt;me&lt;/a&gt; have loved and effusively written about this game.
A week after its early access release in September 2020, it had already &lt;a href=&#34;https://www.gamespot.com/articles/hades-has-sold-1-million-copies-nearly-one-third-sold-in-last-few-days/1100-6482388/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;sold 1,000,000 copies&lt;/a&gt;.
It was listed as just about everyone&amp;rsquo;s 2020 game of the year and even won the &lt;a href=&#34;http://www.thehugoawards.org/hugo-history/2021-hugo-awards/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;first ever Hugo award given to a videogame&lt;/a&gt; (for the unfamiliar, those are literary awards for sci-fi and fantasy).
Suffice it to say, &lt;em&gt;Hades&lt;/em&gt; is critically and personally well-loved.&lt;/p&gt;
&lt;p&gt;&amp;ldquo;But wait!&amp;rdquo; you say, &amp;ldquo;I&amp;rsquo;m no lemming. What is &lt;em&gt;Hades&lt;/em&gt;, really? And is it&amp;hellip; actually good?&amp;rdquo;
Fair enough.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-hades/asphodel_hu3e02d9993d6b7ca16ff38861c80eebe3_5590285_1bffddde67e3c2b3d40146fb6fbb9d94.png 400w,
               /review/videogame-hades/asphodel_hu3e02d9993d6b7ca16ff38861c80eebe3_5590285_51a193176d9afc0708f30e60b9eabbe7.png 760w,
               /review/videogame-hades/asphodel_hu3e02d9993d6b7ca16ff38861c80eebe3_5590285_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-hades/asphodel_hu3e02d9993d6b7ca16ff38861c80eebe3_5590285_1bffddde67e3c2b3d40146fb6fbb9d94.png&#34;
               width=&#34;760&#34;
               height=&#34;428&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;&lt;em&gt;Hades&lt;/em&gt; is a narrative-driven roguelite set in Greek mythology that tells the story of Zagreus, son of Hades, shortly after he discovers a surprising truth about his parentage.
Determined to put his anger about being lied to and his frustration with his stern, cold, and impatient father to better use, he attempts to escape from the House of Hades and his Underworld home, aided by his godly relatives on Olympus.
Standing between Zagreus and the surface are the many monsters and hazards that Hades put in place to keep the dead from escaping, often resulting in Zagreus&amp;rsquo;s death and return to the House via the river Styx.
Therein lies the game&amp;rsquo;s core mechanic of repeated and semi-randomized runs, each an opportunity for Zagreus to claw ever closer to the surface and the answers to his many questions.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-hades/sisyphus_hua9bb2ec1a17a0c56258d9845936e41e0_5787638_46bcd29625a6c8c887e36fd7b583a184.png 400w,
               /review/videogame-hades/sisyphus_hua9bb2ec1a17a0c56258d9845936e41e0_5787638_a185aaf0b2bd6f9f7e0cc270c66ce1b2.png 760w,
               /review/videogame-hades/sisyphus_hua9bb2ec1a17a0c56258d9845936e41e0_5787638_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-hades/sisyphus_hua9bb2ec1a17a0c56258d9845936e41e0_5787638_46bcd29625a6c8c887e36fd7b583a184.png&#34;
               width=&#34;760&#34;
               height=&#34;428&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;Along the way, Zagreus forms relationships with his Chthonic relatives and friends in the House of Hades and with the gods of Olympus as they aid him in his escape.
In true Supergiant Games style, these characters are each distinct personalities unto themselves with beautifully rendered portraits and top-notch voice acting.
Largely thanks to the game&amp;rsquo;s writing and length, relationships grow and change in believable ways, taking the player on an emotional journey that mirrors Zagreus&amp;rsquo;s own.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-hades/cerberus_hu09e94034d8f80ca905a103b16ab3fb11_6258964_70287b34a73678d1504d5ad86776b4fe.png 400w,
               /review/videogame-hades/cerberus_hu09e94034d8f80ca905a103b16ab3fb11_6258964_86a913882f4e5e848db2851fca8ea78e.png 760w,
               /review/videogame-hades/cerberus_hu09e94034d8f80ca905a103b16ab3fb11_6258964_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-hades/cerberus_hu09e94034d8f80ca905a103b16ab3fb11_6258964_70287b34a73678d1504d5ad86776b4fe.png&#34;
               width=&#34;760&#34;
               height=&#34;428&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;The long character arcs are supported by fast combat and seamlessly integrating progression systems that create the &amp;ldquo;just one more run&amp;rdquo; hook.
Resources gathered in a run can be used to make Zagreus permanently stronger, spent on decorations and new features for the House, or given as gifts to improve relationships (represented as heart meters a la &lt;em&gt;Stardew Valley&lt;/em&gt;).
Rare goods earned from defeating bosses can unlock new &amp;ldquo;aspects&amp;rdquo; of various weapons, changing their play style or fusing with other mechanics in Zagreus&amp;rsquo;s repertoire.
Keepsakes given to Zagreus by his friends can make the difference between living and dying, and like the relationships they represent, they grow stronger as Zagreus spends more time with them.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-hades/houseofhades_hu617251975e2bd76a982738a8a3da9036_9977131_a8a7c98f51bc6e2696ce3099c1f81275.png 400w,
               /review/videogame-hades/houseofhades_hu617251975e2bd76a982738a8a3da9036_9977131_ba08bcf82bd7d1720b3453a6c1de2684.png 760w,
               /review/videogame-hades/houseofhades_hu617251975e2bd76a982738a8a3da9036_9977131_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-hades/houseofhades_hu617251975e2bd76a982738a8a3da9036_9977131_a8a7c98f51bc6e2696ce3099c1f81275.png&#34;
               width=&#34;760&#34;
               height=&#34;428&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;As rewarding as it is to deepen relationships and have initially punishing runs become second nature over the course of repetition, &lt;em&gt;Hades&lt;/em&gt; is a &lt;a href=&#34;https://www.gameinformer.com/review/hades/hades-review-the-highs-and-lows-of-repetition&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;touch too long for its own good&lt;/a&gt;.
For the 40 hours it took to me to reach the main ending—triggered by escaping to the surface 10 times—I was dazzled by the interlocking progression systems, character development, and random surprises and quirks (like stealing from Charon).
The 25-hour-long road through the epilogue to the full narrative conclusion, however, seemed to stretch out even longer than the first.
I completed runs on autopilot, sped along by the Pact of Punishment&amp;rsquo;s time limits for easy heat, no longer surprised at the ease with which I navigated my way through hell.&lt;/p&gt;
&lt;p&gt;Perhaps this is the nature of finding one&amp;rsquo;s self and place: we trade the head-spinning thrill and crises of the search for the safety and security of knowing, and from the space of knowing we choose our ventures selectively.
The epilogue shows us how Zagreus&amp;rsquo;s potential for redemptive, generous, and loving acts are discovered only after finding his place within community.&lt;/p&gt;
</description>
    </item>

    <item>
      <title>Preventing Extreme Polarization of Political Attitudes</title>
      <link>https://mhmmoshtaghi.github.io/publication/axelrod2021-preventingpolarization/</link>
      <pubDate>Tue, 14 Dec 2021 00:00:00 +0000</pubDate>
      <guid>https://mhmmoshtaghi.github.io/publication/axelrod2021-preventingpolarization/</guid>
      <description>&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://icccr.tc.columbia.edu/blog/how-might-individual-interactions-lead-to-polarization-in-a-society/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Science-Practice Blog: How might individual interactions lead to polarization in a society?&lt;/a&gt; Nancy Lewis. &lt;em&gt;The Morton Deutsch International Center for Cooperation and Conflict Resolution&lt;/em&gt;, June 2022.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.eurekalert.org/news-releases/937038&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Like a natural system, democracy faces collapse as polarization leads to loss of diversity.&lt;/a&gt; Princeton University. &lt;em&gt;EurekaAlert!&lt;/em&gt;, December 2021.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://santafe.edu/news-center/news/preventing-extreme-polarization-political-attitudes&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Preventing extreme polarization of political attitudes.&lt;/a&gt; &lt;em&gt;Santa Fe Institute&lt;/em&gt;, December 2021. (Also featured in &lt;a href=&#34;https://www.eurekalert.org/news-releases/937259&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;em&gt;EurekaAlert!&lt;/em&gt;&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://fullcircle.asu.edu/research/computing-scenarios-for-defusing-polarizing-politics/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Computing scenarios for defusing polarizing politics.&lt;/a&gt; Joe Kullman. &lt;em&gt;ASU FullCircle&lt;/em&gt;, December 2021. (Also featured in &lt;a href=&#34;https://news.asu.edu/20211207-solutions-computing-scenarios-defusing-polarized-politics&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;em&gt;ASU News&lt;/em&gt;&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.brookings.edu/blog/techtank/2022/01/26/reducing-extreme-polarization-is-key-to-stabilizing-democracy/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Reducing extreme polarization is key to stabilizing democracy.&lt;/a&gt; Stephanie Forrest and Joshua Daymude. &lt;em&gt;Brookings TechTank&lt;/em&gt;, January 2022. (Reposted by &lt;a href=&#34;https://www.facebook.com/602667646/posts/10158520474532647/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Bishop Jennifer Reddall&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://azpbs.org/horizon/2022/01/researchers-look-to-technology-to-find-out-whats-increasing-the-countrys-social-and-political-divide/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Researchers look to technology to find out what’s increasing the country’s social and political divide.&lt;/a&gt; &lt;em&gt;Arizona Horizon&lt;/em&gt;, January 2022.&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>

    <item>
      <title>Elegant Derivatives of Large Products</title>
      <link>https://mhmmoshtaghi.github.io/post/elegant-derivatives-of-large-products/</link>
      <pubDate>Tue, 30 Nov 2021 11:57:40 -0700</pubDate>
      <guid>https://mhmmoshtaghi.github.io/post/elegant-derivatives-of-large-products/</guid>
      <description>&lt;p&gt;An ongoing research project on modeling computer security has thrown me back into calculus for the first time since my undergraduate differential equations course in 2014, which as an aside was the only college course that forced me to buy the professor&amp;rsquo;s custom textbook just to get access to homework problems.
(I&amp;rsquo;m still mad about that.)
Anyway, my research led me to take the derivative of an expression of the form:&lt;/p&gt;
&lt;p&gt;$$\prod_{i=1}^n f_i(x)$$&lt;/p&gt;
&lt;p&gt;For the uninitiated, $\prod$ is a mathematical symbol meaning &amp;ldquo;product&amp;rdquo; (and is analogous to the $\sum$ symbol meaning &amp;ldquo;sum&amp;rdquo;).
It says to look at each $f_i$ term as $i$ goes from $1, 2, \ldots, n$ and multiply them all together:&lt;/p&gt;
&lt;p&gt;$$\prod_{i=1}^n f_i(x) = f_1(x) \times f_2(x) \times \cdots \times f_n(x)$$&lt;/p&gt;
&lt;p&gt;Taking this derivative is something high-school me was much better prepared for than current postdoc me, but after some head scratching I found the elegant solution:&lt;/p&gt;
&lt;p&gt;$$\frac{d}{dx} \prod_{i=1}^n f_i(x) = \prod_{i=1}^n f_i(x) \cdot \sum_{i=1}^n \frac{f_i&#39;(x)}{f_i(x)}$$&lt;/p&gt;
&lt;p&gt;As is common in mathematics, there&amp;rsquo;s a direct but tedious way to get this answer and another more elegant way to get the same thing.
I&amp;rsquo;m not the first to derive this solution, but I&amp;rsquo;m writing it up for posterity because I will inevitably forget this trick in a few days.
A PDF of the two derivations without all the handholding I&amp;rsquo;m about to do is available &lt;a href=&#34;https://mhmmoshtaghi.github.io/uploads/elegant-derivatives-of-large-products.pdf&#34; target=&#34;_blank&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;method-1-product-rule&#34;&gt;Method 1: Product Rule&lt;/h2&gt;
&lt;p&gt;I had to sweep away years of mental cobwebs to remember the &lt;a href=&#34;https://en.wikipedia.org/wiki/Product_rule&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;product rule&lt;/a&gt; for derivatives.
My expression is a product, after all, so why not start there?
The product rule states:&lt;/p&gt;
&lt;p&gt;$$\frac{d}{dx}(u \cdot v) = u&#39; \cdot v + u \cdot v&#39;$$&lt;/p&gt;
&lt;p&gt;This works for the product of two terms, but $\prod_{i=1}^n f_i(x)$ has $n$ terms.
Let&amp;rsquo;s try peeling off terms one-by-one, starting with $f_1(x)$, and then applying the product rule.&lt;/p&gt;
&lt;p&gt;$$\begin{align*}
\frac{d}{dx} \prod_{i=1}^n f_i(x) &amp;amp;= \frac{d}{dx} \left(f_1(x) \cdot \prod_{i=2}^n f_i(x)\right) \\
&amp;amp;= f_1&#39;(x) \cdot \prod_{i=2}^n f_i(x) + f_1(x) \cdot \frac{d}{dx} \left(\prod_{i=2}^n f_i(x)\right)
\end{align*}$$&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s progress, but now we have to repeat the process to deal with the $\frac{d}{dx} \left(\prod_{i=2}^n f_i(x)\right)$ term, peeling off $f_2(x)$ and applying the product rule again:&lt;/p&gt;
&lt;p&gt;$$\begin{align*}
\frac{d}{dx} \prod_{i=1}^n f_i(x) &amp;amp;= f_1&#39;(x) \cdot \prod_{i=2}^n f_i(x) + f_1(x) \cdot \frac{d}{dx} \left(\prod_{i=2}^n f_i(x)\right) \\
&amp;amp;= f_1&#39;(x) \cdot \prod_{i=2}^n f_i(x) + f_1(x) \\
&amp;amp;\quad \cdot \left(f_2&#39;(x) \cdot \prod_{i=3}^n f_i(x) + f_2(x) \cdot \frac{d}{dx} \left(\prod_{i=3}^n f_i(x)\right)\right)
\end{align*}$$&lt;/p&gt;
&lt;p&gt;This expression&amp;rsquo;s going to have &lt;a href=&#34;https://media.giphy.com/media/22eVpVYpRhaE0/giphy.gif&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;more layers than an ogre&lt;/a&gt;!
If we were to do the peel-and-product rule strategy $n-1$ times, we would arrive at:&lt;/p&gt;
&lt;p&gt;$$\begin{align*}
\frac{d}{dx} \prod_{i=1}^n f_i(x) &amp;amp;= f_1&#39;(x) \cdot \prod_{i=2}^n f_i(x) + f_1(x) \\
&amp;amp;\quad \cdot \left(f_2&#39;(x) \cdot \prod_{i=3}^n f_i(x) + f_2(x) \right. \\
&amp;amp;\quad \cdot \left(f_3&#39;(x) \cdot \prod_{i=4}^n f_i(x) + f_3(x) \cdots + f_{n-2}(x) \right. \\
&amp;amp;\quad \left. \left. \cdot \left(f_{n-1}&#39;(x) \cdot f_n(x) + f_n&#39;(x) \cdot f_{n-1}(x)\right) \cdots \right) \right)
\end{align*}$$&lt;/p&gt;
&lt;p&gt;Do you see the pattern?
If we distribute the $f_i(x)$ terms at the end of each of the lines above into the parentheses that immediately follow,&lt;/p&gt;
&lt;p&gt;$$\begin{align*}
\frac{d}{dx} \prod_{i=1}^n f_i(x) &amp;amp;= f_1&#39;(x) \cdot \prod_{i=2}^n f_i(x) + f_2&#39;(x) \cdot f_1(x) \cdot \prod_{i=3}^n f_i(x) \\
&amp;amp;\quad + f_3&#39;(x) \cdot f_1(x) \cdot f_2(x) \cdot \prod_{i=4}^n f_i(x) \\
&amp;amp;\quad + f_{n-1}&#39;(x) \cdot f_1(x) \cdots f_{n-2}(x) \cdot f_n(x) \\
&amp;amp;\quad + f_n&#39;(x) \cdot f_1(x) \cdots f_{n-1}(x)
\end{align*}$$&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;re adding up a bunch of terms, each of which is a derivative $f_i&#39;(x)$ multiplied by all the other $f_j(x)$&amp;rsquo;s, where $j \neq i$.
Landing this messy, notation-heavy plane, we can rewrite this long sum as&lt;/p&gt;
&lt;p&gt;$$\frac{d}{dx} \prod_{i=1}^n f_i(x) = \sum_{i=1}^n f_i&#39;(x) \cdot \frac{\prod_{j=1}^n f_j(x)}{f_i(x)}
= \prod_{i=1}^n f_i(x) \cdot \sum_{i=1}^n \frac{f_i&#39;(x)}{f_i(x)},$$&lt;/p&gt;
&lt;p&gt;which is the solution we came for.&lt;/p&gt;
&lt;h2 id=&#34;method-2-leveraging-logarithms&#34;&gt;Method 2: Leveraging Logarithms&lt;/h2&gt;
&lt;p&gt;Mathematicians crave elegance, and Method 1 wasn&amp;rsquo;t that.
We had to keep keen eyes out for patterns as they emerged and carefully distribute/rearrange many terms to get the solution.
This second method will be much cleaner, but as many clever methods do, it begins with an unintuitive step.&lt;/p&gt;
&lt;p&gt;Let $F(x) = \prod_{i=1}^n f_i(x)$.
Taking the &lt;a href=&#34;https://en.wikipedia.org/wiki/Natural_logarithm&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;natural logarithm&lt;/a&gt; of both sides,&lt;/p&gt;
&lt;p&gt;$$\ln(F(x)) = \ln\left(\prod_{i=1}^n f_i(x)\right) = \sum_{i=1}^n \ln(f_i(x)),$$&lt;/p&gt;
&lt;p&gt;where the last equality follows from the fact that the logarithm of a product is equal to the sum of logarithms.
The derivative of the natural logarithm is:&lt;/p&gt;
&lt;p&gt;$$\frac{d}{dx}\ln(x) = \frac{1}{x}$$&lt;/p&gt;
&lt;p&gt;Using &lt;a href=&#34;https://en.wikipedia.org/wiki/Chain_rule&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;chain rule&lt;/a&gt; to take the derivative of both sides of the above equality,&lt;/p&gt;
&lt;p&gt;$$\begin{align*}
\frac{d}{dx}\ln(F(x)) &amp;amp;= \frac{d}{dx}\sum_{i=1}^n \ln(f_i(x)) \\
\frac{1}{F(x)} \cdot \frac{dF}{dx} &amp;amp;= \sum_{i=1}^n \frac{1}{f_i(x)} \cdot f_i&#39;(x) \\
\frac{dF}{dx} &amp;amp;= F(x) \cdot \sum_{i=1}^n \frac{f_i&#39;(x)}{f_i(x)}
\end{align*}$$&lt;/p&gt;
&lt;p&gt;If we plug $F(x) = \prod_{i=1}^n f_i(x)$ back in, out pops the solution:&lt;/p&gt;
&lt;p&gt;$$\frac{d}{dx} \prod_{i=1}^n f_i(x) = \prod_{i=1}^n f_i(x) \cdot \sum_{i=1}^n \frac{f_i&#39;(x)}{f_i(x)}$$&lt;/p&gt;
&lt;h2 id=&#34;concluding-thoughts&#34;&gt;Concluding Thoughts&lt;/h2&gt;
&lt;p&gt;Having initially stumbled upon Method 1, I was surprised that this derivative came out so beautifully in the end.
Credit where it&amp;rsquo;s due: I adapted the elegant Method 2 from &lt;a href=&#34;https://www.quora.com/What-is-the-first-derivative-of-an-infinite-product-of-factors&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;this post&lt;/a&gt; regarding infinite products.
I have some technical notes at the end of the &lt;a href=&#34;https://mhmmoshtaghi.github.io/uploads/elegant-derivatives-of-large-products.pdf&#34; target=&#34;_blank&#34;&gt;linked PDF&lt;/a&gt; about when Method 2 breaks down, though I believe Method 1 does not have any of these problems.&lt;/p&gt;
&lt;p&gt;Hopefully this was fun (and if it wasn&amp;rsquo;t, I doubt you read this far 😉).
This is one of many examples in mathematics of finding multiple solutions to the same problem and learning something different each time.
Next time you emerge victorious from a tedious derivation, see if you can find a clever alternative!&lt;/p&gt;
</description>
    </item>

    <item>
      <title>Deadlock and Noise in Self-Organized Aggregation Without Computation</title>
      <link>https://mhmmoshtaghi.github.io/event/2021sss-deadlockaggregation/</link>
      <pubDate>Wed, 17 Nov 2021 09:40:00 -0500</pubDate>
      <guid>https://mhmmoshtaghi.github.io/event/2021sss-deadlockaggregation/</guid>
      <description></description>
    </item>

    <item>
      <title>Deadlock and Noise in Self-Organized Aggregation Without Computation</title>
      <link>https://mhmmoshtaghi.github.io/publication/daymude2021-deadlockaggregation/</link>
      <pubDate>Tue, 09 Nov 2021 00:00:00 +0000</pubDate>
      <guid>https://mhmmoshtaghi.github.io/publication/daymude2021-deadlockaggregation/</guid>
      <description></description>
    </item>

    <item>
      <title>The Canonical Amoebot Model: Algorithms and Concurrency Control</title>
      <link>https://mhmmoshtaghi.github.io/event/2021disc-canonicalamoebot/</link>
      <pubDate>Tue, 05 Oct 2021 18:20:00 +0200</pubDate>
      <guid>https://mhmmoshtaghi.github.io/event/2021disc-canonicalamoebot/</guid>
      <description></description>
    </item>

    <item>
      <title>The Canonical Amoebot Model: Algorithms and Concurrency Control</title>
      <link>https://mhmmoshtaghi.github.io/publication/daymude2021-canonicalamoebot/</link>
      <pubDate>Mon, 04 Oct 2021 00:00:00 +0000</pubDate>
      <guid>https://mhmmoshtaghi.github.io/publication/daymude2021-canonicalamoebot/</guid>
      <description></description>
    </item>

    <item>
      <title>Control</title>
      <link>https://mhmmoshtaghi.github.io/review/videogame-control/</link>
      <pubDate>Fri, 03 Sep 2021 19:08:32 -0700</pubDate>
      <guid>https://mhmmoshtaghi.github.io/review/videogame-control/</guid>
      <description>&lt;p&gt;&lt;em&gt;Control&lt;/em&gt; exerts full mastery over videogames as a unique narrative form, blending motion-capture acting performances, live-action filmed skits and monologues, puppet shows, radio programs, rock albums, short stories, technical documentation, a whole slew of homages to other videogame genres, and — of course — shooting weird shit that needs to be shot.
While not a must, &lt;em&gt;Control&lt;/em&gt; and its Oldest House are best experienced in the progressive revelations and immersive weirdness so carefully crafted by its developers.
The remainder of this review may contain atmospheric and thematic spoilers.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-control/darlinglab_hu471d3b84ad02b33ff440bd4b1443ac0c_13269229_4a4e2ded0cf0e2069c1d4191dec0dcb3.png 400w,
               /review/videogame-control/darlinglab_hu471d3b84ad02b33ff440bd4b1443ac0c_13269229_da53c9220be5e207c05b6876b4e21d25.png 760w,
               /review/videogame-control/darlinglab_hu471d3b84ad02b33ff440bd4b1443ac0c_13269229_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-control/darlinglab_hu471d3b84ad02b33ff440bd4b1443ac0c_13269229_4a4e2ded0cf0e2069c1d4191dec0dcb3.png&#34;
               width=&#34;760&#34;
               height=&#34;428&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;&lt;em&gt;Control&lt;/em&gt; should be remembered, if not for any of its other solid qualities, as a milestone in storytelling with the gaming medium.
It&amp;rsquo;s one thing to have high quality voice acting and motion capture — especially for facial expressions — so that your game characters can converse more naturally than, say, Siri.
It&amp;rsquo;s another thing entirely to film talented actors and put that footage in the game, a technique Remedy continues here from their past work in &lt;em&gt;Quantum Break&lt;/em&gt; and, to a lesser extent, &lt;em&gt;Alan Wake&lt;/em&gt; and &lt;em&gt;Bright Falls&lt;/em&gt;.
The narrative tricks needed to pull this off (namely, the Hotline and littering the Oldest House with instructional films and research updates) are clever.
Weaving tie-ins between those short films and the mass of mixed-medium work throughout the rest of the game is impressive.
But slowly coming to grips with the collective efforts of directors, writers, actors, visual artists, programmers, managers, and the many, many others involved in developing a game of this caliber is staggering.
To experience artistry that feels genuinely new is a deep joy.&lt;/p&gt;
&lt;p&gt;Jesse Faden (Courtney Hope), our protagonist, is solid ground in the physically and metaphorically shifting strangeness of the Oldest House.
We get to watch the depth of her inner worries and assessments balance with her do-what-we-came-to-do attitude to round out a reasonably believable human being.
She&amp;rsquo;s relational, witty, and exceptionally brave: unlike me, she does not freak out when ambushed by shrieking resonance zombies.
The player may be holding the controller, but this is Jesse&amp;rsquo;s story and she is in control.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-control/deadletters_hu22768126cfc898da6df58e5b94ef368d_9677457_9c3fa6311828fe013d8ed836b5a39268.png 400w,
               /review/videogame-control/deadletters_hu22768126cfc898da6df58e5b94ef368d_9677457_1bb8423f2034d09922e30568d51f7d8f.png 760w,
               /review/videogame-control/deadletters_hu22768126cfc898da6df58e5b94ef368d_9677457_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-control/deadletters_hu22768126cfc898da6df58e5b94ef368d_9677457_9c3fa6311828fe013d8ed836b5a39268.png&#34;
               width=&#34;760&#34;
               height=&#34;428&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;Control, aside from being the literal name of the game, is a central theme under exploration.
What does it mean to have control?
Who had it before and who has it now?
What do you do with control when it&amp;rsquo;s yours?&lt;/p&gt;
&lt;p&gt;Power, the story posits, is not the same as control.
Control is more elusive.
It requires understanding, trust, and genuine leadership — qualities that Jesse&amp;rsquo;s predecessors Northmoor and Trench traded away in their pursuit of, ironically, control.
But instead of probing this theme more deeply (for example, asking whether control itself is just an illusory sense of security), the game&amp;rsquo;s conclusion is satisfied with replacing entrenched, toxic leaders with Jesse and other critically thinking young people and calling it a day.
The &lt;em&gt;Foundation&lt;/em&gt; and &lt;em&gt;AWE&lt;/em&gt; DLCs do a little more work in this direction, but fall short of staking out a thoughtful value claim to complement the robust narrative creativity.
I&amp;rsquo;d hoped for more.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-control/soundroom_hu97ea86f693491786ffd8c82ceb90bfa2_14313455_b01adf5f5641e14093f72b18d752b934.png 400w,
               /review/videogame-control/soundroom_hu97ea86f693491786ffd8c82ceb90bfa2_14313455_5f36b80ce19d5f562fb1428ecb61f81d.png 760w,
               /review/videogame-control/soundroom_hu97ea86f693491786ffd8c82ceb90bfa2_14313455_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-control/soundroom_hu97ea86f693491786ffd8c82ceb90bfa2_14313455_b01adf5f5641e14093f72b18d752b934.png&#34;
               width=&#34;760&#34;
               height=&#34;428&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;Amidst all this focus on artistry, narrative, and hopes for philosophy, it&amp;rsquo;s still worth mentioning that the gunplay and paranatural combat abilities feel great.
Returning to other games after being Jesse Faden is markedly disappointing.
Said another way, you know how exhilarating the combat in &lt;em&gt;Control&lt;/em&gt; is going to be from the first moment you accidentally bump into a table and the physics engine sends it flying into a wall, papers thrust into the air.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m excited to know the talented folks at Remedy are already working on &lt;a href=&#34;https://www.polygon.com/22556019/control-sequel-multiplayer-spinoff-pc-xbox-ps5&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;new stories&lt;/a&gt; in the &lt;em&gt;Control&lt;/em&gt; universe, and for what other developers and artists this quality of videogame storytelling might inspire.&lt;/p&gt;
&lt;h2 id=&#34;bugs&#34;&gt;Bugs&lt;/h2&gt;
&lt;p&gt;It&amp;rsquo;s minor, but there was an occasional issue where the floor would just&amp;hellip; disappear.
At first I thought this was a thing the Oldest House did; then after an extended period of confusion I realized some textures just weren&amp;rsquo;t loading.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-control/floorbug_hu2a4f98ea48d4cfd72de22c655851d2d9_11707162_9c8b7863356240629bff972d02fecc59.png 400w,
               /review/videogame-control/floorbug_hu2a4f98ea48d4cfd72de22c655851d2d9_11707162_66b151ae56ebe47b37dc6bef219f8ac8.png 760w,
               /review/videogame-control/floorbug_hu2a4f98ea48d4cfd72de22c655851d2d9_11707162_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-control/floorbug_hu2a4f98ea48d4cfd72de22c655851d2d9_11707162_9c8b7863356240629bff972d02fecc59.png&#34;
               width=&#34;760&#34;
               height=&#34;428&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;Also, while not a bug, I&amp;rsquo;m highly skeptical of an office building with lids on their public toilets.
Like.
Who does this?
The Federal Bureau of Control, I guess.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-control/toilets_hu51f52b82679017d68d67f516aa5fab5d_12345706_9eb1b276bfb13d1616aa2efd3e44fa05.png 400w,
               /review/videogame-control/toilets_hu51f52b82679017d68d67f516aa5fab5d_12345706_6c5133d8fe4f0ed579abd31ef949464b.png 760w,
               /review/videogame-control/toilets_hu51f52b82679017d68d67f516aa5fab5d_12345706_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-control/toilets_hu51f52b82679017d68d67f516aa5fab5d_12345706_9eb1b276bfb13d1616aa2efd3e44fa05.png&#34;
               width=&#34;760&#34;
               height=&#34;428&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
</description>
    </item>

    <item>
      <title>Outer Wilds</title>
      <link>https://mhmmoshtaghi.github.io/review/videogame-outer-wilds/</link>
      <pubDate>Sat, 24 Jul 2021 12:00:00 -0700</pubDate>
      <guid>https://mhmmoshtaghi.github.io/review/videogame-outer-wilds/</guid>
      <description>&lt;p&gt;Against the backdrop of a diorama solar system in a diorama universe, &lt;em&gt;Outer Wilds&lt;/em&gt; plunges forward into an ambitious adventure of wonder and exploration.
You play as the sixth member of your species to venture out into space — and the first to do so with a translation device for the language of the Nomai, an ancient species that mysteriously disappeared a long time ago.
Remnants of their civilization are scattered all around your solar system, like bread crumbs in a nonlinear trail, inviting you into their mystery.
What were the Nomai doing?
Where did they go?
What&amp;rsquo;s it all for?&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-outer-wilds/nomaischematics_hu850032374c8e22d7c3a6ee5181beb27f_1853793_8795a9b84ee65d8c63f55a17d07dad0a.png 400w,
               /review/videogame-outer-wilds/nomaischematics_hu850032374c8e22d7c3a6ee5181beb27f_1853793_eab8e4662d89d5fec492cf03b31eba11.png 760w,
               /review/videogame-outer-wilds/nomaischematics_hu850032374c8e22d7c3a6ee5181beb27f_1853793_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-outer-wilds/nomaischematics_hu850032374c8e22d7c3a6ee5181beb27f_1853793_8795a9b84ee65d8c63f55a17d07dad0a.png&#34;
               width=&#34;760&#34;
               height=&#34;428&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;I enthusiastically recommend &lt;em&gt;Outer Wilds&lt;/em&gt; to anyone who will listen; it&amp;rsquo;s a resounding 10/10.
I love the world and its inhabitants, and their ideals to explore and to understand.
The music frequently brings me to a very emotional place (more on that in a moment).
But this game&amp;rsquo;s best quality is its unique ability to engage players at the intersection of imagination and discovery: learning new information pushes you to form new questions, which in turn makes you seek new answers, and then the cycle repeats.
The nonlinear narrative supports your curiosity in whatever direction you decide to go; there are no artificial checkpoints or cutscenes pushing you towards a specific experience.
The way you engage with this world is your own.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Outer Wilds&lt;/em&gt; is surprisingly capable at blending the whimsy and brutality of space exploration.
Your spaceship is made of wood, of all things, and yet is often your only life support in the cold void of space.
Plummeting into a black hole is surprisingly non-lethal, but what awaits on the other side is nevertheless crushingly isolating.
Extremely bizarre things happen on a regular basis — like getting launched from a planet into low orbit only to crash back down — but manage to feel more bemusing than terrifying.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-outer-wilds/sunandembertwin_hu764ad56c509280e7a5ecd0d1fc05eb09_2114230_a8afe67fe00801f02d0ff55b479a278c.png 400w,
               /review/videogame-outer-wilds/sunandembertwin_hu764ad56c509280e7a5ecd0d1fc05eb09_2114230_51fc0110492a35c9f5a77dc2edef0c9e.png 760w,
               /review/videogame-outer-wilds/sunandembertwin_hu764ad56c509280e7a5ecd0d1fc05eb09_2114230_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-outer-wilds/sunandembertwin_hu764ad56c509280e7a5ecd0d1fc05eb09_2114230_a8afe67fe00801f02d0ff55b479a278c.png&#34;
               width=&#34;760&#34;
               height=&#34;428&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;And the music!
Funnily enough, when I fired up &lt;em&gt;Outer Wilds&lt;/em&gt; for the first time, I didn&amp;rsquo;t make it past the main menu.
I was captivated by the &lt;a href=&#34;https://soundcloud.com/andrewprahlow/main-title&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;title track&lt;/a&gt;.
As I watched the little campfire come to life, the theme&amp;rsquo;s dueling banjos sang optimism and hope into the deep black of space.
The composer, Andrew Prahlow, layers a bright foreground he recorded just before development wrapped with a background that he&amp;rsquo;d recorded &lt;a href=&#34;https://youtu.be/LbY0mBXKKT0?t=2411&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;seven years prior&lt;/a&gt; — a detail that&amp;rsquo;s both beyond incredible and very difficult to appreciate without having first finished the game.
Suffice it to say, this is my favorite game soundtrack, and I&amp;rsquo;ve listened to many.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-outer-wilds/opening_hue4e580f276037637a8acdceda0b8789c_2447327_79503bc24e7b47e8aa5fd3e0b1fc8e85.png 400w,
               /review/videogame-outer-wilds/opening_hue4e580f276037637a8acdceda0b8789c_2447327_ae0545433c5c675d0e15562a2e8e95ac.png 760w,
               /review/videogame-outer-wilds/opening_hue4e580f276037637a8acdceda0b8789c_2447327_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-outer-wilds/opening_hue4e580f276037637a8acdceda0b8789c_2447327_79503bc24e7b47e8aa5fd3e0b1fc8e85.png&#34;
               width=&#34;760&#34;
               height=&#34;428&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;Lastly, &lt;em&gt;Outer Wilds&lt;/em&gt; achieves a mark of masterclass sci-fi, wrapping the vast happenings of the universe into a story that is deeply personal.
It sets us off asking questions about physics and ancient anthropology but, along the way, teaches us to ask questions of ourselves.
How could we be more open-handed and filled with wonder, like the Nomai?
What do we do with the memories of people and experiences long gone?
How can we live bravely in the face of a constantly uncertain future?&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;It&amp;rsquo;s tempting to linger in this moment, while every possibility still exists.
But unless they are collapsed by an observer, they will never be more than possibilities.&lt;/p&gt;
&lt;/blockquote&gt;
</description>
    </item>

    <item>
      <title>Algorithmic Foundations of Emergent Behavior in Analog Collectives</title>
      <link>https://mhmmoshtaghi.github.io/event/2021sfi-analogcollectives/</link>
      <pubDate>Wed, 14 Jul 2021 12:15:00 -0600</pubDate>
      <guid>https://mhmmoshtaghi.github.io/event/2021sfi-analogcollectives/</guid>
      <description></description>
    </item>

    <item>
      <title>A Distributed, Stochastic Framework for Active Matter</title>
      <link>https://mhmmoshtaghi.github.io/project/active-matter/</link>
      <pubDate>Fri, 23 Apr 2021 00:00:00 +0000</pubDate>
      <guid>https://mhmmoshtaghi.github.io/project/active-matter/</guid>
      <description>&lt;p&gt;We develop a theoretical framework for task-oriented &lt;em&gt;active matter&lt;/em&gt; that combines distributed computing, stochastic processes, statistical physics, active matter physics, and robophysics. By harnessing phase changes from statistical physics in our formal modeling and algorithm design, we obtain robust and provable self-organizing behaviors. We then incorporate this theory into swarm robotics platforms, establishing tight analogies between (but not necessarily strict implementations of) the algorithms&#39; rules and our robots&#39; designs. This allows us to critically examine our theoretical algorithms&#39; robustness to the errors and uncertainties of physical environments. Further, we can treat robot swarms as macro-scale active matter systems, studying the inter-robot dynamics as an analogy to particle interactions.&lt;/p&gt;
</description>
    </item>

    <item>
      <title>Programming Active Cohesive Granular Matter with Mechanically Induced Phase Changes</title>
      <link>https://mhmmoshtaghi.github.io/publication/li2021-bobbots/</link>
      <pubDate>Fri, 23 Apr 2021 00:00:00 +0000</pubDate>
      <guid>https://mhmmoshtaghi.github.io/publication/li2021-bobbots/</guid>
      <description>&lt;h3 id=&#34;related-press&#34;&gt;Related Press&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://news.gatech.edu/2021/04/29/simple-robots-smart-algorithms-meet-bobbots&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Simple Robots, Smart Algorithms: Meet the BOBbots.&lt;/a&gt; Dana Randall. &lt;em&gt;Georgia Tech News Center&lt;/em&gt;, April 2021. (Also featured in &lt;a href=&#34;https://www.eurekalert.org/pub_releases/2021-04/giot-srs042321.php&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;em&gt;EurekaAlert!&lt;/em&gt;&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://fullcircle.asu.edu/research/greater-than-the-sum-of-its-parts/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Greater Than the Sum of Its Parts.&lt;/a&gt; Gary Werner. &lt;em&gt;ASU FullCircle&lt;/em&gt;, April 2021. (Also featured in &lt;a href=&#34;https://news.asu.edu/20210426-greater-sum-its-parts&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;em&gt;ASU News&lt;/em&gt;&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>

    <item>
      <title>Collaborating in Motion: Distributed and Stochastic Algorithms for Emergent Behavior in Programmable Matter</title>
      <link>https://mhmmoshtaghi.github.io/event/2021asu-dissertationdefense/</link>
      <pubDate>Mon, 15 Mar 2021 09:00:00 -0700</pubDate>
      <guid>https://mhmmoshtaghi.github.io/event/2021asu-dissertationdefense/</guid>
      <description>&lt;h3 id=&#34;abstract&#34;&gt;Abstract&lt;/h3&gt;
&lt;p&gt;Our world is filled with systems of entities that collaborate in motion, both natural and engineered. These cooperative distributed systems are capable of sophisticated and surprising &lt;em&gt;emergent behavior&lt;/em&gt; that arises from the comparatively simple interactions of their members. A model system for emergent collective behavior is &lt;em&gt;programmable matter&lt;/em&gt;, a physical substance capable of autonomously changing its properties in response to user input or stimuli from its environment. This dissertation studies &lt;em&gt;distributed and stochastic algorithms&lt;/em&gt; that control the local behaviors and interactions of individual modules of programmable matter to induce complex collective behavior at the macroscale. It consists of four parts.&lt;/p&gt;
&lt;p&gt;In the first, a new distributed computing model of programmable matter called the &lt;em&gt;canonical amoebot model&lt;/em&gt; is proposed. A key goal of the canonical amoebot model is to bring algorithmic theory closer to the physical realities of programmable matter hardware, especially with respect to &lt;em&gt;concurrency&lt;/em&gt; and &lt;em&gt;energy distribution&lt;/em&gt;. Two complementary protocols are presented that together can extend existing sequential, energy-agnostic algorithms for programmable matter to the more realistic concurrent, energy-constrained setting without sacrificing correctness, assuming the original algorithms satisfy certain conventions.&lt;/p&gt;
&lt;p&gt;In the second part, &lt;em&gt;stateful distributed algorithms&lt;/em&gt; that use amoebot memory and communication are presented for &lt;em&gt;leader election&lt;/em&gt;, &lt;em&gt;object coating&lt;/em&gt;, &lt;em&gt;convex hull formation&lt;/em&gt;, and &lt;em&gt;asynchronous hexagon formation&lt;/em&gt;. The first three algorithms are proven to have runtimes that are linear in the amoebot system size when assuming a simplified sequential setting. The final algorithm for hexagon formation is instead proven to be correct under unfair asynchronous adversarial activation, the most general of all adversarial activation models.&lt;/p&gt;
&lt;p&gt;In the third part, the &lt;em&gt;stochastic approach to self-organizing particle systems&lt;/em&gt; is presented. This approach combines distributed algorithms with ideas from statistical physics and Markov chain design to replace algorithm reliance on memory and communication with biased random decisions, requiring little to no memory and gaining inherent self-stabilizing and fault-tolerant properties. Using this stochastic approach, algorithms for &lt;em&gt;compression&lt;/em&gt;, &lt;em&gt;shortcut bridging&lt;/em&gt;, and &lt;em&gt;separation&lt;/em&gt; are designed and analyzed.&lt;/p&gt;
&lt;p&gt;Finally, a two-pronged approach to &amp;quot;programming&amp;quot; physical ensembles across scales is presented. This approach leverages the &lt;em&gt;physics of local interactions&lt;/em&gt; to pair theoretical, algorithmic abstractions of self-organizing particle systems with experimental robot systems of &lt;em&gt;active granular matter&lt;/em&gt; that intentionally lack digital computation and communication. We demonstrate how the behavior of robots whose design &lt;em&gt;physically embodies&lt;/em&gt; salient features of an algorithm can be predicted by the algorithm&amp;rsquo;s theoretical analysis, treating the ensemble behaviors of &lt;em&gt;phototaxing&lt;/em&gt;, &lt;em&gt;aggregation&lt;/em&gt;, &lt;em&gt;dispersion&lt;/em&gt;, and &lt;em&gt;object transport&lt;/em&gt;.&lt;/p&gt;
</description>
    </item>

    <item>
      <title>Collaborating in Motion: Distributed and Stochastic Algorithms for Emergent Behavior in Programmable Matter</title>
      <link>https://mhmmoshtaghi.github.io/publication/daymude2021-phdthesis/</link>
      <pubDate>Mon, 15 Mar 2021 00:00:00 +0000</pubDate>
      <guid>https://mhmmoshtaghi.github.io/publication/daymude2021-phdthesis/</guid>
      <description>&lt;h3 id=&#34;abstract&#34;&gt;Abstract&lt;/h3&gt;
&lt;p&gt;The world is filled with systems of entities that collaborate in motion, both natural and engineered. These cooperative distributed systems are capable of sophisticated emergent behavior arising from the comparatively simple interactions of their members. A model system for emergent collective behavior is programmable matter, a physical substance capable of autonomously changing its properties in response to user input or environmental stimuli. This dissertation studies distributed and stochastic algorithms that control the local behaviors of individual modules of programmable matter to induce complex collective behavior at the macroscale. It consists of four parts.&lt;/p&gt;
&lt;p&gt;In the first, the canonical amoebot model of programmable matter is proposed. A key goal of this model is to bring algorithmic theory closer to the physical realities of programmable matter hardware, especially with respect to concurrency and energy distribution. Two protocols are presented that together extend sequential, energy-agnostic algorithms to the more realistic concurrent, energy-constrained setting without sacrificing correctness, assuming the original algorithms satisfy certain conventions.&lt;/p&gt;
&lt;p&gt;In the second part, stateful distributed algorithms using amoebot memory and communication are presented for leader election, object coating, convex hull formation, and hexagon formation. The first three algorithms are proven to have linear runtimes when assuming a simplified sequential setting. The final algorithm for hexagon formation is instead proven to be correct under unfair asynchronous adversarial activation, the most general of all adversarial activation models.&lt;/p&gt;
&lt;p&gt;In the third part, distributed algorithms are combined with ideas from statistical physics and Markov chain design to replace algorithm reliance on memory and communication with biased random decisions, gaining inherent self-stabilizing and fault-tolerant properties. Using this stochastic approach, algorithms for compression, shortcut bridging, and separation are designed and analyzed.&lt;/p&gt;
&lt;p&gt;Finally, a two-pronged approach to &amp;quot;programming&amp;quot; physical ensembles is presented. This approach leverages the physics of local interactions to pair theoretical abstractions of self-organizing particle systems with experimental robot systems of active granular matter that intentionally lack digital computation and communication. By physically embodying the salient features of an algorithm in robot design, the algorithm&amp;rsquo;s theoretical analysis can predict the robot ensemble&amp;rsquo;s behavior. This approach is applied to phototaxing, aggregation, dispersion, and object transport.&lt;/p&gt;
</description>
    </item>

    <item>
      <title>Jedi: Fallen Order</title>
      <link>https://mhmmoshtaghi.github.io/review/videogame-jedi-fallen-order/</link>
      <pubDate>Fri, 22 Jan 2021 22:09:15 -0700</pubDate>
      <guid>https://mhmmoshtaghi.github.io/review/videogame-jedi-fallen-order/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m not ashamed to admit that I spent much of my childhood wanting to be a Jedi.
My sister and I would duel for hours in the backyard with our plastic lightsabers, having to pause between whacks and parries to negotiate whose limbs were still attached or how far back we were supposed to move when the other pushed with the Force.
As a teenager, &lt;em&gt;The Force Unleashed&lt;/em&gt; on the Wii was magic: my remote was my lightsaber, my nunchuk was my connection to the Force, and the galaxy was filled with Stormtroopers to send flying.
(Too bad it &lt;a href=&#34;https://www.escapistmagazine.com/v2/explaining-star-wars-the-force-unleashed-controversial-place-in-the-expanded-universe/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;kind of sort of isn&amp;rsquo;t canon&lt;/a&gt;.)
Now, as an adult and a whole sequel trilogy and two seasons of &lt;em&gt;The Mandalorian&lt;/em&gt; later — not to mention the nine seasons of &lt;em&gt;The Clone Wars&lt;/em&gt; that I&amp;rsquo;m still catching up on — I&amp;rsquo;m all in on Star Wars growing up with me, learning how to tell new and more mature stories.
&lt;em&gt;Jedi: Fallen Order&lt;/em&gt; is exactly that, putting the player at the center of a decent Jedi story with slick Jedi combat.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-jedi-fallen-order/boganovault_hu58287486998c194fffaf63e800bd9874_2899197_5824f396544b564802cb9d22a41e1dc7.png 400w,
               /review/videogame-jedi-fallen-order/boganovault_hu58287486998c194fffaf63e800bd9874_2899197_3fcba4cbdca54ced68040e15734231d5.png 760w,
               /review/videogame-jedi-fallen-order/boganovault_hu58287486998c194fffaf63e800bd9874_2899197_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-jedi-fallen-order/boganovault_hu58287486998c194fffaf63e800bd9874_2899197_5824f396544b564802cb9d22a41e1dc7.png&#34;
               width=&#34;760&#34;
               height=&#34;428&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-jedi-fallen-order/scouttroopers_hude06c35df865cbabc11390a267dc31da_3295951_fa83fb7b01a81ee177e02bb8e27933e3.png 400w,
               /review/videogame-jedi-fallen-order/scouttroopers_hude06c35df865cbabc11390a267dc31da_3295951_7db9523515466bfdf3def10a43b487a4.png 760w,
               /review/videogame-jedi-fallen-order/scouttroopers_hude06c35df865cbabc11390a267dc31da_3295951_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-jedi-fallen-order/scouttroopers_hude06c35df865cbabc11390a267dc31da_3295951_fa83fb7b01a81ee177e02bb8e27933e3.png&#34;
               width=&#34;760&#34;
               height=&#34;428&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;&lt;em&gt;Jedi: Fallen Order&lt;/em&gt; takes place during The Purge, which for the uninitiated is a period of Star Wars history just after the majority of Jedi are executed by their clone allies in &lt;em&gt;Revenge of the Sith&lt;/em&gt; (Order 66).
The fledgling Empire casts the few Jedi who survive as traitors to the Republic, hunting them down to either kill them or turn them to the Dark Side as Inquisitors (ex-Jedi who hunt Jedi).
You play as Cal Kestis, a padawan who experienced deep personal loss and trauma during Order 66 and has been concealing his powers to survive The Purge.
Other major characters include Cere Junda, an ex-Jedi Master who severed her connection with the Force after an especially traumatic event during The Purge, and a Nightsister whose people were killed in genocide during the Clone Wars.
This is a Star Wars story where nobody&amp;rsquo;s okay and the heroes are the ones who are brave enough to believe in one another as they heal.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-jedi-fallen-order/ilumbattle_hu09f15c0bcdcda375de7ea645566f48cd_3799220_a45f7e936f319b6dce9bd0e56da1bc78.png 400w,
               /review/videogame-jedi-fallen-order/ilumbattle_hu09f15c0bcdcda375de7ea645566f48cd_3799220_1f5066f3f9f160ec519b48d97f36b4a3.png 760w,
               /review/videogame-jedi-fallen-order/ilumbattle_hu09f15c0bcdcda375de7ea645566f48cd_3799220_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-jedi-fallen-order/ilumbattle_hu09f15c0bcdcda375de7ea645566f48cd_3799220_a45f7e936f319b6dce9bd0e56da1bc78.png&#34;
               width=&#34;760&#34;
               height=&#34;428&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;The gameplay absolutely does what it needs to do to make you feel like a Jedi, from customizing your lightsaber to dueling against powerful adversaries to bonding with a droid companion.
I think all of those things were non-negotiables for a modern Star Wars game, and as such, it suffices to say that &lt;em&gt;Jedi: Fallen Order&lt;/em&gt; does them well.
What&amp;rsquo;s really special about this game is how cool it makes you feel despite Cal not being the greatest of Jedi.
He&amp;rsquo;s hidden his abilities for years, presumably.
At best, he&amp;rsquo;s just rusty and has forgotten a lot of his training; at worst, his trauma and guilt pushes his connection with the Force towards fear and unpolished lack of control.
In the early stages of the game, Cal can&amp;rsquo;t even move stuff around with the Force; he can wall-run, however (Respawn just couldn&amp;rsquo;t resist sprinkling in a little &lt;em&gt;Titanfall&lt;/em&gt;, could they?).
His best ability, psychometry, makes him a better anthropologist than Stormtrooper-slayer: he can sense an object&amp;rsquo;s history by touching it, filling out the backstory of the different planets and societies he interacts with.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-jedi-fallen-order/dathomir_hu1243943952a5fdf76277be63ba3703ec_2975053_36cccd48889df386deb784ed787d2a9e.png 400w,
               /review/videogame-jedi-fallen-order/dathomir_hu1243943952a5fdf76277be63ba3703ec_2975053_7c36f9fb4c68b40f7630d86f61fd32d3.png 760w,
               /review/videogame-jedi-fallen-order/dathomir_hu1243943952a5fdf76277be63ba3703ec_2975053_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-jedi-fallen-order/dathomir_hu1243943952a5fdf76277be63ba3703ec_2975053_36cccd48889df386deb784ed787d2a9e.png&#34;
               width=&#34;760&#34;
               height=&#34;428&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;The five playable planets in this galaxy far, far away are largely linear, keeping you moving towards your next plot point.
There&amp;rsquo;s not a side quest to be seen, and the only exploration Cal can do is to veer off the main path for a slightly less obvious path where he might find a secret or unlockable cosmetic.
(As an aside, I love that Cal wears ponchos — as opposed to, I don&amp;rsquo;t know, Jedi robes? — but I can&amp;rsquo;t get over how over half of them are badly-fitting, hoodless, plastic raincoats.)
100%-ing &lt;em&gt;Jedi: Fallen Order&lt;/em&gt; is a fine and relatively quick experience (except for the very Star Wars and very bad &lt;a href=&#34;https://game-maps.com/SWJFO/Jedi-Fallen-Order-Maps.asp&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;holomaps&lt;/a&gt;), revisiting planets when equipped with new Force abilities to get into previously inaccessible nooks and crannies.
This feels less like a chore and more like virtual space-tourism, giving players a second chance to appreciate the beautifully crafted set design and try out the very nicely implemented photo mode.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-jedi-fallen-order/fortressinquisitoris_hud5dd9248f697357f9555c538c13da0e0_3009625_f8b3050f6dabbb7365fa50aee6bd4876.png 400w,
               /review/videogame-jedi-fallen-order/fortressinquisitoris_hud5dd9248f697357f9555c538c13da0e0_3009625_5259c7f9db81f72ee99e203d476d2d15.png 760w,
               /review/videogame-jedi-fallen-order/fortressinquisitoris_hud5dd9248f697357f9555c538c13da0e0_3009625_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-jedi-fallen-order/fortressinquisitoris_hud5dd9248f697357f9555c538c13da0e0_3009625_f8b3050f6dabbb7365fa50aee6bd4876.png&#34;
               width=&#34;760&#34;
               height=&#34;428&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;All in all, &lt;em&gt;Jedi: Fallen Order&lt;/em&gt; does what it came to do: put players in the shoes of a Jedi powered by the best of what 2019 tech could offer.
The experience certainly feels more self-contained and linear than what we may have hoped, but it&amp;rsquo;s good for what it is.
With EA&amp;rsquo;s Star Wars exclusivity &lt;a href=&#34;https://www.wired.com/story/lucasfilm-games-star-wars-ubisoft-indiana-jones-bethesda/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;now expired&lt;/a&gt;, maybe Ubisoft&amp;rsquo;s Massive Entertainment will give us the beautiful, open-world Star Wars playground of little-Josh&amp;rsquo;s dreams.&lt;/p&gt;
&lt;h2 id=&#34;bugs&#34;&gt;Bugs&lt;/h2&gt;
&lt;p&gt;I know this isn&amp;rsquo;t a bug but it&amp;rsquo;s so bad that I&amp;rsquo;m calling it one: every sad excuse for a Wookiee in this game (except Tarfull) looks like a stick with clumpy fur.
To the developers at Respawn, Chewbacca would be disappointed in you.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-jedi-fallen-order/wookiee_hu78d9a4a2ecba7e87b86359930f979412_3375027_e34c7bc312e800556d389b8babb74a27.png 400w,
               /review/videogame-jedi-fallen-order/wookiee_hu78d9a4a2ecba7e87b86359930f979412_3375027_62cbf9d69accb4001bb597d29495be7a.png 760w,
               /review/videogame-jedi-fallen-order/wookiee_hu78d9a4a2ecba7e87b86359930f979412_3375027_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-jedi-fallen-order/wookiee_hu78d9a4a2ecba7e87b86359930f979412_3375027_e34c7bc312e800556d389b8babb74a27.png&#34;
               width=&#34;760&#34;
               height=&#34;428&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
</description>
    </item>

    <item>
      <title>Bio-Inspired Energy Distribution for Programmable Matter</title>
      <link>https://mhmmoshtaghi.github.io/event/2021icdcn-energydistribution/</link>
      <pubDate>Thu, 07 Jan 2021 09:35:00 +0900</pubDate>
      <guid>https://mhmmoshtaghi.github.io/event/2021icdcn-energydistribution/</guid>
      <description></description>
    </item>

    <item>
      <title>Bio-Inspired Energy Distribution for Programmable Matter</title>
      <link>https://mhmmoshtaghi.github.io/publication/daymude2021-energydistribution/</link>
      <pubDate>Tue, 05 Jan 2021 00:00:00 +0000</pubDate>
      <guid>https://mhmmoshtaghi.github.io/publication/daymude2021-energydistribution/</guid>
      <description>&lt;h3 id=&#34;summary&#34;&gt;Summary&lt;/h3&gt;
&lt;p&gt;In short, individual bacterium that are metabolically stressed (lacking in nutrients) catalyze a wave of chemical signaling that inhibits the rest of the biofilm’s nutrient uptake. This allows more nutrients to flow to the stressed bacteria, effectively solving the energy distribution problem. We model energy constraints in the amoebot model by giving each particle a battery for storing energy that it can transfer to its neighbors or spend to perform actions. We assume at least one particle in the system has access to an &lt;em&gt;external energy source&lt;/em&gt; from which it can harvest energy. The goal of our energy distribution algorithm is to coordinate the transfer of energy between particles so that all particles meet their actions’ energy demands and at least one particle can actually perform its action within a bounded amount of time. After some initial setup, our &lt;strong&gt;Energy-Sharing&lt;/strong&gt; algorithm works in the following phases repeated by each particle individually:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Communication.&lt;/em&gt; Particles propagate &amp;ldquo;stress&amp;rdquo; and &amp;ldquo;inhibition&amp;rdquo; signals to communicate the energy states of starving particles throughout the system.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Sharing.&lt;/em&gt; Particles harvest energy they lack from an external source (if they have access to one) and transfer energy to neighbors that need it.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Usage.&lt;/em&gt; Particles that are not inhibited spend their stored energy to perform actions, participating in the collective behavior.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We prove that the &lt;strong&gt;Energy-Sharing&lt;/strong&gt; algorithm allows the particle system to meet its energy demands every ${\cal O}(n)$ asynchronous rounds, where $n$ is the number of particles in the system. A simulation of the &lt;strong&gt;Energy-Sharing&lt;/strong&gt; algorithm can be seen below, corresponding to Figure 2 in the paper. All particles are initially idle, with the exception of the root (with external energy access) shown with a gray/black ring. The setup phase establishes the spanning forest (or tree, in this case) rooted at particle(s) with energy access; a particle&amp;rsquo;s parent direction is shown as an arc. Since all particles start with empty batteries, stress flags (shown as red rings) quickly propagate throughout the system and inhibit flags soon follow. As energy is harvested by the root and shared throughout the system, some particles (shown with yellow rings) receive sufficient energy to meet the demand for their next action but remain inhibited from using it. This inhibition remains until all stressed particles in the system receive sufficient energy to meet their demands, at which point particles (shown with green rings) can reset their inhibit flags and use their energy. After using energy, these particles may again become stressed and trigger another stage of inhibition.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34;
           src=&#34;https://mhmmoshtaghi.github.io/publication/daymude2021-energydistribution/energysim.gif&#34;
           loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;When communication of the stress/inhibit flags is disabled, the energy distribution strategy in Energy-Sharing fails (just as the bacterial biofilms fail to feed all bacteria when their signal relays are disabled). A simulation of this setting is shown below, corresponding to Figure 3 in the paper. Without the communication phase to inhibit particles from using energy while those that are stressed recharge, particles continuously share any energy they have with their descendants in the spanning forest. Thus, while the leaves of the spanning forest occasionally meet their energy demands(seen as the flickering darker green particles), even after 1000 rounds most particles have still not met their energy demand even once.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34;
           src=&#34;https://mhmmoshtaghi.github.io/publication/daymude2021-energydistribution/nocommsim.gif&#34;
           loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;As an independent but supporting result, we present the &lt;strong&gt;Forest-Prune-Repair&lt;/strong&gt; algorithm that enables a spanning forest of particles to self-repair in the presence of &lt;em&gt;crash failures&lt;/em&gt; so long as the set of non-faulty particles remains connected and there is at least one non-crashed root. We prove that this algorithm stabilizes in a spanning forest rooted at root particles in at most ${\cal O}(m^2)$ asynchronous rounds, where $m$ is the number of particles that are severed from the spanning forest by crash failures.&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;Energy-Sharing&lt;/strong&gt; algorithm relies on an underlying spanning forest structure to communicate its stress/inhibition signals. However, if particles move as they often do in collective behaviors, this disrupts the communication structure. Thus, the &lt;strong&gt;Forest-Prune-Repair&lt;/strong&gt; algorithm can be used as an underlying primitive in &lt;strong&gt;Energy-Sharing&lt;/strong&gt; so that &lt;strong&gt;Energy-Sharing&lt;/strong&gt; can be composed with existing amoebot model algorithms, extending them to consider energy constraints. Below is an example of &lt;strong&gt;Energy-Sharing&lt;/strong&gt; composed with &lt;a href=&#34;https://sops.engineering.asu.edu/simulations/#hexagonformation&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Basic Shape Formation&lt;/a&gt;, corresponding to Figure 5 in the paper.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34;
           src=&#34;https://mhmmoshtaghi.github.io/publication/daymude2021-energydistribution/compsim.gif&#34;
           loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;Since &lt;strong&gt;Energy-Sharing&lt;/strong&gt; meets the system’s energy demands every ${\cal O}(n)$ asynchronous rounds and &lt;strong&gt;Forest-Prune-Repair&lt;/strong&gt; repairs any disruptions to the communication structure as particles move, a composed algorithm will not be impeded by the underlying energy distribution primitive, but may add significant overhead to its runtime. However, we observe reasonable performance in practice: for example, since hexagon formation terminates in ${\cal O}(n)$ rounds, our proven bounds suggest that the composed algorithm could terminate in time ${\cal O}(n^2)$ or worse but the graph below demonstrates an overhead that appears asymptotically sublinear. With the addition of more energy roots, the composed algorithm is dramatically faster, approaching the runtime achieved without energy constraints.&lt;/p&gt;
&lt;img src=&#34;compgraph_time.png&#34; style=&#34;display: inline-block; width: 48%; margin-right: 1%&#34;/&gt;
&lt;img src=&#34;compgraph_root.png&#34; style=&#34;display: inline-block; width: 48%; margin-left: 1%&#34;/&gt;
&lt;p&gt;As a final, informal experiment, we performed a simulation where energy is used for &lt;em&gt;reproduction&lt;/em&gt;, mimicking the bacterial biofilms we were inspired by. In our preliminary experiments, we obtain behavior that is qualitatively similar to the biofilm growth patterns observed by &lt;a href=&#34;https://www.nature.com/articles/nature14660&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Liu&lt;/a&gt; and &lt;a href=&#34;https://www.nature.com/articles/nature15709&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Prindle&lt;/a&gt; et al.; in particular, the use of communication and inhibition leads to an oscillatory growth rate. The simulation below corresponds to Figure 7 in the paper.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34;
           src=&#34;https://mhmmoshtaghi.github.io/publication/daymude2021-energydistribution/growthsim.gif&#34;
           loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
</description>
    </item>

    <item>
      <title>Spiritfarer</title>
      <link>https://mhmmoshtaghi.github.io/review/videogame-spiritfarer/</link>
      <pubDate>Wed, 07 Oct 2020 21:12:52 -0700</pubDate>
      <guid>https://mhmmoshtaghi.github.io/review/videogame-spiritfarer/</guid>
      <description>&lt;p&gt;The world of &lt;em&gt;Spiritfarer&lt;/em&gt; is in between life and the afterlife, where the spirits of the dead run lemonade stands, go on meditation retreats, and look down on the less fortunate from skyscrapers while they prepare emotionally to pass on to the beyond. As the Spiritfarer, our protagonist Stella and her cat Daffodil are tasked with supporting reluctant spirits on their journey to the Everdoor. By building each spirit a unique home, cooking them their favorite meals, and giving them &lt;em&gt;the best video game hugs I have ever seen&lt;/em&gt;, each spirit gradually comes to deal with their unique and challenging vestiges from the life before.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-spiritfarer/charon_hu9a87c5e1f88957c09600be8ba28547b3_1916812_e44ffc2f1bc8b431c11cc81c9ddbfb68.png 400w,
               /review/videogame-spiritfarer/charon_hu9a87c5e1f88957c09600be8ba28547b3_1916812_acaf83cef29a6453f709e123af0748ec.png 760w,
               /review/videogame-spiritfarer/charon_hu9a87c5e1f88957c09600be8ba28547b3_1916812_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-spiritfarer/charon_hu9a87c5e1f88957c09600be8ba28547b3_1916812_e44ffc2f1bc8b431c11cc81c9ddbfb68.png&#34;
               width=&#34;760&#34;
               height=&#34;428&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;Substance aside, &lt;em&gt;Spritfarer&lt;/em&gt; is absolutely beautiful. The hand-drawn assets and delightful animations make the game feel like a living storybook. For a game billed as &amp;ldquo;a cozy management game about dying,&amp;rdquo; the art is remarkably bright and lighthearted. It even has its own &lt;a href=&#34;https://thunderlotus.itch.io/spiritfarer-art-book&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;art book&lt;/a&gt;, which is an accomplishment for a small indie studio. The clip below has a bunch of my favorite animations, starting with a hug (I&amp;rsquo;m telling you, the hugs are bomb) and ending with the hidden gem of Daffodil&amp;rsquo;s yawn.&lt;/p&gt;

&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
  &lt;iframe src=&#34;https://www.youtube.com/embed/NA4hANZWn1I&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; allowfullscreen title=&#34;YouTube Video&#34;&gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;br/&gt;
&lt;p&gt;&lt;em&gt;Spiritfarer&lt;/em&gt; balances its predilection for waxing philosophical on death with self-aware humor that is packed with internet in-jokes and a dash of anti-corporate sentiment. Midway through the game, Stella meets an NPC with the genre-typical responsibility of rewarding 100% completion: collect all that the game has to offer, and this spirit will give you rewards. But in a fun twist, this spirit hates her job and finds your catching, asphyxiating, cooking, and eating of &amp;ldquo;all the fish in the ocean&amp;rdquo; to be horrifying. (As an aside, &lt;em&gt;Spiritfarer&lt;/em&gt; is yet another game that simultaneously promotes non-violence but imposes a &lt;a href=&#34;https://link.springer.com/article/10.1007/s40869-018-0055-x&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;hierarchy on nonhuman animal species&lt;/a&gt; that deems it non-problematic for anthropomorphic animals to kill and consume marine life including fish, squid, and octopi.)&lt;/p&gt;
&lt;p&gt;As another example, we get an early nod to &lt;a href=&#34;https://www.polygon.com/videos/2020/5/18/21257219/tom-nook-animal-crossing-good-evil-landlord&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Tom Nook&lt;/a&gt; of &lt;em&gt;Animal Crossing&lt;/em&gt; that lands not just for the many gamers who have spent most of their 2020 in &lt;em&gt;New Horizons&lt;/em&gt;, but also for those of us who are growing increasingly concerned with the ethics of big corporations and poor treatment of workers.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-spiritfarer/raccooninc_hu505484d949edc711b370a72cec88d6d5_1987505_03c4d1aab59c6d0922780fa535292ecf.png 400w,
               /review/videogame-spiritfarer/raccooninc_hu505484d949edc711b370a72cec88d6d5_1987505_2367339c49312a0738472bd913af0137.png 760w,
               /review/videogame-spiritfarer/raccooninc_hu505484d949edc711b370a72cec88d6d5_1987505_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-spiritfarer/raccooninc_hu505484d949edc711b370a72cec88d6d5_1987505_03c4d1aab59c6d0922780fa535292ecf.png&#34;
               width=&#34;760&#34;
               height=&#34;428&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;The extent to which the developers succeed in promoting positive change is mixed. Within the first five-ish hours of gameplay, &lt;em&gt;Spiritfarer&lt;/em&gt; establishes solid representation: Stella is a Black woman, two characters are LGBTQ, and several characters struggling with their mental health are portrayed compassionately. There&amp;rsquo;s the aforementioned focus on the plight of the worker, as we meet one character leading a protest against unjust labor practices and another who was a union leader in his past life. And, of course, there is the overarching goal of helping and caring for others as they seek peace.&lt;/p&gt;
&lt;p&gt;The problem is that none of these key issues feel fully fleshed out; they&amp;rsquo;re simply presented and then brushed aside by &lt;em&gt;Spiritfarer&lt;/em&gt;&amp;rsquo;s prevailing lightness. The labor dispute is resolved by the CEO&amp;rsquo;s comedic need to use the restroom overcoming his callous business sense. Mental health struggles are seemingly assuaged by Stella&amp;rsquo;s care and comfort. It is as if the core message of the game, intended or not, is that no injustice is too big to be solved by the benevolence and persistence of the oppressed: just cook someone their favorite foods and hug them often enough, and all their internalized trauma will simply disappear.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m all for meeting individual, tangible needs and loving our neighbors, but this must be done in concert with iterative, systems-level change. I won&amp;rsquo;t hold a video game to the unreasonably high standard of enacting real-world change, but if &lt;em&gt;Spiritfarer&lt;/em&gt; is going to talk about real stuff, I will too.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-spiritfarer/meditation_huf4597e38d94b98f06d683eb118cb9ef4_1474970_ba1554f54213d002146dda93762c354d.png 400w,
               /review/videogame-spiritfarer/meditation_huf4597e38d94b98f06d683eb118cb9ef4_1474970_6fc5815f03b734675ee944bef8058bee.png 760w,
               /review/videogame-spiritfarer/meditation_huf4597e38d94b98f06d683eb118cb9ef4_1474970_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-spiritfarer/meditation_huf4597e38d94b98f06d683eb118cb9ef4_1474970_ba1554f54213d002146dda93762c354d.png&#34;
               width=&#34;760&#34;
               height=&#34;428&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;Returning to gameplay, &lt;em&gt;Spiritfarer&lt;/em&gt; has a very satisfying play loop where each task hooks into the next. It&amp;rsquo;s quite easy to loose track of time while playing: Travel somewhere new to find new spirits and materials. Use new materials to build, grow, and craft new things. Take those new things and cook and chop and weave and smelt and crush them into yet other things. Realize that you don&amp;rsquo;t have the things to meet your spirit passengers&#39; food/improvement requests. Travel to a new place in search of those things. Repeat.&lt;/p&gt;
&lt;p&gt;This satisfying loop lasts until roughly 75% through the game, at which point you and your ship become so capable of overproducing that many of the management tasks become irrelevant. I just had to remember to feed people during my obsession with secret-hunting, hopping between islands and doing very little to advance the story.&lt;/p&gt;
&lt;p&gt;The platforming/metroidvania aspects of the game come in exploring the various islands, where new abilities allow you to reach literally greater heights in your search for materials, side quests, and upgrade blueprints. This never feels particularly overwhelming (like having to remember a specific location with a specific secret to come back to), though the quest log and the mail inventory could have been far better organized. (Also, Thunder Lotus, would it have been narrative breaking to let me check the ship&amp;rsquo;s map without having to go back to the Captain&amp;rsquo;s chamber? I know it&amp;rsquo;s powered by the Everlight, but Stella always has the Everlight on her&amp;hellip;)&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-spiritfarer/fishing_hu816391143ad5f60e34c823998845babc_1008006_7dafa4c7146b4d1c5c32372c79aa40fd.png 400w,
               /review/videogame-spiritfarer/fishing_hu816391143ad5f60e34c823998845babc_1008006_f8dc91cac5ab637d0f65182ff244a13f.png 760w,
               /review/videogame-spiritfarer/fishing_hu816391143ad5f60e34c823998845babc_1008006_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-spiritfarer/fishing_hu816391143ad5f60e34c823998845babc_1008006_7dafa4c7146b4d1c5c32372c79aa40fd.png&#34;
               width=&#34;760&#34;
               height=&#34;428&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;&lt;em&gt;Spritfarer&lt;/em&gt; didn&amp;rsquo;t quite live up to the deeply thoughtful reflection on life and dying that I expected it to be, but it was a delightful game. I enjoyed the little moments — passing jokes, conversations with my spirit passengers, and &lt;em&gt;those hugs&lt;/em&gt; — despite the fact that the narrative could have been a bit more explicit and punchy with its key points. As I write this, I realize I likely missed a small handful of those meandering, serendipitous moments that end up being the most memorable. In that sense, my take on &lt;em&gt;Spiritfarer&lt;/em&gt; can be summed up by one of the first lines from Charon, Stella&amp;rsquo;s predecessor:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;I cannot say that I am sad to leave, but I still had a few things left to do here.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Take care of each other.&lt;/p&gt;
&lt;h2 id=&#34;bugs&#34;&gt;Bugs&lt;/h2&gt;
&lt;p&gt;I only encountered two bugs during my playthrough, and both were minor.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;After rearranging the buildings on my ship, one of my passengers became stranded in the attic of the chicken coop, inaccessible to me and seemingly unaware of their predicament. This reset after quitting to the main menu.&lt;/li&gt;
&lt;li&gt;While running back and forth between the bellows in the Forge, Daffodil glitched. Her positioning reset after leaving the Forge.&lt;/li&gt;
&lt;/ul&gt;

&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
  &lt;iframe src=&#34;https://www.youtube.com/embed/wzwQ9jPNXmA&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; allowfullscreen title=&#34;YouTube Video&#34;&gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;br/&gt;
&lt;p&gt;Finally, a mini-rant on something that isn&amp;rsquo;t so much a technical bug as a design flaw: the secret achievements &amp;ldquo;Loose Lips&amp;rdquo; and &amp;ldquo;Sealed Lips&amp;rdquo; should absolutely not be in the game. Without spoilers, these achievements are unlocked based on engaging in a main quest conversation that — depending on how you play — can occur quite late in the game. Choose one dialogue option, you get &amp;ldquo;Loose Lips&amp;rdquo;; choose the other, you get &amp;ldquo;Sealed Lips.&amp;rdquo; Unless you know this ahead of time and do a &lt;a href=&#34;https://www.trueachievements.com/a306628/sealed-lips-achievement?gamerid=900962&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;janky hack&lt;/a&gt; of getting one achievement to pop, immediately quitting the game, and then redoing the conversation the other way, getting both achievements requires two playthroughs. These are the only achievements that cannot be obtained in a single run, and &lt;em&gt;Spiritfarer&lt;/em&gt; is not a game with significant replay potential. This feels like a design flaw, where user experience clashes with the game&amp;rsquo;s systems.&lt;/p&gt;
</description>
    </item>

    <item>
      <title>Pool Testing is k-ary Search for COVID-19</title>
      <link>https://mhmmoshtaghi.github.io/post/pool-testing-is-kary-search/</link>
      <pubDate>Thu, 09 Jul 2020 14:04:44 -0700</pubDate>
      <guid>https://mhmmoshtaghi.github.io/post/pool-testing-is-kary-search/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve seen a handful of articles in the last week about &lt;em&gt;pool testing&lt;/em&gt; and &lt;em&gt;sample pooling&lt;/em&gt; for COVID-19.
The gist of this technique is simple: to make our limited supply of test kits (reagents) stretch farther, mix several people&amp;rsquo;s samples together and then test the mixture for COVID-19.
Ideally, if the test comes back negative, everyone in that &amp;ldquo;sample pool&amp;rdquo; could be declared COVID-free using just one test.
Otherwise, if the mixture comes back positive, then additional tests are needed to find the individual positive samples.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m far from a public health and epidemiology expert, but as an enthusiastic computer scientist I can&amp;rsquo;t help but see &lt;em&gt;binary search&lt;/em&gt; (or more generally, $k$-ary search) all over this pool testing technique.
My goal in this post is to draw out this connection, illustrating why the efficiency of $k$-ary search (and of pool testing, by extension) is so attractive.
I&amp;rsquo;ll also do some crude math to explore what happens to pool testing if there are too many infections in the population and how many tests it could actually save.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re not interested in any of that but want to know more about pool testing, NPR has a &lt;a href=&#34;https://www.npr.org/sections/health-shots/2020/07/06/886886255/pooling-coronavirus-tests-can-spare-scarce-supplies-but-theres-a-catch&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;short primer&lt;/a&gt; and the FDA has put out a &lt;a href=&#34;https://www.fda.gov/news-events/press-announcements/coronavirus-covid-19-update-facilitating-diagnostic-test-availability-asymptomatic-testing-and&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;statement&lt;/a&gt; on the topic.
On the other hand, if you&amp;rsquo;re interested in more serious research on the topic, this footnote&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; is for you.&lt;/p&gt;
&lt;h2 id=&#34;finding-things-fast&#34;&gt;Finding Things Fast&lt;/h2&gt;
&lt;p&gt;In a &lt;em&gt;search problem&lt;/em&gt;, the goal is to find a specific item $x^*$ amidst a whole bunch of possibilities $(x_1, x_2, \ldots, x_n)$.
It&amp;rsquo;s like &lt;a href=&#34;https://waldo.fandom.com/wiki/Waldo_Wiki&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Where&amp;rsquo;s Waldo&lt;/a&gt; if Waldo were $x^*$ and each $x_i$ was a person on the page.
Or, perhaps more practically, it&amp;rsquo;s the way you give your favorite maps app a specific address $x^*$ and it has to find that place&amp;rsquo;s data (latitude/longitude, reviews, etc.) amongst all possible places $x_i$ in its gigantic database.&lt;/p&gt;
&lt;p&gt;A not-so-great approach to playing Where&amp;rsquo;s Waldo is to make a list of every person on the page and check them one-by-one to see if they&amp;rsquo;re Waldo.
(This is, perhaps, an entertaining way to play since you get to appreciate all the fun and ridiculous details, but we&amp;rsquo;re going for efficiency here).
In computer science, we call this strategy — or &amp;ldquo;algorithm&amp;rdquo; — &lt;em&gt;brute force search&lt;/em&gt;: when all else fails, just try everything.
How bad can this be?
Well, in the worst case Waldo might be the very last person in our list, so we would have had to check all $n$ people before we found him.
So, knowing that the least clever search strategy makes us try $n$ times before we find Waldo, can we do better?&lt;/p&gt;
&lt;p&gt;Imagine that you have a friend who already knows where Waldo is and has agreed to help you out by telling you which half of the page he&amp;rsquo;s on (left or right).
Now you only have to search half of the possibilities, or roughly $n/2$ people.
Say your friend&amp;rsquo;s really helpful, and they&amp;rsquo;ll let you do this as many times as you want: they&amp;rsquo;ll keep telling you which half of the remaining section Waldo&amp;rsquo;s in until you find him.
So at first you have $n$ people to look through, then after your friend helps once you have $n/2$, and after helping again you have $n/4$, and then $n/8$, and so on.
In general, if your friend has helped you $i$ times, then you only have $n/(2^i)$ people to look through.
Doing a little algebra, after your friend has helped you $\log_2(n)$ times, you only have $n/(2^{\log_2(n)}) = n/n = 1$ person left, and that person is Waldo.
This strategy is &lt;em&gt;binary search&lt;/em&gt;: &amp;ldquo;binary&amp;rdquo; because your friend splits the possibilities in two each time they help.&lt;/p&gt;
&lt;p&gt;It may have been a while since you&amp;rsquo;ve brushed up on your logarithms, so let&amp;rsquo;s look at some numbers to get a sense of how fast this is. An average Where&amp;rsquo;s Waldo puzzle has roughly $n = 500$ people on it.
So, if we were to use brute force search, we&amp;rsquo;d be looking through all $n = 500$ people.
However, if we had our helpful friend to do binary search with us, we&amp;rsquo;d only need to ask their help $\log_2(500) \approx 9$ times before we found Waldo!
Not bad, hey?&lt;/p&gt;
&lt;p&gt;The key to binary search is in throwing away whole chunks of possibilities all at once, rapidly narrowing our search field.
$k$-ary search is just a generalization, where instead of splitting the possibilities in half each time, we split them into $k$ equal parts. We then keep the $n/k$-sized section containing our target and repeat, requiring a total of $\log_k(n)$ search operations to find our target (which is even faster than binary search!). Before we call it quits with Waldo and get back to pool testing, it&amp;rsquo;s worth pointing out that there are plenty of ways to make searching even faster (especially with parallel algorithms). There are even search algorithms &lt;a href=&#34;http://www.randalolson.com/2015/02/03/heres-waldo-computing-the-optimal-search-strategy-for-finding-waldo/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;specifically for finding Waldo&lt;/a&gt;, if that&amp;rsquo;s your jam.&lt;/p&gt;
&lt;h2 id=&#34;pool-testing-meet-k-ary-search&#34;&gt;Pool Testing, Meet k-ary Search&lt;/h2&gt;
&lt;p&gt;Shifting our perspective on testing from personal experience (&amp;ldquo;Have I contracted COVID-19?&amp;quot;) to the population level (&amp;ldquo;Who in our communities are positive?&amp;quot;), we can frame testing as a search problem.
Among all individuals $(x_1, x_2, \ldots, x_n)$, we want to find those $x_i$&amp;rsquo;s that are positive for COVID-19 so they can isolate and get timely medical care.
In this setting, brute force search would be individually testing every single person — and that&amp;rsquo;s &lt;a href=&#34;https://www.nytimes.com/2020/07/06/us/coronavirus-test-shortage.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;way more tests&lt;/a&gt; than we have.
The current US strategy of only testing symptomatic cases isn&amp;rsquo;t more &amp;ldquo;efficient&amp;rdquo; than brute force, it&amp;rsquo;s just brute force search on a (hopefully) small subset of the total population.&lt;/p&gt;
&lt;p&gt;Pool testing, on the other hand, is similar to $k$-ary search.
Just like our helpful friend telling us which half of the page Waldo isn&amp;rsquo;t on, a single pool test ideally shows us a whole group of people that we can declare COVID-19 negative; in our search for positive cases, we can look elsewhere.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /post/pool-testing-is-kary-search/pooltest_hub8d5ccf727d58e61b91e4b04452d5a8c_507898_d893c5c675f1faec887bbbea523952bc.png 400w,
               /post/pool-testing-is-kary-search/pooltest_hub8d5ccf727d58e61b91e4b04452d5a8c_507898_a6fd6dae15544600ded74901ce065f67.png 760w,
               /post/pool-testing-is-kary-search/pooltest_hub8d5ccf727d58e61b91e4b04452d5a8c_507898_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/post/pool-testing-is-kary-search/pooltest_hub8d5ccf727d58e61b91e4b04452d5a8c_507898_d893c5c675f1faec887bbbea523952bc.png&#34;
               width=&#34;760&#34;
               height=&#34;353&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;Consider the situation depicted above, with $128$ total individuals needing tests but only $4$ of them COVID-19 positive (shown in red).
If we tested all $128$ people individually (brute force), we would need $128$ tests.
But suppose we could reliably test pools of up to $16$ people at once, as shown in the first row.
Only three of the $128/16 = 8$ pool tests would come back positive, allowing us to immediately rule out $5 \times 16 = 80$ negative individuals.
For the three positive pools, we need to do additional tests to find the positive cases.
This could be done by individually testing everyone in the positive pools&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; — effectively using smaller brute force — requiring $3 \times 16 = 48$ additional tests.
Alternatively (assuming we had enough samples), we could do pool testing again, this time on smaller pools.&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;
So long as there aren&amp;rsquo;t too many positive samples (something we&amp;rsquo;ll revisit shortly), this will help us save on tests: in the picture, we only end up needing $30$ additional tests to handle the $48$ individuals in positive pools.
The table below compares the number of tests used by each testing strategy in this example, along with the number of samples per person required.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Testing Strategy&lt;/th&gt;
&lt;th&gt;Tests Used&lt;/th&gt;
&lt;th&gt;Tests Saved&lt;/th&gt;
&lt;th&gt;Samples per Person&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Individual (brute force)&lt;/td&gt;
&lt;td&gt;$128$&lt;/td&gt;
&lt;td&gt;$0\%$&lt;/td&gt;
&lt;td&gt;$1$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pool Testing (one round)&lt;/td&gt;
&lt;td&gt;$56$&lt;/td&gt;
&lt;td&gt;$56\%$&lt;/td&gt;
&lt;td&gt;$1$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pool Testing (repeated)&lt;/td&gt;
&lt;td&gt;$38$&lt;/td&gt;
&lt;td&gt;$70\%$&lt;/td&gt;
&lt;td&gt;$&amp;gt; 1$&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;what-can-go-wrong&#34;&gt;What Can Go Wrong?&lt;/h2&gt;
&lt;p&gt;At least a few serious things:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Added logistical complications for labs, including tracking which individuals&#39; samples are in which pools, added mixing steps, etc.&lt;/li&gt;
&lt;li&gt;The possibility of larger &lt;em&gt;false-negative&lt;/em&gt; rates (i.e., testing negative when the sample was, in fact, positive) due to samples getting diluted when they&amp;rsquo;re mixed into pools.&lt;sup id=&#34;fnref:4&#34;&gt;&lt;a href=&#34;#fn:4&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;A loss of efficiency when there are too many positive samples.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For the rest of this post, I&amp;rsquo;m going to focus on that last problem.
Pool testing&amp;rsquo;s strength lies in its ability to rule out large groups of negative cases at once, as we saw in the example.
But with too many positive cases, the likelihood of pools testing positive becomes much higher, requiring a greater number of subsequent tests.
At what point does pool testing end up using more tests than if we just tested everyone individually?&lt;/p&gt;
&lt;p&gt;Instead of repeated pool testing (like in our example above), consider the more practical protocol of doing only one round of pool testing and then testing all samples in positive pools individually.
If we have $n$ total samples, our pool size is $p$, and $x$ pool tests come back positive, then we will use a total of $n/p + xp$ tests: $n/p$ pool and $xp$ individual.
Since we&amp;rsquo;d use $n$ tests doing brute force, pool testing only saves us tests if $n/p + xp &amp;lt; n$, or equivalently, if:
$$x &amp;lt; (n/p)(1 - 1/p)$$&lt;/p&gt;
&lt;p&gt;To connect the number of positive pools $x$ we&amp;rsquo;ll have based on how many positive cases are in the population, let $r$ be the probability that any given sample is COVID-19 positive.
The probability that a pool of size $p$ contains a positive sample is $1 - (1 - r)^p$.
There are $n/p$ total pools, so the expected (average) number of positive pools is:
$$E[x] = (n/p)(1 - (1 - r)^p)$$
Therefore, we save on tests using pool testing in expectation if:
$$\begin{align*} (n/p)(1 - (1 - r)^p) &amp;amp;&amp;lt; (n/p)(1 - 1/p) \\ r &amp;amp;&amp;lt; 1 - p^{-1/p} \end{align*}$$&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /post/pool-testing-is-kary-search/efficientplot_hubbab132a171178a63e8c403eaeaedda1_112102_95bee3cac31fd27c744668969647b2bf.png 400w,
               /post/pool-testing-is-kary-search/efficientplot_hubbab132a171178a63e8c403eaeaedda1_112102_bc08555fd46905af4750f157cfdc0c66.png 760w,
               /post/pool-testing-is-kary-search/efficientplot_hubbab132a171178a63e8c403eaeaedda1_112102_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/post/pool-testing-is-kary-search/efficientplot_hubbab132a171178a63e8c403eaeaedda1_112102_95bee3cac31fd27c744668969647b2bf.png&#34;
               width=&#34;760&#34;
               height=&#34;570&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;The above graph plots this efficient region.
The x-axis is the pool size $p$ and the y-axis is the infection rate $r$.
Any point in the blue region represents a $(p,r)$ pair for which pool testing uses less tests than brute force in expectation.
For example, with a pool size of $p = 16$, our crude math suggests that pool testing is more efficient for infection rates up to, coincidentally, $r \approx 16\%$.
This would be a terrifyingly high infection rate (at the time of this writing, the CDC reports a $\approx 1\%$ &lt;a href=&#34;https://www.cdc.gov/covid-data-tracker/#cases&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;positive case rate&lt;/a&gt; in the US), so it seems that in realistic settings even one round of pool testing would save a lot of tests.&lt;/p&gt;
&lt;h2 id=&#34;taking-our-savings-to-the-bank&#34;&gt;Taking Our Savings to the Bank&lt;/h2&gt;
&lt;p&gt;To recap, we&amp;rsquo;ve seen how pool testing is related to $k$-ary search, how both of these techniques leverage the ability to rule out large groups of possibilities to narrow things down quickly, and how pool testing will save us tests so long as the infection rate is low enough.
The last thing to nail down is how many tests are actually saved.
From our work above, we know that the expected number of tests saved using one round of pool testing is:
$$\begin{align*} E[\text{# tests saved}] &amp;amp;= \text{# tests for brute force} - E[\text{# tests for pool testing}] \\ &amp;amp;= n - (n/p + E[\text{# positive pools}] \cdot p) \\ &amp;amp;= n - n/p - (n/p)(1 - (1-r)^p)p \\ &amp;amp;= n(-1/p + (1-r)^p) \end{align*}$$
The fraction of tests saved is just the number of tests saved divided by $n$, so a single round of pool testing in pools of size $p$ uses a $(1-r)^p - 1/p$ fraction less tests.
The following plot shows this equation for different pool sizes $p$ as a function of the infection rate $r$.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /post/pool-testing-is-kary-search/savingsplot_hu0b73f0fe4a2adce77317aafa0603f92a_185079_8566ec12e810fe007a61095c9a21c56e.png 400w,
               /post/pool-testing-is-kary-search/savingsplot_hu0b73f0fe4a2adce77317aafa0603f92a_185079_f3c789c9a66a37ba6b4ac7c12ab8f208.png 760w,
               /post/pool-testing-is-kary-search/savingsplot_hu0b73f0fe4a2adce77317aafa0603f92a_185079_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/post/pool-testing-is-kary-search/savingsplot_hu0b73f0fe4a2adce77317aafa0603f92a_185079_8566ec12e810fe007a61095c9a21c56e.png&#34;
               width=&#34;760&#34;
               height=&#34;570&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;This shows that larger pool sizes have the potential for saving more tests, but also degrade in their efficiency more rapidly as the infection rate $r$ grows.
Eventually, if the infection rate becomes too large, all four curves become negative and pool testing ends up using more tests than brute force.
This corresponds to leaving the efficient region shown in the previous graph.
If you&amp;rsquo;re having a hard time interpreting these curves, the following table compares pool testing with $p = 4$ (blue) and $p = 16$ (green).&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pool Size&lt;/th&gt;
&lt;th&gt;Tests Saved at $r = 1\%$&lt;/th&gt;
&lt;th&gt;Tests Saved at $r = 5\%$&lt;/th&gt;
&lt;th&gt;Infection Rate for No Savings&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;$p = 4$&lt;/td&gt;
&lt;td&gt;$71\%$&lt;/td&gt;
&lt;td&gt;$56\%$&lt;/td&gt;
&lt;td&gt;$r = 29\%$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$p = 16$&lt;/td&gt;
&lt;td&gt;$79\%$&lt;/td&gt;
&lt;td&gt;$38\%$&lt;/td&gt;
&lt;td&gt;$r = 16\%$&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The key takeaway is that from a purely test-savings perspective, pool testing does a remarkable job for any reasonable pool size.
While it is true that pool testing can end up using more tests than traditional testing if the infection rate grows too large, my crude math suggests that the infection rate would need to be quite high ($r &amp;gt; 10\%$) before this inefficiency would be noticeable.
At today&amp;rsquo;s US infection rate of $r \approx 1\%$, we could be $70\%$ more efficient with our limited supply of testing reagents, helping more people get tested more often.
Perhaps if this technique were widely used, we would all be that much closer to safely getting on with our lives.&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;&lt;a href=&#34;https://jamanetwork.com/journals/jamanetworkopen/fullarticle/2767513&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Cherif et al. 2020&lt;/a&gt; detail a recent mathematical model for pool testing and &lt;a href=&#34;https://academic.oup.com/cid/article/doi/10.1093/cid/ciaa531/5828059&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Yelin et al. 2020&lt;/a&gt; characterize its dilution and false-negative rates. The references in the Yelin paper also cover deeper mathematical analysis (e.g., &lt;a href=&#34;https://projecteuclid.org/euclid.aoms/1177731363&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Dorfman 1943&lt;/a&gt;) and how pool testing has been used to combat infectious disease in the past (e.g., for malaria in &lt;a href=&#34;https://jcm.asm.org/content/48/2/512&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Taylor et al. 2010&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;From my brief sifting of the literature, practical implementations of pool testing only use one round of pool tests: roughly $65\%$ of each sample is used in a pool test, and the remaining $35\%$ is saved for an individual test in case the pool comes back positive. Repeated pool testing doesn&amp;rsquo;t seem to be used in practice, presumably because it would rely on collecting additional swab samples per person.&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;I&amp;rsquo;ve depicted the subpool tests in a &lt;em&gt;binary&lt;/em&gt; search kind of way where each positive pool is split in &lt;em&gt;half&lt;/em&gt; and retested, but they could be broken into any number of groups.&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;li id=&#34;fn:4&#34; role=&#34;doc-endnote&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://academic.oup.com/cid/article/doi/10.1093/cid/ciaa531/5828059&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Yelin et al. 2020&lt;/a&gt; estimate that the false-negative rates for pools as large as $16$ or $32$ is roughly $10\%$ based on their experiments. I chose not to do my speculative math for dilution and false-negative rates because I don&amp;rsquo;t understand how PCR tests actually work and don&amp;rsquo;t believe in blindly oversimplifying things for the sake of nice math.&amp;#160;&lt;a href=&#34;#fnref:4&#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>Ori and the Will of the Wisps</title>
      <link>https://mhmmoshtaghi.github.io/review/videogame-ori-and-the-will-of-the-wisps/</link>
      <pubDate>Sun, 07 Jun 2020 21:58:21 -0700</pubDate>
      <guid>https://mhmmoshtaghi.github.io/review/videogame-ori-and-the-will-of-the-wisps/</guid>
      <description>&lt;p&gt;&lt;em&gt;Ori and the Will of the Wisps&lt;/em&gt; was released on March 10, 2020 — one day before many in the United States were put under stay-at-home orders to slow the spread of COVID-19. In the following months, our leaders abdicated their responsibility to coordinate a comprehensive response as the non-essential of us remained at home, wringing our hands and feeling powerless to stop our world from slipping into shambles. So when &lt;em&gt;Ori&lt;/em&gt; opened with Naru, Gumo, and Ori working to restore Ku — a young owl with a malformed wing — my emotions were immediately invested. When the first major chapter involved ridding a historic watermill/library of a corrupted monster poisoning the water, my determination was fixed. And when Grom asked Ori &amp;ldquo;Want to make [the Wellspring Glades] a better place?&amp;rdquo; I nearly shouted &amp;ldquo;yes!&amp;rdquo; at the screen. Beautiful graphics, slick gameplay, and huge improvements over the original game aside, &lt;em&gt;Ori and the Will of the Wisps&lt;/em&gt; is a game about healing, restoration, and hope — three things that run at a high premium in today&amp;rsquo;s world.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-ori-and-the-will-of-the-wisps/spirittree_hu26a2b2080d6a223eeafa0ab3069efaee_2292382_efac639ac9b81ea7510c7294048abccc.png 400w,
               /review/videogame-ori-and-the-will-of-the-wisps/spirittree_hu26a2b2080d6a223eeafa0ab3069efaee_2292382_069629848b4e56a1e1ca972d868f9188.png 760w,
               /review/videogame-ori-and-the-will-of-the-wisps/spirittree_hu26a2b2080d6a223eeafa0ab3069efaee_2292382_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-ori-and-the-will-of-the-wisps/spirittree_hu26a2b2080d6a223eeafa0ab3069efaee_2292382_efac639ac9b81ea7510c7294048abccc.png&#34;
               width=&#34;760&#34;
               height=&#34;428&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;One more philosophical point before moving on to gameplay: I was pleased to see the thought given to the nature of evil and the role of violence in resisting it. While killing corrupted creatures is commonplace in the &lt;em&gt;Ori&lt;/em&gt; series, there is also a consistent gravity around death and loss. This sequel explores these themes more thoroughly than the original. Without giving specifics away, only one enemy boss is actually murdered (and, interestingly, not by Ori). Moreover, the main antagonist is one that deserves the player&amp;rsquo;s hate and empathy equally, as summed up in this bit of dialogue:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I heard what happened to your friend, and I am sorry. Sorry for your friend, and for the one that hurt her. Nothing&amp;rsquo;s fouler than when the strong hurt the weak.&lt;/p&gt;
&lt;p&gt;— Tokk, &lt;em&gt;Ori and the Will of the Wisps&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;There&amp;rsquo;s a &amp;ldquo;we hurt ourselves when we hurt others&amp;rdquo; in here that&amp;rsquo;s revisited later in the game, when a character who once wanted the warmth of the light rejects it and chooses instead to remain isolated in darkness. I was left with the impression that this was an emotionally heavier fate than death.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-ori-and-the-will-of-the-wisps/spiritlight_hu8a35b21c17581add946ecb858fa2fbe5_1529683_775379132827bc4dc8a06aa2dc442efa.png 400w,
               /review/videogame-ori-and-the-will-of-the-wisps/spiritlight_hu8a35b21c17581add946ecb858fa2fbe5_1529683_eeab4611356b33b7f34294c6a19babbf.png 760w,
               /review/videogame-ori-and-the-will-of-the-wisps/spiritlight_hu8a35b21c17581add946ecb858fa2fbe5_1529683_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-ori-and-the-will-of-the-wisps/spiritlight_hu8a35b21c17581add946ecb858fa2fbe5_1529683_775379132827bc4dc8a06aa2dc442efa.png&#34;
               width=&#34;760&#34;
               height=&#34;428&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;In terms of gameplay and design, &lt;em&gt;Ori and the Will of the Wisps&lt;/em&gt; surpasses its predecessor (&lt;em&gt;Ori and the Blind Forest&lt;/em&gt;) in every way, and then some. In short, this is a must-play if you liked the original, and is the place you should start if you&amp;rsquo;re new to the series. Much has already been written about these improvements, like how Moon Studios created entirely new technologies to fit its beautifully crafted &lt;a href=&#34;https://www.rockpapershotgun.com/2020/04/10/how-animation-powers-ori-and-the-will-of-the-wisps/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;3D assets in a 2D world&lt;/a&gt;. The world is filled with expressive characters, vibrant and responsive foliage, and gorgeous foreground/background effects that express depth. Role-playing elements give players newfound choice over Ori&amp;rsquo;s evolution. The boss fights blend the newly fluid combat system with the series&#39; emblematic choreographed escape sequences. Gareth Coker returns with a triumph of a soundtrack that is &lt;a href=&#34;https://www.lacedrecords.com/blogs/news/ori-composer-gareth-coker-is-happy-to-make-players-sad&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;deeply integrated&lt;/a&gt; with the rest of the game&amp;rsquo;s design.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-ori-and-the-will-of-the-wisps/lumapools_hud518339447da2cc114de1dc0a7419af6_2106687_9efefce2bc6b80265436976de695015f.png 400w,
               /review/videogame-ori-and-the-will-of-the-wisps/lumapools_hud518339447da2cc114de1dc0a7419af6_2106687_0a3550ad897d60a27a91b27ac75f8761.png 760w,
               /review/videogame-ori-and-the-will-of-the-wisps/lumapools_hud518339447da2cc114de1dc0a7419af6_2106687_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-ori-and-the-will-of-the-wisps/lumapools_hud518339447da2cc114de1dc0a7419af6_2106687_9efefce2bc6b80265436976de695015f.png&#34;
               width=&#34;760&#34;
               height=&#34;428&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;Improved replayability deserves its own treatment. In &lt;em&gt;Ori and the Blind Forest&lt;/em&gt;, collectibles were limited to Life and Energy Cells that increase the amount of health and ability energy Ori has, respectively. After finishing the main story, achievements and 100%-ing the game are the only incentives for finding all these secrets. In &lt;em&gt;Ori and the Will of the Wisps&lt;/em&gt;, however, side quests and new collectibles give meaning to the secret hunting. With Gorlek Ore that Ori collects, Grom builds new structures in the Wellspring Glades for Moki to live in. Tolek plants Seeds that synergize with Ori&amp;rsquo;s abilities to make new areas of the Glades accessible. Ability Shards unlock useful augmentations of Ori&amp;rsquo;s abilities. Hardcore fans can take on the &amp;ldquo;*-less run,&amp;rdquo; requiring a complete run in under 4 hours without dying, spending Spirit Light, or equipping shards. These goals enhance the actual play experience, greatly improving the replay value.&lt;/p&gt;
&lt;h2 id=&#34;bugs&#34;&gt;Bugs&lt;/h2&gt;
&lt;p&gt;In what is otherwise an pristine and polished experience, &lt;em&gt;Ori and the Will of the Wisps&lt;/em&gt; has several frustrating bugs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Spirit Charge is a mid-game ability whose primary purpose is to toss projectiles that fall back down, allowing Ori to Bash off of them and reach new heights. The &amp;ldquo;Spirit Rocket&amp;rdquo; bug causes all charges to instead fire off like missiles, happily ignoring gravity and stranding Ori without a lift. Thankfully, this bug seems to fix itself after a full game quit-and-restart.&lt;/li&gt;
&lt;li&gt;There were occasional rendering issues. After a long play session, the game would freeze and lag (again, quitting and restarting seemed to fix the problem). Later, after unlocking the Launch ability, Ori seemingly could move faster than the game could handle: Ori could Launch off-screen without the camera following, and once the camera caught up the environment occasionally wouldn&amp;rsquo;t render.&lt;/li&gt;
&lt;li&gt;Even after 100%-ing a run (and getting the corresponding achievements), the Energy Cell counter stays at 19/20, capping the progress tracker at 99% complete. This is uniquely maddening for people like me who live for the 100% completion.&lt;/li&gt;
&lt;/ul&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-ori-and-the-will-of-the-wisps/99percent_hu7e4734bca109e3b50b5ea038214740c7_1875673_4b25d9ef9d0a062fd104a187021819c1.png 400w,
               /review/videogame-ori-and-the-will-of-the-wisps/99percent_hu7e4734bca109e3b50b5ea038214740c7_1875673_e518d7924490f73485bbbec90552bceb.png 760w,
               /review/videogame-ori-and-the-will-of-the-wisps/99percent_hu7e4734bca109e3b50b5ea038214740c7_1875673_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-ori-and-the-will-of-the-wisps/99percent_hu7e4734bca109e3b50b5ea038214740c7_1875673_4b25d9ef9d0a062fd104a187021819c1.png&#34;
               width=&#34;760&#34;
               height=&#34;428&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
</description>
    </item>

    <item>
      <title>Announcing Reviews</title>
      <link>https://mhmmoshtaghi.github.io/post/announcing-reviews/</link>
      <pubDate>Fri, 29 May 2020 14:07:51 -0700</pubDate>
      <guid>https://mhmmoshtaghi.github.io/post/announcing-reviews/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m excited to announce that I&amp;rsquo;ve added art and entertainment &lt;a href=&#34;https://mhmmoshtaghi.github.io/review/&#34;&gt;reviews&lt;/a&gt; to the site. I&amp;rsquo;ve posted 28 reviews of books, movies, and video games so far; I will likely extend this to also include TV shows and music in the future. This post is a brief look at why I review things (it&amp;rsquo;s not for glorification of my own hot takes, I promise) and a bit about my experience with hacking the &lt;a href=&#34;https://sourcethemes.com/academic/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Hugo Academic theme&lt;/a&gt; to support reviews.&lt;/p&gt;
&lt;p&gt;In case my philosophy behind reviews and hacking the site theme are less interesting to you than actual reviews, here are a few that I was particularly happy to rediscover:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://mhmmoshtaghi.github.io/review/videogame-overcooked/&#34;&gt;&lt;em&gt;Overcooked&lt;/em&gt;&lt;/a&gt;, a review from 2016 about the frantic cooperative cooking game.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://mhmmoshtaghi.github.io/review/book-half-the-sky/&#34;&gt;&lt;em&gt;Half the Sky&lt;/em&gt;&lt;/a&gt;, a review from 2017 about the book that played a pivotal role in my understanding and caring about the global state of women&amp;rsquo;s rights.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://mhmmoshtaghi.github.io/review/book-the-phantom-tollbooth/&#34;&gt;&lt;em&gt;The Phantom Tollbooth&lt;/em&gt;&lt;/a&gt;, a review from 2019 about one of my favorite books.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://mhmmoshtaghi.github.io/review/videogame-batman-arkham-city/&#34;&gt;&lt;em&gt;Batman: Arkham City&lt;/em&gt;&lt;/a&gt;, a review from 2019 in which I question Batman&amp;rsquo;s approach to criminal justice and our assumptions about video game minions.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;the-entertainment-backlog&#34;&gt;The Entertainment Backlog&lt;/h2&gt;
&lt;p&gt;Over the last decade, I&amp;rsquo;ve been iterating over ways to track my progress and remember my experiences with various books, movies, TV shows, music, and video games. It bothers me that I own more content than I have time to experience and that I often forget my key takeaways just months after finishing something. What came of my efforts was the &lt;em&gt;entertainment backlog&lt;/em&gt;, an informal and messy system of spreadsheets, notes, and written reviews.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /post/announcing-reviews/backlog_huf9ba52e8be594dc786ac117f88e9927c_14836_2ec80f44449e427ca5d74afc5c6ae502.png 400w,
               /post/announcing-reviews/backlog_huf9ba52e8be594dc786ac117f88e9927c_14836_894ed79274b3bd8d97915ad02a46254c.png 760w,
               /post/announcing-reviews/backlog_huf9ba52e8be594dc786ac117f88e9927c_14836_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/post/announcing-reviews/backlog_huf9ba52e8be594dc786ac117f88e9927c_14836_2ec80f44449e427ca5d74afc5c6ae502.png&#34;
               width=&#34;760&#34;
               height=&#34;229&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;In concept, the backlog is simple: it&amp;rsquo;s a list of content (books, movies, music, games, etc.) organized by progression. When I&amp;rsquo;ve purchased something (or, in the streaming era, when I&amp;rsquo;m interested in it and have access to it), I add it to the backlog as &amp;ldquo;Owned.&amp;rdquo; When I start reading/watching/playing it, it becomes &amp;ldquo;In-Progress.&amp;rdquo; Once I&amp;rsquo;m done with it, it becomes &amp;ldquo;Completed.&amp;rdquo; With just these three stages, I&amp;rsquo;m able to keep track of what I&amp;rsquo;m engaging with and avoid forgetting about it and having to start over a year or more later. As a caveat, if ever something is boring me, I just drop it from the backlog altogether. The system is there to support me, not force me to complete uninteresting stuff.&lt;/p&gt;
&lt;p&gt;Implementation of these three stages can come in a variety of formats. The gold standard would probably be some dedicated, slick piece of software. I&amp;rsquo;ve gotten by with a mix of spreadsheets, a &lt;a href=&#34;https://trello.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Trello board&lt;/a&gt; (Owned/In-Progress/Completed are lists, and each item is a card), and an &amp;ldquo;art and entertainment journal&amp;rdquo; where I write about what I engage with daily. Regardless of how it&amp;rsquo;s implemented, the point is to not let things go stale.&lt;/p&gt;
&lt;h2 id=&#34;the-role-of-reviews&#34;&gt;The Role of Reviews&lt;/h2&gt;
&lt;p&gt;The fourth and final stage of the backlog is &amp;ldquo;Reviewed,&amp;rdquo; which is where &amp;ldquo;Completed&amp;rdquo; items go once I&amp;rsquo;ve written some thoughts down about them. Traditionally, my reviews have had a numerical rating and a written portion, though as I get older I find that my ratings are less useful to me than my reflections.&lt;/p&gt;
&lt;p&gt;I write reviews for two reasons: to &lt;em&gt;&lt;strong&gt;avoid forgetting my experiences&lt;/strong&gt;&lt;/em&gt; and to &lt;em&gt;&lt;strong&gt;combat entertainment consumerism with reflection&lt;/strong&gt;&lt;/em&gt;. These goals work together. When entertainment is reduced to &amp;ldquo;empty calories&amp;rdquo; because I don&amp;rsquo;t spend any time reflecting on it, I&amp;rsquo;m always hungry for more. When I know I will invest thought and energy into my entertainment, I can be more selective about committing to higher quality experiences. In turn, I can take the time to listen to and be impacted by what these experiences have to say in their stories and art.&lt;/p&gt;
&lt;p&gt;Rest and play are non-negotiables in my life, but taking time to reflect thoughtfully on what I&amp;rsquo;m engaging with helps me keep a healthy relationship with less intentional entertainment and make space for more challenging and impactful art and nonfiction.&lt;/p&gt;
&lt;h2 id=&#34;hacking-the-academic-theme&#34;&gt;Hacking the Academic Theme&lt;/h2&gt;
&lt;p&gt;This was my first real attempt at working with HTML, CSS, and JavaScript beyond some &lt;a href=&#34;https://www.codecademy.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Codecademy&lt;/a&gt; lessons I did in undergrad, so building out reviews was an uphill climb, even when mostly working with preexisting structures provided by the Academic theme. No particular lesson learned is a big enough deal to write about, but I&amp;rsquo;m most proud of integrating third-party scripts &lt;a href=&#34;https://kimmobrunfeldt.github.io/progressbar.js/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;progressbar.js&lt;/a&gt; and &lt;a href=&#34;https://gka.github.io/chroma.js/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;chroma.js&lt;/a&gt; to help with the animation and coloring of the numerical ratings at the end of each review.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /post/announcing-reviews/rating_hu7038b241120a37a417eeefe912ff6036_21825_3555c1b21eaddad5abcf6c4f194f1385.png 400w,
               /post/announcing-reviews/rating_hu7038b241120a37a417eeefe912ff6036_21825_4c1ed8a2227db78b80cb39eb723a735d.png 760w,
               /post/announcing-reviews/rating_hu7038b241120a37a417eeefe912ff6036_21825_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/post/announcing-reviews/rating_hu7038b241120a37a417eeefe912ff6036_21825_3555c1b21eaddad5abcf6c4f194f1385.png&#34;
               width=&#34;760&#34;
               height=&#34;253&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;This is just a screenshot, but the real ratings animate when they&amp;rsquo;re first loaded. The animation is usually done by the time you scroll down to the bottom where the ratings actually are, but refreshing the page will let you see it in action! It&amp;rsquo;s potentially possible to &lt;a href=&#34;https://github.com/kimmobrunfeldt/progressbar.js/issues/265&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;delay the animation&lt;/a&gt; until the ratings are scrolled into view, but my knowledge of jQuery is nonexistent so I&amp;rsquo;ll be leaving that as an improvement for another day.&lt;/p&gt;
</description>
    </item>

    <item>
      <title>The Story of More</title>
      <link>https://mhmmoshtaghi.github.io/review/book-the-story-of-more/</link>
      <pubDate>Tue, 26 May 2020 13:52:54 -0700</pubDate>
      <guid>https://mhmmoshtaghi.github.io/review/book-the-story-of-more/</guid>
      <description>&lt;p&gt;Climate change has become one of many sources of existential dread that I share with my generation, albeit one that I was slow to understand. Growing up in a conservative evangelical context, global warming was right up there with evolution in terms of science that was treated as if it contested the nature of God, his creation, and humanity&amp;rsquo;s place within it. Combined with teachers that were shy about the realities of our earth&amp;rsquo;s sickness and our hand in its decay, our plight was fuzzy to me, at best.&lt;/p&gt;
&lt;p&gt;Yet activism and justice (social, environmental, political) are in the water now — albeit often diluted and consumed in the form of social media. The United States&#39; withdrawal from the Paris Agreement was another Trump decision to throw on the pile of his wrongdoings. The &lt;a href=&#34;https://marchforscience.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;March for Science&lt;/a&gt; is now a three-year-old movement to use science for the common good and spur change. Natural disasters are now frequently linked to &amp;ldquo;weirding weather.&amp;rdquo; And yet, while I know climate change denial is an ostrich&amp;rsquo;s approach to problem solving, my knowledge on what the Paris Agreement says, what the March for Science marches for, or the cause-and-effect behind why the weather is now weird is embarrassingly limited. I&amp;rsquo;ve been drawing lines in the sand about &amp;ldquo;good&amp;rdquo; and &amp;ldquo;bad&amp;rdquo; approaches to our natural world without real knowledge, which is a lousy and ineffective place to try and enact change from.&lt;/p&gt;
&lt;p&gt;Hope Jahren&amp;rsquo;s &lt;em&gt;The Story of More&lt;/em&gt; is a wonderful primer on our natural history and how we got ourselves into the mess we&amp;rsquo;re in. By seamlessly weaving chatty stories about growing up in the American Midwest with no-nonsense, no-jargon statistics, Hope expertly guides us through Climate Science 101 less like a lecturing professor (though she is that) and more like a  wise and smart friend. For nearly the entire book, she simply presents her findings without bias or interpretation — with a brief break in character to rant about how much she hates cars — seemingly trusting that we can wrestle with the implications ourselves. She shows us that it all boils down to some basic fundamentals: how many of us there are, the food we eat and where it comes from, the energy we use and how we produce it, and, finally, how all of that affects the natural world we live in.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The idea of scaring the public for the sake of scaring it scares me&amp;hellip; People don&amp;rsquo;t make good decisions out of fear, history seems to have shown, and at least some of the time, people who are afraid are also prone to doing nothing&amp;hellip; My own goal is to inform you, not to scare you, because teaching has taught me to know and respect the difference. I&amp;rsquo;ve found that fear makes us turn away from the issue whereas information draws us in.&lt;/p&gt;
&lt;p&gt;— &lt;em&gt;The Story of More&lt;/em&gt;, pages 139–140.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;em&gt;The Story of More&lt;/em&gt; is the story of our relentless pursuit of &lt;em&gt;more&lt;/em&gt; food, &lt;em&gt;more&lt;/em&gt; energy, &lt;em&gt;more&lt;/em&gt; variety, &lt;em&gt;more&lt;/em&gt; transportation, &lt;em&gt;more&lt;/em&gt; possessions, &lt;em&gt;more&lt;/em&gt; comfort. Conservation was discarded in favor of efficiency; instead of targeting &amp;ldquo;more for less&amp;rdquo;, we pursued &amp;ldquo;much more for more&amp;rdquo;. This mix of scientific findings and historical narrative is powerful and helped me understand modern first-world life in new ways.&lt;/p&gt;
&lt;p&gt;In the appendix entitled &amp;ldquo;The Story of Less,&amp;rdquo; Hope offers some reflection questions on how we each can &lt;em&gt;use less and share more&lt;/em&gt;. There are no cut and dry answers (and, as it turns out, there are more problems than any one of us could solve alone), but she provides a framework that gave me clarity beyond the behavior and tone matching of today&amp;rsquo;s armchair activism. I&amp;rsquo;m very thankful for her voice.&lt;/p&gt;
</description>
    </item>

    <item>
      <title>Dan in Real Life</title>
      <link>https://mhmmoshtaghi.github.io/review/movie-dan-in-real-life/</link>
      <pubDate>Sat, 21 Mar 2020 12:00:00 -0700</pubDate>
      <guid>https://mhmmoshtaghi.github.io/review/movie-dan-in-real-life/</guid>
      <description>&lt;p&gt;&lt;em&gt;Dan in Real Life&lt;/em&gt; is about Dan Burns, a newspaper columnist that writes about his life as a widow and father to three daughters. During their annual vacation at his parent&amp;rsquo;s cabin, he meets a woman (Marie) in a bookstore that he instantly connects with. But she&amp;rsquo;s already in a relationship — with Dan&amp;rsquo;s brother Mitch, as it turns out. Just as there seems to be no place for Dan in Marie&amp;rsquo;s love life, the entire film explores Dan&amp;rsquo;s lack of place in his family: all the couples sleep in rooms while he is relegated to the basement cot; his relationship with his daughters strains as he struggles with their growing independence; his ability to connect with his nieces and nephews is burdened by his swing-and-a-miss attempts to take them to fun places. Throughout, he tries and fails to ignore his feelings for Marie, the woman in the bookstore.&lt;/p&gt;
&lt;p&gt;Despite Marie showing a marked lack of agency in the first half of the film, &lt;em&gt;Dan in Real Life&lt;/em&gt; manages to avoid the tropes of a feel-good family film. Dan&amp;rsquo;s loss of his wife feels real and complicated, not just something stopping him from &amp;ldquo;true love&amp;rdquo; with Marie. He struggles to connect with everyone around him, seeming to exist on a different plane and acting out as part of it. And the only person to see through his estrangement is his youngest daughter, who he increasingly ignores when he needs her most.&lt;/p&gt;
&lt;p&gt;The film&amp;rsquo;s end seems to fumble its emotional gravitas as everything falls neatly and abruptly into place. Right as I was convinced it could say something serious, it took shortcuts to thoughtful answers and wrapped it up with music and smiles. Perhaps there&amp;rsquo;s a place for that, but watching Steve Carell bring real depth to his character only to get swept into a campy happily-ever-after certainly felt dissatisfying.&lt;/p&gt;
</description>
    </item>

    <item>
      <title>Star Wars: The Clone Wars</title>
      <link>https://mhmmoshtaghi.github.io/review/movie-star-wars-the-clone-wars/</link>
      <pubDate>Sun, 19 Jan 2020 12:00:00 -0700</pubDate>
      <guid>https://mhmmoshtaghi.github.io/review/movie-star-wars-the-clone-wars/</guid>
      <description>&lt;p&gt;It really isn&amp;rsquo;t fair to watch an early Extended Universe entry like &lt;em&gt;Star Wars: The Clone Wars&lt;/em&gt; in 2020 after we&amp;rsquo;ve been given the gift of the Abrams-Johnson sequel trilogy. If modern &lt;em&gt;Star Wars&lt;/em&gt; were to be described developmentally, then the original trilogy is its stellar parents, the prequel trilogy is its stumbling childhood, and this movie is its awkward pre-teen years.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The Clone Wars&lt;/em&gt; kicks off in the thick of a broader conflict set in the Outer Rim. The Hutts control the trade routes and thus the supply lines in the area. The Separatists, led by Count Dooku (and Palpatine, of course, on the down low), hatch a plan to kidnap Jabba the Hutt&amp;rsquo;s son and frame the Jedi for it. Obi-Wan, Anakin, and Anakin&amp;rsquo;s new Padawan Ahsoka set out to save Jabba&amp;rsquo;s son. And&amp;hellip; that&amp;rsquo;s pretty much it. 80% of this movie is repetitive clone-droid battles, another 10% is lightsaber battles, and in the last 10% you get heavy-handed &amp;ldquo;banter&amp;rdquo; dressed up as character development.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Star Wars&lt;/em&gt; mainstays are a crutch this film leans far too heavily on, refusing to take risks with its narrative. &lt;em&gt;The Clone Wars&lt;/em&gt; serves up a buffet of Jawas, a brief C-3PO cameo, Tatooine, the Mos Eisley jazz band, Obi-Wan&amp;rsquo;s circle light speed ship thing, lots of holographic intercoms, etc. all trying to hide the obvious: the world didn&amp;rsquo;t ask for an animated &lt;em&gt;Star Wars&lt;/em&gt; movie. Only two years after &lt;em&gt;Revenge of the Sith&lt;/em&gt;, it&amp;rsquo;s hard to even say this strategy wins any points in the nostalgia category. Instead, we&amp;rsquo;re left with a whole lot of nothing dressed up in royal clothes. It almost feels like sacrilege to hear the Skywalker theme played as often as it is here.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s not to say there aren&amp;rsquo;t good moments. This is the first entry in the &lt;em&gt;Star Wars&lt;/em&gt; universe to have the droids talk as far as I remember, and it makes for some self-aware humor that the later movies definitely iterated on.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Droid 1: &amp;ldquo;Concentrate fire on Sector 11374265!&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Droid 2: &amp;ldquo;1137— what was that again?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Droid 1, grabbing the other one&amp;rsquo;s head and pointing: &amp;ldquo;Just fire right there!&amp;rdquo;&lt;/p&gt;
&lt;p&gt;— &lt;em&gt;Star Wars: The Clone Wars&lt;/em&gt;, 34:32&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The relationship between Anakin and Ahsoka is also nice, when it&amp;rsquo;s not corny. Anakin even shows some level-headed maturity and humility in reminding Ahsoka that she doesn&amp;rsquo;t have to prove herself to anyone. There&amp;rsquo;s a nice touch of psychological safety and assurance there (though it seems totally constructed when compared to his raging tantrums in Episodes II and III).&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s also worth mentioning that the portrayal of women in this movie is painful (though it was 2007). At one point, a droid addressing Ventress — Count Dooku&amp;rsquo;s apprentice — accidentally salutes her as &amp;ldquo;sir&amp;rdquo; and then stumbles to correct itself, only to again call her &amp;ldquo;sir.&amp;rdquo; Obi-Wan condescendingly refers to her as &amp;ldquo;darling&amp;rdquo; in his British accent during a lightsaber duel, to which she just responds by clenching her teeth and growling. Anakin gets to play the aloof and displeased male around the baby Huttlet; Ahsoka does most of the caretaking and connecting with it. The Huttlet&amp;rsquo;s mom/Jabba&amp;rsquo;s partner, who you&amp;rsquo;d think would be concerned with this whole kidnapping situation, is not even present as a background character.&lt;/p&gt;
&lt;p&gt;So, was this a good movie? Not really. But I&amp;rsquo;m interested to see how the TV series evolved over the next decade, and especially how it matures into the backdrop for &lt;em&gt;Rise of Skywalker&lt;/em&gt; that it so clearly is today.&lt;/p&gt;
</description>
    </item>

    <item>
      <title>The Outer Worlds</title>
      <link>https://mhmmoshtaghi.github.io/review/videogame-the-outer-worlds/</link>
      <pubDate>Fri, 17 Jan 2020 12:00:00 -0700</pubDate>
      <guid>https://mhmmoshtaghi.github.io/review/videogame-the-outer-worlds/</guid>
      <description>&lt;p&gt;&lt;em&gt;The Outer Worlds&lt;/em&gt; promised to let you, &amp;ldquo;the unknown variable,&amp;rdquo; truly role-play in the wild world of Halycon. Want to be the hero and save the world? Sure, who doesn&amp;rsquo;t? Want to steer your jaded friends towards self-awareness and hope? Just might work. Want to murder everyone on sight, including major companions and story-critical characters? Have a great time, you monster. Streamers have basically tried it all, and the game does indeed deliver. I particularly enjoyed embodying some kind of scientist/intellectual with an aversion for violence and a deep need to screw some corporate tools over.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-the-outer-worlds/edgewaternight_hua95115548d781dc70255b1e6927bd015_2440629_0e3e112676b707e1ec91757638b3e391.png 400w,
               /review/videogame-the-outer-worlds/edgewaternight_hua95115548d781dc70255b1e6927bd015_2440629_1da8e0ff2167d5242fb7ef445a610fdd.png 760w,
               /review/videogame-the-outer-worlds/edgewaternight_hua95115548d781dc70255b1e6927bd015_2440629_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-the-outer-worlds/edgewaternight_hua95115548d781dc70255b1e6927bd015_2440629_0e3e112676b707e1ec91757638b3e391.png&#34;
               width=&#34;760&#34;
               height=&#34;428&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;What most impressed me was the world building packed into this tight, 40-ish hour experience. Every character looks different, has their own believable personality, and acts based on real fears and hopes. Most remember past encounters with you and have whole conversations scripted for the late-game, even when they&amp;rsquo;re just &amp;ldquo;extras&amp;rdquo; that have nothing to do with the ongoing story. Your companions are the best examples of the developers&#39; care and attention to detail: one companion develops a love interest and wants to grab drinks with you to get your thoughts — this leads to a tipsy bar visit where you get to give dating advice. Other characters are working through past hurts and losses that shape who they are in the current narrative. It all feels very &lt;em&gt;human&lt;/em&gt;, and that aspect alone (against the stark contrast of the very inhumane slave-like colony townships) is enough to pull you into the first several hours of gameplay and give gravity to the difficult choices you have to make.&lt;/p&gt;
&lt;p&gt;The characters made me savor conversations, walking up to every NPC just to make sure I wasn&amp;rsquo;t missing personal backstories or historical context. I found myself imagining those who would be unjustly punished for my decisions to stir up trouble, or who I could win over by showing some semblance of kindness. The world felt open and full of possibility, while harboring many situations with hidden consequences.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-the-outer-worlds/lavaflows_hu69c586f845e63269f64449ba8b24ebf9_2669693_873668b5252ba8bd609e1a31ad17cb04.png 400w,
               /review/videogame-the-outer-worlds/lavaflows_hu69c586f845e63269f64449ba8b24ebf9_2669693_62873ae67f596a5eca1ebcbb22f09199.png 760w,
               /review/videogame-the-outer-worlds/lavaflows_hu69c586f845e63269f64449ba8b24ebf9_2669693_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-the-outer-worlds/lavaflows_hu69c586f845e63269f64449ba8b24ebf9_2669693_873668b5252ba8bd609e1a31ad17cb04.png&#34;
               width=&#34;760&#34;
               height=&#34;428&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;Unfortunately, some of this delightful, game-outside-the-game enchantment faded when I realized a very simple reality: what felt like a cliff of consequence was really just a short ledge, and every mistake I made could usually be solved by shooting my way through. This wasn&amp;rsquo;t necessarily the only solution (for example, I appreciated the go-and-kill quests that offered diplomacy as a non-violent alternative), but violence was often the path of least resistance. I slowly deteriorated from a hero who respected life — killing only when just or necessary — to a skilled mercenary with a vague conscience who also happened to enjoy conversation. The magic wasn&amp;rsquo;t there in the same way after that reality set in.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-the-outer-worlds/scylla_hu224bb35c97e260bf23d205f44c29c329_2845510_8b45913c3f9764b211c65f0e1649118f.png 400w,
               /review/videogame-the-outer-worlds/scylla_hu224bb35c97e260bf23d205f44c29c329_2845510_f93bfc4e294cac2ad0ac03f0691a1781.png 760w,
               /review/videogame-the-outer-worlds/scylla_hu224bb35c97e260bf23d205f44c29c329_2845510_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-the-outer-worlds/scylla_hu224bb35c97e260bf23d205f44c29c329_2845510_8b45913c3f9764b211c65f0e1649118f.png&#34;
               width=&#34;760&#34;
               height=&#34;428&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;Perhaps this is what &lt;em&gt;The Outer Worlds&lt;/em&gt; had promised all along: that there would be many paths that one could fully explore, even if not all of are equally satisfying. It&amp;rsquo;s less that you live with your choices and more that your choices happen to the game, forcing it to bend and twist around you. And in that way, it really is a wonderful role-playing experience.&lt;/p&gt;
&lt;h2 id=&#34;bugs&#34;&gt;Bugs&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;I had a syncing issue with save files between different Xbox consoles, but this may have been a fluke.&lt;/li&gt;
&lt;li&gt;There was one view on Monarch where the environment didn&amp;rsquo;t render correctly, and whole stone structures seemed to disappear.&lt;/li&gt;
&lt;li&gt;I was awarded one achievement (&amp;ldquo;Pirate Radio&amp;rdquo;) out of the blue, unsure what exactly I did to get it.&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>

    <item>
      <title>Solving the Molecube by Reduction</title>
      <link>https://mhmmoshtaghi.github.io/post/solving-the-molecube-by-reduction/</link>
      <pubDate>Mon, 06 Jan 2020 13:00:00 -0700</pubDate>
      <guid>https://mhmmoshtaghi.github.io/post/solving-the-molecube-by-reduction/</guid>
      <description>&lt;p&gt;My sister-in-law surprised me with a &lt;a href=&#34;http://www.recenttoys.com/meffert-molecube-twister-puzzle/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Molecube&lt;/a&gt; for Christmas, which combines the logic of a Sudoku puzzle with the mechanics of a Rubik&amp;rsquo;s cube. Each ball on the Molecube is one of nine colors, and the goal is to reconfigure a shuffled Molecube so each of its faces has all nine colors on it.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img src=&#34;http://www.recenttoys.com/wp-content/uploads/2019/11/meffert-molecube-twister-puzzle-1200x900.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34; data-zoomable width=&#34;65%&#34; /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;It turns out that solving the Molecube is a wonderful exercise in what computer scientists call &lt;em&gt;reduction&lt;/em&gt;, which involves transforming a problem we don&amp;rsquo;t know how to solve into one that we do, solving that version, and then translating the solution back into the original problem. In this post, I&amp;rsquo;ll give a reader-friendly primer on reduction, outline a reduction from the Molecube to the Rubik&amp;rsquo;s cube, and then wrap up by solving the Molecube with a standard Rubik&amp;rsquo;s cube algorithm.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re interested in solving the Molecube yourself (and perhaps you&amp;rsquo;re here looking for hints), I&amp;rsquo;ve created a &lt;a href=&#34;https://mhmmoshtaghi.github.io/files/molecube_worksheet.pdf&#34; target=&#34;_blank&#34;&gt;worksheet&lt;/a&gt; you can use and will point out when you should skip ahead in the post so as to avoid spoiling this delightful puzzle.&lt;/p&gt;
&lt;h2 id=&#34;reduction-there-and-back-again&#34;&gt;Reduction: There and Back Again&lt;/h2&gt;
&lt;p&gt;Say we have a problem $A$ that we don&amp;rsquo;t know how to solve and another problem $B$ that we do know how to solve. Said another way, we have an &amp;ldquo;algorithm&amp;rdquo; that can answer any question asked in the form of problem $B$, but we have no such algorithm for problem $A$ questions. The whole idea of reduction is to:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Take a problem $A$ question (which we don&amp;rsquo;t know how to answer) and &amp;ldquo;transform&amp;rdquo; it into a problem $B$ question (which we do know how to answer).&lt;/li&gt;
&lt;li&gt;Use the &amp;ldquo;algorithm&amp;rdquo; for problem $B$ questions to get an answer for our transformed problem $A$ question.&lt;/li&gt;
&lt;li&gt;Translate the algorithm&amp;rsquo;s answer back into the context of problem $A$.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That&amp;rsquo;s it. We use a known algorithm (for problem $B$) as our workhorse for a new and unknown problem (problem $A$), and out pop solutions for our unknown problem! This powerful technique underlies almost all of theoretical computer science, giving us a tool to relate difficult problems to one another (as opposed to treating every new problem as something totally unique). I recently heard a high-profile professor in Computer Science claim that reduction is one of only two truly new ideas our discipline has ever contributed to science (though she called this idea &amp;ldquo;hierarchy&amp;rdquo;, with the other idea being &amp;ldquo;abstraction&amp;rdquo;).&lt;/p&gt;
&lt;p&gt;A natural question to ask next would be if all problems can be tackled with reduction. Unfortunately, in practice, finding the right translation between a pair of problems (Step 1, above) can be prohibitively difficult. Reduction is easiest when the two problems seem to have an obvious relationship we can exploit, which brings us to the Molecube and the Rubik&amp;rsquo;s cube.&lt;/p&gt;
&lt;h2 id=&#34;a-sudoku-like-transformation&#34;&gt;A Sudoku-Like Transformation&lt;/h2&gt;
&lt;p&gt;It&amp;rsquo;s difficult to overstate how much of the Molecube&amp;rsquo;s solution is given away in its advertising as &amp;ldquo;Sudoku + Rubik&amp;rsquo;s cube&amp;rdquo;. My solution will treat this equation quite literally, starting with a transformation that relies on a Sudoku puzzle. I found this transformation by asking two simple questions:&lt;/p&gt;
&lt;img src=&#34;shuffled.png&#34; style=&#34;display: inline-block; width: 48%; margin-right: 2%&#34;/&gt;
&lt;img src=&#34;rubiks-cube.jpg&#34; style=&#34;display: inline-block; width: 46%; margin-left: 2%&#34;/&gt;
&lt;ol&gt;
&lt;li&gt;How are the Molecube and the Rubik&amp;rsquo;s cube similar?&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;They&amp;rsquo;re both 3x3x3 cubes, meaning they both have 6 faces, 8 corners, and 12 edges. This totals 26 balls (on the Molecube) or blocks (on the Rubik&amp;rsquo;s cube).&lt;/li&gt;
&lt;li&gt;Their physical mechanics (spinning, twisting, etc.) are identical.&lt;/li&gt;
&lt;li&gt;Their goals are, in a way, also identical: from a shuffled configuration, reach a goal configuration.&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;How are the Molecube and the Rubik&amp;rsquo;s cube different?&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;Their goal configurations are different: the Molecube wants one ball of each color on each face, while the Rubik&amp;rsquo;s cube wants each face to be all the same color.&lt;/li&gt;
&lt;li&gt;There are nine colors on the Molecube, but only six on the Rubik&amp;rsquo;s cube.&lt;/li&gt;
&lt;li&gt;A block on the Rubik&amp;rsquo;s cube has 1–3 colors (one for each face it touches), while a ball on the Molecube is the same color on all &amp;ldquo;sides&amp;rdquo;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The similarities hint at a solution: though the goal configurations are different, the cubes&#39; structures and mechanics are the same. So if I find a goal configuration for the Molecube, I can use the Rubik&amp;rsquo;s cube algorithm to handle all the tricky rearranging involved in actually getting there.&lt;/p&gt;
&lt;p&gt;If that&amp;rsquo;s enough of a framework for you to attempt your own solution, feel free to download the &lt;a href=&#34;https://mhmmoshtaghi.github.io/files/molecube_worksheet.pdf&#34; target=&#34;_blank&#34;&gt;worksheet&lt;/a&gt; I&amp;rsquo;ve created to help you visualize the Molecube as a Sudoku puzzle (with colors instead of numbers). You&amp;rsquo;ll want to stop reading here and come back once you&amp;rsquo;ve completed a goal configuration or if you&amp;rsquo;re stuck and need hints.&lt;/p&gt;
&lt;p&gt;Speaking of hints, the best way to unlock this tricky Sudoku-like color puzzle (getting one color on each face) is to study the Molecube&amp;rsquo;s colors and structure. I asked myself the following questions (which culminated in the table at the top of the &lt;a href=&#34;https://mhmmoshtaghi.github.io/files/molecube_worksheet.pdf&#34; target=&#34;_blank&#34;&gt;worksheet&lt;/a&gt;):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;How does the Molecube fit nine colors on a cube with 26 balls?&lt;/li&gt;
&lt;li&gt;How are the colors distributed over the different types of balls (centers, corners, and edges)?&lt;/li&gt;
&lt;li&gt;Are there any patterns that appear when trying to place balls of a certain color so it appears on each face exactly once?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The answers to these questions are revealing. There are three balls of each color, with the important exception of Green, which only has two. Further, Green is the unique color that is on two corners. Red and Purple are each on three edges, and the remaining six colors (White, Black, Orange, Yellow, Light Blue, and Blue) are each on one center, one corner, and one edge. This information — after some careful thinking — reveals the patterns we need:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;As in the Rubik&amp;rsquo;s cube, centers opposite one another are always opposite one another (i.e., Black is always opposite White, Orange is always opposite Yellow, and Blue is always opposite Light Blue).&lt;/li&gt;
&lt;li&gt;The only way the two Green corners avoid being on the same face is if they&amp;rsquo;re opposite one another (e.g., upper-right-back and lower-left-front).&lt;/li&gt;
&lt;li&gt;The only way the three Red (or Purple) edges avoid being on the same face is if a Red (or Purple) appears exactly once in each &amp;ldquo;middle band&amp;rdquo; (shown below, left). So each middle band contains exactly one Red and one Purple.&lt;/li&gt;
&lt;li&gt;For any of the remaining colors, (e.g., Blue) there is a center of that color. This blocks the corner of that color from being in the same &amp;ldquo;layer&amp;rdquo;, so the corner must go in the layer opposite the center (shown below, right). Once the position of the corner is fixed, there is only one position the edge of that color can go.&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&#34;rule1.png&#34; style=&#34;display: inline-block; width: 47%; margin-right: 2%&#34;/&gt;
&lt;img src=&#34;rule2.png&#34; style=&#34;display: inline-block; width: 47%; margin-left: 2%&#34;/&gt;
&lt;p&gt;Using these rules and some trial and error, I found the solution shown below, also detailed in the &lt;a href=&#34;https://mhmmoshtaghi.github.io/files/molecube_worksheet_solved.pdf&#34; target=&#34;_blank&#34;&gt;worksheet solution&lt;/a&gt;. (An interesting aside: I don&amp;rsquo;t know if this is the only solution, but any solution works for the reduction). To relate the Molecube solution to the Rubik&amp;rsquo;s cube solution, we simply treat each 3×3 face on the Molecube as a &amp;ldquo;color&amp;rdquo; on the Rubik&amp;rsquo;s cube. (For example, the Black ball at the top-left of the White-center face becomes the Red-White-Green block on the Rubik&amp;rsquo;s cube). This completes the transformation step of the reduction.&lt;/p&gt;
&lt;img src=&#34;sudoku-soln.jpg&#34; style=&#34;display: inline-block; width: 47%; margin-right: 2%&#34;/&gt;
&lt;img src=&#34;rubiks-mapping.jpg&#34; style=&#34;display: inline-block; width: 47%; margin-left: 2%&#34;/&gt;
&lt;h2 id=&#34;rubik-ing-the-molecube&#34;&gt;Rubik-ing the Molecube&lt;/h2&gt;
&lt;p&gt;With the difficult transformation step out of the way, the rest of the reduction is easy. You can solve any shuffled Molecube just like you would a Rubik&amp;rsquo;s cube (assuming you know how to do that), but instead of aiming to have faces with all the same color, you aim to build the goal configuration we got from the transformation (above, left). To make this easier for me to visualize, I made a 3D rendering of my solution (front view on the left, back view on the right).&lt;/p&gt;
&lt;img src=&#34;featured.png&#34; style=&#34;display: inline-block; width: 47%; margin-right: 2%&#34;/&gt;
&lt;img src=&#34;solved-back.png&#34; style=&#34;display: inline-block; width: 47%; margin-left: 2%&#34;/&gt;
&lt;p&gt;I was pleasantly surprised at how much Rubik&amp;rsquo;s cube muscle memory I still had from speedcubing in junior high (though if you need a refresher, I found &lt;a href=&#34;https://hobbylark.com/puzzles/Rubik-Cube-Algorithms&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;this tutorial&lt;/a&gt; helpful). Interestingly, some of the steps in the Rubik&amp;rsquo;s cube &amp;ldquo;algorithm&amp;rdquo; are unnecessary for the Molecube. Remember the earlier observation that the Molecube&amp;rsquo;s balls are each a single color while the Rubik&amp;rsquo;s cube blocks can have 1–3 colors each? This means that the Molecube doesn&amp;rsquo;t care if its balls are rotated &amp;ldquo;in place&amp;rdquo;, though this is a problem for the Rubik&amp;rsquo;s cube (see the example below). So any steps in the Rubik&amp;rsquo;s cube algorithm that are meant to fix things like this can be skipped entirely.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img src=&#34;https://usercontent2.hubstatic.com/14101285_f1024.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34; data-zoomable width=&#34;90%&#34; /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;h2 id=&#34;but-does-it-work&#34;&gt;But Does It Work?&lt;/h2&gt;
&lt;p&gt;To show that the reduction approach not only works but is also reasonably fast, here&amp;rsquo;s me solving the Molecube in just under 2 minutes.&lt;/p&gt;

&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
  &lt;iframe src=&#34;https://www.youtube.com/embed/QRtTLvtXWrQ&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; allowfullscreen title=&#34;YouTube Video&#34;&gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;br/&gt;
&lt;p&gt;There are a &lt;em&gt;lot&lt;/em&gt; of Rubik&amp;rsquo;s cube-inspired puzzles these days (for example, the &lt;a href=&#34;http://www.recenttoys.com/meffert-ghost-cube-twister-puzzle/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Ghost Cube&lt;/a&gt; and the &lt;a href=&#34;http://www.recenttoys.com/meffert-pyraminx-twister-puzzle/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Pyraminx&lt;/a&gt;). But solving the Molecube by reduction makes me wonder just how many of these new puzzles share a similar relationship to the original Rubik&amp;rsquo;s cube. If these relationships exist, we&amp;rsquo;d find that these new puzzles aren&amp;rsquo;t really new at all; they&amp;rsquo;re just an old puzzle we know how to solve, but with new names and nice packaging.&lt;/p&gt;
</description>
    </item>

    <item>
      <title>Convex Hull Formation for Programmable Matter</title>
      <link>https://mhmmoshtaghi.github.io/publication/daymude2020-convexhull/</link>
      <pubDate>Sat, 04 Jan 2020 00:00:00 +0000</pubDate>
      <guid>https://mhmmoshtaghi.github.io/publication/daymude2020-convexhull/</guid>
      <description></description>
    </item>

    <item>
      <title>Hidden My Game By Mom!</title>
      <link>https://mhmmoshtaghi.github.io/review/videogame-hidden-my-game-by-mom/</link>
      <pubDate>Sun, 15 Dec 2019 12:00:00 -0700</pubDate>
      <guid>https://mhmmoshtaghi.github.io/review/videogame-hidden-my-game-by-mom/</guid>
      <description>&lt;p&gt;&lt;em&gt;Hidden My Game By Mom&lt;/em&gt; is a quick, quirky, and delightful little puzzle starring a boy addicted to his handheld gaming device and his mother&amp;rsquo;s attempts to hide it from him in increasingly bizarre ways. You, the real-life gamer that you are, vicariously strike back against the parental anti-game tyranny you may or may not have actually experienced by interacting with the scene to find this boy&amp;rsquo;s game. The core gameplay revolves around collecting items and using them in clever and silly ways to reveal where the boy&amp;rsquo;s game was hidden, but this comes with a catch: Mom is also hiding in nearly every level, often in more absurd places than the game. Find the game, win the level; find Mom, you&amp;rsquo;re busted.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-hidden-my-game-by-mom/lady_game_hucbecac82dffa2954be84ac6a98c31075_55374_d758a1579abf3ead9e7d4c25182fb09e.jpg 400w,
               /review/videogame-hidden-my-game-by-mom/lady_game_hucbecac82dffa2954be84ac6a98c31075_55374_d4c77700780e1f81a614a2743562dec0.jpg 760w,
               /review/videogame-hidden-my-game-by-mom/lady_game_hucbecac82dffa2954be84ac6a98c31075_55374_1200x1200_fit_q75_lanczos.jpg 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-hidden-my-game-by-mom/lady_game_hucbecac82dffa2954be84ac6a98c31075_55374_d758a1579abf3ead9e7d4c25182fb09e.jpg&#34;
               width=&#34;735&#34;
               height=&#34;474&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;This simple hidden object puzzle takes on another level of meaning when moving past the zaniness of the &lt;em&gt;what&lt;/em&gt; and moving into the relational &lt;em&gt;why&lt;/em&gt;. &lt;em&gt;Hidden My Game By Mom&lt;/em&gt; proposes the simple premise of Mom as antagonist, someone to be outsmarted and evaded. But as we progress, it&amp;rsquo;s difficult to leave the boy&amp;rsquo;s motives unquestioned. At one point, we distract the boy&amp;rsquo;s older sister from doing her homework so our boy can get back to his gaming. In another level, the boy digs through literal poop to be reunited with his cherished handheld. This is a caricature of both the boy&amp;rsquo;s love for his game and the lengths his mom would go to stop him, to be sure, but something rings true about his mom&amp;rsquo;s implicit concern that this all might be getting out of hand. And after a surprising and emotional gut punch of a finale, no amount of broken English in the UI can hide &lt;em&gt;Hidden My Game By Mom&lt;/em&gt;&amp;rsquo;s core message.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-hidden-my-game-by-mom/giraffe_hud367643ae2fb92fc2e6db2eaeec3a712_86123_070a9edb8ff42039a206e371c9714832.jpg 400w,
               /review/videogame-hidden-my-game-by-mom/giraffe_hud367643ae2fb92fc2e6db2eaeec3a712_86123_b978df786d50c0b8a4109c80f914683f.jpg 760w,
               /review/videogame-hidden-my-game-by-mom/giraffe_hud367643ae2fb92fc2e6db2eaeec3a712_86123_1200x1200_fit_q75_lanczos.jpg 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-hidden-my-game-by-mom/giraffe_hud367643ae2fb92fc2e6db2eaeec3a712_86123_070a9edb8ff42039a206e371c9714832.jpg&#34;
               width=&#34;646&#34;
               height=&#34;760&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;A parent&amp;rsquo;s love might come out as riding a giraffe&amp;rsquo;s head or feeding an elephant your gaming device, but it&amp;rsquo;s love all the same. We can argue with the methods and the logic, but (at some level) we should try to appreciate that they were doing the best they knew how.&lt;/p&gt;
</description>
    </item>

    <item>
      <title>Tap! Dig! My Museum!</title>
      <link>https://mhmmoshtaghi.github.io/review/videogame-tap-dig-my-museum/</link>
      <pubDate>Tue, 03 Dec 2019 12:00:00 -0700</pubDate>
      <guid>https://mhmmoshtaghi.github.io/review/videogame-tap-dig-my-museum/</guid>
      <description>&lt;p&gt;It&amp;rsquo;s difficult to overstate just how much of &lt;em&gt;Tap! Dig! My Museum!&lt;/em&gt; is in its title. In this free mobile idler, you play as an aspiring dinosaur archaeologist and newfound owner of a museum in disrepair. By enticing patrons to your museum, you collect the coins they drop as they react to your dinosaurs. In turn, you invest your cash into archaeological digs — where you tap away at sand to uncover hidden bones — and upgrades which make said digs easier. The more dinosaurs you complete, the more people come flooding in to see them, which in turn leads to more money, which in turn leads to more dinosaurs. You get the idea.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-tap-dig-my-museum/museum_hu258252aad6c4944f58e890ada42e6efb_245093_767982c9c283fda0b6a1b9259508a02d.png 400w,
               /review/videogame-tap-dig-my-museum/museum_hu258252aad6c4944f58e890ada42e6efb_245093_de6d337e318e53c99b344a26b3966425.png 760w,
               /review/videogame-tap-dig-my-museum/museum_hu258252aad6c4944f58e890ada42e6efb_245093_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-tap-dig-my-museum/museum_hu258252aad6c4944f58e890ada42e6efb_245093_767982c9c283fda0b6a1b9259508a02d.png&#34;
               width=&#34;527&#34;
               height=&#34;760&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;&lt;em&gt;Tap! Dig! My Museum!&lt;/em&gt; is a perfect free game in the sense that it never artificially handicaps the player&amp;rsquo;s progress. If you want to keep unearthing dinosaur fossils, nobody&amp;rsquo;s stopping you. Mandatory ads are never longer than 15 seconds, and ads that grant bonuses (like a school bus that brings a swarm of visitors to boost your income) are never longer than 30. As of version 1.3.0 (which added a second floor to the museum and oceanic dinos!), the whole experience only took about 18 hours to complete — ads and plenty of AFK coin collecting included. After being burned by many a &amp;ldquo;free-to-play&amp;rdquo; mobile game, it was nice to actually finish one fair and square.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-tap-dig-my-museum/level_hu64f74bbabc863a7488cd82b6207ef236_101245_c46c76448e510414a4f960a9346f89f4.png 400w,
               /review/videogame-tap-dig-my-museum/level_hu64f74bbabc863a7488cd82b6207ef236_101245_6ddd96a1b4f47eb87bea39ae1c93c5c3.png 760w,
               /review/videogame-tap-dig-my-museum/level_hu64f74bbabc863a7488cd82b6207ef236_101245_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-tap-dig-my-museum/level_hu64f74bbabc863a7488cd82b6207ef236_101245_c46c76448e510414a4f960a9346f89f4.png&#34;
               width=&#34;565&#34;
               height=&#34;760&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;There is exactly one interesting wrinkle that shook up gameplay in what was otherwise an enjoyable but repetitive experience. Occasionally, while on a dig, I&amp;rsquo;d uncover a bone fragment that didn’t belong to the dinosaur I was excavating. These remained elusive until finding more across other dig sites, as &lt;em&gt;Tap! Dig! My Museum!&lt;/em&gt; began to drop subtle clues about where I could find others. I soon found myself flipping through the in-game dinosaur book with newfound importance, trying to track down mysterious new creatures. In those moments, even if it was in a cartoonish, silly kind of way, I felt like I was solving a pre-historic mystery. And, after all, that’s what this is all about.&lt;/p&gt;
</description>
    </item>

    <item>
      <title>A Local Stochastic Algorithm for Separation in Heterogeneous Self-Organizing Particle Systems</title>
      <link>https://mhmmoshtaghi.github.io/event/2019random-separation/</link>
      <pubDate>Sat, 21 Sep 2019 09:00:00 -0400</pubDate>
      <guid>https://mhmmoshtaghi.github.io/event/2019random-separation/</guid>
      <description></description>
    </item>

    <item>
      <title>A Local Stochastic Algorithm for Separation in Heterogeneous Self-Organizing Particle Systems</title>
      <link>https://mhmmoshtaghi.github.io/publication/cannon2019-separation/</link>
      <pubDate>Fri, 20 Sep 2019 00:00:00 +0000</pubDate>
      <guid>https://mhmmoshtaghi.github.io/publication/cannon2019-separation/</guid>
      <description></description>
    </item>

    <item>
      <title>Batman: Arkham City</title>
      <link>https://mhmmoshtaghi.github.io/review/videogame-batman-arkham-city/</link>
      <pubDate>Sat, 17 Aug 2019 12:00:00 -0700</pubDate>
      <guid>https://mhmmoshtaghi.github.io/review/videogame-batman-arkham-city/</guid>
      <description>&lt;p&gt;I played &lt;em&gt;Arkham Asylum&lt;/em&gt; back in summer of 2015, so it somehow seems fitting for this much busier stage of my life that it took me four years to play the sequel. That being said, the gap I&amp;rsquo;ve taken from the &lt;em&gt;Batman: Arkham&lt;/em&gt; series may ultimately have been to my benefit, given just how similar &lt;em&gt;Arkham City&lt;/em&gt; feels to &lt;em&gt;Arkham Asylum&lt;/em&gt;. We&amp;rsquo;re still beating the crap out of every other living character in the game (who all seem inexplicably hostile towards us on sight), we&amp;rsquo;re still uncovering a diabolical plot that features an all-star cast of Batman villains, and we&amp;rsquo;re still tracking down every Riddler secret using every piece of WayneTech we can get our hands on.&lt;/p&gt;
&lt;p&gt;The thing is, all of it is &lt;em&gt;great&lt;/em&gt;. Very few superhero games, especially those being made back in the early 2010s, can hold a candle to the experience that &lt;em&gt;Arkham City&lt;/em&gt; provides. From gliding and grappling through the city to using detective mode to solve crimes, every moment feels like an authentic, exhilarating experience of donning the cape and cowl of the Dark Knight. Catwoman, Robin, and Nightwing are also playable characters for smaller segments, each with their own exciting gadgets and play styles. A huge amount of the game&amp;rsquo;s success can be credited to the immersive open-world of &lt;em&gt;Arkham City&lt;/em&gt;, greatly improving over the labyrinth Metroidvania-like level design of &lt;em&gt;Arkham Asylum&lt;/em&gt;. Adding a mix of outdoor and indoor locations to the game adds further opportunities for the mechanics and side missions to enrich the overall experience.&lt;/p&gt;
&lt;p&gt;But this brings me to a point of &lt;em&gt;Arkham City&lt;/em&gt; I was surprised by, and one that I would have only picked up on now, in 2019. Thanks to the open-world design, we get a lot of radio chatter from various inmates and characters to make the solo experience feel more alive. Most of what they say is fine but forgettable, like &amp;ldquo;I wonder what&amp;rsquo;s on TV right now,&amp;rdquo; or self-dating to an era where Facebook was still a novelty: &amp;ldquo;How am I supposed to update my status? &amp;hellip;Oh yeah, I&amp;rsquo;m still stuck here in this stinking prison.&amp;rdquo; But a lot of it hints at something much more sinister, not originating from the inmates themselves, but from their experience.&lt;/p&gt;
&lt;p&gt;You see, the plot of the game is that Prof. Hugo Strange gets Gotham City to agree to a pretty bonkers plan wherein they wall off a huge part of the city, throw all the inmates and supervillains from Arkham Asylum inside, and seal it shut. Strange likes this because he gets to &amp;ldquo;study&amp;rdquo; the criminally insane (for the good of science, I&amp;rsquo;m sure), and because the prison is a perfect way of making sure anyone who knows the truth of his nefarious purposes (like Bruce Wayne) are never heard from again. But in an age where we&amp;rsquo;re talking a lot more about racial discrimination, police brutality, and other failures of our criminal justice system, you start to wonder why in the world Batman feels the need to be inside this prison, beating the pulp out of everyone he sees. A decent number of inmates will yell &amp;ldquo;What&amp;rsquo;s Batman doing here?&amp;rdquo; when you start a fight. Others get picked up by your police scanner: &amp;ldquo;Why&amp;rsquo;s Batman in here anyway, aren&amp;rsquo;t we already locked up?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;I get that a lot of these inmates are bad people, especially the more ruthless ones who work closely with the big bads (Penguin, Two-Face, Joker, etc.). But my guess is that a lot of the inmates joined up with some villain&amp;rsquo;s faction just so they had food to eat, or so they wouldn&amp;rsquo;t get killed in the streets. And while I know Batman will never be compassionate, I wonder if he couldn&amp;rsquo;t be just a bit more conscientious. Otherwise, I worry that Joker&amp;rsquo;s right when he says Batman belongs inside with the rest of them.&lt;/p&gt;
&lt;h2 id=&#34;bugs&#34;&gt;Bugs&lt;/h2&gt;
&lt;p&gt;The game would occasionally crash with some pretty unreadable error messages, but was otherwise flawless.&lt;/p&gt;
</description>
    </item>

    <item>
      <title>The Three Academics: A Joke</title>
      <link>https://mhmmoshtaghi.github.io/post/the-three-academics/</link>
      <pubDate>Tue, 30 Jul 2019 09:15:00 -0700</pubDate>
      <guid>https://mhmmoshtaghi.github.io/post/the-three-academics/</guid>
      <description>&lt;p&gt;Mathematicians really care about correctness. We believe unspoken assumptions are dangerous. We think vague language is confusing, and saying more or less than we mean is grounds for misunderstanding. We want terms to be clearly defined, and for points to follow logically, like links in an unbreakable chain of truth. But sometimes people say things that are completely reasonable and yet we still feel the need to set them straight:&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /post/the-three-academics/the-three-academics-lowres_huc2345e23d7c9b85a48da5ce8d8476a68_168428_4f17334aea9310bd9c7aa31446707618.png 400w,
               /post/the-three-academics/the-three-academics-lowres_huc2345e23d7c9b85a48da5ce8d8476a68_168428_141baf6ae9c3a125432b27dadfc380a3.png 760w,
               /post/the-three-academics/the-three-academics-lowres_huc2345e23d7c9b85a48da5ce8d8476a68_168428_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/post/the-three-academics/the-three-academics-lowres_huc2345e23d7c9b85a48da5ce8d8476a68_168428_4f17334aea9310bd9c7aa31446707618.png&#34;
               width=&#34;587&#34;
               height=&#34;760&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;This is my first contribution to the world of webcomics, a medium I&amp;rsquo;ve long admired for being able to deliver witty, weird reflections on life in simple packages. Giving credit where it&amp;rsquo;s due, this &amp;ldquo;joke&amp;rdquo; is adapted from &lt;a href=&#34;https://www.goodreads.com/book/show/1618.The_Curious_Incident_of_the_Dog_in_the_Night_Time&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;em&gt;The Curious Case of the Dog in the Night-Time&lt;/em&gt;&lt;/a&gt; by Mark Haddon and the art style takes after &lt;a href=&#34;https://www.instagram.com/poorlydrawnlines/?hl=en&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;poorlydrawnlines&lt;/a&gt; by Reza Farazmand. In living out &lt;a href=&#34;https://www.alabasterco.com/blogs/articles/all-that-is-made&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;generous making&lt;/a&gt;, this comic is available as a high resolution &lt;a href=&#34;https://mhmmoshtaghi.github.io/uploads/the-three-academics-highres.png&#34; target=&#34;_blank&#34;&gt;PNG&lt;/a&gt; or &lt;a href=&#34;https://mhmmoshtaghi.github.io/uploads/the-three-academics.pdf&#34; target=&#34;_blank&#34;&gt;PDF&lt;/a&gt; for you to use as you&amp;rsquo;d like. (Just keep my authorship in the corner intact, please!)&lt;/p&gt;
&lt;p&gt;And hey, to the economists out there: if you&amp;rsquo;ve got any good roasts of mathematicians, I&amp;rsquo;m all ears.&lt;/p&gt;
</description>
    </item>

    <item>
      <title>Simulation of Programmable Matter Systems Using Active Tile-Based Self-Assembly</title>
      <link>https://mhmmoshtaghi.github.io/publication/alumbaugh2019-tilesimulation/</link>
      <pubDate>Wed, 24 Jul 2019 00:00:00 +0000</pubDate>
      <guid>https://mhmmoshtaghi.github.io/publication/alumbaugh2019-tilesimulation/</guid>
      <description></description>
    </item>

    <item>
      <title>The Curious Incident of the Dog in the Night-Time</title>
      <link>https://mhmmoshtaghi.github.io/review/book-the-curious-incident-of-the-dog-in-the-nighttime/</link>
      <pubDate>Sat, 13 Jul 2019 12:00:00 -0700</pubDate>
      <guid>https://mhmmoshtaghi.github.io/review/book-the-curious-incident-of-the-dog-in-the-nighttime/</guid>
      <description>&lt;p&gt;This is a story about the weirdness of the world as understood by the mind of Christopher John Francis Boone, a boy with autism who lives with his father in a small town in the UK. Christopher hates crowds of people, vague questions, figurative language, being touched, and the color yellow (seeing four yellow cars in a row on his way to school makes it a &lt;strong&gt;Black Day&lt;/strong&gt;, on which he doesn&amp;rsquo;t eat anything). But he loves all things scientific, mathematical, and factual. When he gets lost, he physically performs the &lt;a href=&#34;https://en.wikipedia.org/wiki/Maze_solving_algorithm#Pledge_algorithm&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Pledge maze-solving algorithm&lt;/a&gt;. When he gets stressed, he solves quadratic equations in his head. And his best approximation for life is the prime numbers:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Prime numbers are what is left when you have taken all the patterns away. I think prime numbers are like life. They are very logical but you could never work out the rules, even if you spent all your time thinking about them.&lt;/p&gt;
&lt;p&gt;— &lt;em&gt;The Curious Incident of the Dog in the Night-Time&lt;/em&gt;, page 12.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The book itself is one of Christopher&amp;rsquo;s school exercises. When he finds a neighbor&amp;rsquo;s dog stabbed through with a pitchfork, he takes it upon himself to solve the murder mystery. Siobahn — his teacher and likely the only person in his life that fully understands autism — encourages him to document it all like his favorite &lt;em&gt;Sherlock Holmes&lt;/em&gt; novels. But just as often as it includes details about the case, it also includes Christopher&amp;rsquo;s meandering thoughts: his interactions with his father, his hopes for the future, and his bewilderment with the world.&lt;/p&gt;
&lt;p&gt;This is where the clever beauty of this novel shines through: in some ways, we all are bewildered with our world. People don&amp;rsquo;t say what they mean. Solid, committed relationships break. We fill the world with noise instead of thoughtful presence. Through the eyes of Christopher, we can learn empathy for those who simply can&amp;rsquo;t cope with these strange nuances as well as we do (or don&amp;rsquo;t). Through the thoughts of a boy who thinks of everyone as different from himself, we&amp;rsquo;re reminded just how many common threads bind us all together. And through his quips — which he would &lt;em&gt;never&lt;/em&gt; call jokes because he claims to not know any or understand them — we can find humor in truth.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Mr. Jeavons asked me whether this made me feel safe, having things always in a nice order, and I said it did.&lt;/p&gt;
&lt;p&gt;Then he asked if I didn&amp;rsquo;t like things changing. And I said I wouldn&amp;rsquo;t mind things changing if I became an astronaut, for example, which is one of the biggest changes you can imagine, apart from becoming a girl or dying.&lt;/p&gt;
&lt;p&gt;— &lt;em&gt;The Curious Incident of the Dog in the Night-Time&lt;/em&gt;, page 25.&lt;/p&gt;
&lt;/blockquote&gt;
</description>
    </item>

    <item>
      <title>All That Is Made</title>
      <link>https://mhmmoshtaghi.github.io/review/book-all-that-is-made/</link>
      <pubDate>Tue, 09 Jul 2019 12:00:00 -0700</pubDate>
      <guid>https://mhmmoshtaghi.github.io/review/book-all-that-is-made/</guid>
      <description>&lt;p&gt;This book is a celebration of the Creator God who created all that is made and invites us as humans into a continual process of co-creation. It is a purposeful urge to reorient our making away from idols of productivity or self-promotion and towards others and the world. It is a gentle reminder that God has delighted in our existence since before we knew him, and continues to delight in what we bring, albeit imperfect, broken, and lacking. We do not earn our keep; it is lavished on us. So we, in turn, pour ourselves out for others through our making, trusting the perfect Creator to use our humble gifts in magnificent ways.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Jesus invites us into a generous creating—a creating that does not fear, that is not self-conscious, and that is generative in purpose&amp;hellip; ultimately our art should be generous. A gift. A thing given over and over and over because we are called to be love to the whole of the Earth.&lt;/p&gt;
&lt;p&gt;— &lt;em&gt;All That Is Made&lt;/em&gt;, page 22.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;em&gt;All That Is Made&lt;/em&gt; is a guiding hand in reimagining creativity as an aspect of all humans instead of an elite few. We are all made in the image of God, so we all carry the desire to create, to make, and to build. This frees us from constructs of who is creative and who is not, and the pressures that come with each (the pressure to produce and the feeling of inferiority, respectively). And in that freedom, &lt;em&gt;All That Is Made&lt;/em&gt; argues that we should all take part together in boldly reimagining the world as it should be, on earth as it is in heaven, with all the elusive stepping stones between here and there.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;It is our artists, our poets, and our entrepreneurs who remind us that how it is right now, is not how it always will be. It is creatives that remind us that the arc of the universe bends towards God&amp;rsquo;s justice. It is creatives that both give voice to our suffering and imagine a world in which it is not wasted.&lt;/p&gt;
&lt;p&gt;— &lt;em&gt;All That Is Made&lt;/em&gt;, page 15.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If nothing else, &lt;em&gt;All That Is Made&lt;/em&gt; did for me what it advocates for all creativity to do: to bring healing, restoration, and hope. As a mathematician and computer scientist, I&amp;rsquo;ve endured a lot of boxes being put around me in how formulaic or robotic my thinking and work must be. Against the backdrop of tech culture, passion projects feel worthless without a monetization strategy. I&amp;rsquo;ve been afraid that I don&amp;rsquo;t know what I need to know to make an impact.&lt;/p&gt;
&lt;p&gt;But I know that this work is creative. I know that it is generative in purpose. And I want my making to be a gift to those around me: I want to give it all away. Open-source, easy to use, and out in the world to be used however God and others might use it. This has always been true in my heart of hearts. To see my desires spelled out on beautiful pages was both relief and clarity. Reflecting on it invokes something deep and emotional in my soul.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Creatives who follow the way of Jesus are called to give away every last trade secret, every lesson learned, every skill set acquired, and lots and lots of art.&lt;/p&gt;
&lt;p&gt;We are blessed to be a blessing.&lt;/p&gt;
&lt;p&gt;We are creative, not for ourselves, but for the flourishing of humanity. We start companies, not for personal gain but to reimagine the marketplace as a place of generosity. We make things so that our communities are filled with the creative energy of God, allowing the next generation to join in the work of ushering in shalom.&lt;/p&gt;
&lt;p&gt;— &lt;em&gt;All That Is Made&lt;/em&gt;, page 29.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Hallelujah. Amen. May it be so.&lt;/p&gt;
&lt;h2 id=&#34;notes&#34;&gt;Notes&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.linkedin.com/in/geoff-gentry-36ab95b8&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Geoff Gentry&lt;/a&gt; gifted this book to Annie and I, hoping that it would be something useful to reflect on. He was right.&lt;/p&gt;
</description>
    </item>

    <item>
      <title>SureChoice: Making Informed Insurance Decisions</title>
      <link>https://mhmmoshtaghi.github.io/post/surechoice/</link>
      <pubDate>Sat, 29 Jun 2019 22:21:00 -0700</pubDate>
      <guid>https://mhmmoshtaghi.github.io/post/surechoice/</guid>
      <description>&lt;p&gt;Health insurance is confusing. Last year, after Annie and I got married and she started a new job, she came home from orientation day with &lt;em&gt;the book&lt;/em&gt;. The book of health insurance plans, complete with overcomplicated tables of costs and percentages, interspersed with pictures of smiling people. I assume they&amp;rsquo;re smiling either to make me — the daunted reader — feel assured, or because they know they&amp;rsquo;d be screwed in the U.S. without health insurance. But that&amp;rsquo;s another issue.&lt;/p&gt;
&lt;h2 id=&#34;choices-choices&#34;&gt;Choices, Choices&lt;/h2&gt;
&lt;p&gt;The problem with displaying a health insurance plan using many tables is that it&amp;rsquo;s very difficult to make comparisons between plans. One plan might be more costly than another in certain categories but not in others. One might have a low deductible while the other has a high co-pay. Yet a third plan might have a very middling premium and comes with a Flexible Savings Account. Even if I know what all these terms mean and how they interact with one another, it&amp;rsquo;s still hard to discern which would be best for our family&amp;rsquo;s specific health needs. And, to top it all off, I can&amp;rsquo;t know if I&amp;rsquo;m getting a good deal since insurance rates are negotiated between insurance companies and employers, and there&amp;rsquo;s very little info available online to compare with.&lt;/p&gt;
&lt;p&gt;This, I think, is where uncertainty sets in and some word-of-mouth advice can end up replacing mathematical reasoning for some people. (Or, for those who grew up in the 2000s, maybe you have a vaguely negative feeling about HMOs because of &lt;a href=&#34;https://youtu.be/MHQnTZ2hAgI?t=52&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Melman&lt;/a&gt; from &lt;em&gt;Madagascar&lt;/em&gt;.) But Annie and I wanted grounded answers, so we went to our whiteboard, scribbled a ton of math and graphs, argued about said scribbles, eventually came to realize we agreed about everything we were arguing over (classic), and got to work.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /post/surechoice/whiteboard_hu33e8a36b393a6ce43c03d74995a3870c_1598695_f92de1d39274d52eab009233a5251cc7.jpg 400w,
               /post/surechoice/whiteboard_hu33e8a36b393a6ce43c03d74995a3870c_1598695_fac9f84bfcf7f6286e25144152f470f9.jpg 760w,
               /post/surechoice/whiteboard_hu33e8a36b393a6ce43c03d74995a3870c_1598695_1200x1200_fit_q75_lanczos.jpg 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/post/surechoice/whiteboard_hu33e8a36b393a6ce43c03d74995a3870c_1598695_f92de1d39274d52eab009233a5251cc7.jpg&#34;
               width=&#34;760&#34;
               height=&#34;570&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;h2 id=&#34;cutting-through-the-jargon&#34;&gt;Cutting Through the Jargon&lt;/h2&gt;
&lt;p&gt;A big part of this for me was simply understanding what all these health insurance words meant. Here&amp;rsquo;s what I learned (feel free to skip if you know this already).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;premium&lt;/strong&gt; is a cost you pay every month just for being on insurance. Think of it like the cost of a Netflix subscription, but more expensive and way less entertaining.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;deductible&lt;/strong&gt; is a set amount of medical costs that you are 100% responsible for. Insurance is only going to kick in and make things cheaper &lt;em&gt;after&lt;/em&gt; you &amp;ldquo;meet&amp;rdquo; your deductible.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;copay&lt;/strong&gt; (co-payment) is the percentage of medical costs you&amp;rsquo;re responsible for after your deductible is met.&lt;/li&gt;
&lt;li&gt;An &lt;strong&gt;out-of-pocket maximum&lt;/strong&gt; is the maximum amount of money you will be responsible to pay in a year.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Let&amp;rsquo;s work this as an example. Say I have Plan A, shown below.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;premium&lt;/th&gt;
&lt;th&gt;deductible&lt;/th&gt;
&lt;th&gt;copay&lt;/th&gt;
&lt;th&gt;out-of-pocket maximum&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Plan A&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$200&lt;/td&gt;
&lt;td&gt;$500&lt;/td&gt;
&lt;td&gt;20%&lt;/td&gt;
&lt;td&gt;$4,000&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Say my plan starts in January, and the first three months go by without any doctor appointments, prescription refills, etc. By the time March has ended, I&amp;rsquo;ve paid $\$200 \times 3 = \$600$ in premiums. Then, in April, I get an infection and need to see my primary care physician. The doctor is charging me $\$75$ for the visit, and the medication they prescribed is another $\$75$. Because I haven&amp;rsquo;t met my deductible yet (premiums don&amp;rsquo;t count!), I have to pay the full $\$150$. I&amp;rsquo;ll also, of course, have to pay my April premium of $\$200$. (This whole healthcare thing is expensive, isn&amp;rsquo;t it?) Time goes on, and by October my family has paid $\$500$ out-of-pocket. But crisis strikes: I get in a car accident and break several bones. I&amp;rsquo;m rushed to the hospital via ambulance, and have to spend several days in the hospital getting stabilized and getting casts set. Our bill comes out to be $\$25000$. But because our copay has now kicked in, we&amp;rsquo;re only responsible for $20\% \times \$25000 = \$5000$, and we only have to pay $\$3500$ of the bill before we hit our $\$4000$ out-of-pocket maximum.&lt;/p&gt;
&lt;p&gt;Whew.&lt;/p&gt;
&lt;h2 id=&#34;a-piecewise-function&#34;&gt;A Piecewise Function&lt;/h2&gt;
&lt;p&gt;I made many simplifications to the healthcare system in my example above, but a year on health insurance can roughly be split into three stages: paying 100% of costs until meeting the deductible, paying only the copay percentage of costs after the deductible, and paying 0% of costs after hitting the out-of-pocket maximum. If we were to plot this with the x-axis being the total medical costs without insurance and the y-axis being the out-of-pocket costs with insurance, we&amp;rsquo;d end up with something that looks like:&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /post/surechoice/piecewise_hud87a9595c36e2e9b086233bf7e273ba5_88289_ed59721bec3e451d74a7c7adabbe595b.jpg 400w,
               /post/surechoice/piecewise_hud87a9595c36e2e9b086233bf7e273ba5_88289_29b3023b91b6cee84897f22e9f93c532.jpg 760w,
               /post/surechoice/piecewise_hud87a9595c36e2e9b086233bf7e273ba5_88289_1200x1200_fit_q75_lanczos.jpg 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/post/surechoice/piecewise_hud87a9595c36e2e9b086233bf7e273ba5_88289_ed59721bec3e451d74a7c7adabbe595b.jpg&#34;
               width=&#34;760&#34;
               height=&#34;638&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;Once Annie and I saw this, we realized we could plot all of our plan options onto one graph and immediately be able to see what would cost us the most depending on the medical costs we incurred. We only needed to add in the annual premium costs to see a decent approximation of everything we&amp;rsquo;d spend on health insurance in a year with each plan.&lt;/p&gt;
&lt;h2 id=&#34;building-surechoice&#34;&gt;Building SureChoice&lt;/h2&gt;
&lt;p&gt;I quickly threw together some MATLAB code to compute and plot the piecewise cost function for each of our possible plans. What we found cut straight through the sales language in our plans booklet and made everything quite concrete: the best plan for us had everything to do with the medical costs we would have. Here&amp;rsquo;s an example plot:&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /post/surechoice/featured_hud85f394eef86c84953f26804802d17b0_140831_61711b061c8e55c32016071282505406.png 400w,
               /post/surechoice/featured_hud85f394eef86c84953f26804802d17b0_140831_e43fee18d0a2bab560721d4ba8c3f192.png 760w,
               /post/surechoice/featured_hud85f394eef86c84953f26804802d17b0_140831_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/post/surechoice/featured_hud85f394eef86c84953f26804802d17b0_140831_61711b061c8e55c32016071282505406.png&#34;
               width=&#34;760&#34;
               height=&#34;570&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;Every line in the plot shows how expensive that plan would be if we had the total annual medical costs shown on the x-axis. The HMO plan (blue), for example, is almost always the most expensive plan (except for the $\$3000$–$\$9000$ range, where it&amp;rsquo;s better than the HDHP plan). If we knew we were going to have over $\$30000$ in costs, the HDHP plan is the best. If we were going to have under $\$5000$ in costs, everything but the HMO plan is roughly the same. The EPO plan basically wins out in all other cost ranges. All in all, this kind of visualization helped us to make the most cost-effective choice for our expected medical expenses.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve recently cleaned up my code, ported it to Python, and put it up on &lt;a href=&#34;https://github.com/jdaymude/SureChoice&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;GitHub&lt;/a&gt; for anyone to use (&amp;hellip;assuming you know how to run Python code). Hopefully it can help you like it helped us, and if you have the skills to turn this into something easier to use (a web app, etc.) go for it! We might not be able to change these confusing systems, but we can at least make them easier to navigate.&lt;/p&gt;
</description>
    </item>

    <item>
      <title>Stochastic Algorithms for Programmable Matter</title>
      <link>https://mhmmoshtaghi.github.io/event/2019discretemath-stochastic/</link>
      <pubDate>Wed, 03 Apr 2019 13:00:00 -0700</pubDate>
      <guid>https://mhmmoshtaghi.github.io/event/2019discretemath-stochastic/</guid>
      <description></description>
    </item>

    <item>
      <title>Git Going With GitKraken</title>
      <link>https://mhmmoshtaghi.github.io/post/git-going-with-gitkraken/</link>
      <pubDate>Tue, 22 Jan 2019 12:40:00 -0700</pubDate>
      <guid>https://mhmmoshtaghi.github.io/post/git-going-with-gitkraken/</guid>
      <description>&lt;p&gt;Our team over at the &lt;a href=&#34;https://sops.engineering.asu.edu/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;SOPS Lab&lt;/a&gt; has been writing a lot of code lately as part of an ongoing effort to make our AmoebotSim simulator publicly available through an open source release. There&amp;rsquo;s a lot of diversity in coding/software engineering experience among our team members — from finishing a first course in C++ to completing several internships in big tech — so I&amp;rsquo;ve been spending some time thinking about how to make on-boarding easier, forming new students into conceptual thinkers and proficient programmers as quickly as possible. This tutorial on the basics of Git is meant to help with that.&lt;/p&gt;
&lt;h2 id=&#34;necessary-disclaimers&#34;&gt;Necessary Disclaimers&lt;/h2&gt;
&lt;p&gt;We have to get two things out of the way up front. First, this is not really the &amp;ldquo;accessible to anyone, technical or not&amp;rdquo; kind of post that I usually aim for. While it is meant to be simpler than the average Git tutorial, it&amp;rsquo;s still going to talk about software skills that are, by nature, technical. Speaking of other Git tutorials: yes, I do know how many Git tutorials already exist. Many of them are ones I&amp;rsquo;ve learned from and am inspired by. Some are far more &lt;a href=&#34;https://jwiegley.github.io/git-from-the-bottom-up/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;complete&lt;/a&gt;, more &lt;a href=&#34;https://chris.beams.io/posts/git-commit/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;specific&lt;/a&gt;, more &lt;a href=&#34;https://www.atlassian.com/git/tutorials&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;polished&lt;/a&gt;, and even more &lt;a href=&#34;https://www.youtube.com/watch?v=1ffBJ4sVUb4&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;craftsy&lt;/a&gt; than what I intend to do here. The point of this tutorial is to distill all that wonderful material into something that gets students (and other newcomers) acquainted with basic Git concepts and comfortable with a great Git client all in one sitting.&lt;/p&gt;
&lt;p&gt;As a last bit of housekeeping, I&amp;rsquo;d like to credit Rachel M. Carmena, whose &lt;a href=&#34;https://rachelcarmena.github.io/2018/12/12/how-to-teach-git.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;methodology&lt;/a&gt; I&amp;rsquo;m following quite closely.&lt;/p&gt;
&lt;h2 id=&#34;gits-view-of-the-world&#34;&gt;Git&amp;rsquo;s View of the World&lt;/h2&gt;
&lt;p&gt;Git sees a software project loosely like this:&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /post/git-going-with-gitkraken/overview1_hub13eecc48a7da159c36df9e38fb25fc7_21091_7360b822a929d24f70068d4ba74e6029.png 400w,
               /post/git-going-with-gitkraken/overview1_hub13eecc48a7da159c36df9e38fb25fc7_21091_d485b9b5f2f65f943f1826f85f9c9afd.png 760w,
               /post/git-going-with-gitkraken/overview1_hub13eecc48a7da159c36df9e38fb25fc7_21091_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/post/git-going-with-gitkraken/overview1_hub13eecc48a7da159c36df9e38fb25fc7_21091_7360b822a929d24f70068d4ba74e6029.png&#34;
               width=&#34;760&#34;
               height=&#34;384&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;Big picture: there&amp;rsquo;s the remote server that houses the full software project and all the changes that have been made to it so far, and then there&amp;rsquo;s your computer where you implement new features and code changes. Now, Git is usually used when writing software collaboratively, so while the above picture is all that you have to worry about, the real setting is more like this:&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /post/git-going-with-gitkraken/overview2_huc8ef78e1cac3bdcd4fd7c5ce51e22d60_35358_d91519c499ddd497f2e745872d24540b.png 400w,
               /post/git-going-with-gitkraken/overview2_huc8ef78e1cac3bdcd4fd7c5ce51e22d60_35358_b38b1f73815419bd936e5845416f87e4.png 760w,
               /post/git-going-with-gitkraken/overview2_huc8ef78e1cac3bdcd4fd7c5ce51e22d60_35358_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/post/git-going-with-gitkraken/overview2_huc8ef78e1cac3bdcd4fd7c5ce51e22d60_35358_d91519c499ddd497f2e745872d24540b.png&#34;
               width=&#34;760&#34;
               height=&#34;326&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;h2 id=&#34;hold-up-whats-git&#34;&gt;Hold Up, What&amp;rsquo;s Git?&lt;/h2&gt;
&lt;p&gt;Git is just a piece of software that&amp;rsquo;s openly available for anyone to use. (Aside: it&amp;rsquo;s not a company or something that&amp;rsquo;s sold commercially, though this is often confusing because of companies/services like GitHub and GitLab). The problem Git is trying to solve, informally, is to support many people editing the same set of files concurrently while causing as few conflicts and headaches as possible. You might recognize that Google Docs and Dropbox try to solve a similar problem, but with a different strategy that makes them poorly suited for software development. Imagine for a moment that you were trying to use Google Docs for writing real code. Say you&amp;rsquo;ve been up all night working on a cool new feature, tracking down all its subtle and frustrating bugs, and now you want to compile and test it one last time to make sure it&amp;rsquo;s all good to go.&lt;/p&gt;
&lt;p&gt;But right as you go to compile, your teammate gets in there and starts writing some other code, which naturally isn&amp;rsquo;t complete yet and doesn&amp;rsquo;t build! What do you do? Do you hit them up on Slack and ask them to stop coding while you test your feature? (If so, that essentially means only one person can be working at a time). Do you just keep trying to compile over and over until you get lucky and it builds? (If problems arise in testing, you won&amp;rsquo;t be sure if it&amp;rsquo;s your code that&amp;rsquo;s causing issues or someone else&amp;rsquo;s). This is nightmarish and no one does this. (I hope).&lt;/p&gt;
&lt;p&gt;Git is an example of &lt;em&gt;distributed version control software&lt;/em&gt;, a type of software meant to make these kinds of situations much easier to handle by giving each user more control over their own version of the files and when to incorporate the changes made by other people. (For the record, there are &lt;a href=&#34;https://en.wikipedia.org/wiki/List_of_version-control_software#Distributed_model&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;other choices&lt;/a&gt; for distributed version control, but Git is by far the most popular).&lt;/p&gt;
&lt;h2 id=&#34;tools-of-the-trade&#34;&gt;Tools of the Trade&lt;/h2&gt;
&lt;p&gt;In Git, the remote repository contains the current version of the shared code. Remote repositories can be set up on any server (or even your own workstation), but most people prefer to use a service like &lt;a href=&#34;https://github.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;GitHub&lt;/a&gt;, &lt;a href=&#34;https://bitbucket.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Bitbucket&lt;/a&gt;, or &lt;a href=&#34;https://about.gitlab.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;GitLab&lt;/a&gt; to host their projects for them, which makes life easier. Think of it like this: GitHub is to Git repositories as WordPress is to websites. You can certainly host your own website, but using a service like WordPress saves you the trouble of maintaining a web server yourself. Our team uses Bitbucket for our AmoebotSim project, so that&amp;rsquo;s what&amp;rsquo;ll be in the screenshots.&lt;/p&gt;
&lt;p&gt;An additional way to simplify using Git is to get a nice Git client like &lt;a href=&#34;https://www.gitkraken.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;GitKraken&lt;/a&gt; or &lt;a href=&#34;https://desktop.github.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;GitHub Desktop&lt;/a&gt; instead of interfacing with Git on the &lt;a href=&#34;https://blog.axosoft.com/gitkraken-vs-cli/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;command line&lt;/a&gt; (which many hardcore users will tell you is the only way to &lt;em&gt;really&lt;/em&gt; learn Git). Using the website analogy again, Git clients are to Git repositories like themes and rich-text editors are to websites. Could you put a stellar website together writing your own HTML, CSS, and JavaScript? Sure. Would you learn a lot more about how websites work doing it this way? Of course. But it takes a lot longer, and there&amp;rsquo;s much more room to make mistakes. In general, Git clients make understanding your repository a breeze with nice graphical representations and controls. I&amp;rsquo;ll be using GitKraken here, and I highly recommend you do too!&lt;/p&gt;
&lt;h2 id=&#34;cloning-a-repository&#34;&gt;Cloning a Repository&lt;/h2&gt;
&lt;p&gt;Getting a copy of a repository from a remote server onto your machine is called &lt;em&gt;cloning&lt;/em&gt; a repository.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /post/git-going-with-gitkraken/featured_hu8b2ce5082bc18ebcc1bb4ed8ae5cc997_25331_bfb4883daee032c89f9563c0b177930c.png 400w,
               /post/git-going-with-gitkraken/featured_hu8b2ce5082bc18ebcc1bb4ed8ae5cc997_25331_33cc21783cc1f53b5be6f9ba6ca975f9.png 760w,
               /post/git-going-with-gitkraken/featured_hu8b2ce5082bc18ebcc1bb4ed8ae5cc997_25331_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/post/git-going-with-gitkraken/featured_hu8b2ce5082bc18ebcc1bb4ed8ae5cc997_25331_bfb4883daee032c89f9563c0b177930c.png&#34;
               width=&#34;760&#34;
               height=&#34;386&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;Cloning makes a copy of the remote repository to your local repository. This not only includes the most recent version of the files but also the entire version history (list of changes) for every file, who made those changes, when those changes were made, and all the different &lt;em&gt;branches&lt;/em&gt; of those files that your collaborators may be working on (we&amp;rsquo;ll come back to branching in a future post). The clone operation also puts the most recent version of the files in your working directory, where you can open them up in your file system and start making changes.&lt;/p&gt;
&lt;p&gt;This is pretty easy to do with GitKraken:&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34;
           src=&#34;https://mhmmoshtaghi.github.io/post/git-going-with-gitkraken/cloneurl.gif&#34;
           loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;And it&amp;rsquo;s even easier if you&amp;rsquo;ve already signed into your hosting platform (e.g., Bitbucket) in GitKraken:&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34;
           src=&#34;https://mhmmoshtaghi.github.io/post/git-going-with-gitkraken/clonebitbucket.gif&#34;
           loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;h2 id=&#34;making-and-submitting-changes&#34;&gt;Making and Submitting Changes&lt;/h2&gt;
&lt;p&gt;Now that the code is in my working directory, I can make my edits. From Git&amp;rsquo;s perspective, changes can either be &lt;em&gt;tracked&lt;/em&gt;, meaning Git knows about them, or &lt;em&gt;untracked&lt;/em&gt;, meaning the changes are in new files that haven&amp;rsquo;t been added to Git yet. Either way, I can add all the changes I&amp;rsquo;ve made to Git&amp;rsquo;s &lt;em&gt;staging area&lt;/em&gt; in a process called &lt;em&gt;staging&lt;/em&gt;:&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /post/git-going-with-gitkraken/overview4_hu256a8b59baa77d267bac69972f20125b_45816_d55a385144b2101df929760642d8b972.png 400w,
               /post/git-going-with-gitkraken/overview4_hu256a8b59baa77d267bac69972f20125b_45816_7a15de763dbe4ef89f778f803435d287.png 760w,
               /post/git-going-with-gitkraken/overview4_hu256a8b59baa77d267bac69972f20125b_45816_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/post/git-going-with-gitkraken/overview4_hu256a8b59baa77d267bac69972f20125b_45816_d55a385144b2101df929760642d8b972.png&#34;
               width=&#34;760&#34;
               height=&#34;389&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;To illustrate this, I&amp;rsquo;ll be adding license and copyright information to AmoebotSim (a &lt;a href=&#34;https://choosealicense.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;very important&lt;/a&gt; part of going open source). I&amp;rsquo;ll be making these edits in three parts: (1) adding a LICENSE file, (2) adding a copyright notice to our main.cpp file, and (3) adding an abbreviated copyright notice to the other source files. Adding the LICENSE file will initially be an untracked change (it&amp;rsquo;s a new file), while the other changes that edit existing files will be tracked.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34;
           src=&#34;https://mhmmoshtaghi.github.io/post/git-going-with-gitkraken/editstage.gif&#34;
           loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;Now that the changes are staged, we can &lt;em&gt;commit&lt;/em&gt; them to our local repository. A commit is essentially a batch of changes with a description known as a &lt;em&gt;commit message&lt;/em&gt;. In general, a commit message should clearly and concisely describe the changes its commit contains (see &lt;a href=&#34;https://chris.beams.io/posts/git-commit/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;this post&lt;/a&gt; for best practices). Once that message is done, we can commit, adding our changes to the version history.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /post/git-going-with-gitkraken/overview5_huf9ac3978c316dd0c10eb7a03f5514ebe_45225_32366a24bf4432ea41a9e035508d6acc.png 400w,
               /post/git-going-with-gitkraken/overview5_huf9ac3978c316dd0c10eb7a03f5514ebe_45225_6b5c7ea27f3cac04681e14f518c79a73.png 760w,
               /post/git-going-with-gitkraken/overview5_huf9ac3978c316dd0c10eb7a03f5514ebe_45225_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/post/git-going-with-gitkraken/overview5_huf9ac3978c316dd0c10eb7a03f5514ebe_45225_32366a24bf4432ea41a9e035508d6acc.png&#34;
               width=&#34;760&#34;
               height=&#34;386&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;This is, per usual, easy to do and visualize in GitKraken:&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34;
           src=&#34;https://mhmmoshtaghi.github.io/post/git-going-with-gitkraken/commit.gif&#34;
           loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;But committing only puts our changes in the local repository (shown by the little computer icon in GitKraken), not the remote repository where everyone else can see them (shown by the profile picture of the repository owner). Updating the remote repository with new commits from our local repository is called &lt;em&gt;pushing&lt;/em&gt;.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /post/git-going-with-gitkraken/overview6_hu3a415b6ddcf0e96dab0cfcc3331ab0d8_45316_b901406f732b82d5e85c7cf0f75a9324.png 400w,
               /post/git-going-with-gitkraken/overview6_hu3a415b6ddcf0e96dab0cfcc3331ab0d8_45316_798e0c2aae30b63f381e0ecfb14ff091.png 760w,
               /post/git-going-with-gitkraken/overview6_hu3a415b6ddcf0e96dab0cfcc3331ab0d8_45316_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/post/git-going-with-gitkraken/overview6_hu3a415b6ddcf0e96dab0cfcc3331ab0d8_45316_b901406f732b82d5e85c7cf0f75a9324.png&#34;
               width=&#34;760&#34;
               height=&#34;387&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34;
           src=&#34;https://mhmmoshtaghi.github.io/post/git-going-with-gitkraken/push.gif&#34;
           loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;Once commits have been pushed, they&amp;rsquo;re out there for other repository members to see and use. Be sure that your code builds and is bug-free before you commit and push; otherwise, you&amp;rsquo;ll break everyone else&amp;rsquo;s builds and get a lot of angry messages asking you to fix your issues quickly! (There are ways to mitigate these kinds of problems, like branch/fork-based workflows with approval processes, but I&amp;rsquo;m saving those more advanced topics for a future post).&lt;/p&gt;
&lt;h2 id=&#34;getting-other-peoples-changes&#34;&gt;Getting Other People&amp;rsquo;s Changes&lt;/h2&gt;
&lt;p&gt;Say that you were offline for a couple hours (or days…) and are just returning to your project. Your teammates may have committed and pushed code while you were away, and you want to get all their changes. Git gives you two ways to do this: &lt;em&gt;fetch&lt;/em&gt; and &lt;em&gt;pull&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Fetching retrieves all the new updates (commits, files, etc.) from the remote repository and copies them to your local repository. These new updates exist separately from the rest of your work, allowing you to look into them independently from any changes you&amp;rsquo;ve made locally. If you want your team&amp;rsquo;s updates to be integrated with your local changes, you&amp;rsquo;ll need to &lt;em&gt;merge&lt;/em&gt; them in.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /post/git-going-with-gitkraken/overview7_huac5dddf64e5f42c1357b0a6fce4de759_25204_e9c0671a88849a00d6207fcf96c624ee.png 400w,
               /post/git-going-with-gitkraken/overview7_huac5dddf64e5f42c1357b0a6fce4de759_25204_4e9a143f269b6651d98aab62d3085948.png 760w,
               /post/git-going-with-gitkraken/overview7_huac5dddf64e5f42c1357b0a6fce4de759_25204_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/post/git-going-with-gitkraken/overview7_huac5dddf64e5f42c1357b0a6fce4de759_25204_e9c0671a88849a00d6207fcf96c624ee.png&#34;
               width=&#34;760&#34;
               height=&#34;386&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;This can potentially cause &lt;em&gt;merge conflicts&lt;/em&gt; if both you and your teammates&#39; commits changed the same lines of code. (Although, to be honest, Git can get confused and think all kinds of things are &amp;ldquo;conflicts&amp;rdquo; even when they&amp;rsquo;re not, so watch out for that). Thankfully, GitKraken has a slick tool for helping you fix your merge conflicts (this was, by far, the #1 reason our team recently switched to GitKraken from Sourcetree):&lt;/p&gt;

&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
  &lt;iframe src=&#34;https://www.youtube.com/embed/R1iWJNyRpQE&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; allowfullscreen title=&#34;YouTube Video&#34;&gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;br/&gt;
&lt;p&gt;Pulling simply combines fetching and merging into one step. It retrieves all the new updates from the remote repository and automatically tries to merge them into your local repository, possibly triggering merge conflicts for you to resolve along the way.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /post/git-going-with-gitkraken/overview8_hubd69aaa45d75cd156217dc1d4527d004_25115_e017a8286fecac1023bf59a73998c9af.png 400w,
               /post/git-going-with-gitkraken/overview8_hubd69aaa45d75cd156217dc1d4527d004_25115_81a9a5c9f5696502450ba90476d9783c.png 760w,
               /post/git-going-with-gitkraken/overview8_hubd69aaa45d75cd156217dc1d4527d004_25115_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/post/git-going-with-gitkraken/overview8_hubd69aaa45d75cd156217dc1d4527d004_25115_e017a8286fecac1023bf59a73998c9af.png&#34;
               width=&#34;760&#34;
               height=&#34;387&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;In GitKraken, both fetching and pulling can be performed using the top toolbar. The following example shows a pull, though you can see for a brief moment how it first fetches the new commit before merging it in.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34;
           src=&#34;https://mhmmoshtaghi.github.io/post/git-going-with-gitkraken/pull.gif&#34;
           loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;h2 id=&#34;git-out-there&#34;&gt;Git Out There&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve covered the rudimentary operations of Git and how to do them in GitKraken, but there&amp;rsquo;s much more to learn! In a future post I hope to cover branch/fork-based workflows, pull requests, and rebasing, all of which can play a role in using Git for larger projects.&lt;/p&gt;
&lt;p&gt;As always, I welcome your feedback and questions. Happy coding!&lt;/p&gt;
</description>
    </item>

    <item>
      <title>Computing by Programmable Particles</title>
      <link>https://mhmmoshtaghi.github.io/publication/daymude2019-computingparticles/</link>
      <pubDate>Sun, 13 Jan 2019 00:00:00 +0000</pubDate>
      <guid>https://mhmmoshtaghi.github.io/publication/daymude2019-computingparticles/</guid>
      <description></description>
    </item>

    <item>
      <title>The Phantom Tollbooth</title>
      <link>https://mhmmoshtaghi.github.io/review/book-the-phantom-tollbooth/</link>
      <pubDate>Fri, 04 Jan 2019 12:00:00 -0700</pubDate>
      <guid>https://mhmmoshtaghi.github.io/review/book-the-phantom-tollbooth/</guid>
      <description>&lt;p&gt;&lt;em&gt;The Phantom Tollbooth&lt;/em&gt; is a fable in every chapter, clever wit in every paragraph, and careful thought in every sentence. It is both a treatise on critical thinking and a tender story of a young boy&amp;rsquo;s adventure. It is just as much an epic struggle between Wisdom and Ignorance as it is a playful comedy where the first character to cry is a watchdog named Tock lamenting the fact that he goes &lt;em&gt;ticktickticktick&lt;/em&gt; while his brother Tick goes &lt;em&gt;tocktocktocktock&lt;/em&gt;. Perhaps most importantly, its excellence is a testament to the fruits of curious wonder and deep wisdom, two values that its fantastical characters try very hard to get Milo — the protagonist — to pursue.&lt;/p&gt;
&lt;p&gt;Every word is an absolute joy to read. Norton Juster achieves the kind of simplicity that comes at the cost of both knowing what exactly one wants to write and cutting away all superfluous material that does not achieve that goal. The entire novel is written in everyday prose fitting for a bedtime story, and yet contains layers of subtlety that should give the reading adult pause. Juster masterfully mixes serious lessons (that must not be obvious even to many adults, seeing how our world is) with hysterical moments of relief, all in a stream of whimsical adventure. Take, for example, the following scene:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Except for these, and the big brass cannon being pulled along behind, they all looked very much like the residents of any other small valley to which you&amp;rsquo;ve never been.&lt;/p&gt;
&lt;p&gt;— &lt;em&gt;The Phantom Tollbooth&lt;/em&gt;, page 146.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Paradox, absurdity, and humor, all wrapped into such a simple little description. Or take, for example, an unabashed jab Juster takes at the Humbug:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;After demonstrating that there was nothing up his sleeves, in his hat, or behind his back, [the Mathemagician] wrote quickly:&lt;/p&gt;
&lt;p&gt;4 + 9 – 2 x 16 + 1 ÷ 3 x 6 – 67 + 8 x 2 – 3 + 26 – 1 ÷ 34 + 3 ÷ 7 + 2 – 5 =&lt;/p&gt;
&lt;p&gt;Then he looked up expectantly.
“Seventeen!” The Humbug shouted, who always managed to be the first with the wrong answer.&lt;/p&gt;
&lt;p&gt;— &lt;em&gt;The Phantom Tollbooth&lt;/em&gt;, page 188.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The pages of this book are riddled with such perfect moments as these.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m sure that many compelling essays have been (or could be) written on the many social tendencies &lt;em&gt;The Phantom Tollbooth&lt;/em&gt; chases after with the sharpest wit — getting lost in trivial tasks, becoming an arrogant and condescending specialist, or being too afraid to have your own thoughts, for example — but it suffices to say that &lt;em&gt;The Phantom Tollbooth&lt;/em&gt; gives a looking glass into how our own world has banished its Rhyme and Reason. It is relevant even today, nearly 60 years after its original publication. But unlike the dystopias of its time, &lt;em&gt;The Phantom Tollbooth&lt;/em&gt; is permeated with hope. And with what better weapon can one burn back the darkness?&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“And remember also,” added the Princess of Sweet Rhyme, “that many places you would like to see are just off the map and many things you want to know are just out of sight or a little beyond your reach. But someday you&amp;rsquo;ll reach them all, for what you learn today, for no reason at all, will help you discover all the wonderful secrets of tomorrow.”&lt;/p&gt;
&lt;p&gt;— &lt;em&gt;The Phantom Tollbooth&lt;/em&gt;, page 234.&lt;/p&gt;
&lt;/blockquote&gt;
</description>
    </item>

    <item>
      <title>MARVEL Strike Force</title>
      <link>https://mhmmoshtaghi.github.io/review/videogame-marvel-strike-force/</link>
      <pubDate>Wed, 02 Jan 2019 12:00:00 -0700</pubDate>
      <guid>https://mhmmoshtaghi.github.io/review/videogame-marvel-strike-force/</guid>
      <description>&lt;p&gt;After reading a particularly deep and persuasive Game Informer &lt;a href=&#34;https://www.gameinformer.com/opinion/2018/06/08/opinion-marvel-strike-force-is-one-of-the-most-addictive-games-ive-played-all&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;opinion piece&lt;/a&gt;, I decided to download &lt;em&gt;MARVEL Strike Force&lt;/em&gt; as a way to take occasional breaks from the stress of planning our wedding. In a polished experience centering on collecting and upgrading MARVEL characters, I soon found myself assembling five-character teams of heroes, villains, and minions whose compositions rivalled even the wildest Cinematic Universe crossovers to date. My early game mashup team of Spiderman, Elektra, Crossbones, Luke Cage, and an unnamed S.H.E.I.L.D. Medic was soon taking on the likes of Ultron, Hydra, and other players&#39; amalgamations in an effort to — as always — save the world.&lt;/p&gt;
&lt;p&gt;The campaign offers a barebones and comic-book-absurd explanation of what&amp;rsquo;s going on: a new villain named Ultimus (who was invented for this game) has a Conversion Device that he uses to corrupt heroes and villains alike to join his cause. Ultimus conveniently also has the ability to open interdimensional portals, so he makes a habit of converting whole armies of Avengers, Guardians, Hydra, Kree, etc. in his ongoing conquest of the multiverse. Naturally, our dimension — and specifically, our Earth — contains Nexus portals that guard the way to all other dimensions, so Ultimus sees our dimension as his prize. Conveniently, our dimension&amp;rsquo;s Nick Fury secretly started a S.H.E.I.L.D. division called S.T.R.I.K.E. to monitor and defend against inter-dimensional threats, hence the whole &amp;ldquo;Strike Force&amp;rdquo; thing. So, in a classic &amp;ldquo;the enemy of my enemy is my friend&amp;rdquo; narrative, our dimension&amp;rsquo;s heroes and villains team up under the Strike Commander (that&amp;rsquo;s you) to fight Ultimus and — cue the heroic fanfare — save the multiverse!&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-marvel-strike-force/roster_hu883ecfa106ac3c6ecf4aebdf3eaac0ea_2231390_184149cbe4d2206e2d5e8f750d151ae2.png 400w,
               /review/videogame-marvel-strike-force/roster_hu883ecfa106ac3c6ecf4aebdf3eaac0ea_2231390_5bcd6d1de7c34418dd633a0139273390.png 760w,
               /review/videogame-marvel-strike-force/roster_hu883ecfa106ac3c6ecf4aebdf3eaac0ea_2231390_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-marvel-strike-force/roster_hu883ecfa106ac3c6ecf4aebdf3eaac0ea_2231390_184149cbe4d2206e2d5e8f750d151ae2.png&#34;
               width=&#34;760&#34;
               height=&#34;428&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;I&amp;rsquo;m just going to get this out of the way now: &lt;em&gt;MARVEL Strike Force&lt;/em&gt;&amp;rsquo;s main story (and many side- and event-stories) are terrible. The writers can&amp;rsquo;t seem to decide if they&amp;rsquo;re self-aware of how silly the whole setup is or if they take it very seriously, which leads to almost all the characters delivering similar, melodramatic lines. Even characters who were created to leverage our cracking suspension of disbelief (like Deadpool and Star Lord) fall flat. That being said, &lt;em&gt;MARVEL Strike Force&lt;/em&gt; is primarily made up of its many well-executed variations of the same core, turn-based strategy gameplay, and the forgettable story is really just there to tie everything together.&lt;/p&gt;
&lt;p&gt;With that negative aside, let&amp;rsquo;s talk about a bunch of things &lt;em&gt;MARVEL Strike Force&lt;/em&gt; does really well. First, as hinted at before, it has a lot of different game modes. And somehow, almost all of them feel enjoyable and distinct despite not being terribly different from one another. For example, the Campaign mode tasks the player with using different subsets of characters (only heroes, only villains, only characters from space, etc.) to play though a sequence of levels. In the Arena, players fight for better ladder rank by pitting their best five-character team against those of higher-ranked players. In Blitz, players use their entire collection of characters to win as many battles as they can in the period of a couple days. In Raids, players work with their alliance to collectively complete a map of difficult battles.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-marvel-strike-force/shards_hu092108550f5d4d605ea6f1ce419717b4_2205241_3122f688e98b7bdaac08dfab20345803.png 400w,
               /review/videogame-marvel-strike-force/shards_hu092108550f5d4d605ea6f1ce419717b4_2205241_ea7cc3a338ba65c02115c9a80e80a21b.png 760w,
               /review/videogame-marvel-strike-force/shards_hu092108550f5d4d605ea6f1ce419717b4_2205241_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-marvel-strike-force/shards_hu092108550f5d4d605ea6f1ce419717b4_2205241_3122f688e98b7bdaac08dfab20345803.png&#34;
               width=&#34;760&#34;
               height=&#34;428&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;You might be thinking &amp;ldquo;Okay, we get it, every mode is basically a different framework for battles. Doesn&amp;rsquo;t that get old? Why play all the different modes?&amp;rdquo; The best answer I can give is that &lt;em&gt;MARVEL Strike Force&lt;/em&gt;&amp;rsquo;s many modes enable and encourage progression in a way that is exceptionally better than many of its free-to-play peers. In order to explain how it does this, we need to understand how characters are upgraded. First, a character has to be unlocked by collecting some number of that character&amp;rsquo;s &amp;ldquo;shards.&amp;rdquo; Some shards can be obtained through completing/replaying Campaign levels, while others come as rewards from orb drops (&lt;em&gt;MARVEL Strike Force&lt;/em&gt;&amp;rsquo;s equivalent of a loot box). Once a character&amp;rsquo;s been unlocked, they can be upgraded in five ways:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Stars: Gaining additional shards periodically increases a character&amp;rsquo;s star level (up to star level 7), which increases the character&amp;rsquo;s power.&lt;/li&gt;
&lt;li&gt;Red Stars: Random drops that dramatically increase character power (and the one and only pay-to-win feature of this game).&lt;/li&gt;
&lt;li&gt;Level: Players can spend gold and &amp;ldquo;training modules&amp;rdquo; to increase the character&amp;rsquo;s level, which maxes out at the player&amp;rsquo;s level (which is increased by gaining XP).&lt;/li&gt;
&lt;li&gt;Abilities: Each character has up to three active abilities and one passive to use in battles, and each ability can be upgraded using &amp;ldquo;ability materials&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;Gear: A character&amp;rsquo;s stats (health, damage, armor, etc.) can be increased by upgrading their gear, which can be obtained from Campaign levels.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This may all feel overly complicated, but the reality is that these convoluted systems encourage players to engage in everything the game has to offer, all while rewarding that engagement with tangible and meaningful upgrades to their characters. Being a free-to-play game, this approach helps players remain relatively competitive without having to empty their wallets. (There&amp;rsquo;s one necessary caveat to this point: for those who do want to shell out some cash, the in-app purchases in &lt;em&gt;MARVEL Strike Force&lt;/em&gt; are &lt;a href=&#34;https://www.polygon.com/2018/8/24/17776974/marvel-strike-force-microtransactions&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;stupidly expensive&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;The second free-to-play sin that &lt;em&gt;MARVEL Strike Force&lt;/em&gt; neatly avoids is unnecessary grinding (especially for free players to progress). Instead of making you play Campaign level over and over again, for example, beating a level without any of your characters dying unlocks an &amp;ldquo;auto-win&amp;rdquo; of that level, where you can simply spend Campaign energy and immediately get the rewards (shards, gold, gear, etc.). With a tap of a button, I can auto-win a level ten times, a task that would usually take at least 10 minutes. Other small details like this one really add up in a way that makes me feel good about playing (instead of worrying that I&amp;rsquo;m falling prey to time-sucking strategies the developer may be employing).&lt;/p&gt;
&lt;p&gt;The meta-game has pretty severe balance issues (at the time of writing, Defenders and S.H.E.I.L.D. teams have been essentially unbeatable at the highest levels of competition for months) and the main UI is unnecessarily cumbersome, but if you&amp;rsquo;re looking to play with a wide cut of MARVEL&amp;rsquo;s roster for free in a pretty friendly community, I&amp;rsquo;d be hard pressed to find a better recommendation than &lt;em&gt;MARVEL Strike Force&lt;/em&gt;.&lt;/p&gt;
&lt;h2 id=&#34;notes&#34;&gt;Notes&lt;/h2&gt;
&lt;p&gt;As of writing this review, I&amp;rsquo;ve been playing &lt;em&gt;MARVEL Strike Force&lt;/em&gt; for 6.5 months, have been in two alliances (other than the default one), have reached the maximum level (70), and am easily completing Ultimus V raids. I have not completed any of The Dark Dimension. Alliance War was added after this was written.&lt;/p&gt;
&lt;h2 id=&#34;bugs&#34;&gt;Bugs&lt;/h2&gt;
&lt;p&gt;Occasionally, after certain updates, battles can hang indefinitely, where either the AI never takes their turn or the player is never presented with their actions. This is usually fixable by force-quitting the game and restarting.&lt;/p&gt;
</description>
    </item>

    <item>
      <title>Sing, Unburied, Sing</title>
      <link>https://mhmmoshtaghi.github.io/review/book-sing-unburied-sing/</link>
      <pubDate>Thu, 27 Dec 2018 12:00:00 -0700</pubDate>
      <guid>https://mhmmoshtaghi.github.io/review/book-sing-unburied-sing/</guid>
      <description>&lt;p&gt;&lt;em&gt;Sing, Unburied, Sing&lt;/em&gt; is a work of lyrical beauty on a backdrop of persistent ugliness and cruelty, a masterpiece in storytelling set in a world of narratives forgotten or ignored, a page-turning delight built atop a visceral and aching pain. In &lt;em&gt;Sing, Unburied, Sing&lt;/em&gt;, Ward gifts us with the story of a 13 year-old named Joseph whose White father Michael is in Mississippi&amp;rsquo;s maximum security prison and whose Black mother Leonie is gone and high more than she isn&amp;rsquo;t. Joseph lives with his Black grandparents — two hardened but caring strongholds of wisdom and love, both carrying a lifetime of sorrow but only one carrying cancer — and his 3 year-old sister Kayla, who seemingly adores her big brother more than anything or anyone else in the world. A kind of mystic spiritualism hangs over Ward&amp;rsquo;s world and characters, so when a sudden road trip drags Leonie, Joseph, and Kayla from their coastal home deep into the heart of Mississippi, the present and all its struggles never seem far from the brutal past that created them.&lt;/p&gt;
&lt;p&gt;The rural South is not a kind place in &lt;em&gt;Sing, Unburied, Sing&lt;/em&gt;, and the descriptions of its natural beauty are too often marred by the countless Black men and women whose lives ended violently on its soil. As a reader, you experience this world primarily though the eyes of Joseph, who knows the hardship of his own life but has not entirely lost his innocence or, as is the case for his grandfather Pop, had it taken away from him. Ward expertly weaves rich family history and flashbacks into the present narrative so that it seems multiple stories are always unfolding together, heightening our ability to see the connections between them. These exact sort of connections are pregnant with one of &lt;em&gt;Sing, Unburied, Sing&lt;/em&gt;&amp;rsquo;s primary themes: that we cannot separate the modern South and its deep, infected scars from the history that shows us how those wounds were inflicted, and that this history has roots not in big movements and national news, but in every sullen lynching tree and unjust court ruling.&lt;/p&gt;
&lt;p&gt;Take, for example, the following passage that showcases Ward&amp;rsquo;s ability to tie a conversation about the past together with the current feelings of the narrator, who has just had his first encounter with police brutality (feel free to skip this if you wish to avoid even minor spoilers).&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;My name?&amp;rdquo; he says.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Richie&lt;/em&gt;, I mouth.&lt;/p&gt;
&lt;p&gt;He looks like he wants to smile but doesn&amp;rsquo;t.&lt;/p&gt;
&lt;p&gt;&amp;ldquo;He told you about me?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;I nod.&lt;/p&gt;
&lt;p&gt;&amp;ldquo;He tell you how he knew me? That we were in Parchman together?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;I huff and nod again.&lt;/p&gt;
&lt;p&gt;&amp;ldquo;They don&amp;rsquo;t send them there as young as you no more.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;My wrists won&amp;rsquo;t stop hurting.&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Sometimes I think it done changed. And then I sleep and wake up, and it ain&amp;rsquo;t changed none.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s like the cuffs cut all the way down to the bone.&lt;/p&gt;
&lt;p&gt;&amp;ldquo;It&amp;rsquo;s like a snake that sheds its skin. The outside look different when the scales change, but the inside always look the same.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Like my marrow could carry a bruise.&lt;/p&gt;
&lt;p&gt;[&amp;hellip;] I have to look away from the wrong of the boy folded onto the floor of the car, so I stare out the window at the tall trees flashing past and think about the gun. Even though it reminded me of so much cold, I think it would have been hot to touch. So hot it would have burned my fingerprints off.&lt;/p&gt;
&lt;p&gt;— &lt;em&gt;Sing, Unburied, Sing&lt;/em&gt;, pages 171–172.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Enough cannot be said about Ward&amp;rsquo;s ability to craft prose that reads like grand poetry and easy conversation all at once. Her descriptions are delightful and vivid: every texture is tangible, every climate palpable, every smell immediately recognizable. Only when it comes to the occasional cultural subtlety or clever trick does Ward seem to slow down, as if to gently stoop to our understanding and check that we&amp;rsquo;re keeping up. Take, for example, this gem (no spoilers, so read freely):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;There are people: tiny and distinct. They fly and walk and float and run. They are alone. They are together. They wander the summits. They swim in the rivers and sea. They walk hand in hand in the parks, in the squares, disappear into the buildings. They are never silent. Ever present is their singing: they don&amp;rsquo;t move their mouths and yet it comes from them. Crooning in the yellow light. It comes from the black earth and the trees and the ever-lit sky. It comes from the water. It is the most beautiful song I have ever heard, but I can&amp;rsquo;t understand a word.&lt;/p&gt;
&lt;p&gt;I am gasping when the vision passes. The dark underbelly [&amp;hellip;] looms before me: creaking then silent. I look to my right and see a flash of the water, the rivers, the wilderness, the cities, the people. Then darkness. I look to my left and see that world again, and then it is gone. I claw at the air, but my hands strike nothing; they rend no doorways to that golden isle.&lt;/p&gt;
&lt;p&gt;Absence. Isolation. I keen.&lt;/p&gt;
&lt;p&gt;— &lt;em&gt;Sing, Unburied, Sing&lt;/em&gt;, page 241.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The questions that this novel leaves about what hope and healing look like in the rural South are pertinent ones, and their delivery is somehow both searing and soothing, holding our feet to the fire while knowing it is what we need most. I am very thankful to have read my first Ward novel, and hope to have caught my breath by the time she releases another.&lt;/p&gt;
</description>
    </item>

    <item>
      <title>Oh, the Places You&#39;ll Go</title>
      <link>https://mhmmoshtaghi.github.io/post/oh-the-places-youll-go/</link>
      <pubDate>Fri, 21 Dec 2018 12:15:00 -0700</pubDate>
      <guid>https://mhmmoshtaghi.github.io/post/oh-the-places-youll-go/</guid>
      <description>&lt;p&gt;As a PhD student, I get to travel quite a bit. In just the last two years, I&amp;rsquo;ve been to Atlanta (a few times, once as a visiting researcher to GaTech for 3 months), Austin, Vienna, Dagstuhl, and — most recently — Tokyo. I get to meet interesting researchers on every trip, whether it be during a conference coffee break (where &amp;ldquo;meeting&amp;rdquo; people occasionally feels like getting interrogated about research) or by running into each other while meandering through a &lt;a href=&#34;https://www.japan-guide.com/e/e3034_001.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;national park&lt;/a&gt;.&lt;/p&gt;

&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
  &lt;iframe src=&#34;https://www.youtube.com/embed/vyza5tbx-qc&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; allowfullscreen title=&#34;YouTube Video&#34;&gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;br/&gt;
&lt;p&gt;These trips are largely work. I listen to talks on the latest research and imagine ways to connect them to my own. I introduce myself to more senior researchers (usually hesitantly) in the hopes that they&amp;rsquo;ll remember who I am once they&amp;rsquo;re through answering my questions. I stay up way too late the night before my talk polishing my slides to (what I hope is) perfection. I scribble all over whiteboards, drawing (mostly) intelligible pictures when working out new ideas with collaborators.&lt;/p&gt;
&lt;div class=&#34;alert alert-note&#34;&gt;
  &lt;div&gt;
    Need to update &amp;ldquo;slides&amp;rdquo; with a link to the talk I gave at WSSR.
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;But then there&amp;rsquo;s the beauty of getting to go to new places &lt;em&gt;because I have to&lt;/em&gt;. As an introvert and someone who&amp;rsquo;s pretty happy being in one place, travel is definitely not an itch I need to scratch (to me, &amp;ldquo;wanderlust&amp;rdquo; often feels like a made up word fellow Millennials use to describe the need for jealousy-inducing Instagram content). But my PhD has helped me learn that there&amp;rsquo;s a lot out there to see and understand, and somehow the difference and uncertainty and novelty of it all makes me feel hope.&lt;/p&gt;
&lt;p&gt;So, until we meet again, Tokyo.&lt;/p&gt;
</description>
    </item>

    <item>
      <title>Self-Organizing Particle Systems: an Algorithmic Approach to Programmable Matter</title>
      <link>https://mhmmoshtaghi.github.io/event/2018wssr-sops/</link>
      <pubDate>Sun, 04 Nov 2018 16:00:00 +0900</pubDate>
      <guid>https://mhmmoshtaghi.github.io/event/2018wssr-sops/</guid>
      <description></description>
    </item>

    <item>
      <title>Splashy Dots</title>
      <link>https://mhmmoshtaghi.github.io/review/videogame-splashy-dots/</link>
      <pubDate>Fri, 02 Nov 2018 12:00:00 -0700</pubDate>
      <guid>https://mhmmoshtaghi.github.io/review/videogame-splashy-dots/</guid>
      <description>&lt;p&gt;Creating an iOS puzzle game with minimalist design and the latest iOS features (3D Touch, Haptic, etc.) seems to be the surefire strategy for getting featured by Apple in the App Store in the late 2010s. But despite attaining that all-important medal of honor, &lt;em&gt;Splashy Dots&lt;/em&gt; serves, at best, a bland and lightly logical time-waster.&lt;/p&gt;
&lt;p&gt;At its core, &lt;em&gt;Splashy Dots&lt;/em&gt; is about connecting dots on a grid, starting and ending at specified locations without being allowed to backtrack. Its aesthetic is vaguely reminiscent of an art gallery, and connecting the colored dots is something like &amp;ldquo;paint through all the colors without lifting your paintbrush&amp;rdquo;. Except the colors don&amp;rsquo;t matter, and the &amp;ldquo;paintings&amp;rdquo; that comprise the levels never end up looking like anything nice (unless you really like abstract art, in which case, knock yourself out).&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-splashy-dots/featured_huf8ddd504f1fd6f9554863764a44c44c0_729320_51a918d4b8d05fd829e6f4c2869b1e2f.png 400w,
               /review/videogame-splashy-dots/featured_huf8ddd504f1fd6f9554863764a44c44c0_729320_896a885e1153a979107e02d6ccf843b6.png 760w,
               /review/videogame-splashy-dots/featured_huf8ddd504f1fd6f9554863764a44c44c0_729320_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-splashy-dots/featured_huf8ddd504f1fd6f9554863764a44c44c0_729320_51a918d4b8d05fd829e6f4c2869b1e2f.png&#34;
               width=&#34;530&#34;
               height=&#34;760&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;It&amp;rsquo;s difficult not to compare &lt;em&gt;Splashy Dots&lt;/em&gt; to other casual puzzle games that are unequivocally richer experiences. Take &lt;em&gt;Dots&lt;/em&gt; and its excellent sequel &lt;em&gt;Two Dots&lt;/em&gt;, for example. &lt;em&gt;Splashy Dots&lt;/em&gt; seems to be a carbon copy when it comes to the &lt;em&gt;Dots&lt;/em&gt; games&#39; minimalist designs, but replaces the innovative and progressively more difficult gameplay with an inane, repetitive experience. Or, if we want to focus more on the &amp;ldquo;art&amp;rdquo; aspect, consider any Picross game. Despite being quite repetitive, Picross stays engaging by promising the player that all the numbers and squares will eventually depict something. It&amp;rsquo;s a promise that the experience will be rewarding, even if that reward is just a pixelated happy face. &lt;em&gt;Splashy Dots&lt;/em&gt;, in turn, offers every combination of colored lines imaginable. And something about discovering hundreds of crappy paintings just isn&amp;rsquo;t a formula that keeps me coming back for more.&lt;/p&gt;
</description>
    </item>

    <item>
      <title>Undertale</title>
      <link>https://mhmmoshtaghi.github.io/review/videogame-undertale/</link>
      <pubDate>Tue, 23 Oct 2018 12:00:00 -0700</pubDate>
      <guid>https://mhmmoshtaghi.github.io/review/videogame-undertale/</guid>
      <description>&lt;p&gt;Every review for Toby Fox&amp;rsquo;s &lt;em&gt;Undertale&lt;/em&gt; seems to somehow impart a deep seeded conviction that this truly is one of the most emotional, clever, unexpected games of all time. That conviction is so powerful that by the time I metaphorically pulled this title off the shelf and gave it a good dusting (months after I got it as a much wanted gift), the idea that I was going to be blown away by this little indie game was all but a concrete expectation. That hope only grew when, after falling in love with &amp;ldquo;His Theme&amp;rdquo; when it was used as a backing track behind some &lt;em&gt;Overwatch&lt;/em&gt; &lt;a href=&#34;https://www.youtube.com/watch?v=NjgokkTtniY&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;voice lines&lt;/a&gt;, I found &lt;em&gt;Undertale&lt;/em&gt;&amp;rsquo;s soundtrack to be incredible in its own right.&lt;/p&gt;
&lt;p&gt;Perhaps by osmosis, I had come to respect the vague, sacred secrecy the community held around the game&amp;rsquo;s details. But it wasn&amp;rsquo;t until I fired it up for the first time that I realized I&amp;rsquo;d never even seen a screenshot of &lt;em&gt;Undertale&lt;/em&gt; before, and it was honestly a jarring experience. Playing on my 3000x2000 Surface Book display, &lt;em&gt;Undertale&lt;/em&gt; loaded as a little box of pixel graphics that only occupied a ninth of my screen, and it took me a solid amount of Googling to figure out if it even had a fullscreen mode (it does, press &lt;code&gt;F4&lt;/code&gt;). Once it was big enough to actually see, it was a whole other struggle to figure out how to control stuff, as &lt;em&gt;Undertale&lt;/em&gt; offers you no real tutorial whatsoever (arrow keys to walk, and &lt;code&gt;Z&lt;/code&gt;, &lt;code&gt;X&lt;/code&gt;, and &lt;code&gt;Ctrl&lt;/code&gt; for pretty much everything else). In fact, the initial feeling I had was one of deflation; this supposedly perfect game was actually a time machine back to the days of pixel art and text-based RPGs with a bad on-ramping experience.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-undertale/judgement_hu6a228774f549573fbecc8eaf41cdd971_135799_a8bf3ae1caf1acd05114557c3803998a.png 400w,
               /review/videogame-undertale/judgement_hu6a228774f549573fbecc8eaf41cdd971_135799_9860648261eeaae0d8c5cdd6d9ad53b4.png 760w,
               /review/videogame-undertale/judgement_hu6a228774f549573fbecc8eaf41cdd971_135799_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-undertale/judgement_hu6a228774f549573fbecc8eaf41cdd971_135799_a8bf3ae1caf1acd05114557c3803998a.png&#34;
               width=&#34;760&#34;
               height=&#34;428&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;And that brings us to the paradox of &lt;em&gt;Undertale&lt;/em&gt;: in order to give it all the praise it deserves, to show off all the things that make it both sharply witty and warmly endearing, and to convince a newcomer to push past the honestly confounding first 10 minutes of play, I&amp;rsquo;d have to spoil a little of the game. And that is something I should absolutely not do. Because realizing what &lt;em&gt;Undertale&lt;/em&gt; is, living out the experience of a truly beautiful game revealing itself to you in the subtlest of character dialogue, and feeling your assumptions about how it should be played slip away — all of this must be yours and only yours.&lt;/p&gt;
&lt;p&gt;So have a little hope, press on, and stay determined. You&amp;rsquo;ll be so happy you did.&lt;/p&gt;
</description>
    </item>

    <item>
      <title>A Stochastic Approach to Shortcut Bridging in Programmable Matter</title>
      <link>https://mhmmoshtaghi.github.io/publication/andresarroyo2018-bridging/</link>
      <pubDate>Fri, 28 Sep 2018 00:00:00 +0000</pubDate>
      <guid>https://mhmmoshtaghi.github.io/publication/andresarroyo2018-bridging/</guid>
      <description></description>
    </item>

    <item>
      <title>Phototactic Supersmarticles</title>
      <link>https://mhmmoshtaghi.github.io/publication/savoie2018-supersmarticles/</link>
      <pubDate>Tue, 25 Sep 2018 00:00:00 +0000</pubDate>
      <guid>https://mhmmoshtaghi.github.io/publication/savoie2018-supersmarticles/</guid>
      <description>&lt;h3 id=&#34;related-press&#34;&gt;Related Press&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.quantamagazine.org/smart-swarms-of-robots-seek-better-algorithms-20180214&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Smart Swarms Seek New Ways to Cooperate.&lt;/a&gt; Kevin Hartnett. &lt;em&gt;Quanta Magazine&lt;/em&gt;, February 2018. (Also featured in &lt;a href=&#34;https://technews.acm.org/archives.cfm?fo=2018-02-feb/feb-16-2018.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;em&gt;ACM TechNews&lt;/em&gt;&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>

    <item>
      <title>Brief Announcement: A Local Stochastic Algorithm for Separation in Heterogeneous Self-Organizing Particle Systems</title>
      <link>https://mhmmoshtaghi.github.io/publication/cannon2018-separationba/</link>
      <pubDate>Mon, 23 Jul 2018 00:00:00 +0000</pubDate>
      <guid>https://mhmmoshtaghi.github.io/publication/cannon2018-separationba/</guid>
      <description></description>
    </item>

    <item>
      <title>Isle of Dogs</title>
      <link>https://mhmmoshtaghi.github.io/review/movie-isle-of-dogs/</link>
      <pubDate>Sun, 17 Jun 2018 12:00:00 -0700</pubDate>
      <guid>https://mhmmoshtaghi.github.io/review/movie-isle-of-dogs/</guid>
      <description>&lt;p&gt;In &lt;em&gt;Isle of Dogs&lt;/em&gt;, Wes Anderson brings all the style, heart, and wit of &lt;em&gt;Fantastic Mr. Fox (2009)&lt;/em&gt; to a story of his own. This story is told by means of a prologue and four (very clearly labeled) acts following a young boy and a pack of dogs as they struggle against a geopolitical scheme to try and rid their home city of its canine friends.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Isle of Dogs&lt;/em&gt; plays with language extensively, and uses the quirks of its world to its advantage. Dog barks are &amp;ldquo;translated&amp;rdquo; into English for the viewer&amp;rsquo;s pleasure, while the humans speak their native tongue (Japanese, occasionally translated by a literal translator). There&amp;rsquo;s low-hanging fruit, like when the lead dog Chief (Bryan Cranston) tells another to pass on a message to a &amp;ldquo;bitch you&amp;rsquo;ll find there&amp;rdquo;, as well as light social commentary, like when Chief asks to see showdog Nutmeg&amp;rsquo;s (Scarlett Johansson) &amp;ldquo;tricks&amp;rdquo; but she refuses, or when Chief tries to reckon with his own nature and violent responses (&amp;ldquo;I bite, but I don&amp;rsquo;t know why.&amp;quot;).&lt;/p&gt;
&lt;p&gt;But as important as dog-to-dog and human-to-human dialogue is in furthering plot points and poking fun at the absurdity of the film, some of the most profound moments occur in the space between humans and their best friends, where actions and emotions establish connections where words cannot. In particular, watching the relationships between Atari (Koyu Rankin) and the main pack of dogs unfold is satisfying, endearing, and at times hilarious.&lt;/p&gt;
&lt;p&gt;The winsome, charming world of tactile materials in stop-motion style doesn&amp;rsquo;t bar the film from diving into more gruesome scenes, like killing live sea creatures to prepare sushi or performing a kidney surgery. It also gives a platform to build up caricatures of relevant issues, like political leaders ignoring scientific findings, youth protesting against the powers at be, and marginalized populations being abused and mistreated for the betterment of the majority. That being said, this is a Wes Anderson film, so it certainly comes complete with its &lt;a href=&#34;https://www.rollingstone.com/movies/movie-news/how-do-you-solve-a-problem-like-isle-of-dogs-204452/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;problematic blind spots&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This film was thoroughly enjoyable and another wonderful addition to the Anderson filmography. Smart, touching, beautiful, and odd, it seems to both exist in another world and yet feel deeply personal, a whimsical analogy to a human&amp;rsquo;s relationship with our four-legged friends.&lt;/p&gt;
</description>
    </item>

    <item>
      <title>A Way Out</title>
      <link>https://mhmmoshtaghi.github.io/review/videogame-a-way-out/</link>
      <pubDate>Wed, 04 Apr 2018 12:00:00 -0700</pubDate>
      <guid>https://mhmmoshtaghi.github.io/review/videogame-a-way-out/</guid>
      <description>&lt;p&gt;After Josef Fares&amp;rsquo;s emotionally stunning success with &lt;em&gt;Brothers: A Tale of Two Sons&lt;/em&gt;, I honestly wasn&amp;rsquo;t sure how his new team at Hazelight Studios could follow it up with their first game. Certainly there would have to be a solid story at its heart, but what else? As another story about two male co-lead characters, could &lt;em&gt;A Way Out&lt;/em&gt; invent new and fresh co-op mechanics? Could it evoke emotional responses on par with those in &lt;em&gt;Brothers&lt;/em&gt; without recycling too much material? Most importantly, could it — like &lt;em&gt;Brothers&lt;/em&gt; — ask thematic questions that pierce beyond the screen and into reality?&lt;/p&gt;
&lt;p&gt;The answer to all three of these questions is a resounding yes. In &lt;em&gt;A Way Out&lt;/em&gt;, two players (either locally or online) each control one of Vincent and Leo, the story&amp;rsquo;s protagonists. At the story&amp;rsquo;s start, Vincent is going to jail while Leo has already been in for several months. As they slowly begin to trust one another, they learn that they both have it out for a crime boss named Harvey, the man who got them both canned. United by a desire to find their own justice, the pair hatch a plan to escape.&lt;/p&gt;
&lt;p&gt;The story unfolds as our protagonists interact with one another and others in their environment, tasking players with surviving harrowing combat, pulling off pieces of an escape plan, and solving puzzles using their surroundings. But these elements can be found in many games; the differentiating factor for &lt;em&gt;A Way Out&lt;/em&gt; is the way in which it demands cooperation from the players, even in the most mundane tasks. Especially in the first half of the game, every situation is an opportunity to synergize in new ways. As Vincent and Leo learn to trust one another and work together, so do the players controlling them.&lt;/p&gt;
&lt;p&gt;It is worth mentioning, though not in any spoiler-revealing detail, that the gameplay is both surprisingly clever and spans many different game genres. Though most of the game takes place in a split-screen, third-person perspective, particular sequences play out like moments from &lt;em&gt;Grand Theft Auto&lt;/em&gt;, &lt;em&gt;Battlefield&lt;/em&gt;, &lt;em&gt;Uncharted&lt;/em&gt;, &lt;em&gt;Assassins&#39; Creed&lt;/em&gt;, and even &lt;em&gt;Street Fighter&lt;/em&gt;. Beyond the main game itself, many refreshing and somewhat odd mini-game experiences are scattered throughout the story: Leo and Vincent can challenge one another in brawn (in an arm-wrestling match), brains (in a game of Connect Four), and everything in between.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;WARNING: This part of the review contains game-ruining spoilers.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;But the glory of this game lies in its story&amp;rsquo;s false resolution. After brutally murdering Harvey in his safe house in Mexico and reclaiming the Orlov diamond whose sale Harvey sabotaged, Leo and Vincent land stateside. Perhaps we should have expected otherwise, but it felt like the game was coming to a close and both characters would go back to their wives and children happy, scores settled. Instead, a band of police storm the runway, and our protagonists have nowhere left to go. Instead of emerging victorious, the pointed guns and blue and red lights spell a return to where this adventure started.&lt;/p&gt;
&lt;p&gt;If only, though, that were the only twist. In one painful blow, the writers destroy everything the players have learned to trust: the characters they control, and one another. When the supposed chief of police approaches to arrest the pair, a simple &amp;ldquo;Good work, Vincent&amp;rdquo; turns the entire game on its head. Everything following that point drives the pain of betraying a friend and being betrayed deeper and deeper until the players are forced to control Vincent and Leo in a 1v1 gunfight: the antithesis of every cooperative wall climb, every narrow escape, every emotional vulnerability.&lt;/p&gt;
&lt;p&gt;Even with spoilers disclaimed, it feels wrong to give away the game&amp;rsquo;s final emotional gut-punch. Suffice it to say that it hits just as hard as the infamous sequence in &lt;em&gt;Brothers&lt;/em&gt; where the little brother has to swim on his own. Even the way we&amp;rsquo;ve learned to control our characters and interact in this game&amp;rsquo;s world is questioned and systematically torn down.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Spoiler section over!&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This game is everything you could want from an interactive story, and the masterful way that everything is built up around cooperation makes it even better. While it doesn&amp;rsquo;t fully achieve complete emotional synchronization between players and their characters (I found myself protesting loudly and angrily throughout the end sequence), the storytelling is among the finest I&amp;rsquo;ve had the pleasure to experience in a video game.&lt;/p&gt;
&lt;h2 id=&#34;bugs&#34;&gt;Bugs&lt;/h2&gt;
&lt;p&gt;Many of the character&amp;rsquo;s voice lines were not accurately timed, and would often trigger at irrelevant moments. This may not be a bug so much as a way the experience could be polished further.&lt;/p&gt;
</description>
    </item>

    <item>
      <title>Tinker Tailor Soldier Spy</title>
      <link>https://mhmmoshtaghi.github.io/review/movie-tinker-tailor-soldier-spy/</link>
      <pubDate>Tue, 20 Feb 2018 12:24:36 -0700</pubDate>
      <guid>https://mhmmoshtaghi.github.io/review/movie-tinker-tailor-soldier-spy/</guid>
      <description>&lt;p&gt;I decided to watch &lt;em&gt;Tinker Tailor Soldier Spy&lt;/em&gt; (and even convinced my sister and aunt to join me) because I was looking for something firmly in the thriller category and I&amp;rsquo;d heard it was good. What I got instead was a movie with an initially inscrutable plot and a star-studded cast of exclusively white men (Gary Oldman, Colin Ferth, Tom Hardy, Benedict Cumberbatch, etc.) whose acting was as dull and bleak as the color tones the film is washed in. Don&amp;rsquo;t get me wrong — the greys, blues, and browns were probably the right artistic choice for a spy film set in the Cold War — but there was no help coming in the form of visual effects when the rest of the plot, acting, and music were lacking.&lt;/p&gt;
&lt;p&gt;The movie follows a retired MI6 veteran George Smiley as he tries to uncover the truth about a possible Soviet double agent within the agency. He and four other agents worked directly under &amp;ldquo;Control,&amp;rdquo; who in the years before his (natural) death became obsessed with a &amp;ldquo;mole&amp;rdquo; theory. But when Control sends an agent to Budapest to uncover the truth, the agent goes missing and is presumed dead.&lt;/p&gt;
&lt;p&gt;The setup is clear enough, looking back on it, but the film&amp;rsquo;s exposition does very little to explain itself. There&amp;rsquo;s a natural learning curve with any spy story — the cloak-and-dagger secrecy of any good spy isn&amp;rsquo;t all too conducive to laying out details plainly — but the issue with &lt;em&gt;Tinker Tailor Soldier Spy&lt;/em&gt; is this: as the fog begins to clear and the secrets of the clandestine become known, you realize the truth wasn&amp;rsquo;t worth the intrigue. There is no twist. It feels as if the story becomes softer as it goes (with the exception of a particularly brutal pair of torture and murder scenes in Soviet Russia).&lt;/p&gt;
&lt;p&gt;Perhaps my view is too uncharitable, or this film wasn&amp;rsquo;t my taste. But in my mind, the value of this film seemed hidden away, its existence known but always out of reach, just as a spy would prefer to keep information and leave the rest of us dissatisfied.&lt;/p&gt;
</description>
    </item>

    <item>
      <title>Improved Leader Election for Self-Organizing Programmable Matter</title>
      <link>https://mhmmoshtaghi.github.io/publication/daymude2017-improvedleaderelection/</link>
      <pubDate>Sun, 31 Dec 2017 00:00:00 +0000</pubDate>
      <guid>https://mhmmoshtaghi.github.io/publication/daymude2017-improvedleaderelection/</guid>
      <description></description>
    </item>

    <item>
      <title>Blendoku 2</title>
      <link>https://mhmmoshtaghi.github.io/review/videogame-blendoku-2/</link>
      <pubDate>Sun, 17 Dec 2017 12:00:00 -0700</pubDate>
      <guid>https://mhmmoshtaghi.github.io/review/videogame-blendoku-2/</guid>
      <description>&lt;p&gt;&lt;em&gt;Blendoku 2&lt;/em&gt; is an excellent example of a free, mobile puzzle game done right. Based on the deceptively simple concept of sorting colors, &lt;em&gt;Blendoku 2&lt;/em&gt; offers great depth of content and innovative mechanics to a mobile puzzle scene overrun by match-three spinoffs and their ilk.&lt;/p&gt;
&lt;p&gt;Gameplay is straightforward: a crossword-like board is presented with a small number of colored tiles already filled in. Players must then place the remaining colors into the correct spaces so that the resulting board follows some sort of color gradient. Variants on this basic formula include &amp;ldquo;Keyless&amp;rdquo;, where the original board has no preset tiles; &amp;ldquo;Decoys,&amp;rdquo; where some tiles are red herrings and not part of the end configuration, and &amp;ldquo;Clones,&amp;rdquo; where a color corresponds to multiple spaces on the board. Completionists can challenge themselves to beat levels faster than the world average time and do so perfectly, avoiding putting any colors in incorrect locations. Achievements accompany these feats and more (and all are possible without payment).&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-blendoku-2/thanks_41_hu2af550c75d92bbda05ddca25a13227dd_7952_2eefcd7c1224974a5b6b4421a66afe57.png 400w,
               /review/videogame-blendoku-2/thanks_41_hu2af550c75d92bbda05ddca25a13227dd_7952_bbb7cef94443b9923740b5ab3828bdca.png 760w,
               /review/videogame-blendoku-2/thanks_41_hu2af550c75d92bbda05ddca25a13227dd_7952_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-blendoku-2/thanks_41_hu2af550c75d92bbda05ddca25a13227dd_7952_2eefcd7c1224974a5b6b4421a66afe57.png&#34;
               width=&#34;676&#34;
               height=&#34;760&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;Levels are organized by difficulty. The base game, which is completely free, includes generous amounts of content: 150 &amp;ldquo;simple&amp;rdquo; levels, 150 &amp;ldquo;medium,&amp;rdquo; 100 &amp;ldquo;hard,&amp;rdquo; 100 &amp;ldquo;master,&amp;rdquo; and 50 bonus &amp;ldquo;thanks&amp;rdquo; levels. This was more than enough to provide a satisfying experience, and interested players can more than double the number of levels by purchasing level packs. Monetization, per usual, comes from ads played between levels.&lt;/p&gt;
&lt;p&gt;There are a variety of other game modes and perks to discover throughout the game, including a multiplayer versus mode, &amp;ldquo;painting&amp;rdquo; levels, a &amp;ldquo;color IQ&amp;rdquo; test, and a daily challenge level. These are all nice enough experiences, demonstrating the developers’ abilities to strike a near-perfect balance between providing abundant content and remaining focused on their core gameplay. As a result, &lt;em&gt;Blendoku 2&lt;/em&gt; feels full without trying to do too much.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-blendoku-2/painting_15_hu4beddca54a96b73bca0c1dc2c9d3133c_647481_76c2b81d33a2ed9286f4a2ad318c0208.png 400w,
               /review/videogame-blendoku-2/painting_15_hu4beddca54a96b73bca0c1dc2c9d3133c_647481_fd7cfbb4eee3c59c86bd08991b14f53d.png 760w,
               /review/videogame-blendoku-2/painting_15_hu4beddca54a96b73bca0c1dc2c9d3133c_647481_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-blendoku-2/painting_15_hu4beddca54a96b73bca0c1dc2c9d3133c_647481_76c2b81d33a2ed9286f4a2ad318c0208.png&#34;
               width=&#34;518&#34;
               height=&#34;760&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;All in all, &lt;em&gt;Blendoku 2&lt;/em&gt;’s commitment to simplicity in design and mechanics combined with its plethora of free content makes it a must-try for puzzle lovers.&lt;/p&gt;
</description>
    </item>

    <item>
      <title>Half the Sky</title>
      <link>https://mhmmoshtaghi.github.io/review/book-half-the-sky/</link>
      <pubDate>Sun, 17 Dec 2017 12:00:00 -0700</pubDate>
      <guid>https://mhmmoshtaghi.github.io/review/book-half-the-sky/</guid>
      <description>&lt;p&gt;This is arguably the most compelling, relevant, and urgent book on injustice in the modern world that I&amp;rsquo;ve read. An immediate self-critique is that I haven&amp;rsquo;t read many books in this area, but that fact does not make my statement any less true, nor does it negate the praises of others who were similarly woken and shaken by its contents.&lt;/p&gt;
&lt;p&gt;The authors — two &lt;em&gt;New York Times&lt;/em&gt; journalists by day — guide the reader through a structured and deep lesson in the reality of oppression and violence against women across the globe. Acknowledging at one point that rattling off statistics is a less powerful motivator than utilizing anecdotes, their writing places women&amp;rsquo;s stories in the forefront. For all their gut-wrenching, repulsive details, this method is indisputably effective. Rape, forced sex trafficking, genital cutting, involuntary drugging, fistulas, and systemic denial of opportunity form an incomplete list of topics on which Nick and Sheryl report. The often literally gory details of these brutalities will remain difficult to forget.&lt;/p&gt;
&lt;p&gt;Perhaps most importantly, the book refuses to play a game of shock-and-awe preaching. Every call to action is qualified by cited research, which in turn is vetted for implicit and broken assumptions. The reader is repeatedly reminded that there is no silver bullet for these issues, so in its place, Nick and Sheryl dish out a whole menagerie of ammunition. Current governmental efforts, individuals starting movements, social entrepreneurship, and international aid groups are all discussed at length.&lt;/p&gt;
&lt;p&gt;Every chapter is followed by an afterword that directly engages the reader. The last chapter is entirely dedicated to applying the newfound knowledge from the first thirteen chapters. The appendix is stuffed with 47 organizations and aid groups that maximize cost-effective aid and impact for local people, complete with websites and ways to get involved. Nick and Sheryl take every opportunity to move us as Western readers from our armchairs into places of progress, and I thank them and the women whose stories they shared for it.&lt;/p&gt;
</description>
    </item>

    <item>
      <title>On Your Marks, Get Set, Coat!</title>
      <link>https://mhmmoshtaghi.github.io/post/on-your-marks-get-set-coat/</link>
      <pubDate>Mon, 11 Dec 2017 09:05:00 -0700</pubDate>
      <guid>https://mhmmoshtaghi.github.io/post/on-your-marks-get-set-coat/</guid>
      <description>&lt;p&gt;My first journal paper was &lt;a href=&#34;http://rdcu.be/zOaK&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;published&lt;/a&gt; early last week, marking a milestone in the winding forest path that is my PhD. The paper has some nice ideas and results I&amp;rsquo;m proud of, but — regrettably — the writing style and level of mathematical rigor needed for publication can make it pretty hard to decipher for anyone not familiar with our niche of computer science. I&amp;rsquo;m of the opinion that ideas are only useful if people can understand them, so to that end I&amp;rsquo;m going to explain this paper in a way that&amp;rsquo;s a bit less formal and academic. With a little effort, I think we&amp;rsquo;ll both learn something new here. (And if it&amp;rsquo;s still all Greek to you, I&amp;rsquo;ll happily answer questions you leave in the comments).&lt;/p&gt;
&lt;h2 id=&#34;the-nickel-version-tldr&#34;&gt;The Nickel Version (TL;DR)&lt;/h2&gt;
&lt;p&gt;The paper (whose title is mathy and unimportant) is all about programming futuristic, sci-fi materials that don&amp;rsquo;t exist yet to coat other objects in even layers as (relatively) fast as possible.&lt;/p&gt;
&lt;h2 id=&#34;the-uh-dollar-version&#34;&gt;The, Uh, Dollar(?) Version&lt;/h2&gt;
&lt;p&gt;Let&amp;rsquo;s take a look at the paper&amp;rsquo;s title (&lt;em&gt;emphasis&lt;/em&gt; added): &amp;ldquo;On the &lt;em&gt;Runtime&lt;/em&gt; of &lt;em&gt;Universal Coating&lt;/em&gt; for &lt;em&gt;Programmable Matter&lt;/em&gt;.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Runtime&lt;/em&gt; is a word we use to talk about how fast an algorithm is. As in many other aspects of life, faster is better and more efficient. So this paper is about how fast &amp;ldquo;Universal Coating for Programmable Matter&amp;rdquo; is.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /post/on-your-marks-get-set-coat/featured_hu6c163cf7af4fbe950083c652bb55d01a_505426_463e832ee3e11f196d1a814633b6e635.png 400w,
               /post/on-your-marks-get-set-coat/featured_hu6c163cf7af4fbe950083c652bb55d01a_505426_43f7aed6ae179137eb8905b6c4b365d3.png 760w,
               /post/on-your-marks-get-set-coat/featured_hu6c163cf7af4fbe950083c652bb55d01a_505426_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/post/on-your-marks-get-set-coat/featured_hu6c163cf7af4fbe950083c652bb55d01a_505426_463e832ee3e11f196d1a814633b6e635.png&#34;
               width=&#34;760&#34;
               height=&#34;317&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;&lt;em&gt;Programmable matter&lt;/em&gt; broadly describes any kind of physical material that can change itself as a reaction to what&amp;rsquo;s around it without human interaction. It&amp;rsquo;s a bit sci-fi, but imagine a future in which roads fill their own potholes and cracks after wear and tear, clothes heal themselves from fraying and holes, or artificial cells isolate and neutralize malignant tumors in the human body. It sounds crazy and is definitely out there, but that&amp;rsquo;s what we&amp;rsquo;re talking about here.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /post/on-your-marks-get-set-coat/artificialcells_hu20929dbf7529e69106953818f1a68422_348174_01705d0dc4cb7b8051eef406ca66d3cb.png 400w,
               /post/on-your-marks-get-set-coat/artificialcells_hu20929dbf7529e69106953818f1a68422_348174_ba5b21ab1a072095349a7a938d122ae6.png 760w,
               /post/on-your-marks-get-set-coat/artificialcells_hu20929dbf7529e69106953818f1a68422_348174_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/post/on-your-marks-get-set-coat/artificialcells_hu20929dbf7529e69106953818f1a68422_348174_01705d0dc4cb7b8051eef406ca66d3cb.png&#34;
               width=&#34;760&#34;
               height=&#34;317&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;&lt;em&gt;Universal Coating&lt;/em&gt; is the action we&amp;rsquo;re trying to do. In this context, we mean &amp;ldquo;coating&amp;rdquo; like a coat of paint; we want to cover something as evenly as possible. (Nobody likes a lumpy paint job). &amp;ldquo;Universal,&amp;rdquo; as a math word, means that a technique works in many/all cases. Here, we&amp;rsquo;re talking about a single approach to coating that works no matter what the object to be coated looks like. (Which is pretty cool).&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /post/on-your-marks-get-set-coat/newpaint_hu9d7b855bc80a92d321e5cedaf16add02_541206_6ec75bda627dc562e11886e0a53097b5.png 400w,
               /post/on-your-marks-get-set-coat/newpaint_hu9d7b855bc80a92d321e5cedaf16add02_541206_9ada2ea019ee7f5cac346ca2d97982e1.png 760w,
               /post/on-your-marks-get-set-coat/newpaint_hu9d7b855bc80a92d321e5cedaf16add02_541206_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/post/on-your-marks-get-set-coat/newpaint_hu9d7b855bc80a92d321e5cedaf16add02_541206_6ec75bda627dc562e11886e0a53097b5.png&#34;
               width=&#34;760&#34;
               height=&#34;317&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;So, all together, this paper is about analyzing the speed of a particular approach to using futuristic materials for coating any kind of object in nice, even layers. (Ok, so even the one sentence wrap up is a mouthful). Also, a big thank you to Annie Carson for the great illustrations!&lt;/p&gt;
&lt;h2 id=&#34;so-how-does-it-work&#34;&gt;So How Does It Work?&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;m really glad you asked. Actually, I&amp;rsquo;m really glad you&amp;rsquo;re still here after that heavy appetizer of an overview; hopefully it didn&amp;rsquo;t spoil your appetite before our main course, which starts right now! Take a look at a simulation of the Universal Coating algorithm over on our &lt;a href=&#34;https://sops.engineering.asu.edu/simulations/#universalcoating&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;lab site&lt;/a&gt;, and keep it open for the rest of this section so you can refer back to it.&lt;/p&gt;
&lt;p&gt;We need a bit of terminology before I explain what&amp;rsquo;s going on with all those dots and colors. There are two main &amp;ldquo;things&amp;rdquo; in this algorithm. Thing 1 is the &lt;em&gt;object&lt;/em&gt;, which is the cluster of dots with black circles in the middle. We&amp;rsquo;re keeping things nice and simple in this example by making the object a hexagon, but it can be essentially any shape you want (&amp;ldquo;universal&amp;rdquo;, remember?). Thing 2 is the &lt;em&gt;particle system&lt;/em&gt;, which are all the other dots that move around and change color. &amp;ldquo;Particle system&amp;rdquo; is just the term we use for the programmable matter stuff we talked about before: we&amp;rsquo;re trying to coat the object with these particles.&lt;/p&gt;
&lt;p&gt;In really broad strokes, the algorithm can be broken down into four major steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Get all the particles oriented towards the object using something like follow-the-leader. In the simulation video (0:00–0:02), this is when they all turn yellow. If you start at any yellow particle and follow its pointer to the next particle and so on, you&amp;rsquo;ll always end up at the object.&lt;/li&gt;
&lt;li&gt;Coat the object&amp;rsquo;s first layer. This happens insanely fast in the video (0:01–0:02) but there are actually a couple particles that turn red and fill in the few positions on the object&amp;rsquo;s first layer that weren&amp;rsquo;t already filled. You can see them if you pause the video and drag the slider back and forth around 0:01.&lt;/li&gt;
&lt;li&gt;Decide on a position to be the start/end of each layer. Choosing this &lt;em&gt;marker position&lt;/em&gt; plays a big role in helping the particles learn when one layer is finished so they can start forming the next one. In the video (0:02–0:07), this decision process is shown with the line segments around the object changing colors. At 0:07, the particle occupying the marker position turns a light grey color.&lt;/li&gt;
&lt;li&gt;Coat the object in more layers one by one until all particles have been used. The video (0:08–0:20) shows this quite clearly, with finished particles turning green. The grey line of particles growing from the object towards the bottom are the particles from Step 3 which mark the start/end of each layer.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;And that&amp;rsquo;s it! Perhaps as a point of pride, I have to mention that — although simple to describe — this algorithm is really involved. One of the main difficulties is that each particle runs this algorithm individually, so instead of Steps 1–4 happening nice and sequentially, they can actually all happen at once. And… yeah, it&amp;rsquo;s as chaotic as it sounds. The good news is that, in a &lt;a href=&#34;https://sops.engineering.asu.edu/sops/universal-coating/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;previous paper&lt;/a&gt;, our group proved this algorithm always works, no matter what. Going forward, we&amp;rsquo;ll just take the fact that it works for granted.&lt;/p&gt;
&lt;h2 id=&#34;quick-get-your-coat&#34;&gt;(Quick) Get Your Coat!&lt;/h2&gt;
&lt;p&gt;I can&amp;rsquo;t remember how many times I got in the car to go somewhere as a kid only to be sent back inside to get a jacket. Mom never said the &amp;ldquo;quick&amp;rdquo; part, but it was definitely implied!&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;re going to shift our discussion to the real work of this new paper: proving that our Universal Coating algorithm runs reasonably fast. Let&amp;rsquo;s start with a motivating example for why you might do this kind of analysis:&lt;/p&gt;
&lt;p&gt;Pretend there&amp;rsquo;s a secret technique for earning $1,000,000. Maybe it even comes with a guarantee that it will always work. We might get excited about something like that, or at least want to know more. But what if we found out that no one knew how long it would take to work? Or even worse, what if the fine print said it would take more days than the number of atoms in the universe? Well. We might still be waiting for our payout long after inflation turns a million dollars into pocket change, the cows come home, and the sun expands to consume the earth.&lt;/p&gt;
&lt;p&gt;The lesson to be learned here: we need to know both that an algorithm works &lt;strong&gt;and&lt;/strong&gt; that it won&amp;rsquo;t take a ridiculously long time. So how do we analyze the algorithm&amp;rsquo;s runtime? There&amp;rsquo;s often more than one way to crack that coconut, but the techniques can get pretty involved. Even getting a mastery over the most fundamental techniques can take the larger part of most undergraduate Computer Science (CS) programs. (Fun fact: this side of CS doesn&amp;rsquo;t even have to involve programming, contrary to the popular belief that CS people are a bunch of tech support code monkeys. Yes, I probably can &lt;a href=&#34;https://www.xkcd.com/627/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;fix your iPhone&lt;/a&gt;. No, I didn&amp;rsquo;t learn that in school.)&lt;/p&gt;
&lt;p&gt;To explain both why analyzing our particular algorithm was nasty and how we ended up doing it, I&amp;rsquo;ll use a quick allegory. Imagine a race between two teams: Team Red and Team Blue. Team Red works like a machine: everyone comes to practice and trains hard, they perform well in events, and — most importantly — they run in perfect lock step, starting together and finishing together. Team Blue, on the other hand, is more about the individual effort. They also perform well in events, but have a mix of sprinters, endurance runners, runners who like to stop and smell the roses, and so on. Some of Team Blue&amp;rsquo;s runners end up finishing really fast, while others take longer.&lt;/p&gt;
&lt;p&gt;Our particle systems are, essentially, Team Blue. We don&amp;rsquo;t make any assumptions about how fast each particle works relative to the others, and it&amp;rsquo;s entirely possible that a particle can suddenly go faster or slower than usual without following a pattern. This makes it hard to figure out when the last Blue runner (or particle) will cross the finish line. So, instead of directly analyzing our system (Team Blue), we proved two things:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Team Red — a simpler version of our particle systems where everyone progresses through the algorithm at the same rate — runs &amp;ldquo;fast&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;Team Blue (our particle system) always runs faster than Team Red.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Therefore, as a nice logical result, Team Blue also runs &amp;ldquo;fast&amp;rdquo;. In fact, it&amp;rsquo;s entirely possible it even runs &lt;em&gt;really&lt;/em&gt; fast!&lt;/p&gt;
&lt;h2 id=&#34;good-job-out-there-get-some-water&#34;&gt;Good Job Out There, Get Some Water&lt;/h2&gt;
&lt;p&gt;As a recap, we have an algorithm for programmable matter which coats objects of all shapes and sizes. We showed that this algorithm always works in an &lt;a href=&#34;https://sops.engineering.asu.edu/sops/universal-coating/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;older paper&lt;/a&gt;, and that it runs pretty fast in this new &lt;a href=&#34;http://rdcu.be/zOaK&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;journal paper&lt;/a&gt;. This runtime analysis boiled down to showing that a simplified version of our particle system runs the algorithm quickly, and that the real particle system always runs it even faster. (For my CS people out there, we showed that the Universal Coating algorithm runs in $\mathcal{O}(n)$ asynchronous rounds with high probability, where $n$ is the number of particles in the system).&lt;/p&gt;
&lt;p&gt;Thanks for reading, and feel free to comment with your thoughts, ideas, and questions!&lt;/p&gt;
</description>
    </item>

    <item>
      <title>On the Runtime of Universal Coating for Programmable Matter</title>
      <link>https://mhmmoshtaghi.github.io/publication/daymude2018-coatingruntime/</link>
      <pubDate>Tue, 28 Nov 2017 00:00:00 +0000</pubDate>
      <guid>https://mhmmoshtaghi.github.io/publication/daymude2018-coatingruntime/</guid>
      <description>&lt;h3 id=&#34;related-press&#34;&gt;Related Press&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://asunow.asu.edu/20170306-opening-paths-progress-programmable-materials&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Opening Paths to Progress with Programmable Materials.&lt;/a&gt; Joe Kullman. &lt;em&gt;ASU Now&lt;/em&gt;, March 2017. (Also featured in &lt;a href=&#34;http://technews.acm.org/archives.cfm?fo=2017-03-mar/mar-13-2017.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;em&gt;ACM TechNews&lt;/em&gt;&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>

    <item>
      <title>Thor: Ragnarok</title>
      <link>https://mhmmoshtaghi.github.io/review/movie-thor-ragnarok/</link>
      <pubDate>Tue, 21 Nov 2017 12:00:00 -0700</pubDate>
      <guid>https://mhmmoshtaghi.github.io/review/movie-thor-ragnarok/</guid>
      <description>&lt;p&gt;&lt;em&gt;Thor: Ragnarok&lt;/em&gt; came to finish what both &lt;em&gt;Guardians of the Galaxy&lt;/em&gt; films started. Instead of honing in on one hero&amp;rsquo;s dramatic story arc, &lt;em&gt;Ragnarok&lt;/em&gt; stars a group of them. The action takes us from planet to planet across all the known galaxy by spaceship and &lt;del&gt;wormhole&lt;/del&gt; anus. But most importantly, &lt;em&gt;Ragnarok&lt;/em&gt; acknowledges what we&amp;rsquo;ve known from the beginning: superheroes are absurd and should be just as ridiculous as they are strong, smart, determined, and attractive. Play is woven into the fabric of the film, from Thor and Loki&amp;rsquo;s &amp;ldquo;Get Help&amp;rdquo; fighting routine to Dr. Strange providing Thor a golden, bottomless beer fit for the Norse god (as promised to us at the end of the sorcerer&amp;rsquo;s own film). Even more serious topics, like Bannon and Hulk&amp;rsquo;s brain vs. brawn identity crisis and villain Hela&amp;rsquo;s description of executioners in Asgard are treated with a jesting lightness.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Ragnarok&lt;/em&gt; neatly sidesteps two pitfalls common to recent team-up superhero films: lack of screentime for its individual characters and weakening plot substance for the sake of comedy. In fact, some of the film&amp;rsquo;s most hysterical moments impressively include dialogue from three or more main characters while simultaneously advancing the story. When Thor, Bannon, and Valkerie discuss Loki&amp;rsquo;s past mischief while he remains chained but chuckling at their recounting of his past antics, the stratified ages of each character&amp;rsquo;s relationship with Loki shine: Thor and Loki&amp;rsquo;s escalating and ongoing brotherly conflict has existed as long as we&amp;rsquo;ve known them, Bannon last remembers Loki as an alien invader that needed smashing in the first Avengers, and Valkerie — while having as close as possible to a clean slate with Loki — generally mistrusts everyone. This lends itself perfectly to punchlines contrasting Bannon&amp;rsquo;s concerns with Loki&amp;rsquo;s murderous moods with Thor&amp;rsquo;s fond memories of being stabbed by Loki after thinking he was a snake.&lt;/p&gt;
&lt;p&gt;The film&amp;rsquo;s more serious moments feel all the more poignant and starkly emotional against the backdrop of fun and games that dominate most of the dialogue. Watching the Hulk transform back into Bannon after being overcome with rage and grief on seeing Natasha is heartbreaking, and reminds us that the Hulk isn&amp;rsquo;t the only side of Bannon who carries the weight of his emotions. Heimdall inspires hope in an equally powerful way, and was an unmistakable Jesus figure to me. The way he sees all who are in need and fights for them — often alone in standing against evil and doing so without bravado or recognition — is exactly the kind of hero that inspires me.&lt;/p&gt;
&lt;p&gt;So after yet another Marvel movie, what makes &lt;em&gt;Ragnarok&lt;/em&gt; stand out? We need look no further than the wonderfully quotable one-liners which litter its script, the well-developed and colorful cast of characters which populate its worlds, the perfected formula of self-aware superhero melodrama that guide its structure, and the underlying lessons of true heroism which are embodied by every main character, major and minor alike. If this is the direction Marvel is taking even a fraction of its future movies, I&amp;rsquo;m very excited to see what comes next.&lt;/p&gt;
</description>
    </item>

    <item>
      <title>June&#39;s Journey</title>
      <link>https://mhmmoshtaghi.github.io/review/videogame-junes-journey/</link>
      <pubDate>Wed, 25 Oct 2017 12:00:00 -0700</pubDate>
      <guid>https://mhmmoshtaghi.github.io/review/videogame-junes-journey/</guid>
      <description>&lt;p&gt;Hidden object games moved from their old dwellings in children&amp;rsquo;s sections of newspapers to new homes on touchscreens in the early iOS era, and every generation of the operating system sees a new app iterate over the same mechanics. More of the same isn&amp;rsquo;t always bad — it&amp;rsquo;s nice to have new apps with refreshed graphics to replace aging legacy games that are no longer supported — but nevertheless, newcomers must somehow justify their existence. &lt;em&gt;June&amp;rsquo;s Journey&lt;/em&gt; had a promising plan to do so: wrap classic hidden object gameplay in a mystery story and toss in some city building-esque filler as a bonus. But it ultimately commits too many sins of other free-to-play, casual games to remain enjoyable, and a poorly executed progression system subjects players to numbing repetition.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-junes-journey/level_hufdef2b02222c20c1955cf8924e6e35d4_5019216_206d0f8aafddc8dd81b98a9d96738a03.png 400w,
               /review/videogame-junes-journey/level_hufdef2b02222c20c1955cf8924e6e35d4_5019216_b153d9051b1fb330658273f831674ee7.png 760w,
               /review/videogame-junes-journey/level_hufdef2b02222c20c1955cf8924e6e35d4_5019216_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-junes-journey/level_hufdef2b02222c20c1955cf8924e6e35d4_5019216_206d0f8aafddc8dd81b98a9d96738a03.png&#34;
               width=&#34;760&#34;
               height=&#34;428&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;The setting is fairly simple. June is a British WWI veteran nurse with a knack for quick thinking and insightful observations. Upon learning that her sister and brother-in-law were murdered, purportedly in a murder-suicide by her brother-in-law&amp;rsquo;s own hand, she travels to New York to find answers. Your mission quite literally becomes June&amp;rsquo;s: find hidden clues which steadily reveal more of the mystery, bringing you closer to the only answers that will make sense of the violence. As an aside, the family estate has fallen into some disrepair, so coins and resources gained from completing levels can be put towards decorating and renovating dilapidated structures.&lt;/p&gt;
&lt;p&gt;The progression system is superficial, to say the least. Each hidden object scene can only be accessed after the player reaches the corresponding player level. Player level increases with flowers, a strange disguise for a typical XP/leveling system. But instead of earning flowers through playing levels and finding objects (which one could argue is the whole point), flowers are rewarded for buying decorations and upgrading buildings on the estate. This creates an illogical and contrived system of currencies: playing levels rewards coins and materials, which in turn are used to buy decorations and building upgrades, which in turn reward flowers that sum to higher player levels, which in turn unlock new levels one-by-one. If that sounds unnecessarily complicated, it&amp;rsquo;s because it is. Very little is gained from each currency exchange, and binding a player&amp;rsquo;s story progression to the number of trellises built and bushes planted can only be seen as a ploy to make content last longer.&lt;/p&gt;
&lt;p&gt;The joy of a hidden object game is in finding things. There&amp;rsquo;s nothing wrong with adding extra elements to the gameplay; a good story is a boon to any game, and rewarding players with an increasingly sprawling and beautiful estate to mark their time investment is quite nice. But when grinding for levels and resources reduces finding hidden objects to memorizing where on the screen to tap, there can be no arguing that &lt;em&gt;June&amp;rsquo;s Journey&lt;/em&gt; lost sight of its core gameplay which should have remained its soul.&lt;/p&gt;
</description>
    </item>

    <item>
      <title>A Stochastic Approach to Shortcut Bridging in Programmable Matter</title>
      <link>https://mhmmoshtaghi.github.io/event/2017acoseminar-bridging/</link>
      <pubDate>Fri, 06 Oct 2017 13:00:00 -0500</pubDate>
      <guid>https://mhmmoshtaghi.github.io/event/2017acoseminar-bridging/</guid>
      <description>&lt;p&gt;Image of &lt;em&gt;Eciton&lt;/em&gt; army ants forming a shortcut bridge is reproduced with permission from &lt;a href=&#34;https://doi.org/10.1073/pnas.1512241112&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Reid et al. (PNAS, 2015)&lt;/a&gt;.&lt;/p&gt;
</description>
    </item>

    <item>
      <title>Mapping Your Academic Career</title>
      <link>https://mhmmoshtaghi.github.io/review/book-mapping-your-academic-career/</link>
      <pubDate>Fri, 29 Sep 2017 12:00:00 -0700</pubDate>
      <guid>https://mhmmoshtaghi.github.io/review/book-mapping-your-academic-career/</guid>
      <description>&lt;p&gt;I had set myself on the path of a PhD when I picked this book up at &lt;a href=&#34;https://urbana.org/past-urbanas/urbana-15&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Urbana 2015&lt;/a&gt;, and hoped to read up on some guidance. When finally getting a chance to read it a year later, however, I found myself flipping through the life of professor — not a discussion of how best to center my life around Jesus while navigating graduate studies! In a conversational but direct manner, Burge describes the life trajectory of a faculty member in three main stages, each with their own goals, challenges, and successes. Taking the position of an amateur developmental psychologist (himself a professor of New Testament theology), he divides the three main cohorts of professors not by age, but by maturity.&lt;/p&gt;
&lt;p&gt;Cohort 1 is concerned with finding security, Cohort 2 with finding success, and Cohort 3 with finding significance. Burge fills out a structured outline for each in his short text, first discussing the marking characteristics of each group, then warning against a series of common failures and difficulties, and concluding with the moments that define the closing of a cohort. It&amp;rsquo;s a helpful collection of list-like information, which makes searching for information easier.&lt;/p&gt;
&lt;p&gt;Coupled with conversations with my advisor on the academic life, Burge provides a good framework for understanding a faculty&amp;rsquo;s personal and professional progression. While not all of it is anywhere near relevant to me right now, it acts as a high-level road map for understanding what&amp;rsquo;s to come.&lt;/p&gt;
</description>
    </item>

    <item>
      <title>Overcooked</title>
      <link>https://mhmmoshtaghi.github.io/review/videogame-overcooked/</link>
      <pubDate>Mon, 11 Sep 2017 12:00:00 -0700</pubDate>
      <guid>https://mhmmoshtaghi.github.io/review/videogame-overcooked/</guid>
      <description>&lt;p&gt;I am a panda wielding a kitchen knife, desperately hacking away at as many onions as physically possible and subsequently littering the floor with chopped produce. The noise level in our living room steadily rises as my sister and I frantically shout back and forth at each other; the culinary space station we&amp;rsquo;ve been thrust into is about to rotate, and we&amp;rsquo;ll have a very narrow window before the station rotates again to ferry all the onions into another room where pots will transform them into delicious soups. But the discord is quickly joined by my brother, finding himself caught on the wrong side of an airlock, holding clean bowls for a set of soups that are nearly finished cooking. In a few moments, those soups will burn and set that section of the kitchen on fire; onions are bumped and kicked aside as my panda and my sister&amp;rsquo;s black bear accidentally dash into one another in our simultaneous attempts to get to the fire extinguisher. Orders are being missed, dirty dishes are piling up, soups are burning, tempers are fraying, and — most importantly — hilarity is ensuing. This is &lt;em&gt;Overcooked&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Set with the task of avoiding certain apocalyptic doom caused by the appearance of a spaghetti monster that cannot be sated, players (controlling cartoon people and anthropomorphic animals) are sent back in time to hone their teamwork and culinary abilities. These cooperative teams of 1–4 players face challenges in cooking a variety of dishes, each introducing its own unique mechanics, in a variety of environments, each with its own hazards. Continuous failure to learn each level&amp;rsquo;s unspoken rules and strategies quickly is more often a source of comedy than of frustration, and any attempts to rely on a comfort strategy are almost always usurped by little surprises to further refine your growing culinary expertise.&lt;/p&gt;
&lt;p&gt;For the most part, each level is fairly straightforward: obtain ingredients, chop them, assemble them into dishes, cook those dishes, plate them, serve them, and literally rinse and repeat by washing the dirty plates when they&amp;rsquo;re returned. The faster dishes are served, the more money they&amp;rsquo;re worth, and a score of 1 (passing) to 3 (perfect) stars can be scored on each level depending on the total money earned. The numerous ways each stage of preparation overlaps with the others offers more than enough material for flustering and amusing kitchen accidents, but it&amp;rsquo;s the small mechanics tweaks and zany interactions between the players and their environment that keep the already incredible core experience fresh throughout the course of the game. Mishaps abound, such as accidentally throwing away clean dishes instead of handing them to another player or slipping off an iceberg holding a finished pizza.&lt;/p&gt;
&lt;p&gt;Although the game can be played alone (wherein a single player controls multiple avatars and switches between them), &lt;em&gt;Overcooked&lt;/em&gt;&amp;rsquo;s hilarity of mistakes (and mistakes on top of mistakes) combined with the thrill of (eventual) success is best experienced with friends. In an age where couch co-op is largely ignored in the wake of big screen multiplayer titles, &lt;em&gt;Overcooked&lt;/em&gt; not only succeeds in creating a satisfying co-op experience but adds innovative elements beyond the usual cooking game. If &lt;em&gt;Overcooked&lt;/em&gt; were a meal, then Ghost Town Games has prepared us something truly wonderful and family-style; my compliments to the chefs.&lt;/p&gt;
</description>
    </item>

    <item>
      <title>A Stochastic Approach to Shortcut Bridging in Programmable Matter</title>
      <link>https://mhmmoshtaghi.github.io/publication/andresarroyo2017-bridging/</link>
      <pubDate>Thu, 24 Aug 2017 00:00:00 +0000</pubDate>
      <guid>https://mhmmoshtaghi.github.io/publication/andresarroyo2017-bridging/</guid>
      <description>&lt;p&gt;Image of &lt;em&gt;Eciton&lt;/em&gt; army ants forming a shortcut bridge is reproduced with permission from &lt;a href=&#34;https://doi.org/10.1073/pnas.1512241112&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Reid et al. (PNAS, 2015)&lt;/a&gt;.&lt;/p&gt;
</description>
    </item>

    <item>
      <title>Local Stochastic Algorithms for Compression and Shortcut Bridging in Programmable Matter</title>
      <link>https://mhmmoshtaghi.github.io/event/2017bda-compression/</link>
      <pubDate>Fri, 28 Jul 2017 14:05:00 -0500</pubDate>
      <guid>https://mhmmoshtaghi.github.io/event/2017bda-compression/</guid>
      <description></description>
    </item>

    <item>
      <title>Convex Hull Formation for Programmable Matter</title>
      <link>https://mhmmoshtaghi.github.io/event/2017bda-convexhull/</link>
      <pubDate>Fri, 28 Jul 2017 13:40:00 -0500</pubDate>
      <guid>https://mhmmoshtaghi.github.io/event/2017bda-convexhull/</guid>
      <description></description>
    </item>

    <item>
      <title>We Were Here</title>
      <link>https://mhmmoshtaghi.github.io/review/videogame-we-were-here/</link>
      <pubDate>Sun, 16 Jul 2017 12:00:00 -0700</pubDate>
      <guid>https://mhmmoshtaghi.github.io/review/videogame-we-were-here/</guid>
      <description>&lt;p&gt;In this two-player, cooperative, escape-the-room-like adventure, players take the roles of the Librarian and the Explorer. The two begin the game stranded in an unspecified snowy region, and upon discovering and entering a foreboding castle, they are knocked out and placed in separate rooms, connected only by a pair of walkie-talkies. The Librarian is primarily responsible for supplying information to the Explorer, who in turn navigates deadly traps and dimly lit mazes to reach new areas. By piecing together visual clues from both players&#39; environments, puzzles are solved cooperatively, opening doors to new challenges.&lt;/p&gt;
&lt;p&gt;For a free-to-play game, this was a surprisingly enjoyable and well-constructed experience (albeit a relatively short one, with an imperfect run taking roughly two hours). The crux of the gameplay rests on using voice-only communication to navigate inherently visual puzzles, which are fairly high-quality. Each puzzle balances complexity with difficulty in a pleasing way, and remains sufficiently independent of the rest, ensuring that each sequence is fresh and surprising. Even so, the overall experience was cohesive, rewarding attention to detail even when the details weren&amp;rsquo;t immediately relevant. Making the roles unique gives the game replay value as well; even though both players know the puzzle solutions after one successful run, switching roles gives a satisfying &amp;ldquo;ah, that&amp;rsquo;s what you were confused about!&amp;rdquo; kind of feeling.&lt;/p&gt;
&lt;p&gt;The graphics are lacking in polish, but this is hardly a complaint given the game is free. In some senses, the lower quality textures add to the experience; I don&amp;rsquo;t really like horror games, but the use of creepy atmospheric elements and the ever-present sense that my partner was in danger was enough to create the right amount of suspense.&lt;/p&gt;
&lt;p&gt;My real complaints are lodged against the bugs we encountered in our play-through, which (as of Update Five) required my Explorer to kill himself so we could restart from the checkpoint. This sort of broke the feeling of the overall experience, as death became a necessary means to an end instead of something worth fearing.&lt;/p&gt;
&lt;p&gt;Finally, as a matter of opinion and not of critique, I wonder if the story could have offered any more resolution than what was hinted at in the final theatre sequence. Who was the shadowy figure that placed us here? What drives it to such strange games of mind-over-matter? And what does it want with the one left behind?&lt;/p&gt;
&lt;h2 id=&#34;bugs&#34;&gt;Bugs&lt;/h2&gt;
&lt;p&gt;As of Update Five, the introductory video has audio buffering issues. The chess puzzle has a couple bugs: the librarian often drops the film reel for no reason, and it is possible to get the film reel to play its spinning animation on the table itself if the Explorer applies the power too early.&lt;/p&gt;
</description>
    </item>

    <item>
      <title>The Meaning of Marriage</title>
      <link>https://mhmmoshtaghi.github.io/review/book-the-meaning-of-marriage/</link>
      <pubDate>Sat, 01 Jul 2017 12:00:00 -0700</pubDate>
      <guid>https://mhmmoshtaghi.github.io/review/book-the-meaning-of-marriage/</guid>
      <description>&lt;p&gt;This book is an informative, gospel-based discussion of marriage based on a sermon series Keller gave in 1991. Rooted in equal parts theology, pastoral experience, and lives lived as husband and wife, the Kellers address topics ranging from the vision of a Christian marriage to spouses&#39; individual relationships with Jesus to singleness to sex and beyond. Their clarity and simple speech make accessible the depth of their study and wisdom, while their anecdotes offer the humor and practicality necessary to understand these truths against the backdrops of our own interactions with married life. The main text is well attended by footnotes, which often point to helpful resources and candid insights. But underlying every discussion is the constant call back to the very nature of God, and that focus allows anyone — teens, singles, marrieds, widows, or divorcees — to learn something from this book.&lt;/p&gt;
&lt;p&gt;I came to this book during a time of pre-engagement, searching for answers I didn&amp;rsquo;t have questions for, laden with a sense of how much I didn&amp;rsquo;t know but needed to know before diving into a lifetime of relationship. The Kellers&#39; focus on the gospel, though elementary, provided the logical, relational, and structural basis I could plant myself on while seeking answers in the rest of their writings. While &amp;ldquo;Some Practical Counsel for Marriage Seekers&amp;rdquo; (p. 237–249) offers a comprehensive list of things to think about when one finds themselves in the stage I&amp;rsquo;m in, I found myself gravitating more towards the theoretical, conceptual constructs around marriage: the commitments to sacrificial love with justifications fleshed out beyond &amp;ldquo;because Jesus sacrificed&amp;rdquo;; a discussion of gender differences while using scalpel-like precision to cut away the cultural baggage in tow; and a beautiful image of striving towards our true selves as an answer to the day-to-day frustrations encountered in living so intimately with another messy, broken human.&lt;/p&gt;
&lt;p&gt;The most radical idea for me is a consequence of eternal commitment: in marriage, the frustrations and shortcomings of ourselves and our partners are entirely effects of sin which obscure the true nature of a person, but it is that true version which we bond ourselves to in marriage. Some scattered quotations on the matter:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Within this Christian vision for marriage, here&amp;rsquo;s what it means to fall in love. It is to look at another person and get a glimpse of the person God is creating, and to say &amp;ldquo;I see who God is making you, and it excites me! I want to be part of that. I want to partner with you and God in the journey you are taking to his throne. And when we get there, I will look at your magnificence and say, &amp;lsquo;I always knew you could be like this. I got glimpses of it on earth, but now look at you!&#39;&amp;rdquo; Each spouse should see the great thing that Jesus is doing in the life of their mate through the Word, the gospel.&lt;/p&gt;
&lt;p&gt;— &lt;em&gt;The Meaning of Marriage&lt;/em&gt;, page 132.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;If you don&amp;rsquo;t see your mate&amp;rsquo;s deep flaws and weaknesses and dependencies, you&amp;rsquo;re not even in the game. But if you don&amp;rsquo;t get excited about the person your spouse has already grown into and will become, you aren&amp;rsquo;t tapping into the power of marriage as spiritual friendship. The goal is to see something absolutely ravishing that God is making of the beloved. You see even now flashes of glory. You want to help your spouse become the person God wants him or her to be.&lt;/p&gt;
&lt;p&gt;— &lt;em&gt;The Meaning of Marriage&lt;/em&gt;, page 134.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;hellip;What keeps the marriage going is your commitment to your spouse&amp;rsquo;s holiness. You&amp;rsquo;re committed to his or her beauty. You&amp;rsquo;re committed to his greatness and perfection. You&amp;rsquo;re committed to her honesty and passion for the things of God. That&amp;rsquo;s your job as a spouse. Any lesser goal than that, any smaller purpose, and you&amp;rsquo;re just playing at being married.&lt;/p&gt;
&lt;p&gt;— &lt;em&gt;The Meaning of Marriage&lt;/em&gt;, page 135.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;While I&amp;rsquo;m not entirely in agreement with the handling of gender norms in this book (though they are still more progressive than one might expect), many other ideas were very helpful. I could see myself coming back to these ideas time and time again to get a healthy dose of perspective in the midst of my laughable, honest, heart-wrenching attempts at knowing and being known, loving and being loved. But for now, this has given me a little more confidence to take the first step.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Many people have asked me &amp;ldquo;How can you tell whether you&amp;rsquo;ve got a friendship on which you can base a marriage?&amp;rdquo; The answer that Kathy and I have always given is this. When you see the problems in each other, do you just want to run away, or do you find a desire to work on them together? If the second impulse is yours, then you have the makings of a marriage. Do you obsess over your partner&amp;rsquo;s external shortcomings, or can you see the beauty within, and do you want to see it increasingly released? Then move forward. The power of truth that marriage has should hold no fear for you.&lt;/p&gt;
&lt;p&gt;— &lt;em&gt;The Meaning of Marriage&lt;/em&gt;, page 159.&lt;/p&gt;
&lt;/blockquote&gt;
</description>
    </item>

    <item>
      <title>The Bronze Bow</title>
      <link>https://mhmmoshtaghi.github.io/review/book-the-bronze-bow/</link>
      <pubDate>Wed, 18 Jan 2017 12:00:00 -0700</pubDate>
      <guid>https://mhmmoshtaghi.github.io/review/book-the-bronze-bow/</guid>
      <description>&lt;p&gt;This story is a powerful one, using Israel at the time of Jesus not as a backdrop but as a fully manifested world. Daniel, a teenager by our standards but a grown man by theirs, makes a vow to live and to die for God&amp;rsquo;s Victory, a victory he believes can only be achieved when the despised Romans are driven from their land. His desire for his people to be free quickly and characteristically becomes marked by an intense hatred for the Romans, and this hatred becomes the very fabric of his existence. However, as his friendship with scholarly twins Joel and Thacia develops and he adopts the responsibility of caring for his sister, he bruises himself against the rigidity of his own resolve, all the while being lured inexplicably to the words of the teacher Jesus. The tension between his longing for the destruction of the oppressor and Jesus&amp;rsquo;s countercultural message of a Kingdom already come wage a war in Daniel&amp;rsquo;s mind as he gathers recruits to fight for The Cause. But it requires everything that Daniel had put his hope in — The Cause, his self-sufficiency, and his hatred — to fail him before he encounters Jesus radically and transformatively, giving him a way to be at peace with everything he had run from and with everything he would now live into.&lt;/p&gt;
&lt;p&gt;Reading this book made me feel a kind of pained longing that I don&amp;rsquo;t usually feel. I read it in a time of my life marked by dryness: the absence of a pulsing, vibrant relationship with God. And every time Speare depicted Jesus speaking to the children, whispering to the crippled, or touching the lame, my heart ached. I began to crave that Jesus, the giver of life and hope to the lonely and rejected. I wanted so badly to see him more — much more than Daniel did most of the time, which left me frustrated in watching Daniel accidentally but continuously perpetuate the very brokenness that haunted him instead of turning to the one that breaks every chain.&lt;/p&gt;
&lt;p&gt;As frustrated as I was with Daniel, it&amp;rsquo;s clear that the Jews of Israel were much more frustrated with Jesus. The Zealots wanted him to repel the forces of Rome, but he would not fight. The people of Capernaum wanted him, but not all understood him. The crowds wanted to crown him king, but instead he slipped away into the hills at night to pray. And yet, he upheld that the Kingdom of Heaven had come. While much of the &amp;ldquo;history&amp;rdquo; is familiar and biblical, &lt;em&gt;The Bronze Bow&lt;/em&gt; provides a window from which to watch people grapple with their own expectations as they looked for deliverance from a situation they deemed &amp;ldquo;all wrong,&amp;rdquo; &amp;ldquo;backwards,&amp;rdquo; and &amp;ldquo;not what God would want.&amp;rdquo; I think there&amp;rsquo;s an important lesson to be learned there.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;If he is the Messiah, how soon will he lead us against the enemy?&amp;rdquo;
Simon walked on for a time without answering. Finally, he spoke. &amp;ldquo;He will never lead us against Rome, Daniel. I have given up all hope of that.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;[&amp;hellip;] &amp;ldquo;Then why do you stay with him?&amp;rdquo; All the boy&amp;rsquo;s bitterness broke through the reproach.&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Where else could I go?&amp;rdquo; Simon answered.&lt;/p&gt;
&lt;p&gt;&amp;ldquo;What has he offered you that is worth more than Israel&amp;rsquo;s freedom?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;He has offered me the kingdom.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Daniel&amp;rsquo;s anger was rising. &amp;ldquo;When do you think you&amp;rsquo;ll have this kingdom?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;You will not understand this,&amp;rdquo; said Simon. &amp;ldquo;In a way, I have it already.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;That&amp;rsquo;s fine!&amp;rdquo; the boy&amp;rsquo;s scorn was close to tears. &amp;ldquo;You have the kingdom! You can shut your eyes while all around you–&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;I have not shut my eyes,&amp;rdquo; said Simon. &amp;ldquo;I know well enough that nothing in Israel is changed. But I know that it will be, even if I never live to see it with my own eyes.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Listen to me, Daniel,&amp;rdquo; he went on. &amp;ldquo;You&amp;rsquo;ve seen him caring for those people — the ones so low that no one, not I or anyone else, cared what happened to them. When I see that, I know that the God of Israel has not forgotten us. Or why would He have sent Jesus to them, instead of to the rich and learned? Like a shepherd, he says, who will not let any of his sheep be lost. I&amp;rsquo;m a poor man, and ignorant, but I know now that with a God like that I am safe.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;[&amp;hellip;] &amp;ldquo;What has he done to prove it? How do you know you&amp;rsquo;re not risking your life for nothing?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;We can never know,&amp;rdquo; Simon answered slowly. &amp;ldquo;God hides the future from man&amp;rsquo;s eyes. We are forced to choose, not knowing. I have chosen Jesus.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;— &lt;em&gt;The Bronze Bow&lt;/em&gt;, pages 243–244.&lt;/p&gt;
&lt;/blockquote&gt;
</description>
    </item>

    <item>
      <title>Heroes of the Storm</title>
      <link>https://mhmmoshtaghi.github.io/review/videogame-heroes-of-the-storm/</link>
      <pubDate>Tue, 03 Jan 2017 12:00:00 -0700</pubDate>
      <guid>https://mhmmoshtaghi.github.io/review/videogame-heroes-of-the-storm/</guid>
      <description>&lt;p&gt;&lt;em&gt;Note: This review reflects the state of Heroes just after the Nexus Challenge and the Feast of the Winter Veil 2016.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Heroes of the Storm&lt;/em&gt; is a MOBA that felt fresh and exciting at the time of its debut, pitting itself against the genre giants &lt;em&gt;Dota 2&lt;/em&gt; and &lt;em&gt;League of Legends&lt;/em&gt;. It offered many maps with varying level design and side objectives which added to the standard formula of tower/base pushing, and — if nothing else — provided Blizzard fans a battleground on which characters from all their favorite games could slash, shoot, claw, hook, and magic their way to victory.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Heroes&lt;/em&gt; does many things well. Its gameplay is, at worst, a well polished MOBA experience. At best, teams move between mercenary camps, team fights, and side objectives with fluidity, emphasizing just how natural the game has made it for players to act as a unit, rather than individuals. XP and levelling is done as a team, so excessive farm management or kill-stealing are nonfactors. Mounts allow for quick traversal of the map, which is an engaging alternative to stocking up on teleport scrolls in fear of not being able to assist your team in times of need (&lt;em&gt;Dota 2&lt;/em&gt;) or, even worse, walking on foot back to the action after every death (&lt;em&gt;Overwatch&lt;/em&gt;). In a similar vein of encouraging cooperation and limiting toxicity, the lack of an all-chat stops players from flaming their opponents. Aesthetically, every character is reconstructed with love and integrity to their original game representations, and the worlds, music, and announcers feel right at home in the Blizzard universe.&lt;/p&gt;
&lt;p&gt;Player progression is satisfactory. In what effectively reduces to grinding, players gain XP for their account and per hero by playing matches. A small amount of gold is also earned at the end of each match, and can be used to buy heroes from the roster and certain items from the shop. Quests provide a more substantial source of gold revenue, but also err on the side of grinding instead of skill. Compared to compendium challenges in &lt;em&gt;Dota 2&lt;/em&gt; which push the player to actually do something (e.g., &amp;ldquo;stun for a total of x seconds&amp;rdquo;), &amp;ldquo;play 8 games&amp;rdquo; feels like a grab for time. Still, the promise of being able to unlock the full roster of heroes and a limited variety of cosmetics (e.g., a hero&amp;rsquo;s &amp;ldquo;master skin&amp;rdquo; at level 10) offers some reward for an otherwise repetitive structure.&lt;/p&gt;
&lt;p&gt;Repetition is hardly the mark of a bad game, however. Instead, &lt;em&gt;Heroes&lt;/em&gt; fails most notably in its inability to provide the player with a meaningful representation of what all that repetition has summed to. The statistics hardly even deserve that name; they simply count how many games and kills a player has achieved with each hero, and win rates per map. Match histories only display whether it was a win or a loss, with no details on how the player performed, what talents were selected, or even the gamertags of the other players involved. There is no doubt in my mind that this data is available to the developers (as such data is often a driving force in informing hero balances), so including it in the UI seems like an obvious area of needed improvement for the &lt;em&gt;Heroes&lt;/em&gt; team.&lt;/p&gt;
&lt;p&gt;Today, in a post-&lt;em&gt;Overwatch&lt;/em&gt;, MOBA-crowded gaming scene, &lt;em&gt;Heroes&lt;/em&gt; struggles to find its place. Several of its most innovative elements such as mounts and talents have been copied by other games (&lt;em&gt;Paladins&lt;/em&gt; and &lt;em&gt;Dota 2: The New Journey&lt;/em&gt;, respectively). Its &amp;ldquo;statistics&amp;rdquo; are laughably barebones, especially for a Blizzard game. Yet its gameplay remains highly polished and its community relatively non-toxic, establishing &lt;em&gt;Heroes&lt;/em&gt; as a place that&amp;rsquo;s inviting to return to from time to time.&lt;/p&gt;
</description>
    </item>

    <item>
      <title>A Markov Chain Algorithm for Compression in Self-Organizing Particle Systems</title>
      <link>https://mhmmoshtaghi.github.io/publication/cannon2016-compression/</link>
      <pubDate>Mon, 25 Jul 2016 00:00:00 +0000</pubDate>
      <guid>https://mhmmoshtaghi.github.io/publication/cannon2016-compression/</guid>
      <description>&lt;h3 id=&#34;related-press&#34;&gt;Related Press&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://discrete-notes.github.io/sss-2020-2-compression&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;SSS 2020 Report 2: Compression of programmable matter.&lt;/a&gt; Laurent Feuilloley. &lt;em&gt;Discrete Notes&lt;/em&gt;, November 2020.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://asunow.asu.edu/20170306-opening-paths-progress-programmable-materials&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Opening Paths to Progress with Programmable Materials.&lt;/a&gt; Joe Kullman. &lt;em&gt;ASU Now&lt;/em&gt;, March 2017. (Also featured in &lt;a href=&#34;http://technews.acm.org/archives.cfm?fo=2017-03-mar/mar-13-2017.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;em&gt;ACM TechNews&lt;/em&gt;&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://rjlipton.wordpress.com/2016/09/25/a-creeping-model-of-computation&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;A Creeping Model of Computation.&lt;/a&gt; Dick Lipton and Ken Regan. &lt;em&gt;Gödel’s Lost Letter and P=NP&lt;/em&gt;, September 2016.&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>

    <item>
      <title>Compression in Self-Organizing Particle Systems</title>
      <link>https://mhmmoshtaghi.github.io/publication/daymude2016-undergradthesis/</link>
      <pubDate>Tue, 31 May 2016 00:00:00 +0000</pubDate>
      <guid>https://mhmmoshtaghi.github.io/publication/daymude2016-undergradthesis/</guid>
      <description></description>
    </item>

    <item>
      <title>Sputnik Eyes</title>
      <link>https://mhmmoshtaghi.github.io/review/videogame-sputnik-eyes/</link>
      <pubDate>Wed, 13 Apr 2016 12:00:00 -0700</pubDate>
      <guid>https://mhmmoshtaghi.github.io/review/videogame-sputnik-eyes/</guid>
      <description>&lt;p&gt;&lt;em&gt;Sputnik Eyes&lt;/em&gt; is a puzzle game adorned with a playful atmosphere in which you&amp;rsquo;re tasked with guiding exploratory colored robots to matching color positions in order to discover new planets. The aesthetic is greatly inspired by space exploration and the mathematical field of graph theory, which delivers enjoyable mechanics for mathy logic puzzles in minimalist artwork and easily understood controls. The UI is full of adorable artwork, reminiscent of cartoon depictions of outer space that might decorate a child&amp;rsquo;s bedroom. The soundtrack is similarly dreamy, leveraging a handful of light, instrumental electronic songs on rotation to keep any one from becoming overplayed.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-sputnik-eyes/level_hu4b4ff64bd98f5c51248ec04c7cd85531_222619_6a26b4128c9b22a4c816c798d1ddd973.png 400w,
               /review/videogame-sputnik-eyes/level_hu4b4ff64bd98f5c51248ec04c7cd85531_222619_8d5250ef489b43569b5e6b8d194c8cb1.png 760w,
               /review/videogame-sputnik-eyes/level_hu4b4ff64bd98f5c51248ec04c7cd85531_222619_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-sputnik-eyes/level_hu4b4ff64bd98f5c51248ec04c7cd85531_222619_6a26b4128c9b22a4c816c798d1ddd973.png&#34;
               width=&#34;428&#34;
               height=&#34;760&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;Although the levels vary in the layout of finishing positions and the number of robots, gameplay does have the potential to get somewhat repetitive, which I feel the game designer — Shelly Alon, who developed this game singlehandedly — was likely aware of. Completed levels form constellations (out of planets, not stars), and the game ends after just 65 planets — setting itself apart from content-vomiters like &lt;em&gt;Candy Crush&lt;/em&gt; — and doesn&amp;rsquo;t force players to replay levels extensively to achieve some unlikely high score. Instead, there are challenges to complete levels under a (generous) time limit, and to do so in the minimum possible number of robot moves, providing a shallow level of replayability for those who want it.&lt;/p&gt;














&lt;figure  &gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img alt=&#34;&#34; srcset=&#34;
               /review/videogame-sputnik-eyes/constellation_huec79b848a40fbc6e180e238cf7544ebf_147126_e6bf3aec57ab147e9593b86c57a013f8.png 400w,
               /review/videogame-sputnik-eyes/constellation_huec79b848a40fbc6e180e238cf7544ebf_147126_3b9036ae65742f576766aa804edbbcda.png 760w,
               /review/videogame-sputnik-eyes/constellation_huec79b848a40fbc6e180e238cf7544ebf_147126_1200x1200_fit_lanczos_3.png 1200w&#34;
               src=&#34;https://mhmmoshtaghi.github.io/review/videogame-sputnik-eyes/constellation_huec79b848a40fbc6e180e238cf7544ebf_147126_e6bf3aec57ab147e9593b86c57a013f8.png&#34;
               width=&#34;428&#34;
               height=&#34;760&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;p&gt;All in all, &lt;em&gt;Sputnik Eyes&lt;/em&gt; is a satisfying puzzle game resulting from heartfelt, thoughtful work that turns a hopeful eye to what lies beyond our atmosphere.&lt;/p&gt;
</description>
    </item>

    <item>
      <title>Compression in Self-Organizing Particle Systems</title>
      <link>https://mhmmoshtaghi.github.io/event/2016asu-undergradthesis/</link>
      <pubDate>Wed, 06 Apr 2016 11:00:00 -0700</pubDate>
      <guid>https://mhmmoshtaghi.github.io/event/2016asu-undergradthesis/</guid>
      <description></description>
    </item>

    <item>
      <title></title>
      <link>https://mhmmoshtaghi.github.io/admin/config.yml</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://mhmmoshtaghi.github.io/admin/config.yml</guid>
      <description></description>
    </item>

  </channel>
</rss>
