<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title></title>
    <description>Continuous improvement through project, practices, self</description>
    <link>http://uebercomputing.com/</link>
    <atom:link href="http://uebercomputing.com/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Sat, 09 Sep 2023 17:35:21 +0000</pubDate>
    <lastBuildDate>Sat, 09 Sep 2023 17:35:21 +0000</lastBuildDate>
    <generator>Jekyll v3.9.3</generator>
    
      <item>
        <title>Presentation: Clean Code</title>
        <description>&lt;h1 id=&quot;presentation-clean-code&quot;&gt;Presentation: Clean Code&lt;/h1&gt;
&lt;p&gt;This presentation was created for &lt;a href=&quot;https://www.csee.umbc.edu/people/professor-of-practice/abhijit-dutt/&quot;&gt;Prof. Dutt’s&lt;/a&gt; software engineering classes
for the Spring 2021 semester.&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/medale/presentations/blob/master/dutt-softeng-clean-code-2021/CleanCode.pdf&quot;&gt;Clean Code GitHub presentation slides&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Wed, 24 Mar 2021 00:00:00 +0000</pubDate>
        <link>http://uebercomputing.com/general/2021/03/24/clean-code-prez.html</link>
        <guid isPermaLink="true">http://uebercomputing.com/general/2021/03/24/clean-code-prez.html</guid>
        
        <category>programming</category>
        
        <category>coding</category>
        
        <category>software-eng</category>
        
        
        <category>general</category>
        
      </item>
    
      <item>
        <title>Presentation: Computer Science - A breadth-first search</title>
        <description>&lt;h1 id=&quot;northern-virginia-medlife-chapter---computer-science-presentation&quot;&gt;Northern Virginia MEDLIFE chapter - Computer Science presentation&lt;/h1&gt;

&lt;p&gt;The &lt;a href=&quot;https://medlifenova.org/&quot;&gt;MEDLIFE NoVA high school chapter&lt;/a&gt; (Medicine, education, and development for low income families everywhere)
provided virtual presentations on different career fields. MEDLIFE NoVA asked me to target a presentation on Computer Science to a 6th grade level.
That felt a lot more challenging than the more technical presentations that I normally give. Computer Science is such a broad field that it was hard to do it justice in
45 minutes with questions. And there were some great questions after the talk…&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/medale/presentations/blob/master/medlife-nova-cs-2021/MedlifeCS.pdf&quot;&gt;Computer Science - A breadth-first search GitHub presentation slides&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sun, 14 Mar 2021 00:00:00 +0000</pubDate>
        <link>http://uebercomputing.com/general/2021/03/14/nova-medlife-cs.html</link>
        <guid isPermaLink="true">http://uebercomputing.com/general/2021/03/14/nova-medlife-cs.html</guid>
        
        <category>computer-science</category>
        
        <category>presentation</category>
        
        
        <category>general</category>
        
      </item>
    
      <item>
        <title>Presentation: Ammonite - Succinct Scala Shell Scripting</title>
        <description>&lt;h1 id=&quot;ammonite-succinct-scala-shell-scripting&quot;&gt;Ammonite: Succinct Scala Shell Scripting&lt;/h1&gt;
&lt;p&gt;A presentation on the Ammonite Scala shell for the Baltimore Scala meetup on October 24th, 2019.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/medale/prez-ammonite-scala-shell/blob/master/presentation/AmmoniteShell.pdf&quot;&gt;Ammonite Shell GitHub presentation slides&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Thu, 24 Oct 2019 00:00:00 +0000</pubDate>
        <link>http://uebercomputing.com/scala/2019/10/24/ammonite-prez.html</link>
        <guid isPermaLink="true">http://uebercomputing.com/scala/2019/10/24/ammonite-prez.html</guid>
        
        <category>programming</category>
        
        <category>scala</category>
        
        <category>shell</category>
        
        
        <category>scala</category>
        
      </item>
    
      <item>
        <title>Ammonite Scala Shell</title>
        <description>&lt;h1 id=&quot;ammonite-shell&quot;&gt;Ammonite Shell&lt;/h1&gt;

&lt;p&gt;The &lt;a href=&quot;http://ammonite.io&quot;&gt;Ammonite Shell&lt;/a&gt; is a Scala-based shell with built-in
libraries and short-cuts to provide the ability to do fully typed shell programming
in Scala.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;val l = (0 to 1000)
show(l, height=50)

# Multi-line edit:
def foo = {
  val a = 10
  val b = 15
  val c = 30
}
# history shows multi-line (can use up arrow)

# History search:
enter search term, hit Up/down arrow

Also: Ctrl-r, start search, Ctrl-Shift-r cycle through search results

# Import 3rd party library
import $ivy.`com.example::scala:1.2.3`

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h1 id=&quot;examples&quot;&gt;Examples&lt;/h1&gt;

&lt;h2 id=&quot;update-sbt-version-for-all-projects-under-current-directory&quot;&gt;Update sbt version for all projects under current directory&lt;/h2&gt;

&lt;div class=&quot;language-scala highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;#&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Start&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Ammonite&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;with&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;GB&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;of&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;memory&lt;/span&gt;
&lt;span class=&quot;nc&quot;&gt;JAVA_OPTS&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;-Xmx10g&quot;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;amm&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;val&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;allFiles&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;ls&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;py&quot;&gt;rec&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;wd&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;val&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;sbtVersionFiles&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;allFiles&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;py&quot;&gt;filter&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;f&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;=&amp;gt;&lt;/span&gt;
   &lt;span class=&quot;k&quot;&gt;val&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;segmentCount&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;py&quot;&gt;segmentCount&lt;/span&gt;
   &lt;span class=&quot;nf&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;segmentsCount&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
     &lt;span class=&quot;k&quot;&gt;val&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;parentDir&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;py&quot;&gt;getSegment&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;segmentCount&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
     &lt;span class=&quot;k&quot;&gt;val&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;lastSegment&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;py&quot;&gt;last&lt;/span&gt;
     &lt;span class=&quot;n&quot;&gt;parentDir&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;project&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;lastSegment&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;build.properties&quot;&lt;/span&gt;
   &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
     &lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;
   &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;sbtVersionFiles&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;py&quot;&gt;foreach&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;versionFile&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;=&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;//also: write (fail if file exists)&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;//write.append&lt;/span&gt;
  &lt;span class=&quot;nv&quot;&gt;write&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;py&quot;&gt;over&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;versionFile&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;sbt.version=1.2.8\n&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
</description>
        <pubDate>Sat, 17 Aug 2019 00:00:00 +0000</pubDate>
        <link>http://uebercomputing.com/scala/2019/08/17/ammonite.html</link>
        <guid isPermaLink="true">http://uebercomputing.com/scala/2019/08/17/ammonite.html</guid>
        
        <category>programming</category>
        
        <category>scala</category>
        
        <category>shell</category>
        
        
        <category>scala</category>
        
      </item>
    
      <item>
        <title>Scala Build Tooling</title>
        <description>&lt;h1 id=&quot;faster-scala-builds-with-bloop-and-coursier&quot;&gt;Faster Scala Builds with bloop and coursier&lt;/h1&gt;

&lt;p&gt;One common complaint about Scala is the long time lag for compiles, running
tests and starting up Scala programs. Another challenge about dependency management
in general is the use of libraries depending on other libraries etc. that
all must be downloaded.&lt;/p&gt;

&lt;p&gt;Enter the Scala Center’s &lt;a href=&quot;https://scalacenter.github.io/bloop/&quot;&gt;bloop build server&lt;/a&gt;
to reduce compile, test and run times and the &lt;a href=&quot;https://github.com/coursier/sbt-coursier&quot;&gt;coursier sbt plugin&lt;/a&gt;
to parallelize library dependency downloads with an all Scala dependency management
tool.&lt;/p&gt;

&lt;h2 id=&quot;bloop-server&quot;&gt;Bloop server&lt;/h2&gt;

&lt;p&gt;The Bloop server as supports the &lt;a href=&quot;https://github.com/scalacenter/bsp&quot;&gt;build server protocol (bsp)&lt;/a&gt; that allows
integration with the IntelliJ Idea IDE and integrates with sbt, Maven, Gradle and Mill.&lt;/p&gt;

&lt;h3 id=&quot;ubuntu-install&quot;&gt;Ubuntu Install&lt;/h3&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# Installs to $HOME/.bloop
curl -L https://github.com/scalacenter/bloop/releases/download/v1.3.2/install.py | python

# Add bloop to PATH in .bashrc
PATH=$HOME/.bloop:....

# Add autocompletion ~/.bash_profile
. $HOME/.bloop/bash/bloop
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;startstop-via-systemd&quot;&gt;Start/Stop via systemd&lt;/h3&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;systemctl --user enable $HOME/.bloop/systemd/bloop.service
systemctl --user daemon-reload
journalctl --user-unit bloop
systemctl --user status bloop
systemctl --user start bloop # also stop/restart
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;sbt-integration&quot;&gt;sbt integration&lt;/h3&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# ${PROJECT_ROOT}/project/plugins.sbt
# https://scalacenter.github.io/bloop/setup
addSbtPlugin(&quot;ch.epfl.scala&quot; % &quot;sbt-bloop&quot; % &quot;1.3.2&quot;)

sbt
&amp;gt; bloopInstall #re-run when changing dependencies or build-related artifacts, modules etc.

Now compile, test run on bloop server
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;coursier-sbt-plugin&quot;&gt;Coursier sbt plugin&lt;/h2&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# Edit or create ${PROJECT_ROOT}/project/project/plugins.sbt
// https://github.com/coursier/sbt-coursier/releases
// Setup: https://get-coursier.io/docs/sbt-coursier
// also see project/plugins.sbt
addSbtPlugin(&quot;io.get-coursier&quot; % &quot;sbt-coursier&quot; % &quot;2.0.0-RC3-1&quot;)

# Edit or create ${PROJECT_ROOT}/project/plugins.sbt
// https://github.com/coursier/sbt-coursier/releases
// Setup: https://get-coursier.io/docs/sbt-coursier
// also see project/project/plugins.sbt
addSbtCoursier
classpathTypes += &quot;maven-plugin&quot;
coursierUseSbtCredentials := true
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;checksum-problems&quot;&gt;Checksum problems&lt;/h3&gt;
&lt;p&gt;When using the 1.x version of the coursier sbt plugin I ran into some problems
with a 3rd party artifact checksum not being correct. Following the
&lt;a href=&quot;https://github.com/coursier/coursier/issues/319&quot;&gt;comments on coursier ticket 319&lt;/a&gt;
I added the following but haven’t needed it since in other projects:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;coursierChecksums := Nil
coursierArtifactsChecksums := Nil
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
</description>
        <pubDate>Fri, 09 Aug 2019 00:00:00 +0000</pubDate>
        <link>http://uebercomputing.com/scala/2019/08/09/scala-build-tooling.html</link>
        <guid isPermaLink="true">http://uebercomputing.com/scala/2019/08/09/scala-build-tooling.html</guid>
        
        <category>programming</category>
        
        <category>scala</category>
        
        <category>build</category>
        
        
        <category>scala</category>
        
      </item>
    
      <item>
        <title>Presentation: Data Engineering with Apache Spark</title>
        <description>&lt;h1 id=&quot;data-engineering-with-apache-spark&quot;&gt;Data Engineering with Apache Spark&lt;/h1&gt;
&lt;p&gt;A presentation on doing data engineering with Apache Spark for the Baltimore Scala meetup on May 2nd, 2019.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/medale/prez-spark-dataengineering/blob/master/presentation/SparkDataEngineering.pdf&quot;&gt;Data Engineering with Apache Spark GitHub presentation slides&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Thu, 02 May 2019 00:00:00 +0000</pubDate>
        <link>http://uebercomputing.com/scala/2019/05/02/spark-dataengineering.html</link>
        <guid isPermaLink="true">http://uebercomputing.com/scala/2019/05/02/spark-dataengineering.html</guid>
        
        <category>programming</category>
        
        <category>scala</category>
        
        <category>spark</category>
        
        <category>big-data</category>
        
        <category>data-engineering</category>
        
        
        <category>scala</category>
        
      </item>
    
      <item>
        <title>Reactive Summit 2018 - 1</title>
        <description>&lt;h1 id=&quot;new-or-forgotten-resources-referenced-in-talks&quot;&gt;New or forgotten resources referenced in talks&lt;/h1&gt;

&lt;h2 id=&quot;online-courses&quot;&gt;Online courses&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;Free Lightbend Reactive Architecture courses (for certification):
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://cognitiveclass.ai/courses/reactive-architecture-introduction/&quot;&gt;Introduction to Reactive Principles&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://cognitiveclass.ai/courses/reactive-architecture-ddd/&quot;&gt;Domain Driven Design&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://cognitiveclass.ai/courses/reactive-architecture-microservices/&quot;&gt;Reactive Microservices&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://cognitiveclass.ai/courses/reactive-architecture-building-scalable-systems/&quot;&gt;Building Scalable Systems&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;Not released yet:
        &lt;ul&gt;
          &lt;li&gt;Distributed Message Patterns&lt;/li&gt;
          &lt;li&gt;Reactive Architecture: CQRS &amp;amp; Event Sourcing&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;papersweb-content&quot;&gt;Papers/Web content&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.vldb.org/pvldb/vol8/p1816-teller.pdf&quot;&gt;Pelkonen, Franklin, Teller et al., Gorilla: A Fast, Scalable, In-Memory Time Series Database, VLDB, 2015&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Tyler Akidau, The world beyond batch
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://www.oreilly.com/ideas/the-world-beyond-batch-streaming-101&quot;&gt;Streaming 101, 2015&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://www.oreilly.com/ideas/the-world-beyond-batch-streaming-102&quot;&gt;Streaming 102, 2016&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.knoldus.com/&quot;&gt;Knoldus Blog&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;e.g. node.js testing with Gatling&lt;/li&gt;
      &lt;li&gt;Welcome, Akka Typed!!&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;books&quot;&gt;Books&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.safaribooksonline.com/library/view/reactive-application-development/9781617292460/&quot;&gt;Sean Walsh, Duncan DeVore, Brian Hanafee: Reactive Application Development, Manning, 2018&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Not published yet: &lt;a href=&quot;https://www.amazon.com/Stream-Processing-Apache-Spark-Optimizing/dp/1491944242&quot;&gt;Francois Garillot, Gerard Maas, Stream Processing with Apache Spark: Best Practices for Scaling and Optimizing Apache Spark, O’Reilly, 2019&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;libraries&quot;&gt;Libraries&lt;/h2&gt;

&lt;h3 id=&quot;big-data&quot;&gt;Big Data&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/spark-notebook/spark-notebook/&quot;&gt;Spark Notebook&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;performance-monitoring-metrics&quot;&gt;Performance monitoring, metrics&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/filodb/FiloDB&quot;&gt;FiloDB time series / event / operational database&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;Great keynote on this by Evan Chan, Apple, &lt;a href=&quot;https://twitter.com/Evanfchan&quot;&gt;@Evanfchan&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://riemann.io/&quot;&gt;Riemann distributed systems monitoring&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/aragozin/jvm-tools&quot;&gt;Alexey Ragozin, jvm-tools/Swiss Java Knife&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;“Small set of tools for JVM troublshooting, monitoring and profiling.”&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://openjdk.java.net/projects/code-tools/jmh/&quot;&gt;Java Microbenchmark Harness&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://blog.codecentric.de/en/2017/10/performance-measurement-with-jmh-java-microbenchmark-harness/&quot;&gt;Kevin Peters, Performance measurement with JMH - Java Microbenchmark Harness, 2017&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/influxdata/telegraf&quot;&gt;Influxdata Telegraf&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;“plugin-driven server agent for collecting &amp;amp; reporting metrics”&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;reactive-frameworks&quot;&gt;Reactive Frameworks&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://rsocket.io/&quot;&gt;RSocket (originally from Netflix)&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;Polyglot, reactive streams binary protocol&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;around-containers&quot;&gt;Around containers&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://kubernetes.io/docs/setup/minikube/&quot;&gt;Minikube - local Kubernetes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://strimzi.io/&quot;&gt;Strimzi - Apache Kafka on OpenShift and Kubernetes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sun, 28 Oct 2018 00:00:00 +0000</pubDate>
        <link>http://uebercomputing.com/scala/2018/10/28/reactive-summit-2018.html</link>
        <guid isPermaLink="true">http://uebercomputing.com/scala/2018/10/28/reactive-summit-2018.html</guid>
        
        <category>programming</category>
        
        <category>scala</category>
        
        <category>akka</category>
        
        <category>streaming</category>
        
        <category>reactive</category>
        
        
        <category>scala</category>
        
      </item>
    
      <item>
        <title>Scala Process</title>
        <description>&lt;p&gt;Code uses java.nio.file.Files to list all files in the current directory.
Using Scala JavaConverters we convert the Java iterator to a Scala buffer and
the use Process to call unzip on each file.&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-scala&quot; data-lang=&quot;scala&quot;&gt;&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;scala.collection.JavaConverters._&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;scala.sys.process._&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;java.nio.file._&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;val&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;files&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;Files&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;py&quot;&gt;list&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;Paths&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;py&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;.&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)).&lt;/span&gt;&lt;span class=&quot;py&quot;&gt;iterator&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;py&quot;&gt;asScala&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;files&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;py&quot;&gt;foreach&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;f&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;unzip $f&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;!&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

</description>
        <pubDate>Tue, 29 Aug 2017 00:00:00 +0000</pubDate>
        <link>http://uebercomputing.com/scala/2017/08/29/scala-process.html</link>
        <guid isPermaLink="true">http://uebercomputing.com/scala/2017/08/29/scala-process.html</guid>
        
        <category>programming</category>
        
        <category>scala</category>
        
        <category>process</category>
        
        
        <category>scala</category>
        
      </item>
    
      <item>
        <title>Gimp Python-Fu </title>
        <description>&lt;h1 id=&quot;background&quot;&gt;Background&lt;/h1&gt;
&lt;p&gt;A folder full of jpeg images of different sizes that I needed to resize to
300x300. Not wanting to open each image in Gimp - Tools - Transform Tools - Scale
I was looking for a more automated solution. Gimp’s Python-Fu, Google and Stackoverflow
with kind souls sharing their expertise to the resuce:&lt;/p&gt;

&lt;h1 id=&quot;gimp-python-fu&quot;&gt;Gimp Python-Fu&lt;/h1&gt;
&lt;ul&gt;
  &lt;li&gt;In Gimp go to Filters - Python-Fu - Console&lt;/li&gt;
  &lt;li&gt;Hit Browse to find available Python methods - searched for scale and found
 &lt;em&gt;gimp_image_scale&lt;/em&gt;, which seemed to do what I wanted.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With some more Googling I devised the following, which solves my problem. Pop 
into console and hit enter. See main sources below for proper credit.&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;os&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;get_files&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
     &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;dir&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;filenames&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;ow&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;os&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;walk&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
         &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;filename&lt;/span&gt; &lt;span class=&quot;ow&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;filenames&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
             &lt;span class=&quot;k&quot;&gt;yield&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;os&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;join&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;dir&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;filename&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

             
&lt;span class=&quot;n&quot;&gt;list_files&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;get_files&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'/my_various_images'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;


&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;filename&lt;/span&gt; &lt;span class=&quot;ow&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;list_files&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;image&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pdb&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;file_jpeg_load&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;filename&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;filename&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;pdb&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;gimp_image_scale&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;300&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;300&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;new_img&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pdb&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;gimp_image_duplicate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;layer&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pdb&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;gimp_image_merge_visible_layers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;new_img&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;CLIP_TO_IMAGE&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;pdb&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;gimp_file_save&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;new_img&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;layer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;filename&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'.scaled.jpg'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'?'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;pdb&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;gimp_image_delete&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;new_img&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;h1 id=&quot;main-sources&quot;&gt;Main sources&lt;/h1&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://stackoverflow.com/questions/19104693/how-do-you-call-gimp-file-load&quot;&gt;http://stackoverflow.com/questions/19104693/how-do-you-call-gimp-file-load&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://stackoverflow.com/questions/3207219/how-to-list-all-files-of-a-directory-in-python&quot;&gt;http://stackoverflow.com/questions/3207219/how-to-list-all-files-of-a-directory-in-python (all get_files code)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://stackoverflow.com/questions/26803732/how-do-i-save-export-all-layers-with-gimps-script-fu&quot;&gt;http://stackoverflow.com/questions/26803732/how-do-i-save-export-all-layers-with-gimps-script-fu&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Tue, 20 Dec 2016 00:00:00 +0000</pubDate>
        <link>http://uebercomputing.com/opensource/2016/12/20/gimp-python-fu.html</link>
        <guid isPermaLink="true">http://uebercomputing.com/opensource/2016/12/20/gimp-python-fu.html</guid>
        
        <category>linux</category>
        
        <category>gimp</category>
        
        <category>python-fu</category>
        
        <category>automation</category>
        
        <category>api</category>
        
        
        <category>opensource</category>
        
      </item>
    
      <item>
        <title>Presentation: Spark 2.0 Performance Improvements</title>
        <description>&lt;p&gt;On June 13th I was fortunate to present the latest Apache Spark - Project Tungsten updates, which further improve Spark performance through whole-stage code generation and vectorization.&lt;/p&gt;

&lt;p&gt;See presentation at my github repo at &lt;a href=&quot;https://github.com/medale/presentations/blob/master/spark-performance-2.0-2016-06/SparkPerformance.pdf&quot;&gt;SparkPerformance.pdf&lt;/a&gt;. The src directory of that repo also contains the corresponding example files.&lt;/p&gt;
</description>
        <pubDate>Mon, 13 Jun 2016 00:00:00 +0000</pubDate>
        <link>http://uebercomputing.com/spark/2016/06/13/Spark-2-Performance-Improvements-Presentation.html</link>
        <guid isPermaLink="true">http://uebercomputing.com/spark/2016/06/13/Spark-2-Performance-Improvements-Presentation.html</guid>
        
        <category>spark</category>
        
        <category>tungsten</category>
        
        <category>presentation</category>
        
        <category>meetup</category>
        
        
        <category>spark</category>
        
      </item>
    
  </channel>
</rss>
