<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><atom:link href="https://andrewoberstar.com/" rel="self" type="application/rss+xml"/><title>Andrew Oberstar</title><link>https://andrewoberstar.com/</link><description>My personal blog.</description><lastBuildDate>Sat, 24 Jan 2026 17:26:21 -0600</lastBuildDate><generator>clj-rss</generator><item><guid>https://andrewoberstar.com/posts/2026-01-24-hell/</guid><link>https://andrewoberstar.com/posts/2026-01-24-hell/</link><title>Burn in Hell, Trump</title><description>The list of crimes you have committed is impossible to
enumerate. Every day you take an action that would have been a
career-ending breach of the Presidential oath by anyone who formerly
held that office.</description><pubDate>Sat, 24 Jan 2026 00:00:00 -0600</pubDate></item><item><guid>https://andrewoberstar.com/posts/2024-04-02-dont-commit-to-grgit/</guid><link>https://andrewoberstar.com/posts/2024-04-02-dont-commit-to-grgit/</link><title>Don't commit to grgit</title><description>TL;DR Before you start or continue using grgit, consider whether you really need it. Can you get by with tasks that call out to the git CLI directly, or write one-off tasks using JGit directly? The time will come (but hasn't just yet) when I stop maintenance.</description><pubDate>Tue, 02 Apr 2024 00:00:00 -0500</pubDate></item><item><guid>https://andrewoberstar.com/posts/2020-12-27-why-derl/</guid><link>https://andrewoberstar.com/posts/2020-12-27-why-derl/</link><title>Writing my own REPL</title><description>I'm playing around with a new project, DERL (Data Eval Return Loop, pronounced like Daryll), which I intend to be a data-oriented/REPL-oriented IDE for Clojure.</description><pubDate>Sun, 27 Dec 2020 00:00:00 -0600</pubDate></item><item><guid>https://andrewoberstar.com/posts/2014-11-06-drinking-the-clojure-kool-aid/</guid><link>https://andrewoberstar.com/posts/2014-11-06-drinking-the-clojure-kool-aid/</link><title>Drinking the Clojure Kool-Aid</title><description>As with Scala, my first experience with Clojure was the 7 Languages in 7 Weeks book. That merely gave me a flavor of Clojure's syntax, but didn't lead me to the deep philosophical underpinnings behind Clojure. More recently, I've been watching a lot of Clojure talks and have found Rich Hickey (creator of Clojure to be a very inspiring speaker. His Simple Made Easy talk is easily my favorite, where he lays out a clear distinction between the concepts of simple (as opposed to complex) and easy (as opposed to hard) and how certain programming constructs contain an inherent complexity. That talk also popularized the term complect (to intertwine or braid) within the Clojure community as a way of emphasizing the precise type of complexity that Clojure intends to avoid.</description><pubDate>Thu, 06 Nov 2014 00:00:00 -0600</pubDate></item><item><guid>https://andrewoberstar.com/posts/2014-09-28-quick-gradle-tip-setting-bintray-attributes-for-gradle-plugins/</guid><link>https://andrewoberstar.com/posts/2014-09-28-quick-gradle-tip-setting-bintray-attributes-for-gradle-plugins/</link><title>Setting Bintray Attributes for Gradle Plugins</title><description>As part of the new Gradle plugin portal, you need to set some attributes on the version of your plugin package in Bintray.</description><pubDate>Sun, 28 Sep 2014 00:00:00 -0500</pubDate></item><item><guid>https://andrewoberstar.com/posts/2012-12-30-raspberry-pi-as-ldap-and-dns-introduction/</guid><link>https://andrewoberstar.com/posts/2012-12-30-raspberry-pi-as-ldap-and-dns-introduction/</link><title>Raspberry Pi as LDAP and DNS - Introduction</title><description>For those of you unfamiliar, Raspberry Pi is an inexpensive computer that can run Linux and is about the size of a credit card. I think it was primarily designed for educational purposes -- to get kids into computers -- though it works well for a lot of other use cases. When I got mine, I started off with Raspbmc, the XBMC install for the Pi. I had a few issues and decided to stick with my existing Boxee Box for now.</description><pubDate>Sun, 30 Dec 2012 00:00:00 -0600</pubDate></item><item><guid>https://andrewoberstar.com/posts/2012-12-30-raspberry-pi-as-server-dns-and-dhcp/</guid><link>https://andrewoberstar.com/posts/2012-12-30-raspberry-pi-as-server-dns-and-dhcp/</link><title>Raspberry Pi as Server - DNS and DHCP</title><description>In my previous post, I mentioned I'm trying to set up my Raspberry Pi as an LDAP and DNS server.</description><pubDate>Sun, 30 Dec 2012 00:00:00 -0600</pubDate></item><item><guid>https://andrewoberstar.com/posts/2012-12-20-gradle-sliced-bread/</guid><link>https://andrewoberstar.com/posts/2012-12-20-gradle-sliced-bread/</link><title>Gradle &gt; Sliced Bread</title><description>I'm not really convinced that sliced bread is that much of an improvement over uncut bread, but Gradle is definitely better. Considering how much I've been using Gradle over the last 2 years, I'm surprised I haven't written anything about it yet.</description><pubDate>Thu, 20 Dec 2012 00:00:00 -0600</pubDate></item><item><guid>https://andrewoberstar.com/posts/2012-09-14-if-this-then-that/</guid><link>https://andrewoberstar.com/posts/2012-09-14-if-this-then-that/</link><title>If This Then That</title><description>I heard about If This Then That on Tech News Today a couple weeks ago and just started playing around with it today. It's basically a way for you to automate all kinds of tasks based on different web services (mostly social networks) that you use. Some examples:</description><pubDate>Fri, 14 Sep 2012 00:00:00 -0500</pubDate></item><item><guid>https://andrewoberstar.com/posts/2012-04-01-adventures-in-scalalift-part-1/</guid><link>https://andrewoberstar.com/posts/2012-04-01-adventures-in-scalalift-part-1/</link><title>Adventures in Scala/Lift</title><description>After completing 7 Languages in 7 Weeks, I decided to start working on a project to get my feet wet in Scala. For the past couple weeks I've been reading through Programming in Scala, which is seemingly the definitive Scala book and is written by the language author.</description><pubDate>Sun, 01 Apr 2012 00:00:00 -0500</pubDate></item><item><guid>https://andrewoberstar.com/posts/2012-03-20-65-languages-in-12-days/</guid><link>https://andrewoberstar.com/posts/2012-03-20-65-languages-in-12-days/</link><title>6.5 Languages in 12 Days</title><description>I'm all done with the 7 Languages in 7 Weeks book. Overall, I was very happy with it and recommend it to anyone looking to broaden their programming horizons.</description><pubDate>Tue, 20 Mar 2012 00:00:00 -0500</pubDate></item><item><guid>https://andrewoberstar.com/posts/2012-03-19-7-languages-haskell/</guid><link>https://andrewoberstar.com/posts/2012-03-19-7-languages-haskell/</link><title>7 Languages: Haskell</title><description>The final language of 7 Languages in 7 Weeks was Haskell, the only pure functional language in the book. This is the only chapter where I completely gave up on most of the exercises. More on that later...</description><pubDate>Mon, 19 Mar 2012 00:00:00 -0500</pubDate></item><item><guid>https://andrewoberstar.com/posts/2012-03-18-2-7-languages-clojure/</guid><link>https://andrewoberstar.com/posts/2012-03-18-2-7-languages-clojure/</link><title>7 Languages: Clojure</title><description>Oooooo.... Clojure. Along with Scala, this was one of my most anticipated languages (mainly because of the JVM integration). Clojure is a dialect of Lisp, which is a very old family of programming languages. Most of the syntax is just parentheses.</description><pubDate>Sun, 18 Mar 2012 00:00:00 -0500</pubDate></item><item><guid>https://andrewoberstar.com/posts/2012-03-18-1-7-languages-erlang/</guid><link>https://andrewoberstar.com/posts/2012-03-18-1-7-languages-erlang/</link><title>7 Languages: Erlang</title><description>Chapter 5 of 7 Languages in 7 Weeks is on Erlang. Erlang is a functional language with a strong focus on concurrency and reliability. Its syntax is based on Prolog (i.e. it's weird). The author described it as a language that "makes easy things hard, and hard things easy".</description><pubDate>Sun, 18 Mar 2012 00:00:00 -0500</pubDate></item><item><guid>https://andrewoberstar.com/posts/2012-03-13-7-languages-scala/</guid><link>https://andrewoberstar.com/posts/2012-03-13-7-languages-scala/</link><title>7 Languages: Scala</title><description>Just crossed the halfway point of 7 Languages in 7 Weeks with Scala. This is a hybrid object-oriented and functional language. It's a JVM based language, and provides interoperability with existing Java code. Like, Java it has strong static typing. Unlike Java, Scala can infer types in many cases, removing a lot of extra typing. For example in Java:</description><pubDate>Tue, 13 Mar 2012 00:00:00 -0500</pubDate></item><item><guid>https://andrewoberstar.com/posts/2012-03-10-7-languages-io/</guid><link>https://andrewoberstar.com/posts/2012-03-10-7-languages-io/</link><title>7 Languages: Io</title><description>Chapter 2 of 7 Languages in 7 Weeks is on the Io programming language. Io is a prototypical (like JavaScript) object oriented language. JavaScript usually gives me a bad taste in my mouth, because the prototype style just doesn't feel right. However, now that I have more experience with Io's prototyping, I can see the power. I wouldn't want to build an application with prototypes, but I see now that they have their place.</description><pubDate>Sat, 10 Mar 2012 00:00:00 -0600</pubDate></item><item><guid>https://andrewoberstar.com/posts/2012-03-10-7-languages-prolog/</guid><link>https://andrewoberstar.com/posts/2012-03-10-7-languages-prolog/</link><title>7 Languages: Prolog</title><description>Next up in 7 Languages in 7 Weeks was Prolog. This is a logic programming language. Your "code" defines facts and rules, and then executes queries on them. It's all declarative, you don't ever see the algorithm that Prolog uses. It's a very different way of thinking, since you are just describing the problem, and asking Prolog to solve it for you.</description><pubDate>Sat, 10 Mar 2012 00:00:00 -0600</pubDate></item><item><guid>https://andrewoberstar.com/posts/2012-03-08-7-languages-ruby/</guid><link>https://andrewoberstar.com/posts/2012-03-08-7-languages-ruby/</link><title>7 Languages: Ruby</title><description>I did end up buying Seven Languages in Seven Weeks. This book covers the following languages:</description><pubDate>Thu, 08 Mar 2012 00:00:00 -0600</pubDate></item><item><guid>https://andrewoberstar.com/posts/2012-02-28-relearning-php/</guid><link>https://andrewoberstar.com/posts/2012-02-28-relearning-php/</link><title>Relearning PHP</title><description>Very little of my programming life has been outside of the JVM world. Java was the primary language at my college, and is the primary language at my workplace. Recently, I've gotten into Groovy, which is a dynamic language for the JVM. I dabbled a small amount in C++ and PHP, but didn't stick with them.</description><pubDate>Tue, 28 Feb 2012 00:00:00 -0600</pubDate></item><item><guid>https://andrewoberstar.com/posts/2012-01-12-civility/</guid><link>https://andrewoberstar.com/posts/2012-01-12-civility/</link><title>Civility</title><description>Jon Stewart had a great interview with Senator Jim DeMint (R-IL) on last night's The Daily Show. You can watch the full episode here. You should really watch the extended interview (about 25 minutes) that's linked on the page.</description><pubDate>Thu, 12 Jan 2012 00:00:00 -0600</pubDate></item><item><guid>https://andrewoberstar.com/posts/2012-01-12-unit-testing-legislation/</guid><link>https://andrewoberstar.com/posts/2012-01-12-unit-testing-legislation/</link><title>Unit Testing Legislation</title><description>Just think how cool it would be if you could run unit tests on legislation...</description><pubDate>Thu, 12 Jan 2012 00:00:00 -0600</pubDate></item><item><guid>https://andrewoberstar.com/posts/2011-07-16-sharing-on-google/</guid><link>https://andrewoberstar.com/posts/2011-07-16-sharing-on-google/</link><title>Sharing on Google+</title><description>For those not aware, Google+ allows you to share your posts publicly or to any number of circles, which are user-defined collections of people that they follow the posts of. This was meant to allow for privacy where, for example, if I have some family photos I want to share, I could share them with my family circle rather than publicly (as in Twitter)  or with all of my connections (as in Facebook).</description><pubDate>Sat, 16 Jul 2011 00:00:00 -0500</pubDate></item><item><guid>https://andrewoberstar.com/posts/2011-06-11-netflix-and-recommender-systems/</guid><link>https://andrewoberstar.com/posts/2011-06-11-netflix-and-recommender-systems/</link><title>Netflix and Recommender Systems</title><description>This was written as a speech for a training class at work, so the tone is a little odd for a blog post, but oh well.</description><pubDate>Sat, 11 Jun 2011 00:00:00 -0500</pubDate></item><item><guid>https://andrewoberstar.com/posts/2011-04-17-the-budget-and-the-gang-of-six/</guid><link>https://andrewoberstar.com/posts/2011-04-17-the-budget-and-the-gang-of-six/</link><title>The Budget and The Gang of Six</title><description>I was reading the Star Tribune today, which had a few budget related articles. One was related to the Gang of Six who is trying to get a bipartisan budget deal going (note, this is actually an NY Times article).  They also mentioned the NY Times budget calculator from November. I played around with it for a while (here's my plan), which surprisingly, required less tax increases than I would have expected.</description><pubDate>Sun, 17 Apr 2011 00:00:00 -0500</pubDate></item><item><guid>https://andrewoberstar.com/posts/2011-03-31-android-open/</guid><link>https://andrewoberstar.com/posts/2011-03-31-android-open/</link><title>Android ... Open?</title><description>BusinessWeek posted an article last night about Android's openness.</description><pubDate>Thu, 31 Mar 2011 00:00:00 -0500</pubDate></item><item><guid>https://andrewoberstar.com/posts/2011-03-20-att-and-t-mobile-net-neutrality/</guid><link>https://andrewoberstar.com/posts/2011-03-20-att-and-t-mobile-net-neutrality/</link><title>AT&amp;T and T-Mobile ... Net Neutrality?</title><description>So the big story today is the AT&amp;T acquisition of T-Mobile. Here's the announcement.</description><pubDate>Sun, 20 Mar 2011 00:00:00 -0500</pubDate></item><item><guid>https://andrewoberstar.com/posts/2010-03-14-2nd-prize-cancelled/</guid><link>https://andrewoberstar.com/posts/2010-03-14-2nd-prize-cancelled/</link><title>2nd Prize Cancelled</title><description>Netflix has officially nixed Netflix Prize 2 over privacy concerns. So I guess that's it for this blog.</description><pubDate>Sun, 14 Mar 2010 00:00:00 -0600</pubDate></item><item><guid>https://andrewoberstar.com/posts/2009-11-06-netflix-prize-part-2/</guid><link>https://andrewoberstar.com/posts/2009-11-06-netflix-prize-part-2/</link><title>Netflix Prize: Part 2</title><description>Netflix is coming back with another supposedly harder and timed challenge. Stay tuned...</description><pubDate>Fri, 06 Nov 2009 00:00:00 -0600</pubDate></item><item><guid>https://andrewoberstar.com/posts/2009-06-19-prize-over/</guid><link>https://andrewoberstar.com/posts/2009-06-19-prize-over/</link><title>Prize Over</title><description>Haven't posted in a while, but last call for the Netflix Prize has been out for nearly a month. There may finally be a winner. I'm wondering if the site will be shut down after that or if it will keep going. They would of course have to come up with some new reasoning for the project, since they've already got a 10% improvement over their algorithm.</description><pubDate>Fri, 19 Jun 2009 00:00:00 -0500</pubDate></item><item><guid>https://andrewoberstar.com/posts/2009-05-03-project-over/</guid><link>https://andrewoberstar.com/posts/2009-05-03-project-over/</link><title>Project Over</title><description>I finished up my project last Monday with my senior seminar presentation.</description><pubDate>Sun, 03 May 2009 00:00:00 -0500</pubDate></item><item><guid>https://andrewoberstar.com/posts/2009-04-07-nsvd1-failure/</guid><link>https://andrewoberstar.com/posts/2009-04-07-nsvd1-failure/</link><title>NSVD1 Failure</title><description>I went through my NSVD1 code many times, rewriting it completely four or five times, modifying it countless times, but never beating that 1.013. I even redid the math in that paper to make sure there weren't typos, and I don't have time to try and figure that out anymore.</description><pubDate>Tue, 07 Apr 2009 00:00:00 -0500</pubDate></item><item><guid>https://andrewoberstar.com/posts/2009-04-03-nsvd1-grr/</guid><link>https://andrewoberstar.com/posts/2009-04-03-nsvd1-grr/</link><title>NSVD1 Grr...</title><description>So I tried to work on Gravity's training algorithm for Patarek's NSVD1 recommender. And utterly failed. I'm either reading it wrong, typing wrong, or not understanding the notation, but it's supposed to give me a RMSE of 0.9344, but mine has gone between. 1.013 and 2 something. Yeah...</description><pubDate>Fri, 03 Apr 2009 00:00:00 -0500</pubDate></item><item><guid>https://andrewoberstar.com/posts/2009-03-24-progress-without-perfection/</guid><link>https://andrewoberstar.com/posts/2009-03-24-progress-without-perfection/</link><title>Progress Without Perfection</title><description>Initially, I thought that given the nice detail in the Gravity team's papers, I would be able to implement these and get very close scores. It has turned out not to be the case. As the models get bigger and more complex, my results have moved farther away from theirs. Not terribly far, but far enough. This could be a factor of details they didn't include in the papers, details I missed in the papers, or my misinterpretations (or programming errors) in implementing them.</description><pubDate>Tue, 24 Mar 2009 00:00:00 -0500</pubDate></item><item><guid>https://andrewoberstar.com/posts/2009-03-17-dont-rush-your-math/</guid><link>https://andrewoberstar.com/posts/2009-03-17-dont-rush-your-math/</link><title>Don't Rush Your Math</title><description>I've been trying to implement Gravity's BRISMF#250 model but have been getting much higher RMSEs. I had no idea what was wrong so I decided to move on and start implementing the code to retrain features after the initial training. To test, I had to rerun my BRISMF#1 model which resulted in an RMSE 0.01 higher, which made no sense. I looked through my code for changes I've made since I initially ran that and came across an error.</description><pubDate>Tue, 17 Mar 2009 00:00:00 -0500</pubDate></item><item><guid>https://andrewoberstar.com/posts/2009-03-13-4-success-relatively/</guid><link>https://andrewoberstar.com/posts/2009-03-13-4-success-relatively/</link><title>Success (Relatively)</title><description>So now that the data is sorted by date, as the Gravity team describes in their paper, and everything worked according to plan. It ran in 13 epochs instead of 50-ish and got a .9217 RMSE instead of 1.0014.</description><pubDate>Fri, 13 Mar 2009 00:00:00 -0500</pubDate></item><item><guid>https://andrewoberstar.com/posts/2009-03-13-2-things-ive-learned-about-java/</guid><link>https://andrewoberstar.com/posts/2009-03-13-2-things-ive-learned-about-java/</link><title>Things I've Learned About Java</title><description>Doing a project with this scale of data (100 million ratings, by 480189 users, on 17770 movies) shows a person just how much they don't know about programming yet.</description><pubDate>Fri, 13 Mar 2009 00:00:00 -0500</pubDate></item><item><guid>https://andrewoberstar.com/posts/2009-03-13-1-my-first-attempts/</guid><link>https://andrewoberstar.com/posts/2009-03-13-1-my-first-attempts/</link><title>My First Attempts</title><description>I'll preface this by saying I have no hopes, expectations, or anything else of actually competing in this prize. I came into this hoping to learn about recommender systems.</description><pubDate>Fri, 13 Mar 2009 00:00:00 -0500</pubDate></item><item><guid>https://andrewoberstar.com/posts/2009-03-13-3-matrix-factorization/</guid><link>https://andrewoberstar.com/posts/2009-03-13-3-matrix-factorization/</link><title>Matrix Factorization</title><description>The idea behind matrix factorization -- which is similar, if not the same, as what the Netflix community is calling SVD, singular vector decomposition or something -- is that you can estimate an I x J matrix R (the ratings matrix) by multiplying two smaller matrices: an I x K and a K x J. Each of those K rows/columns is known as a feature and the matrix factorization (MF) algorithm will estimate the scores for each user and movie.</description><pubDate>Fri, 13 Mar 2009 00:00:00 -0500</pubDate></item></channel></rss>