diff --git a/drafts/2017-12-12-dataflow.org b/drafts/2017-12-12-dataflow.org deleted file mode 100644 index f834766..0000000 --- a/drafts/2017-12-12-dataflow.org +++ /dev/null @@ -1,42 +0,0 @@ -#+TITLE: Dataflow paradigm (working title) -#+AUTHOR: Chris Hodapp -#+DATE: December 12, 2017 -#+TAGS: technobabble - -I don't know if there's actually anything to write here. - -There is a sort of parallel between the declarative nature of -computational graphs in TensorFlow, and functional programming -(possibly function-level - think of the J language and how important -rank is to its computations). - -Apache Spark and TensorFlow are very similar in a lot of ways. The -key difference I see is that Spark handles different types of data -internally that are more suited to databases, reords, tables, and -generally relational data, while TensorFlow is, well, tensors -(arbitrary-dimensional arrays). - -The interesting part to me with both of these is how they've moved -"bulk" computations into first-class objects (ish) and permitted some -level of introspection into them before they run, as they run, and -after they run. Like I noted in Notes - Paper, 2016-11-13, "One -interesting (to me) facet is how the computation process has been -split out and instrumented enough to allow some meaningful -introspection with it. It hasn't precisely made it a first-class -construct, but still, this feature pervades all of Spark's major -abstractions (RDD, DataFrame, Dataset)." - -# Show Tensorboard example here -# Screenshots may be a good idea too - -Spark does this with a database. TensorFlow does it with numerical -calculations. Node-RED does it with irregular, asynchronous data. - -- [[https://mxnet.incubator.apache.org/how_to/visualize_graph.html][mxnet: How to visualize Neural Networks as computation graph]] -- [[https://medium.com/intuitionmachine/pytorch-dynamic-computational-graphs-and-modular-deep-learning-7e7f89f18d1][PyTorch, Dynamic Computational Graphs and Modular Deep Learning]] -- [[https://github.com/WarBean/hyperboard][HyperBoard: A web-based dashboard for Deep Learning]] -- [[https://www.postgresql.org/docs/current/static/sql-explain.html][EXPLAIN in PostgreSQL]] - - http://tatiyants.com/postgres-query-plan-visualization/ -- https://en.wikipedia.org/wiki/Dataflow_programming -- Pure Data! -- [[https://en.wikipedia.org/wiki/Orange_(software)][Orange]]? diff --git a/drafts/2018-01-30-slope-one.org b/drafts/2018-01-30-slope-one.org deleted file mode 100644 index defa8a3..0000000 --- a/drafts/2018-01-30-slope-one.org +++ /dev/null @@ -1,193 +0,0 @@ ---- -title: Collaborative Filtering with Slope One Predictors -author: Chris Hodapp -date: January 30, 2018 -tags: technobabble, machine learning ---- - -# Needs a brief intro - -# Needs a summary at the end - -Suppose you have a large number of users, and a large number of -movies. Users have watched movies, and they've provided ratings for -some of them (perhaps just simple numerical ratings, 1 to 10 stars). -However, they've all watched different movies, and for any given user, -it's only a tiny fraction of the total movies. - -Now, you want to predict how some user will rate some movie they -haven't rated, based on what they (and other users) have rated. - -That's a common problem, especially when generalized from 'movies' to -anything else, and one with many approaches. (To put some technical -terms to it, this is the [[https://en.wikipedia.org/wiki/Collaborative_filtering][collaborative filtering]] approach to -[[https://en.wikipedia.org/wiki/Recommender_system][recommender systems]]. [[http://www.mmds.org/][Mining of Massive Datasets]] is an excellent free -text in which to read more in depth on this, particularly chapter 9.) - -Slope One Predictors are one such approach to collaborative filtering, -described in the paper [[https://arxiv.org/pdf/cs/0702144v1.pdf][Slope One Predictors for Online Rating-Based -Collaborative Filtering]]. Despite the complex-sounding name, they are -wonderfully simple to understand and implement, and very fast. - -I'll give a contrived example below to explain them. - -Consider a user Bob. Bob is enthusiastic, but has rather simple -tastes: he mostly just watches Clint Eastwood movies. In fact, he's -watched and rated nearly all of them, and basically nothing else. - -Now, suppose we want to predict how much Bob will like something -completely different and unheard of (to him at least), like... I don't -know... /Citizen Kane/. - -Here's Slope One in a nutshell: - -1. First, find the users who rated both /Citizen Kane/ *and* any of - the Clint Eastwood movies that Bob rated. -2. Now, for each movie that comes up above, compute a *deviation* - which tells us: On average, how differently (i.e. how much higher - or lower) did users rate Citizen Kane compared to this movie? (For - instance, we'll have a number for how /Citizen Kane/ was rated - compared to /Dirty Harry/, and perhaps it's +0.6 - meaning that on - average, users who rated both movies rated /Citizen Kane/ about 0.6 - stars above /Dirty Harry/. We'd have another deviation for - /Citizen Kane/ compared to /Gran Torino/, another for /Citizen - Kane/ compared to /The Good, the Bad and the Ugly/, and so on - for - every movie that Bob rated, provided that other users who rated - /Citizen Kane/ also rated the movie.) -3. If that deviation between /Citizen Kane/ and /Dirty Harry/ was - +0.6, it's reasonable that adding 0.6 from Bob's rating on /Dirty - Harry/ would give one prediction of how Bob might rate /Citizen - Kane/. We can then generate more predictions based on the ratings - he gave the other movies - anything for which we could compute a - deviation. -4. To turn this to a single prediction, we could just average all - those predictions together. - -One variant, Weighted Slope One, is nearly identical. The only -difference is in how we average those predictions in step #4. In -Slope One, every deviation counts equally, no matter how many users -had differences in ratings averaged together to produce it. In -Weighted Slope One, deviations that came from larger numbers of users -count for more (because, presumably, they are better estimates). - -Or, in other words: If only one person rated both /Citizen Kane/ and -the lesser-known Eastwood classic /Revenge of the Creature/, and they -happened to think that /Revenge of the Creature/ deserved at least 3 -more stars, then with Slope One, this deviation of -3 would carry -exactly as much weight as thousands of people rating /Citizen Kane/ as -about 0.5 stars below /The Good, the Bad and the Ugly/. In Weighted -Slope One, that latter deviation would count for thousands of times as -much. The example makes it sound a bit more drastic than it is. - -The Python library [[http://surpriselib.com/][Surprise]] (a [[https://www.scipy.org/scikits.html][scikit]]) has an implementation of this -algorithm, and the Benchmarks section of that page shows its -performance compared to some other methods. - -/TODO/: Show a simple Python implementation of this (Jupyter -notebook?) - -* Linear Algebra Tricks - -Those who aren't familiar with matrix methods or algebra can probably -skip this section. Everything I've described above, you can compute -given just some data to work with ([[https://grouplens.org/datasets/movielens/100k/][movielens 100k]], perhaps?) and some -basic arithmetic. You don't need any complicated numerical methods. - -However, the entire Slope One method can be implemented in a very fast -and simple way with a couple matrix operations. - -First, we need to have our data encoded as a *utility matrix*. In a -utility matrix, each row represents one user, each column represents -one item (a movie, in our case), and each element represents a user's -rating of an item. If we have $n$ users and $m$ movies, then this a -$n \times m$ matrix $U$ for which $U_{k,i}$ is user $k$'s rating for -movie $i$ - assuming we've numbered our users and our movies. - -Users have typically rated only a fraction of movies, and so most of -the elements of this matrix are unknown. We can represent this with -another $n \times m$ matrix (specifically a binary matrix), a 'mask' -$M$ in which $M_{k,i}$ is 1 if user $k$ supplied a rating for movie -$i$, and otherwise 0. - -I mentioned *deviation* above and gave an informal definition of it. -The paper gaves a formal but rather terse definition below of the -average deviation of item $i$ with respect to item $j$: - -$$\textrm{dev}_{j,i} = \sum_{u \in S_{j,i}(\chi)} \frac{u_j - u_i}{card(S_{j,i}(\chi))}$$ - -where: -- $u_j$ and $u_i$ mean: user $u$'s ratings for movies $i$ and $j$, respectively -- $u \in S_{j,i}(\chi)$ means: all users $u$ who, in the dataset we're - training on, provided a rating for both movie $i$ and movie $j$ -- $card$ is the cardinality of that set, i.e. for - ${card(S_{j,i}(\chi))}$ it is just how many users rated both $i$ and - $j$. - -That denominator does depend on $i$ and $j$, but doesn't depend on the -summation term, so it can be pulled out, and also, we can split up the -summation as long as it is kept over the same terms: - -$$\textrm{dev}_{j,i} = \frac{1}{card(S_{j,i}(\chi))} \sum_{u \in -S_{j,i}(\chi)} u_j - u_i = \frac{1}{card(S_{j,i}(\chi))}\left(\sum_{u -\in S_{j,i}(\chi)} u_j - \sum_{u \in S_{j,i}(\chi)} u_i\right)$$ - -# TODO: These need some actual matrices to illustrate - -Let's start with computing ${card(S_{j,i}(\chi))}$, the number of -users who rated both movie $i$ and movie $j$. Consider column $i$ of -the mask $M$. For each value in this column, it equals 1 if the -respective user rated movie $i$, or 0 if they did not. Clearly, -simply summing up column $i$ would tell us how many users rated movie -$i$, and the same applies to column $j$ for movie $j$. - -Now, suppose we take element-wise logical AND of columns $i$ and $j$. -The resultant column has a 1 only where both corresponding elements -were 1 - where a user rated both $i$ and $j$. If we sum up this -column, we have exactly the number we need: the number of users who -rated both $i$ and $j$. - -Some might notice that "elementwise logical AND" is just "elementwise -multiplication", thus "sum of elementwise logical AND" is just "sum of -elementwise multiplication", which is: dot product. That is, -${card(S_{j,i}(\chi))}=M_j \bullet M_i$ if we use $M_i$ and $M_j$ for -columns $i$ and $j$ of $M$. - -However, we'd like to compute deviation as a matrix for all $i$ and -$j$, so we'll likewise need ${card(S_{j,i}(\chi))}$ for every single -combination of $i$ and $j$ - that is, we need a dot product between -every single pair of columns from $M$. Incidentally, "dot product of -every pair of columns" happens to be almost exactly matrix -multiplication; note that for matrices $A$ and $B$, element $(x,y)$ of -the matrix product $AB$ is just the dot product of /row/ $x$ of $A$ -and /column/ $y$ of $B$ - and that matrix product as a whole has this -dot product between every row of $A$ and every column of $B$. - -We wanted the dot product of every column of $M$ with every column of -$M$, which is easy: just transpose $M$ for one operand. Then, we can -compute our count matrix like this: - -$$C=M^\top M$$ - -Thus $C_{i,j}$ is the dot product of column $i$ of $M$ and column $j$ -of $M$ - or, the number of users who rated both movies $i$ and $j$. - -That was the first half of what we needed for $\textrm{dev}_{j,i}$. -We still need the other half: - -$$\sum_{u \in S_{j,i}(\chi)} u_j - \sum_{u \in S_{j,i}(\chi)} u_i$$ - -We can apply a similar trick here. Consider first what $\sum_{u \in -S_{j,i}(\chi)} u_j$ means: It is the sum of only those ratings of -movie $j$ that were done by a user who also rated movie $i$. -Likewise, $\sum_{u \in S_{j,i}(\chi)} u_j$ is the sum of only those -ratings of movie $i$ that were done by a user who also rated movie -$j$. (Note the symmetry: it's over the same set of users, because -it's always the users who rated both $i$ and $j$.) - -# TODO: Finish that section (mostly translate from code notes) - -* Implementation - -#+BEGIN_SRC python -print("foo") -#+END_SRC diff --git a/drafts/2018-02-24-ml-rant.org b/drafts/2018-02-24-ml-rant.org deleted file mode 100644 index cb99d2d..0000000 --- a/drafts/2018-02-24-ml-rant.org +++ /dev/null @@ -1,30 +0,0 @@ -#+TITLE: Untitled rant on machine learning hype -#+AUTHOR: Chris Hodapp -#+DATE: February 24, 2018 -#+TAGS: technobabble - -The present state in machine learning feels like an arms-race for -techniques that perfomr better, faster, more efficient, or whatever on -a handful of problems, and not much in terms of killer applications -that actually need this. - -We've all been hearing for a few years about the demand here but -mostly there seems a dearth of companies that actually have any sort -of sustained vision for actual uses of machine learning. Plenty exist -that have grand promises, and plenty of large companies keep trying to -acquire all talent to further that arms race, but that's about it. - -Certainly this will change as machine learning "gets better" but in -order for a lot of improvement to occur there must be at the same time -some actual compelling ideas and applications to drive it. - -In that sense I don't believe that crrent advancements will be that -fruitful on their own. We don't need optimizations, we need -applications. - -Of course this is not the first time a entire industry was imagined -and hyped based on neat technology and little else... - -Right now I feel as though the work is going to those who can actually -articulate the "why" in specific terms, not those with some good -knowledge primarily on the "how". diff --git a/posts/exitwp_raw/2008-03-22-hello-world-2.markdown b/exitwp_raw/2008-03-22-hello-world-2.markdown similarity index 100% rename from posts/exitwp_raw/2008-03-22-hello-world-2.markdown rename to exitwp_raw/2008-03-22-hello-world-2.markdown diff --git a/posts/exitwp_raw/2008-03-24-workfest-with-christian-appalachian-project-day-one.markdown b/exitwp_raw/2008-03-24-workfest-with-christian-appalachian-project-day-one.markdown similarity index 100% rename from posts/exitwp_raw/2008-03-24-workfest-with-christian-appalachian-project-day-one.markdown rename to exitwp_raw/2008-03-24-workfest-with-christian-appalachian-project-day-one.markdown diff --git a/posts/exitwp_raw/2008-03-25-workfest-day-two.markdown b/exitwp_raw/2008-03-25-workfest-day-two.markdown similarity index 100% rename from posts/exitwp_raw/2008-03-25-workfest-day-two.markdown rename to exitwp_raw/2008-03-25-workfest-day-two.markdown diff --git a/posts/exitwp_raw/2008-03-26-workfest-day-three.markdown b/exitwp_raw/2008-03-26-workfest-day-three.markdown similarity index 100% rename from posts/exitwp_raw/2008-03-26-workfest-day-three.markdown rename to exitwp_raw/2008-03-26-workfest-day-three.markdown diff --git a/posts/exitwp_raw/2008-03-27-workfest-day-four.markdown b/exitwp_raw/2008-03-27-workfest-day-four.markdown similarity index 100% rename from posts/exitwp_raw/2008-03-27-workfest-day-four.markdown rename to exitwp_raw/2008-03-27-workfest-day-four.markdown diff --git a/posts/exitwp_raw/2008-03-28-workfest-day-fourfive.markdown b/exitwp_raw/2008-03-28-workfest-day-fourfive.markdown similarity index 100% rename from posts/exitwp_raw/2008-03-28-workfest-day-fourfive.markdown rename to exitwp_raw/2008-03-28-workfest-day-fourfive.markdown diff --git a/posts/exitwp_raw/2008-03-31-stuff-i-experienced-at-work-today.markdown b/exitwp_raw/2008-03-31-stuff-i-experienced-at-work-today.markdown similarity index 100% rename from posts/exitwp_raw/2008-03-31-stuff-i-experienced-at-work-today.markdown rename to exitwp_raw/2008-03-31-stuff-i-experienced-at-work-today.markdown diff --git a/posts/exitwp_raw/2008-04-04-alexander-blu.markdown b/exitwp_raw/2008-04-04-alexander-blu.markdown similarity index 100% rename from posts/exitwp_raw/2008-04-04-alexander-blu.markdown rename to exitwp_raw/2008-04-04-alexander-blu.markdown diff --git a/posts/exitwp_raw/2008-04-18-post-its-and-scrap-notes-starting-20080403.markdown b/exitwp_raw/2008-04-18-post-its-and-scrap-notes-starting-20080403.markdown similarity index 100% rename from posts/exitwp_raw/2008-04-18-post-its-and-scrap-notes-starting-20080403.markdown rename to exitwp_raw/2008-04-18-post-its-and-scrap-notes-starting-20080403.markdown diff --git a/posts/exitwp_raw/2008-04-26-more-scrap-notes-starting-2008-04-18.markdown b/exitwp_raw/2008-04-26-more-scrap-notes-starting-2008-04-18.markdown similarity index 100% rename from posts/exitwp_raw/2008-04-26-more-scrap-notes-starting-2008-04-18.markdown rename to exitwp_raw/2008-04-26-more-scrap-notes-starting-2008-04-18.markdown diff --git a/posts/exitwp_raw/2008-05-05-alix1c-board-edirol-repair.markdown b/exitwp_raw/2008-05-05-alix1c-board-edirol-repair.markdown similarity index 100% rename from posts/exitwp_raw/2008-05-05-alix1c-board-edirol-repair.markdown rename to exitwp_raw/2008-05-05-alix1c-board-edirol-repair.markdown diff --git a/posts/exitwp_raw/2008-05-05-scrap-notes-20080425ish-20080503.markdown b/exitwp_raw/2008-05-05-scrap-notes-20080425ish-20080503.markdown similarity index 100% rename from posts/exitwp_raw/2008-05-05-scrap-notes-20080425ish-20080503.markdown rename to exitwp_raw/2008-05-05-scrap-notes-20080425ish-20080503.markdown diff --git a/posts/exitwp_raw/2008-05-17-overdue-scrap-notes-20080501-0516.markdown b/exitwp_raw/2008-05-17-overdue-scrap-notes-20080501-0516.markdown similarity index 100% rename from posts/exitwp_raw/2008-05-17-overdue-scrap-notes-20080501-0516.markdown rename to exitwp_raw/2008-05-17-overdue-scrap-notes-20080501-0516.markdown diff --git a/posts/exitwp_raw/2008-05-24-20-pages-of-scrap-notes-20080519-0523.markdown b/exitwp_raw/2008-05-24-20-pages-of-scrap-notes-20080519-0523.markdown similarity index 100% rename from posts/exitwp_raw/2008-05-24-20-pages-of-scrap-notes-20080519-0523.markdown rename to exitwp_raw/2008-05-24-20-pages-of-scrap-notes-20080519-0523.markdown diff --git a/posts/exitwp_raw/2008-05-27-old-tattered-notebook-from-1999-notes.markdown b/exitwp_raw/2008-05-27-old-tattered-notebook-from-1999-notes.markdown similarity index 100% rename from posts/exitwp_raw/2008-05-27-old-tattered-notebook-from-1999-notes.markdown rename to exitwp_raw/2008-05-27-old-tattered-notebook-from-1999-notes.markdown diff --git a/posts/exitwp_raw/2008-06-01-semi-organized-scrap-notes-20080526-20080601.markdown b/exitwp_raw/2008-06-01-semi-organized-scrap-notes-20080526-20080601.markdown similarity index 100% rename from posts/exitwp_raw/2008-06-01-semi-organized-scrap-notes-20080526-20080601.markdown rename to exitwp_raw/2008-06-01-semi-organized-scrap-notes-20080526-20080601.markdown diff --git a/posts/exitwp_raw/2008-06-07-notes-20080601-20080607.markdown b/exitwp_raw/2008-06-07-notes-20080601-20080607.markdown similarity index 100% rename from posts/exitwp_raw/2008-06-07-notes-20080601-20080607.markdown rename to exitwp_raw/2008-06-07-notes-20080601-20080607.markdown diff --git a/posts/exitwp_raw/2008-06-18-20080607-20080617-yay-notes.markdown b/exitwp_raw/2008-06-18-20080607-20080617-yay-notes.markdown similarity index 100% rename from posts/exitwp_raw/2008-06-18-20080607-20080617-yay-notes.markdown rename to exitwp_raw/2008-06-18-20080607-20080617-yay-notes.markdown diff --git a/posts/exitwp_raw/2008-07-10-20080618-20080709-really-overdue-notes.markdown b/exitwp_raw/2008-07-10-20080618-20080709-really-overdue-notes.markdown similarity index 100% rename from posts/exitwp_raw/2008-07-10-20080618-20080709-really-overdue-notes.markdown rename to exitwp_raw/2008-07-10-20080618-20080709-really-overdue-notes.markdown diff --git a/posts/exitwp_raw/2008-07-26-20080710-20080726-debris.markdown b/exitwp_raw/2008-07-26-20080710-20080726-debris.markdown similarity index 100% rename from posts/exitwp_raw/2008-07-26-20080710-20080726-debris.markdown rename to exitwp_raw/2008-07-26-20080710-20080726-debris.markdown diff --git a/posts/exitwp_raw/2008-08-04-20080726-20080803-stuff.markdown b/exitwp_raw/2008-08-04-20080726-20080803-stuff.markdown similarity index 100% rename from posts/exitwp_raw/2008-08-04-20080726-20080803-stuff.markdown rename to exitwp_raw/2008-08-04-20080726-20080803-stuff.markdown diff --git a/posts/exitwp_raw/2008-08-22-20080804-20080821-more-technical-blah.markdown b/exitwp_raw/2008-08-22-20080804-20080821-more-technical-blah.markdown similarity index 100% rename from posts/exitwp_raw/2008-08-22-20080804-20080821-more-technical-blah.markdown rename to exitwp_raw/2008-08-22-20080804-20080821-more-technical-blah.markdown diff --git a/posts/exitwp_raw/2008-09-27-20080822-20080926-or-something-like-that.markdown b/exitwp_raw/2008-09-27-20080822-20080926-or-something-like-that.markdown similarity index 100% rename from posts/exitwp_raw/2008-09-27-20080822-20080926-or-something-like-that.markdown rename to exitwp_raw/2008-09-27-20080822-20080926-or-something-like-that.markdown diff --git a/posts/exitwp_raw/2008-11-09-20080926-20081109-really-overdue-stuff.markdown b/exitwp_raw/2008-11-09-20080926-20081109-really-overdue-stuff.markdown similarity index 100% rename from posts/exitwp_raw/2008-11-09-20080926-20081109-really-overdue-stuff.markdown rename to exitwp_raw/2008-11-09-20080926-20081109-really-overdue-stuff.markdown diff --git a/posts/exitwp_raw/2009-04-21-20090420.markdown b/exitwp_raw/2009-04-21-20090420.markdown similarity index 100% rename from posts/exitwp_raw/2009-04-21-20090420.markdown rename to exitwp_raw/2009-04-21-20090420.markdown diff --git a/posts/exitwp_raw/2009-04-21-20090420b.markdown b/exitwp_raw/2009-04-21-20090420b.markdown similarity index 100% rename from posts/exitwp_raw/2009-04-21-20090420b.markdown rename to exitwp_raw/2009-04-21-20090420b.markdown diff --git a/posts/exitwp_raw/2009-04-26-20090426-2.markdown b/exitwp_raw/2009-04-26-20090426-2.markdown similarity index 100% rename from posts/exitwp_raw/2009-04-26-20090426-2.markdown rename to exitwp_raw/2009-04-26-20090426-2.markdown diff --git a/posts/exitwp_raw/2009-04-26-20090426.markdown b/exitwp_raw/2009-04-26-20090426.markdown similarity index 100% rename from posts/exitwp_raw/2009-04-26-20090426.markdown rename to exitwp_raw/2009-04-26-20090426.markdown diff --git a/posts/exitwp_raw/2009-04-27-20090426-3.markdown b/exitwp_raw/2009-04-27-20090426-3.markdown similarity index 100% rename from posts/exitwp_raw/2009-04-27-20090426-3.markdown rename to exitwp_raw/2009-04-27-20090426-3.markdown diff --git a/posts/exitwp_raw/2009-04-28-20090426-4.markdown b/exitwp_raw/2009-04-28-20090426-4.markdown similarity index 100% rename from posts/exitwp_raw/2009-04-28-20090426-4.markdown rename to exitwp_raw/2009-04-28-20090426-4.markdown diff --git a/posts/exitwp_raw/2009-05-01-20090430.markdown b/exitwp_raw/2009-05-01-20090430.markdown similarity index 100% rename from posts/exitwp_raw/2009-05-01-20090430.markdown rename to exitwp_raw/2009-05-01-20090430.markdown diff --git a/posts/exitwp_raw/2009-05-02-20090501.markdown b/exitwp_raw/2009-05-02-20090501.markdown similarity index 100% rename from posts/exitwp_raw/2009-05-02-20090501.markdown rename to exitwp_raw/2009-05-02-20090501.markdown diff --git a/posts/exitwp_raw/2009-05-04-20090503.markdown b/exitwp_raw/2009-05-04-20090503.markdown similarity index 100% rename from posts/exitwp_raw/2009-05-04-20090503.markdown rename to exitwp_raw/2009-05-04-20090503.markdown diff --git a/posts/exitwp_raw/2009-06-15-2009-06-14-4.markdown b/exitwp_raw/2009-06-15-2009-06-14-4.markdown similarity index 100% rename from posts/exitwp_raw/2009-06-15-2009-06-14-4.markdown rename to exitwp_raw/2009-06-15-2009-06-14-4.markdown diff --git a/posts/exitwp_raw/2009-06-15-2009-06-14-5.markdown b/exitwp_raw/2009-06-15-2009-06-14-5.markdown similarity index 100% rename from posts/exitwp_raw/2009-06-15-2009-06-14-5.markdown rename to exitwp_raw/2009-06-15-2009-06-14-5.markdown diff --git a/posts/exitwp_raw/2009-06-23-2009-06-15.markdown b/exitwp_raw/2009-06-23-2009-06-15.markdown similarity index 100% rename from posts/exitwp_raw/2009-06-23-2009-06-15.markdown rename to exitwp_raw/2009-06-23-2009-06-15.markdown diff --git a/posts/exitwp_raw/2009-06-23-2009-06-16.markdown b/exitwp_raw/2009-06-23-2009-06-16.markdown similarity index 100% rename from posts/exitwp_raw/2009-06-23-2009-06-16.markdown rename to exitwp_raw/2009-06-23-2009-06-16.markdown diff --git a/posts/exitwp_raw/2009-06-23-2009-06-18.markdown b/exitwp_raw/2009-06-23-2009-06-18.markdown similarity index 100% rename from posts/exitwp_raw/2009-06-23-2009-06-18.markdown rename to exitwp_raw/2009-06-23-2009-06-18.markdown diff --git a/posts/exitwp_raw/2009-06-23-2009-06-19.markdown b/exitwp_raw/2009-06-23-2009-06-19.markdown similarity index 100% rename from posts/exitwp_raw/2009-06-23-2009-06-19.markdown rename to exitwp_raw/2009-06-23-2009-06-19.markdown diff --git a/posts/exitwp_raw/2009-07-22-2009-07-21.markdown b/exitwp_raw/2009-07-22-2009-07-21.markdown similarity index 100% rename from posts/exitwp_raw/2009-07-22-2009-07-21.markdown rename to exitwp_raw/2009-07-22-2009-07-21.markdown diff --git a/posts/exitwp_raw/2009-08-14-2009-08-12.markdown b/exitwp_raw/2009-08-14-2009-08-12.markdown similarity index 100% rename from posts/exitwp_raw/2009-08-14-2009-08-12.markdown rename to exitwp_raw/2009-08-14-2009-08-12.markdown diff --git a/posts/exitwp_raw/2009-10-15-fun-with-nx-stuff.markdown b/exitwp_raw/2009-10-15-fun-with-nx-stuff.markdown similarity index 100% rename from posts/exitwp_raw/2009-10-15-fun-with-nx-stuff.markdown rename to exitwp_raw/2009-10-15-fun-with-nx-stuff.markdown diff --git a/posts/exitwp_raw/2010-04-03-hacked-infrared-camera-attempt-1.markdown b/exitwp_raw/2010-04-03-hacked-infrared-camera-attempt-1.markdown similarity index 100% rename from posts/exitwp_raw/2010-04-03-hacked-infrared-camera-attempt-1.markdown rename to exitwp_raw/2010-04-03-hacked-infrared-camera-attempt-1.markdown diff --git a/posts/exitwp_raw/2010-06-09-angry-rants-2010-summer-edition.markdown b/exitwp_raw/2010-06-09-angry-rants-2010-summer-edition.markdown similarity index 100% rename from posts/exitwp_raw/2010-06-09-angry-rants-2010-summer-edition.markdown rename to exitwp_raw/2010-06-09-angry-rants-2010-summer-edition.markdown diff --git a/posts/exitwp_raw/2010-11-19-venue-222-rooftop.markdown b/exitwp_raw/2010-11-19-venue-222-rooftop.markdown similarity index 100% rename from posts/exitwp_raw/2010-11-19-venue-222-rooftop.markdown rename to exitwp_raw/2010-11-19-venue-222-rooftop.markdown diff --git a/posts/exitwp_raw/2010-12-05-cyanotypes-first-attempt.markdown b/exitwp_raw/2010-12-05-cyanotypes-first-attempt.markdown similarity index 100% rename from posts/exitwp_raw/2010-12-05-cyanotypes-first-attempt.markdown rename to exitwp_raw/2010-12-05-cyanotypes-first-attempt.markdown diff --git a/posts/exitwp_raw/2010-12-30-cyanotypes-better-results.markdown b/exitwp_raw/2010-12-30-cyanotypes-better-results.markdown similarity index 100% rename from posts/exitwp_raw/2010-12-30-cyanotypes-better-results.markdown rename to exitwp_raw/2010-12-30-cyanotypes-better-results.markdown diff --git a/posts/exitwp_raw/2010-12-30-macro-photography-attempts-1-and-2.markdown b/exitwp_raw/2010-12-30-macro-photography-attempts-1-and-2.markdown similarity index 100% rename from posts/exitwp_raw/2010-12-30-macro-photography-attempts-1-and-2.markdown rename to exitwp_raw/2010-12-30-macro-photography-attempts-1-and-2.markdown diff --git a/posts/exitwp_raw/2011-02-07-blender-from-a-recovering-pov-ray-user.markdown b/exitwp_raw/2011-02-07-blender-from-a-recovering-pov-ray-user.markdown similarity index 100% rename from posts/exitwp_raw/2011-02-07-blender-from-a-recovering-pov-ray-user.markdown rename to exitwp_raw/2011-02-07-blender-from-a-recovering-pov-ray-user.markdown diff --git a/posts/exitwp_raw/2011-06-10-first-attempt-at-slide-film.markdown b/exitwp_raw/2011-06-10-first-attempt-at-slide-film.markdown similarity index 100% rename from posts/exitwp_raw/2011-06-10-first-attempt-at-slide-film.markdown rename to exitwp_raw/2011-06-10-first-attempt-at-slide-film.markdown diff --git a/posts/exitwp_raw/2011-06-10-i-can-never-win-that-context-back.markdown b/exitwp_raw/2011-06-10-i-can-never-win-that-context-back.markdown similarity index 100% rename from posts/exitwp_raw/2011-06-10-i-can-never-win-that-context-back.markdown rename to exitwp_raw/2011-06-10-i-can-never-win-that-context-back.markdown diff --git a/posts/exitwp_raw/2011-06-13-openframeworks-try-1.markdown b/exitwp_raw/2011-06-13-openframeworks-try-1.markdown similarity index 100% rename from posts/exitwp_raw/2011-06-13-openframeworks-try-1.markdown rename to exitwp_raw/2011-06-13-openframeworks-try-1.markdown diff --git a/posts/exitwp_raw/2011-07-15-my-experiences-with-apache-axis2c.markdown b/exitwp_raw/2011-07-15-my-experiences-with-apache-axis2c.markdown similarity index 100% rename from posts/exitwp_raw/2011-07-15-my-experiences-with-apache-axis2c.markdown rename to exitwp_raw/2011-07-15-my-experiences-with-apache-axis2c.markdown diff --git a/posts/exitwp_raw/2011-08-27-isolated-pixel-pushing.markdown b/exitwp_raw/2011-08-27-isolated-pixel-pushing.markdown similarity index 100% rename from posts/exitwp_raw/2011-08-27-isolated-pixel-pushing.markdown rename to exitwp_raw/2011-08-27-isolated-pixel-pushing.markdown diff --git a/posts/exitwp_raw/2011-08-29-context-free.markdown b/exitwp_raw/2011-08-29-context-free.markdown similarity index 100% rename from posts/exitwp_raw/2011-08-29-context-free.markdown rename to exitwp_raw/2011-08-29-context-free.markdown diff --git a/posts/exitwp_raw/2011-11-13-qmake-hackery-dependencies-external-preprocessing.markdown b/exitwp_raw/2011-11-13-qmake-hackery-dependencies-external-preprocessing.markdown similarity index 100% rename from posts/exitwp_raw/2011-11-13-qmake-hackery-dependencies-external-preprocessing.markdown rename to exitwp_raw/2011-11-13-qmake-hackery-dependencies-external-preprocessing.markdown diff --git a/posts/exitwp_raw/2011-11-24-obscure-features-of-jpeg.markdown b/exitwp_raw/2011-11-24-obscure-features-of-jpeg.markdown similarity index 100% rename from posts/exitwp_raw/2011-11-24-obscure-features-of-jpeg.markdown rename to exitwp_raw/2011-11-24-obscure-features-of-jpeg.markdown diff --git a/posts/exitwp_raw/2012-08-16-some-thoughts.markdown b/exitwp_raw/2012-08-16-some-thoughts.markdown similarity index 100% rename from posts/exitwp_raw/2012-08-16-some-thoughts.markdown rename to exitwp_raw/2012-08-16-some-thoughts.markdown diff --git a/hugo_blag/.gitignore b/hugo_blag/.gitignore new file mode 100644 index 0000000..d6e7aa6 --- /dev/null +++ b/hugo_blag/.gitignore @@ -0,0 +1,33 @@ + +# Created by https://www.gitignore.io/api/macos +# Edit at https://www.gitignore.io/?templates=macos + +### macOS ### +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +# End of https://www.gitignore.io/api/macos diff --git a/hugo_blag/archetypes/default.md b/hugo_blag/archetypes/default.md new file mode 100644 index 0000000..00e77bd --- /dev/null +++ b/hugo_blag/archetypes/default.md @@ -0,0 +1,6 @@ +--- +title: "{{ replace .Name "-" " " | title }}" +date: {{ .Date }} +draft: true +--- + diff --git a/hugo_blag/config.toml b/hugo_blag/config.toml new file mode 100644 index 0000000..e22a245 --- /dev/null +++ b/hugo_blag/config.toml @@ -0,0 +1,4 @@ +baseURL = "http://example.org/" +languageCode = "en-us" +title = "My New Hugo Site" +theme = "indigo" diff --git a/posts/2009-10-15-fun-with-nx-stuff.md b/hugo_blag/content/posts/2009-10-15-fun-with-nx-stuff.md similarity index 99% rename from posts/2009-10-15-fun-with-nx-stuff.md rename to hugo_blag/content/posts/2009-10-15-fun-with-nx-stuff.md index 0bad8fe..6ec3415 100644 --- a/posts/2009-10-15-fun-with-nx-stuff.md +++ b/hugo_blag/content/posts/2009-10-15-fun-with-nx-stuff.md @@ -2,7 +2,8 @@ title: Fun with NX stuff date: October 15, 2009 author: Chris Hodapp -tags: Technobabble +tags: +- Technobabble --- So, I was trying out various NX servers because I'd had very good luck diff --git a/posts/2010-07-04-processing-dla-quadtrees.md b/hugo_blag/content/posts/2010-07-04-processing-dla-quadtrees.md similarity index 99% rename from posts/2010-07-04-processing-dla-quadtrees.md rename to hugo_blag/content/posts/2010-07-04-processing-dla-quadtrees.md index 4509f89..0a63964 100644 --- a/posts/2010-07-04-processing-dla-quadtrees.md +++ b/hugo_blag/content/posts/2010-07-04-processing-dla-quadtrees.md @@ -2,7 +2,8 @@ title: "Processing: DLA, quadtrees" date: July 4th, 2010 author: Chris Hodapp -tags: processing +tags: +- processing --- I first dabbled with diff --git a/posts/2011-02-07-blender-from-a-recovering-pov-ray-user.md b/hugo_blag/content/posts/2011-02-07-blender-from-a-recovering-pov-ray-user.md similarity index 99% rename from posts/2011-02-07-blender-from-a-recovering-pov-ray-user.md rename to hugo_blag/content/posts/2011-02-07-blender-from-a-recovering-pov-ray-user.md index 212ea38..acb96c0 100644 --- a/posts/2011-02-07-blender-from-a-recovering-pov-ray-user.md +++ b/hugo_blag/content/posts/2011-02-07-blender-from-a-recovering-pov-ray-user.md @@ -2,7 +2,9 @@ title: Blender from a recovering POV-Ray user date: February 7, 2011 author: Chris Hodapp -tags: CG, blender +tags: +- CG +- blender --- This is about the tenth time I've tried to learn diff --git a/posts/2011-06-10-i-can-never-win-that-context-back.md b/hugo_blag/content/posts/2011-06-10-i-can-never-win-that-context-back.md similarity index 98% rename from posts/2011-06-10-i-can-never-win-that-context-back.md rename to hugo_blag/content/posts/2011-06-10-i-can-never-win-that-context-back.md index 41f6668..4307f54 100644 --- a/posts/2011-06-10-i-can-never-win-that-context-back.md +++ b/hugo_blag/content/posts/2011-06-10-i-can-never-win-that-context-back.md @@ -2,7 +2,9 @@ title: I can never win that context back date: June 10, 2011 author: Chris Hodapp -tags: Journal, rant +tags: +- Journal +- rant --- I stumbled upon this: diff --git a/posts/2011-06-13-openframeworks-try-1.md b/hugo_blag/content/posts/2011-06-13-openframeworks-try-1.md similarity index 99% rename from posts/2011-06-13-openframeworks-try-1.md rename to hugo_blag/content/posts/2011-06-13-openframeworks-try-1.md index ebb769e..ee6841d 100644 --- a/posts/2011-06-13-openframeworks-try-1.md +++ b/hugo_blag/content/posts/2011-06-13-openframeworks-try-1.md @@ -2,7 +2,9 @@ title: OpenFrameworks, try 1... date: June 13, 2011 author: Chris Hodapp -tags: Technobabble, rant +tags: +- Technobabble +- rant --- My attempts at doing things with diff --git a/posts/2011-07-15-my-experiences-with-apache-axis2c.md b/hugo_blag/content/posts/2011-07-15-my-experiences-with-apache-axis2c.md similarity index 99% rename from posts/2011-07-15-my-experiences-with-apache-axis2c.md rename to hugo_blag/content/posts/2011-07-15-my-experiences-with-apache-axis2c.md index 134d6cd..cea5954 100644 --- a/posts/2011-07-15-my-experiences-with-apache-axis2c.md +++ b/hugo_blag/content/posts/2011-07-15-my-experiences-with-apache-axis2c.md @@ -1,7 +1,10 @@ --- title: My experiences with Apache Axis2/C date: July 15, 2011 -tags: Project, rant, Technobabble +tags: +- Project +- rant +- Technobabble author: Chris Hodapp --- diff --git a/posts/2011-08-27-isolated-pixel-pushing.md b/hugo_blag/content/posts/2011-08-27-isolated-pixel-pushing.md similarity index 99% rename from posts/2011-08-27-isolated-pixel-pushing.md rename to hugo_blag/content/posts/2011-08-27-isolated-pixel-pushing.md index 3da99db..8c69af5 100644 --- a/posts/2011-08-27-isolated-pixel-pushing.md +++ b/hugo_blag/content/posts/2011-08-27-isolated-pixel-pushing.md @@ -1,8 +1,11 @@ --- title: Isolated-pixel-pushing -tags: CG, Project, Technobabble date: August 27, 2011 author: Chris Hodapp +tags: +- CG +- Project +- Technobabble --- After finally deciding to look around for some projects on GitHub, I diff --git a/posts/2011-08-29-context-free.md b/hugo_blag/content/posts/2011-08-29-context-free.md similarity index 99% rename from posts/2011-08-29-context-free.md rename to hugo_blag/content/posts/2011-08-29-context-free.md index 8f06b91..2169dec 100644 --- a/posts/2011-08-29-context-free.md +++ b/hugo_blag/content/posts/2011-08-29-context-free.md @@ -1,8 +1,11 @@ --- title: Context Free date: August 29, 2011 -tags: CG, Project, Technobabble author: Chris Hodapp +tags: +- CG +- Project +- Technobabble --- My [last post](./2011-08-27-isolated-pixel-pushing.html) mentioned a diff --git a/posts/2011-11-13-qmake-hackery-dependencies-external-preprocessing.md b/hugo_blag/content/posts/2011-11-13-qmake-hackery-dependencies-external-preprocessing.md similarity index 99% rename from posts/2011-11-13-qmake-hackery-dependencies-external-preprocessing.md rename to hugo_blag/content/posts/2011-11-13-qmake-hackery-dependencies-external-preprocessing.md index 4c28675..df8564c 100644 --- a/posts/2011-11-13-qmake-hackery-dependencies-external-preprocessing.md +++ b/hugo_blag/content/posts/2011-11-13-qmake-hackery-dependencies-external-preprocessing.md @@ -1,8 +1,10 @@ --- title: "QMake hackery: Dependencies & external preprocessing" -tags: Project, Technobabble date: November 13, 2011 author: Chris Hodapp +tags: +- Project +- Technobabble --- * TODO: Put the code here into a Gist? diff --git a/posts/2011-11-24-obscure-features-of-jpeg.md b/hugo_blag/content/posts/2011-11-24-obscure-features-of-jpeg.md similarity index 99% rename from posts/2011-11-24-obscure-features-of-jpeg.md rename to hugo_blag/content/posts/2011-11-24-obscure-features-of-jpeg.md index ba8a674..729dfb6 100644 --- a/posts/2011-11-24-obscure-features-of-jpeg.md +++ b/hugo_blag/content/posts/2011-11-24-obscure-features-of-jpeg.md @@ -2,7 +2,10 @@ title: Obscure features of JPEG author: Chris Hodapp date: November 24, 2011 -tags: Technobabble, jpeg, image_compression +tags: +- Technobabble +- jpeg +- image_compression --- *(This is a modified version of what I wrote up at work when I saw diff --git a/posts/2012-08-16-some-thoughts.md b/hugo_blag/content/posts/2012-08-16-some-thoughts.md similarity index 99% rename from posts/2012-08-16-some-thoughts.md rename to hugo_blag/content/posts/2012-08-16-some-thoughts.md index 25aaf4a..370b468 100644 --- a/posts/2012-08-16-some-thoughts.md +++ b/hugo_blag/content/posts/2012-08-16-some-thoughts.md @@ -1,10 +1,12 @@ --- layout: post title: Thoughts on tools, design, and feedback loops -tags: rant, Technobabble status: publish type: post published: true +tags: +- rant +- Technobabble --- I just watched [Inventing on Principle](https://vimeo.com/36579366) from Bret Victor and found this entire talk incredibly interesting. Chris Granger's [post](http://www.chris-granger.com/2012/04/12/light-table---a-new-ide-concept/) on Light Table led me to this, and shortly after, I found the redesigned [Khan Academy CS course](http://ejohn.org/blog/introducing-khan-cs) which this inspired. Bret touched on something that basically anyone who's attempted to design anything has implicitly understood: **This feedback loop is the most essential part of the process.** diff --git a/posts/2014-02-06-hello-world.md b/hugo_blag/content/posts/2014-02-06-hello-world.md similarity index 100% rename from posts/2014-02-06-hello-world.md rename to hugo_blag/content/posts/2014-02-06-hello-world.md diff --git a/posts/2015-06-23-stupidity-catalogue-genericstruct.md b/hugo_blag/content/posts/2015-06-23-stupidity-catalogue-genericstruct.md similarity index 99% rename from posts/2015-06-23-stupidity-catalogue-genericstruct.md rename to hugo_blag/content/posts/2015-06-23-stupidity-catalogue-genericstruct.md index 0aa7d1d..5405564 100644 --- a/posts/2015-06-23-stupidity-catalogue-genericstruct.md +++ b/hugo_blag/content/posts/2015-06-23-stupidity-catalogue-genericstruct.md @@ -2,7 +2,9 @@ title: "Catalogue of My Stupidity: My Haskell 'GenericStruct' Nonsense" author: Chris Hodapp date: June 23, 2015 -tags: stupidity, Technobabble +tags: +- stupidity +- Technobabble --- *(A note: I took these notes during my time at Urbanalta, intending diff --git a/posts/2016-09-23-ion-crosspost.md b/hugo_blag/content/posts/2016-09-23-ion-crosspost.md similarity index 90% rename from posts/2016-09-23-ion-crosspost.md rename to hugo_blag/content/posts/2016-09-23-ion-crosspost.md index b5ff108..9bd9149 100644 --- a/posts/2016-09-23-ion-crosspost.md +++ b/hugo_blag/content/posts/2016-09-23-ion-crosspost.md @@ -2,7 +2,9 @@ title: Post at HaskellEmbedded - Introducing Ion author: Chris Hodapp date: September 23, 2016 -tags: haskell, haskellembedded +tags: +- haskell +- haskellembedded --- Just a quick note: I finally released my Ion library (it was long diff --git a/posts/2016-09-25-pi-pan-tilt-1.md b/hugo_blag/content/posts/2016-09-25-pi-pan-tilt-1.md similarity index 99% rename from posts/2016-09-25-pi-pan-tilt-1.md rename to hugo_blag/content/posts/2016-09-25-pi-pan-tilt-1.md index 84a439f..81b902b 100644 --- a/posts/2016-09-25-pi-pan-tilt-1.md +++ b/hugo_blag/content/posts/2016-09-25-pi-pan-tilt-1.md @@ -2,7 +2,10 @@ title: "Pi pan-tilt for huge images, part 1: introduction" author: Chris Hodapp date: September 23, 2016 -tags: photography, electronics, raspberrypi +tags: +- photography +- electronics +- raspberrypi --- Earlier this year I was turning around ideas in my head - perhaps diff --git a/posts/2016-10-04-pi-pan-tilt-2.md b/hugo_blag/content/posts/2016-10-04-pi-pan-tilt-2.md similarity index 99% rename from posts/2016-10-04-pi-pan-tilt-2.md rename to hugo_blag/content/posts/2016-10-04-pi-pan-tilt-2.md index 7233ad3..0944f13 100644 --- a/posts/2016-10-04-pi-pan-tilt-2.md +++ b/hugo_blag/content/posts/2016-10-04-pi-pan-tilt-2.md @@ -2,7 +2,10 @@ title: "Pi pan-tilt for huge images, part 2: Hugin & PanoTools integration" author: Chris Hodapp date: October 4, 2016 -tags: photography, electronics, raspberrypi +tags: +- photography +- electronics +- raspberrypi --- In my [last post](./2016-09-25-pi-pan-tilt-1.html) I introduced some diff --git a/posts/2016-10-12-pi-pan-tilt-3.md b/hugo_blag/content/posts/2016-10-12-pi-pan-tilt-3.md similarity index 99% rename from posts/2016-10-12-pi-pan-tilt-3.md rename to hugo_blag/content/posts/2016-10-12-pi-pan-tilt-3.md index a12fd9c..4f9341b 100644 --- a/posts/2016-10-12-pi-pan-tilt-3.md +++ b/hugo_blag/content/posts/2016-10-12-pi-pan-tilt-3.md @@ -2,7 +2,10 @@ title: "Pi pan-tilt for huge images, part 3: ArduCam & raw images" author: Chris Hodapp date: October 12, 2016 -tags: photography, electronics, raspberrypi +tags: +- photography +- electronics +- raspberrypi --- This is the third part in this series, continuing on from diff --git a/posts/2016-12-13-cincyfp-r-crosspost.md b/hugo_blag/content/posts/2016-12-13-cincyfp-r-crosspost.md similarity index 97% rename from posts/2016-12-13-cincyfp-r-crosspost.md rename to hugo_blag/content/posts/2016-12-13-cincyfp-r-crosspost.md index df6c75f..aec4339 100644 --- a/posts/2016-12-13-cincyfp-r-crosspost.md +++ b/hugo_blag/content/posts/2016-12-13-cincyfp-r-crosspost.md @@ -2,7 +2,8 @@ title: "CincyFP presentation: R & Feature Transformation" author: Chris Hodapp date: December 13, 2016 -tags: r, cincyfp +tags: +- r, cincyfp --- Another cross-post (sort of): The slides and notebooks from my diff --git a/posts/2018-03-09-python-asyncio.org b/hugo_blag/content/posts/2018-03-09-python-asyncio.org similarity index 99% rename from posts/2018-03-09-python-asyncio.org rename to hugo_blag/content/posts/2018-03-09-python-asyncio.org index 85afd1b..5f0ab0b 100644 --- a/posts/2018-03-09-python-asyncio.org +++ b/hugo_blag/content/posts/2018-03-09-python-asyncio.org @@ -2,7 +2,8 @@ title: Some Python asyncio disambiguation author: Chris Hodapp date: March 9, 2018 -tags: technobabble +tags: +- technobabble --- # TODO: Generators? Is it accurate that prior to all this, coroutines diff --git a/posts/2018-04-08-recommender-systems-1.md b/hugo_blag/content/posts/2018-04-08-recommender-systems-1.md similarity index 99% rename from posts/2018-04-08-recommender-systems-1.md rename to hugo_blag/content/posts/2018-04-08-recommender-systems-1.md index 2e41da4..f912b7b 100644 --- a/posts/2018-04-08-recommender-systems-1.md +++ b/hugo_blag/content/posts/2018-04-08-recommender-systems-1.md @@ -2,7 +2,11 @@ title: "Recommender Systems, Part 1 (Collaborative Filtering)" author: Chris Hodapp date: May 6, 2018 -tags: machine_learning, technobabble, notebook, literate +tags: +- machine_learning +- technobabble +- notebook +- literate --- This is an exported version of the Jupyter notebook available at my @@ -845,18 +849,22 @@ eyes glaze over, you can probably just skip this section. Let $U$ be the utility matrix. Let $M$ be a binary matrix for which $M_{i,j}=1$ if user $i$ rated movie $j$, otherwise 0. Compute the model's matrices with: +
$$ \begin{align} C & =M^\top M \\ D &= \left(M^\top U - (M^\top U)^\top\right) /\ \textrm{max}(1, M^\top M) \end{align} $$ +
where $/$ is Hadamard (i.e. elementwise) division, and $\textrm{max}$ is elementwise maximum with 1. Then, the below gives the prediction for how user $u$ will rate movie $j$: +
$$ P(u)_j = \frac{[M_u \odot (C_j > 0)] \cdot (D_j + U_u) - U_{u,j}}{M_u \cdot (C_j > 0)} $$ +
$D_j$ and $C_j$ are row $j$ of $D$ and $C$, respectively. $M_u$ and $U_u$ are column $u$ of $M$ and $U$, respectively. $\odot$ is elementwise multiplication. @@ -878,6 +886,7 @@ The paper gaves a formal but rather terse definition below of the average deviation of item $i$ with respect to item $j$, and I then separate out the summation a little: +
$$ \begin{split} \textrm{dev}_{j,i} &= \sum_{u \in S_{j,i}(\chi)} \frac{u_j - u_i}{card(S_{j,i}(\chi))} \\ @@ -886,6 +895,7 @@ S_{j,i}(\chi)} u_j - u_i = \frac{1}{card(S_{j,i}(\chi))}\left(\sum_{u \in S_{j,i}(\chi)} u_j - \sum_{u \in S_{j,i}(\chi)} u_i\right) \end{split} $$ +
where: @@ -922,7 +932,9 @@ combination of $i$ and $j$ - that is, we need a dot product between every single pair of columns from $M$. This is incidentally just matrix multiplication: +
$$C=M^\top M$$ +
since $C_{i,j}=card(S_{j,i}(\chi))$ is the dot product of row $i$ of $M^T$ - which is column $i$ of $M$ - and column $j$ of $M$. @@ -930,7 +942,9 @@ $i$ of $M$ - and column $j$ of $M$. That was the first half of what we needed for $\textrm{dev}_{j,i}$. We still need the other half: +
$$\sum_{u \in S_{j,i}(\chi)} u_j - \sum_{u \in S_{j,i}(\chi)} u_i$$ +
We can apply a similar trick here. Consider first what $\sum_{u \in S_{j,i}(\chi)} u_j$ means: It is the sum of only those ratings of @@ -946,18 +960,24 @@ of movie $i$, but we want only the sum of the ratings done by a user who also rated movie $j$. Like before, the dot product of $U_i$ and $M_j$ (consider the definition of $M_j$) computes this, and so: +
$$\sum_{u \in S_{j,i}(\chi)} u_j = M_i \cdot U_j$$ +
and as with $C$, since we want every pairwise dot product, this summation just equals element $(i,j)$ of $M^\top U$. The other half of the summation, $\sum_{u \in S_{j,i}(\chi)} u_i$, equals $M_j \cdot U_i$, which is just the transpose of this matrix: +
$$\sum_{u \in S_{j,i}(\chi)} u_j - \sum_{u \in S_{j,i}(\chi)} u_i = M^\top U - (M^\top U)^\top = M^\top U - U^\top M$$ +
So, finally, we can compute an entire deviation matrix at once like: +
$$D = \left(M^\top U - (M^\top U)^\top\right) /\ M^\top M$$ +
where $/$ is Hadamard (i.e. elementwise) division, and $D_{j,i} = \textrm{dev}_{j,i}$. @@ -967,21 +987,27 @@ By convention and to avoid division by zero, we treat the case where the denomin Finally, the paper gives the formula to predict how user $u$ will rate movie $j$, and I write this in terms of our matrices: +
$$ P(u)_j = \frac{1}{card(R_j)}\sum_{i\in R_j} \left(\textrm{dev}_{j,i}+u_i\right) = \frac{1}{card(R_j)}\sum_{i\in R_j} \left(D_{j,i} + U_{u,j} \right) $$ +
where $R_j = \{i | i \in S(u), i \ne j, card(S_{j,i}(\chi)) > 0\}$, and $S(u)$ is the set of movies that user $u$ has rated. To unpack the paper's somewhat dense notation, the summation is over every movie $i$ that user $u$ rated and that at least one other user rated, except movie $j$. We can apply the usual trick yet one more time with a little effort. The summation already goes across a row of $U$ and $D$ (that is, user $u$ is held constant), but covers only certain elements. This is equivalent to a dot product with a mask representing $R_j$. $M_u$, row $u$ of the mask, already represents $S(u)$, and $R_j$ is just $S(u)$ with some more elements removed - which we can mostly represent with $M_u \odot (C_j > 0)$ where $\odot$ is elementwise product (i.e. Hadamard), $C_j$ is column/row $j$ of $C$ (it's symmetric), and where we abuse some notation to say that $C_j > 0$ is a binary vector. Likewise, $D_j$ is row $j$ of $D$. The one correction still required is that we subtract $u_j$ to cover for the $i \ne j$ part of $R_j$. To abuse some more notation: +
$$P(u)_j = \frac{[M_u \odot (C_j > 0)] \cdot (D_j + U_u) - U_{u,j}}{M_u \cdot (C_j > 0)}$$ +
#### 5.2.2.4. Approximation The paper also gives a formula that is a suitable approximation for larger data sets: +
$$p^{S1}(u)_j = \bar{u} + \frac{1}{card(R_j)}\sum_{i\in R_j} \textrm{dev}_{j,i}$$ +
where $\bar{u}$ is user $u$'s average rating. This doesn't change the formula much; we can compute $\bar{u}$ simply as column means of $U$. @@ -1145,13 +1171,17 @@ Matrices $Q$ and $P$ have some other neat properties too. Note that $Q$ has $m$ In that sense, $P$ and $Q$ give us a model in which ratings are an interaction between properties of a movie, and a user's preferences. If we're using $U=P^\top Q$ as our model, then every element of $U$ is just the dot product of the feature vectors of the respective movie and user. That is, if $p_u$ is column $u$ of $P$ and $q_i$ is column $i$ of $Q$: +
$$\hat{r}_{ui}=q_i^\top p_u$$ +
However, some things aren't really interactions. Some movies are just (per the ratings) overall better or worse. Some users just tend to rate everything higher or lower. We need some sort of bias built into the model to comprehend this. Let's call $b_i$ the bias for movie $i$, $b_u$ the bias for user $u$, and $\mu$ the overall average rating. We can just add these into the model: +
$$\hat{r}_{ui}=\mu + b_i + b_u + q_i^\top p_u$$ +
This is the basic model we'll implement, and the same one described in the references at the top. @@ -1159,7 +1189,9 @@ This is the basic model we'll implement, and the same one described in the refer More formally, the prediction model is: +
$$\hat{r}_{ui}=\mu + b_i + b_u + q_i^\top p_u$$ +
where: @@ -1179,6 +1211,7 @@ $$E=\sum_{r_{ui} \in R_{\textrm{train}}} \left(r_{ui} - \hat{r}_{ui}\right)^2 + This error function is easily differentiable with respect to model parameters $b_i$, $b_u$, $q_i$, and $p_u$, so a normal approach for minimizing it is gradient-descent. Finding gradient with respect to $b_i$ is straightforward: +
$$ \begin{split} \frac{\partial E}{\partial b_i} &= \sum_{r_{ui}} \frac{\partial}{\partial b_i} \left(r_{ui} - (\mu + b_i + b_u + q_i^\top p_u)\right)^2 + \frac{\partial}{\partial b_i}\lambda\left(b_i^2+b_u^2 + \lvert\lvert q_i\rvert\rvert^2 + \lvert\lvert p_u\rvert\rvert^2\right) \\ @@ -1186,9 +1219,11 @@ $$ \frac{\partial E}{\partial b_i} &= 2 \sum_{r_{ui}} \left(\lambda b_i + r_{ui} - \hat{r}_{ui}\right) \end{split} $$ +
Gradient with respect to $p_u$ proceeds similarly: +
$$ \begin{split} \frac{\partial E}{\partial p_u} &= \sum_{r_{ui}} \frac{\partial}{\partial p_u} \left(r_{ui} - (\mu + b_i + b_u + q_i^\top p_u)\right)^2 + \frac{\partial}{\partial p_u}\lambda\left(b_i^2+b_u^2 + \lvert\lvert q_i\rvert\rvert^2 + \lvert\lvert p_u\rvert\rvert^2\right) \\ @@ -1198,9 +1233,11 @@ p_u}q_i^\top p_u \right) + 2 \lambda p_u \\ \frac{\partial E}{\partial p_u} &= 2 \sum_{r_{ui}} \lambda p_u - \left(r_{ui} - \hat{r}_{ui}\right)q_i^\top \end{split} $$ +
Gradient with respect to $b_u$ is identical form to $b_i$, and gradient with respect to $q_i$ is identical form to $p_u$, except that the variables switch places. The full gradients then have the standard form for gradient descent, i.e. a summation of a gradient term for each individual data point, so they turn easily into update rules for each parameter (which match the ones in the Surprise link) after absorbing the leading 2 into learning rate $\gamma$ and separating out the summation over each data point. That's given below, with $e_{ui}=r_{ui} - \hat{r}_{ui}$: +
$$ \begin{split} \frac{\partial E}{\partial b_i} &= 2 \sum_{r_{ui}} \left(\lambda b_i + e_{ui}\right)\ \ \ &\longrightarrow b_i' &= b_i - \gamma\frac{\partial E}{\partial b_i} &= b_i + \gamma\left(e_{ui} - \lambda b_u \right) \\ @@ -1209,6 +1246,7 @@ $$ \frac{\partial E}{\partial q_i} &= 2 \sum_{r_{ui}} \lambda q_i - e_{ui}p_u^\top\ \ \ &\longrightarrow q_i' &= q_i - \gamma\frac{\partial E}{\partial q_i} &= q_i + \gamma\left(e_{ui}p_u - \lambda q_i \right) \\ \end{split} $$ +
The code below is a direct implementation of this by simply iteratively applying the above equations for each data point - in other words, stochastic gradient descent. diff --git a/posts/2018-04-13-opinions-go.org b/hugo_blag/content/posts/2018-04-13-opinions-go.org similarity index 99% rename from posts/2018-04-13-opinions-go.org rename to hugo_blag/content/posts/2018-04-13-opinions-go.org index 3f1d1d6..e8d8f88 100644 --- a/posts/2018-04-13-opinions-go.org +++ b/hugo_blag/content/posts/2018-04-13-opinions-go.org @@ -2,7 +2,10 @@ title: "Go programming language: my totally unprompted opinions" author: Chris Hodapp date: April 13, 2018 -tags: technobabble, go, golang +tags: +- technobabble +- go +- golang --- # TODO: Link to my asyncio post diff --git a/hugo_blag/notes.txt b/hugo_blag/notes.txt new file mode 100644 index 0000000..4c5c6f9 --- /dev/null +++ b/hugo_blag/notes.txt @@ -0,0 +1,5 @@ +- themes/indigo is from https://github.com/AngeloStavrow/indigo.git + circa 2020-01-31. I didn't feel like forking the repo to my github + in order to modify some things, so I just cloned it. Yeah, I know + that is bad practice, but I needed MathJax working and I'll + probably just end up messing around with the theme anyway. diff --git a/hugo_blag/themes/indigo/CHANGELOG.md b/hugo_blag/themes/indigo/CHANGELOG.md new file mode 100644 index 0000000..61d7c25 --- /dev/null +++ b/hugo_blag/themes/indigo/CHANGELOG.md @@ -0,0 +1,138 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased] +### Added +- Added entrypoints config section as described in [#73](https://github.com/AngeloStavrow/indigo/issues/73) + +## [1.3.2] - 2019-10-17 + +### Added + +- A _Support and Maintenance_ section has been added to the README, per [#64](https://github.com/AngeloStavrow/indigo/issues/64) + +### Changed + +- Updated the Hugo minimum version to 0.58.3 + +## [1.3.1] - 2019-10-03 + +### Fixed + +- Taxonomy-based lists (e.g., lists of tags or categories) now only show posts within the selected taxonomy per [#56](https://github.com/AngeloStavrow/indigo/issues/56) + +## [1.3.0] - 2019-09-30 + +### Added + +- Adds a `mainSection` configuration parameter to set preferred content name per [#56](https://github.com/AngeloStavrow/indigo/issues/56) + +### Changed + +- Updated **CONTRIBUTING.md** to reflect new contributions process per [#28](https://github.com/AngeloStavrow/indigo/issues/28) +- Bumped the minimum Hugo version requirement to 0.58 to account for [#52](https://github.com/AngeloStavrow/indigo/issues/52) + +### Fixed + +- As part of an audit of the theme's code per [#57](https://github.com/AngeloStavrow/indigo/issues/57) + - Removed forward slashes (`/`) in URLs for better compatibility with sites that don't live at a domain root + - Fixed the location from which the theme's fonts are loaded + +### Removed + +- GitHub issue and pull request templates removed from the repo per [#28](https://github.com/AngeloStavrow/indigo/issues/28) + +## [1.2.0] - 2019-08-31 + +### Added + +- You can now import custom CSS from `/static/css/custom.css` per [#48](https://github.com/AngeloStavrow/indigo/issues/48) + +## [1.1.0] - 2019-08-28 + +### Changed + +- Metadata now shows page title and description per [#50](https://github.com/AngeloStavrow/indigo/issues/50), thanks to [@infominer33](https://github.com/infominer33)! + +### Fixed + +- Breaking changes in article lists introduced in Hugo 0.57 per [#52](https://github.com/AngeloStavrow/indigo/issues/52) +- Newer/Older links in article footers now work as expected in Hugo 0.50 and later per [#54](https://github.com/AngeloStavrow/indigo/issues/54) + +## [1.0.6] - 2019-06-24 + +### Fixed + +- Fixed some copy/paste errors in CSS `font-family` definitions per [#38](https://github.com/AngeloStavrow/indigo/issues/38) +- Fixed `

` font-sizing per [#41](https://github.com/AngeloStavrow/indigo/issues/41) + +## [1.0.5] - 2019-06-05 + +### Fixed + +- Cleaned up some errant whitespace thanks to [@dixonge](https://github.com/dixonge)! + +## [1.0.4] - 2019-10-25 + +### Added + +- Users can now add their Medium and LinkedIn accounts as social networks, thanks to [@RicardoBelchior](https://github.com/RicardoBelchior)! + +### Changed + +- Clearer process for contributing to the project ([#28](https://github.com/AngeloStavrow/indigo/issues/28)) + +### Fixed + +- Better instructions for users that prefer a little more YAML in their lives, thanks to [@zwbetz-gh](https://github.com/zwbetz-gh)! +- Fix for broken content div in 404.html ([#21](https://github.com/AngeloStavrow/indigo/issues/21)) +- The `src` URL for the site logo had an extra `/`, and now it doesn't, thanks to [@michimani](https://github.com/michimani)! + +## [1.0.3] - 2019-10-21 + +### Added + +- Users can now add their Reddit account as a social network, thanks to [@sauerj](https://github.com/sauerj)! + +### Fixed + +- The 404.html page now properly links back to the homepage, thanks to [@sauerj](https://github.com/sauerj)! +- Custom fonts are now loaded correctly, hopefully speeding up rendering ([#23](https://github.com/AngeloStavrow/indigo/issues/23)) +- The site expected fonts to load from the site root, even if your site was installed to a subdirectory. Now they don't. ([#27](https://github.com/AngeloStavrow/indigo/issues/27)) + +## [1.0.2] - 2019-10-15 + +### Fixed + +- Broken link to compare v1.0.1 against v1.0 in this change log. +- Updated example site theme name. + +## [1.0.1] - 2018-10-14 + +### Fixed + +- The Fira Code font is now part of the theme download, rather than downloading from rawgit ([#17](https://github.com/AngeloStavrow/indigo/issues/17)). + +## 1.0.0 - 2018-09-30 + +### Added + +- The first public release of the indigo theme for Hugo, along with related project documentation (including this changelog). + + + +[1.3.2]: https://github.com/AngeloStavrow/indigo/compare/v1.3.1...v1.3.2 +[1.3.1]: https://github.com/AngeloStavrow/indigo/compare/v1.3.0...v1.3.1 +[1.3.0]: https://github.com/AngeloStavrow/indigo/compare/v1.2.0...v1.3.0 +[1.2.0]: https://github.com/AngeloStavrow/indigo/compare/v1.1.0...v1.2.0 +[1.1.0]: https://github.com/AngeloStavrow/indigo/compare/v1.0.6...v1.1.0 +[1.0.6]: https://github.com/AngeloStavrow/indigo/compare/v1.0.5...v1.0.6 +[1.0.5]: https://github.com/AngeloStavrow/indigo/compare/v1.0.4...v1.0.5 +[1.0.4]: https://github.com/AngeloStavrow/indigo/compare/v1.0.3...v1.0.4 +[1.0.3]: https://github.com/AngeloStavrow/indigo/compare/v1.0.2...v1.0.3 +[1.0.2]: https://github.com/AngeloStavrow/indigo/compare/v1.0.1...v1.0.2 +[1.0.1]: https://github.com/AngeloStavrow/indigo/compare/v1.0...v1.0.1 diff --git a/hugo_blag/themes/indigo/CODE_OF_CONDUCT.md b/hugo_blag/themes/indigo/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..a7cfb16 --- /dev/null +++ b/hugo_blag/themes/indigo/CODE_OF_CONDUCT.md @@ -0,0 +1,46 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at contact@angelostavrow.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/4/ diff --git a/hugo_blag/themes/indigo/CONTRIBUTING.md b/hugo_blag/themes/indigo/CONTRIBUTING.md new file mode 100644 index 0000000..fc977fa --- /dev/null +++ b/hugo_blag/themes/indigo/CONTRIBUTING.md @@ -0,0 +1,18 @@ +# Contributing + +When contributing to this repository, please first discuss the change you wish to make via issue, email, or any other method with the owners of this repository before making a change. + +Please note we have a code of conduct; please follow it in all your interactions with the project. You can find it [here](https://github.com/AngeloStavrow/indigo/blob/master/CODE_OF_CONDUCT.md) + +## Bug Reports and Feature Requests + +1. [Check GitHub](https://github.com/AngeloStavrow/indigo/issues/) for existing issues similar your report/request. If you find one, add any extra detail you might think is helpful. It's also helpful to just see how many folks are affected by the bug. That's it! +2. If you don't find an existing report for the bug you've come across, add [a new issue](https://github.com/AngeloStavrow/indigo/issues/new) outlining steps to reproduce, the expected outcome, and the actual outcome. Thoughts on how to implement the fix are welcome! +3. Project owners (right now, me) will triage these incoming reports/requests and label them appropriately. Everything will be added to the new [Theme Work kanban board](https://github.com/AngeloStavrow/indigo/projects/1). + +## Pull Request Process + +1. If one doesn't already exist, please start by [opening an issue](https://github.com/AngeloStavrow/indigo/issues/new) describing what you'd like to change. Remember to search first, to avoid having it closed as a duplicate. +2. Make the changes discussed. Ensure that the theme builds and continues to function as expected; you can also try building the [theme gallery to test further](https://github.com/gohugoio/hugoThemes/blob/master/README.md). Place high value on page-load speed and responsive design. +3. Update the README with any new site/page parameters as necessary. If you've added new dependencies, make sure to list them too. +4. Open a pull request and include the issue you opened in step 1 as part of the PR. Changes will be tested and, when everything's good to go, will be merged in by the project owners. \ No newline at end of file diff --git a/hugo_blag/themes/indigo/LICENSE.md b/hugo_blag/themes/indigo/LICENSE.md new file mode 100644 index 0000000..98a7332 --- /dev/null +++ b/hugo_blag/themes/indigo/LICENSE.md @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2018 Angelo Stavrow + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/hugo_blag/themes/indigo/README.md b/hugo_blag/themes/indigo/README.md new file mode 100644 index 0000000..a7b27ab --- /dev/null +++ b/hugo_blag/themes/indigo/README.md @@ -0,0 +1,129 @@ +# Indigo Theme + +Indigo is a lightweight, responsive, typography-first theme for Hugo, marked up with [microformats2](http://microformats.org) for extra [IndieWeb](https://indieweb.org) goodness, including [IndieAuth](https://indieauth.com). + +## Getting Started + +These instructions will get you a copy of the project up and running on your local machine for setup and testing purposes. See deployment for notes on how to deploy the project on a live system. + +### Prerequisites + +This theme is built and tested against the latest version of Hugo and currently requires a minimum version of 0.58. You can check what version you're running with + +``` +$ hugo version +``` + +Follow the [upgrade instructions on the Hugo website](https://gohugo.io/getting-started/installing/#upgrade-hugo) if necessary. + +### Installing + +Follow the [Hugo Quickstart](https://gohugo.io/getting-started/quick-start/)'s instructions on how to add a theme; the URL you'll want to use is + +``` +https://github.com/AngeloStavrow/indigo.git +``` + +### Setup + +There's a sample config.toml file in the root of the indigo theme directory (`config.toml.example`); copy it to the root of your Hugo site, and rename it to `config.toml` _after_ you've made a backup of your current config.toml file (if any). + +Set up the parameters in the config file, especially those in the social and `params.indieWeb` section. Social identifiers that you leave out will not be added to the footer of the site. If you prefer to use a content type other than `post`, be sure to change the `mainSections` parameter in the config file as well. For example, if you want content of type `posts` and `updates` to show up in lists: + +```toml +[params] + ... + mainSections = ["posts", "updates"] +``` + +You can configure the theme to show info about the author; by default, this information is shown; if you'd prefer to leave it out, set `ShowBio` to `false`. + +### Customization + +Indigo will look for custom CSS in `/static/css/custom.css`. This will let you add/override styling to your heart's content, while making it easy to keep Indigo up-to-date. See it in action on [angelostavrow.com](https://angelostavrow.com). + +## Deployment + +You can add a line to your `config.toml` file to set this theme as the default: + +```toml +theme = "indigo" +``` + +Or, if you use `config.yaml`: + +```yaml +theme: indigo +``` + +## Support and Maintenance + +### Support Committment + +Support is provided for the latest stable release of the theme on the latest stable release of Hugo. If something doesn't seem to be working right, please make sure you're using the latest version of both. + +You can check what version of Hugo you're using by running the `hugo version` command; visit [the Hugo website](https://gohugo.io) for upgrade instructions. + +To ensure you're building the latest version of Indigo, do the following from the command line: + +```bash +# Go to the /themes/indigo folder +cd /path/to/themes/indigo + +# Make sure you're on the 'master' branch, then pull in any changes +git checkout master +git pull +``` + +If everything is up to date and things still don't seem to be working correctly, please [open an issue](https://github.com/AngeloStavrow/indigo/issues/) and describe what's not working as expected. + +Going forward, this support committment will be enforced by the `minVersion` property in **theme.toml**. + +### Maintenance Process + +Authors whose themes are included in the [Hugo showcase gallery](https://themes.gohugo.io) will be required to keep their theme working with the latest version of Hugo. To prepare for this, the following process will be instituted: + +1. With every new release of Hugo, _once the_ `brew`_/_`chocolatey` _package is available_, the development system will be updated, and the [demo site](https://hello-indigo.glitch.me/) and the [theme gallery](https://github.com/gohugoio/hugoThemes/blob/master/README.md#testing-a-theme-with-the-hugo-themes-website-build-script) will be built locally. +2. If everything looks good, a short update will be posted to the demo site to confirm compatibility, with links to the release announcements for those versions Indigo and Hugo, as well as a link to this maintenance process documentation. +3. If either site doesn't build successfully, the problem will be fixed. + +There are a few definitions and open questions that need to be considered here. + +- New releases of Hugo are [announced](https://gohugo.io/news/) and can be subscribed to via RSS. The release date _may_ be estimated by the due date of [Hugo milestones](https://github.com/gohugoio/hugo/milestones). +- "Build successfully" means that the demo site renders as intended, and that the theme works as expected in the theme gallery. The gallery builds a standard site that shows off some common features of Hugo, and the demo site is meant to test and showcase features of Indigo. + +## Indigo IndieWeb Features + +A thorough writeup of the theme has been graciously written by @infominer33. + +- [Indigo IndieWeb Features](https://web-work.tools/indieweb/indigo-indieweb-features/) + +## Contributing + +Please read [CONTRIBUTING.md](https://github.com/AngeloStavrow/indigo/blob/master/CONTRIBUTING.md) for details on the code of conduct, and the process for submitting bug reports, feature requests, and having your changes merged into the project. + +## Versioning + +We use [SemVer](http://semver.org/) for versioning. For the versions available, see the [tags on this repository](https://github.com/AngeloStavrow/indigo/tags). + +## Authors + +- **Angelo Stavrow** - _Initial work_ - [AngeloStavrow](https://github.com/AngeloStavrow) on GitHub + +See also the list of [contributors](https://github.com/AngeloStavrow/indigo/contributors) who participated in this project. + +## License + +This project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details + +## Acknowledgments + +The following open fonts are used in this theme: + +- [Fira Sans](https://bboxtype.com/typefaces/FiraSans/#!layout=specimen) for heading text +- [Charter](https://practicaltypography.com/charter.html) for body text +- [Fira Code](https://github.com/tonsky/FiraCode) for monospaced text + +Licenses are included in the theme’s `static/fonts` folder. + +Most icons in the social footer are from [Font Awesome](https://fontawesome.com/). Some come directly from the service itself (e.g., Micro.blog and Glitch). diff --git a/hugo_blag/themes/indigo/archetypes/default.md b/hugo_blag/themes/indigo/archetypes/default.md new file mode 100644 index 0000000..ac36e06 --- /dev/null +++ b/hugo_blag/themes/indigo/archetypes/default.md @@ -0,0 +1,2 @@ ++++ ++++ diff --git a/hugo_blag/themes/indigo/config.toml.example b/hugo_blag/themes/indigo/config.toml.example new file mode 100644 index 0000000..421e67d --- /dev/null +++ b/hugo_blag/themes/indigo/config.toml.example @@ -0,0 +1,54 @@ +baseURL = "https://example.com/" +title = "Site Title" +copyright = "Copyright © 2018, Copyright Owner Name" +languageCode = "en-US" +theme = "indigo" + +[params] + Author = "Site Author Name" + Description = "Description of website for head meta tag" + Subtitle = "A subtitle for your site" + Avatar = "images/site-logo.svg" + Biography = "A short description, a few sentences describing the author. Set the 'ShowBio' parameter to false to hide this." + ShowBio = true + PermalinkText = "🔗" + mainSections = ["post"] + + # Contact/social-network identifiers for social icons + EmailAddress = "email.address@example.com" + FacebookUser = "FacebookUserName" + FlickrUser = "FlickrUserName" + GitHubUser = "GitHubUserName" + GitLabUser = "GitLabUserName" + GlitchUser = "GlitchUserName" + KeybaseUser = "KeybaseUserName" + LinkedInUser = "LinkedInUserName" + MediumUser = "MediumUserName" + MicroBlogUser = "MicroBlogUserName" + RedditUser = "RedditUserName" + StackOverflowUser = "StackOverflowUserName" + TumblrUser = "TumblrUserName" + TwitterUser = "TwitterUserName" + + # These are parameters used for indieweb identity. You should set these along + # with the above email/social network parameters. + [params.indieWeb] + EmailAddress = "email.address@example.com" + FlickrUser = "FlickrUserName" + GitHubUser = "GitHubUserName" + TwitterUser = "TwitterUserName" + MicroBlogUser = "MicroBlogUserName" + Country = "CountryName" + City = "CityName" + + [params.endpoints] + Auth = "https://indieauth.com/auth" + Token = "https://tokens.indieauth.com/token" + # To get webmention support, just register at webmention.io and paste the link for endpoint here. + #Webmention = "https://webmention.io//webmention" + # To get micropub support, you'll need to install a Micropub endpoint at your site and put its link there. + # To get an endpoint with Hugo support, use nanopub: https://github.com/dg01d/nanopub + # It will probably require some PHP hackery though, as it's fairly basic. + #Micropub = "" + # To get microsub support, you can use Aperture from p3k. Either go to https://aperture.p3k.io or self-host it (it's open source!) + #Microsub = "" \ No newline at end of file diff --git a/hugo_blag/themes/indigo/exampleSite/archetypes/default.md b/hugo_blag/themes/indigo/exampleSite/archetypes/default.md new file mode 100644 index 0000000..26f317f --- /dev/null +++ b/hugo_blag/themes/indigo/exampleSite/archetypes/default.md @@ -0,0 +1,5 @@ +--- +title: "{{ replace .Name "-" " " | title }}" +date: {{ .Date }} +draft: true +--- diff --git a/hugo_blag/themes/indigo/exampleSite/config.toml b/hugo_blag/themes/indigo/exampleSite/config.toml new file mode 100644 index 0000000..2fe4036 --- /dev/null +++ b/hugo_blag/themes/indigo/exampleSite/config.toml @@ -0,0 +1,42 @@ +baseURL = "https://example.com/" +title = "Indigo Theme" +copyright = "Copyright © 2018, Author Name" +languageCode = "en-US" +theme = "indigo" +paginate = 3 + +[params] + Author = "Author Name" + Description = "Description of website for head meta tag" + Subtitle = "A subtitle for your site" + Avatar = "images/site-logo.svg" + Biography = "A short description, a few sentences describing the author. Set the 'ShowBio' parameter to false to hide this." + ShowBio = true + PermalinkText = "🔗" + + # Contact/social-network identifiers for social icons + EmailAddress = "email.address@example.com" + FacebookUser = "FacebookUserName" + FlickrUser = "FlickrUserName" + GitHubUser = "GitHubUserName" + GitLabUser = "GitLabUserName" + GlitchUser = "GlitchUserName" + KeybaseUser = "KeybaseUserName" + LinkedInUser = "LinkedInUserName" + MediumUser = "MediumUserName" + MicroBlogUser = "MicroBlogUserName" + RedditUser = "RedditUserName" + StackOverflowUser = "StackOverflowUserName" + TumblrUser = "TumblrUserName" + TwitterUser = "TwitterUserName" + + # These are parameters used for indieweb identity. You should set these along + # with the above email/social network parameters. + [params.indieWeb] + EmailAddress = "email.address@example.com" + FlickrUser = "FlickrUserName" + GitHubUser = "GitHubUserName" + TwitterUser = "TwitterUserName" + MicroBlogUser = "MicroBlogUserName" + Country = "CountryName" + City = "CityName" diff --git a/hugo_blag/themes/indigo/exampleSite/content/about.md b/hugo_blag/themes/indigo/exampleSite/content/about.md new file mode 100644 index 0000000..1e5303f --- /dev/null +++ b/hugo_blag/themes/indigo/exampleSite/content/about.md @@ -0,0 +1,13 @@ +--- +title: "About The Theme" +menu: "main" +draft: false +--- + +Indigo is a lightweight theme for [Hugo][hugo] with [IndieWeb][indieweb] features baked in. It's great for longer-form blogging, placing its focus on distraction-free reading and beautiful typefaces. + +Read more about the theme [here][intro]. + +[hugo]: https://gohugo.io +[indieweb]: https://indieweb.org/ +[intro]: /post/introducing-indigo \ No newline at end of file diff --git a/hugo_blag/themes/indigo/exampleSite/content/adding-menu-items.md b/hugo_blag/themes/indigo/exampleSite/content/adding-menu-items.md new file mode 100644 index 0000000..36016cb --- /dev/null +++ b/hugo_blag/themes/indigo/exampleSite/content/adding-menu-items.md @@ -0,0 +1,9 @@ +--- +title: "Adding Page Items" +menu: "main" +draft: false +--- + +Indigo supports adding a simple navigation-style menu items across the top of the site. To do so, simply add a `menu: "main"` entry in your page's front matter (TOML format shown). + +If no date is included in the front matter, then the published date won't be shown (as in this page). \ No newline at end of file diff --git a/hugo_blag/themes/indigo/exampleSite/content/post/author-bios.md b/hugo_blag/themes/indigo/exampleSite/content/post/author-bios.md new file mode 100644 index 0000000..ac0f1e3 --- /dev/null +++ b/hugo_blag/themes/indigo/exampleSite/content/post/author-bios.md @@ -0,0 +1,57 @@ +--- +title: "Author Bios" +date: 2018-10-01T08:00:00-04:00 +draft: false +categories: ["meta"] +tags: ["options"] +--- + +The bottom of every page in the theme can optionally show a short biography of the site author, including a profile picture, email link, and location. + + + +## Setting up the author bio + +A set of configuration options are used for displaying the biography. + +``` +[params] + Author = "Author Name" + Avatar = "images/site-logo.svg" + Biography = "A short description, a few sentences describing the author. Set + the 'ShowBio' parameter to false to hide this." + ShowBio = true + +[params.indieWeb] + EmailAddress = "email.address@example.com" + Country = "CountryName" + City = "CityName" +``` + +Specifics on each setting item are as follows: + +- `Author`: Your name; this is the site author name. +- `Avatar`: The path to your profile picture. By default, it will show the theme's logo (`/static/images/site-logo.svg`). +- `Biography`: Hopefully the placeholder text here is self-explanatory; add a couple of short sentences about yourself here. +- `ShowBio`: If you prefer not to show the author bio, set this to `false`. By default, it's set to `true`. +- `EmailAddress`: The email address at which you can be contacted. +- `Country`: The name of the country in which you live. +- `City`: The name of the city in which you live. + +## IndieWeb features + +The following classes are used to mark up the author bio for [IndieWeb][indieweb] parsing: + +| Element | Class | +| :-------------- | :-------------------------- | +| The author card | `h-card` | +| Profile picture | `u-photo` | +| Author URL* | `p-name`, `u-url`, `rel=me` | +| City | `p-locality` | +| Country | `p-country-name` | +| Email address | `u-email` | +| Biography | `p-note` | + +*Author URL is set to the site's base URL. + +[indieweb]: https://indieweb.org diff --git a/hugo_blag/themes/indigo/exampleSite/content/post/featured-typefaces.md b/hugo_blag/themes/indigo/exampleSite/content/post/featured-typefaces.md new file mode 100644 index 0000000..3df7a45 --- /dev/null +++ b/hugo_blag/themes/indigo/exampleSite/content/post/featured-typefaces.md @@ -0,0 +1,53 @@ +--- +title: "Featured Typefaces" +date: 2018-10-01T08:30:00-04:00 +draft: false +categories: ["meta"] +tags: ["typography"] +--- + +Indigo uses a combination of three beautiful typefaces to render your words. + + + +- [Fira Sans][fira-sans] for heading text +- [Charter][charter] for body text +- [Fira Code][fira-code] for monospaced text + +Licenses are included in the theme’s `static/fonts` folder. + +Have a look at a couple of paragraphs of placeholder text using the wonderfully readable Charter: + +--- +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer eleifend nulla ac elit venenatis posuere. Sed id aliquam arcu, et malesuada lectus. **Donec et dignissim massa. Pellentesque in laoreet nibh. Pellentesque sagittis, libero quis vestibulum aliquam, ante risus imperdiet magna, at ornare dolor libero quis nunc.** Donec quis tempus purus. Cras ornare magna ac facilisis tristique. Nulla aliquet purus quis massa rutrum interdum ac at magna. Cras fermentum magna id orci viverra facilisis. Ut vitae lobortis nisl. + +Sed interdum tincidunt venenatis. Sed hendrerit dictum nisi, at dignissim orci consectetur quis. Aenean sed nisl et nisl placerat euismod. Proin hendrerit nulla at rhoncus molestie. Cras eu gravida erat, vestibulum ornare diam. _Praesent nunc arcu, ultrices et risus sed, dictum mattis dui. Maecenas vitae nisl at massa porta pellentesque_. Donec eget urna eget nisl imperdiet scelerisque eget a mauris. Nam fringilla sem id vehicula rhoncus. Curabitur tincidunt massa mauris, facilisis placerat odio eleifend sit amet. Etiam nec vehicula sapien, at dignissim risus. Sed elit erat, lacinia eu vulputate at, semper eu nulla. Quisque a urna sed nulla viverra egestas nec quis nunc. Curabitur iaculis elit in orci sollicitudin suscipit. + +--- + +And code snippets look great with Fira Code: + +``` +
+
+ {{ if .Title }} +

{{ .Title }}

+ {{ end }} + +
+
+ {{ .Summary | plainify | safeHTML }} +
+ {{ if .Truncated }} +

Read more →

+ {{ end }} +
+``` + +[fira-sans]: https://bboxtype.com/typefaces/FiraSans/#!layout=specimen +[charter]: https://practicaltypography.com/charter.html +[fira-code]: https://github.com/tonsky/FiraCode \ No newline at end of file diff --git a/hugo_blag/themes/indigo/exampleSite/content/post/introducing-indigo.md b/hugo_blag/themes/indigo/exampleSite/content/post/introducing-indigo.md new file mode 100644 index 0000000..471206e --- /dev/null +++ b/hugo_blag/themes/indigo/exampleSite/content/post/introducing-indigo.md @@ -0,0 +1,85 @@ +--- +title: "Introducing Indigo" +date: 2018-10-01T09:00:00-04:00 +draft: false +categories: ["meta"] +tags: ["typography", "indieweb"] +--- + +Indigo is a lightweight theme for [Hugo][hugo] with [IndieWeb][indieweb] features baked in. It's great for longer-form blogging, placing its focus on distraction-free reading and beautiful typefaces. + + + +## IndieWeb features + +A key feature of this theme is its support for IndieWeb features, including microformats and web sign-in. + +### Web sign-in + +Indigo handles web sign-in by setting the `authorization_endpoint` to [IndieAuth.com][indieauth]: + +> IndieAuth.com is part of the [IndieWeb movement][why] to take back control of your online identity. Instead of logging in to websites as "you on Twitter" or "you on Facebook", **you should be able to log in as just "you"**. + +This allows you to sign in to certain services simply by providing your site's domain name. + +### microformats + +Indigo marks up content with appropriate [microformats][mf2], which provides semantic definitions of your content to other software. Posts are marked up with `h-entry` classes, like `p-name`, `p-author`, and `e-content`, while the author bio is marked up with `h-card` classes, including `u-photo`, `u-url`, `p-locality`/`p-country-name`, and `p-note`. + +## Open typefaces + +Indigo uses a combination of three beautiful typefaces to render your words. + +- [Fira Sans][fira-sans] for heading text +- [Charter][charter] for body text +- [Fira Code][fira-code] for monospaced text + +Licenses are included in the theme’s `static/fonts` folder. + +Have a look at a couple of paragraphs of placeholder text using the wonderfully readable Charter: + +--- +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer eleifend nulla ac elit venenatis posuere. Sed id aliquam arcu, et malesuada lectus. **Donec et dignissim massa. Pellentesque in laoreet nibh. Pellentesque sagittis, libero quis vestibulum aliquam, ante risus imperdiet magna, at ornare dolor libero quis nunc.** Donec quis tempus purus. Cras ornare magna ac facilisis tristique. Nulla aliquet purus quis massa rutrum interdum ac at magna. Cras fermentum magna id orci viverra facilisis. Ut vitae lobortis nisl. + +Sed interdum tincidunt venenatis. Sed hendrerit dictum nisi, at dignissim orci consectetur quis. Aenean sed nisl et nisl placerat euismod. Proin hendrerit nulla at rhoncus molestie. Cras eu gravida erat, vestibulum ornare diam. _Praesent nunc arcu, ultrices et risus sed, dictum mattis dui. Maecenas vitae nisl at massa porta pellentesque_. Donec eget urna eget nisl imperdiet scelerisque eget a mauris. Nam fringilla sem id vehicula rhoncus. Curabitur tincidunt massa mauris, facilisis placerat odio eleifend sit amet. Etiam nec vehicula sapien, at dignissim risus. Sed elit erat, lacinia eu vulputate at, semper eu nulla. Quisque a urna sed nulla viverra egestas nec quis nunc. Curabitur iaculis elit in orci sollicitudin suscipit. + +--- + +And code snippets look great with Fira Code: + +``` +
+
+ {{ if .Title }} +

{{ .Title }}

+ {{ end }} + +
+
+ {{ .Summary | plainify | safeHTML }} +
+ {{ if .Truncated }} +

Read more →

+ {{ end }} +
+``` + +## Contributions welcome + +Indigo is distributed under the [MIT license][license], so feel free to fork the repository and make it your own! If you've got ideas on how to improve the theme, let me know by [opening an issue in GitHub](issue) — but please be sure to review the documentation on [contributing][contributing]. + +[hugo]: https://gohugo.io +[indieweb]: https://indieweb.org +[indieauth]: https://indieauth.com +[why]: https://indieweb.org/why +[mf2]: http://microformats.org +[fira-sans]: https://bboxtype.com/typefaces/FiraSans/#!layout=specimen +[charter]: https://practicaltypography.com/charter.html +[fira-code]: https://github.com/tonsky/FiraCode +[license]: https://github.com/AngeloStavrow/indigo/blob/master/LICENSE.md +[issue]: https://github.com/AngeloStavrow/indigo/issues +[contributing]: https://github.com/AngeloStavrow/indigo/blob/master/CONTRIBUTING.md diff --git a/hugo_blag/themes/indigo/images/screenshot.png b/hugo_blag/themes/indigo/images/screenshot.png new file mode 100644 index 0000000..22a96ae Binary files /dev/null and b/hugo_blag/themes/indigo/images/screenshot.png differ diff --git a/hugo_blag/themes/indigo/images/tn.png b/hugo_blag/themes/indigo/images/tn.png new file mode 100644 index 0000000..52af173 Binary files /dev/null and b/hugo_blag/themes/indigo/images/tn.png differ diff --git a/hugo_blag/themes/indigo/layouts/404.html b/hugo_blag/themes/indigo/layouts/404.html new file mode 100644 index 0000000..248651d --- /dev/null +++ b/hugo_blag/themes/indigo/layouts/404.html @@ -0,0 +1,20 @@ + + +{{ partial "head.html" . }} + + +
+ {{ partial "pagenav.html" . }} +

404

+
+
+
+

Whoops.

+

+ The page you were looking for doesn't exist. Would you like to go to the home page? +

+
+
+{{ partial "footer.html" . }} diff --git a/hugo_blag/themes/indigo/layouts/_default/li.html b/hugo_blag/themes/indigo/layouts/_default/li.html new file mode 100644 index 0000000..40e229e --- /dev/null +++ b/hugo_blag/themes/indigo/layouts/_default/li.html @@ -0,0 +1,18 @@ +
+
+ {{ if .Title }} +

{{ .Title }}

+ {{ end }} + +
+
+ {{ .Summary | plainify | safeHTML }} +
+ {{ if .Truncated }} +

Read more →

+ {{ end }} +
\ No newline at end of file diff --git a/hugo_blag/themes/indigo/layouts/_default/list.html b/hugo_blag/themes/indigo/layouts/_default/list.html new file mode 100644 index 0000000..2db2af7 --- /dev/null +++ b/hugo_blag/themes/indigo/layouts/_default/list.html @@ -0,0 +1,10 @@ +{{ partial "header.html" . }} +

{{ .Title }}

+
+ {{ range $index, $page := (.Paginate (where .Site.RegularPages "Type" "in" site.Params.mainSections)).Pages }} + {{ if ne $index 0 }} + {{ end }} + {{ .Render "li" }} + {{ end }} +
+{{ partial "footer.html" . }} diff --git a/hugo_blag/themes/indigo/layouts/_default/single.html b/hugo_blag/themes/indigo/layouts/_default/single.html new file mode 100644 index 0000000..6892d74 --- /dev/null +++ b/hugo_blag/themes/indigo/layouts/_default/single.html @@ -0,0 +1,43 @@ +{{ partial "header.html" . }} +{{ $baseurl := .Site.BaseURL | sanitizeurl }} +{{ $author := .Site.Params.Author }} +{{ if .Params.Author }} + {{ $author = .Params.Author }} +{{ end }} +
+
+
+

{{ .Title }}

+ {{ if not .Params.Menu }} + + {{ end }} + {{ if .Params.categories }} + +
+ {{ end }} +
+
+ {{ .Content }} +
+ +
+
+{{ partial "footer.html" . }} diff --git a/hugo_blag/themes/indigo/layouts/_default/taxonomy.html b/hugo_blag/themes/indigo/layouts/_default/taxonomy.html new file mode 100644 index 0000000..a54dc4f --- /dev/null +++ b/hugo_blag/themes/indigo/layouts/_default/taxonomy.html @@ -0,0 +1,12 @@ +{{ partial "header.html" . }} +

+ {{ .Section }}: + {{ .Title }} +

+ +
+ {{ range.Pages }} + {{ .Render "li" }} + {{ end }} +
+{{ partial "footer.html" . }} diff --git a/hugo_blag/themes/indigo/layouts/index.html b/hugo_blag/themes/indigo/layouts/index.html new file mode 100644 index 0000000..3b02c07 --- /dev/null +++ b/hugo_blag/themes/indigo/layouts/index.html @@ -0,0 +1,15 @@ + +{{ partial "header.html" . }} + + +
+{{ range $index, $page := (.Paginate (where (where .Site.RegularPages "Type" "in" site.Params.mainSections) ".Params.hidden" "!=" "true" )).Pages }} +{{ if ne $index 0 }} +{{ end }} +{{ .Render "li" }} +{{ end }} +{{ partial "pagination.html" .Paginator }} +
+ + +{{ partial "footer.html" . }} \ No newline at end of file diff --git a/hugo_blag/themes/indigo/layouts/index.xml b/hugo_blag/themes/indigo/layouts/index.xml new file mode 100644 index 0000000..faf0a1c --- /dev/null +++ b/hugo_blag/themes/indigo/layouts/index.xml @@ -0,0 +1,26 @@ + + + {{ if eq .Title .Site.Title }}{{ .Site.Title }}{{ else }}{{ with .Title }}{{.}} on {{ end }}{{ .Site.Title }}{{ end }} + {{ .Permalink }} + Recent content {{ if ne .Title .Site.Title }}{{ with .Title }}in {{.}} {{ end }}{{ end }}on {{ .Site.Title }} + Hugo -- gohugo.io{{ with .Site.LanguageCode }} + {{.}}{{end}}{{ with .Site.Author.email }} + {{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}{{end}}{{ with .Site.Author.email }} + {{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}{{end}}{{ with .Site.Copyright }} + {{.}}{{end}}{{ if not .Date.IsZero }} + {{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}{{ end }} + {{ with .OutputFormats.Get "RSS" }} + {{ printf "" .Permalink .MediaType | safeHTML }} + {{ end }} + {{ range .Site.RegularPages }} + + {{ .Title }} + {{ .Permalink }} + {{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }} + {{ with .Site.Author.email }}{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}{{end}} + {{ .Permalink }} + {{ .Content | html }} + + {{ end }} + + \ No newline at end of file diff --git a/hugo_blag/themes/indigo/layouts/partials/footer.html b/hugo_blag/themes/indigo/layouts/partials/footer.html new file mode 100644 index 0000000..c33e336 --- /dev/null +++ b/hugo_blag/themes/indigo/layouts/partials/footer.html @@ -0,0 +1,49 @@ + + {{ if .Site.Params.ShowBio }} +
+ +
+

{{ .Site.Params.Author }}

+

+ {{ .Site.Params.IndieWeb.City }}, + {{ .Site.Params.IndieWeb.Country }}
+ Email me +

+
+

{{ .Site.Params.Biography }}

+
+ {{ end }} + + + {{ partial "mathjax_support.html" . }} + + + diff --git a/hugo_blag/themes/indigo/layouts/partials/head.html b/hugo_blag/themes/indigo/layouts/partials/head.html new file mode 100644 index 0000000..7c07bcd --- /dev/null +++ b/hugo_blag/themes/indigo/layouts/partials/head.html @@ -0,0 +1,36 @@ + + + + {{ .Title }} | {{ .Site.Title }} + + + + + + + + + + + + {{ with .Site.Params.IndieWeb.EmailAddress }}{{ end }} + {{ with .Site.Params.IndieWeb.GitHubUser }}{{ end }} + {{ with .Site.Params.IndieWeb.TwitterUser }}{{ end }} + {{ with .Site.Params.IndieWeb.MicroBlogUser }}{{ end }} + + + + {{ with .Site.Params.endpoints.Micropub }} + {{ end }} + {{ with .Site.Params.endpoints.Microsub }} + {{ end }} + {{ with .Site.Params.endpoints.Webmention}} + {{ end }} + + + + {{ if (fileExists "static/css/custom.css") -}} + + {{- end }} + + diff --git a/hugo_blag/themes/indigo/layouts/partials/header.html b/hugo_blag/themes/indigo/layouts/partials/header.html new file mode 100644 index 0000000..a9b7a2e --- /dev/null +++ b/hugo_blag/themes/indigo/layouts/partials/header.html @@ -0,0 +1,20 @@ + + +{{ partial "head.html" . }} + + +
+ {{ partial "pagenav.html" . }} + {{ if not .IsPage }} + + {{ end }} +
diff --git a/hugo_blag/themes/indigo/layouts/partials/mathjax_support.html b/hugo_blag/themes/indigo/layouts/partials/mathjax_support.html new file mode 100644 index 0000000..adeec5b --- /dev/null +++ b/hugo_blag/themes/indigo/layouts/partials/mathjax_support.html @@ -0,0 +1,29 @@ + + + + + diff --git a/hugo_blag/themes/indigo/layouts/partials/pagenav.html b/hugo_blag/themes/indigo/layouts/partials/pagenav.html new file mode 100644 index 0000000..7c90183 --- /dev/null +++ b/hugo_blag/themes/indigo/layouts/partials/pagenav.html @@ -0,0 +1,16 @@ + \ No newline at end of file diff --git a/hugo_blag/themes/indigo/layouts/partials/pagination.html b/hugo_blag/themes/indigo/layouts/partials/pagination.html new file mode 100644 index 0000000..8601331 --- /dev/null +++ b/hugo_blag/themes/indigo/layouts/partials/pagination.html @@ -0,0 +1,23 @@ + diff --git a/hugo_blag/themes/indigo/layouts/partials/social.html b/hugo_blag/themes/indigo/layouts/partials/social.html new file mode 100644 index 0000000..f43d1f5 --- /dev/null +++ b/hugo_blag/themes/indigo/layouts/partials/social.html @@ -0,0 +1,74 @@ + diff --git a/hugo_blag/themes/indigo/static/android-chrome-192x192.png b/hugo_blag/themes/indigo/static/android-chrome-192x192.png new file mode 100644 index 0000000..c8da0ee Binary files /dev/null and b/hugo_blag/themes/indigo/static/android-chrome-192x192.png differ diff --git a/hugo_blag/themes/indigo/static/android-chrome-512x512.png b/hugo_blag/themes/indigo/static/android-chrome-512x512.png new file mode 100644 index 0000000..2b42b5f Binary files /dev/null and b/hugo_blag/themes/indigo/static/android-chrome-512x512.png differ diff --git a/hugo_blag/themes/indigo/static/apple-touch-icon.png b/hugo_blag/themes/indigo/static/apple-touch-icon.png new file mode 100644 index 0000000..50ef0d2 Binary files /dev/null and b/hugo_blag/themes/indigo/static/apple-touch-icon.png differ diff --git a/hugo_blag/themes/indigo/static/browserconfig.xml b/hugo_blag/themes/indigo/static/browserconfig.xml new file mode 100644 index 0000000..5aecc91 --- /dev/null +++ b/hugo_blag/themes/indigo/static/browserconfig.xml @@ -0,0 +1,9 @@ + + + + + + #00aba9 + + + diff --git a/hugo_blag/themes/indigo/static/css/fonts.css b/hugo_blag/themes/indigo/static/css/fonts.css new file mode 100644 index 0000000..ad1f5c4 --- /dev/null +++ b/hugo_blag/themes/indigo/static/css/fonts.css @@ -0,0 +1,72 @@ +@font-face { + font-family: 'Fira Code'; + src: url('../fonts/FiraCode-Regular.eot'); + src: url('../fonts/FiraCode-Regular.eot?#iefix') format('embedded-opentype'), + url('../fonts/FiraCode-Regular.woff2') format('woff2'), + url('../fonts/FiraCode-Regular.woff') format('woff'), + url('../fonts/FiraCode-Regular.ttf') format('truetype'); + font-weight: 400; + font-style: normal; + font-display: fallback; +} + +@font-face { + font-family: 'Charter'; + src: url('../fonts/charter_regular-webfont.eot'); + src: url('../fonts/charter_regular-webfont.eot?#iefix') format('embedded-opentype'), + url('../fonts/charter_regular-webfont.woff') format('woff'), + url('../fonts/charter_regular-webfont.ttf') format('truetype'); + font-display: fallback; +} + +@font-face { + font-family: 'Charter'; + src: url('../fonts/charter_bold-webfont.eot'); + src: url('../fonts/charter_bold-webfont.eot?#iefix') format('embedded-opentype'), + url('../fonts/charter_bold-webfont.woff') format('woff'), + url('../fonts/charter_bold-webfont.ttf') format('truetype'); + font-weight: bold; + font-display: fallback; +} + +@font-face { + font-family: 'Charter'; + src: url('../fonts/charter_italic-webfont.eot'); + src: url('../fonts/charter_italic-webfont.eot?#iefix') format('embedded-opentype'), + url('../fonts/charter_italic-webfont.woff') format('woff'), + url('../fonts/charter_italic-webfont.ttf') format('truetype'); + font-style: italic; + font-display: fallback; +} + +@font-face { + font-family: 'Charter'; + src: url('../fonts/charter_bold_italic-webfont.eot'); + src: url('../fonts/charter_bold_italic-webfont.eot?#iefix') format('embedded-opentype'), + url('../fonts/charter_bold_italic-webfont.woff') format('woff'), + url('../fonts/charter_bold_italic-webfont.ttf') format('truetype'); + font-style: italic; + font-weight: bold; + font-display: fallback; +} + +@font-face { + font-family: 'Fira Sans'; + src: url('../fonts/FiraSans-Book.eot'); + src: url('../fonts/FiraSans-Book.eot?#iefix') format('embedded-opentype'), + url('../fonts/FiraSans-Book.woff2') format('woff2'), + url('../fonts/FiraSans-Book.woff') format('woff'), + url('../fonts/FiraSans-Book.ttf') format('truetype'); + font-display: fallback; +} + +@font-face { + font-family: 'Fira Sans'; + src: url('../fonts/FiraSans-Bold.eot'); + src: url('../fonts/FiraSans-Bold.eot?#iefix') format('embedded-opentype'), + url('../fonts/FiraSans-Bold.woff2') format('woff2'), + url('../fonts/FiraSans-Bold.woff') format('woff'), + url('../fonts/FiraSans-Bold.ttf') format('truetype'); + font-weight: bold; + font-display: fallback; +} diff --git a/hugo_blag/themes/indigo/static/css/style.css b/hugo_blag/themes/indigo/static/css/style.css new file mode 100644 index 0000000..db2c31e --- /dev/null +++ b/hugo_blag/themes/indigo/static/css/style.css @@ -0,0 +1,464 @@ +* { + box-sizing: border-box; +} + +body { + background-color: #f8f8f8; + color: #3f3f3f; + font-family: "Charter", Times, "Times New Roman", serif; + margin: 0 auto; +} + +/* Desktop styles */ +@media only screen and (min-width: 860px) { + div#sitelogo { + margin-left: -96px; + position: fixed; + } +} + +@media only screen and (min-width: 768px) { + body { + max-width: 800px; + font-size: 1.3em; + width: 90%; + } + + code, + pre { + font-size: 0.9em; + } + + img { + width: 100%; + } + + blockquote { + font-size: x-large; + } + + .icon-24x24:hover { + background-color: #f8f8f8; + border-top: 2px solid #00416a; + padding-top: 2px; + } + + .card-content { + margin-left: 25px; + } +} + +/* High-DPI mobile styles */ +@media only screen and (max-width: 768px) { + body { + font-size: 1em; + max-width: 90%; + } + + img { + max-width: 100%; + } + + blockquote { + font-size: x-large; + } + + .card-content { + margin-left: 25px; + } +} + +/* Low-DPI mobile styles */ +@media only screen and (max-width: 414px) { + body { + font-size: 1.2em; + max-width: 90%; + } + + img { + max-width: 100%; + } + + blockquote { + font-size: x-large; + } + + .card-content { + margin-left: 0; + } +} + +#sitelogo { + margin: 16px auto 0 auto; + width: 64px; +} + +.glyph:hover { + background-color: #f8f8f8; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + font-family: "Fira Sans", Helvetica, Arial, sans-serif; + font-weight: bold; + margin-top: 2em; + padding-top: 0.15em; +} + +h1 { + font-size: 2em; +} + +a { + color: #00416a; +} + +a:visited { + color: #316586; +} + +a:hover { + background-color: #00416a; + color: #dee5e9; +} + +h1.post-title { + border-top: 2px solid #3f3f3f; + font-size: 2.5em; +} + +h2.list-title > a { + color: #00416a; +} + +h2.list-title > a:visited { + color: #316586; +} + +h2.list-title > a:hover { + background-color: #f8f8f8; + color: #7b9cb0; +} + +a.read-more { + font-family: "Fira Sans"; + font-size: smaller; + text-transform: uppercase; +} + +section.content { + line-height: 1.5em; +} + +p.post-date { + background-color: #00416a; + color: #dee5e9; + font-family: "Fira Sans", Helvetica, Arial, sans-serif; + font-size: smaller; + margin: 0 0 2.5em 0; + padding: 0.25em 0.5em; +} + +a.p-author { + color: #dee5e9; + text-decoration: none; +} + +h2.list-title { + margin: 2em 0 0 0; + padding: 0; +} + +p.list-post-date { + font-family: "Fira Sans", Helvetica, Arial, sans-serif; + font-size: smaller; + margin: 1em 0 1.5em 0; + padding: 0; + text-transform: uppercase; +} + +#footer { + width: 100%; +} + +.copyright { + font-family: "Fira Sans", Helvetica, Arial, sans-serif; + font-size: smaller; + margin-top: 2em; + text-align: center; +} + +div.h-card { + box-shadow: 0 5px 5px #ccc; + margin: 100px auto; + min-height: 150px; + padding: 25px; + width: 90%; +} + +img.u-photo { + width: 100px; +} + +.card-content { + display: inline-block; +} + +.card-name { + margin: 0; +} + +.card-subhead { + font-family: "Fira Sans", Helvetica, Arial, sans-serif; + font-size: smaller; + text-transform: uppercase; +} + +blockquote { + color: #00416a; + background-color: #dee5e9; + border-left: 25px solid #00416a; + line-height: 1.25em; + margin: 2em auto; + padding: 1% 5%; + width: 100%; +} + +code { + background-color: #dee5e9; + color: #00416a; + font-family: "Fira Code", "Courier New", Courier, monospace; + padding: 0.1em 0.2em 0.1em 0.2em; +} + +pre { + background-color: #dee5e9; + border: 1px solid #ccc; + border-radius: 5px; + font-size: 0.8em; + margin: 2em auto; + overflow-x: scroll; + padding: 1em; + width: 100%; +} + +hr.post-underline { + border: 0; + border-top: 1px solid #ccc; + display: block; + height: 1px; + padding: 0; + margin: 2em auto; + width: 75%; +} + +a.permalink { + border-radius: 100%; + text-decoration: none; +} + +.post-tag { + font-family: "Fira Sans", Helvetica, Arial, sans-serif; + font-size: small; + text-transform: uppercase; +} + +a.post-tag { + background-color: #dee5e9; + border: 1px solid #7b9cb0; + border-radius: 5px; + color: #316586; + padding: 0.15em 0.3em 0.1em 0.3em; + text-decoration: none; +} + +a.post-tag:hover { + background-color: #7b9cb0; + color: #fff; +} + +.list-heading-type { + font-size: large; + text-transform: uppercase; +} + +.list-heading-tag { + background-color: #dee5e9; + border: 1px solid #7b9cb0; + border-radius: 5px; + color: #316586; + font-size: large; + font-weight: 100; + padding: 0.25em 0.5em; + text-transform: uppercase; +} + +div#site-header { + border-top: 5px solid #3f3f3f; + border-bottom: 2px solid #3f3f3f; +} + +div#site-header > h1 { + font-size: 2.5em; + line-height: 1em; + margin-top: 1em; +} + +div#site-header > p { + margin-top: 0; + margin-bottom: 1em; +} + +div#page-nav, +#pagination { + font-family: "Fira Sans", Helvetica, Arial, sans-serif; + font-size: smaller; + line-height: 1em; + margin: 1.5em 0 2.5em 0; + padding: 0; + text-align: center; + text-transform: uppercase; + width: 100%; +} + +#page-nav { + align-items: flex-start; + display: flex; + flex-direction: row; + flex-wrap: nowrap; + justify-content: space-around; +} + +div.page-nav-item, +div.page-nav-spacer { + flex: 1 1 auto; + margin: 0; + padding: 0; +} + +div.page-nav-item > a { + color: #00416a; + display: block; + text-decoration: none; + width: 100%; +} + +div.page-nav-item > a:hover { + background-color: #00416a; + color: #dee5e9; +} + +div#pagination { + display: inline-block; + margin: 3.5em 0; +} + +div.pagination-item:hover { + background-color: #00416a; +} + +div.pagination-item, +div.pagination-item-spacer { + display: inline-block; + float: left; + margin: 0; + padding: 0; + width: 20%; +} + +div.pagination-item > a { + color: #00416a; + display: block; + text-decoration: none; +} + +div.pagination-item > a:hover { + color: #dee5e9; +} + +aside#social { + border-top: 2px solid #3f3f3f; + display: flex; + height: 48px; + margin: 0 auto; + width: 100%; +} + +div#social-icons { + align-items: center; + display: flex; + flex-basis: 414px; + flex-wrap: wrap; + height: 24px; + justify-content: space-between; + margin-top: 20px; + max-width: 414px; + min-width: 288px; +} + +.icon-24x24 { + height: 24px; + width: 24px; +} + +nav#article-skip { + align-items: flex-start; + border-top: 1px solid #dee5e9; + display: flex; + flex-direction: row; + flex-wrap: nowrap; + font-family: "Fira Sans", Helvetica, Arial, sans-serif; + font-size: smaller; + justify-content: space-around; + line-height: 1em; + margin: 5em 0 0 0; + padding: 0; + text-align: center; + text-transform: uppercase; +} + +.next, +.prev, +.top { + flex: 0 1 auto; + margin: 0; + padding: 0.5em; + width: 100%; +} + +.next { + text-align: left; +} + +.prev { + text-align: right; +} + +.top { + border-left: 1px solid #dee5e9; + border-right: 1px solid #dee5e9; +} + +div.next > p, +div.prev > p { + margin: 0; + padding: 0; +} + +div.next > a, +div.prev > a, +div.top > a { + color: #00416a; + text-decoration: none; +} + +div.next > a:hover, +div.prev > a:hover, +div.top > a:hover { + background-color: #00416a; + color: #dee5e9; +} diff --git a/hugo_blag/themes/indigo/static/favicon-16x16.png b/hugo_blag/themes/indigo/static/favicon-16x16.png new file mode 100644 index 0000000..430875a Binary files /dev/null and b/hugo_blag/themes/indigo/static/favicon-16x16.png differ diff --git a/hugo_blag/themes/indigo/static/favicon-32x32.png b/hugo_blag/themes/indigo/static/favicon-32x32.png new file mode 100644 index 0000000..c34d12f Binary files /dev/null and b/hugo_blag/themes/indigo/static/favicon-32x32.png differ diff --git a/hugo_blag/themes/indigo/static/favicon.ico b/hugo_blag/themes/indigo/static/favicon.ico new file mode 100644 index 0000000..2732399 Binary files /dev/null and b/hugo_blag/themes/indigo/static/favicon.ico differ diff --git a/hugo_blag/themes/indigo/static/fonts/FiraCode-Regular.eot b/hugo_blag/themes/indigo/static/fonts/FiraCode-Regular.eot new file mode 100755 index 0000000..cef458e Binary files /dev/null and b/hugo_blag/themes/indigo/static/fonts/FiraCode-Regular.eot differ diff --git a/hugo_blag/themes/indigo/static/fonts/FiraCode-Regular.otf b/hugo_blag/themes/indigo/static/fonts/FiraCode-Regular.otf new file mode 100755 index 0000000..4770d16 Binary files /dev/null and b/hugo_blag/themes/indigo/static/fonts/FiraCode-Regular.otf differ diff --git a/hugo_blag/themes/indigo/static/fonts/FiraCode-Regular.ttf b/hugo_blag/themes/indigo/static/fonts/FiraCode-Regular.ttf new file mode 100755 index 0000000..0fb0817 Binary files /dev/null and b/hugo_blag/themes/indigo/static/fonts/FiraCode-Regular.ttf differ diff --git a/hugo_blag/themes/indigo/static/fonts/FiraCode-Regular.woff b/hugo_blag/themes/indigo/static/fonts/FiraCode-Regular.woff new file mode 100755 index 0000000..5e4106f Binary files /dev/null and b/hugo_blag/themes/indigo/static/fonts/FiraCode-Regular.woff differ diff --git a/hugo_blag/themes/indigo/static/fonts/FiraCode-Regular.woff2 b/hugo_blag/themes/indigo/static/fonts/FiraCode-Regular.woff2 new file mode 100755 index 0000000..df544dc Binary files /dev/null and b/hugo_blag/themes/indigo/static/fonts/FiraCode-Regular.woff2 differ diff --git a/hugo_blag/themes/indigo/static/fonts/FiraSans-Bold.eot b/hugo_blag/themes/indigo/static/fonts/FiraSans-Bold.eot new file mode 100644 index 0000000..91245f1 Binary files /dev/null and b/hugo_blag/themes/indigo/static/fonts/FiraSans-Bold.eot differ diff --git a/hugo_blag/themes/indigo/static/fonts/FiraSans-Bold.ttf b/hugo_blag/themes/indigo/static/fonts/FiraSans-Bold.ttf new file mode 100644 index 0000000..f03425a Binary files /dev/null and b/hugo_blag/themes/indigo/static/fonts/FiraSans-Bold.ttf differ diff --git a/hugo_blag/themes/indigo/static/fonts/FiraSans-Bold.woff b/hugo_blag/themes/indigo/static/fonts/FiraSans-Bold.woff new file mode 100644 index 0000000..aac5ce3 Binary files /dev/null and b/hugo_blag/themes/indigo/static/fonts/FiraSans-Bold.woff differ diff --git a/hugo_blag/themes/indigo/static/fonts/FiraSans-Bold.woff2 b/hugo_blag/themes/indigo/static/fonts/FiraSans-Bold.woff2 new file mode 100644 index 0000000..9216d5e Binary files /dev/null and b/hugo_blag/themes/indigo/static/fonts/FiraSans-Bold.woff2 differ diff --git a/hugo_blag/themes/indigo/static/fonts/FiraSans-Book.eot b/hugo_blag/themes/indigo/static/fonts/FiraSans-Book.eot new file mode 100644 index 0000000..9902a51 Binary files /dev/null and b/hugo_blag/themes/indigo/static/fonts/FiraSans-Book.eot differ diff --git a/hugo_blag/themes/indigo/static/fonts/FiraSans-Book.ttf b/hugo_blag/themes/indigo/static/fonts/FiraSans-Book.ttf new file mode 100644 index 0000000..f6c2a6c Binary files /dev/null and b/hugo_blag/themes/indigo/static/fonts/FiraSans-Book.ttf differ diff --git a/hugo_blag/themes/indigo/static/fonts/FiraSans-Book.woff b/hugo_blag/themes/indigo/static/fonts/FiraSans-Book.woff new file mode 100644 index 0000000..a480632 Binary files /dev/null and b/hugo_blag/themes/indigo/static/fonts/FiraSans-Book.woff differ diff --git a/hugo_blag/themes/indigo/static/fonts/FiraSans-Book.woff2 b/hugo_blag/themes/indigo/static/fonts/FiraSans-Book.woff2 new file mode 100644 index 0000000..be1642d Binary files /dev/null and b/hugo_blag/themes/indigo/static/fonts/FiraSans-Book.woff2 differ diff --git a/hugo_blag/themes/indigo/static/fonts/FiraSans-Light.eot b/hugo_blag/themes/indigo/static/fonts/FiraSans-Light.eot new file mode 100644 index 0000000..683a207 Binary files /dev/null and b/hugo_blag/themes/indigo/static/fonts/FiraSans-Light.eot differ diff --git a/hugo_blag/themes/indigo/static/fonts/FiraSans-Light.ttf b/hugo_blag/themes/indigo/static/fonts/FiraSans-Light.ttf new file mode 100644 index 0000000..d06adde Binary files /dev/null and b/hugo_blag/themes/indigo/static/fonts/FiraSans-Light.ttf differ diff --git a/hugo_blag/themes/indigo/static/fonts/FiraSans-Light.woff b/hugo_blag/themes/indigo/static/fonts/FiraSans-Light.woff new file mode 100644 index 0000000..fc2d955 Binary files /dev/null and b/hugo_blag/themes/indigo/static/fonts/FiraSans-Light.woff differ diff --git a/hugo_blag/themes/indigo/static/fonts/FiraSans-Light.woff2 b/hugo_blag/themes/indigo/static/fonts/FiraSans-Light.woff2 new file mode 100644 index 0000000..28ff042 Binary files /dev/null and b/hugo_blag/themes/indigo/static/fonts/FiraSans-Light.woff2 differ diff --git a/hugo_blag/themes/indigo/static/fonts/charter_bold-webfont.eot b/hugo_blag/themes/indigo/static/fonts/charter_bold-webfont.eot new file mode 100755 index 0000000..800aa39 Binary files /dev/null and b/hugo_blag/themes/indigo/static/fonts/charter_bold-webfont.eot differ diff --git a/hugo_blag/themes/indigo/static/fonts/charter_bold-webfont.ttf b/hugo_blag/themes/indigo/static/fonts/charter_bold-webfont.ttf new file mode 100755 index 0000000..cea448b Binary files /dev/null and b/hugo_blag/themes/indigo/static/fonts/charter_bold-webfont.ttf differ diff --git a/hugo_blag/themes/indigo/static/fonts/charter_bold-webfont.woff b/hugo_blag/themes/indigo/static/fonts/charter_bold-webfont.woff new file mode 100755 index 0000000..6d7fd7a Binary files /dev/null and b/hugo_blag/themes/indigo/static/fonts/charter_bold-webfont.woff differ diff --git a/hugo_blag/themes/indigo/static/fonts/charter_bold_italic-webfont.eot b/hugo_blag/themes/indigo/static/fonts/charter_bold_italic-webfont.eot new file mode 100755 index 0000000..62268df Binary files /dev/null and b/hugo_blag/themes/indigo/static/fonts/charter_bold_italic-webfont.eot differ diff --git a/hugo_blag/themes/indigo/static/fonts/charter_bold_italic-webfont.ttf b/hugo_blag/themes/indigo/static/fonts/charter_bold_italic-webfont.ttf new file mode 100755 index 0000000..c83766c Binary files /dev/null and b/hugo_blag/themes/indigo/static/fonts/charter_bold_italic-webfont.ttf differ diff --git a/hugo_blag/themes/indigo/static/fonts/charter_bold_italic-webfont.woff b/hugo_blag/themes/indigo/static/fonts/charter_bold_italic-webfont.woff new file mode 100755 index 0000000..1ef433f Binary files /dev/null and b/hugo_blag/themes/indigo/static/fonts/charter_bold_italic-webfont.woff differ diff --git a/hugo_blag/themes/indigo/static/fonts/charter_italic-webfont.eot b/hugo_blag/themes/indigo/static/fonts/charter_italic-webfont.eot new file mode 100755 index 0000000..2124b1c Binary files /dev/null and b/hugo_blag/themes/indigo/static/fonts/charter_italic-webfont.eot differ diff --git a/hugo_blag/themes/indigo/static/fonts/charter_italic-webfont.ttf b/hugo_blag/themes/indigo/static/fonts/charter_italic-webfont.ttf new file mode 100755 index 0000000..9276421 Binary files /dev/null and b/hugo_blag/themes/indigo/static/fonts/charter_italic-webfont.ttf differ diff --git a/hugo_blag/themes/indigo/static/fonts/charter_italic-webfont.woff b/hugo_blag/themes/indigo/static/fonts/charter_italic-webfont.woff new file mode 100755 index 0000000..08c8249 Binary files /dev/null and b/hugo_blag/themes/indigo/static/fonts/charter_italic-webfont.woff differ diff --git a/hugo_blag/themes/indigo/static/fonts/charter_license.txt b/hugo_blag/themes/indigo/static/fonts/charter_license.txt new file mode 100644 index 0000000..364606e --- /dev/null +++ b/hugo_blag/themes/indigo/static/fonts/charter_license.txt @@ -0,0 +1,5 @@ +Charter License + +This is a copy of the Char­ter fonts which Bit­stream con­tributed to the X con­sor­tium. This is the orig­i­nal no­tice in­cluded with the fonts: + +(c) Copy­right 1989-1992, Bit­stream Inc., Cam­bridge, MA. You are hereby granted per­mis­sion un­der all Bit­stream pro­pri­ety rights to use, copy, mod­ify, sub­li­cense, sell, and re­dis­trib­ute the 4 Bit­stream Char­ter (r) Type 1 out­line fonts and the 4 Courier Type 1 out­line fonts for any pur­pose and with­out re­stric­tion; pro­vided, that this no­tice is left in­tact on all copies of such fonts and that Bit­stream’s trade­mark is ac­knowl­edged as shown be­low on all un­mod­i­fied copies of the 4 Char­ter Type 1 fonts. BIT­STREAM CHAR­TER is a reg­is­tered trade­mark of Bit­stream Inc. \ No newline at end of file diff --git a/hugo_blag/themes/indigo/static/fonts/charter_regular-webfont.eot b/hugo_blag/themes/indigo/static/fonts/charter_regular-webfont.eot new file mode 100755 index 0000000..01872e3 Binary files /dev/null and b/hugo_blag/themes/indigo/static/fonts/charter_regular-webfont.eot differ diff --git a/hugo_blag/themes/indigo/static/fonts/charter_regular-webfont.ttf b/hugo_blag/themes/indigo/static/fonts/charter_regular-webfont.ttf new file mode 100755 index 0000000..44e097a Binary files /dev/null and b/hugo_blag/themes/indigo/static/fonts/charter_regular-webfont.ttf differ diff --git a/hugo_blag/themes/indigo/static/fonts/charter_regular-webfont.woff b/hugo_blag/themes/indigo/static/fonts/charter_regular-webfont.woff new file mode 100755 index 0000000..a19483d Binary files /dev/null and b/hugo_blag/themes/indigo/static/fonts/charter_regular-webfont.woff differ diff --git a/hugo_blag/themes/indigo/static/fonts/fira-code_license.txt b/hugo_blag/themes/indigo/static/fonts/fira-code_license.txt new file mode 100644 index 0000000..5ec3dbc --- /dev/null +++ b/hugo_blag/themes/indigo/static/fonts/fira-code_license.txt @@ -0,0 +1,102 @@ +Copyright (c) 2014, Nikita Prokopov http://tonsky.me +with Reserved Font Name Fira Code. + +Copyright (c) 2014, Mozilla Foundation https://mozilla.org/ +with Reserved Font Name Fira Sans. + +Copyright (c) 2014, Mozilla Foundation https://mozilla.org/ +with Reserved Font Name Fira Mono. + +Copyright (c) 2014, Telefonica S.A. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. \ No newline at end of file diff --git a/hugo_blag/themes/indigo/static/fonts/fira-sans_license.txt b/hugo_blag/themes/indigo/static/fonts/fira-sans_license.txt new file mode 100644 index 0000000..5af572f --- /dev/null +++ b/hugo_blag/themes/indigo/static/fonts/fira-sans_license.txt @@ -0,0 +1,96 @@ +https://bboxtype.com/downloads/Fira/OFL.txt + +Digitized data copyright 2012-2018 for FiraGO: Carrois Corporate GbR and HERE Europe B.V. All rights reserved. +Digitized data copyright 2012-2018 for Fira Sans up to version 4.3: The Mozilla Foundation, Telefonica S.A., Carrois Corporate GbR and bBox Type GmbH. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. \ No newline at end of file diff --git a/hugo_blag/themes/indigo/static/icons/envelope.svg b/hugo_blag/themes/indigo/static/icons/envelope.svg new file mode 100644 index 0000000..c94bfd7 --- /dev/null +++ b/hugo_blag/themes/indigo/static/icons/envelope.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/hugo_blag/themes/indigo/static/icons/facebook.svg b/hugo_blag/themes/indigo/static/icons/facebook.svg new file mode 100644 index 0000000..7cdd94e --- /dev/null +++ b/hugo_blag/themes/indigo/static/icons/facebook.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/hugo_blag/themes/indigo/static/icons/flickr.svg b/hugo_blag/themes/indigo/static/icons/flickr.svg new file mode 100644 index 0000000..ac7667f --- /dev/null +++ b/hugo_blag/themes/indigo/static/icons/flickr.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/hugo_blag/themes/indigo/static/icons/github.svg b/hugo_blag/themes/indigo/static/icons/github.svg new file mode 100644 index 0000000..8348350 --- /dev/null +++ b/hugo_blag/themes/indigo/static/icons/github.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/hugo_blag/themes/indigo/static/icons/gitlab.svg b/hugo_blag/themes/indigo/static/icons/gitlab.svg new file mode 100644 index 0000000..c966bc4 --- /dev/null +++ b/hugo_blag/themes/indigo/static/icons/gitlab.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/hugo_blag/themes/indigo/static/icons/glitch.svg b/hugo_blag/themes/indigo/static/icons/glitch.svg new file mode 100644 index 0000000..5b03854 --- /dev/null +++ b/hugo_blag/themes/indigo/static/icons/glitch.svg @@ -0,0 +1,10 @@ + + + + Artboard + Created with Sketch. + + + + + \ No newline at end of file diff --git a/hugo_blag/themes/indigo/static/icons/keybase.svg b/hugo_blag/themes/indigo/static/icons/keybase.svg new file mode 100644 index 0000000..5b4f80b --- /dev/null +++ b/hugo_blag/themes/indigo/static/icons/keybase.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/hugo_blag/themes/indigo/static/icons/linkedin.svg b/hugo_blag/themes/indigo/static/icons/linkedin.svg new file mode 100644 index 0000000..cd55f45 --- /dev/null +++ b/hugo_blag/themes/indigo/static/icons/linkedin.svg @@ -0,0 +1 @@ + diff --git a/hugo_blag/themes/indigo/static/icons/medium.svg b/hugo_blag/themes/indigo/static/icons/medium.svg new file mode 100644 index 0000000..2ad9fb4 --- /dev/null +++ b/hugo_blag/themes/indigo/static/icons/medium.svg @@ -0,0 +1 @@ + diff --git a/hugo_blag/themes/indigo/static/icons/microblog.svg b/hugo_blag/themes/indigo/static/icons/microblog.svg new file mode 100644 index 0000000..1435367 --- /dev/null +++ b/hugo_blag/themes/indigo/static/icons/microblog.svg @@ -0,0 +1 @@ +Micro.blogBW \ No newline at end of file diff --git a/hugo_blag/themes/indigo/static/icons/reddit-alien.svg b/hugo_blag/themes/indigo/static/icons/reddit-alien.svg new file mode 100644 index 0000000..56b913c --- /dev/null +++ b/hugo_blag/themes/indigo/static/icons/reddit-alien.svg @@ -0,0 +1,5 @@ + + diff --git a/hugo_blag/themes/indigo/static/icons/stack-overflow.svg b/hugo_blag/themes/indigo/static/icons/stack-overflow.svg new file mode 100644 index 0000000..5a6a34e --- /dev/null +++ b/hugo_blag/themes/indigo/static/icons/stack-overflow.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/hugo_blag/themes/indigo/static/icons/tumblr.svg b/hugo_blag/themes/indigo/static/icons/tumblr.svg new file mode 100644 index 0000000..68982fc --- /dev/null +++ b/hugo_blag/themes/indigo/static/icons/tumblr.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/hugo_blag/themes/indigo/static/icons/twitter.svg b/hugo_blag/themes/indigo/static/icons/twitter.svg new file mode 100644 index 0000000..2633841 --- /dev/null +++ b/hugo_blag/themes/indigo/static/icons/twitter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/hugo_blag/themes/indigo/static/images/site-logo.svg b/hugo_blag/themes/indigo/static/images/site-logo.svg new file mode 100644 index 0000000..f7ee96e --- /dev/null +++ b/hugo_blag/themes/indigo/static/images/site-logo.svg @@ -0,0 +1,12 @@ + + + + Combined Shape + Created with Sketch. + + + + + \ No newline at end of file diff --git a/hugo_blag/themes/indigo/static/mstile-144x144.png b/hugo_blag/themes/indigo/static/mstile-144x144.png new file mode 100644 index 0000000..c7926a9 Binary files /dev/null and b/hugo_blag/themes/indigo/static/mstile-144x144.png differ diff --git a/hugo_blag/themes/indigo/static/mstile-150x150.png b/hugo_blag/themes/indigo/static/mstile-150x150.png new file mode 100644 index 0000000..3b0b673 Binary files /dev/null and b/hugo_blag/themes/indigo/static/mstile-150x150.png differ diff --git a/hugo_blag/themes/indigo/static/mstile-310x150.png b/hugo_blag/themes/indigo/static/mstile-310x150.png new file mode 100644 index 0000000..672764f Binary files /dev/null and b/hugo_blag/themes/indigo/static/mstile-310x150.png differ diff --git a/hugo_blag/themes/indigo/static/mstile-310x310.png b/hugo_blag/themes/indigo/static/mstile-310x310.png new file mode 100644 index 0000000..545abed Binary files /dev/null and b/hugo_blag/themes/indigo/static/mstile-310x310.png differ diff --git a/hugo_blag/themes/indigo/static/mstile-70x70.png b/hugo_blag/themes/indigo/static/mstile-70x70.png new file mode 100644 index 0000000..16fe651 Binary files /dev/null and b/hugo_blag/themes/indigo/static/mstile-70x70.png differ diff --git a/hugo_blag/themes/indigo/static/safari-pinned-tab.svg b/hugo_blag/themes/indigo/static/safari-pinned-tab.svg new file mode 100644 index 0000000..f979035 --- /dev/null +++ b/hugo_blag/themes/indigo/static/safari-pinned-tab.svg @@ -0,0 +1,47 @@ + + + + +Created by potrace 1.11, written by Peter Selinger 2001-2013 + + + + + diff --git a/hugo_blag/themes/indigo/static/site.webmanifest b/hugo_blag/themes/indigo/static/site.webmanifest new file mode 100644 index 0000000..b20abb7 --- /dev/null +++ b/hugo_blag/themes/indigo/static/site.webmanifest @@ -0,0 +1,19 @@ +{ + "name": "", + "short_name": "", + "icons": [ + { + "src": "/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ], + "theme_color": "#ffffff", + "background_color": "#ffffff", + "display": "standalone" +} diff --git a/hugo_blag/themes/indigo/theme.toml b/hugo_blag/themes/indigo/theme.toml new file mode 100644 index 0000000..6ac94d9 --- /dev/null +++ b/hugo_blag/themes/indigo/theme.toml @@ -0,0 +1,21 @@ +# theme.toml template for a Hugo theme +# See https://github.com/gohugoio/hugoThemes#themetoml for an example + +name = "Indigo" +license = "MIT" +licenselink = "https://github.com/AngeloStavrow/indigo/blob/master/LICENSE.md" +description = "An IndieWeb-enabled, lightweight blogging theme for Hugo." +homepage = "https://github.com/AngeloStavrow/indigo" +tags = ["blog", "responsive", "minimal"] +features = ["indieweb", "blog"] +min_version = "0.58.3" + +[author] + name = "Angelo Stavrow" + homepage = "https://angelostavrow.com/" + +# If porting an existing theme +[original] + name = "" + homepage = "" + repo = "" \ No newline at end of file