<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Web on traviscj/blog</title>
    <link>https://traviscj.com/blog/tags/web/</link>
    <description>Recent content in Web on traviscj/blog</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Mon, 18 May 2020 15:13:00 -0700</lastBuildDate>
    <atom:link href="https://traviscj.com/blog/tags/web/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>interceptors</title>
      <link>https://traviscj.com/blog/post/2020-05-18-interceptors/</link>
      <pubDate>Mon, 18 May 2020 15:13:00 -0700</pubDate>
      <guid>https://traviscj.com/blog/post/2020-05-18-interceptors/</guid>
      <description>&lt;p&gt;INTERCEPTORS ARE SO COOL!&lt;/p&gt;&#xA;&lt;p&gt;Sometimes you need some &amp;ldquo;generic rails&amp;rdquo; that are still highly adaptable to other uses.&#xA;This is the basic problem solved by the &lt;a href=&#34;https://en.wikipedia.org/wiki/Interceptor_pattern&#34;&gt;Interceptor pattern&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I really love the way &lt;a href=&#34;https://square.github.io/okhttp/&#34;&gt;OkHttp&lt;/a&gt; does &lt;a href=&#34;https://square.github.io/okhttp/interceptors/&#34;&gt;interceptors&lt;/a&gt; for the generic rails of making HTTP calls, so I wanted to walk through a case study of why an interceptor might be useful and then try to synthesize some lessons &amp;amp; a minimal example of the pattern.&lt;/p&gt;</description>
    </item>
    <item>
      <title>unreasonable wish -- an sql interface to websites</title>
      <link>https://traviscj.com/blog/post/2019-01-06-sql_interface_to_websites/</link>
      <pubDate>Sun, 06 Jan 2019 00:00:00 +0000</pubDate>
      <guid>https://traviscj.com/blog/post/2019-01-06-sql_interface_to_websites/</guid>
      <description>&lt;p&gt;I was searching Amazon Prime for some Earl Grey tea for my wife.&#xA;I got these results&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://traviscj.com/blog/assets/earl_grey_tea.png&#34; alt=&#34;earl grey tea&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;This was just a basic search for &lt;a href=&#34;https://www.amazon.com/s?url=srs%3D7301146011%26search-alias%3Dpantry&amp;amp;field-keywords=earl+grey+tea&#34;&gt;earl grey tea&lt;/a&gt; in the Prime Pantry store.&lt;/p&gt;&#xA;&lt;p&gt;I would love to&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; products p&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;WHERE&lt;/span&gt; p.prime_pantry &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;AND&lt;/span&gt; p.keywords &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;earl grey tea&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;AND&lt;/span&gt; p.packaging &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;bulk&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I get that this&amp;rsquo;ll never happen, but man&amp;hellip; it&amp;rsquo;d be nice.&lt;/p&gt;</description>
    </item>
    <item>
      <title>moar stupid jquery tricks</title>
      <link>https://traviscj.com/blog/post/2018-10-23-moar_stupid_jquery_tricks/</link>
      <pubDate>Tue, 23 Oct 2018 00:00:00 +0000</pubDate>
      <guid>https://traviscj.com/blog/post/2018-10-23-moar_stupid_jquery_tricks/</guid>
      <description>&lt;p&gt;Sometimes it&amp;rsquo;s useful to use &lt;a href=&#34;https://tampermonkey.net/&#34;&gt;tampermonkey&lt;/a&gt; on a site without nice &lt;code&gt;id&lt;/code&gt;s for the elements you want to edit.&#xA;It turns out it&amp;rsquo;s still pretty easy!&lt;/p&gt;&#xA;&lt;p&gt;Take &lt;a href=&#34;https://traviscj.com/&#34;&gt;my own website&lt;/a&gt;; I have &lt;code&gt;&amp;lt;h2&amp;gt;&lt;/code&gt; elements for the headers, but none of them have any &lt;code&gt;id&lt;/code&gt;s associated.&#xA;But as discussed in the &lt;a href=&#34;https://traviscj.com/blog/post/2018-10-17-jquery_selectors/&#34;&gt;jquery selectors&lt;/a&gt; post, we can still select by just the tag, with a selector like&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$(&amp;quot;h2&amp;quot;)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This returns a &lt;code&gt;jQuery&lt;/code&gt; object, which behaves like an array.&#xA;If we want to select a particular one &amp;ndash; like &amp;ldquo;Research Interests&amp;rdquo; &amp;ndash; we can try accessing different elements until we get the one we want:&lt;/p&gt;</description>
    </item>
    <item>
      <title>killing all timeouts in js</title>
      <link>https://traviscj.com/blog/post/2018-10-17-killing_all_timeouts_in_js/</link>
      <pubDate>Wed, 17 Oct 2018 20:43:04 +0000</pubDate>
      <guid>https://traviscj.com/blog/post/2018-10-17-killing_all_timeouts_in_js/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://activelab.io/code-snippets/clearing-all-javascript-timeouts&#34;&gt;this article&lt;/a&gt; has a nice trick for killing all javascript timeouts:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;function stopAllTimeouts() {&#xA;    var id = window.setTimeout(null, 0);&#xA;    while (id--) {&#xA;        window.clearTimeout(id);&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;which can be entered on the javascript console and then run with&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;stopAllTimeouts()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This is an effective way to prevent javascript timeouts from doing a whole variety of things, like&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;carousels&lt;/li&gt;&#xA;&lt;li&gt;endless scrolls&lt;/li&gt;&#xA;&lt;li&gt;any other kind of animations&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>jquery selectors</title>
      <link>https://traviscj.com/blog/post/2018-10-17-jquery_selectors/</link>
      <pubDate>Wed, 17 Oct 2018 03:51:27 +0000</pubDate>
      <guid>https://traviscj.com/blog/post/2018-10-17-jquery_selectors/</guid>
      <description>&lt;p&gt;This is silly, but I always forget this:&lt;/p&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;p&gt;I also learned you can specify things like&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;// @require https://code.jquery.com/jquery-2.1.4.min.js&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;in a Tampermonkey script, even when a given site doesn&amp;rsquo;t already have jquery.&lt;/p&gt;</description>
    </item>
    <item>
      <title>todobackend.com</title>
      <link>https://traviscj.com/blog/post/2018-01-05-todobackend.com/</link>
      <pubDate>Fri, 05 Jan 2018 00:01:00 +0000</pubDate>
      <guid>https://traviscj.com/blog/post/2018-01-05-todobackend.com/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://www.todobackend.com/&#34;&gt;TodoBackend.com&lt;/a&gt; defines &lt;a href=&#34;http://www.todobackend.com/contribute.html&#34;&gt;a simple API&lt;/a&gt; and has a frontend that works given any backend URL.&lt;/p&gt;&#xA;&lt;p&gt;Particularly interesting to me:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/jhedev/todobackend-haskell&#34;&gt;haskell&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;super concise!&lt;/li&gt;&#xA;&lt;li&gt;whoa, 6 different backends!&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/jhedev/todobackend-haskell/blob/master/todobackend-spock/src/Main.hs&#34;&gt;spock backend&lt;/a&gt; is crazy concise.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/Faerbit/todo-backend-flask/blob/master/todo/views.py&#34;&gt;python + flask&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;seems like it would greatly benefit from a &lt;code&gt;Store&lt;/code&gt; object&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/raboof/todo-backend-akka/blob/master/src/main/scala/net/bzzt/todo/backend/akka/TodoStorage.scala&#34;&gt;scala + akka&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;crazy pattern matching in &lt;a href=&#34;https://github.com/raboof/todo-backend-akka/blob/master/src/main/scala/net/bzzt/todo/backend/akka/TodoRoutes.scala&#34;&gt;routes definition&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/ismagilov/todobackend-mangooio/tree/master/src/main/java&#34;&gt;java + mangooio + jOOQ&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;especially the distinction between &lt;code&gt;Todo&lt;/code&gt; and &lt;code&gt;TodoPatch&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;also really glad I don&amp;rsquo;t have to write &lt;a href=&#34;https://github.com/ismagilov/todobackend-mangooio/blob/master/src/main/resources/routes.yaml&#34;&gt;routes config&lt;/a&gt; separately from the code!&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/akiellor/todo-backend-compojure/blob/master/src/todo_backend_compojure/&#34;&gt;clojure + jetty/compojure + postgresql&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/hammerdr/todo-backend-rails&#34;&gt;rails&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/meier-christoph/todo-backend-golang-goa/blob/master/app/controllers.go&#34;&gt;go + goa&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>url encoding safe relational operators</title>
      <link>https://traviscj.com/blog/post/2017-11-29-url-encoding-safe-relational-operators/</link>
      <pubDate>Wed, 29 Nov 2017 07:55:04 +0000</pubDate>
      <guid>https://traviscj.com/blog/post/2017-11-29-url-encoding-safe-relational-operators/</guid>
      <description>&lt;p&gt;I was catching up on &lt;a href=&#34;https://publicobject.com/&#34;&gt;Jesse Wilson&amp;rsquo;s blog&lt;/a&gt; this morning, and in particular his post &lt;a href=&#34;https://publicobject.com/2017/08/01/url-encoding-is-material/&#34;&gt;URL Encoding Is Material&lt;/a&gt;.&#xA;In that article, he says&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;My advice&lt;/p&gt;&#xA;&lt;p&gt;If you’re defining your own URLs, you’ll save a lot of trouble by avoiding characters like &amp;lt;, &amp;gt;, {, }, +, ^, &amp;amp;, |, and ;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I came across this problem in one of my projects at work:&#xA;I wanted a page to display some recent records with 1) a &lt;code&gt;name&lt;/code&gt; field provided by the user and 2) a &lt;code&gt;value&lt;/code&gt; field that match $l \leq \text{value} \leq b$, where $l$ and $b$ are given by the user.&#xA;I also wanted that page to have a URL representing that condition, so that it could be easily shared with teammates and soforth.&#xA;When I started working on it, I didn&amp;rsquo;t have Jesse&amp;rsquo;s wisdom, and so I naively came up with a URL structure something like&lt;/p&gt;</description>
    </item>
    <item>
      <title>basic http requests and server handlers in clojure</title>
      <link>https://traviscj.com/blog/post/2017-02-01-basic_http_requests_and_server_handlers_in_clojure/</link>
      <pubDate>Wed, 01 Feb 2017 00:00:00 +0000</pubDate>
      <guid>https://traviscj.com/blog/post/2017-02-01-basic_http_requests_and_server_handlers_in_clojure/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been playing around a tiny bit with &lt;a href=&#34;https://clojure.org/&#34;&gt;clojure&lt;/a&gt;, and wanted to document the process of doing something pretty basic: make a project that can request my website over HTTPs.&lt;/p&gt;&#xA;&lt;p&gt;The first step is pretty easy:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;brew install leiningen&#xA;lein new random-experimentation&#xA;cd random-experimentation&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;and add &lt;code&gt;[clj-http &amp;quot;3.4.1&amp;quot;]&lt;/code&gt; to &lt;code&gt;project.clj&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The HTTPS part is a bit trickier.&#xA;The JDK doesn&amp;rsquo;t include the &lt;a href=&#34;https://letsencrypt.org/&#34;&gt;Letsencrypt&lt;/a&gt; certificates.&#xA;But I found a simple script &lt;a href=&#34;https://gist.github.com/Firefishy/109b0f1a90156f6c933a50fe40aa777e&#34;&gt;install-letsencrypt-in-jdk.sh&lt;/a&gt; that can set it up.&lt;/p&gt;</description>
    </item>
    <item>
      <title>switching over to https</title>
      <link>https://traviscj.com/blog/post/2016-04-15-switching_over_to_https/</link>
      <pubDate>Fri, 15 Apr 2016 00:00:00 +0000</pubDate>
      <guid>https://traviscj.com/blog/post/2016-04-15-switching_over_to_https/</guid>
      <description>&lt;p&gt;One of the things I&amp;rsquo;ve been meaning to do forever is switch things over to https.&#xA;By &amp;ldquo;things&amp;rdquo;, I mean the set of websites I run for some family and friends.&#xA;I tried it out with my personal website first, then flipped over the rest.&lt;/p&gt;&#xA;&lt;h2 id=&#34;implementation-notes&#34;&gt;implementation notes&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;I used the &lt;a href=&#34;https://letsencrypt.org/getting-started/&#34;&gt;letsencrypt start guide&lt;/a&gt; to generate the certificates.&lt;/li&gt;&#xA;&lt;li&gt;Modified the nginx config to:&#xA;a. serve ssl/https traffic on port 443 for the given domain with the proper https certificates/etc.&#xA;b. forward non-ssl/http traffic on port 80 to port 443 for the given domain&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;verification&#34;&gt;verification&lt;/h2&gt;&#xA;&lt;p&gt;It turns out that the nginx configuration files are a little bit error prone.&#xA;This probably means that I am doing something wrong, like not using some configuration management tool like puppet or ansible or whatever.&#xA;But for something as small scale as my site, it doesn&amp;rsquo;t really meet the cost-benefit threshold for learning a new tool/language.&#xA;I also even considered spinning up a simple one-off configuration generator that I&amp;rsquo;d need to figure out how to override and extend as needed.&lt;/p&gt;</description>
    </item>
    <item>
      <title>SSL Cert Reissue</title>
      <link>https://traviscj.com/blog/post/2014-04-09-ssl_cert_reissue/</link>
      <pubDate>Wed, 09 Apr 2014 00:00:00 +0000</pubDate>
      <guid>https://traviscj.com/blog/post/2014-04-09-ssl_cert_reissue/</guid>
      <description>&lt;p&gt;Like many others, I have been hit by the &lt;a href=&#34;http://heartbleed.com/&#34;&gt;heartbleed bug&lt;/a&gt;, which kinda sucks.&#xA;I don&amp;rsquo;t use SSL for anything very critical, but I do use it at [tcj.io tcj.io], my &amp;ldquo;projects&amp;rdquo; website.&#xA;My host, &lt;a href=&#34;https://linode.com&#34;&gt;Linode&lt;/a&gt;, has done a great job of &lt;a href=&#34;https://library.linode.com/security/openssl-heartbleed&#34;&gt;providing tutorials&lt;/a&gt; on how to deal with the situation.&#xA;The obvious first step (a couple of days ago) was to upgrade openssl itself:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;apt-get update&#xA;apt-get upgrade&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;But this only prevents the server from leaking keys going forward.&#xA;Since the vulnerability was in the wild for quite some time, I thought it prudent to reissue the certificates as&#xA;well.&#xA;Now that I had a bit more time, I went ahead and did a reissue to make sure that nothing going forward gets leaked.&#xA;This is (as usual) a bit annoying, because of the verification procedure at [Gandi gandi.net].&#xA;Otherwise, they&amp;rsquo;re pretty solid though, so I guess I&amp;rsquo;ll give them a pass on this one.&#xA;And they did allow a reissue without revoking, so that&amp;rsquo;s a good step!&lt;/p&gt;</description>
    </item>
    <item>
      <title>website basics</title>
      <link>https://traviscj.com/blog/post/2013-02-15-website_basics/</link>
      <pubDate>Fri, 15 Feb 2013 00:00:00 +0000</pubDate>
      <guid>https://traviscj.com/blog/post/2013-02-15-website_basics/</guid>
      <description>&lt;p&gt;Several of my classmates in graduate school are considering making websites around now, and have asked me to explain it.&#xA;I figured I&amp;rsquo;d explain the stack as I have it set up, and where you could make tradeoffs.&#xA;For now, I&amp;rsquo;m not going to include too many detail here; I just want to outline the possibilities and lingo so that researching options is a bit easier for the uninitiated.&lt;/p&gt;&#xA;&lt;p&gt;First off, many people are perfectly happy to use the school&amp;rsquo;s email and department web space.&#xA;If you only want to have a list of relevant papers and soforth, then this is a fine approach.&#xA;See the very bottom of this post for a couple potential ideas for organizing it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Wiki Problems</title>
      <link>https://traviscj.com/blog/post/2009-07-21-wiki_problems/</link>
      <pubDate>Tue, 21 Jul 2009 00:00:00 +0000</pubDate>
      <guid>https://traviscj.com/blog/post/2009-07-21-wiki_problems/</guid>
      <description>&lt;p&gt;I really like the idea of having a wiki website. It&amp;rsquo;s great to be able to share documents really easily, be able to edit stuff without logging in, track changes you&amp;rsquo;ve made, and so on.&lt;/p&gt;&#xA;&lt;p&gt;I have also tried quite a few wiki setups, including MediaWiki(mostly at a job a while back and a spectacular success), MoinMoin, and PmWiki. However, each of them fell flat in a certain annoying way.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Found - Wordpress Spam Virus in Theme files</title>
      <link>https://traviscj.com/blog/post/2009-04-01-found_wordpress_spam_virus_in_theme_files/</link>
      <pubDate>Wed, 01 Apr 2009 00:00:00 +0000</pubDate>
      <guid>https://traviscj.com/blog/post/2009-04-01-found_wordpress_spam_virus_in_theme_files/</guid>
      <description>&lt;p&gt;Almost a month ago, I was helping &lt;a href=&#34;http://www.jdbeals.com/blog&#34;&gt;my good buddy Beals&lt;/a&gt; get his Wordpress website set up. On looking close, I noticed something a little weird in a theme he had found(NOT Wordpress proper, to be clear):&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;D-69-91-134-36:black-abstract-20 tjohnson$ ls -alh *&#xA;-rw-r--r--  1 tjohnson staff  528 2008-07-24 08:35 404.php&#xA;-rw-r--r--  1 tjohnson staff 3.9K 2008-07-24 08:35 comments.php&#xA;-rw-r--r--  1 tjohnson staff 8.0K 2008-10-22 20:44 footer.php&#xA;-rw-r--r--  1 tjohnson staff  871 2008-10-22 10:10 functions.php&#xA;[more removed here]&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;As you can see, the footer and functions files are both modified much more recently than every other file, which seemed strange to me. So I took a look at the file:&lt;/p&gt;</description>
    </item>
    <item>
      <title>HMCP Set, TextMate, and RoR 2.0</title>
      <link>https://traviscj.com/blog/post/2009-02-06-hmcp_set_textmate_and_ror_2.0/</link>
      <pubDate>Fri, 06 Feb 2009 00:00:00 +0000</pubDate>
      <guid>https://traviscj.com/blog/post/2009-02-06-hmcp_set_textmate_and_ror_2.0/</guid>
      <description>&lt;p&gt;I found a great little LaTeX homework layout for typesetting math homeworks a while back, and I&amp;rsquo;ve meant to write it up for quite a while. It&amp;rsquo;s from Harvey Mudd College&amp;rsquo;s Mathematics Department, engineered to automatically satisfy the department guidelines on how homeworks should be laid out. They also have thesis and poster templates, but the homework installation proceedures and sty files are located on the &lt;a href=&#34;http://www.math.hmc.edu/computing/support/tex/classes/hmcpset/&#34;&gt;Homework Class&lt;/a&gt; page. Their website also has extensive information on their computer resources. While basically useless for anyone not at Harvey Mudd, it is a model for how this sort of website should look. Everything is clearly detailed at the perfect level, along with suggestions not just for how to do certain tasks, but also when you might want to do something.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Themes!</title>
      <link>https://traviscj.com/blog/post/2008-10-15-themes/</link>
      <pubDate>Wed, 15 Oct 2008 00:00:00 +0000</pubDate>
      <guid>https://traviscj.com/blog/post/2008-10-15-themes/</guid>
      <description>&lt;p&gt;In all of my time with wordpress, I&amp;rsquo;ve pretty much stuck to the default themes, figuring that what I had to say was a bit more important than what I was doing with it. But then I came across one with some fluid dynamics going on&amp;hellip; and I couldn&amp;rsquo;t pass it up. Maybe someday I&amp;rsquo;ll get around to throwing some of my own graphics up there, hehe. Enjoy!&lt;/p&gt;</description>
    </item>
    <item>
      <title>PHP Vulnerability Checklist</title>
      <link>https://traviscj.com/blog/post/2008-07-10-php_vulnerability_checklist/</link>
      <pubDate>Thu, 10 Jul 2008 12:00:00 +0000</pubDate>
      <guid>https://traviscj.com/blog/post/2008-07-10-php_vulnerability_checklist/</guid>
      <description>&lt;p&gt;Ray(the boss) and I were chatting about how we should implement our secure upload page. The way it should work is, an IP is added to the genhosts database, it sets up a 5 minute wait, and at the end of five minutes, redirects to the data upload page, at which point the computer is allowed to connect, since the new IP has propogated into /etc/hosts.allow(via a cronjob that takes MySQL entries and parses them(via HTTP and XML) into the standard /etc/hosts.allow format). It’s basically working, but we’re having a bunch of trouble getting IE and Firefox to redirect, since IE apparently detects my window.location.href and location.replace calls as popups, and blocks them.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Firefox PDF on OSX</title>
      <link>https://traviscj.com/blog/post/2008-06-22-firefox_pdf_on_osx/</link>
      <pubDate>Sun, 22 Jun 2008 00:00:00 +0000</pubDate>
      <guid>https://traviscj.com/blog/post/2008-06-22-firefox_pdf_on_osx/</guid>
      <description>&lt;p&gt;June 3 was a fantastic day, though I didn’t know it at the time. The reason? My biggest bitch about Firefox has finally been fixed. The big problem is that Firefox’s OSX program has the default behavior of saving PDFs to Desktop and starting Preview with it. Which isn’t a huge problem, except that if you download the file several times, it just downloads a file with -N appended. This is sortof a pain because in college a lot of teachers call files hw5.pdf, which means that I pretty much have to go to the website each time, or look through about 5 files each time.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Vertigo</title>
      <link>https://traviscj.com/blog/post/2008-03-12-vertigo/</link>
      <pubDate>Wed, 12 Mar 2008 12:00:00 +0000</pubDate>
      <guid>https://traviscj.com/blog/post/2008-03-12-vertigo/</guid>
      <description>&lt;p&gt;No, not that dizzy, spinning sensation. The Firefox extension.&lt;/p&gt;&#xA;&lt;p&gt;Someone finally caught on to the fact that on a lot of modern computers, we have a lot more horizontal space than vertical. Whoever it was, they must have also been miffed that they never seemed to have room for all of their firefox tabs. So, they made a vertical tab menu, which is actually pretty cool. The standard stuff (ctrl-tab) still works, which is convenient.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
