Pew Pew Laser Blog

Code. Glass art. Games. Baking. Cats. From Seattle, Washington and various sundry satellite locations.

JSConf US 2015 Notes.


I was invited to JSConf US last May to assist with the "JS IRL" Nodebots event. (Workshop assisting is a great way to get to a conference: I built a little Nodebot, got the keep the hardware kit, helped others learn about JavaScript-based hardware, and I didn't even have to write a speech!) I also got to see some of the talks, and I wanted to share my notes from a few of my favorite talks:

Beyond Responsive: Building a mobile web you're f*ing proud of - Kate Hudson

Making Relational Cool Again (or: JavaScript on ACID) - Tim Griesser

This talk was super useful for me. Someday, I intend to refactor my blog's backend from PHP to Node, but I sure as heck don't want to change the database that holds all the content.

(math == art && art == code) - John Brown

I always love John's talks; I find them super inspiring. Confession: I never finish my "homework".

Knitting for JavaScripters - Mariko Kosaka

Mariko's image processing parts were the most interesting to me; it's related to screen printing on glass that I took last year.

Cold War - Simon Swain

When Simon finished his talk, he walked right by our table and everyone just watched him with jaws agape. It was absolutely mind-blowing. There doesn't seem to be a video of Cold War from JSConf, but there are videos of other versions from both TXJS and EngineersSG.

Steve Kinney: Building a musical instrument with the Web Audio API

Maintaining a Local Dev Meetup - Jacob Roufa

If you wish to learn ES6/2015 from scratch, you must first invent the universe - Ashley Williams

30 Minutes or Less: The Magic of Automated Accessibility Testing - Marcy Sutton

You can watch all of talks - there were so many that I either missed or didn't have time to write useful notes for. I hope to get to all the videos someday!

How Long Does it Take to Prepare a Talk?


I never write a talk before it's been accepted somewhere. While I do keep notes on articles or demos that might come in handy, it just doesn't make sense to invest all the time in writing the slides before I know it's going to be useful.

Talk preparation usually takes all the time that I can give it. This means the majority of my bus rides, lunches, evenings and even some whole days from the weekends. Preparation involves researching the topic; creating and browser-testing demos; writing blogs; sourcing, creating and re-sizing images; writing, practicing and updating the slides. It can be a significant burden; especially for a new talk and when I've only got a month or two of notice for the conf.

I can make a pretty good estimate about how long it took me to prepare my most recent talk. This talk was completely new, and there were 7 different demos that survived the final cut. Since I've done a few talks in the past, I didn't have to spend any time researching a slide framework or figuring out how to use it.

It was seven and a half weeks from when I got the acceptance notice for this talk to the day of the conference. On about 40% of those days, I already had something else planned - such teaching my first GDI Seattle class. I also have a full time job. Finally, I spent 4 days traveling and attending the conference. With the remaining days, I worked on my talk as much as possible. I absolutely would have used more time to work on my talk, if I'd had it. All in all, I spent around 160 hours preparing my talk.

Makerhaus Laser Cutter Notes.


For about a year, I was a member of MakerHaus, a maker space which was reasonably convenient for me. Alas, they closed last year, shortly atfer I had taken the class to become certified to use their laser cutter. Since I am eagerly awaiting my Glowforge laser cutter, I thought I'd share my notes from that class. Note that while the general concepts should apply to the Glowforge, these notes were originally for a unknown laser cutter: shown in this video.

The depth of the laser's cut is a result of the combination of power, speed and material. Run a test grid of speed and power combinations to calibrate materials.


Maximum size is defined by cutter; 46" x 34" in this case.

Acceptable materials (and their max thickness)




Laser Cutter Operation



LaserCut 5.3:

Sublime Text Preferences.


Getting the perfect configuration set up is part of what makes Sublime Text a dream. Here are some of the most useful configuration changes (from Sublime's defaults) that I've found. You can set these by editing the preferences file at Preferences > Settings - User.

"afn_insert_dimensions": "false"
With the AutoFileName package, don't automatically insert image dimensions.
"bold_folder_labels": true
In sidebar, show all folders with bold font.
"caret_style": "phase"
A smoother cursor blink transition.
"close_windows_when_empty": false
Don't close Sublime Text when there are no open files.
"copy_with_empty_selection": false
Don't copy if nothing is selected.
"ensure_newline_at_eof_on_save": true
Be sure all saved files end in an empty line.
"fallback_encoding": "UTF-8"
Use this encoding when it can't be determined automatically.
"file_exclude_patterns": [".bak", ".DS_Store", "Thumbs.db"]
Don't show these files in the sidebar or GoToAnything.
"find_selected_text": true
"Find" field is pre-seeded with highlighted text in document. Keeping this in user preferences ensures it works on OSX.
"folder_exclude_patterns": [".git", ".sass-cache", "tmp"]
Don't show these folders in sidebar or GoToAnything.
"font_options": ["subpixel_antialias"]
Prettier text.
"highlight_line": true
Use a lighter background color for line where cursor is.
"highlight_modified_tabs": true
Use special color for tabs with unsaved changes.
"line_padding_bottom": 1
Add just a little white space below lines.
"line_padding_top": 1
Add just a little white space above lines.
"open_files_in_new_window": false
Whether OSX opens dragged-in files in a new Sublime window.
"show_full_path": true
Whether title bar shows entire file path instead of just name. Keeping this in user prefs ensures it works on OSX.
"tab_size": 2
How many spaces is a tab equal to?
"translate_tabs_to_spaces": true
Use spaces instead of tabs.
"trim_automatic_white_space": true
Removes any auto-indented whitespace when on new lines.
"trim_trailing_white_space_on_save": true
When a file is saved, delete any whitespace at the end of a line.
"wide_caret": true
Have a wider cursor marker for better visibility.
"word_separators": "./\\()\"':,.;<>~!@#$%^&*|+=[]{}~?"
Make it so that dashes et cetera are considered part of a word; and thus don't break a selection with a class name, for example.
"word_wrap": "false"
Set word wrap to by default for all file types / syntaxes. Can still enable / disable word wrap via View menu. I don't know why this "false" has to be a string, but it does.



(I'm a few days late in marking this anniversary. What can I say - I've been busy. Heck, I've had a full plate for a year now, which is the point of this blog.)

One year ago, I gave my first conference talk at SassConf 2014. My 10 minute lightning talk "Color In The Real World" was about how we perceive color, how artists use tricks with color for realistic effects in paintings, and Sass color functions can replicate those tricks.

A little over a month later, I gave a 45 minute talk "From 0 to Nodebots" at the inaugural Nodevember 2014. Though I had been submitting talks to conferences for more than a year, this was my accepted talk. This was an expanded version of the talk I had given at my local JavaScript meetup a few months previous.

In March of this year, I presented "Colour in the Real World" at CSS Conf AU in Melbourne, Austrailia. This talk was an expanded version of my SassConf talk, and is another talk that was accepted via CFP.

In May, I was invited to JS Conf US in Florida to help with the NodeBots event. This invitation was a result of the video from my Nodevember talk. Having a public video of their talk is a great artifact for a speaker, and for your community.

In July, it was finally time for Cascadia Fest. Way back in January, I'd been invited to join the core organizing team and curate Browser JavaScript day. So since then, I'd been brainstorming party and workshop ideas, reading proposals and selecting talks, and writing tons of emails and Slack messages. After having attended 2 previous CascadiaJS conferences, I got involved by starring the CJS Github repo and volunteering to help with a smaller part of the conference.

And a week and a half ago, I closed out an amazing year by presenting "Developing for Localization" (a completely new talk) at CSS Conf EU 2015. I was particularly delighted to have my CFP accepted here because CSS Conf EU is so prestigious and competitive. I finally had the opportunity to attend JS Conf EU too!

Looking back at this past year, I feel so thankful to have had such great opportunities and be a part of all of these events. I've promised myself that I could tone down the events next year, and I really am savoring the idea of some quiet time. I'll finally able to work on some long neglected "for fun" projects, and maybe just relax a little bit.

The Firefox Command Line.


I'm old friends with the command line. Sometimes it's a hassle to remember exactly what to type, but sometimes a command line really is the right tool for the job at hand. And it turns out that another one of my old friends - Firefox - has a command line interface. Open it up at any time with Shift F2. So here are a few nifty features of Firefox's command line that I'd like to remember for next time:

Be aware that one of the first (and highest-ranked) announcements of Firefox's command line at is pretty out-of-date. Refer to instead.

1 comment(s).

Sublime Text and the Command Line.


Sublime Text comes with an excellent little command line utility. Here are some examples of what it can do:

Usually you have to set this up on each computer you're using Sublime on. (This sort of thing is about telling your computer how to utilize Sublime, which is why it doesn't sync to other machines when you have syncing set up.)

Windows 7/10 Sublime / Command Line Configuration

OSX Sublime / Command Line Configuration