Chris Jean's Blog

Linux, WordPress, programming, anime, and other stuff.
twitter
rss

I had fun writing about how I work with Git yesterday. I thought I’d continue on that thread.

I have a solid set of code libraries that I’ve written that latch into the WordPress themes we produce at iThemes. Each time code is duplicated across different repositories, I break that code out and make it into a separate repository. I then link it back into the project as a submodule. This makes it extremely-easy to keep duplicated code across numerous repositories updated with little or no fuss.

After cloning a repository, simply run git submodule init followed by git submodule update in order to initialize all the submodules and update their container folder with the content of the submodule’s repository. For a long time, this is exactly what I did when I would clone a theme repository to start working on it. However, this quickly wasn’t enough.

The problem happened as soon as I added a submodule to a repository that was also a submodule of other repositories. Doing the submodule init and update process wouldn’t do everything I needed in this case as there would be submodules in some subfolder that haven’t been set up.

I didn’t want to get into a habit of always switching to other directories and doing the submodule processes there as well since I 1) knew that I would forget all-too-often, thus wasting my time, and 2) knew that this would not be the last time that a submodule had submodules. Heck, there is even the possibility that I’ll have a submodule that has a submodule that has a submodule. It was immediately clear that I needed a script to do all this dirty work for me. The rest of this post will be about the script I created.

Continue reading “Recursively Updating Git Submodules”

All of the WordPress themes that I work on for iThemes are managed as Git repositories. Recently, we moved past the 100 repositories mark. That’s a lot of repositories to manage, and unfortunately, too many of those repositories contain duplicated information.

Later on, I might delve into how we use Git to manage our theme repos. For today, however, I’d like to focus on how I quickly and easily pushed up changes to more than a dozen repos in a single, albeit long, Bash command.

I had finished making updates to 16 Flexx repos, and I needed to push all of those changes up. Since I had multiple working repos in that folder, I was lucky that each of these repos began with the text “Flexx”. Also, since they are all part of the same series and need to keep the same version number, that simplified the tagging as all could be tagged as 2.5.0.

Given this information, I simply ran the following command from the directory that contained all the repository directories:

for i in `ls|grep Flexx`; do echo “— Pushing $i”; cd $i; git commit -am ’2.5.0′ && git push && git tag 2.5.0 && git push –tags; cd ..; echo “— Finished $i”; done

There’s a lot going on here, so I’ll break it up and explain what I’m doing.

Continue reading “Updating Multiple Git Repositories Easily Using Bash for Loop”

In Linux, clicking the middle mouse button (or mouse wheel) pastes the most recently highlighted text from any application. This is useful; however, it has an extremely-annoying side-effect in Firefox. Whenever I middle-click outside of entry fields, I get an annoying pop-up that says: “The URL is not valid and cannot be loaded.” This frustrates me to no end. It usually happens when I accidentally nudge my mouse and miss middle-clicking a link in order to open it in a new tab.

So, why is it doing this? Turns out that, by default, Firefox for Linux allows you to use this middle-click to paste functionality to allow you to navigate to a highlighted URL simply by middle-clicking non-editable portions of the page. When an invalid URL is the result of the paste, the annoying popup appears.

Today, I found out how to get rid of this annoyance.

Open a new tab in Firefox and navigate to “about:config”. This will take you to an interface that allows you to tweak and configure very specific functionality of Firefox.

In the “Filter:” text box, enter “middlemouse.contentLoadURL”. This should present a single entry that lists the option as having a value of “true”. Simply double-click the listing to change the value to “false”. The effect is instantaneous.

Now when you middle-click outside of editable areas in Firefox, it will no longer try to navigate to a URL. This change only modifies the navigation to URL functionality; the middle-click to paste in editable areas still functions.

If you like the middle-click to scroll functionality found in other browsers/operating systems, then search for “general.autoScroll” and double-click the listing to change it to true. Now you can middle-click to initiate scrolling.

Updated for Firefox release 3.5.5

Firefox 3.5 was released yesterday. This is an exciting new release complete with features such as support for HTML 5, video and audio that works in the browser without the need for plugins, a much faster Javascript engine, a native JSON parser, private browsing mode, support for SVG transformations, and other great enhancements.

I’m sure that you’re just as excited to get started with Firefox 3.5 as I was yesterday when I heard the news. But wait! We’re on Ubuntu, we can’t just install whatever we want, we need to wait for a package. Right? Wrong.

Here’s a really quick way to get 3.5.5 running on your Ubuntu 9.04 system.

Continue reading “Upgrade to Firefox 3.5 on Ubuntu 9.04 – Jaunty Jackalope”

Hello again my faithful readers. Again, I am terribly sorry for the lack of posts recently. I’ve been extremely busy at work with some huge projects.

I work for iThemes doing back-end development for themes and “special projects”. Previously, I never wanted to talk about it much on my blog because we weren’t GPL, and that can cause a lot of commotion. I don’t have to worry about that anymore. As of today, iThemes is GPL.

This is a very exciting move for us. We’ve talked about it internally for a long time. I’m glad that we’ve finally made the change.

If you’d like to know more about the change, please check out the official announcement.

Now that I know how to do this, it seems so easy and straight-forward. To change the default application files of a specific type are opened with, do the following:

  1. Right-click a file that you wish to change the default application for and select Properties.
  2. Click the “Open With” tab.
  3. Select the desired application’s radio button.
    • Additional applications can be added if the one you want is not listed. Use the Add button to find the desired application.
    • You can also remove applications from the list by highlighting the application and clicking the Remove button.
    • Adding applications to or removing applications from this list changes which applications are available in the “Open With” option when you right-click a file.
  4. Click the Close button.

Again, it seems so easy and straight-forward now. Go figure. :)

I’ve spent a little more than a month working with Git now. I can honestly say that while there are many things that I like about Git, there are just as many things that I personally find to be a pain in the butt.

Submodules specifically have managed to be a thorn in my side on many occasions. While the concept of submodules is simple, figuring out how to actually work with them can be a chore. I say “figuring out” because not everything about working with submodules is well documented. I’ll cover two of the more difficult things to figure out: removing and updating submodules from your repository.

Continue reading “Git Submodules: Adding, Using, Removing, and Updating”

I recently worked on a project where I had to sort a set of rows returned from a MySQL query. The problem is that most of the data in the field being sorted is numeric yet the field type is varchar since some of the entries contained characters.

The reason that this is a problem is that MySQL sorts character fields using a method that will produce undesirable results with numeric data. For example, sorting 4, 10, and 50 as character data produces 10, 4, and 50. In most applications, this is highly undesirable.

The solution to this is to force a sorting order that is commonly referred to as a natural sort. Natural sort is just a term that refers to how humans would commonly sort a set of information (numbers as numbers and non-numeric characters alphabetically). Fortunately, this isn’t difficult to achieve in MySQL.

Continue reading “MySQL Natural Sort Order By on Non-Numeric Field Type”

It’s been a month since my last post. For all my regular readers, I’m very sorry for the absense.

There’s a lot of intersting stuff going on right now. Fortunately, with so much going on, I shouldn’t have a lack of topics to talk about.

To get the old post ball rolling again, how could I not start back up with Ubuntu 9.04?

Continue reading “Gaarai is Back and the Jackalope is Jaunty”

Linux has many great tools built in that help maintain the system without user intervention. One such tool is Cron.

On my Ubuntu 8.10 system, there are many things that are set to run each day: locate database updates, misc cleanup utilities, automatic package updates, log rotations, etc. All of these are managed by the Cron system.

For a while, I needed to manually run the updatedb command to update the locate database, and I never thought about why. The problem is that my daily, weekly, and monthly Cron jobs never run. The reason for this is that these Cron jobs are scheduled to run very early in the morning, when my system is off. Thus, these job schedules never run.

The solution for this is easy. I simply need to change the times these run at to times when my system is on.

Continue reading “Changing When Daily Cron Jobs Run in Ubuntu”