Food for thought: Why Isn’t Open Source A Gateway For Coders Of Color?. (Via my wife, Erin.)
Knowing where to look for answers is more important than memorizing a set of requirements or rules.
I have a confession: I often have no idea what I’m doing.
I remember clearly what it felt like my first day at my job: I was new, overwhelmed, and maybe even scared. But the work was exciting, mind-filling, and fun. Now, several years into the role, I still feel this push-and-pull. I’ve learned to juggle these opposing feelings and be both productive and successful at my job.
The key to this—and I believe one of the most important traits for my success—is an investigative mindset. Knowing where to look for answers is more important than memorizing a set of requirements or rules.
Why? Rules and requirements change, and the context I work in is constantly changing. I’m more productive in my work by making good, informed decisions—not by the book. I can work smarter, gaining a new awareness of how everything works.
How? To develop this mindset, I exercise the following:
1. Take initiative on my own first: do the legwork to find the answer. Be tenacious and know where to look.
2. Ask questions, know when to stop looking and ask for help. Not being afraid to be ignorant or wrong.
3. Share my ideas for the better solution.
4. Look to my teammates as a critical force—we learn together.
Often, the investigation takes me out of bounds—out of my “area”—that’s OK, and natural. I talk to other people outside my team, and I learn a bit more about how it all works together. I fill in the gaps in my knowledge. I’ve raised my awareness.
It wasn’t always this clear for me … after only 3 or 4 months into being at Automattic I had a revelation that changed my mindset—put it into words. One day, I ran into a quote one of our internal P2 sites, expressed as a formula or pseudocode.
( intuition + investigation ) > memorization
I said “Yes, Yes, YES!” I was in the privacy of my home office, so no one heard me, of course. It really made sense, though. And it alleviated part of the struggle I was having to completely internalize all the things I was supposed to know and do. All the stats and bots and checklists and dos and donts.
This was later echoed by something UX guru Jared Spool said at An Event Apart:
The mindset of investigation is about informed decisions, not going “by the book.” Dogmatic, rule-based methodologies exist only to enforce things; they avoid critical thinking and good decision making.
I realized if I made good, informed decisions I could solve problems in both normal and edge cases. Instead of a one-time answer, I could build a framework to answer any question. A mentality. The outcome of finding the answer, solving the problem, sharing the solution—rewards this mindset. A loop. Doing it over and over.
This feedback loop is hugely powerful. It gives me confidence to continue to strive for an investigative mind.
2. Thinking about investigation reminded me of my time in the Future Problem Solving (FPS) club in high school. We found creative solutions to mock issues like world hunger or renewable energy. It was fun and challenging, but the best part was the process itself. Investigate, organize, present, debate. Learn. (Random trivia: according to Wikipedia a later team from my school won a state FPS competition. Rock!)
3. One more quote: “Never memorize what you can look up in books.” —Einstein (unsourced)
Forge is a free command-line toolkit for bootstrapping and developing WordPress themes in a tidy environment using front-end languages like Sass, LESS, and CoffeeScript.
During the early development process of this year’s default theme for WordPress, the Twenty Twelve team—Drew Strojny and myself—used Github and Forge to build the theme (view the archived source).
In summary: Forge is too restrictive for general theme develpoment.
I changed the command character for screen from Control-a to Control-b recently, after switching to a wireless Mac keyboard. On this small, portable keyboard—which is the same layout as most Mac laptops—there’s only one Control key, and it’s on the left side of the keyboard.
The weird angle to hit Control-a was hurting my hand. Gone now is the left-side contortion I was forced to make to strike with my pinky and ring finger.
It’s pretty easy to change the command key mapping, just add
escape ^Bb to your screen config file (usually located in your home directory). Here’s what my
.shellrc looks like:
# Make the shell in every window as your login shell shell -$SHELL # Instead of Control-a, make the escape/command character be Control-b escape ^Bb # Autodetach session on hangup instead of terminating screen completely autodetach on # Turn off the splash screen startup_message off # Use a 100000-line scrollback buffer defscrollback 100000
Want to keep your WordPress install up to date automatically? Follow these steps to add a cron job to update your WordPress install every 6 hours.
Set up the install
The WordPress install must be a Subversion checkout. You can grab the bleeding edge source with a command like this:
svn co http://core.svn.wordpress.org/trunk/ .
If you aren’t familiar with Subversion, start here:
Schedule the updates
Add the cron job from the command line.
- Edit the cron job list.
- Add the cron job (edit the path to your WordPress install).
MAILTO="" # Update WordPress install every six hours * */6 * * * svn up -q ~/path/to/your/wp-install
- Save and close.
To learn more about editing cron jobs from the command line search Google for man cron and man crontab.
You can also use a GUI tool like CronniX on Mac OS X to manage the cron jobs.
-qparameter tells the
svn updatecommand to run silently so that you don’t have to worry about any output from the cron job. But, you should add the
MAILTOdefinition if you want to completely silence output.
- Some systems don’t recognize the
*/6syntax for hourly notation. If you get an error when trying to save the cron job you might have to change it to comma-separated values instead:
Inconsistencies [in your coding style] are jarring and require more time to read and comprehend. Consistency is such a valued quality that developers often abide by a coding standard even if they dislike the coding standard itself. —Chris Shiflett and Sean Coates
I consider following a coding standard a sure sign of a craftmanship. A craftsman knows his tools and languages well, and is consistent in his coding style. Ego and personal preference give way to consistency and best practices.
If you develop on your own, create a coding style and stick with it. There are many practical reasons to abide by code standards when developing on your own. It enforces good habits and helps avoid simple syntax bugs. It speeds up your development process by giving you structure and taking the guesswork out of naming and spacing tasks. And, possibly most importantly, it ensures your code is readable to your future self.
This is all fine and dandy when you’re the only one touching the code. When you share and collaborate with other developers, however, following a coding standard is not a choice—it is mandatory. If you develop for a platform, use the coding standards of the platform. Even if you don’t agree with the standard, you should follow it anyway so that your code is understandable and usable for other developers. Chances are the standards were put in place for very good reasons, both practical and philosophical.
To learn the coding standards for a project you work with, start by looking at other people’s code. Put the standards into practice in your own code and don’t be afraid to ask for a review from someone else. Check your code against similar structures in your software’s codebase, or popular modules, themes, and plugins for the software.
A big part of my job as Theme Wrangler at Automattic is reviewing themes. Lots of themes from lots of designers and developers. Everyone seems to have their own coding style, which makes it difficult to review code and find errors quickly. As a result I spend a lot of time cleaning up themes to match WordPress coding standards before I can even begin the actual work of reviewing and updating the theme.
For that reason code style consistency is especially important to me. It enforces best practices, produces consistent code, and speeds up development between collaborators.
- Use standard syntax.
- Remove extra whitespace and line endings.
- Use consistent spacing and indentation.
- Use human-readable labels and names.
Following are examples of specific coding standards that I follow in my everyday development.
- CakePHP coding standards
- WordPress coding standards
For a top-notch example of coding standards within a company, see the Fellowship Technologies Code Standards. That, friends, is a well-crafted coding standard that we can all learn from.
Recently I received a question from a colleague regarding image theft and how to prevent it. The sad truth is that you can’t. There are techniques to discourage downloading and reuse of your preciously-crafted images, but they generally aren’t 100% effective or user-friendly for your normal site visitors.
The reality of unwanted image downloads is a bit depressing: there is no guaranteed way to protect your images from being taken—the most you can do is discourage it.
First, make sure your copyright notice is clearly posted on each page indicating that downloading or using images without permission is not allowed. In doing so you are legally holding your site visitors accountable if they steal and reuse your content.
If you suspect that image search engines or IE-only users are the culprits, using client- and server-side techniques might help alleviate the problem. But if you are looking for a universal solution, editing the images is your best bet since all these techniques can be circumvented by taking screenshots, using screen scraping tools, or simply viewing the locally cached images.
- Disable the right-click menu
- Disable the shortcut menu in Internet Explorer
- Use a transparent image overlay
Another technique—which Flickr employs—is the transparent image overlay. This involves layering a transparent GIF over the top of the image you wish to protect. When the image is right-clicked and saved, the person assumes they are downloading a JPG but instead get the transparent GIF.
From Flickr’s download prevention help text:
Preventing people from downloading something also means that a transparent image will be positioned over the image on the main photo page, which is intended to discourage people from right-clicking to save, or dragging the image on to their desktop. By “discourage” we do mean simply “discourage”. Please understand that if a photo can be viewed in a web browser, it can be downloaded. The transparent image overlaid on the photo will not keep your images safe from theft, and is intended only as a slight hindrance to downloading.
Using Flash to display images is another method to discourage image theft (since Flash right-click menus can be customized), but it isn’t foolproof. Just like these other techniques, people can simply take a screenshot to capture the image.
- Block image search engines
- Disable image hotlinking
Image search a popular way to access images. If you notice a lot of traffic from image search engines, try blocking them with a rule in your
robots.txt file. See Remove an image from Google Image Search for more details.
I also recommend disabling hotlinking by adding rules to your site’s
.htaccess file. Doing so will not only potentially save you bandwidth costs by stopping other sites from reusing your images and content, it will prevent directly linking to your images without your permission.
Image content editing
- Add watermarks
- Use very low quality images
Although altering the image affects how it looks and works on your site, it is quite a bit more effective than simply trying to disable downloading or saving. Again, this is only a means to discourage theft — skilled graphic artists can remove a watermark and still have a usable image.
Using low quality images could also help, but finding a good balance between impressing your customers and deterring theft can be difficult.
If someone really wants the image, they will get it. Using the techniques described above will discourage most people from downloading your images, but remember that posting your images online means you run the risk of anyone downloading and reusing them.