The State of Things

A few articles that are interesting as a web developer/human at this point in time.

App-pocalypse Now – Jeff Atwood – Coding Horror

Your platform now has a million apps? Amazing! Wonderful! What they don’t tell you is that 99% of them are awful junk that nobody would ever want.

The Evolution of the Developer – Ben Uretsky – Re/code

But that has changed. I’m hard-pressed to think of any paradigm shift, in terms of personnel, quite as drastic and rapid as the new role of the developer. With software being free and readily available, the sole ball and chain left shackled to the ankles of developers was hardware — but with the development of the cloud market, developers have a newfound stray-dog freedom.

How to Get a Job at Google – Thomas L. Friedman – New York Times

What else? Humility and ownership. “It’s feeling the sense of responsibility, the sense of ownership, to step in,” he said, to try to solve any problem — and the humility to step back and embrace the better ideas of others. “Your end goal,” explained Bock, “is what can we do together to problem-solve. I’ve contributed my piece, and then I step back.”

The internet is fucked – Nilay Patel – The Verge

But we can fix it, I swear. We just have to start telling each other the truth. Not the doublespeak bullshit of regulators and lobbyists, but the actual truth. Once we have the truth, we have the power — the power to demand better not only from our government, but from the companies that serve us as well.

Platformed. – Ethan Marcotte

I don’t really have any answers here—hell, I’m not entirely sure what I’m griping about. But I do wonder if our collective short-term frustrations leads us to longer-term losses. And seeing the web not as a “platform” but as a “continuum”—a truly fluid, chaotic design medium serving millions of imperfect clients—might help.

Thanks to @timothy_snyder and others on Twitter for sharing these.

Creating a Navigable list of Property Values in Semantic MediaWiki

Update: I tweaked the code after posting this. It’s been updated to reflect my working solution!
One of the great things about Semantic MediaWiki (SMW) is the auto-generated fact box at the bottom of any wiki page that has any values for semantic properties.

Screen Shot 2013-05-01 at 10.25.12 AM

It’s also relatively easy to create a list of all defined values for a given property. In fact, this idea uses this template as a basis for what follows.

However, I found that it’s not very intuitive to navigate to a list of all values of a property and see what other articles have that same property value. In order to see a list of all articles that have a particular property value you’d have to navigate to an existing page with that property and then perform a semantic search from there. Or know that there’s a page called Special:SearchByProperty that you could use.

Screen Shot 2013-05-01 at 10.04.58 AM
Example of Special:SearchByProperty results

I wasn’t satisfied with that, so I made a fancy list that’s actually really easy to implement and can be used across an entire SMW for other property values too.

The result is a list of all values for a given property that provide hyperlinks to a list of all wiki articles with that property value. It uses the Special:SearchByProperty page for displaying results.

First, I created a template called Property Values Columns. You can use it like so:

{{Property Values Columns|<em>Name of Property Here</em>}}

Here’s the contents of the “Property Values Columns” template4:

<noinclude>Use this template to list all the unique values for a given property.

== Template code ==
</noinclude><includeonly>
*{{#arraymap:
{{#arraydefine: valued
|
{{#ask: [[{{{1|}}}::+]] | mainlabel =- | headers = hide |? {{{1|}}} | limit = 10000|searchlabel= }}
|,| print=list, sort=asc, unique}}
|,|@@|[[Special:SearchByProperty/{{Space|{{{1}}}/@@}}{{!}}@@]]|
<ul>
	<li>}}</li>
</ul>

</includeonly>

This is what it does.

1. Gets a comma separated list of property values for whatever property you’ve requested.
2. Parses the name of the property and each unique value to build a URL.
Example: http://wikiname.com/wiki/index.php/Special:SearchByProperty/Property Name/Property Value
3. The secret sauce is another template called ‘Space’ which uses the #replace function to replace all spaces ” ” with the “-20” syntax used in the Special:SearchByProperty query.
3a. The “Space” template contains the following:
{{#replace:{{{1}}}| |-20}}
4. Return the results as a series of list items.

The result is an list of all unique property values that when clicked will query the wiki for all pages containing that property value. You can then use some custom styling to format the results. In the example below I wrapped the template in a div creating two columns.5

<div class="twoColumns">{{Property Values Columns|Accounting Unit}}</div>

Screen Shot 2013-05-01 at 10.13.18 AM

Pretty cool huh?

Responsive WordPress Theme and Advanced Custom Fields

This is a rather simple little hack, but came in handy with a site I recently I built.

By default, editing theme options are limited to Administrator accounts in WordPress. For themes like Responsive this means that you must have all your clients logging in as administrators. The admin-level dashboard clutters the navigation with many things most clients should never touch. Another solution would be to modify permissions and create custom permission levels to access those theme options.

Neither seemed very elegant to me. After training with the client, she asked why couldn’t they edit the “Home” page under Pages. Which makes sense. If you manage all of your other pages there, why not the home page!?

Here’s a quick tutorial on how you can use the very awesome Advanced Custom Fields in conjunction with the default Responsive home page layout to manage your homepage content.

First, install ACF if you haven’t already.

Second, create a new page and call it Home.

Because you’re using a child theme you’ll want to copy front-page.php from the Responsive theme into your child theme directory.

Open it up in your favorite editor and look for this section:

<div id="featured" class="grid col-940">
	
		<div class="grid col-460">




			<h1 class="featured-title"><?php echo $responsive_options['home_headline']; ?></h1>
			
			<h2 class="featured-subtitle"><?php echo $responsive_options['home_subheadline']; ?></h2>
			
			<p><?php echo $responsive_options['home_content_area']; ?></p>
			
			<?php if ($responsive_options['cta_button'] == 0): ?> &nbsp;
&nbsp; &nbsp;
				<div class="call-to-action">




					<a href="<?php echo $responsive_options['cta_url']; ?>" class="blue button">
						<?php echo $responsive_options['cta_text']; ?>
					</a>
				
				</div><!-- end of .call-to-action -->




			<?php endif; ?> &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;
			
		</div><!-- end of .col-460 -->




		<div id="featured-image" class="grid col-460 fit">&nbsp;
							
			<?php echo do_shortcode( $responsive_options['featured_content'] ); ?>
									
		</div><!-- end of #featured-image -->&nbsp;
	
	</div><!-- end of #featured -->

Notice all those echo $responsive_options calls? Those are the hooks the Responsive theme uses to pull the information you put on the homepage under Appearance->Theme Options->Home Page. We want to move those to the page called Home along side all of our other pages.

What we’ll do is create a Field Group in ACF for all the fields on the homepage.

  • Title
  • Subtitle
  • Content
  • Video Link
  • Call to Action Button Text
  • Call to Action Button Link

Here’s and example of what your field group should look like.

Screen Shot 2013-04-04 at 2.09.34 PM

Make sure you also set this field group to show up only on the Home page you created earlier.

Screen Shot 2013-04-04 at 2.18.34 PM

Depending on your preferences you might also hide other fields on the screen – such as the Content Editor, Discussion and Comments.

Now from here you simply replace the responsive_option references with calls to your new ACF fields.

For example:

<?php echo $responsive_options['home_headline']; ?>

becomes

<?php the_field('home_title'); ?>

and

<?php echo $responsive_options['cta_url']; ?>

becomes

<?php the_field('home_call_to_action_button_link'); ?>

The end result is something that looks like this:

<div id="featured" class="grid col-940">
	
		<div class="grid col-460">




			<h1 class="featured-title"><?php the_field('home_title'); ?></h1>
			
			<h2 class="featured-subtitle"><?php the_field('home_subtitle'); ?></h2>
			
			<p><?php the_field('home_content'); ?></p>
			
			<?php if ($responsive_options['cta_button'] == 0): ?> &nbsp;
&nbsp; &nbsp;
				<div class="call-to-action">




					<a href="<?php the_field('home_call_to_action_button_link'); ?>" class="blue button">
						<?php the_field('home_call_to_action_button_text'); ?>
					</a>
				
				</div><!-- end of .call-to-action -->




			<?php endif; ?> &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;
			
		</div><!-- end of .col-460 -->




		<div id="featured-image" class="grid col-460 fit">&nbsp;
							
			<?php&nbsp;
				
				$video_url = get_field('home_video_link');
				echo wp_oembed_get( $video_url, array( 'width' => 440, 'height' => 440 ) );
				
			?>
												
		</div><!-- end of #featured-image -->&nbsp;
	
	</div><!-- end of #featured -->

You’ll notice that I’m also using WordPress’ wp_oembed_get function to embed the YouTube URL in the featured image section. This way all the folks managing content have to do is insert the YouTube URL and WordPress handles the rest.

Once you’re done all you have to do is visit your Home page and update the fields!

Screen Shot 2013-04-04 at 2.28.22 PM

What I’d love to see from Flickr

A few comments from my good friends John Lamb6 and Kurt Werstein had me thinking about what I like about Flickr and why I keep using it when so many people have moved to Facebook, Google+, Zenfolio, 500px7 and the like.

I’ve been an enthusiast photographer for a while. According to Aperture I have taken over 26,000 photos in the past 7 years. I’ve recently started investing more time (and by association, money) into my hobby of photography with a recent camera purchase.
I’ve shared over 3,000 of my photos on Flickr. I love it and have consistently used Flickr since 2005. Recently it’s been chided as having missed the boat on things like social and mobile, but for reliably sharing images and finding other photographers (and their photos) it’s the best solution I’ve found yet.
I’m also an Aperture person, so I love the integration between the two. It makes my workflow more efficient and less frustrating than alternatives. In the past I would load the images into a folder, sort by hand to find those worth editing/sharing, load into Photoshop, edit and then export. Then, finally, upload to Flickr.
Aperture handles that all for me, even keeping the EXIF data intact including titles for my pics. Best part is that it can auto-create sets and import keywords to tags to boot!
While I’m a Flickr fan, I do admit that there are a few things that Flickr could improve in their offerings to avid and professional photographers alike. I’ve been jotting notes down for a few weeks now as I’ve thought about my relationship with Flickr. I have a few idea that I think are worth sharing.
I’ll update this article as I think of new things and hopefully as Flickr adds these features over time I’ll get to mark a few out. If you have a suggestion or an idea, please leave a comment.

Professional Views

Lightbox view on Flickr is great, but one click and you’re back to the normal Flickr. Give photographers the option to set themes for sets or collections. Great for pointing clients to review a set of photos.

Password protected sets or collections

Speaking of photographers sharing specifically with clients, let photographers share their stuff in a controlled way via passwords without requiring guests to have a Yahoo! account. Great for sharing proofs (or final edits) to a select group or individual client. I could see this being very popular for photographers shooting corporate events, weddings, birth announcements, etc. See Vimeo’s handling of password protected videos as an example.

Better monetization options

Give photographers a cut of print sales, more third-party companies to print to and allow photographers to create a ‘store front’ for select photos. Like the professional views idea above, let photographers edit a few areas to make things look professional.

Individual licensing

This is related and a fairly recent trend. Cut out the middlemen (Getty, Shutterstock, etc.) and let people (professional, semi-pro and casual) market directly to other individuals looking for photography.

Less page refreshes, more visible metadata

 

 

I’d love quicker access to common metadata – having to click and wait for a second page load sucks. I love looking at a photo at a large size and seeing what other people are doing with the same gear – or with gear I’m interested in. I love photos where I go, “Huh, how did they do that?”
Make this a modal AJAX element of the information. When I click the + next to the ‘Taken with a xx’ have some of the high level EXIF data present such as lens, aperture, shutter speed, ISO and time of day.

 

 

Update: It’s not perfect (I think it should be higher on the page) but Camera Settings (EXIF) is now on the photo page!

Better mobile apps

The current Flickr mobile site and iOS app are rather lackluster. Let people upload from their smart phone to the site without the app. (iOS 6 FTW!) Allow group participation on Flickr to be as easy as Facebook or Twitter for mobile interfaces. Let me comment and share to groups with ease. I want to see notifications when people comment on a photos, add as a favorite, or reply to a comment.

Better Groups

Groups are great nodes in the big web of photographers on Flickr. They’re focus points of attention across a sea of individual photos. Give Flickr groups a shot in the arm with a more modern interface. Threaded comments, voting and collapsible navigation. Let me see past comment history from folks. Allow folks to upload more than 6 photos at a time and give me Facebook-like notifications when activity has occurred in a group. Let people like a photo directly from every embed – like you can in justified view. Use the tags, titles and set/collection names to suggest related groups that I might be interested in. Do I tag a lot of photos in Seattle? Invite me to Seattle-related groups. Are most of my photos taken at night? How about some night photography groups?

Better Stats

I’m spoiled by Google Analytics, WordPress.com and Facebook metrics. Flickr gives you some basic stats, but I’d love to see timeline views for individual photos over a range greater than the past 30 days. Let me see how different ways of publicizing my photos impacts its views over time.
Give photographers better stats on where people are coming from. A lot of my referrals are internal to Flickr. Tell me where on the site are they coming from. Are most of my views from random keyword searches, groups I participate in, people who are contacts, etc?

Find people

Help me find people with similar tags, group membership, geographic location of photos (and profile). One of the great things about Instagram is the ability to quickly find existing friends from Facebook and Twitter. (Yes, I’m aware that the Twitter contact function was removed in a recent update.) Figure out a way to plug me in to as many folks as possible. Make recommendations intelligent and unobtrusive.
This is really just a list of desired features and not a deeply substantial or cohesive strategy for moving Flickr forward. I do enough of that in my day job!
I hope these ideas give a hint of a bigger picture and some suggestions to move things forward. I know there are smart, passionate and creative people working on Flickr – people who are far more intelligent than I in figuring out what Flickr needs.
I have high hopes for those folks. There’s plenty of positive movement with Yahoo’s new CEO, the great team that continues to support Flickr and the recent news about the SVP over Flickr having a past as a National Geographic wildlife photographer. I don’t think Flickr is dying, but I do think it needs a good shot in the arm.