A Charming Example of How to Get Fired Through Facebook

Ahh social networking. Sometimes users are in such a hurry to vent through a status update that they don't stop to remember who's going to see it. And if you happen to say something negative about someone or something, the situation can quickly turn ugly. Read more

Save 15% or More on Car Insurance by Switching to Plain JavaScript

Satire disclaimer: This article is as much satire as it is serious insight if there is even any of that at all. Don’t take it too seriously, but do tell all your friends. Also, the bit about Taco Bell is 100% true. I wouldn’t joke about something like that.

My day usually begins like this: I wake up at 6:15 a.m. (kill me) to get the kids ready for school. They’re mad. I’m mad. Everyone is on the brink of an emotional breakdown because it's 6:15 in the morning.
Usually the first thing that I do when I wake up is roll out of bed and start hammering out pushups like Christian Bale.

Before I’m even fully awake and out of bed, I grab my phone and look at Twitter. It’s a sickness, I know. I’m not proud of it but at least I’m out here admitting that I have a problem and I believe according to the rules of science that fully negates my problem and makes me better than you.
One morning a few weeks ago I wake up to this tweet…

Removing client-side React.js (but keeping it on the server) resulted in a 50% performance improvement on our landing page pic.twitter.com/vM7JhWhYKu
— Netflix UI Engineers (@NetflixUIE) October 26, 2017
The wonderful thing about Twitter is that there is essentially zero context for anything you see, which means your crazy brain gets to fill in all the holes and, in my case, that’s a recipe for utter disaster.
Here is how I read this tweet….
Heavily doctored by me. My Photoshop skills are a huge embarrassing failure.
I believe my brain read it that way because that’s literally what the original tweet says. My brain just adds the “Your whole life is a lie” part to pretty much everything I read or hear.
Your Whole Life is a Lie
This immediately dumped me into an existential crisis.
To be fair, I’m almost constantly in a state of crisis so it’s not like this was a big leap for me. Just last night at Taco Bell I had to choose between the Beefy 5-layer Burrito and the Cheesy Gordita Crunch and I almost came apart in the drive through. You can’t force decisions like that on people and expect an immediate response! And why do I need 50 packets of Fire sauce!?!
The point is that I’m kind of emotionally fragile as it is, so you can’t suggest to me that you got rid of React because all of a sudden people just don’t need it anymore.
I had so, so, so many. questions like:

What about binding?
What about components?
What about state?
What about templates?

You’re telling me that all of a sudden you just don’t need any of that stuff anymore? One does not simply “move to plain JavaScript” by removing React from their project. If you actually did that you would just be moving from React to your own version of React. Facebook could say that their site is built in “plain JavaScript” too. They just decided to name some of that JavaScript “React" in the process.
It was nonsensical. You might as well have said that you saved 15% on car insurance by moving to plain JavaScript. Thankfully, I only had to wait 6 agonizing days before Jake Archibald took to the blogs to clear everything up.

📝 Netflix "removed" React and improved performance.➡️ Despite appearances, this reflects well on React.https://t.co/R8SohrLX6q
— Jake Archibald (@jaffathecake) October 31, 2017

The post goes on to explain that Netflix is actually deferring client-side React until it’s needed and going with server rendered React in the meantime. He also points out that it’s only logical that it would be faster because the browser is doing less work. Netflix is apparently loading client-side React in the background. It’s there when you need it, but you don’t have to parse it if you don’t.
I decided to check this out and see for myself what is going on.
Netflix Login
One of the places Jake mentions that server-side React is appropriate is on the login screen. So let’s start there. I loaded the login screen and it looks to me like client-side React is still every much in effect here.

As an aside, Netflix is great at naming things. I mean, look at these components—AkiraLayout, JawboneLinkProvider, FreezedWrapper? OK, FreezedWrapper isn’t that exciting but you can’t take AkiraLayout from me.

So I can’t find where React has been removed. The login page itself comes in at around 194KB and that’s before it loads the loginController.jsx file which bumps it up another 204KB.
I then did what I should have done the first time which is to watch the video from Netflix that was responsible for this descent into the depths of my insecurity and I noticed that they only mentioned the splash page.
The splash page is just netflix.com. No login. No videos. The splash page. That slide? The one that made it’s way all over the internet and into my therapy sessions? That slide is referring only to the splash page. Netflix did remove React from their splash page and replace the few interactions they had with plain JavaScript.
And there is your context. So let’s fix the slide again…

That is the actual story here.
It’s unfortunate that we latch on to a single slide taken completely out of context. This is not the fault of Netflix. Or maybe it is. I mean, they did tweet it out but, look, this is really the fault of 2017. This is how all of the news in our lives plays out.
What’s super unfortunate here, and what Jake was trying to convey in his post, is that we completely missed some actual cool things that Netflix is doing. Mainly the combination of server-side React and Prefetching. Or rather the idea that more complex code can be downloaded and parsed in the background instead of when the page loads.
Prefetching is Not a Solved Problem
We tend to forget that things like prefetching are not necessarily a solved problem. While Service Workers are awesome, Netflix can’t use them because the support is too sparse. Beyond that, the browser Prefetching API is flaky. In that same presentation, Netflix reports that the API (which is just the link tag) has a success rate as low as a 30%. That means your prefetch will only work about a third of the time in some cases. 😳

The reason for this is that the API is trying to make a bunch of decisions about whether or not it should prefetch depending on your device and resources. It’s not a guarantee that your resources will be loaded at all.
What’s most remarkable to me is that Netflix hit on another solution that is so simple it hurts: just make an AJAX call and don’t do anything with the result; the browser will cache that resource.
You Uh, Still Need React
So yes, you still need React on the client-side. Netflix is still using it and never said that they were not.
What they did say was that they had figured out some creative ways to make the experience better for the user and had combined that with their current React implementation. This should be exciting to you if you’re a React developer.
Maybe Netflix will open source some library for prefetching with a way cool name. Is "fakenews.js” taken?
Special Thanks to Brian Holt who reviewed this article and was still willing to be my friend.

Save 15% or More on Car Insurance by Switching to Plain JavaScript is a post from CSS-Tricks
Source: CssTricks

Can You Sell Water? Part 2

Abraham Celio and Maria Mendez own Yolis Tamales on Chicago’s Southwest Side.Some of the tech industry’s most vaunted companies revel in their origins as mavericks or rule-breakers, having flouted regulations in the name of disruption. That kind of risk-taking is celebrated in Silicon Valley but punished in other places, most notably minority communities.body[data-twttr-rendered="true"] {background-color: transparent;}.twitter-tweet {margin: auto !important;}Undercover @usparkpolicepio handcuffing kids on @NationalMallNPS for selling water. — @timkreppfunction notifyResize(height) {height = height ? height : document.documentElement.offsetHeight; var resized = false; if (window.donkey && donkey.resize) {donkey.resize(height); resized = true;}if (parent && parent._resizeIframe) {var obj = {iframe: window.frameElement, height: height}; parent._resizeIframe(obj); resized = true;}if (window.location && window.location.hash === "#amp=1" && window.parent && window.parent.postMessage) {window.parent.postMessage({sentinel: "amp", type: "embed-size", height: height}, "*");}if (window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.resize) {window.webkit.messageHandlers.resize.postMessage(height); resized = true;}return resized;}twttr.events.bind('rendered', function (event) {notifyResize();}); twttr.events.bind('resize', function (event) {notifyResize();});if (parent && parent._resizeIframe) {var maxWidth = parseInt(window.frameElement.getAttribute("width")); if ( 500 < maxWidth) {window.frameElement.setAttribute("width", "500");}}In this episode of the Rework podcast: A legal advocate for low-income entrepreneurs talks about the hurdles her clients face, and a husband-and-wife team of street food vendors share what they’ve learned making the transition from the informal to the formal economy.https://medium.com/media/3e703962df4d7daf3f36bf621a9cf227/hrefCan You Sell Water? Part 2 was originally published in Signal v. Noise on Medium, where people are continuing the conversation by highlighting and responding to this story.

Source: 37signals

Advocating for Accessible UI Design

Accessibility is a hot topic these days, and the older we web-makers get, the hotter it's going to become! That might be a snarky outlook, but what I'm trying to say is that it's about time we start designing the web for everyone because the web was meant to be for everyone, and less and less are we able to predict where, when, and how our work will be consumed.

Accessibility is not just up to developers
As developers, we often encounter accessibility post-design, when we do things like implementating the correct role and aria attributes, ensuring navigation is keyboard friendly, and responsibly hiding elements. In general, our accessibility efforts go towards thinking about how to make specific components and features accessible, such as an SVG icon system or helpful tool-tips.
Given our roles as developers, this makes sense. Accessibility flaws, however, often originate in the UI design itself, and depending on our work environment, we developers don't necessarily have the authority or bandwidth to advocate for accessibility in the designs we are handed.
For example, let's say you are tasked with turning a Sketch file into a one-page WordPress site.
The design has finally been approved by the client, and now you have a weekend to build the thing, plus another two days to work with QA to perfect it. As you take a look at the design for the first time, you notice that, on small devices, the dainty serif typeface overlaid on a background image would be difficult for low-sighted visitors to read.
You, the accessibility-minded developer, could proceed in a few ways:

Remain silent and sate your accessibility conscience by making accessible choices in the code where you can
Go ahead and make accessibility improvements to the UI as you develop, present them in the finished product, and explain yourself after
Compile a list of suggested changes to send to the designer and request they be implemented in the mockups so you can then develop them

I was in a situation like this recently and, judge me if you will, I chose number one.
If I'd had the time and the guts, number 2 would've gotten me the furthest, but given the nature of my role as a first-time contractor at this high-speed agency I was hoping to develop a working relationship with, I felt I'd be overstepping my bounds and wasn't ready to take the risk of being too vocal out of the gate. I chose not to do number 3 for similar reasons, mainly for fear of causing more work and stress for the already extremely busy designer.
Now that I have the benefit of hindsight, however, might I add a fourth item to the list?

Send a succinct list of non-technical accessibility tips for UI design to everyone on the team so they make more accessible design choices in future

Where to find such a list? Well, you are in luck! Read on!
Non-technical Accessibility Tips for UI Design
What follows is a list of plain language, no-jargon, "Accessibility Tips for UI Design" you, developer, can share with everyone at work: UI designers, content providers, project managers, and clients alike. The more we can spread awareness about accessibility and think critically about the mockups we are handed to implement, the more accessible the web will be!
I have chosen the examples below from various trendy website feeds, and I used the fantastic Funkify Chrome Extension to simulate the viewing experience of site visitors with varying abilities and disabilities.
First up:
Easy on the animations.
With great power comes great responsibility. The modern web affords us the power to bounce-in, fly-in, or drop-in any content we please, but besides the wow factor, how are these animations contributing to a reader's experience on your site? How are the animations triggered? Can they be mistakenly triggered, causing a confusing jolt in the flow of your site visitor's experience?
Take this example of a car repair company's website. I've applied the "Elderly Ellen" filter from Funkify to simulate slightly blurred vision and shaky hands:
Elderly Ellen's trembling hands cause a jarring experience with bold animations.
If I were Ellen, this experience would likely steer me away from Service King's services! Someone like Elderly Ellen is constantly frustrated with technology. It's unnecessary to cause her that stress when she's trying to read about a service for repairing her car after an already traumatizing fender bender.
Make sure background and text colors have enough contrast.
Although that medium grey text looks just right on that light grey background, it's hard to read...and impossible to read if you are working out in the sunshine (not a common occurance, but I've done it before). Here's an example of the aforementioned grey-on-grey scenario:
The medium grey text color of these icons' captions does not contrast enough with the light grey background color.
And now, the same example affected by the "Sunshine Sue" filter from Funkify deems our low contrast captions simply invisible!
And now, simulating sunshine on a screen, the text is completely gone!
The solution? Run your color choices through the WebAIM contrast checker to see if they meet standards for readability and color contrast, and if they don't, adjust the color values until they do.

The Funkify extension can be used to test anything that is visible in a browser. Even if a design mock isn't yet implemented in code, an image or PDF can be opened in the browser and the extension will still work!
Be very careful when overlaying text on images, or don't.
It might look just right to have that dainty serif overlaid on the big header image, but can you read it if you slightly blur your vision? If not, up the contrast between the text and image, perhaps by brightening the text color and increasing the transparency of the image on a dark background.
On Burberry's website, for example, the user must select from a drop-down in order to enter the site, but the text identifying the drop-down is barely readable over top the background image. There are many ways to solve this from a design standpoint, but for a quick example, we could add a dark background beneath the light text to provide a bit more contrast:
Adding a contrasting background beneath the text overlaid on an image can help with readability.
Similarly, while the delicate descriptive text below the image on Tesla's new Semi website is delicate and beautiful, it is barely legiible when simulating slightly blurred vision with "Blurry Bianca":
The descriptive text overlaid on the bottom of this image is barely legible when simulating slightly blurred vision.
Double-check the readability of font weights and sizes.
The thinner the font weight and the smaller the size, the harder it is to read. Even I, as a hearing, well-sighted individual, find myself zooming in on body text at times because it is so darn lightweight and small, even if the color contrast is up to speed. If you must stick with the lightweight font, increasing the sizes and line height can do wonders as well.
I like to ask myself, does it pass the slightly-cross-eye test? That is when I slightly cross my eyes, can I still make out the text?
Some contrast, line-height, and font-size adjustments make for a more readable text in a disclaimer we are supposed to read.
Indicate external links.
If it is a requirement for a link to open in a new tab, first question whether it should be a requirement, then indicate it visually with a small icon or note in the UI.
Additionally, designers can make a note in their designs where there should be screen-reader-only text indicating the link will navigate the user away from their current viewing portal. This was brought to mind by way of some excellent replies to a Twitter conversation; read through that here.
Differentiate between action-oriented social media links vs. profile links.
When we see small social media icons, I think the general assumption is that they link to the relevant social media profiles. Sometimes, however, these icons are actually actions that, rather than linking to a profile, open a "New Tweet" dialog or similar. These actions should be marked as such.
Don't rely 100% on icons and colors to communicate.
It's easy to assume everyone knows that a hamburger icon indicates a menu or that everyone is familiar with the various versions of LinkedIn's icon. However, this is not the case, and it causes a moment of confusion and insult that isn't necessary to site visitors that are less in-the-know than we are. Especially if your audience tends to be older and/or less tech-savvy, make sure you aren't relying on what you think is common knowledge.
Reliance on colors for meaning causes a similar issue, and more-so for any users that deal with color blindness. A recent Smashing Magazine article covers this problem in detail and uses the example of a color picker on shoe sales website that, for color-blind users, results in an entirely different palette.
What would the design look like without interactivity?
If all a user could do was scroll, does the content still make sense? Are there areas where, rather than hiding the thumbnail caption under a fancy hover event, the caption could be plainly visible instead? What about on a touch screen, where hover events are treated quite differently?
What else?
Have you encountered issues with accessibility in designs you've implemented? How did you handle it? What other tips can we give designers and producers for creating more accessible UI designs?
The first step to advocating for accessible UI design is to simply think twice about what you, the developer, are told to implement. While coding up a design, try applying a few of these Funkify filters and see what results they yield. Think critically about the designs you are handed, and start a conversation with your coworkers.

Advocating for Accessible UI Design is a post from CSS-Tricks
Source: CssTricks

Writing style

Was there a source for my writing style or was it self discovered?body[data-twttr-rendered="true"] {background-color: transparent;}.twitter-tweet {margin: auto !important;}@natekontny as a follower of vlog, wanted to know, where did you pick up the style of writing from, was there any source, or self discovered — @seebiscutfunction notifyResize(height) {height = height ? height : document.documentElement.offsetHeight; var resized = false; if (window.donkey && donkey.resize) {donkey.resize(height); resized = true;}if (parent && parent._resizeIframe) {var obj = {iframe: window.frameElement, height: height}; parent._resizeIframe(obj); resized = true;}if (window.location && window.location.hash === "#amp=1" && window.parent && window.parent.postMessage) {window.parent.postMessage({sentinel: "amp", type: "embed-size", height: height}, "*");}if (window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.resize) {window.webkit.messageHandlers.resize.postMessage(height); resized = true;}return resized;}twttr.events.bind('rendered', function (event) {notifyResize();}); twttr.events.bind('resize', function (event) {notifyResize();});if (parent && parent._resizeIframe) {var maxWidth = parseInt(window.frameElement.getAttribute("width")); if ( 500 < maxWidth) {window.frameElement.setAttribute("width", "500");}}Surprise!Adapted from Gage SkidmoreMy dad loves talk radio. I remember as a kid driving around with him and the car tuned to WGN an AM station based here in Chicago. One of the personalities the station hosted was Paul Harvey. Paul Harvey had a popular segment called “The Rest of the Story”.I wasn’t in love with talk radio, but I enjoyed Paul. He always told some odd bits of someone’s story and concluded with the name of a fairly well known person he had just described.The surprise made the stories interesting.Murray Davis discovered this when he looked at what research papers spread more than others.An audience finds a proposition ‘interesting’ not because it tells them some truth they thought they already knew, but instead because it tells them some truth they thought they already knew was wrong.We love movies when the bad guy doesn’t hurt someone when we expect it. We devour books where the good guy unexpectedly turns out to be evil. We crave surprise.And so a big part of my writing style is simply trying to surprise people.Did you know that young kid who no one wanted to play on the radio turned out to be Justin Bieber? Or the two guys who struggled to become actors, so they decided to make their own movie instead, catapulting the careers of Matt Damon and Ben Affleck.On and on I’m looking for morsels of Paul Harvey/Murray Davis-like surprise. Is there something I can poke at that people currently assume? Or is there even something I can hold back through the course of the story that might surprise people at the end?“Meanwhile, back at the ranch”SourceI remember a Chemistry class I had in college. There was this Teaching Assistant (TA) who collected Beanie Babies and decided to sell his entire collection for a pretty good sum. He did it because he wanted to use his money to buy his girlfriend an engagement ring. This has nothing to do with anything, I just remember that being something cool the TA did.The TA was also the one to show me one of the first “viral videos” ever to hit the internet. It was a cartoon filmed with cutouts using stop motion animation of 4 kids swearing like crazy and Santa spinning Jesus over his head before throwing him across a field of snow.That was the second ever short episode of South Park that Trey Parker and Matt Stone created in 1995. Today, South Park is one of the most successful cartoons in history.I picked up a book once about writing. I can’t remember the name of it or the author of this chapter but it was all about an important technique the author used in their writing: weaving. Weave stories together. And that stuck with me.I started seeing it everywhere. You see it in authors like Malcolm Gladwell, Simon Sinek, The Heath Brothers, South Park.Wait, one of those isn’t like the other.South Park’s season 21 premier weaves stories about Amazon’s Alexa replacing people’s jobs and a fake TV show called White People Renovating Houses. Back and forth the show moves from this group of people arguing about Alexa taking over the world and the remodeling show. Until they converge.Some call this storytelling technique “Meanwhile, back at the ranch”, nodding to the days of the early silent cowboy films that needed to use subtitles to signal to people they were now literally going back to the ranch for the next thread of story.But you see it constantly in the shows and movies you love. One thread starts, and before it reaches a peak, the story moves you to another thread keeping you in suspense.The weave also helps in another form of surprise: showing you interesting contrasts between two things you might not have thought of being related before: Justin Bieber and ridiculous hard work, Stealing Cars and Frankenstein, Sansa Stark and building an audience.Don’t get caught stealingPhoto by Kelly Sikkema on UnsplashOne of my favorite vloggers right now is How to Dad. He’s got a bunch of funny videos showing exactly what his channel’s name describes: weird shit he goes through raising his kids.He’s been showing more videos recently of his daily life and you can see the things he’s “borrowing” from other vloggers. The selfie-sticks, the drone shots, the timelapses, the musical score. Except the musical score is now often him singing, playing the flute, or banging on his kids toys in his shower and recording the result. It’s a musical score unlike anything you’ve probably seen on a YouTube vlog.He’s taken pieces of things that have inspired him along the way and added his own bits of creativity to make it truly unique.Yes, I’ve been inspired by a great many people. And consciously and subconsciously I stand on their shoulders. But I make sure I’m only trying to take a piece of influence. I like his story structure. I like her use of surprise. I like how he uses narration in his videos. And I take all these pieces of things and merge them into a new whole adding my own unique bits.For example, probably unlike many of my favorite authors, I spend an inordinate amount of time paying attention to People Magazine, Vanity Fair, and Variety. One, I try like How to Dad, to add my own ingredients. And two, because I think there’s some great lessons from those channels people haven’t explored past their surface.Stop doing the same thing every single timeIf I came home on a weekend from college, I would go back to school late on a Sunday night because my mom and I couldn’t miss watching X-files together after dinner on Sunday.X-files was a fantastic show. Its peak season in my opinion was Season 5. That’s where they really stretched themselves creatively. They broke the usual formula of an episode and told stories through different main character perspectives, with different film making techniques, etc.That’s how all my favorite shows have worked. Sure they often have a go-to style, but they aren’t afraid to change it up constantly.And so there’s a style to my writing I reach for a lot, but I’m constantly trying new things and source material. Maybe tonight’s vlog episode is about the psychology of getting my daughter to swim and what that means for us as humans, or it’s simply a montage of the Highrise team enjoying our meetup.I can’t stand formulaic output over and over, and so I’m always looking for new styles and mediums to use.Do what you’re not passionate aboutPhoto by Lauren Peng on UnsplashAnd finally, my writing style is a product of me being interested in everything. I don’t know if it’s something I’ve been born with, or something I learned from my parents. I played every single sport growing up from Figure Skating to Football. I enjoy Justin Bieber and Phish. In college I took classes in Thermodynamics, Philosophy, Advanced Calculus, and Acupressure.I love variety.And that’s a big reason I can’t stand things like conferences in my industry. We’re all doing the same thing, and now we’re meeting to all talk about the same thing we’re all doing? Yuck :)My favorite conference/trade show I attended recently was a show in Food Technology. I didn’t have a direct use for any of the crazy robots and food packaging technology. But it was interesting seeing the trends in food product design and dissecting how they could be applied to other industries.Everyone is so obsessed with doing what they’re passionate about. Spend more time on things you start with zero interest in. Become interested in just being interested.So was there a source for my writing style or was it self discovered? Both. It was a lot of influence from people I enjoy and admire and also an attempt at being uniquely me.Put those two things together in everything you do and it’ll take you far in writing, work, and life.P.S. You should follow me on YouTube: youtube.com/nathankontny where I share more about how we run our business, do product design, market ourselves, and just get through life.And if you need a zero-learning-curve system to track leads and manage follow-ups you should try Highrise.Writing style was originally published in Signal v. Noise on Medium, where people are continuing the conversation by highlighting and responding to this story.

Source: 37signals

Turning Text into a Tweetstorm

With tongue firmly in cheek, I created this script to take a chunk of text and break it up into a tweetstorm, for "readability". Sort of like the opposite of something like Mercury Reader. If the irony is lost on you, it's a gentle ribbing of people who chose Twitter to publish long-form content, instead of, you know, readable paragraphs.

See the Pen Turning Text into a Tweetstorm by Chris Coyier (@chriscoyier) on CodePen.
It might be fun to look at how it works.
First, we need to bust up the text into an array of sentences.
We aren't going to do any fancy analysis of where the text is on the page, although is presumably some algorithmic way to do that. Let's just say we have:
<main id="text">
Many sentences in here. So many sentences. Probably dozens of them.
Let's get our hands on that text, minus any HTML, like this:
let content = document.querySelector("#text").textContent;
Now we need to break that up into sentences. That could be as simple as splitting on periods, like content.split(". "), but that doesn't use any intelligence at all. For example, a sentence like "Where are you going, Mr. Anderson?" would be broken at the end of "Mr." and not at the "?", which ain't great.
This is find something on Stack Overflow territory!
This answer is pretty good. We'll do:
let contentArray = content.replace(​/([.?!])s*(?=[A-Z])/g, "$1|").split("|");
I didn't bother to try and really dig into how it works, but at a glance, it looks like it deals with a few common sentence-ending punctuation types, and also those "Mr. Anderson" situations somehow.
We need some tweet templates.
There are two: the top one that kicks off the thread and reply tweets. We should literally make a template, because we'll need to loop over that reply tweet as many times as needed and that seems like way to go.
I reached for Handlebars, honestly because it's the first one I thought of. I probably could have gone for the ever-simpler Mustache, but whatever it's just a demo. I also couldda/shouldda gone with a template via Template Literals.
To make the template, the first thing I did was create a tweet with mock data in just HTML and CSS, like I was just devving out a component from scratch.
<div class="tweet">
<div class="user">
<img src="https://cdn.css-tricks.com/fake-user.svg" alt="" class="user-avatar">
<div class="user-fullname">Jimmy Fiddlecakes</div>
<div class="user-username">@everythingmatters</div>
<div class="tweet-text">
Blah blah blah important words. 1/80
<time class="tweet-time">
5:48 PM - 15 Sep 2017

yadda yadda yadda
I wrote my own HTML and CSS, but used DevTools to poke at the real Twitter design and stole hex codes and font sizes and stuff as much as I could so it looked real.
To make those tweet chunks of HTML into actual templates, I wrapped them up in script tags how Handlebars does it:

yadda yadda yadda

Now I can:
// Turn the template into a function I can call to compile it:
let mainTweetSource = document.querySelector("#main-tweet-template").innerText;
let mainTweetTemplate = Handlebars.compile(mainTweetSource);

// Compile it whenever:
let mainTweetHtml = mainTweetTemplate(data);
The data there is the useful bit. Kind of the whole point of templates.
What is "data" in a template like this? Here's stuff:

Which we can represent in an object, just like Handlebars wants:
let mainTweetData = {
"avatar": "200/abott@adorable.io.png",
"user-fullname": "Jimmy Fiddlecakes",
"user-username": "@everythingmatters",
"tweet-text": "", // from our array!
"tweet-time": "5:48 PM - 15 Sep 2017",
"comments": contentArray.length + 1,
"retweets": Math.floor(Math.random() * 100),
"loves": Math.floor(Math.random() * 200),
"tweet-number": 1,
"tweet-total": contentArray.length
Now we loop over our sentences and stitch together the templates.
// .shift() off the first sentence and compile the main tweet template first
let mainTweetHtml = mainTweetTemplate(mainTweetData);

let allSubtweetsHTML = "";

// Loop over the rest of the sentences
contentArray.forEach(function(sentence, i) {

let subtweet_data = {
// gather up the data fresh each time, randomzing numbers and
// most importantly plopping in the new sentence:
"tweet-text": sentence,

let subTweetHtml = subTweetTemplate(subtweetData);
allSubtweetsHTML += subTweetHtml;


// Now dump out all this HTML somewhere onto the page:
document.querySelector("#content").innerHTML = `
<div class="all-tweets-container">
That should do it!
I'm sure there are lots of ways to improve this, so feel free to fork the Pen and have at it. Ultimate points would be to make it a browser extension.

Turning Text into a Tweetstorm is a post from CSS-Tricks
Source: CssTricks

Twitter Tests a 280 Character Limit: What You Need to Know by @MattGSouthern

Twitter is testing a 280 character limit while suggesting that letting people say more will get them to tweet more.The post Twitter Tests a 280 Character Limit: What You Need to Know by @MattGSouthern appeared first on Search Engine Journal.
Source: https://www.searchenginejournal.com/feed/

The Next Yahoo!

I haven’t read any commentaries on the new and recent Twitter change regarding the increase of characters per tweet (140 chars to now 280 chars) but I already have an opinion.
And… that doesn’t mean that my opinion is very good, but, I share a few candid thoughts this morning via my vlog here.

I thought that I’d have more to write and say about this particular topic but I’ve been staring at this draft for quite some time and have written and re-written a bunch of different things in the past 10 minutes, which, is already far too much time to give to such a small topic.
Perhaps that is the point.
Obviously, I’m negatively biased against Twitter already having formally quit from the service and have enjoyed a life without Twitter for quite some time now.
Trust me when I say that life is indubitably better without it, especially after having removed it from my phone. It did take a few weeks to get over the muscle memory of wanting to check it and, if I’m to be honest, I was quite alarmed at how strong that muscle and cognitive reflex really was.
It is a useless drug and does not outperform most apps when it comes to sharing information, retrieving information, “building relationship” (if you can call it that), and many of the other justifications that folks have shared with me about why they still use the thing.
Twitter is shit and this recent move to elongate the characters allowed is a visceral and tangible showcase of how much Twitter had already lost its way.
To be honest, the soul of Twitter was lost years ago… I suppose it’s just taken folks a while to realize that it’s been gone for quite some time. Twitter could have been something fantastic but I’m afraid it is the next Yahoo!.
The post The Next Yahoo! appeared first on John Saddington.
Source: https://john.do/

A question of skills

One of the first books I can remember reading was A Wizard of Earthsea. I was seven or eight, and it scared me to my core. That dark ocean was real and menacing in ways I couldn’t fully appreciate until later.Beyond fear, one of the things that stuck with me from that book was the idea of true names. David Mitchell’s love letter to Earthsea paints the picture:Knowledge of a thing’s true name brings mastery over the object, and as this applies to people as well, to tell someone your true name in Earthsea is an act of intimate trust.body[data-twttr-rendered="true"] {background-color: transparent;}.twitter-tweet {margin: auto !important;}We need to burn the hard/soft skills dichotomy to the ground. It's a garbage metaphor and reinforces gendered stereotypes. — @mulegirlfunction notifyResize(height) {height = height ? height : document.documentElement.offsetHeight; var resized = false; if (window.donkey && donkey.resize) {donkey.resize(height); resized = true;}if (parent && parent._resizeIframe) {var obj = {iframe: window.frameElement, height: height}; parent._resizeIframe(obj); resized = true;}if (window.location && window.location.hash === "#amp=1" && window.parent && window.parent.postMessage) {window.parent.postMessage({sentinel: "amp", type: "embed-size", height: height}, "*");}if (window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.resize) {window.webkit.messageHandlers.resize.postMessage(height); resized = true;}return resized;}twttr.events.bind('rendered', function (event) {notifyResize();}); twttr.events.bind('resize', function (event) {notifyResize();});if (parent && parent._resizeIframe) {var maxWidth = parseInt(window.frameElement.getAttribute("width")); if ( 500 < maxWidth) {window.frameElement.setAttribute("width", "500");}}I remember reading that tweet, and how violently I agreed with it. Hard/soft always felt jarring somehow. Ok, gone. I’m warming my hands on the smouldering embers of the dichotomy.“So, what do we call them instead?”Back in January, Seth Godin proposed vocational skills and real skills:Let’s call them real skills, not soft.Yes, they’re interpersonal skills. Leadership skills. The skills of charisma and diligence and contribution. But these modifiers, while accurate, somehow edge them away from the vocational skills, the skills that we actually hire for, the skills we measure a graduate degree on.So let’s uncomfortably call them real skills instead.Before we anoint a replacement, let’s take a moment. Why are we making that distinction? How does this benefit us? How does it help us to achieve our aims?Almost everyone I’ve spoken with, and every post I’ve read, agrees that hard skills are easier to measure. That soft skills are more difficult to pin down, but equally important (I’d argue even more so). I can buy that. So what?Dividing skills into types is an attempt to be more precise that costs us clarity instead of adding it. Our every instinct tells us that precision is valuable. Language is an evolving, imperfect attempt to describe the universe. When we reach for precision, we’re hoping to get closer to the true name of things.There’s a trap here. When we spend time and wit seeking a more perfect description of the different types of skills, we’re working at the wrong level of abstraction. Precision only helps us if it changes how we act.There doesn’t need to be a distinction. Skills are skills. We can teach them. You can learn them. There’s no meaningful difference in the steps you take to develop a ‘vocational’ skill or a ‘real’ skill, a ‘hard’ or a ‘soft’ skill. An authoritative taxonomy of skill types doesn’t change how you approach things.What do we need to pick up a new skill? Well, some combination of the following:TimeDesireAccess to knowledgePracticeObservationMaking changes in response to what you observeSupportMeasuring success is the same whether you are learning HTML or practicing sincerity. You observe outcomes. You need to understand what you are trying to do before you do it, a core part of mastering any skill.Making this change is pretty straightforward. When you are working on a job post, you already don’t mention hard or soft skills. You talk about the skills and experience you’d like an applicant to have. If you are working on a training plan for yourself or a team member, you can list the skills you want to focus on. Save yourself the mental overhead of working out if a skill is vocational or real. You won’t need it.We can discard the distinction without guilt. Chipping away at gendered stereotypes is reason enough. Part of the evolution of language is recognising when words are no longer true, or shouldn’t be. We should seek a more comfortable level of abstraction, a truer name.The names we choose matter.With endless thanks to Ursula K. Le Guin, who influenced me more than I ever realized. A huge thank you to Erika Hall for prompting this in the first place. Thanks also to Mathew Cropper, Chase Clemons, Brad Stott, Elliott Hilare and Yechiel K for talking with me about this and helping me to see beyond my limits. 💚 to Chase Clemons, James Glazebrook & Wailin Wong for editing.A question of skills was originally published in Signal v. Noise on Medium, where people are continuing the conversation by highlighting and responding to this story.

Source: 37signals

Pick A Fight (on Twitter)

body[data-twttr-rendered="true"] {background-color: transparent;}.twitter-tweet {margin: auto !important;}Hey @paulg, has Thiel now invested more in a Trump presidency than YC companies? https://t.co/1vdY8BdGDB — @dhhfunction notifyResize(height) {height = height ? height : document.documentElement.offsetHeight; var resized = false; if (window.donkey && donkey.resize) {donkey.resize(height); resized = true;}if (parent && parent._resizeIframe) {var obj = {iframe: window.frameElement, height: height}; parent._resizeIframe(obj); resized = true;}if (window.location && window.location.hash === "#amp=1" && window.parent && window.parent.postMessage) {window.parent.postMessage({sentinel: "amp", type: "embed-size", height: height}, "*");}if (window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.resize) {window.webkit.messageHandlers.resize.postMessage(height); resized = true;}return resized;}twttr.events.bind('rendered', function (event) {notifyResize();}); twttr.events.bind('resize', function (event) {notifyResize();});if (parent && parent._resizeIframe) {var maxWidth = parseInt(window.frameElement.getAttribute("width")); if ( 500 < maxWidth) {window.frameElement.setAttribute("width", "500");}}Basecamp CTO David Heinemeier Hansson is known for many things, including creating Ruby on Rails and writing business books. He also has strong opinions and likes to share them on the Internet! And sometimes DHH’s Twitter posts spark some lively debate, and by lively debate, we mean grown-ups yelling at each other in 140-character spurts.In the latest episode of the Rework podcast, I interview DHH about how Twitter is like a virtual pillow to scream into and the role that extreme voices play in moving important conversations forward. We also relive some of his memorable Twitter melees, including the one that got him blocked by Paul Graham.https://medium.com/media/1b48e4fe7c57bb13495643df3a81e9f7/hrefBe sure to subscribe to Rework so you get new episodes right as we release them. Also, if you have a question for DHH or Jason Fried, call 708-628–7850 and leave us a voicemail! You might hear them answer your question on a future mailbag episode.Pick A Fight (on Twitter) was originally published in Signal v. Noise on Medium, where people are continuing the conversation by highlighting and responding to this story.

Source: 37signals

To-Do List Apps Should Make Us Better Humans

One of the things that I’ve been incessantly obsessed with over the years as a professional is ensuring that I not only am using the best tools to get the job done but that I’m also reviewing the underlying behavioral mechanics that have driven me to choose one particular tool over another.
You see, there is a intimate relationship between my own natural behavior and the tools that I choose to use. The hope is, of course, that the right tool will exponentially increase my ability to execute and perhaps even automate that behavior without my explicit input.

Because this is what great software does: It distinctly makes life better by automating the very things that are already happening.
Better yet, some software (not as many as we may believe, unfortunately) can even create opportunities for optimization and streamlining that is intrinsically impossible given the principle resources (i.e. you, the user, the human).
This is the ideal, of course, but it is never without cost because any new tool that you introduce into your workflow may fundamentally transform other areas of your life and the much larger meta workflows. You may gain in one area at the cost of another. As the saying goes… caveat emptor!
This is why it’s important to consistently review your own toolset and to very simply ask if the benefits are grossly outweighing the costs. It’s why I revisit my own tools and update, remove, and prune as necessary.
The first paper sketch for George.
One particular type of tool that I have never been able to commit myself to is a To-Do List App.
Trust me when I say that I have tried everything – I have wanted to find one that works with my own behavior mechanics, the natural behavior that helps me get things done, but nothing has worked and nothing has stuck.
Instead, I’ve used existing tools and applications to help simulate a type of “todo” workflow that’s sufficient. In fact, my inbox and email have been my go-to so far and clearly existing my email strategy is working quite nicely. Heck, I even have a friendly relationship with it as I work my way to Inbox Zero multiple times a day.
But, it’s not perfect, which is why I’ll do new experiments with new apps and make serious attempts at it as well, like my most recent week-long move to Superhuman. I’ll always give new tools a decent “college try,” as they say.
Yet the To-Do List App has remained a mystifying challenge – why haven’t I been able to find one that would work with my existing workflow? What I know to be true is the following:

Most To-Do List Apps are far too bloated and complex. Most (if not all) of the apps out there have features that I would never use. This excessive waste is a major turn-off and ends up making the entire workflow too busy to be useful.
Consequently, most apps end up wasting a ton of your time in either configuration or the actual process of capturing the core components of the experience. These apps are meant to save you time, not drain it!
Most apps are “candy” and simply a bandaid to a much bigger behavioral problem. In other words, a good To-Do App will help you get stuff done while a great To-Do App will fundamentally evolve your behavior.

My ideal app would, therefore, quickly capture the items that I need to get done without friction and would also challenge me to become a better doer of those tasks.
Simply put, the perfect To-Do List App would make me a better human.
Is that too tall of an order? Perhaps, but, why shouldn’t we believe that technology can fundamentally transform us into better versions of ourselves? Why shouldn’t we expect the absolute best possible outcomes when we engage with thoughtfully designed tooling?
Let’s not lower the bar and lower our own reasonable expectations just because most of the tools at our disposal are shadows of what they really could and should be! Let’s keep the standard high!
I mean, does this resonate a bit?
So sad… so true…
I think I literally laughed out loud when I first saw this tweet! This has been my experience as well and why I recently began putting thoughts down on paper as it relates to my dream To-Do List App.
Could I put together something that could dramatically make me more productive and, consequently, make me a better person? I have no idea but the thought tickled me enough to give it a try.
Simple stuff at first. Nothing but the essentials.
Here’s the thing though… I have done immeasurably well without a dedicated To-Do List App and have built companies while getting attending graduate school (finished 2 masters degrees!) while raising 2 incredible children all the while keeping my marriage intact (praise the lord).
Clearly my own internal systems and methodologies have worked well enough to keep the proverbial “ship” afloat and even successfully sail (if we’re to keep this particular metaphor going…)!
I won’t lie… there is something within me that says this very small project is a shadow of a true itch, an attempt at building something where the end-result will be more self-awareness than an actual tool.
And perhaps it’s just because I want to build something myself instead of using something someone else has created. There’s always that possibility, especially for builders and creators.
Regardless, I’d say that the investment is and will be worth it. I want to codify my own natural behavior and try to hack it and make it principally better. It’s worth a shot, right?
Sure, why not?
Oh, and if you’d like to help me Alpha / Beta test the app then I am looking for a few dedicated folks to give it a serious run. Feel free to check the box when you sign up for my Personal Newsletter.
I’d love to have your help.
The post To-Do List Apps Should Make Us Better Humans appeared first on John Saddington.
Source: https://john.do/

Highrise 3.0 for iOS

For an app that’s been around since 2007, two iterations of its iOS app seems a bit on the light side. We agree. So today we have not just one announcement, but two:Highrise 3.0 for the iPhone is now available to everyone.It has the basics from before. Stay up to date on your team’s activity. Easily search your leads and quickly call, text, or get directions. Plan your day with tasks and follow-ups.And it has some important new features.Search leads by tag. View tags on contacts. See upcoming tasks when viewing a lead.Scroll through all of your tasks. Whether you have 2 or thousands of overdue or upcoming tasks… though we still can’t help you get them done. :)And more… like the ability to enter custom fields and choose from predefined values, dial incorrectly formatted international phone numbers, emoji, saved recent searches.Alas, it doesn’t have everything for everyone yet. Some will notice it doesn’t have Cases or Deals.But, our second announcement is that this is a whole rewrite of our mobile platform using C# and Microsoft’s Xamarin. This allows us to:update more frequentlyadd functionality easilyupdate it in parallel with our Android app. For those of you using the Android app from January, we have the same features headed your way soon!So we can get Deals and Cases added a lot easier now. Please stay tuned if that’s something you need. And if you want to hear more about our choice to use C# and Microsoft’s tools in our mobile development, here’s an interview with Michael Dwan our CTO.Here’s some feedback so far:Just Right (iankennedy) August 7, 2017 The perfect CRM for a small business with multiple offices. We use Highrise to coordinate several offices and hundreds of clients. The mobile app is great for entering quick notes or adding new contacts on the fly when out in the field. Take [conversation] out of email and put them in Highrisebody[data-twttr-rendered="true"] {background-color: transparent;}.twitter-tweet {margin: auto !important;}Lovin' the new @highrise iOS app! Great update! #CRM — @Dan_Agnewfunction notifyResize(height) {height = height ? height : document.documentElement.offsetHeight; var resized = false; if (window.donkey && donkey.resize) {donkey.resize(height); resized = true;}if (parent && parent._resizeIframe) {var obj = {iframe: window.frameElement, height: height}; parent._resizeIframe(obj); resized = true;}if (window.location && window.location.hash === "#amp=1" && window.parent && window.parent.postMessage) {window.parent.postMessage({sentinel: "amp", type: "embed-size", height: height}, "*");}if (window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.resize) {window.webkit.messageHandlers.resize.postMessage(height); resized = true;}return resized;}twttr.events.bind('rendered', function (event) {notifyResize();}); twttr.events.bind('resize', function (event) {notifyResize();});if (parent && parent._resizeIframe) {var maxWidth = parseInt(window.frameElement.getAttribute("width")); if ( 500 < maxWidth) {window.frameElement.setAttribute("width", "500");}}body[data-twttr-rendered="true"] {background-color: transparent;}.twitter-tweet {margin: auto !important;}The iOS update to @highrise is a huge jump forward. Hope that it allows them to roll out other improvements. — @sphfunction notifyResize(height) {height = height ? height : document.documentElement.offsetHeight; var resized = false; if (window.donkey && donkey.resize) {donkey.resize(height); resized = true;}if (parent && parent._resizeIframe) {var obj = {iframe: window.frameElement, height: height}; parent._resizeIframe(obj); resized = true;}if (window.location && window.location.hash === "#amp=1" && window.parent && window.parent.postMessage) {window.parent.postMessage({sentinel: "amp", type: "embed-size", height: height}, "*");}if (window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.resize) {window.webkit.messageHandlers.resize.postMessage(height); resized = true;}return resized;}twttr.events.bind('rendered', function (event) {notifyResize();}); twttr.events.bind('resize', function (event) {notifyResize();});if (parent && parent._resizeIframe) {var maxWidth = parseInt(window.frameElement.getAttribute("width")); if ( 500 < maxWidth) {window.frameElement.setAttribute("width", "500");}}If you enjoy it, we’d greatly appreciate a review on the App Store, and if you have any issues or feedback, there’s a Help & Feedback button in the app to send us your info.Download Highrise 3.0 for the iPhone.Highrise 3.0 for iOS was originally published in Signal v. Noise on Medium, where people are continuing the conversation by highlighting and responding to this story.

Source: 37signals

Crash Course: VR Design for N00bs

We have a tradition at Viget of experimenting with our own ideas, independent of client work. But, honestly, it’s been too long since we built something pointless. Today, we’re debuting our latest experiment in virtual reality—a WebVR adaptation of the classic circuit-board puzzle Lights Out. It’s a one-player game, with the objective of turning all the “lights” in the grid off.

[vimeo 228851698]

Sure, the final product is neat, but how did we get there?
Jumping into the VR metaverse is overwhelming. I was disappointed to find there are tons of libraries for developers—but very few centralized resources for designers. As creatives, we pride ourselves on our ability to apply design thinking to everything. So, where are all the thought leaders in VR design? There’s little to no consensus around even the most basic design standards—like typography or accessibility.
Basically, VR design is a wild west free-for-all.
However, instead of seeing this as a deterrent, I see it as a call to action. The more we create, the faster we learn. This is an opportunity to define the future web. Here’s a crash course to get started:
1. Know the difference between VR and WebVR
What’s the difference between VR and WebVR? The accessibility of the technology. WebVR doesn’t require any additional (very expensive) equipment to get started. All you need is a laptop, some WebGL chops, and a viewer—like Google Cardboard ($15). We actually did all of our prototyping with a Cardboard and the View-Master Deluxe VR Viewer ($40). WebVR is ideal for applications with light content and short user durations.
Better yet, users don’t even need to visit the app store. With WebVR, you can engage with the experience directly from your smartphone or desktop. Since it lives on the web, not in a native application, all viewers need is a simple hyperlink.

2. Put yourself in a box
Defining constraints in the beginning is essential. Frame them as actionable goals. For Lights Out, we wanted this experiment to be short and sweet. We decided on 3 constraints: we would build this for WebVR, Google Cardboard was our target device, and the project would last 4 weeks.
Aside from all the reasons why WebVR is awesome above, working with simple viewers like Google Cardboard afforded us energy to focus familiarizing ourselves with the basics—like integrating Microcosm with WebGL.
3. Before you sketch, read
Specifically, read Mike Alger’s paper on Visual Design Methods for VR. It’s the most comprehensive resource for volumetric user interfaces. While this paper primarily explores interface design of a VR-based operating system, his theories around content zones (pp. 36-46) were especially insightful for our exploration. If academic papers aren’t your thing, you can also watch his condensed VR Interface Design manifesto.
Leap Motion, a VR product company in San Francisco, also has a fantastic compendium of articles on everything from establishing space and perspective to sound design. This particular article dives into their initial explorations in user interface design.
4. Set up proper art boards
Sometimes the simplest tasks in a new medium are the hardest. I had to Google this. The width of your entire canvas should be 3600 pixels wide by 1800 pixels tall—which cleverly translates to 360° by 180°. Remember that only a portion of this segment is viewable at any given time. The dimension of the UI view is roughly 1,200x600 px. Here's an example of the setup I used for my UI. I denote these spaces as such in my working files:

5. Retina displays are not your friend
As we moved into prototyping, one of the first things we noticed was aliasing. As a result, I had to go back in and amend my designs to account for the low-fidelity output. Details like the fine, crisp lines had to quadruple in width and spacing.

6. Design and export textures in powers of two
If your interface contains any kind of SVG pattern, you’ll need to export them with sides equivalent to the power of 2 for optimization purposes. This is more efficient to store in video memory and easier for WebGL to map within the final geometry. Each side should be: 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, or 2048 pixels. Refer to the Mozilla Developer Network for more context on using textures in WebGL.
Finally, accept the fact that whatever you make—it will probably be bad.
Do you remember what websites looked like in 1999? Shudder. No one really knew what they were doing. But that’s how you learn, by trying (and failing). I’m sure we’ll all laugh about the first VR experiences 10 years from now. They’ll be kitschy and nostalgic, like arcade games. Embrace it.

Prayash, the creative developer in this collaboration, is currently working on a WebVR tutorial as a follow-up to this article. Excited? Me too. Tweet @_prayash and tell him you can't wait to see it.
In case you missed it at the top, try Lights Out and tell us what you think. And if you beat level 2 let me know—I still haven't figured it out yet.

Source: VigetInspire

7 Tips for the Aspiring UX Designer

This time last year, I had never heard of UX. Coming from a family of doctors, the only job-related acronym I knew was MD. But this changed during my summer in Silicon Valley, where I worked as a media intern with a startup accelerator and venture capital firm. Over the course of just three weeks, four colleagues told me that I should look into UX. I really think you would like this. You’d be so good at it!
Thinking it was some sort of sign, I decided to give UX a try. It was love at first sight.

From that point on, I spent my free time immersed in UX books, articles, and blogs. I had never felt so passionate about a field before.  I used my Christmas break to take an online UX course. I filled my schedule with phone calls with every UXer in my LinkedIn network. I convinced a professor to give me the last seat in her graduate level usability design course.
And after months of hard work, this intense immersion paid off. In April, I landed my dream job: a UX internship with Viget.
I might have “won the prize,” so to speak, but I haven’t forgotten all of the the stress, long hours, and uncertainty it took to get here. At first, like many aspiring UXers, I was totally lost.  What even is UX? How do I learn the skills I need? What do I need to do to get a UX job?
From my experience, finding answers to the questions can feel impossible.

But it doesn’t have to be that way. Here are 7 tips I’ve come up with to help others interested in pursuing UX get the answers they need...without the stress.

1.  Immerse yourself in UX knowledge

UX is a hot field right now, so there are tons of resources out there to learn more. The challenge is finding the right ones. Here are some of the resources I found the most useful starting off:
Don’t Make Me Think (Steve Krug) – this is UX must-read #1. It walks you through the basics of every aspect of UX, without overwhelming you with hyper-technical terms.The Design of Everyday Things (Don Norman) – although it’s centered around the design of physical objects, this book stresses the importance of understanding user needs. The Elements of User Experience (Jesse James Garrett) – this book will help you see the big picture of UX. It breaks down the complexity of the field into clear explanations and diagrams.
52 Weeks of UX – this is an easy and quick way to build your UX knowledge. Content is broken down into 52 weeks, each of which features 1-3 short UX insights. UX Booth – this site is made for beginners and intermediate UXers. Start with this article for a UX crash course.UX Magazine – this publication is like UX Booth, but with the addition of UX event calendars and job listings.
Brad Frost (@brad_frost) – a developer, designer, speaker, and writer, Brad  tweets about a wide variety of awesome web design stuff.Luke Wroblewski (@lukew) – currently a Product Director at Google, Luke is one of the most influential people in the UX field. (He coined the idea of “Mobile First.”)Kim Goodwin (@kimgoodwin) – author of Designing for the Digital Age, Kim offers great tips on what it takes to be a successful UXer.

2. Take an online class
If you prefer structured learning but don’t have the time or money for a full-fledged UX program, online classes could be the move.  There is a plethora of options out there, but based on my research and personal experience, here are the three classes I  would recommend:
Hack Design – 50 easy-to-follow (and free!) design lessons delivered straight to your inbox over the course of 50 weeksUser Experience Design Fundamentals – a cheap, video-based course that teaches you basic UX principles in just 10 hoursGeneral Assembly UX Design Circuit – if you have the time and money, this is a course worth investing in. You will learn key UX skills and put them to practice in a real project.

3. Find mentors
Although I learned a ton about UX from scouring the internet, reading books, and taking online classes, I have gleaned the most from conversations with people in the field.
If you live in a small city or somewhere non-techy, it may seem like you’re all alone in the big, scary world of UX. But chances are, you’re not.

Do some LinkedIn detective work.  Ask family and friends if they know anyone who does UX (if they look at you with blank stares, try “web design”).  Even if you only find one match, that one UXer can probably connect you to dozens more.
Once you’ve found these potential mentors, get their attention. Send emails and InMails, Tweet at them, reach out via their website. It may take months, but your perseverance will pay off.
When you land a conversation – whether by phone, in-person, or simply through email – make sure you show up prepared. Know what the person does and be ready to ask questions catered to that experience. I saw on your LinkedIn that you attended grad school for Human-Computer Interaction...do you think that’s the best path for becoming a UX Designer?  
Most people don’t want to simply tell you about their job – they want to tell you about the journey, the challenges and successes, and the learnings along the way. And they want to share those learnings with you.
Approach every networking opportunity as an opportunity to learn. Don’t waste your time figuring out how to make yourself sound as awesome as possible. Spend that time finding the best way to learn from each connection you make.

4. Attend local UX Meetups
Meetups are another great way to network with UXers in your area. They’re also an awesome opportunity to learn new design skills and discuss broader tech-related topics.
All you have to do is go to the Meetups app or website, search UX (try usability and interaction design if you reach a dead end), register for an event, and then show up.

5. Start a personal project
After you have some basic UX knowledge under your belt, you can take it to the next level by applying it to an actual project. If you can’t take a class or get an internship or apprenticeship with a company right away, don’t worry – you can do UX work anytime, anywhere.
There are several routes you can take:
Think of a website you hate. What makes you hate it? What could make it better? Now turn those ideas into designs – sketch out some ways you think the site could be improved.Send an email to a company you like asking if you can do some informal research on their website. Does it match the needs of the target audience? Does it follow basic UX design standards? Make sure to clarify that your only intention is professional development.Design your own app or website. You can use a  pre-existing product as a launching point or create something radically new.
No matter which route you choose, make sure you record every part of the project process so you can add it to your UX portfolio. Write about what you did, take photos of sketches and scribbles, and capture screenshots of sites that inspired your designs.  You’ll be able to compile case studies from these artifacts.

6. Analyze everyday experiences
An easy way to build your UX chops is to evaluate the experiences that everyday objects, products, and technologies create.  What could make them more intuitive or enjoyable to use? What prevents them from being this way?
For practice, think about how the principles of UX apply to these examples:

Can you think of other real-world applications of UX principles?
And most importantly...

7. Trust yourself
There are very few rights and wrongs when it comes to UX. There’s no right way to break into the field – no specific degree you have to get or class you have to take.  And there’s is no right way to design a website.
So if you’re worrying about not doing UX “the right way,” don’t.
As long as you’re absorbing all of the knowledge you can and then starting to apply that knowledge in your daily life, you’re already well on your way to becoming a UX Designer.
Have any tips you’d like to add to the list? Post in the comments below!

Source: VigetInspire

Playing with Shadow DOM

About a year ago, Twitter announced it would start displaying embedded tweets with the shadow DOM rather than an <iframe>, if the browser supports shadom DOM?
Why? Well, speed is one reason.

They say:
Much lower memory utilization in the browser, and much faster render times. Tweets will appear faster and pages will scroll more smoothly, even when displaying multiple Tweets on the same page.
Why the choice? Why is it necessary to use either iframes or shadow DOM? Why not just inject the content onto the page?

It's a totally understandable need for control. An embedded Tweet should look and behave just exactly like an embedded Tweet. They don't want to worry about the styles of the page bleeding in and messing that up.
An <iframe> makes style scoping very easy. Point the src of the iframe at a URL that displays what you want an embedded tweet to look like, and you're good. The only styles used will be those you include in that document.
Twitter does this iframe-injection in a progressive enhancement and syndication-friendly way. They provide a <blockquote> with the Tweet and a <script>. The script does the iframe-injection. If the script doesn't run, no matter, a happy blockquote. If the script does run, a fully functional embedded Tweet.
That script is the key here. Scripts can do just about anything, and they host it, so they can change it up anytime. That's what they use to detect shadow DOM support and go that route instead. And as we covered, shadow DOM is faster to render and has lower memory needs. Shadow DOM can also help with the style scoping thing, which we'll look at in a moment.
Height flexibility
There's another thing too, that happens to be near and dear to my heart. An <iframe> doesn't adjust in height to fit its contents like you expect other elements to do. You set a height and that's that. It will have scrollbars, if you allow it and the content needs it. Back in the Wufoo days, we had to jump quite a few hoops to get embedded forms (in frames) to be as tall as they needed to be. Today, at CodePen, our Embedded Pens have adjustable heights, but there isn't any option for just "as tall as they need to be". (I'm exactly sure if that makes sense for CodePen Embeds or not, but anyway, you can't do it right now.)
An element with a shadow DOM is just like any other element and that it will expand to the content naturally. I'm sure that is appealing to Twitter as well. If they calculate the height wrong, they run the risk of cutting of content or at least having the embedded Tweet look busted.
Most Basic Usage
Here's the bare minimum of how you establish a shadow DOM and put stuff in it:
See the Pen Most basic shadow DOM by Chris Coyier (@chriscoyier) on CodePen.
Notice how the styling within the Shadow DOM doesn't leak out to the regular paragraph element? Both paragraphs would be red if they did.
And notice how the paragraph inside the shadow DOM isn't sans-serif like the one outside? Well, normally that would be. Inherited styles still inherit through the shadow DOM (so in that way it's not quite as strong a barrier as an iframe). But, we're forcing it back to the initial state on purpose like this:
:host {
all: initial;
Handling that fallback
My first thought for dealing with a fallback for browsers that don't support shadow DOM was that you could chuck the same exact content you were stuffing into the shadow DOM into an iframe with srcdoc, like...
<iframe srcdoc="the same content">
Or more likely this is something you're doing in JavaScript, so you'd test for support first, then either do the shadow DOM stuff or dynamically create the iframe:
See the Pen Shadow DOM Basic by Chris Coyier (@chriscoyier) on CodePen.
Turns out srcdoc isn't the best choice (alone) for a fallback as there is no IE or Edge support for it. But also that it's not too big of a deal to just use a data URL for the regular src. Here's a fork by Šime Vidas where he fixes that up:
let content = `
body { /* for fallback iframe */
margin: 0;
p {
border: 1px solid #ccc;
padding: 1rem;
color: red;
font-family: sans-serif;

<p>Element with Shadow DOM</p>

let el = document.querySelector('.my-element');

if (document.body.attachShadow) {

let shadow = el.attachShadow({ mode: 'open' }); // Allows JS access inside
shadow.innerHTML = content;

} else {

let newiframe = document.createElement('iframe');
'srcdoc' in newiframe ?
newiframe.srcdoc = content :
newiframe.src = 'data:text/html;charset=UTF-8,' + content;

let parent = el.parentNode;
parent.replaceChild(newiframe, el);


Shadow DOM is pretty cool.
It's comparable to an iframe in many ways, including style encapsulation. Embedded third-party content is a pretty good use case.
It's possible to use it while falling back to an iframe pretty easily.
It's a part of the larger world of web components, but you don't have to go all-in on all that if you don't want to.

Here's another simple demo (this one using a custom element), but instead of rolling our own back support, it's polyfilled.

Playing with Shadow DOM is a post from CSS-Tricks
Source: CssTricks

Building the Best Relationships We Can

Maslow had it wrong. To get it right, we have to move social needs to the bottom of his pyramid.-Matthew Lieberman (Professor of Social Cognitive Neuroscience at UCLA and author of the book Social)Babies would die without their caregivers at birth. Study after study show the pain and ill we go through when we are isolated from others like us. As humans, we are wired to connect to one another.However, instead of connecting, we seem to be heading the opposite direction. On the streets and in restaurants people are looking at their phones instead of the person right next to them.Businesses strive to make everything quicker, faster, and automated. Sending automated welcome emails with generic information to everyone who signs up. Introducing artificial intelligence to weed through support inquiries instead of having someone read and respond to your query.It’s important to us here at Highrise to help people build great relationships. For many of our users, Highrise is an essential piece of that equation.But what about us? How is our relationship with our users?We try to make the welcome you get when signing up for Highrise a bit unique by changing the templates every day, asking people to chat, and a few other tweaks our CEO Nathan covers in detail here.But we want to go even further. What else can we do?Now, when you sign up for Highrise, you hear directly from me.And by “directly from me”, I mean you see me, you hear me, and I address your individual needs based on what you’ve told us about you so far.You get a personalized video.body[data-twttr-rendered="true"] {background-color: transparent;}.twitter-tweet {margin: auto !important;}I can't believe this is real. This is the most incredible onboarding I've ever seen from @highrise https://t.co/WEllIAgkGj — @nateberkopecfunction notifyResize(height) {height = height ? height : document.documentElement.offsetHeight; var resized = false; if (window.donkey && donkey.resize) {donkey.resize(height); resized = true;}if (parent && parent._resizeIframe) {var obj = {iframe: window.frameElement, height: height}; parent._resizeIframe(obj); resized = true;}if (window.location && window.location.hash === "#amp=1" && window.parent && window.parent.postMessage) {window.parent.postMessage({sentinel: "amp", type: "embed-size", height: height}, "*");}if (window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.resize) {window.webkit.messageHandlers.resize.postMessage(height); resized = true;}return resized;}twttr.events.bind('rendered', function (event) {notifyResize();}); twttr.events.bind('resize', function (event) {notifyResize();});if (parent && parent._resizeIframe) {var maxWidth = parseInt(window.frameElement.getAttribute("width")); if ( 500 < maxWidth) {window.frameElement.setAttribute("width", "500");}}I personally greet you and ask you what you specifically need. And how we can help solve the problems you are having with your business.The results so far have been really, really positive. And while making the human connection is the most important thing, we are hearing some really incredible feedback too.First of all, holy crap. I’ve never gotten a video as a welcome message from a SaaS product before. I’m really impressed.What an AWESOME email and video. Highrise is killin’ it! I really loved how personal this was.Thanks Alison. I appreciate the thought and effort!Hey Alison, that custom video for me was just mind blowing. Do you try to reach out to every customer that way? So impressed.We are still a few weeks away from finding out whether or not these videos have an effect on our conversion rate. But one other huge factor is at play too: the memory of someone who cares. — Even if Highrise isn’t a good fit now, you may recommend us to friends, or even come back when the time is right. But most importantly, you might remember the human that took the time to make the connection with you.As experts in helping people build great relationships, we keep learning too!Building the Best Relationships We Can was originally published in Signal v. Noise on Medium, where people are continuing the conversation by highlighting and responding to this story.

Source: 37signals

You Won’t Get Rid Of Your Problems. Best You Can Do Is Trade Up

body[data-twttr-rendered="true"] {background-color: transparent;}.twitter-tweet {margin: auto !important;}There are people who would love to have your bad days. — @thereaIbanksyfunction notifyResize(height) {height = height ? height : document.documentElement.offsetHeight; var resized = false; if (window.donkey && donkey.resize) {donkey.resize(height); resized = true;}if (parent && parent._resizeIframe) {var obj = {iframe: window.frameElement, height: height}; parent._resizeIframe(obj); resized = true;}if (window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.resize) {window.webkit.messageHandlers.resize.postMessage(height); resized = true;}return resized;}twttr.events.bind('rendered', function (event) {notifyResize();}); twttr.events.bind('resize', function (event) {notifyResize();});if (parent && parent._resizeIframe) {var maxWidth = parseInt(window.frameElement.getAttribute("width")); if ( 500 < maxWidth) {window.frameElement.setAttribute("width", "500");}}I used to have this business partner Jim. He’d drive me nuts. Our startup business was part of the second class ever of Y Combinator during the winter of 2006. We built a virtual stock exchange that businesses could use to improve their forecasts. This was the early days of Ruby on Rails in 2006. Back then, Rails apps required a lot of care and feeding — they crashed, a lot — with our increased load.Jim would wake me up after just a few hours sleep, “Nate, the site’s down again.” Requiring me to scramble. The growth of our app just gave us more problems. I was frustrated, exhausted and stressed. Jim’s attempt at comfort was, “These are good problems to have.” Thanks for nothing, Jim.Growing up, we didn’t have a ton of money, creating all sorts of problems I wished to eradicate later on in life. One example that’s going to be tough to forget — in college on a car ride back home, I rolled up to a gas station while running on fumes. I pumped the tank full. Walked into the gas station to pay and found my ATM balance was $0 and credit cards maxed. I was soaked in sweat as I asked my passenger if she had some money to lend me. Luckily, she was already planning on giving me gas money for the trip.It’s stuff like this that I couldn’t wait to get rid of as I got older. College would lead to a great paying job, and I’d move past these problems, and live a life far from this stress. But I got it all wrong.My 3 year old has a cold again. She coughed all night. Sleep sucked. My head hurts. I have a cold now too. My day also entails trying to figure out why our search engine traffic to Highrise has been sucking. I’m frustrated.But with the little bit of wisdom that comes with age, I realize more and more that my youthful desire to eradicate all the problems in my life was pointless. There’s always going to be a new problem I need to deal with. The sick kid. Her 3-year-old tantrums. The challenges growing a business already well ahead.And worrying about search engine traffic is far from the frustration I felt in that gas station 20 years ago. The problems I had running a startup trying to gain just a tiny bit of traction in 2006 was so much worse compared to running a business today with tens of thousands of happy paying customers today.Jim wasn’t wrong at all. We can’t eradicate our problems. Best we can try to do is trade up.P.S. You should follow me on YouTube: here, where I share more about how we run our business, do product design, market ourselves, and just get through life. Also if you’ve enjoyed this article, please help it spread by clicking the ❤ below.And if you need a no-hassle system to track leads and manage follow-ups you should try Highrise.You Won’t Get Rid Of Your Problems. Best You Can Do Is Trade Up was originally published in Signal v. Noise on Medium, where people are continuing the conversation by highlighting and responding to this story.

Source: 37signals

Enter the dot matrix

Illustration by Nate OttoTroy Henikoff was a college student in 1984 when he wrote his first program, a piece of software to help his grandfather’s steel warehouse manage their inventory. That summer project led Troy to start his own software consulting business a couple years later. This is an atypical Distance story about beginnings, endings and unexpected legacies.https://medium.com/media/e1b07d80fba4e2163e3f63e0c604a1a0/hrefTranscriptWAILIN: Troy Henikoff describes himself as an unintentional entrepreneur. Today he’s a well-known figure in Chicago’s tech scene, but when he began dabbling in computer programming and setting up his own business, there was no established startup culture for him to absorb. No networking events, no hoodies, no cliches about hustle or crushing it or changing the world. Troy’s story starts in 1984, at his grandfather’s steel warehouse on Chicago’s south side. He had just finished his sophomore year of college.TROY HENIKOFF: So that summer when I got to Chicago, I was given a bunch of tasks to get done, all the things that they hadn’t gotten around to, so getting quotations to get the roof fixed on the warehouse. The air conditioner in the office wasn’t working well. I had to find someone who could repair this like antique air conditioner. It was 1984 and my uncle actually was the one who said, “You know, these computers, these PCs are getting to be powerful. Maybe we can move our inventory from index cards” — literally three-by-five cards — ”onto a computer.”WAILIN: Welcome to The Distance, a podcast about long-running businesses. I’m Wailin Wong. Today’s episode is a little different from the kinds of stories we usually do. For starters, we’ve never featured a tech entrepreneur on The Distance, mostly because I’m more drawn to things like embalming fluid and tofu. But I really wanted to tell Troy’s story. So stick around, you won’t be disappointed.ROSA: The Distance is a production of Basecamp. I’m Rosa, a programmer at Basecamp. Basecamp is the better way to run your business. It’s an app for communicating with people and organizing projects and work. If you’re feeling overwhelmed by email, chat and meetings, give Basecamp a try. Sign up for a 30-day free trial at basecamp.com/thedistance.TROY: There used to be computer stores. There was ComputerLand and Entre, and I went to all these stores and asked, “What software do you have to help me manage inventory?” And it was all software designed for what you’d think of a hardware store. You have a certain type of product—a hammer, a screw—and you’d have a quantity of that product, and when you ran low, you’d order more of that product. The problem was, in my grandfather’s business, every single thing that came in the door, they did a chemical analysis of it to find out exactly how much chromium and zinc and nickel was in the steel. When people needed specialty steel, they’d call them and say, “What do you have that’s high nickel, low chromium?” So they never replaced inventory with something like it. Everything was unique, and so none of these software programs worked. And I was about to give up and I was at a ComputerLand and I saw a guy entering into an inventory system for them and I said, “Well, what program is that?” And he said, “Oh, I wrote that. That’s in DBase.” I said, “Well, what’s DBase?” And he started telling me about it and he’s like, “Let me show you the code.” And he did and it looked really similar to Pascal. And so I went back to my grandfather and my uncle and I said, I don’t think there’s a program out there that’ll do what you need it to do, but I think I can write one.WAILIN: Troy had taken one computer science class at Brown University, where he was studying mechanical engineering. That class was in Pascal, so he felt like he could figure out Dbase. The next step was to actually buy a computer.TROY: I just went to the Yellow Pages and started calling and trying to get the best deal I could ’cause I was afraid it was too expensive and my grandfather wouldn’t pay for it. And so finally, I found this place called MPK Computing and this guy named Michael, and he had the best price by about a thousand dollars, really cheaper. It was a PC with a hard drive, an external thing called a Bernoulli box made by Iomega with external hard drives, um, a printer, a monitor and a copy of Dbase.WAILIN: The guy who sold Troy the computer was named Michael Krasny, and he delivered the system from the trunk of his car. It cost $6,000. Troy studied the Dbase manual and started working on the inventory program. When he got stuck, he called Michael for help. Troy got it done in four weeks.TROY: I worked really late nights and long hours, but I got it running. And by the time I went back to school, it was working. It was printing out their inventory. It was managing the inventory. They were afraid to go entirely onto the computer, so what they had happen was the secretary — they had secretaries back then — would enter the steel as it came in and it would literally print out three-by-five cards that would go in the card file, which is how the salespeople were used to accessing the data. Except this time, instead of scribbling stuff out and erasing what was on the file when you sold stuff, it would get entered into the computer and a new card would get printed out.WAILIN: The next summer, after his junior year, Troy got another software job through a connection of his father’s. He wrote a program for a manufacturer of EKG electrodes to track raw materials and finished products, and he bought the computer from the same guy, Michael at MPK Computing. Troy went back to Brown for his last year, and then it was time to graduate. He had a mechanical engineering degree but was unsure what he wanted to do with it.TROY: You’re a mechanical engineer, what could be cooler than designing submarines and helicopters? So I was interviewing with General Dynamics and Sikorsky Aircraft and actually I got a job offer from General Dynamics and they were so excited. And you walked into this building that was just seven floors of football fields filled with cubes. It was horrible and you know, the manager sat in a little bigger cube at the front of the football field filled with cubes and he proceeded to try to woo me by telling me about this amazing project he had just worked on and how he had spent 18 months working on it and it was amazing. He had designed a hinge for a submarine door for 18 months. I couldn’t run out of there fast enough.WAILIN: Troy had another offer, from a small software consulting firm in Boston called DesignOptions. He liked the vibe of that company much better than General Dynamics, but he realized he wanted to be in Chicago.TROY: So I just turned to the only person I knew in the computer industry in Chicago, which was the person I’d bought our PCs from in the last two years, this guy named Michael. I told him the long story, I got this job at DesignOptions but I want to be in Chicago. Is there a DesignOptions in Chicago? And he says, “No, you should start one.” And I laughed out loud on the phone. And he said, “No, no, no, I’m serious. Why wouldn’t do it? You’re 21 years old, you have no mortgage, you have no car payments, no kids. You have the power of zero. The worst thing that could happen is you’d hate it and six months from now, you’d be 22, looking for a job. By the way, my company’s growing. I have four employees. I need a new accounting system. I’ve seen the work you’ve done in the last two summers. I thought I’d get a job cleaning up after this dumb college kid. I’ll be your first customer.”WAILIN: Troy moved home and into his parents’ suburban basement. He had about a thousand dollars, which was well short of the three thousand dollars he needed to buy a computer. But he figured he would work on his clients’ computers. So he paid a visit to customer number one, MPK Computing.TROY: I knock on Michael’s door. He says, “What are you doing here?” I said, “Well, I’m here to talk to you about your accounting system.” He said, “You mean my new accounting system? I just bought a Unix based one. It’s right here.” He had totally forgotten and he had gone out and bought an accounting system. So I lost my first customer before I was in business. It was definitely disappointing, but I wasn’t going to do this because I was going to write that one system. I was going to do this because I wanted to have a career in building things. You know, it was a very slow couple of months trying to get that first customer and the first customer came to me through — it was actually a friend of my parents, who we’re talking at dinner and said, “Oh, I have a friend who needs a computer system. You know, maybe Troy can help him.”WAILIN: Troy’s first customer was a man named Ben, who specialized in doing payrolls for musicians. Troy bought a computer, wrote a custom payroll processing program, and delivered the computer with the software to Ben. Then he got a second job writing a program for an investment firm. That client had a bunch of PCs at their office, including one dedicated to Troy’s project, so he camped out at the investment firm and worked the same hours as the employees there. But it meant he couldn’t take on a second client. So he finally got his own computer. Once again, he went to Michael at MPK Computing.TROY: January of ’87. I was probably three or four months in and bought what was an original IBM PC with a 20 megabyte hard drive, which seemed huge. Just to put it in perspective, so that would store three photos from my iPhone and it would be full, three photos. And it had a color monitor. I sprung for the color monitor. It was probably around $4,000 for all of that. That was a big leap because it was every dollar that I had made so far and it felt like a commitment. Now it’s not going from something like, oh I’ll do this for a couple of weeks or I’ll do this for a couple of — like, I’m gonna do this.WAILIN: Troy’s next customer was a man named Larry, who had a business running auctions of rare classical LPs. Troy wrote a software program for Larry to manage his auctions, and from there, his technology consulting firm kept growing. Troy called it Specialized Systems and Software. He brought in a partner, a friend of his from high school and college, and moved out of his parents’ basement into his own office. Meanwhile, his old friend Michael’s business was growing rapidly too, and he renamed it from MPK Computing to Computer Discount Warehouse, or CDW. The company would later go public and hit a billion dollars in sales, and they finally became clients of Troy’s.TROY: In 1992, so we’re six years into it, had about a dozen professionals, having a ton of fun, had just beat out Andersen Consulting, which became Accenture, for Hyatt’s worldwide purchasing system and we’re doing great. We’re having a ball. We had done probably 10 or 12 projects for CDW. We had done work for Abbott Labs, McDonald’s. And we liked the bigger clients. The bigger clients tended to be bigger projects, more money over a longer period of time, so it was easier to schedule and manage.WAILIN: One of those bigger companies was Medline, a manufacturer of medical products like bedpans and hospital linens. Around 1992, they wanted to digitize their old paper invoices, so Troy went to the Medline offices in the northern suburbs of Chicago for a meeting.TROY: It was in the boardroom at Medline, the big boardroom, and there were probably about 10 people around the table and I was up at the front, giving a little presentation to try to build credibility. And as I was doing it, I talked about how we had just completed Hyatt’s worldwide purchasing system. And the CEO of Medline, who was one of the founders, Jim Mills, stopped right then. And he pounded his fist on the table and he said, “You did purchasing for hotels? Well, then you could do purchasing for hospitals. Hospitals are just like hotels, only the people, they don’t feel so good.” And I looked at him and I said, “Well yeah, of course, I’m sure we could.” He said, “Okay, I want to hire you.” And I said, “Well, who do I talk to to write a proposal for the purchasing system?” He said, “No, no, no, you’re not listening to me. I want to hire YOU. I want you to come here, work for me.” And I said, “Well, I can’t. I have partners, I have employees, I have customers.” And he said, “Okay, then I want to buy your company. How much?” And I didn’t know how to respond. I looked at him and I said, “Well, it’s not for sale.” And he got angry. He said, “Everything’s for sale. Everything has a price, how much?” And we hadn’t contemplated any of this and we said, “It’s not for sale.” And so he asked me a couple of questions, how many people we had, how much revenue we had, and he made me an offer right there on the spot and I said, “Well, thank you, but we’re really not interested in selling.” And he stormed out and then his brother who was the president, John Mills, kind of followed him out and then a couple of the other people around the table, and there were two people left — and I wanted the business. I didn’t care if it was the business we came for, doing the invoice scanning system, or if it was doing this new purchasing system, I didn’t even know what was involved but I’m sure we could write it. But literally I was asking people, “Who do I talk to about this proposal?” And they’re like, “I don’t know, we’ll get back to you,” and I clearly had disrupted the entire meeting.WAILIN: Troy went back to his office. That afternoon, he got a call from John Mills, the president of Medline.TROY: And John said, ‘You know, my brother was serious. He really wants to buy your business.” And he made another offer and I said, “John, I’m really flattered. That’s really nice, but we’re not for sale.” And we really weren’t. We weren’t thinking about selling. I mean, we weren’t building the company because we wanted to build something and flip it. We were building the company because we were having a lot of fun. And then he called me back again the next day. He said, “You know, you’d be able to play in a much bigger ball field.” And I remember him, he said, “You’re playing in Little League now. I want you to come play in the major leagues.”WAILIN: That pitch from John Mills caught Troy’s attention and finally, he and his partners decided to sell Specialized Systems and Software to Medline.TROY: It was about loving what we do. It took a decent price and arrangement for us to decide to sell. So we would not have sold had it been a cash-only deal. Part of the attraction of selling was we got a lot more resources and we felt we’d be able to do more of this fun stuff, and so, you know, we went from 12 people to 55 people over the course of a couple years. John was right. We went from the little leagues to the major leagues in a very real way and that was as attractive, if not more attractive, than the cash.WAILIN: Troy’s business, Specialized Systems and Software, became Medline’s software division, and he negotiated the deal so that they could retain an entrepreneurial feel. They had their own office, in a separate suburb from Medline’s corporate headquarters, and they got a share of the profits they generated. Troy stayed at Medline for five years. After that, he founded or ran a series of companies. More recently, he’s become an investor and a mentor to other entrepreneurs. He founded an accelerator program that’s like a three-month bootcamp with funding for Chicago tech startups. Today he’s managing director at MATH Venture Partners, a venture capital firm he helped establish in 2015.TROY: When I started that first business, I had no idea what I was doing. I literally did not know a balance sheet from an income statement. What I was doing was going into businesses and asking lots and lots of questions. And when things didn’t make sense, I asked more questions and I asked more questions because I had to understand how the business worked in order to write a system that would support it. And in hindsight, I probably learned more running that very first business to set me up for what I do today — coaching and helping entrepreneurs, investing in companies — than anything else I could have done. Because I got to look under the covers. I got to see everything about how businesses worked. I saw their accounting, I saw their finances, I understood their processes and it was such an array of different businesses.WAILIN: I know this isn’t a typical Distance story. We usually feature independent businesses that have been running for over 25 years. Troy’s consulting firm is long gone, having been absorbed into Medline in 1992. But I wanted to tell you his story because some of the software he wrote way back in the 80s lives on in two of his earliest customers. One of these business owners is Ben, his first-ever client, who specializes in doing payrolls for musicians.TROY: A bandleader would have done a gig at a wedding and then would get a check for $2,000 and would call up Ben and say, “Hey Ben, I did a gig, it was $2,000. I want you to pay Joey $150, Mary $200, and the rest of it, you know, send back to me in a check. And they would send him the check for $2,000. He would do all of the payroll, the withholding, union reports, and whatever was left over, he got his fees out of it and he returned the rest to the band leader. He called it TEMPO and I forgot what TEMPO stands for.BEN: The Equitable Musicians Payroll Organization.WAILIN: The other business owner is Larry, who runs auctions of rare classical LPs.TROY: Larry was a reference from…I don’t remember.LARRY: I don’t actually know. I had to ask my wife. I knew it was through my wife and it was through an acquaintance of hers who simply heard that I was in need of a computer system for a small business, and he said in effect, “I know a guy,” and the guy he knew was Troy. I sell out of print classical recordings. I’ve been doing it since 1978, so in my 40th year now.WAILIN: Ben and Larry started their businesses when Troy was a teenager, and they’re still running their companies on the software Troy wrote for them. In the case of Ben, who handles payroll for musicians, he’s even kept the same hardware.BEN: Dot matrix pin feed, you know what that is?WAILIN: We’ll be bringing you Ben and Larry’s stories on the next episode of The Distance, coming up in two weeks.WAILIN: The Distance is produced by Shaun Hildner and me, Wailin Wong. Our illustrations are by Nate Otto. Look for us on Apple Podcasts, Google Play Music, or wherever you get your podcasts. if you have suggestions of businesses we should feature, you can email me at tips@thedistance.com or you can tweet at us @distancemag, that’s @distancemag. The Distance is a production of Basecamp, the app for helping small business owners stay in control of projects and reduce email clutter. Try Basecamp free for 30 days at basecamp.com/thedistance.Enter the dot matrix was originally published in Signal v. Noise on Medium, where people are continuing the conversation by highlighting and responding to this story.

Source: 37signals

What Does a Well-Documented CSS Codebase Look Like?

In the front-end community, there is a lot of attention related to documenting JavaScript. That's not so much the case with CSS. Often times I feel like lost when I join a project with minimal or no CSS documentation.
Even though CSS is relatively easy to write, it can be quite hard to maintain. The specificity, the global scope of everything, and the lack of guidance can easily lead to inconsistency, code duplication, and over-complication.
I've long been curious what a really well-documented CSS codebase looks like. Here, I'll share my experience, along with the expectations I have towards my vision of well-documented stylesheets.

It surprises me where I hear people say that commenting CSS is not that important. I imagine none of them have had to deal with 10,000+ line stylesheets! Often I've struggled with what HTML results in what specific style. Without having a solid context about the integrationdecisions taken, debugging efforts increase. WTFs per minute increase exponentially too.
Many times I've spent hours to figure out what the developer intended, why she didn't do it the another way, why is this layout seemingly so complex. There is much pain buried in these "why" questions.
So, here we go! Let's examine the 4 big signs of a well-documented CSS codebase.

1) CSS Tech Stack & Toolchain
There are likely things as part of our CSS code base like third-party libraries, mixins, or other tools. Looking in the package manager's dependencies list doesn't give a lot of context why the decisions were made to add these things, what they do exactly, and how we're using them.
It would be good for everyone to know why a certain library or tool was introduced. Imagine, for example, that a third-party library was introduced only to solve what has become an obsolete CSS issue. If we had context like that, we could make more informed decisions.
There sometimes can be quite a few third-party libraries in a project. Have you ever spent a bunch of time on web searching each one figuring out what it even is? It can be quite a challenge to know or to keep track of what each exactly does.
A well-documented codebase would include a description for each dependency. Perhaps you could the comment tweet-length (140 characters) explaining why it is there. That would give anyone else in the code base a head start on why something is there.
I like adding these descriptions right in the place where I @import them.
2) CSS Conventions
Good coding conventions result in consistent, readable, and unambiguous source code. They standardize the structure and coding style of an application so that you and others can easily read and understand the code.
It's important to know if there are any project-specific naming conventions or methodologies in place (like BEM, OOCSS, SMACSS, or ACSS). I've seen cases where a certain methodologies principles are applied but the actual rules followed are modified based on the preferences of the developers involved. So an indication how strictly we must follow the methodology principles would be good to leave in a well-documented code base.
This brings up the larger issue of CSS style guides. A naming convention is just one choice as part of a complete styling strategy. Other parts might be:

How is code sectioned?
How are files structured?
How are properties ordered?
How is commenting done?
How is the formatting done (indentation, rule declarations)?
How to bind JavaScript hooks to classes?
… and many more rules or anti-patterns like nesting more then 3 levels deep, avoiding ID selectors, using !important only for utility classes and etc.

All this makes up a complete CSS style guide. Having a shared vocabulary like this I'd consider a strong plus towards consistency.
3) CSS Architecture
Most scalable projects follow some type of architecture in terms of ordering styles. In a well-documented codebase, the fundamental principles that the project follows when structuring and sectioning styles should be mentioned.
I was first inspired to explore CSS architecture by watching Harry Roberts's talk about managing CSS projects. Here's Harry:

CSS architecture seems to be somewhat in vogue right now. It's something you've no doubt heard mentioned numerous times over the past year or so, and with good reason: UIs (and the teams that build them) are getting bigger and more complicated than ever before.
There are a number of aspects of CSS which make it troublesome. It's declarative, meaning there is no logic or control flow to tell other developers much about the state or construction of the project. It operates in a global namespace, meaning we get collisions, leaking styles and inadvertent regressions. It utilizes inheritance, making everything somewhat interdependent and brittle. Finally, the unavoidable specificity model can cause problems when selectors fight each other for prominence.

Therefore, he introduces a concept for architecting CSS called ITCSS. If you are working on a project of reasonable scale, chances are someone already defined similar principles or ideas that aim to resolve these problems. So in a well-documented codebase, I would expect to see them written somewhere.
One could tell if the architecture is explained well enough if you can answer the following question: Where should new styles or stylesheets be added?
4) CSS Component Descriptions and Examples
A common pattern is to separate the logical modules into CSS components (or "blocks" according to BEM). Some of them might be re-usable, some may not, but the important thing is that they are the building blocks of our project. Therefore, describing what they are should be a top priority in a well-documented codebase.
Ideally, you should arrange and group them, name them, and establish rules between them to generate an overview of all components. A well-described CSS component doesn't only include information about what the component does but also has other valuable intel like example HTML markup and the context in which it's meant to be used. Going one step further brings up the issue of Pattern Libraries. A pattern library is a collection of reusable components that can be used together to create a website. With modular, component-based architecture becoming a trend, they can bring huge value.
The goal of a pattern library is to show what can be built with existing patterns (components). But let's take a look at what additional information can be displayed alongside each pattern also. Vitaly Friedman shared a good summary on how taking the pattern library to the next level looks like. He states that focusing on components isn't good enough:

One of the main problems with pattern libraries is that, while they provide an overview of components, they often leave a lot open to interpretation. Components can be combined in a variety of ways, consistently and inconsistently. It's great to be able to see what button variants and iconography are available and what kinds of tables and pricing tags one may use, but what if you need to design or build an interface that contains all of these components at once — and perhaps another that doesn't yet exist in the library?
A list of modules alone wouldn't convey any context or any specifics on how the modules should (and should not) be used.

Based on Vitaly's post and Brad Frost's anatomy of a pattern in a pattern library, here are a few ideas I can imagine each of our patterns (components) could have, despite the usual unique name, code sample and a description of the component's purpose. Basic (fundamental):

Tags or categories: The assigned tags or categories for the component. Developers could tag their components with "in use", "needs refactoring" tags and etc.
Responsive preview: A real-life, resizable preview of the component, using the actual snippet of code being used in production. Alternatively, just a screenshot.
Versioning and legacy, team members involved or responsible: In a bigger team, the ownership of the (family of) components and which team members have been actively developing them could be really helpful for maintenance and further development.

… and here are a few more advanced:

Performance impact: Sometimes CSS could be heavy too. An indicator of performance or a "warning signs" section, outlining not only performance impact but also any common mishaps when the pattern is used incorrectly.
Accessibility implications: Indicator of accessibility requirements. Some components might require more work to maintain accessibility, especially if they interact with other components.
Related patterns: A quick overview of related components or the family of components that a given component belongs to. Could use an explanation of when to use a component, when not to, and why.
Fallback and print previews.

… the list goes on and on to whatever makes sense for your specific use-case.
A well-documented CSS codebase enforces consistency, boosts maintainability, and helps the team to build a shared vocabulary. It is a prerequisite for efficient CSS design and development. Moreover, based on my experience, it inevitably leads to better performance. I strongly believe that these are the signs of the professional execution of a project.
If you have thoughts, please feel free to add them in the comments below, so together we can come closer to better documentation practices.

What Does a Well-Documented CSS Codebase Look Like? is a post from CSS-Tricks
Source: CssTricks

Cleaning Up Twitter

One of the things that I’ve been doing, behind the scenes, is cleaning up a lot of my social network accounts that aren’t being used.
You see, even though I’ve put Twitter on “bot-mode” I still have a lot of other accounts that just need to be deleted entirely.

So, what I’ve done is delete nearly all of my Twitter accounts that I have (and I know how many I have via 1Password).
I couldn’t believe how many that I’ve had and it’s kind of embarrassing to be honest.
For every project that I created I started a new Twitter account because I believed that it was necessary for the project’s success.
I actually believe that you can be just as successful without Twitter and many of the social networks that the many “gurus” and “the pros” recommend.
You see, in a world where signing up for Twitter and using it to broadcast stuff out into the internet is incredibly easy I believe the stuff that ultimately lasts and gets the most attention and the things that create the most value for everyone involved is the hard stuff.
I’ve written before this a bit in the past and how the most important work is just plain hard. It’s hard. Not easy. Twitter? Easy. Most social media stuff? Easy. It just doesn’t make the impact that it once did (did it ever…?) and it wastes a lot of valuable time and focus.
And… on the topic of focus… and control…
Keep the tweet count low!
Finally, not only have I blown away most of my Twitter accounts is that I’ve set up a small script to delete any tweet that’s older than a week on my “main” account, @8BIT.
So, anything over a week just simply is erased so that anyone, for whatever reason, will just see the last week’s tweets. This required that I first deleted all tweets from my account(s) which was more than 70,000 tweets. Yikes.
The reason I’m doing this is because of privacy and control. I just don’t want old tweets to be part of the canonical story of my life. Rather, I want anything canonical to be found on a system that I ultimately control, just like I’ve done with LinkedIn.
Cleaning up Twitter and the accounts themselves has been an important part of my process of removing all of this noise from my life. It’s been great and I’m getting a bit addicted to this digital clean-up.
The post Cleaning Up Twitter appeared first on John Saddington.
Source: https://john.do/