<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Darrel Herbst</title>
    <link>https://www.darrelherbst.com/</link>
    <description>Recent content on Darrel Herbst</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Sat, 28 Dec 2024 18:24:05 -0500</lastBuildDate>
    <atom:link href="https://www.darrelherbst.com/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>I Am Verified on Bluesky! (ha ha)</title>
      <link>https://www.darrelherbst.com/post/i-am-verified-on-bluesky/</link>
      <pubDate>Sat, 28 Dec 2024 17:51:20 -0500</pubDate>
      <guid>https://www.darrelherbst.com/post/i-am-verified-on-bluesky/</guid>
      <description>&lt;h1 id=&#34;verified-on-bluesky-i-classbi-bi-patch-check-fill-stylecolorlightbluei&#34;&gt;Verified on BlueSky &lt;i class=&#34;bi bi-patch-check-fill&#34; style=&#34;color:lightblue;&#34;&gt;&lt;/i&gt;&lt;/h1&gt;&#xA;&lt;p&gt;&lt;i class=&#34;bi bi-emoji-smile&#34;&gt;&lt;/i&gt; &lt;i class=&#34;bi bi-emoji-smile-upside-down-fill&#34;&gt;&lt;/i&gt; &lt;i class=&#34;bi bi-emoji-smile&#34;&gt;&lt;/i&gt; &lt;i class=&#34;bi bi-emoji-smile-upside-down-fill&#34;&gt;&lt;/i&gt; &lt;i class=&#34;bi bi-emoji-smile&#34;&gt;&lt;/i&gt;&lt;/p&gt;&#xA;&lt;p&gt;I had about zero chance of getting verified on Twitter.  But guess what?  You can self verify yourself on BlueSky, and it is quite&#xA;easy to do so.&lt;/p&gt;&#xA;&lt;p&gt;You can read how to do it here: &lt;a href=&#34;https://bsky.social/about/blog/4-28-2023-domain-handle-tutorial&#34;&gt;https://bsky.social/about/blog/4-28-2023-domain-handle-tutorial&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;But I&amp;rsquo;m happy they say this is how you can be verified.&lt;/p&gt;&#xA;&lt;p&gt;It would be a little nicer if you could have nice checkmark next to your name when you do so. &lt;i class=&#34;bi bi-patch-check-fill&#34; style=&#34;color:lightblue;&#34;&gt;&lt;/i&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Phonenumber, quickly convert letters to a dialable phone number.</title>
      <link>https://www.darrelherbst.com/project/phonenumber/</link>
      <pubDate>Sat, 28 Dec 2024 17:07:23 -0500</pubDate>
      <guid>https://www.darrelherbst.com/project/phonenumber/</guid>
      <description>&lt;h1 id=&#34;what-is-the-phone-number--why-do-they-do-this-to-me&#34;&gt;What is the phone number?  Why do they do this to me?&lt;/h1&gt;&#xA;&lt;p&gt;I very rarely have to use the phone to call businesses any more.  But when I do need to, almost every time they have some wacky mnemonic number to call, and don&amp;rsquo;t publish the actual digits I need, so I have to stare at the phone and try to transpose it, and copy and paste doesn&amp;rsquo;t work.&lt;/p&gt;&#xA;&lt;p&gt;So created this cli command &lt;code&gt;phonenumber&lt;/code&gt;.  Type the number, and it returns the actual digits you need to punch into the phone.&lt;/p&gt;</description>
    </item>
    <item>
      <title>[Hilt] ViewModel constructor should be annotated with @Inject instead of @AssistedInject.</title>
      <link>https://www.darrelherbst.com/post/2024-05-02-viewmodel-constructor-should-be-annotated-with-inject-instead-of-assistedinject/</link>
      <pubDate>Thu, 02 May 2024 07:11:56 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/2024-05-02-viewmodel-constructor-should-be-annotated-with-inject-instead-of-assistedinject/</guid>
      <description>&lt;p&gt;Ran across a bug in Android Kotlin with Compose.   Kept getting&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;code&gt;[Hilt] ViewModel constructor should be annotated with @Inject instead of @AssistedInject.&lt;/code&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This is because I was using hilt 2.48.&lt;/p&gt;&#xA;&lt;p&gt;Upgraded to 2.49 and things work as expected.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;dependencies {&#xA;    implementation(&amp;#34;com.google.dagger:hilt-android:2.49&amp;#34;)&#xA;    kapt(&amp;#34;com.google.dagger:hilt-android-compiler:2.49&amp;#34;)&#xA;    ...&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Extending GPG Signing Keys</title>
      <link>https://www.darrelherbst.com/post/2024-01-13-extending-gpg-signing-keys/</link>
      <pubDate>Sat, 13 Jan 2024 15:00:31 -0500</pubDate>
      <guid>https://www.darrelherbst.com/post/2024-01-13-extending-gpg-signing-keys/</guid>
      <description>&lt;p&gt;You might remember &lt;a href=&#34;https://www.darrelherbst.com/post/2019-10-25-sign-git-commits/&#34;&gt;Sign your Git Commits&lt;/a&gt; and a few years later you can&amp;rsquo;t sign a commit because your key has expired.&lt;/p&gt;&#xA;&lt;h1 id=&#34;but-can-you-extend-expired-keys&#34;&gt;But can you extend expired keys?&lt;/h1&gt;&#xA;&lt;h2 id=&#34;yes-you-can-renew-them&#34;&gt;Yes, you can renew them.&lt;/h2&gt;&#xA;&lt;pre&gt;&lt;code&gt;gpg --list-keys&#xA;gpg --edit-key (keyid)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Now change the expiration:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;gpg&amp;gt; expire&#xA;(go through the prompts to extend it, for example 1 year: 1y)&#xA;gpg&amp;gt; save&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;If you have to also change a subkey, enter&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;gpg&amp;gt; key 1&#xA;gpg&amp;gt; expire&#xA;(prompts)&#xA;gpg&amp;gt; save&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Remember to export the key and re-add it to github.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Under the Portal</title>
      <link>https://www.darrelherbst.com/project/under-the-portal/</link>
      <pubDate>Sat, 13 Jan 2024 09:09:39 -0500</pubDate>
      <guid>https://www.darrelherbst.com/project/under-the-portal/</guid>
      <description>&lt;p&gt;Started a new story at &lt;a href=&#34;https://www.amazon.com/kindle-vella/story/B0CDJJW4Z6&#34;&gt;Under The Portal&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;img class=&#34;d-none d-lg-block&#34; src=&#34;https://www.darrelherbst.com/images/under-the-portal.png&#34; alt=&#34;Under the Portal Book Cover&#34; width=&#34;256&#34;&gt;&#xA;&lt;img class=&#34;d-lg-none img-fluid w-100 mb-3&#34; src=&#34;https://www.darrelherbst.com/images/under-the-portal.png&#34; alt=&#34;Under the Portal Book Cover&#34;&gt;&#xA;&#xA;&lt;p&gt;It&amp;rsquo;s the story of four HV-MTL robots trying to figure out their path.  New episodes are dropped from time to time.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hugo Empty Bootstrap Template</title>
      <link>https://www.darrelherbst.com/project/hugo-empty-bootstrap-template/</link>
      <pubDate>Fri, 27 Jan 2023 13:32:00 -0400</pubDate>
      <guid>https://www.darrelherbst.com/project/hugo-empty-bootstrap-template/</guid>
      <description>&lt;p&gt;Started a new project at &lt;a href=&#34;https://github.com/streamingrat/hugo-empty-bootstrap&#34;&gt;https://github.com/streamingrat/hugo-empty-bootstrap&lt;/a&gt; to be able to use &lt;a href=&#34;https://getbootstrap.com&#34;&gt;bootstrap&lt;/a&gt; and &lt;a href=&#34;https://icons.getbootstrap.com/&#34;&gt;bootstrap-icons&lt;/a&gt; quickly.&lt;/p&gt;&#xA;&lt;p&gt;There&amp;rsquo;s a branch to use 5.3.0-alpha so you can use the included theme switcher to toggle between light/dark/auto mode.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Creating Your Own Homebrew Tap</title>
      <link>https://www.darrelherbst.com/post/2021-01-04-creating-your-own-homebrew-tap/</link>
      <pubDate>Mon, 04 Jan 2021 08:47:19 -0500</pubDate>
      <guid>https://www.darrelherbst.com/post/2021-01-04-creating-your-own-homebrew-tap/</guid>
      <description>&lt;h1 id=&#34;creating-my-own-homebrew-tap&#34;&gt;Creating my own homebrew tap&lt;/h1&gt;&#xA;&lt;p&gt;I spend most of my day in linux, and the rest of the time in osx.  I&amp;rsquo;ve been writing a bunch of command line tools here and there.  The easiest way to share them with others is to create homebrew formulae or casks.  However, if your project isn&amp;rsquo;t popular enough, you won&amp;rsquo;t be added to homebrew-core.  Thus you can create your own homebrew tap where you can share your formulae and casks with the world, and other people can install your software by typing &lt;code&gt;homebrew install &amp;lt;username&amp;gt;/tapname/whatever&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Septa golang library and command</title>
      <link>https://www.darrelherbst.com/project/septa/</link>
      <pubDate>Thu, 24 Dec 2020 10:30:00 -0400</pubDate>
      <guid>https://www.darrelherbst.com/project/septa/</guid>
      <description>&lt;h1 id=&#34;i-used-to-commute-to-work&#34;&gt;I used to commute to work&lt;/h1&gt;&#xA;&lt;p&gt;My &lt;a href=&#34;https://github.com/dherbst/septa&#34;&gt;Septa&lt;/a&gt; project is two things; a golang library to the septa api, and a command line tool to check when the train will be at the station and if it is running late.&lt;/p&gt;&#xA;&lt;p&gt;You can build the project easily if you have docker on your mac and use &lt;code&gt;~/bin&lt;/code&gt; on your path.&lt;/p&gt;&#xA;&lt;p&gt;To see the &lt;a href=&#34;https://github.com/dherbst/septa#next-to-arrive---septa-next-src-dest&#34;&gt;Next To Arrive&lt;/a&gt; in the terminal type:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;septa next Narberth &amp;quot;Suburban Station&amp;quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;And you&amp;rsquo;ll see if the train is on time.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hugo isn&#39;t rendering my urls, it is printing ZgotmplZ, how can I fix this?</title>
      <link>https://www.darrelherbst.com/post/2020-06-20-hugo-zgotmplz-url/</link>
      <pubDate>Sun, 21 Jun 2020 07:59:48 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/2020-06-20-hugo-zgotmplz-url/</guid>
      <description>&lt;p&gt;The function &lt;code&gt;isSafeURL&lt;/code&gt; in &lt;a href=&#34;https://golang.org/src/html/template/url.go&#34;&gt;https://golang.org/src/html/template/url.go&lt;/a&gt; looks at the URI scheme.  The scheme is everyting that comes before the colon &amp;ldquo;:&amp;rdquo; rune.  If the scheme isn&amp;rsquo;t one of &lt;code&gt;{ http, https, mailto }&lt;/code&gt; then the URL is not considered safe and &lt;code&gt;ZgotmplZ&lt;/code&gt; is printed.&lt;/p&gt;&#xA;&lt;p&gt;I was trying to render some &lt;code&gt;file:///filename.html&lt;/code&gt; links and they were not rendering when using hugo.  You can fix this by using the &lt;code&gt;safeURL&lt;/code&gt; filter:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;link&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;rel&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;stylesheet&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;{{&amp;#34;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;css&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;my&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;css&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;absURL&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;safeURL&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;}}&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;text/css&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>First-2020</title>
      <link>https://www.darrelherbst.com/post/2020-01-01-first/</link>
      <pubDate>Wed, 01 Jan 2020 10:02:12 -0500</pubDate>
      <guid>https://www.darrelherbst.com/post/2020-01-01-first/</guid>
      <description>&lt;h1 id=&#34;recap-2019&#34;&gt;Recap 2019&lt;/h1&gt;&#xA;&lt;p&gt;Got a few things done, the &lt;a href=&#34;https://github.com/dherbst/septa&#34;&gt;https://github.com/dherbst/septa&lt;/a&gt; command line tool for getting the Next to Arrive trains, and a custom WTF module (it&amp;rsquo;s private, so you won&amp;rsquo;t find it).&lt;/p&gt;&#xA;&lt;h1 id=&#34;things-to-get-to-in-2020&#34;&gt;Things to get to in 2020&lt;/h1&gt;&#xA;&lt;p&gt;Now that private mods are possible, moving projects to use go modules, and maybe using go-keychain to keep private configs for wtf.  A few small android apps that I need as well.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Sign your git Commits</title>
      <link>https://www.darrelherbst.com/post/2019-10-25-sign-git-commits/</link>
      <pubDate>Fri, 25 Oct 2019 20:18:44 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/2019-10-25-sign-git-commits/</guid>
      <description>&lt;p&gt;When you want to make sure your commits are yours, or you want to make sure only people that are really on your team are the ones making changes.  Sign your commits!&lt;/p&gt;&#xA;&lt;p&gt;These are the steps I took on a mac because I didn&amp;rsquo;t want to install a bunch of software that I wasn&amp;rsquo;t going to use.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;brew install gpg pinentry-mac&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Add the following to your &lt;code&gt;.bash_profile&lt;/code&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;export GPG_TTY=$(tty)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Create a gpg key (assuming you have at least gpg 2.1.17)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hugo Publishdate Defaults to Date</title>
      <link>https://www.darrelherbst.com/post/2019-01-03-hugo-publishdate-defaults-to-date/</link>
      <pubDate>Thu, 03 Jan 2019 07:09:00 -0500</pubDate>
      <guid>https://www.darrelherbst.com/post/2019-01-03-hugo-publishdate-defaults-to-date/</guid>
      <description>&lt;p&gt;Well how about that.  When I first started to use hugo to publish things, I found that I had to set both &lt;code&gt;PublishDate&lt;/code&gt; and &lt;code&gt;Date&lt;/code&gt; if I wanted to schedule an article to be published.  It seems that somewhere along the way &lt;code&gt;if PublishDate.IsZero() { PublishDate = Date }&lt;/code&gt; was implemented, which turns out to be exactly what I want.&lt;/p&gt;&#xA;&lt;p&gt;Thank you Hugo!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated Go Build Lightning Talk</title>
      <link>https://www.darrelherbst.com/post/2019-01-02-updated-go-build-lightning-talk/</link>
      <pubDate>Wed, 02 Jan 2019 07:32:01 -0500</pubDate>
      <guid>https://www.darrelherbst.com/post/2019-01-02-updated-go-build-lightning-talk/</guid>
      <description>&lt;p&gt;Update: things have changed, I no longer recommend this complicated approach.  Use the athens proxy instead.&lt;/p&gt;&#xA;&lt;p&gt;&lt;del&gt;I&amp;rsquo;m still not a fan of gomod because it pulls the code from the repositories that exist that I don&amp;rsquo;t have control of.  This means that someone can delete or change things and I won&amp;rsquo;t have a consistent copy to build with.&lt;/del&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;del&gt;In these slides &lt;a href=&#34;https://go-talks.appspot.com/github.com/dherbst/go-lightning-build/go-lightning-build.slide&#34;&gt;https://go-talks.appspot.com/github.com/dherbst/go-lightning-build/go-lightning-build.slide&lt;/a&gt; I explain how we use &lt;code&gt;make&lt;/code&gt; to clone in from our own forks of the packages and then build them.&lt;/del&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Bootstrap a New Vue Project, and some other tips for 2019</title>
      <link>https://www.darrelherbst.com/post/2019-01-01-bootstrap-a-new-vue-project/</link>
      <pubDate>Tue, 01 Jan 2019 09:03:54 -0500</pubDate>
      <guid>https://www.darrelherbst.com/post/2019-01-01-bootstrap-a-new-vue-project/</guid>
      <description>&lt;p&gt;A couple of things that I do to start a new vue project.  Writing it here and will add to it over time.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;npm install -g @vue/cli&#xA;vue init webpack projectname&#xA;npm install --save vue-analytics&#xA;npm install --save vue-material&#xA;npm install --save firebase&#xA;firebase init&#xA;   public: web/dist&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h1 id=&#34;gitignore&#34;&gt;.gitignore&lt;/h1&gt;&#xA;&lt;pre&gt;&lt;code&gt;public&#xA;*~&#xA;.DS_Store&#xA;node_modules/&#xA;/dist/&#xA;npm-debug.log*&#xA;yarn-debug.log*&#xA;yarn-error.log*&#xA;/test/unit/coverage/&#xA;/test/e2e/reports/&#xA;selenium-debug.log&#xA;# Editor directories and files&#xA;.idea&#xA;.vscode&#xA;*.suo&#xA;*.ntvs*&#xA;*.njsproj&#xA;*.sln&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h1 id=&#34;xcrun-error-invalid-active-developer-path&#34;&gt;xcrun: error: invalid active developer path&lt;/h1&gt;&#xA;&lt;p&gt;After upgrading, you have to run&lt;/p&gt;</description>
    </item>
    <item>
      <title>Adding a Scream Emoji to Go</title>
      <link>https://www.darrelherbst.com/post/2018-11-19-adding-a-scream-emoji-to-go/</link>
      <pubDate>Mon, 19 Nov 2018 07:24:28 -0500</pubDate>
      <guid>https://www.darrelherbst.com/post/2018-11-19-adding-a-scream-emoji-to-go/</guid>
      <description>&lt;p&gt;Want to add the extra emojis to your Golang projects?   Here&amp;rsquo;s a way to add the :scream: emoji when you encounter an error.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;package&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;main&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;s&#34;&gt;&amp;#34;fmt&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;s&#34;&gt;&amp;#34;unicode/utf8&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;func&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;nx&#34;&gt;b&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[]&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;byte&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;mh&#34;&gt;0xF0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;0x9F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;0x98&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;0xB1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;nx&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;_&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;utf8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;DecodeRune&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;nx&#34;&gt;fmt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;Printf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;%c\n&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Timer and Notification on OSX</title>
      <link>https://www.darrelherbst.com/post/2018-05-06-timer-and-notification-on-osx/</link>
      <pubDate>Sun, 06 May 2018 14:18:00 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/2018-05-06-timer-and-notification-on-osx/</guid>
      <description>&lt;p&gt;A long time ago when I spent most of my time on a linux laptop in school, I had many small utilities I used to help manage time.   Since osx notifications are somewhat useful, although I mostly turn them off for everything, this small script helps a bunch:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#!/usr/bin/env bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;msg&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Hey &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; from `date`&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sleep &lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; osascript -e &lt;span class=&#34;s2&#34;&gt;&amp;#34;display notification \&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$msg&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;\&amp;#34; with title \&amp;#34;Hey!\&amp;#34;&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Geolocation with cdns</title>
      <link>https://www.darrelherbst.com/post/2017-05-21-geolocation-with-cdns/</link>
      <pubDate>Sun, 21 May 2017 11:42:37 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/2017-05-21-geolocation-with-cdns/</guid>
      <description>&lt;h1 id=&#34;geolocation-with-cdns&#34;&gt;Geolocation with cdns&lt;/h1&gt;&#xA;&lt;p&gt;Put together a small repo to explain how to get geolocation on the server side for different cdns like Akamai, Cloudfront, and others.&lt;/p&gt;&#xA;&lt;p&gt;Enjoy it at &lt;a href=&#34;https://github.com/dherbst/geo-targeting&#34;&gt;https://github.com/dherbst/geo-targeting&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Cloudfront in front of s3 redirect resulting in 403</title>
      <link>https://www.darrelherbst.com/post/2017-05-21-cloudfront-redirect-403/</link>
      <pubDate>Sun, 21 May 2017 09:00:00 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/2017-05-21-cloudfront-redirect-403/</guid>
      <description>&lt;h1 id=&#34;i-moved-a-few-websites-to-cloudfront-and-s3&#34;&gt;I moved a few websites to cloudfront and s3&lt;/h1&gt;&#xA;&lt;p&gt;The apex/root domains like example.com I wanted to redirect to &lt;a href=&#34;https://www.example.com&#34;&gt;www.example.com&lt;/a&gt; using cloudfront.   So I set up cloudfront with the s3 bucket which had website redirect turned on, but I kept getting a 403 when going to &lt;a href=&#34;https://example.com&#34;&gt;https://example.com&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-solution&#34;&gt;The solution&lt;/h2&gt;&#xA;&lt;p&gt;It seems that when cloudfront is set up to speak with the REST api for the bucket, it doesn&amp;rsquo;t get the redirect properly.   So you have to change the origin to be the http address for the s3 bucket.  Once I did that, the 403 goes away, and cloudfront serves the 301 redirect to &lt;a href=&#34;https://www.example.com&#34;&gt;www.example.com&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Starter for an AppEngine go service    </title>
      <link>https://www.darrelherbst.com/project/go-appengine-service-starter/</link>
      <pubDate>Thu, 30 Jun 2016 19:30:00 -0400</pubDate>
      <guid>https://www.darrelherbst.com/project/go-appengine-service-starter/</guid>
      <description>&lt;h1 id=&#34;where-i-work-i-do-a-lot-of-backend-services-work&#34;&gt;Where I work, I do a lot of backend services work&lt;/h1&gt;&#xA;&lt;p&gt;I spend most of my time on the backend api, not the frontend user experience.  So I usually need to quickly start a backend api service and get it going immediately so we can play around with some ideas and get things going quickly.&lt;/p&gt;&#xA;&lt;p&gt;In the future, since I&amp;rsquo;ve been playing with firebase a lot, I might just end up using that, but there isn&amp;rsquo;t a good authentication project I can clone right now.   Perhaps that is next on the task list.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Gcloud without ssl?</title>
      <link>https://www.darrelherbst.com/post/2016-06-30-gcloud-why-no-ssl/</link>
      <pubDate>Thu, 30 Jun 2016 19:20:00 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/2016-06-30-gcloud-why-no-ssl/</guid>
      <description>&lt;h1 id=&#34;at-pwa-summit-2016-they-made-a-big-deal-about-h2-and-https&#34;&gt;At PWA summit 2016 they made a big deal about h2 and https&lt;/h1&gt;&#xA;&lt;p&gt;But you can&amp;rsquo;t host a cloud storage site with https.   Strange.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Rust cross compile for raspberry pi</title>
      <link>https://www.darrelherbst.com/post/2016-04-28-rust-cross-compile/</link>
      <pubDate>Thu, 28 Apr 2016 08:14:06 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/2016-04-28-rust-cross-compile/</guid>
      <description>&lt;h1 id=&#34;cross-compiling-rust&#34;&gt;Cross compiling rust&lt;/h1&gt;&#xA;&lt;p&gt;Been working with a raspberry pi, wanted to figure out how to put my rust program on it while working on a GCE instance.  Check out &lt;a href=&#34;https://github.com/japaric/rust-cross&#34;&gt;https://github.com/japaric/rust-cross&lt;/a&gt; for tips on cross compiling rust.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Format seconds to time with milliseconds in python</title>
      <link>https://www.darrelherbst.com/post/2016-03-05-python-format-seconds-to-time-with-milliseconds/</link>
      <pubDate>Sat, 05 Mar 2016 08:39:55 -0500</pubDate>
      <guid>https://www.darrelherbst.com/post/2016-03-05-python-format-seconds-to-time-with-milliseconds/</guid>
      <description>&lt;p&gt;When you need to create video subtitles in &lt;a href=&#34;SRT&#34;&gt;https://en.wikipedia.org/wiki/SubRip&lt;/a&gt; format the timecode needs to be &lt;em&gt;hours:minutes:seconds,milliseconds&lt;/em&gt;, like &lt;code&gt;01:02:03,456&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I generally store the times in milliseconds so we don&amp;rsquo;t have to deal with floats or strings.  But when you want to to format these, there are number of different ways to do it.   One way is to leverage the python &lt;code&gt;datetime&lt;/code&gt; package like this:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;fmttime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;millisecs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;secs&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;millisecs&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;1000.0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;d&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;timedelta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;seconds&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;secs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;t&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;min&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;time&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;milli&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;strftime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%f&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)[:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;value&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;strftime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;%H:%M:%S,&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;milli&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;value&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Docker without sudo</title>
      <link>https://www.darrelherbst.com/post/2016-01-23-docker-without-sudo/</link>
      <pubDate>Sat, 23 Jan 2016 19:26:00 -0500</pubDate>
      <guid>https://www.darrelherbst.com/post/2016-01-23-docker-without-sudo/</guid>
      <description>&lt;p&gt;Recent versions of docker create a docker group.  So now you can add your user to the docker group so you don&amp;rsquo;t have to type &lt;code&gt;sudo docker&lt;/code&gt; when you want to run a docker command.&lt;/p&gt;&#xA;&lt;p&gt;On ubuntu:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo gpasswd -a ${USER} docker&#xA;sudo service docker restart&#xA;shell (you have to login again)&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Using HTML in markdown</title>
      <link>https://www.darrelherbst.com/post/2016-01-09-html-in-markdown/</link>
      <pubDate>Sat, 09 Jan 2016 07:41:12 -0500</pubDate>
      <guid>https://www.darrelherbst.com/post/2016-01-09-html-in-markdown/</guid>
      <description>&lt;p&gt;Lately I&amp;rsquo;ve been working on a few sites to enable people to create content for their sites easily using markdown.  Editing html is a pain, and it is easier to write in a textfield or texteditor for most people than some kind of wysiwyg html editor.   Plus there are preview components in javascript which make creating a CMS really easy for these things.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-about-when-you-want-to-use-plain-old-html&#34;&gt;What about when you want to use plain old html?&lt;/h2&gt;&#xA;&lt;p&gt;Because the markdown syntax is simplified, every once in a while you want to jazz up your page with something a little more complicated.  Just drop in the html - but remember a few rules about html in markdown &lt;a href=&#34;http://daringfireball.net/projects/markdown/syntax#html&#34;&gt;http://daringfireball.net/projects/markdown/syntax#html&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using the Pixel C</title>
      <link>https://www.darrelherbst.com/post/2015-12-14-using-the-pixel-c/</link>
      <pubDate>Mon, 14 Dec 2015 22:29:41 -0500</pubDate>
      <guid>https://www.darrelherbst.com/post/2015-12-14-using-the-pixel-c/</guid>
      <description>&lt;h1 id=&#34;so-ive-been-using-the-pixel-c-for-a-few-hours&#34;&gt;So I&amp;rsquo;ve been using the Pixel C for a few hours&lt;/h1&gt;&#xA;&lt;p&gt;I like it a lot.  I read a very little bit about the pixel c before I started using it, and I was mainly concerned with:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Alt-tab - there was conjecture it doesn&amp;rsquo;t work.  Well, it does switch between apps, so rest easy.&lt;/li&gt;&#xA;&lt;li&gt;No escape key.   You can hit the &amp;lsquo;&amp;hellip;&amp;rsquo; key and 1 so in emacs parlance &amp;hellip;-1 is escape.  Works great.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;I was a little concerned with finding a good ssh client app.  So far I like connectbot.  I&amp;rsquo;ve been using connectbot for a couple of years, but haven&amp;rsquo;t used it recently.  So far it works great.  I did not bother with trying to import an existing private key, and instead had it generate a new private key and then placed the public one where I need to ssh to.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How many developers are in philly</title>
      <link>https://www.darrelherbst.com/post/151130-how-many-developers-in-philly/</link>
      <pubDate>Mon, 30 Nov 2015 19:52:51 -0500</pubDate>
      <guid>https://www.darrelherbst.com/post/151130-how-many-developers-in-philly/</guid>
      <description>&lt;h1 id=&#34;so-there-is-the-httpphillydevorg-slack-and-youll-wonder&#34;&gt;So there is the &lt;a href=&#34;http://phillydev.org&#34;&gt;http://phillydev.org&lt;/a&gt; slack, and you&amp;rsquo;ll wonder&lt;/h1&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;How many developers are there in Philadelphia?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;According to the 2014 census, you have approximately 1.5 million people in Philadelphia County, and 12.8 Million in Pennsylvania [1].&lt;/p&gt;&#xA;&lt;p&gt;In the factfinder [2] for Philadelphia County, look at the Computer and mathematical occupation 12,210 +/- 846.&lt;/p&gt;&#xA;&lt;p&gt;Right now we have 1338 in the Phillydev slack, so there are few more to join up.&lt;/p&gt;&#xA;&lt;p&gt;[1] &lt;a href=&#34;http://quickfacts.census.gov/qfd/states/42/42101.html&#34;&gt;http://quickfacts.census.gov/qfd/states/42/42101.html&lt;/a&gt;&#xA;[2] &lt;a href=&#34;http://factfinder.census.gov/faces/tableservices/jsf/pages/productview.xhtml?src=CF&#34;&gt;http://factfinder.census.gov/faces/tableservices/jsf/pages/productview.xhtml?src=CF&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>slack invite script</title>
      <link>https://www.darrelherbst.com/project/slack-invite-script/</link>
      <pubDate>Sun, 01 Nov 2015 08:28:37 -0500</pubDate>
      <guid>https://www.darrelherbst.com/project/slack-invite-script/</guid>
      <description>&lt;h1 id=&#34;so-you-want-to-create-a-new-slack-team&#34;&gt;So you want to create a new slack team?&lt;/h1&gt;&#xA;&lt;p&gt;Once you do, you&amp;rsquo;ll need to send out a lot of invites.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Really liking hugo</title>
      <link>https://www.darrelherbst.com/post/151022-really-liking-hugo/</link>
      <pubDate>Thu, 22 Oct 2015 23:07:50 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/151022-really-liking-hugo/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve moved my site so it is generated by &lt;a href=&#34;http://gohugo.io&#34;&gt;http://gohugo.io&lt;/a&gt; now.  I really like the ability to easily create a theme and generate a static html site.  When needed, I can also use angularjs and an api that I write on the server side.&lt;/p&gt;</description>
    </item>
    <item>
      <title>about</title>
      <link>https://www.darrelherbst.com/about/</link>
      <pubDate>Wed, 21 Oct 2015 19:36:43 -0400</pubDate>
      <guid>https://www.darrelherbst.com/about/</guid>
      <description></description>
    </item>
    <item>
      <title>AppEngine logs and BigTable</title>
      <link>https://www.darrelherbst.com/post/appengine-logs-and-bigtable/</link>
      <pubDate>Sat, 17 Oct 2015 07:58:04 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/appengine-logs-and-bigtable/</guid>
      <description>&lt;h1 id=&#34;appengine-logs-and-google-big-table-queries&#34;&gt;AppEngine Logs and Google Big Table queries&lt;/h1&gt;&#xA;&lt;p&gt;Start out by looking at your AppEngine application you have created.  There will be a lot of logs if you have a site you are running with a lot of traffic.   At some point you want to do some analysis of what&amp;rsquo;s going on.   A post on the google developer blog [http://googleappengine.blogspot.com/2012/07/analyzing-your-google-app-engine-logs.html] gives some insight into how to go about it.  The post points you at slides in &lt;a href=&#34;http://log2bq-codelab-io12.appspot.com/slides#2&#34;&gt;http://log2bq-codelab-io12.appspot.com/slides#2&lt;/a&gt; which explain how to import the AppEngine logs into BigQuery.  There are a lot of steps.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Remote-jobs list</title>
      <link>https://www.darrelherbst.com/post/151014-remote-jobs-list/</link>
      <pubDate>Wed, 14 Oct 2015 22:58:27 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/151014-remote-jobs-list/</guid>
      <description>&lt;p&gt;Today I learned about &lt;a href=&#34;https://github.com/jessicard/remote-jobs&#34;&gt;https://github.com/jessicard/remote-jobs&lt;/a&gt; which is interesting that there are so many remote friendly employers out there.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Get Google Oauth2 JWT Token</title>
      <link>https://www.darrelherbst.com/project/get-google-oauth2-jwt-token/</link>
      <pubDate>Tue, 06 Oct 2015 09:45:54 -0500</pubDate>
      <guid>https://www.darrelherbst.com/project/get-google-oauth2-jwt-token/</guid>
      <description>&lt;h1 id=&#34;how-do-i-automate-deploying-to-appengine&#34;&gt;How do I automate deploying to AppEngine?&lt;/h1&gt;&#xA;&lt;p&gt;Use this project to print your access token and then use that in your appcfg.py deploy script.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Getting started with virtualenv</title>
      <link>https://www.darrelherbst.com/post/100114-getting-started-with-virtualenv/</link>
      <pubDate>Wed, 14 Jan 2015 22:23:38 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/100114-getting-started-with-virtualenv/</guid>
      <description>&lt;p&gt;I’m working on a few django sites all at the same time, and keeping the &lt;code&gt;PYTHONPATH&lt;/code&gt; environment variable set correctly was getting to be a pain, and virtualenv seemed like it took a lot to set up – or that’s the way it looked from all the other blog posts out there.&lt;/p&gt;&#xA;&lt;p&gt;So I took the plunge, and I’m happy to say it didn’t take all that much effort to go from a homebrew environment hack to using virtualenv.&lt;/p&gt;</description>
    </item>
    <item>
      <title>TemplateSyntaxError: Invalid filter: my_filter</title>
      <link>https://www.darrelherbst.com/post/131125-templatesyntaxerror/</link>
      <pubDate>Mon, 25 Nov 2013 19:04:07 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/131125-templatesyntaxerror/</guid>
      <description>&lt;p&gt;Interesting,&lt;/p&gt;&#xA;&lt;p&gt;When a Django filter raises an exception, you get “invalid filter” instead of the exception.&lt;/p&gt;&#xA;&lt;p&gt;I guess you are supposed to wrap exceptions in your filters, as written here &lt;a href=&#34;https://docs.djangoproject.com/en/dev/howto/custom-template-tags/#writing-custom-template-filters&#34;&gt;https://docs.djangoproject.com/en/dev/howto/custom-template-tags/#writing-custom-template-filters&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>query replace regexp</title>
      <link>https://www.darrelherbst.com/post/query-replace-regexp/</link>
      <pubDate>Fri, 24 Feb 2012 20:35:38 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/query-replace-regexp/</guid>
      <description>&lt;p&gt;All these years, I never knew about M-x re-builder&lt;/p&gt;&#xA;&lt;p&gt;It allows emacs to highlight the matches in your regular expression as you type them. Very well done.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://www.emacswiki.org/emacs/ReBuilder&#34;&gt;http://www.emacswiki.org/emacs/ReBuilder&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Django using multi-db with .raw</title>
      <link>https://www.darrelherbst.com/post/django-using-multi-db-with-.raw/</link>
      <pubDate>Thu, 23 Feb 2012 21:50:28 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/django-using-multi-db-with-.raw/</guid>
      <description>&lt;p&gt;Got the error QuerySet does not have raw when trying to do&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;MyModel.objects.using(‘slave’).raw(‘select …’)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The problem is you have to set the DB onto the db model like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;MyModel.objects.db_manager(‘slave’).raw(‘…’)&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Project planning with Google Docs</title>
      <link>https://www.darrelherbst.com/post/project-planning-with-google-docs/</link>
      <pubDate>Mon, 30 Jan 2012 21:53:12 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/project-planning-with-google-docs/</guid>
      <description>&lt;p&gt;We use Google docs where I work, and I like to plot out developer task timelines. The easiest thing to do is set up the id, dependency, start, end, %done spreadsheet and use &lt;a href=&#34;http://lifehacker.com/5070701/add-a-gantt-chart-to-your-google-spreadsheet&#34;&gt;http://lifehacker.com/5070701/add-a-gantt-chart-to-your-google-spreadsheet&lt;/a&gt; to throw a gantt chart on the wall with the projector. Easy to do and review on the wall.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Android and HTML5 and HLS</title>
      <link>https://www.darrelherbst.com/post/android-and-html5-and-hls/</link>
      <pubDate>Sat, 05 Nov 2011 21:53:27 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/android-and-html5-and-hls/</guid>
      <description>&lt;p&gt;In the long running quest for HTML5 video on Android, now with HLS – I’ve yet to find a working example of HLS on Android 3.0+. Argh.&lt;/p&gt;&#xA;&lt;p&gt;If you know of an example, please let me know.&lt;/p&gt;</description>
    </item>
    <item>
      <title>NameVirtualHost and ServerName</title>
      <link>https://www.darrelherbst.com/post/namevirtualhost-and-servername/</link>
      <pubDate>Tue, 04 Oct 2011 21:53:45 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/namevirtualhost-and-servername/</guid>
      <description>&lt;p&gt;More of a note to myself – was having trouble with mod_wsgi and setting up different NameVirtualHost and ServerNames. Turned out the problem was I was including a .conf file that had multiple ServerName directives. Always check that first.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Django tip of the day - use pluralize</title>
      <link>https://www.darrelherbst.com/post/django-tip-of-the-day-use-pluralize/</link>
      <pubDate>Thu, 23 Jun 2011 21:54:05 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/django-tip-of-the-day-use-pluralize/</guid>
      <description>&lt;p&gt;There are a bunch of built in template tags and filters to make things easier to read. Be sure to take a look at &lt;a href=&#34;http://docs.djangoproject.com/en/dev/ref/templates/builtins/#pluralize&#34;&gt;http://docs.djangoproject.com/en/dev/ref/templates/builtins/#pluralize&lt;/a&gt; when building your pages.&lt;/p&gt;&#xA;&lt;p&gt;It helps you easily use a plural suffix when you are listing counts of items.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Django user permissions allows is_superuser</title>
      <link>https://www.darrelherbst.com/post/110329-django-user-permissions-allows-is_superuser/</link>
      <pubDate>Tue, 29 Mar 2011 21:54:20 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/110329-django-user-permissions-allows-is_superuser/</guid>
      <description>&lt;p&gt;Small issue we found, if you want to give someone the ability to add/edit/delete users but don’t want them to be able to elevate privileges by setting is_superuser you have to monkey patch the UserAdmin class like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;from django.contrib.auth.models import User&#xA;from django.contrib.auth.admin import UserAdmin&#xA;from django.utils.translation import ugettext_lazy as _&#xA;&#xA;class MyUserAdmin(UserAdmin):&#xA;   my_fieldsets = (&#xA;       (None, {&#39;fields&#39;: (&#39;username&#39;, &#39;password&#39;)}),&#xA;      (_(&#39;Personal info&#39;), {&#39;fields&#39;: (&#39;first_name&#39;, &#39;last_name&#39;, &#39;email&#39;)}),&#xA;       (_(&#39;Permissions&#39;), {&#39;fields&#39;:(&#39;is_active&#39;,)}),&#xA;    )&#xA;&#xA;def change_view(self, request, object_id, extra_context=None):&#xA;     # for non-superuser&#xA;     if not request.user.is_superuser:&#xA;         self.fieldsets = self.my_fieldsets&#xA;         response = UserAdmin.change_view(self, request, object_id,&#xA;extra_context=None)&#xA;         return response&#xA;     else:&#xA;         return UserAdmin.change_view(self, request, object_id,&#xA;extra_context=None)&#xA;&#xA;admin.site.unregister(User)&#xA;admin.site.register(User, MyUserAdmin)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Then they won’t see the is_superuser checkbox. You’ll have to get a bit more fancy if you want to allow permission changes, but this is a good start.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Django AuthenticationForm is not showing errors but is_valid is False</title>
      <link>https://www.darrelherbst.com/post/11033-django-authenticationform-is-not-showing-errors-but-is_valid-is-false/</link>
      <pubDate>Thu, 03 Mar 2011 21:54:45 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/11033-django-authenticationform-is-not-showing-errors-but-is_valid-is-false/</guid>
      <description>&lt;p&gt;Got bit by this one again, which I assume is going to be pretty common if you’re trying to use the AuthenticationForm as you would normally use a form.&lt;/p&gt;&#xA;&lt;p&gt;When I use forms, I get into the habit of doing something like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;if request.method == &#39;POST&#39;:&#xA;    f = MyForm(request.POST)&#xA;    if f.is_valid():&#xA;        do_whatever()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The problem when you use the AuthenticationForm is that &lt;strong&gt;init&lt;/strong&gt;‘s has the first parameter named request. So if you do something like this:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pricing AppEngine</title>
      <link>https://www.darrelherbst.com/post/110211-pricing-appengine/</link>
      <pubDate>Fri, 11 Feb 2011 21:54:55 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/110211-pricing-appengine/</guid>
      <description>&lt;p&gt;Google has a survey asking prospective pricing for new AppEngine features, please take a few minutes and fill it out here: &lt;a href=&#34;https://groups.google.com/d/topic/google-appengine/eBdE0hyVPhE/discussion&#34;&gt;https://groups.google.com/d/topic/google-appengine/eBdE0hyVPhE/discussion&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using Django as an OAuth provider</title>
      <link>https://www.darrelherbst.com/post/110210-using-django-as-an-oauth-provider/</link>
      <pubDate>Thu, 10 Feb 2011 22:13:49 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/110210-using-django-as-an-oauth-provider/</guid>
      <description>&lt;p&gt;For a while I couldn’t understand why getting a request token wasn’t working from our Django server, it kept returning 401 – it is because mod_wsgi does not pass the Authorization header by default over to Django.&lt;/p&gt;&#xA;&lt;p&gt;To get the Authorization header, add:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;WSGIPassAuthorization On&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;to your configuration.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Code Rush the movie</title>
      <link>https://www.darrelherbst.com/post/110202-code-rush/</link>
      <pubDate>Wed, 02 Feb 2011 22:14:00 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/110202-code-rush/</guid>
      <description>&lt;p&gt;Code Rush (&lt;a href=&#34;http://www.youtube.com/watch?v=u404SLJj7ig&#34;&gt;http://www.youtube.com/watch?v=u404SLJj7ig&lt;/a&gt;) is one of those movies that if you are in the startup world you will probably enjoy seeing. Also enjoyable are startup.com, tron, hackers, and wargames. If you get the chance, also read Brewing up a Business (&lt;a href=&#34;http://www.amazon.com/Brewing-Up-Business-Adventures-Founder/dp/0470942312/ref=sr_1_1?ie=UTF8&amp;amp;qid=1445567136&amp;amp;sr=8-1&amp;amp;keywords=brewing+up+a+business)&#34;&gt;http://www.amazon.com/Brewing-Up-Business-Adventures-Founder/dp/0470942312/ref=sr_1_1?ie=UTF8&amp;amp;qid=1445567136&amp;amp;sr=8-1&amp;amp;keywords=brewing+up+a+business)&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hiring - please list your github url</title>
      <link>https://www.darrelherbst.com/post/110127-hiring/</link>
      <pubDate>Thu, 27 Jan 2011 22:17:13 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/110127-hiring/</guid>
      <description>&lt;p&gt;We’re in the process of adding members to our development team. If you are a software developer, I highly recommend putting your github url on your resume. It’s a huge plus if I can see something you’ve written. Schools should start adding this to the resume checklist they give to students.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to change get_absolute_url on the user object in Django</title>
      <link>https://www.darrelherbst.com/post/101112-how-to-change-get_absolute_url-on-the-user-object-in-django/</link>
      <pubDate>Fri, 12 Nov 2010 22:17:37 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/101112-how-to-change-get_absolute_url-on-the-user-object-in-django/</guid>
      <description>&lt;p&gt;The Django User object maps get_absolute_url to &lt;code&gt;/users/username/&lt;/code&gt; by default. However, we map our user profile pages to a different url.&lt;/p&gt;&#xA;&lt;p&gt;Found that you can easily change this by using the &lt;code&gt;ABSOLUTE_URL_OVERRIDES&lt;/code&gt; setting:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;ABSOLUTE_URL_OVERRIDES = {&#xA;    &#39;auth.user&#39;: lambda o: u&#39;/u/%s/&#39; % o.username,&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Why is emacs adding a newline to my file</title>
      <link>https://www.darrelherbst.com/post/101110-why-is-emacs-adding-a-newline-to-my-file/</link>
      <pubDate>Wed, 10 Nov 2010 22:17:58 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/101110-why-is-emacs-adding-a-newline-to-my-file/</guid>
      <description>&lt;p&gt;A couple of files I mapped to text-mode. Text-mode has require-final-newline set to true. Therefore, whenever I saved a file that was in text-mode it kept adding a newline onto the file.&lt;/p&gt;&#xA;&lt;p&gt;Switch to fundamental-mode or some other mode that doesn’t have require-final-newline set to true, and things work as you expect.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Video ads with companion ads</title>
      <link>https://www.darrelherbst.com/post/101109-video-ads-with-companion-ads/</link>
      <pubDate>Tue, 09 Nov 2010 22:18:22 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/101109-video-ads-with-companion-ads/</guid>
      <description>&lt;p&gt;Here’s something I just don’t understand – the online video ad business seems to &lt;em&gt;require&lt;/em&gt; you to have a companion ad alongside the pre/mid/post roll video instream ad.&lt;/p&gt;&#xA;&lt;p&gt;However – and this is just from my own usage – if someone is watching a video they are watching it in full screen mode, or on the 10 foot experience. Thus the companion is almost never seen.&lt;/p&gt;&#xA;&lt;p&gt;Why require it? I just don’t get it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>What to watch on GoogleTV</title>
      <link>https://www.darrelherbst.com/post/101108-what-to-watch-on-googletv/</link>
      <pubDate>Mon, 08 Nov 2010 22:18:36 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/101108-what-to-watch-on-googletv/</guid>
      <description>&lt;p&gt;I highly recommend using &lt;a href=&#34;http://clicker.com&#34;&gt;http://clicker.com&lt;/a&gt; if you are looking to find things to watch on GoogleTV.&lt;/p&gt;</description>
    </item>
    <item>
      <title>DramaFever on GoogleTV</title>
      <link>https://www.darrelherbst.com/post/101106-dramafever-on-googletv/</link>
      <pubDate>Sat, 06 Nov 2010 22:18:56 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/101106-dramafever-on-googletv/</guid>
      <description>&lt;p&gt;DramaFever looks pretty good on Google TV right out of the box.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.darrelherbst.com/img/dfgtv-300x225.jpg&#34; alt=&#34;DramaFever on GoogleTV&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Trying to put an ad-hoc build on an iphone and getting app is not signed</title>
      <link>https://www.darrelherbst.com/post/101105-trying-to-put-an-ad-hoc-build-on-an-iphone-and-getting-app-is-not-signed/</link>
      <pubDate>Fri, 05 Nov 2010 22:20:10 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/101105-trying-to-put-an-ad-hoc-build-on-an-iphone-and-getting-app-is-not-signed/</guid>
      <description>&lt;p&gt;Did an ad-hoc build for an iphone app, but getting the message “The application ‘x’ was not installed on the iPod ‘y’ because it is not signed.”&lt;/p&gt;&#xA;&lt;p&gt;Turns out I did a simulator build and tried to move that over. You have to do a device build to have the app signed.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GoogleTV user-agent</title>
      <link>https://www.darrelherbst.com/post/101027-googletv-user-agent/</link>
      <pubDate>Wed, 27 Oct 2010 22:20:31 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/101027-googletv-user-agent/</guid>
      <description>&lt;p&gt;From &lt;a href=&#34;http://code.google.com/tv/web/docs/implement_for_tv.html&#34;&gt;http://code.google.com/tv/web/docs/implement_for_tv.html&lt;/a&gt; look for “GoogleTV” in the user-agent.&lt;/p&gt;&#xA;&lt;p&gt;Getting a lot of those hits already, guess it is time to optimize for GoogleTV.&lt;/p&gt;&#xA;&lt;p&gt;Unfortunately I have to go to the raw webserver logs to see these users, as it doesn’t look like Google Analytics has added ‘GoogleTV’ as a browser yet.&lt;/p&gt;</description>
    </item>
    <item>
      <title>DataError array value must start with &#39;{&#39; or dimension information</title>
      <link>https://www.darrelherbst.com/post/101026-dataerror-array-value-must-start-with-or-dimension-information/</link>
      <pubDate>Tue, 26 Oct 2010 22:41:01 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/101026-dataerror-array-value-must-start-with-or-dimension-information/</guid>
      <description>&lt;p&gt;Started getting this error all of a sudden in one of our django applications:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;DataError: array value must start with &amp;quot;{&amp;quot; or dimension information&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Turns out someone accidentally made a &lt;code&gt;varchar&lt;/code&gt; column an array &lt;code&gt;varchar(100)[]&lt;/code&gt; instead of a &lt;code&gt;varchar(100)&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>MysqlDB on OSX</title>
      <link>https://www.darrelherbst.com/post/101014-mysqldb-on-osx/</link>
      <pubDate>Thu, 14 Oct 2010 22:41:18 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/101014-mysqldb-on-osx/</guid>
      <description>&lt;p&gt;After getting a new macbook I gave up on macports in favor of homebrew because it uses Xcode and the default python installations for everything.&lt;/p&gt;&#xA;&lt;p&gt;However, for some reason I can’t get python2.5 in a virtualenv to compile/install MySQLdb correctly. I always get the following error:&lt;/p&gt;&#xA;&lt;p&gt;.python-eggs/MySQL_python-1.2.3-py2.5-macosx-10.6-i386.egg-tmp/_mysql.so: mach-o, but wrong architecture&lt;/p&gt;&#xA;&lt;p&gt;The solution is to use python2.6, which does work, even in virtualenv. I suppose it is one of those things I’ll have to live with unless I have more time to figure it out.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Google AppEngine adds blacklists</title>
      <link>https://www.darrelherbst.com/post/100528-google-appengine-adds-blacklists/</link>
      <pubDate>Fri, 28 May 2010 22:41:43 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/100528-google-appengine-adds-blacklists/</guid>
      <description>&lt;p&gt;Not sure when this got added, but you can now see the ip’s most accessing your app, and hopefully you can block someone from using up your quota.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://code.google.com/appengine/kb/general.html#blacklists&#34;&gt;http://code.google.com/appengine/kb/general.html#blacklists&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using django.contrib.sitemaps on AppEngine</title>
      <link>https://www.darrelherbst.com/post/100517-using-django.contrib.sitemaps-on-appengine/</link>
      <pubDate>Mon, 17 May 2010 22:42:06 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/100517-using-django.contrib.sitemaps-on-appengine/</guid>
      <description>&lt;p&gt;If you use Google AppEngine and want to use the sites and sitemaps contrib apps you can use this modified version of the google-app-engine-django helper here: &lt;a href=&#34;http://code.google.com/p/dherbst-app-engine-django/wiki/Sitemaps&#34;&gt;http://code.google.com/p/dherbst-app-engine-django/wiki/Sitemaps&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Setting up Flowplayer with Amazon Cloudfront and token access</title>
      <link>https://www.darrelherbst.com/post/100421-setting-up-flowplayer-with-amazon-cloudfront-and-token-access/</link>
      <pubDate>Wed, 21 Apr 2010 22:42:28 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/100421-setting-up-flowplayer-with-amazon-cloudfront-and-token-access/</guid>
      <description>&lt;p&gt;Amazon has added token based access to the cloudfront rtmp servers here: &lt;a href=&#34;http://docs.amazonwebservices.com/AmazonCloudFront/latest/DeveloperGuide/index.html?PrivateContent.html&#34;&gt;http://docs.amazonwebservices.com/AmazonCloudFront/latest/DeveloperGuide/index.html?PrivateContent.html&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This means you can put some control around who accesses your content.&lt;/p&gt;&#xA;&lt;p&gt;Here is one way to set up flowplayer to use this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://static.flowplayer.org/js/flowplayer-3.1.4.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&#xA;&amp;lt;div class=&amp;quot;player&amp;quot; id=&amp;quot;id_flowplayer&amp;quot; style=&amp;quot;width:640px;height:320px;&amp;quot;&amp;gt;&#xA;&amp;lt;/div&amp;gt;&#xA;&amp;lt;script language=&#39;javascript&#39;&amp;gt;&#xA;flowplayer(&amp;quot;id_flowplayer&amp;quot;, &amp;quot;http://releases.flowplayer.org/swf/flowplayer-3.1.5.swf&amp;quot;, {&#xA; log: { level:&amp;quot;debug&amp;quot;,filter:&#39;org.flowplayer.rtmp.*&#39; },&#xA; clip: {&#xA;   autoPlay:false,&#xA;   // This is the path to the video file&#xA;   url: encodeURIComponent(&#39;flv:test.mp4?Expires=1258237200&amp;amp;Signature=TBD&amp;amp;Key-Pair-Id=PK123456789754&#39;),&#xA;   provider: &#39;aws&#39;&#xA; },&#xA; // streaming plugins are configured under the plugins node&#xA; plugins: {&#xA;   // here is our rtmp plugin configuration, configured for AWS&#xA;   aws: {&#xA;      url: &#39;http://releases.flowplayer.org/swf/flowplayer.rtmp-3.1.3.swf&#39;,&#xA;      // netConnectionUrl defines where the streams are found&#xA;      netConnectionUrl: &#39;rtmp://your aws hostname.cloudfront.net/cfx/st&#39;&#xA;   }&#xA; }&#xA;});&#xA;&amp;lt;/script&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Android maps tip tap on an address in gmail to open maps</title>
      <link>https://www.darrelherbst.com/post/100410-android-maps-tip-tap-on-an-address-in-gmail-to-open-maps/</link>
      <pubDate>Sat, 10 Apr 2010 22:42:57 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/100410-android-maps-tip-tap-on-an-address-in-gmail-to-open-maps/</guid>
      <description>&lt;p&gt;Here’s an interesting maps tip – when someone emails you an address, like 825 Walnut Street, Philadelphia, PA 19107-5195 (Walnut Street Theater) you can tap the address part in the gmail app and it will automatically open the google map application to that address.&lt;/p&gt;&#xA;&lt;p&gt;Very handy, as it doesn’t underline the address like a link, so you don’t know you can tap the address unless you know the tip.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Does HTML5 video work in Android</title>
      <link>https://www.darrelherbst.com/post/100407-does-html5-video-work-in-android/</link>
      <pubDate>Wed, 07 Apr 2010 22:43:16 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/100407-does-html5-video-work-in-android/</guid>
      <description>&lt;p&gt;In the interest of finding the right answer by posting (possibly) incorrect information, here goes.&lt;/p&gt;&#xA;&lt;p&gt;Transcode an H.264 video to something that works great on the ipad/iphone: video: avc1, 29.97 fps, 380 kbps, 480 x 370 Audio: mp4a, 44 kHz, 64 kbps&#xA;Put together a page and view it on the iphone/ipad:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;&#xA;&amp;lt;html&amp;gt;&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;html5 test&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;&amp;lt;body&amp;gt;&#xA;&amp;lt;video id=&amp;quot;movie&amp;quot; width=&amp;quot;480&amp;quot; height=&amp;quot;370&amp;quot; poster=&amp;quot;http://example.com/still.jpg&amp;quot; controls&amp;gt;&#xA;&amp;lt;source src=&amp;quot;http://example.com/video.mp4&amp;quot; type=&amp;quot;video/mp4&amp;quot;&amp;gt;&#xA;Your browser does not support html5 video.&#xA;&amp;lt;/video&amp;gt;&#xA;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;View it on the iphone/ipad – wonderful html5 video plays.&lt;/p&gt;</description>
    </item>
    <item>
      <title>PostMessage doesn&#39;t work in IE if you mix http and https</title>
      <link>https://www.darrelherbst.com/post/100406-postmessage-doesnt-work-in-ie-if-you-mix-http-and-https/</link>
      <pubDate>Tue, 06 Apr 2010 22:44:14 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/100406-postmessage-doesnt-work-in-ie-if-you-mix-http-and-https/</guid>
      <description>&lt;p&gt;What’s the point of implementing postMessage if you can’t communicate across http and https versions of your page?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://msdn.microsoft.com/en-us/library/cc197015%28VS.85%29.aspx&#34;&gt;http://msdn.microsoft.com/en-us/library/cc197015%28VS.85%29.aspx&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Django forms remove colon in label</title>
      <link>https://www.darrelherbst.com/post/100312-django-forms-remove-colon-in-label/</link>
      <pubDate>Fri, 12 Mar 2010 22:44:33 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/100312-django-forms-remove-colon-in-label/</guid>
      <description>&lt;p&gt;Django forms add a colon “:” to each label by default. You can turn this off by setting &lt;code&gt;label_suffix=&amp;quot;&amp;quot;&lt;/code&gt; when you create your form.&lt;/p&gt;</description>
    </item>
    <item>
      <title>10&#43; releases a day takeway</title>
      <link>https://www.darrelherbst.com/post/100221-10&#43;-releases-a-day-takeway/</link>
      <pubDate>Sun, 21 Feb 2010 22:44:56 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/100221-10&#43;-releases-a-day-takeway/</guid>
      <description>&lt;p&gt;I found this via the etsy “code as craft” blog: &lt;a href=&#34;http://velocityconference.blip.tv/file/2284377/&#34;&gt;http://velocityconference.blip.tv/file/2284377/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;My big takeaway is validation of something I have always done – code configuration by user/bucket/site is a “good thing”. It’s so much easier to roll out changes to a select population and deal with changes that way. Something I like to do using django groups. It is a sort of a/b testing, but just a little different. Very useful.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Boxee app won&#39;t load</title>
      <link>https://www.darrelherbst.com/post/100220-boxee-app-wont-load/</link>
      <pubDate>Sat, 20 Feb 2010 08:33:37 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/100220-boxee-app-wont-load/</guid>
      <description>&lt;p&gt;I’m very grateful there is a boxee.log file written, otherwise I would not have thought that boxee was going to try to load the main.xml~ instead of main.xml by default!&lt;/p&gt;</description>
    </item>
    <item>
      <title>AppEngine design philosophy</title>
      <link>https://www.darrelherbst.com/post/100213-appengine-design-philosophy/</link>
      <pubDate>Sat, 13 Feb 2010 22:22:44 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/100213-appengine-design-philosophy/</guid>
      <description>&lt;p&gt;I suppose I knew in the back of my mind, you’re not going to need it now, but eventually you will need to shard this*. So if you’re going to do anything in appengine, my advice is: just shard everything from the start. You’ll save yourself a world of hurt later on.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://code.google.com/appengine/articles/sharding_counters.html&#34;&gt;http://code.google.com/appengine/articles/sharding_counters.html&lt;/a&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;This could be anything, it needn’t be just counters.  Now the article is all about write contention, but it also demonstrates a very good approach to sharding data in the abstract.  Depending on what you’re doing this is a very useful thing to do.&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Adding feeds for the buzz</title>
      <link>https://www.darrelherbst.com/post/100210-adding-feeds-for-the-buzz/</link>
      <pubDate>Wed, 10 Feb 2010 22:22:59 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/100210-adding-feeds-for-the-buzz/</guid>
      <description>&lt;p&gt;Found this today via jlapenna’s buzz on how to add more feeds to your buzz:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://www.google.com/buzz/bradfitz/PPjHXDhANAC/Want-to-connect-your-blog-or-some-other-feed-to&#34;&gt;http://www.google.com/buzz/bradfitz/PPjHXDhANAC/Want-to-connect-your-blog-or-some-other-feed-to&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Very useful.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Bit by ModelForms</title>
      <link>https://www.darrelherbst.com/post/100126-bit-by-modelforms/</link>
      <pubDate>Tue, 26 Jan 2010 22:23:15 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/100126-bit-by-modelforms/</guid>
      <description>&lt;p&gt;Put all the callable defaults you want into a Model, the ModelForms aren’t evaluating them properly in Django 1.0.4. Luckily there is a patch: &lt;a href=&#34;http://code.djangoproject.com/ticket/11940&#34;&gt;http://code.djangoproject.com/ticket/11940&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using Google Analytics event tracking</title>
      <link>https://www.darrelherbst.com/post/091231-using-google-analytics-event-tracking/</link>
      <pubDate>Thu, 31 Dec 2009 22:24:05 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/091231-using-google-analytics-event-tracking/</guid>
      <description>&lt;p&gt;When you are a startup, every minute counts.  It makes complete sense to want analytic analysis of your website, however,  it does not make sense to spend a lot of time building analytic databases/engines/reporting into your website.  These things already exist, and are often free or very low cost.&lt;/p&gt;&#xA;&lt;p&gt;I often recommend chartbeat.com for real time analysis.  It tells you a lot of great stuff about how many people are on your site now, how they got there, and what they’re saying on twitter.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The walled garden</title>
      <link>https://www.darrelherbst.com/post/091014-the-walled-garden/</link>
      <pubDate>Wed, 14 Oct 2009 22:24:19 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/091014-the-walled-garden/</guid>
      <description>&lt;p&gt;Sometimes, not all the times, but sometimes it is better to just allow traffic from certain countries you know are legitimate. MaxMind’s mod_geoip2 makes it easy: &lt;a href=&#34;http://www.maxmind.com/app/mod_geoip&#34;&gt;http://www.maxmind.com/app/mod_geoip&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Inserting ads into a video stream</title>
      <link>https://www.darrelherbst.com/post/091010-inserting-ads-into-a-video-stream/</link>
      <pubDate>Sat, 10 Oct 2009 22:25:06 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/091010-inserting-ads-into-a-video-stream/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://www.darrelherbst.com/static/img/adunits.jpg&#34; alt=&#34;/static/img/adunits.jpg&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Currently, if you want to insert ads into a video stream, you are going to write a flash video player which periodically stops the video stream and displays an ad stream. Adobe could make this a whole lot easier if they would let you insert the stream at the flash media server instead of the client.&lt;/p&gt;&#xA;&lt;p&gt;Why don’t they do that?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Optimize your get_or_create blocks</title>
      <link>https://www.darrelherbst.com/post/090915-optimize-your-get_or_create-blocks/</link>
      <pubDate>Tue, 15 Sep 2009 22:24:42 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/090915-optimize-your-get_or_create-blocks/</guid>
      <description>&lt;p&gt;Was going through a code review, and saw something like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;def some_function(user_id, bobj_id):&#xA;    user = User.objects.get(id=user_id)&#xA;    bobj=Bobj.objects.get(id=bobj_id&#xA;    item, created = MyObject.objects.get_or_create(user=user, bobj=bobj)&#xA;    return item&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;But that is two hits to the database we don’t need since the id’s are passed in. Remember, if you have id’s then you can shortcut pulling the object from the ORM like this:&lt;/p&gt;&#xA;&lt;p&gt;item, created = MyObject.objects.get_or_create(user__id=user_id, bobj__id=bobj_id)&#xA;That will do the&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;.get()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;just fine, but fails when it tries to&lt;/p&gt;</description>
    </item>
    <item>
      <title>AuthType allow one file</title>
      <link>https://www.darrelherbst.com/post/090904-authtype-allow-one-file/</link>
      <pubDate>Fri, 04 Sep 2009 22:25:23 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/090904-authtype-allow-one-file/</guid>
      <description>&lt;p&gt;There is no way to turn off AuthType Basic on a file or directory once it is on, but you can exclude it using regular expressions.&lt;/p&gt;&#xA;&lt;p&gt;For example, we had use this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;Location &amp;quot;/&amp;quot;&amp;gt;&#xA;AuthType Basic&#xA;....&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;but wanted to allow /somefile/ to be accessed without auth.  To do so you want to do this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;LocationMatch &amp;quot;^(?!/somefile/)&amp;quot;&amp;gt;&#xA;AuthType Basic&#xA;...&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Django unit testing api logs</title>
      <link>https://www.darrelherbst.com/post/090813-django-unit-testing-api-logs/</link>
      <pubDate>Thu, 13 Aug 2009 08:36:07 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/090813-django-unit-testing-api-logs/</guid>
      <description>&lt;p&gt;The last several years I’ve designed a few APIs.  Designing them is fun, implementing them is fun, testing them is not as fun.  Partly this is because it’s hard to guess how someone is going to misinterpret what you want them to do.&lt;/p&gt;&#xA;&lt;p&gt;I hit upon a better way to do testing and debugging that hadn’t occurred to me until recently.  First, you have to log all the calls to your API.   This also helps when you want to do performance analysis of your api later, because you can have the traffic come in according to the timestamps at the correct latencies.  When you record the call to your database, make sure to record all the parameters, so you can recreate the call later.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Amazon steps up to appengine</title>
      <link>https://www.darrelherbst.com/post/090528-amazon-steps-up-to-appengine/</link>
      <pubDate>Thu, 28 May 2009 08:37:00 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/090528-amazon-steps-up-to-appengine/</guid>
      <description>&lt;p&gt;Google’s AppEngine was quite promising from the start.  Automatic scaling and load balancing without having to think about the administrative side is extremely nice.&lt;/p&gt;&#xA;&lt;p&gt;But that’s about it.  There’s a couple of things which make AppEngine a bit cumbersome to recommend for a new application, all of which are well served by Amazon EC2+ELB+ES:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Lack of SSL for your custom domain&lt;/li&gt;&#xA;&lt;li&gt;Can’t use many django pluggables out of the box because of RDMS dependencies&lt;/li&gt;&#xA;&lt;li&gt;Some would say naked domains, but ELB can’t do naked domains either, so this is a wash.&lt;/li&gt;&#xA;&lt;li&gt;Can’t use other off the shelf software, like wordpress, etc.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Don’t get me wrong, I really like AppEngine, and for small apps I’m going to stick with it because of:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Django ManyToManyFields and Form.save(commit=false)</title>
      <link>https://www.darrelherbst.com/post/090505-django-manytomanyfields-and-form.save-commit-false/</link>
      <pubDate>Tue, 05 May 2009 08:37:33 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/090505-django-manytomanyfields-and-form.save-commit-false/</guid>
      <description>&lt;p&gt;Those django devs have done a whole lot of thinking, and we’re reaping all the benefits.&lt;/p&gt;&#xA;&lt;p&gt;Let’s say you have a model with a ManyToManyField in it, but you can’t save the ModelForm outright because you have to set a user into it (or some other foreignkey field).  So you do something like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;item = form.save(commit=False)&#xA;item.user = request.User&#xA;item.save()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;When you go to test your page, it looks like the ManyToManyFields are not getting saved – and that is because they are not. They are only saved when you save the form object, or manipulate the collections explicitly.&lt;/p&gt;</description>
    </item>
    <item>
      <title>app-engine-patch datastore location</title>
      <link>https://www.darrelherbst.com/post/090420-app-engine-patch-datastore-location/</link>
      <pubDate>Mon, 20 Apr 2009 08:37:48 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/090420-app-engine-patch-datastore-location/</guid>
      <description>&lt;p&gt;Since upgrading to app-engine-patch 1.0 you have to run manage.py instead of the dev server.  However, I hadn’t bothered to trace down why the &lt;code&gt;–datastore_path=filename.datastore&lt;/code&gt; parameter wasn’t working until today.&lt;/p&gt;&#xA;&lt;p&gt;For informal parameters, the name and values are not added separately.  So you can work around this by dropping the &lt;code&gt;=&lt;/code&gt; between &lt;code&gt;–datastore_path&lt;/code&gt; and &lt;code&gt;–history_path&lt;/code&gt;.  Otherwise the datastore is put in &lt;code&gt;/tmp&lt;/code&gt; on OSX and that gets erased when you reboot.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Beware jquery $.getJSON on IE</title>
      <link>https://www.darrelherbst.com/post/090505-beware-jquery-getjson-on-ie/</link>
      <pubDate>Thu, 05 Mar 2009 08:38:14 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/090505-beware-jquery-getjson-on-ie/</guid>
      <description>&lt;p&gt;I usually like simple APIs and interfaces, so I was naturally drawn to the shortcut methods in JQuery – $.getJSON. It didn’t feel right for it to fail quietly, but I put up with it, thinking that I would go back later and change it to $.ajax calls if it really became a problem.&lt;/p&gt;&#xA;&lt;p&gt;Well, something I hadn’t noticed really until today is that IE will cache the ajax queries from $.getJSON, but FireFox does not. Unfortunately I don’t see a way to pass the cache:false option to getJSON – so as a rule I’m going to default to using .ajax for two reasons:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Log exception django decorator</title>
      <link>https://www.darrelherbst.com/post/090303-log-exception-django-decorator/</link>
      <pubDate>Tue, 03 Mar 2009 08:38:52 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/090303-log-exception-django-decorator/</guid>
      <description>&lt;p&gt;There is probably a better way to do this, but I was able to throw this together in about two minutes, and I’m writing this here so I can easily reference it no matter where I am. I’ve been writing a lot of REST apis using Django lately, and I need a way to save the exceptions and stack traces to the logs while not giving out too much information to the callers.  I can’t use the automatic email admins functionality because the servers are locked down and not allowed to send email.  Adding try/except’s to the existing functions and new ones feels ugly and painful.  So I’m going with the following decorator.  This one just passes the exception through – you’ll want to figure out if that is the right thing for you to do.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python csv chokes on unicode</title>
      <link>https://www.darrelherbst.com/post/090303-python-csv-chokes-on-unicode/</link>
      <pubDate>Tue, 03 Mar 2009 08:38:28 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/090303-python-csv-chokes-on-unicode/</guid>
      <description>&lt;p&gt;Another note to myself.&lt;/p&gt;&#xA;&lt;p&gt;The python csv module has a bit of trouble writing unicode characters through – at least for me in our current setup.  The workaround is to replace the &lt;code&gt;code &amp;gt; 128&lt;/code&gt; with &lt;code&gt;?&lt;/code&gt;, thus:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;response = HttpResponse(mimetype=&amp;quot;text/csv&amp;quot;)&#xA;response[&amp;quot;Content-Disposition&amp;quot;] = &amp;quot;attachment; filename=choke.csv&amp;quot;&#xA;writer = csv.writer(response)&#xA;&#xA;for line in list:&#xA;    writer.writerow([line.something.encode(&amp;quot;ascii&amp;quot;, &amp;quot;replace&amp;quot;),]&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>DjangoUnicodeDecodeError gotcha!</title>
      <link>https://www.darrelherbst.com/post/090114-djangounicodedecodeerror-gotcha/</link>
      <pubDate>Wed, 14 Jan 2009 08:39:12 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/090114-djangounicodedecodeerror-gotcha/</guid>
      <description>&lt;p&gt;I’ve been working with international websites lately. Got this error on the Django admin pages, but no other pages on the website:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;DjangoUnicodeDecodeError: Caught an exception while rendering: ‘ascii’ codec can’t decode byte … in position:6: ordinal not in range (128) ….&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Went through the following steps:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Is my input in utf-8? Yes.&lt;/li&gt;&#xA;&lt;li&gt;Is the database properly storing the right encoding? Yes.&lt;/li&gt;&#xA;&lt;li&gt;Is Django pulling the data out in utf-8? Yes.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Strange, this means the data is in the right encoding, but when it is trying to display on the admin page the encoding is getting lost or coerced in to the wrong thing.&lt;/p&gt;</description>
    </item>
    <item>
      <title>I can&#39;t wait for AppEngine to gain ground</title>
      <link>https://www.darrelherbst.com/post/090108-i-cant-wait-for-appengine-to-gain-ground/</link>
      <pubDate>Thu, 08 Jan 2009 08:39:34 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/090108-i-cant-wait-for-appengine-to-gain-ground/</guid>
      <description>&lt;p&gt;Over the past eight months or so I’ve worked on a variety of web applications. A bunch of them have been using Django, and I’m extremely happy with Django. It’s definitely the quickest, easiest way to get an application out the door.&lt;/p&gt;&#xA;&lt;p&gt;I’ve been splitting the apps between webfaction, amazon’s EC2, and Google App Engine. By far, the easiest to work with is AppEngine. I can safely delegate almost all of the operations aspect to Google. Backups are a bit hard, but once you resign yourself to scripting it all out, everything just works.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Changing smart device target framework</title>
      <link>https://www.darrelherbst.com/post/081125-changing-smart-device-target-framework/</link>
      <pubDate>Tue, 25 Nov 2008 13:36:24 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/081125-changing-smart-device-target-framework/</guid>
      <description>&lt;p&gt;I’m not sure why this is so difficult, probably because of intellisense support – but if you want to change the target framework for a smart device project, you can’t change the “Framework Version” property in VS2008 because it is greyed out.&lt;/p&gt;&#xA;&lt;p&gt;Instead, you have to select the project in the solution explorer, and then from the menubar, go to Project | Upgrade Project.  Beware, it says it is not backwards compatible, so make sure you are ready to do this.  This also means you need to be prepared to bootstrap your devices with the proper compact framework version.&lt;/p&gt;</description>
    </item>
    <item>
      <title>I like android</title>
      <link>https://www.darrelherbst.com/post/081124-i-like-android/</link>
      <pubDate>Mon, 24 Nov 2008 13:36:35 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/081124-i-like-android/</guid>
      <description>&lt;p&gt;So far I’m very impressed with Android.  For the first five minutes, I was panicking about not being able to use graffitti – but now I’ve embraced the keyboard.  My one complaint is that I tend to suspend the phone, then close the keyboard, and this causes it to resume.  I’d like a setting for “if you have suspended the phone and then close the keyboard, don’t bother resuming.”.&lt;/p&gt;&#xA;&lt;p&gt;Now if only motorola/symbol would release an android version of the mc9090g as soon as possible I could forget about windows mobile completely.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Don&#39;t overestimate your users powers of observation</title>
      <link>https://www.darrelherbst.com/post/081117-dont-overestimate-your-users-powers-of-observation/</link>
      <pubDate>Mon, 17 Nov 2008 08:40:29 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/081117-dont-overestimate-your-users-powers-of-observation/</guid>
      <description>&lt;p&gt;Here’s an interesting usability metric – of over two thousand installs of the Owner application on Android/G1 – there’s a (very) small percentage of users that either do not understand they have to click “save” to store the information they type into the form, or are overlooking the save button, or expect the information to be saved when they hit the back button (without clicking save).&lt;/p&gt;&#xA;&lt;p&gt;I’ll have to push out an update to warn the user if they try to navigate off a form after changing some information but not saving.&lt;/p&gt;</description>
    </item>
    <item>
      <title>android_id looks like it can uniquely identify the device</title>
      <link>https://www.darrelherbst.com/post/081110-android_id-looks-like-it-can-uniquely-identify-the-device/</link>
      <pubDate>Mon, 10 Nov 2008 13:32:48 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/081110-android_id-looks-like-it-can-uniquely-identify-the-device/</guid>
      <description>&lt;p&gt;I went looking for a way to uniquely identify an android device, and found &lt;code&gt;android.provider.Settings.System.ANDROID_ID&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;My immediate questions were, is it tied to the SIM card?  Running code to print it out with and without the SIM card in the G1 result in the same number, so it looks like it is unique to the device as far as I can tell.&lt;/p&gt;&#xA;&lt;p&gt;You can get it like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;import android.provider.Settings.System;&#xA;String android_id = System.getString(this.getContentResolver(), System.ANDROID_ID);&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>G1 user-agent</title>
      <link>https://www.darrelherbst.com/post/081109-g1-user-agent/</link>
      <pubDate>Sun, 09 Nov 2008 13:33:16 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/081109-g1-user-agent/</guid>
      <description>&lt;p&gt;For RC30: The g1′s user-agent is:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Mozilla/5.0 (Linux; U; Android 1.0; en-us; dream) AppleWebKit/525.10+ (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Update 05.31.09: Cupcake is listed as:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Mozilla/5.0 (Linux; U; Android 1.5; en-us; T-Mobile G1 Build/CRB43) AppleWebKit/528.5+ (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Google reader on android g1</title>
      <link>https://www.darrelherbst.com/post/081109-google-reader-on-android-g1/</link>
      <pubDate>Sun, 09 Nov 2008 13:33:04 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/081109-google-reader-on-android-g1/</guid>
      <description>&lt;p&gt;On another mobile os, when I would go to the google reader, it used the mobile version – which is much lighter and faster than the default web with javascript version you get when you navigate to google reader on the android.&lt;/p&gt;&#xA;&lt;p&gt;I suggest using the mobile url for google reader on your android: &lt;a href=&#34;http://www.google.com/reader/m/view/&#34;&gt;http://www.google.com/reader/m/view/&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Android Owner application in the market</title>
      <link>https://www.darrelherbst.com/post/081107-android-owner-application-in-the-market/</link>
      <pubDate>Fri, 07 Nov 2008 13:33:38 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/081107-android-owner-application-in-the-market/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://www.darrelherbst.com/static/img/members_48.png&#34; alt=&#34;/static/img/members_48.png&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Windows mobile has an “Owner Information” section you can enable on the today screen.  This is useful if you leave your device behind somewhere and someone else picks it up.  Strangely, the T-Mobile Android G1 phone does not have something like this.&lt;/p&gt;&#xA;&lt;p&gt;I created an application named “Owner”, which you can download from the android market as “Factory-H Owner”, which somewhat fills in the missing functionality.  Many users are quick to point out that you have to get past the ‘lock screen’ to run the Owner application.  Unfortunately the api for modifying the lock screen is not released yet, but once it is, the Owner application will be updated to accomodate this functionality.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Debugging android with emacs</title>
      <link>https://www.darrelherbst.com/post/081106-debugging-android-with-emacs/</link>
      <pubDate>Thu, 06 Nov 2008 13:35:17 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/081106-debugging-android-with-emacs/</guid>
      <description>&lt;p&gt;When I last did serious java development, the eclipse ide hadn’t come on the scene. VisualAge was so buggy it crashed all the time, so I gave up on java ide’s altogether and got emacs with etags to the point that it didn’t matter. Coming from a C/C++ background, I was used to running gdb in a shell in emacs, so that is what I did with jdb at that time.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Faster python development with etags</title>
      <link>https://www.darrelherbst.com/post/081106-faster-python-development-with-etags/</link>
      <pubDate>Thu, 06 Nov 2008 13:34:59 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/081106-faster-python-development-with-etags/</guid>
      <description>&lt;p&gt;Been doing more and more with python the last few months. Now my projects are getting larger, and it’s not as easy to remember where everything is.&lt;/p&gt;&#xA;&lt;p&gt;Emacs has the ability to read a TAGS file and then if you want to jump to the definition of something, hit M-. and it’ll jump to the spot in the file which defines it. My way of generating the tags file is not completely hooked up to namespaces, but if I need that, I might invest some time into figuring it out in the future. Actually, this would be a good intern project – have them create a python script to add namespacing in, and django settings file definitions into the TAGS file.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Virtual Chumby</title>
      <link>https://www.darrelherbst.com/post/081103-virtual-chumby/</link>
      <pubDate>Mon, 03 Nov 2008 13:35:33 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/081103-virtual-chumby/</guid>
      <description>&lt;p&gt;My chumby is black – but this is a sampling of some of the flash stuff you can do on the chumby. It can get interactive with tilt and the touchscreen.&lt;/p&gt;&#xA;&lt;p&gt;I particularly like the ‘death star rising clock’.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Google AppEngine Django login_required google accounts</title>
      <link>https://www.darrelherbst.com/post/080909-google-app-engine-django-login_required-google-accounts/</link>
      <pubDate>Tue, 09 Sep 2008 13:37:01 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/080909-google-app-engine-django-login_required-google-accounts/</guid>
      <description>&lt;p&gt;I like to use Google Accounts with App Engine and django. The django login_required decorator depends on the django auth model – so I rewrote it for use with Google Accounts authentication.&lt;/p&gt;&#xA;&lt;p&gt;I’m not sure if it is better to cache the create_login_url or not, but this works well enough for now.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;from django.http import HttpResponseRedirect&#xA;from google.appengine.api import users&#xA;&#xA;def login_required(fn):&#xA;    &amp;quot;&amp;quot;&amp;quot; checks to see if the user is logged in, if not, redirect to login &amp;quot;&amp;quot;&amp;quot;&#xA;&#xA;    def _dec(view_func):&#xA;        def _checklogin(request, *args, **kwargs):&#xA;            user = users.get_current_user()&#xA;            if user:&#xA;                return view_func(request, *args, **kwargs)&#xA;            else:&#xA;                return HttpResponseRedirect(users.create_login_url(&#39;/&#39;))&#xA;        _checklogin.__doc__ = view_func.__doc__&#xA;        _checklogin.__dict__ = view_func.__dict__&#xA;        return _checklogin&#xA;    return _dec(fn)&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Soap in your eyes can be painful</title>
      <link>https://www.darrelherbst.com/post/080818-soap-in-your-eyes-can-be-painful/</link>
      <pubDate>Mon, 18 Aug 2008 13:53:54 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/080818-soap-in-your-eyes-can-be-painful/</guid>
      <description>&lt;p&gt;Coming from the .Net world to django and writing web services for consumers is a welcome change. .Net SOAP web services require a lot of designing and work to make them expressive yet perform well – whereas django REST services flow much more easily. However, whereas in .Net you normally throw Exceptions which turn into SoapExceptions – with django and REST I find I have to write documentation for clients/consumers explaining how to check results:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Old django newforms</title>
      <link>https://www.darrelherbst.com/post/080816-old-django-newforms/</link>
      <pubDate>Sat, 16 Aug 2008 13:54:07 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/080816-old-django-newforms/</guid>
      <description>&lt;p&gt;For those of us not using django 1.0 (yet)&lt;/p&gt;&#xA;&lt;p&gt;Newforms are great, and ModelForms will be a welcome release. However, I find I can’t utilize the over simplified workflow:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;myform = MyForm(request.Post)&#xA;myform.save()&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;because I have to process one or more fields before saving. But there aren’t a lot of explicit examples – for some strange reason, you are required to call .is_valid() on the form before trying to access the clean_data, like this:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Sharepoint FBA change password</title>
      <link>https://www.darrelherbst.com/post/080722-sharepoint-fba-change-password/</link>
      <pubDate>Tue, 22 Jul 2008 13:54:27 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/080722-sharepoint-fba-change-password/</guid>
      <description>&lt;p&gt;The story thus far:&lt;/p&gt;&#xA;&lt;p&gt;You’ve decided to make a SharePoint website available, but don’t want to use active directory to manage your users. You can either use an off the shelf MembershipProvider &lt;a href=&#34;https://msdn.microsoft.com/en-us/library/f1kyba5e.aspx&#34;&gt;https://msdn.microsoft.com/en-us/library/f1kyba5e.aspx&lt;/a&gt; (which I highly recommend) or roll your own (which starts out looking like only a little bit of work, and then turns out to be a lot by the time you implement lockout, change password, account expiration, etc). The reason you’d want to roll your own is if you are keeping your membership information in your own schema and don’t want to take the time to convert to the aspnetsqlmembership &lt;a href=&#34;http://msdn.microsoft.com/en-us/library/system.web.security.sqlmembershipprovider.aspx&#34;&gt;http://msdn.microsoft.com/en-us/library/system.web.security.sqlmembershipprovider.aspx&lt;/a&gt; provider, or you need to communicate with some other system via an api.&lt;/p&gt;</description>
    </item>
    <item>
      <title>FBA user does not exist or is not unique</title>
      <link>https://www.darrelherbst.com/post/080720-fba-user-does-not-exist-or-is-not-unique/</link>
      <pubDate>Sun, 20 Jul 2008 13:54:46 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/080720-fba-user-does-not-exist-or-is-not-unique/</guid>
      <description>&lt;p&gt;Been asked this question a few times lately. Remember that when you define a MembershipProvider for forms based authentication for sharepoint (or any asp.net) you can add as many as you want. The way you tell SharePoint which one you mean is to put the name of the membershipprovider before the username like this:&lt;/p&gt;&#xA;&lt;p&gt;factoryhmembershipprovider:username&lt;/p&gt;&#xA;&lt;p&gt;Thus, when you call the _vti_bin/usergroup.asmx webservice, you need to specify which membershipprovider you want to use (especially if you are not using the default one – which is always active directory in SharePoint).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Sharepoint forms based authentication groups</title>
      <link>https://www.darrelherbst.com/post/080710-sharepoint-forms-based-authentication-groups/</link>
      <pubDate>Thu, 10 Jul 2008 13:55:08 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/080710-sharepoint-forms-based-authentication-groups/</guid>
      <description>&lt;p&gt;An interesting fact to note: you can’t remove a forms based authentication user from a Sharepoint group via the usergroup webservice until they have successfully been added to at least one group.&lt;/p&gt;&#xA;&lt;p&gt;Otherwise you will get a SoapServerException which looks like this:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;0×81020054&#xA;The user does not exist or is not unique.&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Vista on a macbook</title>
      <link>https://www.darrelherbst.com/post/080112-vista-on-a-macbook/</link>
      <pubDate>Sat, 12 Jan 2008 13:55:21 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/080112-vista-on-a-macbook/</guid>
      <description>&lt;p&gt;Although I’ve been doing Mac programming for a little while, I never considered trying to merge both OS’s on one machine. After seeing several articles about upgrading the HDD, and learning about BootCamp to install vista I might take the leap. No more deciding which machine to take.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Dynamic debugging service</title>
      <link>https://www.darrelherbst.com/post/080111-dynamic-debugging-service/</link>
      <pubDate>Fri, 11 Jan 2008 13:55:36 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/080111-dynamic-debugging-service/</guid>
      <description>&lt;p&gt;A righteous hack – designing logging as a service. On my latest project I made sure to set up logging with log4net straight from the beginning. I wrote a custom logger which sends trace messages to the database per user. Then, I made sure the User object has a property to turn debug logging on or off per user.&lt;/p&gt;&#xA;&lt;p&gt;So now, when a user says they have a problem, or when we get an application error email (you have your apps send mails to you when there is a fatal error, right?) we turn on debug logging for that user, and follow the trace when they go through the system next.&lt;/p&gt;</description>
    </item>
    <item>
      <title>SqlServer analysis services</title>
      <link>https://www.darrelherbst.com/post/071205-sqlserver-analysis-services/</link>
      <pubDate>Wed, 05 Dec 2007 13:56:11 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/071205-sqlserver-analysis-services/</guid>
      <description>&lt;p&gt;Couple of evolving practices for my current team:&lt;/p&gt;&#xA;&lt;p&gt;Do not try to set up an analysis services project on a full database. I always cut down the data to a small representative sample first.&lt;/p&gt;&#xA;&lt;p&gt;Whenever possible, let the business folks write the calculation formulas. Don’t let your development team get bogged down with change requests for things the business people can do. Again, you will want to set these folks up with your representative sample so they can reprocess formula changes at will. Thus, the sample should be small but as complete as possible. I like to use a filtered set from the production database, pulled nightly.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Super rapid deployment with .net</title>
      <link>https://www.darrelherbst.com/post/071204-super-rapid-deployment-with-.net/</link>
      <pubDate>Tue, 04 Dec 2007 13:56:33 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/071204-super-rapid-deployment-with-.net/</guid>
      <description>&lt;p&gt;One way to think about Powershell is to think of it similar to the python interpreter, but for .Net. And yes, given that IronPython exists, you can actually write your python if you so desire. The point here is, powershell becomes a rapid deployment mechanism for anything you write in .Net. Write your assembly, deploy to the GAC throughout the enterprise using SMS, and then push your powershell scripts out to the machines. This results in a very rapid design-develop-deploy cycle. You can almost get as fast as deployment as linux this way.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Geographic driven content needs sitemaps</title>
      <link>https://www.darrelherbst.com/post/071208-geographic-driven-content-needs-sitemaps/</link>
      <pubDate>Sun, 12 Aug 2007 13:56:00 -0400</pubDate>
      <guid>https://www.darrelherbst.com/post/071208-geographic-driven-content-needs-sitemaps/</guid>
      <description>&lt;p&gt;I am currently developing two separate locative content systems. Meaning, what you see is determined by your location. We map your IP address to a geocode, or latitude and longitude. Hopefully in the future geo headers will be added by browsers and we will not need to play this guessing game.&lt;/p&gt;&#xA;&lt;p&gt;Looking through the logs and seeing the regular list of search engine indexers I normally see, what comes to mind is that the engine will see locative content based on its IP address. But the rest of the content will not get indexed unless we make sure to give them a way to find it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A better life through lisp</title>
      <link>https://www.darrelherbst.com/post/051121-a-better-life-through-lisp/</link>
      <pubDate>Mon, 21 Nov 2005 15:29:38 -0500</pubDate>
      <guid>https://www.darrelherbst.com/post/051121-a-better-life-through-lisp/</guid>
      <description>&lt;h1 id=&#34;a-better-life-through-lisp&#34;&gt;a better life through lisp&lt;/h1&gt;&#xA;&lt;p&gt;I have been using emacs as my favorite text editor for over fifteen years. One of the super nifty features is that you can just throw some lisp into a buffer and jam C-x eval-buffer (that’s Control-x and then type “eval-buffer”) and the lisp program you just wrote executes. I currently prefer doing this to writing windows scripting host or bash scripts to generate sql statements. Though I might have to install monad and start playing around with the msh scripting environment. Example below:&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
