{"@attributes":{"version":"2.0"},"channel":{"title":"Tombuntu","link":"https:\/\/tombuntu.com\/","description":"Recent content on Tombuntu","language":"en-us","copyright":"2007-2025 Tombuntu","lastBuildDate":"Sun, 10 May 2020 23:15:39 -0700","item":[{"title":"Migrating Tombuntu from WordPress to Hugo","link":"https:\/\/tombuntu.com\/index.php\/2020\/05\/10\/migrating-tombuntu-from-wordpress-to-hugo\/","pubDate":"Sun, 10 May 2020 23:15:39 -0700","guid":"https:\/\/tombuntu.com\/index.php\/2020\/05\/10\/migrating-tombuntu-from-wordpress-to-hugo\/","description":"\n\n<p>Back in 2018, I silently upgraded this site to &ldquo;Tombuntu 3.&rdquo; To reduce\nhosting costs and maintenance, I migrated from <a href=\"https:\/\/wordpress.org\/\">WordPress<\/a> to <a href=\"https:\/\/gohugo.io\/\">Hugo<\/a>, a static\nsite generator. Here&rsquo;s a (belated) overview of the process.<\/p>\n\n<h2 id=\"exporting-posts\">Exporting posts<\/h2>\n\n<p>I had almost five hundred old posts that needed to be migrated from an exported\nWordPress XML file to Markdown files. There are off-the-shelf solutions for\nthis, but I knew there would be complications. I ended up doing the migration\nmyself, with a <a href=\"https:\/\/www.python.org\/\">Python<\/a> script.<\/p>\n\n<p>WordPress&rsquo;s XML file contains HTML, but lacking paragraph tags. I used <a href=\"https:\/\/greenash.net.au\/thoughts\/2010\/05\/an-autop-django-template-filter\/\">this\nimplementation of WordPress&rsquo;s autop function<\/a> to add them in.<\/p>\n\n<p>I wrote my old posts in WordPress&rsquo; visual editor. It produced HTML that looked\nfine at the time, but wasn&rsquo;t <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Glossary\/Semantics\">semantic<\/a>. For example, I often created headings\nwith a bold single-line paragraph. To fix these issues, I came up with simple\nheuristics to find them, and implemented regular expression substitutions to\nfix the HTML.<\/p>\n\n<p>Finally, I used <a href=\"http:\/\/pandoc.org\/\">Pandoc<\/a>, a document converter tool, to convert the\nHTML into Markdown files suitable for Hugo. These files also include important\nmetadata such as each post&rsquo;s original URL and RSS GUID from WordPress.<\/p>\n\n<h2 id=\"exporting-comments\">Exporting comments<\/h2>\n\n<p>Tombuntu no longer accepts comments. I preserved historical comments by\nappending them to the content of each post in a special &ldquo;archived comments&rdquo;\nsection. Feel free to send me your comments via email using the button at the\nend of each post.<\/p>\n\n<h2 id=\"deploying\">Deploying<\/h2>\n\n<p>I work on Tombuntu from a Git repository on my workstation. To deploy the site\nto its web server, I wrote an <a href=\"https:\/\/docs.ansible.com\/ansible\/latest\/user_guide\/playbooks_intro.html\">Ansible playbook<\/a> that uses the <a href=\"https:\/\/docs.ansible.com\/ansible\/latest\/modules\/synchronize_module.html\">synchronize\nmodule<\/a> to efficiently upload changes. I also use Ansible to configure the\nserver.<\/p>\n\n<h2 id=\"results\">Results<\/h2>\n\n<p>Tombuntu 3 runs with room to space on a cheap virtual server and has been easy\nto maintain so far. Hugo works well, although I had to work around <a href=\"https:\/\/github.com\/gohugoio\/hugo\/issues\/1642\">a bug<\/a> in\nits &ldquo;shortcodes&rdquo; feature. This month I also upgraded the server to Ubuntu 20.04\nand added HTTPS support using a free <a href=\"https:\/\/letsencrypt.org\/\">Let&rsquo;s Encrypt<\/a> certificate.<\/p>\n\n<p>I&rsquo;m still using Ubuntu at home and work every day. Maybe I&rsquo;ll find something to\nwrite about other than this site itself sometime!<\/p>\n"},{"title":"Upgrading Tombuntu in 2013","link":"https:\/\/tombuntu.com\/index.php\/2013\/12\/18\/upgrading-tombuntu-in-2013\/","pubDate":"Wed, 18 Dec 2013 23:23:24 +0000","guid":"http:\/\/tombuntu.com\/?p=2154","description":"<p>Last week Tombuntu&rsquo;s server received a much-needed upgrade to Ubuntu 12.04.\nTombuntu launched in 2007 hosted on my home server running Ubuntu. In 2008, I\nmoved it to a <a href=\"https:\/\/tombuntu.com\/index.php\/2008\/10\/27\/notes-from-setting-up-ubuntu-server-on-linode\/\">Linode VPS running Ubuntu\n8.04<\/a>.\nSupport for Ubuntu 8.04 ended back in April, so it was definitely time for an\nupgrade.<\/p>\n\n<p>Other than <a href=\"https:\/\/blog.linode.com\/2013\/04\/16\/security-incident-update\/\">some security\nissues<\/a>, I haven&rsquo;t\nhad any problems with Linode, so I re-provisioned by existing server with a new\nUbuntu 12.04 install. Here&rsquo;s a brief overview of the setup process I went\nthough:<\/p>\n\n<ol>\n<li>Linode&rsquo;s Ubuntu image requires some extra configuration that you would\nnormally do during an Ubuntu install. Follow <a href=\"https:\/\/library.linode.com\/getting-started\">Linode&rsquo;s\ndocumentation<\/a> to set the\nhostname, set the timezone, and create a user.<\/li>\n<li>Configure the SSH server to use a non-standard port (to reduce brute-force\nattempts), disable root login, and disable password authentication.<\/li>\n<li>Create a directory for document roots. I&rsquo;m the only person who needs to log\ninto the server, so I just create directories like <code>\/srv\/www\/tombuntu.com<\/code>\nfor each domain that are owned by my user.<\/li>\n<li>Install Nginx and add configuration for each domain in\n<code>\/etc\/nginx\/sites-available<\/code>.<\/li>\n<li>Install <code>php5-fpm<\/code>.<\/li>\n<li>Install MySQL, run <code>mysql_secure_installation<\/code>, and create users and\ndatabases for each application.<\/li>\n<li><a href=\"https:\/\/tombuntu.com\/index.php\/2009\/12\/22\/send-outgoing-email-with-postfix\/\">Install Postfix with no relay\nhost<\/a> so the server\ncan send notifications.<\/li>\n<li>Write a cron job on my home desktop to create database dumps and back\neverything up using rdiff-backup.<\/li>\n<\/ol>\n\n<p>The software stack has only changed slightly: <a href=\"http:\/\/nginx.org\/\">Nginx<\/a> has\nreplaced the Apache web server. I used to have problems with the number of\nApache processes and their memory usage inflating and running the server out of\nmemory. Nginx uses a event-driven architecture so one process\/thread can handle\nmultiple connections asynchronously, whereas Apache (in the most common\nconfiguration) requires one process for each connection. This makes Nginx more\nscalable and keeps memory usage consistent.<\/p>\n\n<p>My favorite way to backup <a href=\"https:\/\/tombuntu.com\/index.php\/2009\/08\/22\/powerful-remote-incremental-backup-with-rdiff-backup\/\">is still\nrdiff-backup<\/a>,\nbecause it allows remote, incremental backups, and restoring from the most\nrecent backup only requires copying files. My desktop at home initiates the\nserver backup through cron. This has the advantage that the server does not have\ndirect access to its backups (my desktop can reach the server via SSH, but not\nthe other way around).<\/p>\n\n<p>Tombuntu is powered by WordPress. Between upgrading to the latest version and\nhaving to run SQL queries to delete massive amounts of spam, WordPress is pretty\nhigh-maintenance. It&rsquo;s also really slow without caching pages on the server. For\nwhatever reason, WordPress doesn&rsquo;t include a built-in page cache, but there are\nnumerous plugins providing this. Unfortunately, many of the popular plugins are\nnow buggy, poorly maintained, and\/or are trying to upsell you to a premium\nversion. Currently I&rsquo;ve settled on <a href=\"http:\/\/wordpress.org\/plugins\/hyper-cache\/\">Hyper\nCache<\/a>.<\/p>\n\n<p>Finally, I did some optimization on the site itself to improve load time. The\nFeedBurner widgets were slow and didn&rsquo;t seem to work any more, so I removed\nthem. I used Google&rsquo;s excellent <a href=\"http:\/\/developers.google.com\/speed\/pagespeed\/insights\/\">PageSpeed\nInsights<\/a> tool to get\nsome additional suggestions for speeding things up.<\/p>\n\n\n"},{"title":"Setting up Ubuntu on an SSD","link":"https:\/\/tombuntu.com\/index.php\/2012\/04\/26\/setting-up-ubuntu-on-an-ssd\/","pubDate":"Thu, 26 Apr 2012 22:44:01 +0000","guid":"http:\/\/tombuntu.com\/?p=2143","description":"\n\n<p>I recently purchased a new solid state drive (SSD) to replace my current hard\ndrive (HDD). Since SSDs work so much differently than HDDs, it&rsquo;s worth while to\nmake some optimizations in Ubuntu for them. SSDs are much faster than HDDs, but\nhave a limited number of writes before they wear out. This makes balancing\nperformance with the life of your SSD also a big concern for how you tune your\nsystem.<\/p>\n\n<p>I&rsquo;ve <a href=\"https:\/\/tombuntu.com\/index.php\/2008\/09\/04\/four-tweaks-for-using-linux-with-solid-state-drives\/\">written a post on this topic\nbefore<\/a>\nfor the older SSD in my netbook.<\/p>\n\n<h2 id=\"partitioning-and-bind-mounts\">Partitioning and bind mounts<\/h2>\n\n<p>I partitioned my 60 GB SSD into a 10 GB <code>\/<\/code> partition, and a 50 GB <code>\/home<\/code>\npartition, both using the default ext4 filesystem. I kept my old HDD home\npartition mounted at <code>\/media\/oldhome<\/code>.<\/p>\n\n<p>I wanted to put some of my large and infrequently accessed files, like virtual\nmachines and videos, on the more spacious HDD. I also wanted to make accessing\nthese files from my home directory seamless. One way to do this would be to\nsymlink folders from the SSD to the HDD. However, I found that this wouldn&rsquo;t be\nfully seamless for some applications that don&rsquo;t follow symlinks.<\/p>\n\n<p>Bind mounts are a better solution. They allow a directory in a filesystem to be\nmounted in additional locations, similarly to symlinks but fully transparent to\napplications. To test bind mounting my videos directory, I ran mount with the\nbind option, and specified the source directory (on the HDD), and the mount\npoint (which must already exist):<\/p>\n\n<pre><code>mount --bind \/media\/oldhome\/tom\/Videos \/home\/tom\/Videos\n<\/code><\/pre>\n\n<p>To make my bind mounts permanent, I added them to my <code>\/etc\/fstab<\/code> file in this\nformat:<\/p>\n\n<pre><code>\/media\/oldhome\/tom\/Videos \/home\/tom\/Videos none bind 0 0\n<\/code><\/pre>\n\n<p>If you need to add a path with a space in it, replace the space with <code>\\040<\/code> to\nescape it. If you make a mistake and one of the bind mounts fails, Ubuntu will\nallow you to skip it and continue booting. So far the bind mount approach seems\nto work perfectly.<\/p>\n\n<h2 id=\"mount-options-for-ssds\">Mount options for SSDs<\/h2>\n\n<p>Any recent SSD should have the <a href=\"http:\/\/en.wikipedia.org\/wiki\/TRIM\">TRIM<\/a> command\navailable, which prevents performance degradation by allowing the OS to notify\nthe SSD of which blocks are unused. The ext4 filesystem uses TRIM when the\n<code>discard<\/code> option is set.<\/p>\n\n<p>The <code>noatime<\/code> option reduces writes to the SSD by not writing access time\nupdates whenever a file is read. This improves performance and increases the\nlife of the SSD.<\/p>\n\n<p>I set these two mount options though <code>\/etc\/fstab<\/code> for both my SSD partitions by\nadding <code>discard<\/code> and <code>noatime<\/code> to the list of options for <code>\/<\/code> and <code>\/home<\/code> like\nthis:<\/p>\n\n<pre><code>UUID=193af662-d7a0-47fb-b3f7-141ae3d19227 \/ ext4 errors=remount-ro,noatime,discard 0 1\n<\/code><\/pre>\n\n<h2 id=\"disk-head-scheduler-for-ssds\">Disk head scheduler for SSDs<\/h2>\n\n<p>A disk scheduler optimizes the order of disk requests by considering the\nposition of the hard drive&rsquo;s read\/write head. An SSD needs no such optimization,\nso it&rsquo;s best to use the noop (no-operation) scheduler.<\/p>\n\n<p>I switched to the noop scheduler for my SSD by adding the to following line to\n<code>\/etc\/rc.local<\/code> (replace <code>sdb<\/code> with your own SSD&rsquo;s device node name):<\/p>\n\n<pre><code>echo noop &gt; \/sys\/block\/sdb\/queue\/scheduler\n<\/code><\/pre>\n\n<h2 id=\"swap-and-swappiness\">Swap and swappiness<\/h2>\n\n<p>I kept my swap partition on the old HDD. Swap on the SSD would be faster, but\nwould also shorten the SSD&rsquo;s life.<\/p>\n\n<p>My system has plenty of memory, so I also reduced <a href=\"https:\/\/help.ubuntu.com\/community\/SwapFaq#What_is_swappiness_and_how_do_I_change_it.3F\">the swappiness\nvalue<\/a>\nto 0 to tell Ubuntu to only swap when absolutely necessary. I did this by adding\nthe line <code>vm.swappiness=0<\/code> to <code>\/etc\/sysctl.conf<\/code>.<\/p>\n\n<h2 id=\"even-more\">Even more<\/h2>\n\n<p>There are many more ways to tune Ubuntu for SSDs. A few things I haven&rsquo;t done\nare: partition alignment (Ubuntu&rsquo;s partitioner now seems to take care of this\nautomatically), disabling journalling (I&rsquo;d prefer reliability over slightly\nreduced SSD life), and mounting <code>\/tmp<\/code> or browser cache in memory (I&rsquo;d prefer to\nsave the memory). The Arch Linux Wiki has a <a href=\"https:\/\/wiki.archlinux.org\/index.php\/Solid_State_Drives\">comprehensive page on\nSSDs<\/a>, and here&rsquo;s\n<a href=\"http:\/\/cptl.org\/wp\/index.php\/2010\/03\/30\/tuning-solid-state-drives-in-linux\/\">another\narticle<\/a>\nthat goes more in-depth in some of the things I mentioned here.<\/p>\n\n\n"},{"title":"GNOME 3.2 and GNOME Shell Extensions","link":"https:\/\/tombuntu.com\/index.php\/2011\/12\/05\/gnome-3-2-and-gnome-shell-extensions\/","pubDate":"Tue, 06 Dec 2011 03:14:32 +0000","guid":"http:\/\/tombuntu.com\/?p=2132","description":"<p>GNOME has launched an alpha of the <a href=\"https:\/\/extensions.gnome.org\/\">GNOME Shell Extensions\nwebsite<\/a>. Like Firefox, GNOME Shell allows\nextensions to modify and extend the user interface. The site allows you to\nbrowse and install extensions written by third parties, but reviewed by GNOME\nbefore being made available. There are already many extensions to bring back\nelements of GNOME 2.<\/p>\n\n<p>To try GNOME Shell Extensions, you&rsquo;ll need to be running GNOME 3.2. Ubuntu 11.10\nonly has GNOME 3.0, but <a href=\"https:\/\/launchpad.net\/~gnome3-team\/+archive\/gnome3\">the GNOME3 Team\nPPA<\/a> provides packages to\nupdate it. I added this PPA on my netbook to update<a href=\"https:\/\/tombuntu.com\/index.php\/2011\/10\/03\/install-gnome-shell-in-ubuntu-11-10\/\">my existing GNOME Shell\ninstallation<\/a> in\nUbuntu 11.10.<\/p>\n\n<p>Extensions are installed using a plugin, included with GNOME, that currently\nonly works with Firefox. When it&rsquo;s working, an extension&rsquo;s page has a large\nswitch to enable and disable the extension. Flip the switch, select <code>Install<\/code> in\nthe confirmation dialog, and the extension almost immediately activates.\nDisabling an extension is just as easy. Here&rsquo;s the <a href=\"https:\/\/extensions.gnome.org\/extension\/6\/applications-menu\/\">Applications\nMenu<\/a> extension in\naction:<\/p>\n\n<p><img src=\"https:\/\/tombuntu.com\/uploads\/2011\/12\/gnome_shell_extensions.jpg\" alt=\"GNOME Shell Applications Menu\nextension\" \/><\/p>\n\n<p>I&rsquo;d like to see an extension that maximizes screen space on my netbook by hiding\nthe title bar of maximized windows like Unity does.<\/p>\n\n<p>Could GNOME Shell extensions become a killer feature for GNOME 3?<\/p>\n\n\n"},{"title":"Even More Graphical Git Clients","link":"https:\/\/tombuntu.com\/index.php\/2011\/12\/02\/even-more-graphical-git-clients\/","pubDate":"Sat, 03 Dec 2011 01:21:06 +0000","guid":"http:\/\/tombuntu.com\/?p=2122","description":"<p>Since my last post about finding a <a href=\"https:\/\/tombuntu.com\/index.php\/2011\/11\/26\/graphical-git-clients-for-ubuntu\/\">graphical Git client for\nUbuntu<\/a>, I&rsquo;ve been\nusing the excellent <a href=\"http:\/\/trac.novowork.com\/gitg\/\">gitg<\/a>. But here&rsquo;s four more\nthat I&rsquo;ve come across since then, most recommended by comments on the previous\npost:<\/p>\n\n<ul>\n<li><a href=\"http:\/\/sourceforge.net\/projects\/qgit\/\">qgit<\/a>, as the name suggests, uses\nthe QT GUI toolkit. qgit is a gitk-style interface for viewing revisions.\nBefore you can see uncommitted changes, you&rsquo;ll have to open\n<code>Edit-&gt;Settings-&gt;Working dir-&gt;Diff against working dir<\/code>. There is committing\nsupport, but with a very basic interface. In the <code>Actions<\/code> menu, you can\ndefine custom actions to run other git commands and see their output.<\/li>\n<li><a href=\"http:\/\/www.syntevo.com\/smartgit\/index.html\">SmartGIT<\/a> is a very advanced\nGit interface that is closed source but free for non-commercial use. I\nwanted to try this out, but it refuses to run without the Sun\/Oracle Java\nruntime. I didn&rsquo;t feel like disturbing my OpenJDK installation, and in\nUbuntu 11.10 Sun\/Oracle Java is no longer supported at all. From the\nscreenshots though, it looks very comprehensive.<\/li>\n<li><a href=\"http:\/\/www.geany.org\/\">Geany<\/a> is a simple IDE similar to Gedit. The\n<code>geany-plugins<\/code> package in Ubuntu provides GeanyVC, a basic version control\nplugin for Geany supporting six different VCSs. Once the plugin is enabled,\nthe <code>Tools-&gt;VC<\/code> menu provides simple actions for the current file,\ndirectory, and base directory of the repository. The interface is very\nminimal; viewing any information like the log will open a new document\ncontaining raw output from git.<\/li>\n<li><a href=\"http:\/\/www.rabbitvcs.org\/\">RabbitVCS<\/a> provides a set of tools for working\nwith both Git and Subversion. Nautilus file browser and Gedit integration\nare provided, as well as dialogs for Git actions. I haven&rsquo;t tested RabbitVCS\nyet, and the version in the Ubuntu repositories doesn&rsquo;t support Git.\nHowever, <a href=\"http:\/\/wiki.rabbitvcs.org\/wiki\/install\/ubuntu\">instructions and a\nPPA<\/a> are available for\ninstalling the latest version.<\/li>\n<\/ul>\n\n\n"},{"title":"Shutter 0.88 Screenshot Tool Released","link":"https:\/\/tombuntu.com\/index.php\/2011\/11\/28\/shutter-0-88-screenshot-tool-released\/","pubDate":"Tue, 29 Nov 2011 02:15:04 +0000","guid":"http:\/\/tombuntu.com\/?p=2115","description":"<p>The <a href=\"http:\/\/shutter-project.org\/\">screenshot tool Shutter<\/a> has been updated to\n<a href=\"http:\/\/shutter-project.org\/2011\/11\/shutter-0-88-released\/\">version 0.88<\/a>,\nadding upload support for many more services, including Dropbox. Shutter offers\nadvanced screen capture modes, a built in image editor, image editing plugins,\nand the new upload plugins.<\/p>\n\n<p>The new upload plugins seem to be very well implemented. To upload to Dropbox\nfor the first time, all I needed to be was click a button in my browser to\nauthorize Shutter&rsquo;s access to my Dropbox account.<\/p>\n\n<p><img src=\"https:\/\/tombuntu.com\/uploads\/2011\/11\/shutter088.jpg\" alt=\"Shutter 0.88\" \/><\/p>\n\n<p>I&rsquo;ve had Shutter installed for a while, but I haven&rsquo;t been using it much.\nHowever, after taking another look I seem to have solved all my problems with\nit:<\/p>\n\n<ul>\n<li>It&rsquo;s not obvious how to resize an image, but it can be done with Shutter.\nRight click on an image, select <code>Run a Plugin<\/code>, select <code>Resize<\/code>, and click\n<code>Run<\/code>.<\/li>\n<li>By default Shutter likes to run in the background rather than quitting. Stop\nthis by opening <code>Edit-&gt;Preferences-&gt;Behavior<\/code> and uncheck <code>Minimize to tray\nwhen closing main window<\/code>.<\/li>\n<li>By default Shutter will save every image you capture. To stop it from\nlittering your home directory with files you don&rsquo;t want, open\n<code>Edit-&gt;Preferences-&gt;Main<\/code> and select <code>Do not save file automatically<\/code>.<\/li>\n<\/ul>\n\n<p>Ubuntu 11.10 and 11.04 both have an older version of Shutter in their\nrepositories. To get version 0.88 with the new upload plugins, you&rsquo;ll need to\nfollow the directions to add <a href=\"http:\/\/shutter-project.org\/faq-help\/ppa-installation-guide\/\">the official Shutter\nPPA<\/a>.<\/p>\n\n\n"},{"title":"Graphical Git Clients for Ubuntu","link":"https:\/\/tombuntu.com\/index.php\/2011\/11\/26\/graphical-git-clients-for-ubuntu\/","pubDate":"Sun, 27 Nov 2011 05:31:06 +0000","guid":"http:\/\/tombuntu.com\/?p=2101","description":"<p>Command line <a href=\"http:\/\/git-scm.com\/\">Git<\/a> can pale in comparison to fancy web\ninterfaces like <a href=\"http:\/\/github.com\/\">GitHub<\/a> and\n<a href=\"http:\/\/bitbucket.org\/\">Bitbucket<\/a>. Using these sites lead me to look at some of\nthe graphical Git clients available in Ubuntu. I&rsquo;m far from a Git expert, and I\nhaven&rsquo;t spend much time playing with these yet, but here&rsquo;s what I found:<\/p>\n\n<p><img src=\"https:\/\/tombuntu.com\/uploads\/2011\/11\/gitg.jpg\" alt=\"gitg browsing a repository\" \/><\/p>\n\n<ul>\n<li>git gui is one of the two official graphical tools available for git. It\nlets you create commits by staging changes and writing a commit message.\nThere are many more features for remote repositories and branches. The major\ndownside is that the UI and fonts look awful. (Ubuntu package <code>git-gui<\/code>)<\/li>\n<li>gitk, the other official tool, allows viewing a repository through the\ncommit log. Selecting a commit shows its details, including diffs for all or\na selected file. gitk has the same awful UI as git gui. (Ubuntu package\n<code>gitk<\/code>)<\/li>\n<li><a href=\"https:\/\/live.gnome.org\/giggle\">Giggle<\/a> has a browse view for viewing the\nrepository tree and selecting files to see what commits affected each file\nand how. The history view is similar to gitk, but with a nice graph view\ncolumn showing branching and merging. (Ubuntu package <code>giggle<\/code>)<\/li>\n<li><a href=\"http:\/\/git-cola.github.com\/screenshots.html\">Git Cola<\/a> is a tool similar to\ngit gui for committing and pushing changes. There are buttons for common\nactions like staging files, pulling, and pushing, as well as an area to\nwrite new commit messages. (Ubuntu package <code>git-cola<\/code>)<\/li>\n<li><a href=\"https:\/\/wiki.gnome.org\/Apps\/Gitg\/\">gitg<\/a> can both view repositories and\nmake new commits. Its history tab is similar to both gitk and Giggle, but\nalso has graphs showing the amount of changes made to files and a tree view\nsimilar to Giggle&rsquo;s. The commit tab is similar to git gui, but doesn&rsquo;t have\nas many advanced features for branches or remote repositories. (Ubuntu\npackage <code>gitg<\/code>)<\/li>\n<\/ul>\n\n<p>gitg is the most promising tool for my purposes. It combines both gitk and git\ngui-style interfaces in one program. I wish it it had an easy way to push to a\nremote repository - and there&rsquo;s only a fetch button that&rsquo;s tucked away in the\n<code>File-&gt;Repository Properties<\/code> dialog. [<strong>Update<\/strong> It&rsquo;s possible to push after\nall: right clicking on a branch label in the commit log will show more actions.\nThe branch labels can also be drag-and-dropped on each other.]<\/p>\n\n\n"},{"title":"Watch YouTube Videos Using VLC","link":"https:\/\/tombuntu.com\/index.php\/2011\/11\/20\/watch-youtube-videos-using-vlc\/","pubDate":"Mon, 21 Nov 2011 01:54:47 +0000","guid":"http:\/\/tombuntu.com\/?p=2093","description":"<p>My Eee PC 901 is more than powerful enough to play back 480p video, but not when\nit&rsquo;s playing though Adobe Flash Player. 408p YouTube videos drop frames and\ndon&rsquo;t play back at full framerate. YouTube has an <a href=\"http:\/\/www.youtube.com\/html5\">experimental HTML5 video\nplayer<\/a> that should offer better better\nperformance than Flash. I enabled it, but it seems that very few videos support\nit because advertising will cause a fallback to Flash.<\/p>\n\n<p><a href=\"http:\/\/www.videolan.org\/vlc\/\">VLC media player<\/a> supports network streaming from\na YouTube. Select <code>Media-&gt;Open Network Stream<\/code>, paste a YouTube URL, and click\n<code>Play<\/code>. This seems to work for any YouTube video, and plays back noticeably\nsmoother than Flash on my netbook.<\/p>\n\n<p><img src=\"https:\/\/tombuntu.com\/uploads\/2011\/11\/vlc_youtube.jpg\" alt=\"YouTube video in VLC\" \/><\/p>\n\n<p>VLC isn&rsquo;t a perfect solution. First, there&rsquo;s the inconvenience of copying and\npasting a URL for each video. Second, there doesn&rsquo;t seem to be a way to change\nthe resolution (but it defaults to 480p, which happens to be what I want).\nThird, VLC doesn&rsquo;t seem to handle buffering as well as Flash does. While YouTube\ncan play continuously, VLC sometimes has to stop and buffer more video.\nSelecting <code>Show more options<\/code> and increasing the cache size to something like\n20000 ms seems to help a bit.<\/p>\n\n<p>I&rsquo;ve been using Ubuntu 11.10&rsquo;s VLC for this. While Ubuntu 11.04&rsquo;s VLC seems to\nsupport YouTube, I&rsquo;ve only been getting <code>VLC can't recognize the input's format<\/code>\nerrors with this version.<\/p>\n\n\n"},{"title":"LaTeX Editor Gummi 0.6.0 Released","link":"https:\/\/tombuntu.com\/index.php\/2011\/11\/18\/latex-editor-gummi-0-6-0-released\/","pubDate":"Sat, 19 Nov 2011 01:23:42 +0000","guid":"http:\/\/tombuntu.com\/?p=2086","description":"<p>I&rsquo;ve been doing lots of document editing with\n<a href=\"http:\/\/www.latex-project.org\/\">LaTeX<\/a> lately, so I was happy to see that a new\nversion of <a href=\"https:\/\/tombuntu.com\/index.php\/2011\/09\/18\/simple-latex-editing-with-gummi\/\">my favorite LaTeX\neditor<\/a> has been\nreleased. <a href=\"http:\/\/gummi.midnightcoding.org\/?p=381\">Gummi 0.6.0<\/a> adds many\nrequested features. I&rsquo;ve been looking forward most to continuous scrolling in\nthe preview pane, but there&rsquo;s now also tabbed editing, project support, and more\ncompilation options.<\/p>\n\n<p><img src=\"https:\/\/tombuntu.com\/uploads\/2011\/11\/gummi060.jpg\" alt=\"Gummi 0.6.0\" \/><\/p>\n\n<p>It would be nice if the spell checker would skip LaTeX commands. It looks like\n<a href=\"http:\/\/dev.midnightcoding.org\/redmine\/issues\/142\">this issue is being worked\non<\/a>, but is waiting for a\npatch in the underlying spell-check library. I&rsquo;ve also noticed that if you&rsquo;re\nselecting text while the preview refreshes, the selection gets stuck <a href=\"http:\/\/dev.midnightcoding.org\/redmine\/issues\/308\">(bug\nreport)<\/a>.<\/p>\n\n<p>Ubuntu packages for Gummi are available from <a href=\"https:\/\/launchpad.net\/~gummi\/+archive\/gummi\">the Gummi\nPPA<\/a>.<\/p>\n\n\n"},{"title":"Automatic Indentation Detection in gedit","link":"https:\/\/tombuntu.com\/index.php\/2011\/11\/14\/automatic-indentation-detection-in-gedit\/","pubDate":"Tue, 15 Nov 2011 01:40:42 +0000","guid":"http:\/\/tombuntu.com\/?p=2080","description":"<p>Whether you prefer indenting code with tabs or spaces, the last thing you want\nto do is mix both styles in one file. The gedit text editor lets you specify\nwhat to insert when you press tab, but if you&rsquo;re jumping between files in\ndifferent languages or written by different people, you must remember to check\nthe settings each time you open a file.<\/p>\n\n<p><a href=\"http:\/\/code.google.com\/p\/gedit-autotab\/\">gedit-autotab<\/a> is a plugin for gedit\nthat solves this problem by automatically changing the indentation settings to\nmatch the style detected in each file. The plugin works with gedit 2 (Ubuntu\n11.04), and there&rsquo;s <a href=\"http:\/\/git.slashdev.ca\/gedit-autotab\/?h=gedit3\">a forked\nversion<\/a> available for gedit 3\n(Ubuntu 11.10).<\/p>\n\n<p>For gedit 2 \/ Ubuntu 11.04: Download <a href=\"http:\/\/code.google.com\/p\/gedit-autotab\/downloads\/detail?name=autotab-0.7.tar.gz&amp;can=2&amp;q=\">this archive\nfile<\/a>\nand open it. Put the <code>autotab.py<\/code> and <code>autotab.gedit-plugin<\/code> files in\n<code>~\/.gnome2\/gedit\/plugins<\/code> (create the <code>plugins<\/code> folder if it doesn&rsquo;t exist).<\/p>\n\n<p>For gedit 3 \/ Ubuntu 11.10: Download <a href=\"http:\/\/git.slashdev.ca\/gedit-autotab\/commit\/?h=gedit3\">the archive file from this\npage<\/a> and open it. Put\nthe <code>autotab.py<\/code> and <code>autotab.plugin<\/code> files in <code>~\/.local\/share\/gedit\/plugins<\/code>\n(create the <code>gedit\/plugins<\/code> folder if it doesn&rsquo;t exist).<\/p>\n\n<p><img src=\"https:\/\/tombuntu.com\/uploads\/2011\/11\/gedit-autotab.jpg\" alt=\"gedit-autotab\" \/><\/p>\n\n<p>Finally, open <code>Edit-&gt;Preferences-&gt;Plugins<\/code>, and select <code>Auto Tab<\/code> to activate\nthe plugin. You will get a new item on the status bar showing the current\nindentation style, which will change depending on the files you open.<\/p>\n\n\n"}]}}