Groundhog Day Resolutions - January 2019

Not much time has passed since making my big three resolutions for 2019, but I've made some small progress.

I spent most of first week getting organized. I created a new Beeminder goal for tracking my running and signed up for a half-marathon in October. It's hard to get motivated to run when it's cold and miserable outside, but having a firm run date has helped.

I also created the 2019 Groundhog Day resolutions hub to keep track of everything. It's still quite rough around the edges, but I'm trying to avoid being stuck waiting for everything to be perfect.

Primary goals for January

1. Run a total of 15 miles

I'm still getting back into the habit of running after the holidays. My monthly mileage will have to increase closer to October, but for now I'd just like to build a decent aerobic base.

2. Decide on my first game for #1GAM

Stretching things out over three months gives a lot more time for thinking, but I don't want to be cramming development into the last few weeks. By February 2nd I'd like to have an idea solidified, and possible a prototype or two.

3. Start planning my ebook

At the moment I have a rough outline, but I want to tidy it up and come up with a plan for actually getting it written. I also need to research publishing, promotion and a million other things.

Secondary goals for January

1. Finish the hub page

There's a few big pieces I want to get finished:

  1. Update the "half marathon" goal page to list my recent runs and my total mileage.
  2. Add some detail to the "ebook" goal page. It's too early to track words/chapters written, but I'd like to track that eventually.
  3. Add details for secondary goals. Not all of them need detailed tracking pages.

Groundhog Day Resolutions 2019

There are a lot of things I wanted to get done this year. I didn't do many of them.

It's not all doom and gloom. I released new versions of blitzmax-mode and beeminder.el, wrote some posts, built some mini-sites and had a pretty good year freelancing. But I still didn't check off as much as I wanted.

For 2019 I'll be trying Groundhog Day resolutions again. They worked pretty well in 2016, although I didn't make it through the entire year. Frequently reviewing my larger goals, and breaking them into smaller ones helped me get more done.

There are a couple of large goals I really want to get done for 2019:

  • Release four small games, one each quarter
  • Run a half marathon
  • Write a small ebook on software development

I have plenty of smaller goals I'd like to work on too. I'm still figuring out the best way to organize and track their progress on them, so that will be my goal for the start of the year.


Per-project indentation with php-mode

php-mode supports several different coding styles out of the box:

  • default
  • drupal
  • pear
  • symfony2
  • wordpress

Each coding style has its own settings for indentation. For example, the drupal style uses 2 spaces for indentation, whereas wordpress uses tabs.

By using dir-locals.el, Emacs can automatically set a coding style on a per-project basis. This is /extremely/ helpful when working on different projects that need to be formatted in a particular way.

Here’s an example of a dir-locals.el file that will enable the wordpress coding style for PHP files:

((php-mode . ((php-project-coding-style . wordpress))))

The coding style value doesn’t need to be quoted (otherwise you might see a (wrong-type-argument symbolp wordpress)) error on startup.

If flycheck and phpcs are installed, they can be configured to highlight coding style infractions:

((php-mode . ((php-project-coding-style . wordpress)
              (flycheck-phpcs-standard . "WordPress-VIP")
              (flycheck-checkers . (php-phpcs)))))

The above code will setup php-mode to use tabs, and will also highlight any code that doesn’t meet WordPress VIP standards.


Formatting PHP code with Emacs

I was recently asked if Emacs supports formatting PHP code. There are options for other languages, but nothing in the standard release for beautifying PHP.

php-beautifier.el is an extension I created that integrates PHP_Beautifier into Emacs. It can be used to format an entire buffer or a single region.

It also supports phpcbf for fixing coding standards issues.

php-beautifier.el in action

There are two main functions in the extension:

php-beautifier-format-buffer beautifies the entire buffer in one go:

Formatting an entire buffer

php-beautifier-format-region formats a region instead.

Note that PHP_Beautifer checks for a starting <?php tag, so it won't format a region that doesn't contain one.

Full setup and usage instructions are available on the php-beautifier.el project page.


Exploring my Emacs packages - skewer-mode

What is skewer-mode?

Project homepage : https://github.com/skeeto/skewer-mode

skewer-mode is a minor-mode that allows Emacs to send JavaScript, CSS and HTML to an active browser window. It can be used to update content without having the reload whatever page the browser is on.

Before skewer-mode can interact with a page, Emacs needs to start a server and some JavaScript needs to be loaded. The script can either be included in the page code or inserted using a bookmarklet.

What can I use it for?

skewer-mode can be used for the following tasks:

  • Running JavaScript on a page
  • Updating the CSS of a web page
  • Updating HTML of a web page

Running JavaScript on a page

The following keyboard shortcuts are provided for working with JavaScript.

  • C-x C-e – Evaluate the previous JS form and display the result in the minibuffer.
  • C-M-x – Evaluate the top-level form around the point and display the result in the minibuffer.
  • C-c C-k – Load the current buffer into the skewered window.

Here is some very simple JS evaluation in action:

Evaluating JavaScript with Skewer

Updating the CSS of a web page

Skewering CSS uses the same shortcuts as JavaScript:

  • C-x C-e – Load the current declaration into the window.
  • C-M-x – Load the entire rule surrounding the point.
  • C-c C-k – Load the current buffer as a stylesheet.

Styles are updated in the browser without reloading the page, making it very quick to test appearance changes.

In action:

Evaluating CSS with Skewer

Updating HTML of a web page

HTML only uses a single shortcut:

  • C-M-x – Load the HTML tag directly surrounding the point.

I tried this a couple of times but couldn't get it working on a live page.

More information

More information can be found on the project homepage: https://github.com/skeeto/skewer-mode


This post is part of the "Exploring my Emacs packages" series.