<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>David Moulton</title>
    <description>This is my personal website where I occasionaly blog and post my astrophotography.
</description>
    <link>https://davidmoulton.me/</link>
    <atom:link href="https://davidmoulton.me/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Mon, 13 Jul 2026 09:42:11 +0000</pubDate>
    <lastBuildDate>Mon, 13 Jul 2026 09:42:11 +0000</lastBuildDate>
    <generator>Jekyll v3.10.0</generator>
    
      <item>
        <title>Filter Subframe Calculator</title>
        <description>&lt;p&gt;Clear skies are a limited resource. This subframe calculator is designed to streamline the planning of your imaging runs by balancing desired integration times with hardware constraints and overhead requirements. It ensures that your planned sequence fits within your available imaging window while maintaining the correct ratios between your various filters.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/subframe-caluclator.jpg&quot; alt=&quot;Messier Spreadsheet&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://docs.google.com/spreadsheets/d/130ROe-Bl3tVfpzxpfib4mojh9YD4YDGfu2yxO02mLL4/edit?usp=sharing&quot;&gt;Link to my sheet&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hover over the Instructions cell for help if you need it.&lt;/p&gt;

&lt;p&gt;In Global Settings, input your target total imaging time and an estimated overhead percentage to account for time spent on dithering, autofocusing, meridian flips, etc. The sheet  calculates the “Effective Time” and the “Total Loops” possible within that window.&lt;/p&gt;

&lt;p&gt;In the Filter Settings section, you set the specific exposure times per filter and the number of subframes per loop for each channel. The calculator uses these inputs to display the total integration time per filter.&lt;/p&gt;

&lt;p&gt;To use this tool for planning your own imaging runs, you must save your own version to your Google account. Navigate to the File menu and select Make a Copy. This will create a personal, editable spreadsheet in your Google Drive, allowing you to modify exposure lengths and subframe ratios for different targets and equipment profiles.&lt;/p&gt;

&lt;p&gt;Clear skies and happy imaging!&lt;/p&gt;
</description>
        <pubDate>Tue, 16 Jun 2026 00:00:00 +0000</pubDate>
        <link>https://davidmoulton.me/astronomy/2026/06/16/filter-subframe-calculator.html</link>
        <guid isPermaLink="true">https://davidmoulton.me/astronomy/2026/06/16/filter-subframe-calculator.html</guid>
        
        
        <category>astronomy</category>
        
      </item>
    
      <item>
        <title>Messier Observation Spreadsheet</title>
        <description>&lt;p&gt;One of the things I set out to do when I started doing astrophotography was to capture an image of each of the objects on the Messier List.&lt;/p&gt;

&lt;p&gt;I needed a way to keep track of what I had imaged, what I should attempt next. I located a very basic spreadsheet on the internet and imported it into Google Sheets. From there, I made some additions to it to fit my needs.  Perhaps it will fit yours as well. This can certainly be used for visual observation as well.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/messier-sheet.jpg&quot; alt=&quot;Messier Spreadsheet&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://docs.google.com/spreadsheets/d/1mNEUwc-yqQ6Nd1bJmGxTwlVTtT-rQZiVSMXEUImtP-s/edit#gid=1983653817&quot;&gt;Here is a copy of my sheet&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You should be logged into your Google account. If so, you should be able to make a copy of this spreadsheet from the File menu.&lt;/p&gt;

&lt;p&gt;Once you are using your own copy, have a look at the Data menu, and choose “Filter Views”. In that menu are several choices. I often use the “Filter by RA”. This sorts the list by the RA value, so that I can see what objects are well placed for imaging. The other choices in that menu should be self explanatory.&lt;/p&gt;

&lt;p&gt;Once you have imaged or observed an object, you can make it as such in column M. You can then filter on Not Done.&lt;/p&gt;
</description>
        <pubDate>Thu, 16 Mar 2023 00:00:00 +0000</pubDate>
        <link>https://davidmoulton.me/astronomy/2023/03/16/messier-observation-spreadsheet.html</link>
        <guid isPermaLink="true">https://davidmoulton.me/astronomy/2023/03/16/messier-observation-spreadsheet.html</guid>
        
        
        <category>astronomy</category>
        
      </item>
    
      <item>
        <title>Installing Arch Linux Part 1</title>
        <description>&lt;p&gt;This article describes my installation procedure for a very basic starting point with Arch Linux. My philosophy on the initial install is to only install what is absolutely needed, especially before the first boot. That’s when you find out if you screwed up, after all.&lt;/p&gt;

&lt;p&gt;Part 2 will describe more setup, including installation of my preferred desktop environment, Budgie.&lt;/p&gt;

&lt;p&gt;This installation procedure will result in an Arch Linux install with the following features:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Systemd Boot&lt;/li&gt;
  &lt;li&gt;BTRFS as the file system
    &lt;ul&gt;
      &lt;li&gt;Subvolumes: root, home, pkg, and swap&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;An encrypted drive&lt;/li&gt;
  &lt;li&gt;A swap file&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;why-arch-linux&quot;&gt;Why Arch Linux?&lt;/h2&gt;
&lt;p&gt;After many (many) years on Ubuntu and other forms of Debian, I needed a change. I wanted to have more control over my install. There is so much bloat on most distributions, and you end up with largely what someone else decided you should have. I’m a long time Linux user, so I’m comfortable hacking around in configs and troubleshooting issues. That said, another result of using a pre-prepared distrubution is that you don’t necessarily understand what’s happening under the covers. I don’t need Linux From Scratch, but I don’t want Ubuntu any more. It’s a great distribution, but it’s time for me to move on. I chose Arch to take me further towards a better understanding of my system. Does this describe you? If so, follow along.&lt;/p&gt;

&lt;h2 id=&quot;practice-makes-perfect&quot;&gt;Practice makes perfect&lt;/h2&gt;
&lt;p&gt;Of course if you want choice, you have to make decisions. I suggest you take your time while you are preparing to install Arch, before you commit it to your drives. This is especially true if you are replacing your running drive like I did. I couldn’t afford lots of downtime while I figured things out. I made extensive use of Virtual Box VMs to learn the ropes of install and make choices of how I wanted to configure my system. I’ve create and destroyed at least 20 VMs while learning the best Arch install for me. I suggest you do the same. You might find that the components I’ve chosen for my install don’t match what you need or want. Better to find that out in a VM rather than your real drive.&lt;/p&gt;

&lt;h1 id=&quot;configuring-virtualbox&quot;&gt;Configuring Virtualbox&lt;/h1&gt;
&lt;p&gt;If you choose to use Virtualbox, here are a few things I would suggest you use to configure your VM.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;Memory Size - I’d recommend 2048 MB. You could probably get along with 1GB if you aren’t going on to install a GUI.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Hard Disk - Make your hard drive at least 25 GB. I usually use 30. Be sure to use a dynamic size. No need to take up all the space at first.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;After the install, click the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Settings&lt;/code&gt; button at the top.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;On the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;System&lt;/code&gt; tab, check the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Enable EFI&lt;/code&gt; checkbox.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;On the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Display&lt;/code&gt; tab, increase Video Memory to 128MB and check &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Enable 3D Acceleration&lt;/code&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;On the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Network&lt;/code&gt; tab, click &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Advanced&lt;/code&gt; and then &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Port Forwarding&lt;/code&gt;.&lt;/p&gt;

    &lt;ol&gt;
      &lt;li&gt;
        &lt;p&gt;Click the + symbol a the right of the window to add a port forwarding rule allowing SSH into the VM. You’ll be glad you did.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;Use these settings
        &lt;ul&gt;
          &lt;li&gt;Name: SSH&lt;/li&gt;
          &lt;li&gt;Host IP: 127.0.0.1&lt;/li&gt;
          &lt;li&gt;Host Port: 2222&lt;/li&gt;
          &lt;li&gt;Guest IP 10.0.2.15&lt;/li&gt;
          &lt;li&gt;Guest Port: 22&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;Click OK.&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;On the User Interface tab: Personal choice, but I like to click the “Show at top of screen” checkbox to put the dropdown at the top rather than the bottom.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;starting-the-installation&quot;&gt;Starting the Installation&lt;/h2&gt;

&lt;p&gt;Whether it’s a VM or your computer, boot into the Arch install ISO.&lt;/p&gt;

&lt;h1 id=&quot;enable-ssh&quot;&gt;Enable SSH&lt;/h1&gt;

&lt;p&gt;It is much more convenient when installing Arch to ssh into the box from another computer. This allows copy and paste and better fonts, etc.&lt;/p&gt;

&lt;p&gt;On the new machine, after booting into the Arch ISO&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# systemctl enable sshd.service --now
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Set a password for root:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# passwd
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Look up the IP address of the PC:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# ip a
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;You can now use that IP address to SSH in and continue.&lt;/p&gt;

&lt;h1 id=&quot;optional---if-using-virtual-box&quot;&gt;Optional - If using Virtual Box&lt;/h1&gt;
&lt;p&gt;If you are doing this on a VM using Virtual Box, I highly recommend you ssh into your virtual machine. Doing so from a terminal on your main computer is much more convenient way to enter commands, allowing cut at paste. Be sure to follow the VM setup above if you are using it. If you aren’t, skip to &lt;strong&gt;Partitioning&lt;/strong&gt;. You need to have followed the instructions above for configuring your VM. You will use this command:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# ssh -p 2222 root@127.0.0.1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h1 id=&quot;set-up-good-arch-mirrors&quot;&gt;Set up good Arch mirrors&lt;/h1&gt;
&lt;p&gt;Make sure that you are going to get as good a download as you can using reflector&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# pacman -Syyy
# pacman -S reflector
# reflector --verbose --country US --latest 5 --sort rate --save /etc/pacman.d/mirrorlist
# pacman -Syyy
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h1 id=&quot;sync-with-ntp-servers&quot;&gt;Sync with ntp servers&lt;/h1&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# timedatectl set-ntp true
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;partitioning&quot;&gt;Partitioning&lt;/h2&gt;
&lt;p&gt;I assume here that you are installing Arch Linux on /dev/sda. If you aren’t, you’ll need to replace your all references to it with your drive. I prefer using cfdisk for partitioning.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# cfdisk /dev/sda
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Choose the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gpt&lt;/code&gt; label type&lt;/p&gt;

&lt;h1 id=&quot;create-new-partition-table&quot;&gt;Create new partition table&lt;/h1&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;With the Free Space selected, hit enter&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Enter +550M for the partition size and hit enter&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Hit the right arrow to choose &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;[Type]&lt;/code&gt;. Arrow up to the top and choose EFI. Hit enter&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Down arrow to choose Free Space, and then choose &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;[New]&lt;/code&gt; and hit enter&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Accept partition size at whatever it is. It’s the rest of your drive. Hit &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Enter&lt;/code&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Right arrow over to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;[Write]&lt;/code&gt; and hit &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Enter&lt;/code&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Type “yes” and hit &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Enter&lt;/code&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Arrow over to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;[Quit]&lt;/code&gt; and hit &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Enter&lt;/code&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;encryption&quot;&gt;Encryption&lt;/h2&gt;
&lt;p&gt;Next we’ll create an encrypted container for the root file system. You will need to have a good pass phrase that will be used to unlock your drive whenever you boot up.&lt;/p&gt;

&lt;p&gt;We’ll use cryptsetup for these next few steps.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# cryptsetup luksFormat /dev/sda2
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Open the container. The term “luks” is just a placeholder, you can use whatever you want to, just remember to use that same term consistently.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# cryptsetup open /dev/sda2 luks
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;file-system-creation&quot;&gt;File System Creation&lt;/h2&gt;
&lt;p&gt;Format the EFI partition with FAT32 and give it the label EFI. The label is your choice.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# mkfs.vfat -F32 -n EFI /dev/sda1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Format the root partition with Btrfs and give it the label ROOT. Again, choose whatever you want for this partition label. Remember to adust your name for the luks container if you changed it.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# mkfs.btrfs -L ROOT /dev/mapper/luks
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h1 id=&quot;create-and-mount-subvolumes&quot;&gt;Create and Mount Subvolumes&lt;/h1&gt;
&lt;p&gt;Create subvolumes for root, home, the package cache, snapshots, swap, and the entire Btrfs file system:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mount /dev/mapper/luks /mnt
btrfs sub create /mnt/@
btrfs sub create /mnt/@home
btrfs sub create /mnt/@pkg
btrfs sub create /mnt/@snapshots
btrfs sub create /mnt/@swap
btrfs sub create /mnt/@btrfs
umount /mnt
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Mount the subvolumes&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mount -o noatime,nodiratime,compress=zstd,space_cache,ssd,subvol=@ /dev/mapper/luks /mnt
mkdir -p /mnt/{boot,home,var/cache/pacman/pkg,.snapshots,btrfs,swap}
mount -o noatime,nodiratime,compress=zstd,space_cache,ssd,subvol=@home /dev/mapper/luks /mnt/home
mount -o noatime,nodiratime,compress=zstd,space_cache,ssd,subvol=@pkg /dev/mapper/luks /mnt/var/cache/pacman/pkg
mount -o noatime,nodiratime,compress=zstd,space_cache,ssd,subvol=@snapshots /dev/mapper/luks /mnt/.snapshots
mount -o noatime,nodiratime,space_cache,ssd,subvol=@swap /dev/mapper/luks /mnt/swap
mount -o noatime,nodiratime,compress=zstd,space_cache,ssd,subvolid=5 /dev/mapper/luks /mnt/btrfs	
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Mount the EFI partition&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# mount /dev/sda1 /mnt/boot
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;base-system-and-etcfstab&quot;&gt;Base System and /etc/fstab&lt;/h2&gt;

&lt;h1 id=&quot;install-arch-linux&quot;&gt;Install Arch Linux&lt;/h1&gt;

&lt;p&gt;There may be other packages that you need here. If you don’t want to use vi, you can install nano or emacs instead. You may also want to install wifi tools if your machine isn’t using ethernet.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# pacstrap /mnt linux linux-firmware base base-devel btrfs-progs intel-ucode networkmanager network-manager-applet wireless_tools wpa_supplicant dialog os-prober mtools dosfstools openssh vi 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h1 id=&quot;generate-etcfstab&quot;&gt;Generate /etc/fstab&lt;/h1&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# genfstab -U /mnt &amp;gt;&amp;gt; /mnt/etc/fstab
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;system-configuration&quot;&gt;System Configuration&lt;/h2&gt;

&lt;p&gt;chroot into the new system&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# arch-chroot /mnt
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;swap&quot;&gt;Swap&lt;/h2&gt;

&lt;p&gt;I’m using a swap file here instead of a partition.&lt;/p&gt;

&lt;p&gt;Start by creating zero byte file and giving it attributes that btrfs has to have when using a swap file. These commands disable Copy on Write and compression.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# cd /swap
# truncate -s 0 ./swapfile
# chattr +C ./swapfile
# btrfs property set ./swapfile compression none
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Create the swap file. This creates a 2GB file. Change to suit your needs.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# dd if=/dev/zero of=/swap/swapfile bs=1M count=2048 status=progress
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Set secure file permissions&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# chmod 600 /swap/swapfile
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Make it a swapfile&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# mkswap /swap/swapfile
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Turn it on&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# swapon /swap/swapfile
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Add it to the fstab&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# echo &quot;/swap/swapfile                                  none            swap            defaults        0 0&quot; &amp;gt;&amp;gt; /etc/fstab
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Set host name&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# echo &amp;lt;YOUR HOST NAME&amp;gt; /etc/hostname
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Set locale&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# echo LANG=en_US.UTF-8 &amp;gt; /etc/locale.conf
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Uncomment the following rows of /etc/locale.gen:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;#en_US.UTF-8 UTF-8
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;generate-locale&quot;&gt;Generate locale&lt;/h2&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# locale-gen
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;set-time-zone&quot;&gt;Set time zone&lt;/h2&gt;

&lt;p&gt;Use the zoneinfo for your timezone&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# ln -sf /usr/share/zoneinfo/US/Mountain /etc/localtime
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Define hosts in /etc/hosts:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;#&amp;lt;ip-address&amp;gt;	&amp;lt;hostname.domain.org&amp;gt;	&amp;lt;hostname&amp;gt;
127.0.0.1	localhost &amp;lt;YOUR-HOSTNAME&amp;gt;.localdomain	&amp;lt;YOUR-HOSTNAME&amp;gt;
::1		localhost.localdomain	localhost
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Set root password&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# passwd
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h1 id=&quot;initramfs&quot;&gt;Initramfs&lt;/h1&gt;

&lt;p&gt;Configure the creation of initramfs by editing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc/mkinitcpio.conf&lt;/code&gt;. Change the line HOOKS=… to&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;HOOKS=&quot;base keyboard udev autodetect modconf block keymap encrypt btrfs filesystems&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Recreate initramfs&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# mkinitcpio -p linux
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;boot-manager&quot;&gt;Boot Manager&lt;/h2&gt;

&lt;h1 id=&quot;install-systemd-boot&quot;&gt;Install systemd-boot&lt;/h1&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# bootctl --path=/boot install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Determine the UUID of your encrypted partition&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# blkid -s UUID -o value /dev/sda2
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Create file &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/boot/loader/entries/arch.conf&lt;/code&gt; and fill it with this, replacing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;UUID-OF-ROOT-PARTITION&amp;gt;&lt;/code&gt; with the UUID determined just above.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;title Arch Linux
linux /vmlinuz-linux
initrd /intel-ucode.img
initrd /initramfs-linux.img
options cryptdevice=UUID=&amp;lt;UUID-OF-ROOT-PARTITION&amp;gt;:luks:allow-discards root=/dev/mapper/luks rootflags=subvol=@ rd.luks.options=discard rw
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Edit file &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/boot/loader/loader.conf&lt;/code&gt; and fill it with:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;default  arch.conf
timeout  4
console-mode max
editor   no
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;networking&quot;&gt;Networking&lt;/h2&gt;

&lt;p&gt;Make sure that networking starts up after you reboot&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# systemctl enable NetworkManager
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h1 id=&quot;final-steps&quot;&gt;Final Steps&lt;/h1&gt;

&lt;p&gt;Exit chroot, unmount partitions and reboot&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# exit
# umount -R /mnt
# reboot
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h1 id=&quot;done-for-now&quot;&gt;Done, for now&lt;/h1&gt;

&lt;p&gt;Your machine or VM should reboot. It will ask you for the pass phrase you used when you encrypted the drive. You now have a very basic Arch linux install. Add whatever you need with Pacman or AUR. In Part 2, I’ll guide you through installing Budgie and LightDM as a GUI.&lt;/p&gt;

&lt;h1 id=&quot;references&quot;&gt;References&lt;/h1&gt;
&lt;p&gt;&lt;a href=&quot;https://www.nerdstuff.org/posts/2020/2020-004_arch_linux_luks_btrfs_systemd-boot/&quot;&gt;Installing Arch Linux with Btrfs, systemd-boot and LUKS&lt;/a&gt; | Nerdstuff&lt;/p&gt;

&lt;table&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://wiki.archlinux.org/index.php/swap#Swap_file&quot;&gt;Swap&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;Arch Wiki&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

</description>
        <pubDate>Sat, 28 Nov 2020 00:00:00 +0000</pubDate>
        <link>https://davidmoulton.me/linux/2020/11/28/installing-arch-linux-part-1.html</link>
        <guid isPermaLink="true">https://davidmoulton.me/linux/2020/11/28/installing-arch-linux-part-1.html</guid>
        
        
        <category>linux</category>
        
      </item>
    
      <item>
        <title>Astrophotography With Free Software</title>
        <description>&lt;p&gt;For a number of years I have wanted to switch to using all free software involved in my astrophotography. The intent of this post is to outline what I am now using and how it is working out for me.&lt;/p&gt;

&lt;p&gt;Let me start with what might be the elephant in the room. Why, when I have likely spent a few or several thousand dollars on imaging hardware for astrophotography, would I decide to make due with free software for capture and processing? The answer is, well, because I want to. I would also say that the free software I am using isn’t a step down from what I have paid for in the past. It’s different, and I may have left a few small features behind, but all the major needs are met. I have been a Linux user for many years, since 1996 or so. I believe in its mission and the mission of open source software. I don’t use it because it’s cheap, I use it because I think it’s a good idea.&lt;/p&gt;

&lt;p&gt;I’m going to explain using Linux, but all of this software is available on Macintosh or Windows.&lt;/p&gt;

&lt;h2 id=&quot;indilib&quot;&gt;Indilib&lt;/h2&gt;

&lt;p&gt;If you are currently using windows to control your telescope and capture data, you are almost certainly using ASCOM to control your hardware. Ascom is only available on windows. If you aren’t a windows user, you need to use Indi instead to control your hardware. I won’t explain how to get set up with Indi. You can find how to do this by going to &lt;a href=&quot;http://indilib.org&quot;&gt;indilib.org&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;data-capture&quot;&gt;Data Capture&lt;/h2&gt;

&lt;p&gt;There are a few ways to perform capture data using Indi. I have chosen to use KStars. It is probably the widest used of all the possibilities.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/kstars.png&quot; alt=&quot;KStars Window&quot; /&gt;&lt;/p&gt;

&lt;p&gt;You will capture your data using a module within KStars called Ekos. It acts as both the Indi server and a client. You can set up your devices and start working with them to capture. You can use it to capture lights, darks, flats, and biases. I like to change my working directory in Ekos for each target, creating a new directory each time. If I am intending to shoot M11, I create an M11 directory. I choose to also make these target directories a child of a directory for the date. You may have a different method.&lt;/p&gt;

&lt;p&gt;In your working directory, Ekos will create directories called Light, Dark, Flat, and Bias. This is assuming you shoot all of those for each target, which you probably won’t. If you shoot more than one target in a session, you will probably shoot darks, flats, and biases at the start or the end of the session. You might consider putting those in a “support-files” directory for the date. Your choice.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/ekos-camera.png&quot; alt=&quot;Ekos Window&quot; /&gt;&lt;/p&gt;

&lt;p&gt;There are good tutorials and blog posts on capturing data with KStars/Ekos. If you have specific questions, ask them in the comments.&lt;/p&gt;

&lt;h2 id=&quot;processing-your-data-in-siril&quot;&gt;Processing Your Data in Siril&lt;/h2&gt;

&lt;p&gt;One of the reasons I took awhile to decide to switch to Linux for image processing was that I was using Deep Sky Stacker for stacking my images. I had looked at stackers for other operating systems, but it appeared that DSS was the only simple way to do it. I was very wrong. I finally gave Siril a try. I’ve found it to be nearly as simple as DSS, and as a bonus I can script it so that the stacking happens semi-automatically.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://siril.org&quot;&gt;Siril.org&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You don’t have to use scripts in Siril, but I have found that it is easiest for me to use them. Siril has several pre-built scripts to stack your images. I used those for awhile and then wrote my own modifications to them.&lt;/p&gt;

&lt;p&gt;If you decide to use the built in scripts, you need to organize your data into specific directories. You need a working directory that consists of these directories&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;lights
darks
flats
biases&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;They need to be these exact names, including case. No capital letters. You can later choose to modify the scripts and you can rename the directories to match what Ekos produces. I have not found a way to modify Ekos to change those directory names. Your images can be in fits format, or in your camera’s raw format. I use a Canon DSLR, so I use cr2 format.&lt;/p&gt;

&lt;p&gt;You should skip the rest of this section if you are new to siril, or if you are satisfied with how the scripts work.&lt;/p&gt;

&lt;p&gt;I had an issue that wasn’t straight-forward to fix. As I said above, I didn’t want to have to have copies of the support files, ie darks, flats, biases in each directory that had lights. So, I thought, Linux symbolic links would come to the rescue. Unfortunately, the scripts in siril don’t work with symbolic links. They move in a relative way, so if I make a symbolic link to the biases directory in my lights directory, when the biases are done being processed the script does a “cd ..” which makes the current working directory whereever the parent of the real biases directory is, because it doesn’t follow the symbolic link back out. Then when the script tries to cd to the flats directory it doesn’t exist, because we are in the wrong directory at that point.&lt;/p&gt;

&lt;p&gt;So, what to do. I ended up creating small siril scripts that only do one specific portion of stacking. One for biases, another for flats, then darks, and finally lights. I then wrote a small shell script that uses absolute directories instead of relative. Here is that script:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;&lt;span class=&quot;c&quot;&gt;#!/bin/sh&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;WORKING_DIR&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;dirname&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$0&lt;/span&gt;&lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;

siril &lt;span class=&quot;nt&quot;&gt;-s&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$WORKING_DIR&lt;/span&gt;/process_biases.ssf &lt;span class=&quot;nt&quot;&gt;-d&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$1&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; 
siril &lt;span class=&quot;nt&quot;&gt;-s&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$WORKING_DIR&lt;/span&gt;/process_flats.ssf &lt;span class=&quot;nt&quot;&gt;-d&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$1&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;
siril &lt;span class=&quot;nt&quot;&gt;-s&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$WORKING_DIR&lt;/span&gt;/process_darks.ssf &lt;span class=&quot;nt&quot;&gt;-d&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$1&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;
siril &lt;span class=&quot;nt&quot;&gt;-s&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$WORKING_DIR&lt;/span&gt;/process_lights.ssf &lt;span class=&quot;nt&quot;&gt;-d&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$1&lt;/span&gt;%  &lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;And here are the smaller siril scripts:&lt;/p&gt;

&lt;p&gt;process_biases.ssf&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;&lt;span class=&quot;c&quot;&gt;#build master-bias&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;cd &lt;/span&gt;biases
convertraw bias_
stack bias_ rej 3 3 &lt;span class=&quot;nt&quot;&gt;-nonorm&lt;/span&gt;

close&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;process_flats.ssf&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;&lt;span class=&quot;c&quot;&gt;#preprocess flats&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;cd &lt;/span&gt;flats
convertraw flat_
preprocess flat_ &lt;span class=&quot;nt&quot;&gt;-bias&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;../biases/bias_stacked

&lt;span class=&quot;c&quot;&gt;#build master-flat&lt;/span&gt;
stack pp_flat_ rej 3 3 &lt;span class=&quot;nt&quot;&gt;-norm&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;mul

close&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;process_darks.ssf&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;&lt;span class=&quot;c&quot;&gt;#build master-dark&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;cd &lt;/span&gt;darks
convertraw dark_
stack dark_ rej 3 3 &lt;span class=&quot;nt&quot;&gt;-nonorm&lt;/span&gt;

close&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;process_lights.ssf&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;&lt;span class=&quot;c&quot;&gt;#preprocess lights&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;cd &lt;/span&gt;lights
convertraw light_
preprocess light_ &lt;span class=&quot;nt&quot;&gt;-dark&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;../darks/dark_stacked &lt;span class=&quot;nt&quot;&gt;-flat&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;../flats/pp_flat_stacked &lt;span class=&quot;nt&quot;&gt;-cfa&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-equalize_cfa&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-debayer&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-stretch&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;#align lights&lt;/span&gt;
register pp_light_

&lt;span class=&quot;c&quot;&gt;#stack calibrated lights&lt;/span&gt;
stack r_pp_light_ rej 3 3 &lt;span class=&quot;nt&quot;&gt;-norm&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;addscale &lt;span class=&quot;nt&quot;&gt;-out&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;../result

close&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;You can then do&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;stack.sh m11&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;You will end up with a file called “result.fits” in the working directory.&lt;/p&gt;

&lt;h2 id=&quot;post-processing-your-image&quot;&gt;Post processing your image&lt;/h2&gt;

&lt;p&gt;Once you have the result fits file, open it in siril. You will have something like this:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/siril.png&quot; alt=&quot;siril main window&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I HIGHLY recommend this video for processing in siril. It was a revalation to me.&lt;/p&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/U5VndjG819s&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;I currently use several of the tools in siril for processing, in this order.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;Photometric Color Calibration&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Remove Green Noise…&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Histogram Transformation…&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Asinh Transformation…&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Background Exraction…&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Deconvolution&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I might do some Color Saturation, but I usually do that in Gimp. I haven’t learned the other processing tools, but I expect I will learn them in time and put them to use.&lt;/p&gt;

&lt;p&gt;At this point I save the file in tif format to move on to Gimp. I am also using &lt;a href=&quot;https://glimpse-editor.github.io/&quot;&gt;Glimpse&lt;/a&gt;, which is a Gimp fork.&lt;/p&gt;

&lt;h2 id=&quot;gimp&quot;&gt;Gimp&lt;/h2&gt;

&lt;p&gt;Open the tif file in Gimp and follow the youtube video above. I especially like his method for using a mask to help remove noise in the background black. I’ve gotten better at using layers as well.&lt;/p&gt;

&lt;p&gt;I may hash out more specifics on the parts of this workflow, but for now this is how I am doing it at a high level.&lt;/p&gt;
</description>
        <pubDate>Sun, 02 Aug 2020 00:00:00 +0000</pubDate>
        <link>https://davidmoulton.me/astronomy/astrophotography/2020/08/02/astrophotography-with-free-software.html</link>
        <guid isPermaLink="true">https://davidmoulton.me/astronomy/astrophotography/2020/08/02/astrophotography-with-free-software.html</guid>
        
        
        <category>astronomy</category>
        
        <category>astrophotography</category>
        
      </item>
    
      <item>
        <title>Creating A Jupiter Timelapse</title>
        <description>&lt;p&gt;One of the things that I’ve been wanting to do is to create an animation of Jupiter’s great red spot traveling across the face over the course of a few hours. I had some ideas as to how to accomplish that, but wasn’t sure exactly how to work it out. I settled on a method. Time will tell if there is an easier way.&lt;/p&gt;

&lt;p&gt;The first thing to determine is when the GRS will transit the planet. Jupiter rotates in roughly 10 hours at that latitude, so there are plenty of chances to catch it. It isn’t too hard to wait a day or two until the transit occurs at a reasonable time during the night. One thing to keep in mind; there are a number of web pages that tell you when the transit will occur. In many cases, the time that it quotes will be the moment when the GRS is half-way thru its journey. So, if you want to capture a complete trip across, you will need to start taking photos a while earlier. Probably around an hour earlier.&lt;/p&gt;

&lt;p&gt;I prefer to use an app on my phone from Sky and Telescope called “Jupiter’s Moons”. It will show not only the moons, but their shadows, along with the GRS. It’s handy.&lt;/p&gt;

&lt;p&gt;Once you know the right time, get yourself set up as far in advance as you can. It’s nice if you can fine tune your tracking to get it as smooth as possible.&lt;/p&gt;

&lt;p&gt;Here is the setup I use:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Celestron 9.25&lt;/li&gt;
  &lt;li&gt;CGEM Mount&lt;/li&gt;
  &lt;li&gt;ZWO ASI120MC-S&lt;/li&gt;
  &lt;li&gt;FireCapture&lt;/li&gt;
  &lt;li&gt;Registax&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I also use a Canon T6i, but I decided not to use it in this instance. Using the 120MC I can both guide and photograph with the same camera. This makes the process much easier. Also, FireCapture is very well suited to this task. It allows capture, wait, capture, etc.&lt;/p&gt;

&lt;p&gt;Here is an overview of the steps I take to arrive at this goal.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Get Jupiter in view and focused in the camera.&lt;/li&gt;
  &lt;li&gt;Decide on the appropriate exposure time and other image settings. I used 1000 frames at iso 400 and 1/20th of a second.&lt;/li&gt;
  &lt;li&gt;Set up the autorun feature on FireCapture, so that you can take a video, wait some period of time, and then take another video.&lt;/li&gt;
  &lt;li&gt;I captured the 1000 frames, waited 5 minutes, and then repeated. I did this for about 3.5 hours. This was not long enough to capture a full trip across, but it did around 2/3rds.&lt;/li&gt;
  &lt;li&gt;Once the capturing was done. I started stacking. I did this in Registax. It has the ability to create groups of files to stack, so you can set that up and walk away. You can also do some post processing automatically in Registax. I’ll explore that in a later blog entry.&lt;/li&gt;
  &lt;li&gt;Once I was satisfied with all of the stacked images, it was time to organze them into an animated gif. I did this with Gimp. You can import a group of images into layers in Gimp. I did this, and then aligned all of the layers so that the image of Jupiter was in exactly the same place in each layer. Then Gimp will export the layers as an animated gif.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The result is below. It’s not at all perfect, but I’m pleased with this initial result. I should probably try this again before Jupiter is too far along in the season to watch for 4 hours.&lt;/p&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/6qoolQ9JuDw&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
</description>
        <pubDate>Fri, 14 Jul 2017 00:00:00 +0000</pubDate>
        <link>https://davidmoulton.me/astronomy/astrophotography/2017/07/14/creating-a-jupiter-timelapse.html</link>
        <guid isPermaLink="true">https://davidmoulton.me/astronomy/astrophotography/2017/07/14/creating-a-jupiter-timelapse.html</guid>
        
        
        <category>astronomy</category>
        
        <category>astrophotography</category>
        
      </item>
    
      <item>
        <title>Astrophotography First Attempts</title>
        <description>&lt;p&gt;The weather has finally gotten warm enough, and the sky clear enough to try some astrophotography with all the stuff I bought over the winter.&lt;/p&gt;

&lt;p&gt;I spent time learning how to get a fairly good polar alignment. I still have work to do on that, but it’s getting better.&lt;/p&gt;

&lt;p&gt;I was able during April and May to get out on a few nights and take some shots. I did not yet at that time have a guide scope, so I didn’t have much luck with exposures of more than about 30 seconds. Here are a few examples:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/m51-early-april.jpg&quot; alt=&quot;M51&quot; /&gt;&lt;/p&gt;

&lt;p&gt;M51 - Taken in early April&lt;/p&gt;

&lt;p&gt;This one worked better than I thought it would. I think the problems in this photo are mostly in the post processing. I have since learned how to process things a little better. Here is the photo after I revisted it and reprocessed.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/m51-early-april-rework.jpg&quot; alt=&quot;M51&quot; /&gt;&lt;/p&gt;

&lt;p&gt;This is a lesson to go back and revisit photos already taken when you learn better techniques for post processing.&lt;/p&gt;

&lt;p&gt;I’ve also tried a little planetary photography, namely Jupiter. Saturn will have his turn, but for now it’s the big guy. This is my best attempt at Jupiter so far. Not too bad for a beginner if I do say so myself.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/jupiter.jpg&quot; alt=&quot;Jupiter&quot; /&gt;&lt;/p&gt;

&lt;p&gt;That is about 20 stacked photos. I’ve not been able to capture anything better than that so far. Might try again tonight!&lt;/p&gt;

&lt;p&gt;Here is my current setup, in my back yard.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/c925.jpg&quot; alt=&quot;My Setup&quot; /&gt;&lt;/p&gt;

&lt;p&gt;This includes:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;C9.25 on a CGEM mount&lt;/li&gt;
  &lt;li&gt;Celestron 70mm travelscope&lt;/li&gt;
  &lt;li&gt;ASO120MC-S guide camera&lt;/li&gt;
  &lt;li&gt;Unmodified Canon T6i&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’m pleased with the initial results from this setup. Most advice to people new to astrophotography is to purchase a small APO refractor and start there. This is good advice,
and will serve most everyone well. For me, I had most of the equipment already to start
using my current telescope, so it seemed like the best course of action to go with what I
had. I will eventually purchase a refractor to shoot with.&lt;/p&gt;
</description>
        <pubDate>Mon, 12 Jun 2017 00:00:00 +0000</pubDate>
        <link>https://davidmoulton.me/astronomy/astrophotography/2017/06/12/astrophotography-first-attempts.html</link>
        <guid isPermaLink="true">https://davidmoulton.me/astronomy/astrophotography/2017/06/12/astrophotography-first-attempts.html</guid>
        
        
        <category>astronomy</category>
        
        <category>astrophotography</category>
        
      </item>
    
      <item>
        <title>Star Analyser 100</title>
        <description>&lt;p&gt;Earlier this winter, I bought a Canon EOS T6i. I have been wanting to start doing some astrophotography, and this seemed like a good time to give it a try.&lt;/p&gt;

&lt;p&gt;Winter is a good time for arm-chair astronomy, at least for me. I have been studying about some of the more science related parts of this hobby. I have been taking a class on edx.com on exoplanets. Among other things, that class talks quite a bit about spectroscopy. This has led me to do some research on amateur spectroscopy, and it looks interesting. I have found that once you have a camera and a scope with a tracking drive, it isn’t terribly expensive to go all in and have what you need to take low resolution spectrums of brighter stars.&lt;/p&gt;

&lt;p&gt;In studying what to buy, it seems clear that the best way to get into this is with the &lt;a href=&quot;http://www.rspec-astro.com/star-analyser/&quot;&gt;Star Analyser 100&lt;/a&gt;. It’s manufactured by &lt;a href=&quot;http://www.patonhawksley.co.uk/&quot;&gt;Paton Hawksley&lt;/a&gt; in the UK. It is primarily distributed in the US by Tom Field at &lt;a href=&quot;http://www.fieldtestedsystems.com/&quot;&gt;Field Tested Systems&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The Star Analyser 100 is a 100 lines/mm diffraction grating. The great part about it is that it is packaged in a 1 1/4” eyepiece filter. This allows it to go on anything from a normal eyepiece for visual spectroscopy, to a normal astrophotography rig, as well as on the end of a DSLR camera that you can put on the end of a tripod and take spectra from stars without a tracking drive.&lt;/p&gt;

&lt;p&gt;A week or so ago, I put an ad on CloudyNights to see if anyone by chance had a SA-100 they were willing to part with. Within about a day I had one purchased and on the way. The previous owner had also created a DIY mount so that the SA-100 can be mounted on a normal DSLR lens as a ‘filter’.&lt;/p&gt;

&lt;p&gt;The package arrived a couple of days ago. Here are some photos of the contents (camera not included!):&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/analyzer-and-camera.jpg&quot; width=&quot;500&quot; /&gt;
&lt;img src=&quot;/assets/camera.jpg&quot; width=&quot;500&quot; /&gt;
&lt;img src=&quot;/assets/analyzer.jpg&quot; width=&quot;500&quot; /&gt;
&lt;img src=&quot;/assets/analyzer-closeup.jpg&quot; width=&quot;500&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The small ring in the plastic bag is a locking ring, so that you can orient the filter in the same position each time. This makes producing consistent spectra a little easier.&lt;/p&gt;

&lt;p&gt;I also ordered a 2” camera adapter so that I can connect my T6i to my Celestron 102slt to try this out. At that point, there was one adapter still missing. The SA-100 needs to be relatively close to the CCD or CMOS, so there needs to be a way mount it between the T-Ring and the scope adapter. For my refractor, that’s the 2” tube. For my SCT, that’s the SCT screw on adapter. Field Tested Systems carries just the thing for that. It’s called the &lt;a href=&quot;https://store.fieldtestedsystems.com/collections/for-your-classroom/products/ad-t2-dslr-adapter&quot;&gt;AD-T2&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Here are a couple of photos of the setup with my camera, now that all the adapters are here.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/camera-adapters.jpg&quot; width=&quot;500&quot; /&gt;
&lt;img src=&quot;/assets/analyzer-in-place.jpg&quot; width=&quot;500&quot; /&gt;&lt;/p&gt;

&lt;p&gt;As you would expect, it’s been cloudy since it came. I finally had a chance to test it on a fixed tripod. Here is my first spectrum, of Sirius. This is from my backyard, which is highly light-polluted. I call it a 7 on the Bortle scale. Our valley has a few hundred thousand people, with about 150,000 very close to me. That certainly means that I will be limited in what spectra I can take from my backyard.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/sirius-cropped.jpg&quot; width=&quot;500&quot; /&gt;&lt;/p&gt;

&lt;p&gt;It’s blurry. I definitely have a lot to learn about focusing. I’m sure that will come in time.&lt;/p&gt;

&lt;p&gt;More later. I’ve begun a little testing with Rspec, one of the applications that can be used to study a spectrum. But, more snow in the forecast.&lt;/p&gt;

</description>
        <pubDate>Sat, 25 Feb 2017 00:00:00 +0000</pubDate>
        <link>https://davidmoulton.me/astronomy/spectroscopy/2017/02/25/star-analyser-100.html</link>
        <guid isPermaLink="true">https://davidmoulton.me/astronomy/spectroscopy/2017/02/25/star-analyser-100.html</guid>
        
        
        <category>astronomy</category>
        
        <category>spectroscopy</category>
        
      </item>
    
      <item>
        <title>Re-sign Ruby Executable in OSX</title>
        <description>&lt;p&gt;Yesterday I finally fixed an issue that I have been sort of ignoring for a few weeks. Each time I started a rails server in dev mode, I would get the alert box wanting to know if I want the application “ruby” to accept incoming network connections. No matter how many time I clicked allow, the next time I ran the server, it would ask me that again. I found that in firewall preferences, it was in the list to be allowed. It was annoying, but I didn’t bother with finding a solution until yesterday. I made this fix in OSX Mountain Lion, but I assume it will work in other versions&lt;/p&gt;

&lt;p&gt;I found that I needed to create a new software signing certificate, and then use that to sign the ruby I was using in my project. These are the steps I followed, taken from a post at: &lt;a href=&quot;http://forums.macnn.com/79/developer-center/355720/how-re-sign-apples-applications-once&quot;&gt;forums.macnn.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;First, determine if you have a bad cert&lt;/p&gt;

&lt;p&gt;Locate the ruby you are using. If you are using rvm or some other manager, make sure the ruby you are using is active. Then,&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;which ruby&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;When you have the path:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;codesign &lt;span class=&quot;nt&quot;&gt;-v&lt;/span&gt; /path/to/ruby&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;If the above returns with nothing, then I don’t think you have the same problem this post fixes, so you should not bother to go further. If you get some error text saying that you have a bad certificate or something to that effect, you might try what I describe below.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;Create the new certificate&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Open Keychain Access. Easiest way to do this is choose “Utilities” from the Go menu in a finder window. Start Keychain Access there.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Go to the Keychain Access menu, and under Certificate Assistant, choose Create a Certificate&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Name your Certificate. (I recommend using something other than your first and last names)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;For Type, choose Self Signed Root.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Make sure Let me override defaults is checked and click Continue.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Under Serial Number, use a random number. Just make sure there is no other certificate on your system with the same name and serial number&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Give yourself a sufficiently long validity period. For a little over 5 years, use 2000 days. For almost 11 years, choose 4000 days.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Under Certificate Type, choose Code Signing, and click Continue.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Enter your personal information on the next screen. Have fun with Organization and Organizational Unit. After all, this is for your own personal use. Don’t use “Apple.” I myself used something like “Orange Computer” for Organization and “Hacking Department” for Organizational Unit. Click Continue when all has been filled out.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;For Key Pair Information, accept the defaults and click Continue.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;For Key Usage Extension, accept the defaults and click Continue.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;For Extended Key Usage Extension, accept the defaults and click Continue.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;For Basic Constraints Extension, accept the defaults and click Continue.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;For Subject Alternate Name Extension, accept the defaults and click Continue.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Use your “login” keychain to store the certificate and click Continue.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Now you have to set your certificate to be “trusted.”&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Go to your keychain, and right click (control click) on the new certificate you made and choose Get Info.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Open the triangle next to Trust.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Go down to Code Signing, and choose Always Trust.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Close the box. The system will ask for your admin password. Enter it and click OK.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Now you will sign the executable&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;codesign &lt;span class=&quot;nt&quot;&gt;-f&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-s&lt;/span&gt; &amp;lt;name from step 4&amp;gt; /path/to/ruby &lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;To make this work, I needed to go to System Preferences » Security &amp;amp; Privacy » Firewall » Firewall Options. There I removed ruby from the list of applications. Also make sure that “Automatically allow” is checked. Close up preferences.&lt;/p&gt;

&lt;p&gt;Once I completed these steps, I no longer receive the message I was receiving before.&lt;/p&gt;
</description>
        <pubDate>Mon, 01 Apr 2013 00:00:00 +0000</pubDate>
        <link>https://davidmoulton.me/programming/ruby/osx/2013/04/01/resign-ruby-executable-in-osx.html</link>
        <guid isPermaLink="true">https://davidmoulton.me/programming/ruby/osx/2013/04/01/resign-ruby-executable-in-osx.html</guid>
        
        
        <category>programming</category>
        
        <category>ruby</category>
        
        <category>osx</category>
        
      </item>
    
      <item>
        <title>Creating a Custom Icon Font For Rails</title>
        <description>&lt;p&gt;If you’ve used any @font-face icon fonts, whether with twitter-boostrap or Zurb, or elsewhere, you know they can be handy. Its nice from a rails perspective to have them bundled up in an engine, and its nice to have an easy-to-remember name to find them with.&lt;/p&gt;

&lt;p&gt;Its relatively easy to find free or low-cost icon fonts that you can use with @font-face. The problem is that they might not be Rails ready, and there might be a few hundred in a font, when you only need 10. If you’d like to be picky about which icons you include in your app, or perhaps you want different icons from different font sets, follow along.&lt;/p&gt;

&lt;p&gt;There are lots of ways to get a set of icon fonts. I’m choosing to use Fontello.&lt;/p&gt;

&lt;p&gt;So, to start off, &lt;strong&gt;go to &lt;a href=&quot;http://fontello.com&quot;&gt;Fontello&lt;/a&gt; and create the set of icons that you want to use. Download and unzip.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We’ll be modifying the instructions for gemifying assets that can be found in Derek Prior’s blog at &lt;a href=&quot;http://prioritized.net/blog/gemify-assets-for-rails&quot;&gt;prioritized.net&lt;/a&gt;.&lt;/p&gt;

&lt;hr /&gt;

&lt;ol&gt;
  &lt;li&gt;Use Bundler to create the gem&lt;/li&gt;
&lt;/ol&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;bundle gem myfonts&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;ol&gt;
  &lt;li&gt;Edit lib/myfonts.rb and add:&lt;/li&gt;
&lt;/ol&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-ruby&quot; data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Engine&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;Rails&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;Engine&lt;/span&gt;
   &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;ol&gt;
  &lt;li&gt;We’re going to add everything we need to the vendor directory.&lt;/li&gt;
&lt;/ol&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;mkdir&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-p&lt;/span&gt; vendor/assets/fonts
  &lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;mkdir &lt;/span&gt;vendor/assets/stylesheets&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;The fontello download contains a font directory with several fonts in it. Copy the contents of that directory to the fonts directory you just created.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Edit the .gemspec file and change gem.files to:&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-ruby&quot; data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;n&quot;&gt;gem&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;files&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;Dir&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;{lib,vendor}/**/*&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;LICENSE.txt&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;README.md&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;ol&gt;
  &lt;li&gt;Then add:&lt;/li&gt;
&lt;/ol&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-ruby&quot; data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;n&quot;&gt;gem&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;add_dependency&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;railties&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;~&amp;gt; 3.1&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;ol&gt;
  &lt;li&gt;You should also edit the gem description and summary to their proper values. Here is my gemspec as a sample result:&lt;/li&gt;
&lt;/ol&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-ruby&quot; data-lang=&quot;ruby&quot;&gt; &lt;span class=&quot;n&quot;&gt;lib&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;File&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;expand_path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;../lib&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kp&quot;&gt;__FILE__&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;vg&quot;&gt;$LOAD_PATH&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;unshift&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;lib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;unless&lt;/span&gt; &lt;span class=&quot;vg&quot;&gt;$LOAD_PATH&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;include?&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;lib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;nb&quot;&gt;require&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;myfonts/version&apos;&lt;/span&gt;
    &lt;span class=&quot;no&quot;&gt;Gem&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;Specification&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;gem&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;gem&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;name&lt;/span&gt;          &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;myfonts&quot;&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;gem&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;version&lt;/span&gt;       &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;Myfonts&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;VERSION&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;gem&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;authors&lt;/span&gt;       &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;David Moulton&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;gem&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;email&lt;/span&gt;         &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;dave@themoultons.net&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;gem&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;description&lt;/span&gt;   &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;sx&quot;&gt;%q{Demo gem for icon fonts}&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;gem&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;summary&lt;/span&gt;       &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;sx&quot;&gt;%q{Demo of how to create icon fonts for rails}&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;gem&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;homepage&lt;/span&gt;      &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;https://github.com/dmoulton/myfonts-demo&quot;&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;gem&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;files&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;Dir&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;{lib,vendor}/**/*&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;LICENSE.txt&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;README.md&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;gem&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;executables&lt;/span&gt;   &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;gem&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;files&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;grep&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;sr&quot;&gt;%r{^bin/}&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;File&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;basename&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;gem&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;test_files&lt;/span&gt;    &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;gem&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;files&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;grep&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;sr&quot;&gt;%r{^(test|spec|features)/}&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;gem&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;require_paths&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;lib&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;gem&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;add_dependency&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;railties&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;~&amp;gt; 3.1&quot;&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;Copy the fontello.css file from the fontello download to vendor/assets/stylesheets. I haven’t needed the other css files.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Rename the fontello.css file&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;mv &lt;/span&gt;vendor/assets/stylesheets/fontello.css vendor/assets/stylesheets/myfonts.css&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;ol&gt;
  &lt;li&gt;You will need to edit the src: lines in the css file to look for the fonts in assets. I count 5 places to edit in my demo.&lt;/li&gt;
&lt;/ol&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-css&quot; data-lang=&quot;css&quot;&gt;&lt;span class=&quot;nt&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;url&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&quot;/assets/fontello.eot&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;url&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&quot;/assets/fontello.eot?#iefix&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;format&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&apos;embedded-opentype&apos;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;url&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&quot;/assets/fontello.woff&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;format&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&apos;woff&apos;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;url&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&quot;/assets/fontello.ttf&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;format&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&apos;truetype&apos;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;url&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&quot;/assets/fontello.svg#fontello&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;format&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&apos;svg&apos;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;ol&gt;
  &lt;li&gt;If you would like a convenient way to change the colors of the icons, add something like this at the end of the css file:&lt;/li&gt;
&lt;/ol&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-css&quot; data-lang=&quot;css&quot;&gt; &lt;span class=&quot;nc&quot;&gt;.icon-red&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;nl&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;red&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;nc&quot;&gt;.icon-green&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;nl&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;green&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;nc&quot;&gt;.icon-white&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;nl&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;white&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;nl&quot;&gt;background-color&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;black&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;ol&gt;
  &lt;li&gt;The above will allow you to use html such as:&lt;/li&gt;
&lt;/ol&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-css&quot; data-lang=&quot;css&quot;&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&apos;icon-emo-happy icon-green&apos;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;ol&gt;
  &lt;li&gt;You’ll add this to your rails app as you normally would any other gem. I would recommend not pushing to rubygems.org, and just serving the gem from github or bitbucket or your own gem server. Use this example, changing the url to your own, unless you want to use my 4 emoticons:&lt;/li&gt;
&lt;/ol&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-ruby&quot; data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;n&quot;&gt;gem&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;myfonts&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:git&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;git://github.com/dmoulton/myfonts-demo.git&apos;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;ol&gt;
  &lt;li&gt;You should then edit your app/assets/stylesheets/application.css file using this example, remembering that its the name of the css file, sans extension, that you should use.&lt;/li&gt;
&lt;/ol&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-css&quot; data-lang=&quot;css&quot;&gt;&lt;span class=&quot;c&quot;&gt;/*
 * ...
 *
 *= require myfonts
 *= require_self
 *= require_tree .
 */&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;ol&gt;
  &lt;li&gt;You can then use html like this:&lt;/li&gt;
&lt;/ol&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-html&quot; data-lang=&quot;html&quot;&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;i&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;icon-emo-happy&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;/i&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;That’s about it. If you would like to see my demos, they can be found here:&lt;/p&gt;

&lt;p&gt;Gem: &lt;a href=&quot;https://github.com/dmoulton/myfonts-demo&quot;&gt;https://github.com/dmoulton/myfonts-demo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Rails App: &lt;a href=&quot;https://github.com/dmoulton/myfonts-demo-app&quot;&gt;https://github.com/dmoulton/myfonts-demo-app&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;###Resources&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://prioritized.net/blog/gemify-assets-for-rails&quot;&gt;Derek Prior’s blog entry on gemifying assets&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://fontello.com&quot;&gt;Fontello&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Sat, 01 Dec 2012 00:00:00 +0000</pubDate>
        <link>https://davidmoulton.me/programming/ruby/2012/12/01/create-a-custom-icon-font-for-rails.html</link>
        <guid isPermaLink="true">https://davidmoulton.me/programming/ruby/2012/12/01/create-a-custom-icon-font-for-rails.html</guid>
        
        
        <category>programming</category>
        
        <category>ruby</category>
        
      </item>
    
      <item>
        <title>Streaming vudu.com videos from your iPad to AppleTV via AirPlay</title>
        <description>&lt;p&gt;If you have tried to stream your vudu.com video playing onto your AppleTV, you may have found that all you seem to get is the audio. It is possible, with a little setup and some small inconvenience, to get the audio to stream as well.&lt;/p&gt;

&lt;p&gt;###Onetime setup steps###&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;Navigate to this page on your iPad.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Highlight and copy this text:&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;
&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;javascript:d&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;document,e&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;d.createElement&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;script&apos;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;e.src&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;http://bendodson.com/bookmarklets/ios-airplay.js?&apos;&lt;/span&gt;+&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;new%20Date&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;1&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;void&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;d.body.appendChild&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;e&lt;span class=&quot;o&quot;&gt;))&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;Create a bookmark in Safari.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Edit the bookmark, and paste in the code you copied.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Change the name of the bookmark to whatever makes sense to you.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;hr /&gt;

&lt;p&gt;###Bookmarklet Usage###&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;Visit vudu.com on your iPad. Find a movie you want to watch.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Start the movie.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Stream it to your AppleTV. You will only get audio.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Choose the bookmarklet from the bookmarks menu. This will probably show an error on the screen.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Start the movie again. It should stream just fine now.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If anyone knows a slicker way to do this, please let me know, but for now this works ok. This also works on other video sites that only stream the audio by default. I would recommend trying this out on Vudu previews.&lt;/p&gt;
</description>
        <pubDate>Sat, 05 Nov 2011 00:00:00 +0000</pubDate>
        <link>https://davidmoulton.me/apple/ios/ipad/appletv/2011/11/05/stream-vudu-ipad-to-appletv.html</link>
        <guid isPermaLink="true">https://davidmoulton.me/apple/ios/ipad/appletv/2011/11/05/stream-vudu-ipad-to-appletv.html</guid>
        
        
        <category>apple</category>
        
        <category>ios</category>
        
        <category>ipad</category>
        
        <category>appletv</category>
        
      </item>
    
  </channel>
</rss>
