Game of Thrones season 7 trailer

War, huh, good God, what is good for? Ratings and new HBO Now subscriptions, say it again. Finally, after six seasons of mere skirmishes, Jon Snow says “the Great War is here”. Excited for this, particularly because it appears to lack an aspect that plagued seasons in the past: Parliamentary Procedure with Daenerys Targaryen. (“Your dragon stole my goat! What shall we do about it?”) Anyway, excited for this!

Tags: Game of Thrones   trailers   TV   video
via kottke.org
Game of Thrones season 7 trailer

Judah vs. the Machines: SeuratBot is an artistic robot that knows art, but lacks purpose

If art is a window into the soul, what does art discover when it peers deep into the inner-workings of a robot?

In this installment of Judah vs the Machines, actor Judah Friedlander tests his art skills against a robot designed to make visually appealing art in different artistic styles.

Friedlander met with Alex Reben, a robotics designer in Berkeley, Calif., who has built a robot that can take images and recreate them with unique flairs. The robotic creation, called SeuratBot in honor of the French post-Impressionist painter, may not be pouring its heart and soul into the artwork it creates but its technical skills make it a formidable competitor for Judah who is obviously very passionate about the finer things.

Before jumping into a competition of artistic prowess, Friedlander took a tour of Reben’s home or, as he saw it, the “haunted robo-mansion.”  The place is filled with a bunch of weird zany knife-wielding robots and all-around weird things that seem very on-brand for Berkeley.

The art challenge was a doozy. With a model sitting in front of them, Judah and SeuratBot were forced to quickly sketch a portrait of her. After Reben gave SeuratBot a photo to work with, he instructed it to create a portrait in the style of pointillism.

A bonafide art critic was brought in to judge the art and staying true to style, he was more impressed by the emotion embodied in Judah’s work than the cold unfeeling photorealism of SeuratBot’s attempt. Though the robot may just be a glorified printer mixed with some fancy photo filters, aren’t we all just printers operating off pre-conceived notions birthed from stimuli we can’t control?

Check out the video above for some more insight on art, AI and why Isaac Asimov didn’t know what the hell he was talking about.

See all eight episodes of Judah vs. the Machines here.

via TechCrunch
Judah vs. the Machines: SeuratBot is an artistic robot that knows art, but lacks purpose

IKEA’s affordable smart lights will dim with your voice

Last month, IKEA launched its own line of low-cost smart lighting, called TRÅDFRI, and up until now, users have had to rely on a remote control or a proprietary app to use the product. But no longer.

Today, the Swedish retailer announced that their IKEA Home Smart products will respond to voice commands from Alexa, Siri, and Google Assistant starting this summer. Additionally, the product line will integrate with Apple’s HomeKit. "With IKEA Home Smart we challenge everything that is complicated and expensive with the connected home. Making our products work with others on the market takes us one step closer to meet people’s needs, making it easier to interact with your smart home products," said IKEA Home Smart’s business leader Björn Block.

Traditionally, smart lighting systems are pricey. Take Philips Hue, perhaps the best known smart lighting system. The Philips Hue Bridge 2.0, which supports 50 Hue lights, costs $60. In comparison, IKEA’s Smart Lighting System’s TRÅDFRI Gateway is half that price — just $30, though the number of lights it supports is unclear. Hue provides more choice in bulb types, from floodlights to spotlights, but IKEA wins on price — their standard bulb is priced at $12, compared to Hue’s $15. A $3 difference may not seem like much, but when you’re replacing every bulb in your house, that seemingly small gap can add up quickly.

Smart lighting systems may have once been a quirk for those with too much money on their hands, but with their arrival at IKEA, it looks like they’re here to stay. IKEA’s aggressive pricing makes smart, voice-controlled lighting more accessible to a wider range of potential buyers.

Source: Ikea

via Engadget
IKEA’s affordable smart lights will dim with your voice

Editorial Contest Winner Knocks Out Run, Hide, Fight Protocol in Schools

No Weapons

Sometimes we wonder if we’re getting through to younger generations when it comes to common sense.

This week, The Learning Channel has been sharing each of the ten essay winners of their Fourth Annual Editorial Contest and man, did today’s posted winner show that there’s hope for them yet!

15-year-old Daina Kalnina’s winning essay, ‘Stopping Bullets With Locked Doors and Silence Is Already Pulling the Trigger’, knocks out the active school shooter protocol “run, hide, fight”. Kalnina not only shared what it’s like to be a student in today’s schools but gave insight into why she feels students should, and could, do more to stop an active threat.

It has become very familiar for high-school students to practice the infamous level-three lockdown. In all cases, we all share the semi-nervous chuckle of “wow, maybe we get Swiss-cheesed today” and sit in a corner, stare at our phones and text our friends. Only very recently, after a vivid dream — moreover a nightmare — of a school shooting, did I realize that sitting in the dark and stopping bullets with locked doors and silence is the exact opposite of what one would want to do. It wasn’t until I stumbled upon the fact that the “people shot and killed in the Columbine library sat there for five minutes before the shooters entered and shot them.” My school is full of able-bodied kids, and surprisingly, a great chunk that has had experience with self-defense and even marksmen training. So why sit and wait?

To say that the drills today are relevant is a mistake. They do more than just offer very little protection; they also endanger students and teachers more so than ever before. The lockdowns I’ve been taught over and over again, sitting in the dark, actually tell future active shooters exactly where we’re going to be — cornered. More so, in The New York Times article, “In Shift, Police Advise Taking an Active Role to Counter Mass Attacks,” studies conducted by law enforcement in the Virginia Tech shooting showed that “the students and teacher blocked the door with a heavy desk and held it in place, [the shooter] could not get in, and everyone lived,” compared to those that tried to “hide or play dead,” in which almost all were shot or died. It is shown more clearly here than ever by making the vital choice to barricade and move as a means of security will utilize finite time better and save lives.

Many educators and parents have questioned the authenticity and have begun to develop alternatives for active-shooter lockdowns. The ALICE project is one such adaptation. Developed by a former SWAT officer Greg Cane, ALICE stands for alert, lockdown, inform, counter, evacuate. It provides specialized tactics for K-12 and higher education schools. Fundamentally, a moving target is harder to get an aim on than a stationary one. That same difference marks ALICE’s method from the old one; it encourages movement, distraction and most importantly, it encourages direct action from students and teachers. This significantly decreases the number of lives lost and helps me sleep a little bit better at night knowing that if the time ever comes, I’m not idly waiting to become Swiss cheese.

It’s unnerving that the students of this country must learn how to cope with active shooters.

It’s even more unnerving that current procedures say that they should sit, wait and die.

Well said, Daina! Let’s hope more students, parents, faculty, and politicians pay attention to the common sense idea that to act like a victim only serves to ultimately make you a victim.

The post Editorial Contest Winner Knocks Out Run, Hide, Fight Protocol in Schools appeared first on Bearing Arms.

via Bearing Arms
Editorial Contest Winner Knocks Out Run, Hide, Fight Protocol in Schools

Vyte makes it easy to invyte people to your calyndyr

Planning a meeting with me used to take hours. First you must bathe yourself in the ritual Spring of Understanding and then, once completely clean, you must enter the room of Writing Down The Appointment. Once that was complete, I required all those requesting a meeting to complete the three trials including the Making of the Hoagie and the Understanding (And Explaining) Of Django Programming. Ultimately few passed my tests.

Now, however, I just use Vyte. Vyte lets folks visit your private page – like mine – and select a date to meet. You can approve it, set a location, and even decline it. It’s much like competing services like Calendly but I particularly like the ease of use and design.

Founded by French techies Martin Saint-Macary and Philippe Hong the company is self-funded and just starting out. They have 200 paid companies and 6,000 monthly active users.

“I met Philippe at a startup competition a few years ago,” said Saint-Macary. “After enjoying working together on some side projects, we co-founded Vyte together. We started tackling the group scheduling issue, and later realised that oddly enough, scheduling 1-on-1s was a much bigger pain at work, so we refocused on that.”

The system syncs with your Google Calendar and the mobile app acts as its own calendar app, allowing you to replace your default one.

Sadly Vyte does not allow me to force those who wish and audience with me to complete the arduous task of Putting The Fitted Sheet Down The Right Way The First Time it does make it easier for me to pass the buck and say “Hey, click on this and pick a time and I’ll tell you ‘No.’” Thus, as they say, the great world spins.

via TechCrunch
Vyte makes it easy to invyte people to your calyndyr

Twitter’s New Privacy Policy Means You Need to Change Your Settings

Twitter recently introduced an updated privacy policy announcing changes to how they collect user data and deliver advertising into your timeline. So what does the update mean and what should you do about it?

If you haven’t logged in to Twitter since the changes were announced, you’ll see this message:

Read on to understand what those changes are, and then you can click Review settings to make the necessary changes.

If you’ve already dismissed the message, you can access these settings again by going to SettingsPrivacy and Safety. Scroll down to Personalization and Data and click Edit. This will take you to your Personalization and Data page.

New Personalization and Data Sharing Settings

Going to your Personalization and Data settings allows you to see (and adjust) how Twitter collects and shares your data. You can selectively enable or disable these personalization settings:

  • Personalized ads — If enabled, you will see interest-based ads on and off Twitter.
  • Personalization based on apps — Personalized ads and content based on the list of apps you have installed on your mobile devices. (Twitter can’t view data inside the apps.)
  • Personalization across devices — If enabled, Twitter can serve up ads, content, and users to follow in the mobile app based on sites you’ve visited on your laptop and vice versa. Twitter gives an example:
    • “If you visit websites with sports content on your laptop, you can use this setting to help control whether we show you sports-related ads on Twitter for Android or iOS.”
  • Personalization based on the places you’ve been — Personalized ads and content based on your current or previous locations.

You can selectively enable or disable the following data settings:

  • Track where you see Twitter content across the web — Personalized ads, content, and users to follow based on websites you visit that include Twitter content, like embedded tweets or tweet buttons. Your web browsing history will be stored by Twitter, but will not be associated with your username, name, email, or phone number.  Twitter will store this information for 30 days (compared to 10 days perviously) after which it will be deleted, aggregated, or obfuscated. Twitter users in the European Union and EFTA states (Iceland, Liechtenstein, Norway and Switzerland) are automatically exempted from this. Twitter gives the following example:
    • “If you regularly visit birdwatching websites, we might suggest accounts that frequently Tweet about that topic, or show you ads for binoculars or birdfeeders.”
  • Share data through select partnerships — Twitter is also asking permission to share data with partners. Twitter describes the data vaguely as “non-personal, aggregated, and device-level data.” Twitter doesn’t specify the partners, but does say that personal data you consent to share will not include your name, email, or phone number.

What You Should Do

While Twitter has earned criticism of privacy activists with these changes, and rightfully so since you’re automatically opted in to most of these settings, you can easily disable all personalization and access to your data.

Go to your Personalization settings and click the Disable All button at the top of the page.

If Twitter already has a list of the apps on your mobile devices, the list should be removed when you disable the feature.

In addition to being able to disable all of these settings, Twitter has also made it a little easier for you to see your Twitter data that is of interest to advertisers, and which advertisers have included you in their tailored audience lists on Twitter.

There are several things you can do with this data:

  • You can request a list of the advertisers and that list will be emailed to you when it’s ready.
  • You can adjust the interests Twitter associates with your account based on your profile and activity.

What do you think of Twitter’s new privacy and personalization settings? Are you comfortable sharing that data with advertisers? Do you think Twitter has done the right thing by giving users access to the settings or do you think they’re collecting too much information from their users? Let us know in the comments.



via MakeUseOf.com
Twitter’s New Privacy Policy Means You Need to Change Your Settings

Outreach raises $30 million pitching a tool sales teams can use to sell more and work less

Outreach, a software developer selling services that gives sales forces a needed prompt to more efficiently use their time and optimize sales, along with an organizational tool to manage their pitching process, has just raised $30 million with that very pitch.

The company touts its ability to triple the volume of meetings and increase the sales pipeline for front-line sales representatives.

Outreach works its magic by collecting data from a variety of sources including email and customer relationship management tools. It also automatically repopulates information back into existing customer relationship management systems.

Customers should think of Outreach as a layer of automation on top of the existing customer relationship management stack, according to Manny Medina, the company’s chief executive.

Indeed, writing in TechCrunch last year, contributor Karan Mahendru, a partner at Trinity Ventures agreed:

All of that said, the missing piece in this movement is sales automation. This will be a huge area of activity and acquisitions in the next few years as everyone tries to be the home screen for sales.

Companies like our new portfolio company, Outreach, and companies like SalesLoft and ToutApp are building the systems of action necessary to codify and apply essential productivity learnings and workflow solutions.

The sales tech stack is being built as we speak, and it’s happening in lockstep with the move from the one-to-many work of demand generation, to the one-to-one world of account-based sales and marketing. These trends are paving the way for the next generation platforms of engagement. For the first time, these tools and technologies are giving visibility into the “how” of sales, not just the “how much” which is both exciting and necessary.

In the end, the goal is to build software that actually helps salespeople close deals, not just add another reporting layer for management. We want software that allows sales professionals to be the best version of themselves.

The new financing was led by  DFJ Growth, while previous investors Mayfield, MHS Capital, Microsoft Ventures and Trinity Ventures participated in the funding. Four Rivers Group, another new investor, also came aboard.

To date Outreach has raised $60 million in venture funding.

Featured Image: Bert Hardy Advertising Archive/Getty Images

via TechCrunch
Outreach raises $30 million pitching a tool sales teams can use to sell more and work less

Judah Vs. The Machines

As Judah Friedlander himself teased on the Disrupt NY stage, today we present to the world: Judah Vs. The Machines.

Judah Vs. The Machines is an eight-episode web series that follows comedian Judah Friedlander as he takes on the world’s most sophisticated artificial intelligence systems to see who truly reigns supreme.

The series was produced by The Onion, in collaboration with TechCrunch, and is an excellent combination of informative content and hilarity.

You can check out all eight episodes below and enjoy a little binge view.

Episode 1: Judah Vs. Dog Breed Recognition Robot

Judah visits Facebook, an up-and-coming website. He learns how AI works on the platform and how difficult it is to translate emojis (emojii?). And he challenges its dog breed recognition software to see if man is still dog’s best friend.

Episode 2: Judah Vs. Art Robot

Judah meets Alex Reben, an artist and roboticist who has created a painting robot. He meets some of Alex’s weirder creations, such as a robot that intentionally harms humans. And he challenges the art-bot to an art-off in the final challenge.

Episode 3: Judah Vs. Soccer Playing Robots

Judah challenges RoboCanes, soccer playing robots from the University of Miami. He learns how well robots can work together and how bad they are at standing on two feet. And he challenges them to a match with the future of humanity on the line.

Episode 4: Judah Vs. Shopping App Thing

Judah meets Operator, an app that uses AI technology somehow. He pieces together some facts about the company, such as why their phone booths have no phones. And he acts as personal shopper in the challenge with Operator.

Episode 5: Judah Vs. Self-Driving Toy Cars

Judah challenges Anki, a self-driving toy car. He learns what it takes to be a robot and who to blame if things go wrong. And he faces the jeers of Anki’s creators in the final showdown.

Episode 6: Judah Vs. Hotel Delivery Robot

Judah meets Relay, a robot that delivers stuff to hotel rooms. He challenges this adorable robot to a game of customer satisfaction. And he answers the question: Can a man and a robot fall in love?

Episode 7: Judah Vs. Emotion-Identifying Robot

Judah visits Kairos, a company that creates AI to recognize human emotional states. He takes a grand tour of their one-room campus and faces off against their algorithms to see who can better detect emotions.

Episode 8: Judah Vs. Tedious-Tasks Robot

Judah meets BRETT, the Berkeley Robot for the Elimination of Tedious Tasks. He posits his own theory for what BRETT represents. And he challenges the robot to a toddler’s game in the thrilling conclusion.


via TechCrunch
Judah Vs. The Machines

You Can Now Comprehend Any Scientific Paper Using This Site

The web has brought scientific knowledge at our fingertips. But how do you make sense of it all? How can you even begin to understand complex papers without the requisite education and training?

Call upon the aid of artificial intelligence and meet Iris.AI. It’s a tool that gives you a shortcut to all the science that’s out there on the web. It acts as a science assistant and makes sense of any openly available scientific paper you come across.

What Is Iris.AI All About?

The goal of Iris.AI is to make scientific research simpler for people in all walks of life. You could be a PhD student or an entrepreneur, but either way there’s no way you can trawl through the millions of open-access scientific papers published every year and make sense of the research within them.

You might also fail to connect the concepts in one paper to other concepts in others. Even the smartest and best-equipped human brain just isn’t powerful enough.

You can run the tool in two ways:

  • Paste the URL of a TED Talk.
  • Paste the URL of a scientific paper.

Iris makes research a lot simpler. It identifies key points in the abstracts of a paper. The algorithm then organizes concept maps with the key points. And finally, it gives you access to the most relevant research papers which it groups by the concepts.

The concept map is a visualization which you as the researcher can use to get a bird’s eye view of the topic. And then, you can dive deep into it browsing to the most relevant among the 66 million open access research papers that Iris can crawl through.

Boost Your Search for Connected Ideas

Iris is not limited to one specific scientific field unlike many other AI technologies. It is young and is still being developed but the usefulness of the tool is clear. The tool can be a search engine for connected ideas and help even a non-scientist make sense of the data and perhaps use it in an innovation. The right kind of artificial intelligence can save you time


3 Magical Ways Artificial Intelligence Can Save Your Time




3 Magical Ways Artificial Intelligence Can Save Your Time

Artificial intelligence is cutting edge. But the ultimate goal is to simplify our lives We look at how AI can write your emails, schedule your meetings, and save you time.
Read More

.

Try out the still-developing science assistant and tell us if it helps you read and understand research better.

Image Credit: ESB Professional via Shutterstock

via MakeUseOf.com
You Can Now Comprehend Any Scientific Paper Using This Site

“Why We Didn’t Use A Framework” (Case Study)

When we set out to build MeetSpace1 (a video conferencing app for distributed teams), we had a familiar decision to make: What’s our tech stack going to be? We gathered our requirements, reviewed our team’s skillset and ultimately decided to use vanilla JavaScript and to avoid a front-end framework.

Using this approach, we were able to create an incredibly fast and light web application that is also less work to maintain over time. The average page load on MeetSpace152 has just 1 uncached request and is 2 KB to download, and the page is ready within 200 milliseconds. Let’s take a look at what went into this decision and how we achieved these results.

Further Reading on SmashingMag: Link

Requirement: Be Better Link

The most important requirement for the entire business was to build a better video conferencing tool. Many video conferencing solutions are out there, and they all suffer from really similar problems: reliability, connectivity, call quality, speed and ease of use. From our initial surveys, it was very clear that the most important problem for us to solve was to have flawless audio with low delay, high fidelity and high reliability.

We also found that the vast majority of our users (95% of those surveyed) were happy to use Chrome if it “delivered a superior video conferencing experience.” This meant we could use cutting-edge WebRTC technology to achieve our goals without having to launch on multiple native platforms, which would have been significantly more work. We decided to target Chrome and Firefox because of their WebRTC support, and we have our eye on Safari and Edge for the future.
According to our technical experiments, the best way to achieve high-quality reliable audio is to keep the app’s CPU and the network usage very low. This way, whenever traffic spikes on the network, there’s room to spare and the call doesn’t drop or stutter. This meant we needed to make our application very lightweight and very fast, so that it doesn’t take up any more of the CPU or network than necessary, and so that it is very fast to reload if things go wrong.

This was a big point in favor of using vanilla JavaScript and not a large framework. We needed to have a lot of control over the weight of the application, as well as its boot speed and idle CPU usage (changing elements, repaints, etc). This is a particularly low-level requirement that not many applications share. Many app vendors today aim to be better via superior UI and UX, more features and greater ease of use.

In our case, we needed 100% control over the UX of the video call to ensure that it was as light as possible and that we could maximally use whatever resources we had available to give priority to the call. As a bonus, this has the effect of not turning our users’ laptops into attack helicopters when their fans kick up to the max.

While I’d love to go into depth about how we did this with WebRTC, that’s a bit outside the scope of this article. However, I wrote an article about tuning WebRTC bandwidth by modifying the SDP payload7, which you can read if you’d like some details.

Small To Medium UX Needs Link

Next, we created rough designs for all of the pages we needed and took an inventory of the interactions we’d have on those pages. They ranged from small to medium interactions, with two pages being the most complicated. Let’s look at a few.

We had a lot of very small interactions. One example is a button to copy a link:

8
Input element with URL and button to copy the link

Here we have a simple <input> element with a “Copy” button that, when clicked, copies the link. For these kinds of interactions, we could use a very common style: a progressive enhancement pattern inspired by jQuery’s plugins. On page load, we scan for a particular selector representing the component and enhance it with click-to-copy functionality. It’s so simple that we can share the entire plugin here:

<form data-copy=true>
  <input type="text" value="{url}" data-click-select-all />
  <input type="submit" value="Copy" />
</form>
// Copy component
(function() {
 window.addEventListener("load", function() {
   var els = document.querySelectorAll("[data-copy]");
   for(var i = 0; i < els.length; i++) {
     var el = els[i];
     el.addEventListener("submit", function(event) {
       event.preventDefault();
       var text = event.target.querySelector('input[type="text"]').select();
       document.execCommand("copy");
     });
   }
 });
}());
// Select all component
(function() {
 window.addEventListener("load", function() {
   var els = document.querySelectorAll("[data-click-select-all]");
   for(var i = 0; i < els.length; i++) {
     var el = els[i];
     el.addEventListener("click", function(event) {
       event.target.select();
     });
   }
 });
}());

This component is actually made up of two different components: the copy component and the select-all component. The select-all component enhances an input by selecting the contents on click. This way, a user can click the input area, then hit Control/Command + C to copy on their own. Or, with the copy component, when the “Copy” button is clicked (triggering a form submission), we intercept the submission and copy the contents.

These interactions were so small that we decided that small vanilla components would be the simplest, fastest and clearest way to achieve the functionality. At the time of writing, we have about 15 of these small components throughout the app.

Medium: Dashboard and Chat Pages Link

We identified two pages in the app with larger UX needs. This is where we weren’t sure if we wanted to use vanilla JavaScript, a small library or a large framework. First, we looked at our dashboard:

Dashboard9
The Meetspace dashboard

On this page, the main dynamic part is the portraits inside the rooms. We wanted to have live feedback on who is in each room, and so we use WebSockets to push participant information to all clients in the dashboard when someone joins or leaves a room. Then we have to add that person’s portrait inside the room. We decided that we’d be fine taking a simple approach here by pushing all participants down the socket for each room upon any change, then clearing out the room and rendering all participants fresh each time. The HTML was so simple that we didn’t need to use templates — just a few divs and an img tag. The most complicated part was some dynamic sizing. We knew at the beginning we could get away with vanilla JavaScript here.

WebSockets ended up being quite easy to implement without a framework. Here’s the basic scaffold for our WebSocket interactions:

Dashboard.prototype = {
   connect: function() {
     this.socket = new WebSocket("/path/to/endpoint");
     this.socket.onmessage = this.onSocketMessage.bind(this);
     this.socket.onclose = this.onSocketClose.bind(this);
   },
   onSocketMessage: function(event) {
     var data = JSON.parse(event.data);
     switch (data.type) {
       case "heartbeat": console.log("heartbeat", this.roomID); break
       case "participants": this.participants(JSON.parse(data.data)); break
       default: console.log("unknown message", this.roomID, data);
     }
   },
   onSocketClose: function() {
     console.log("close", this.roomID);
     setTimeout(this.connect.bind(this), 1000);
   },
  // …
}

We initialize the socket when we construct the Dashboard instance, with a URL to our endpoint. Our messages are all in the format {type: "type", data: { /* dynamic */ }}. So, when we receive a message, we parse the JSON and switch on the type. Then we call the appropriate method and pass in the data. When the socket closes, we attempt a reconnection after waiting a second, which keeps us connected if the user’s Internet stutters or if our servers have rebooted (for a deployment).

Next, we got to the largest page in the app, the video chat room:

Video chat10
MeetSpace’s video chat page (View large version11)

Here we had numerous challenges:

  • people joining and leaving,
  • people muting and unmuting,
  • people turning the video on and off,
  • a custom “borderless” layout for varying numbers of participants (not possible with pure CSS),
  • WebRTC video capture and peer-to-peer streaming,
  • synchronization of all of the above across all clients through WebSockets.

For this page, we were really on the fence. We knew we’d be doing only a small amount of DOM manipulation (just adding simple elements for each participant), but the amount of WebSockets and WebRTC synchronization was a bit daunting.

We decided that we could handle the DOM and WebSocket events, but that we wanted some help on WebRTC, mainly because of cross-browser differences (WebRTC hasn’t fully settled down). We opted to use the official WebRTC adapter.js because we had a lot of confidence in a first-party solution (and it’s in use quite broadly). Additionally, it’s a shim, so we didn’t have to learn much to be able to use it, and its implementation is pretty simple (we knew we’d end up reading through a lot of it).

Hypothesis: Less Code = Less Work Link

In addition to all the research we did ahead of time, we also had a hypothesis that we were very interested in testing: Could using less code (from others and including our own) and implementing from scratch result in less total work?
Our guess here was that the answer is yes when it comes to small to medium workloads. We knew that we had only a handful of pages and a handful of UX experiences, so we decided to take a risk and go without a lot of dependencies.

We’d all used (and enjoyed) many different frameworks in the past, but there’s always a tradeoff. When you use a framework, you have the following costs:

  • learning it,
  • customizing it to fit your needs (i.e. using it),
  • maintaining it over time (upgrades),
  • diving deep when there are bugs (you have to crack it open eventually).

Alternatively, working from scratch has the opposite costs:

  • building it (instead of learning and customizing),
  • refactoring (instead of customizing),
  • solving bugs the first time (which others have already found and fixed in their respective frameworks).

We guessed that, because we fell in the medium area of the spectrum, working from scratch would be less work in total — more work in the beginning (but less confusion and learning), a bit more of our own code in total, less code overall (if you count dependencies), easy-to-fix bugs (because we don’t have to dig deep) and generally much less maintenance.

The Result Link

MeetSpace has been around for a year now, and we have been surprisingly stable and reliable! I mean, I guess I shouldn’t say “surprised,” but honestly, I thought that coding it vanilla would cause more problems than it did. In fact, having full error traces and no frameworks to dig through makes debugging much easier, and less code overall means less problems. Another “fun” benefit is that when anything goes wrong, we immediately know it is our own fault. We don’t have to troubleshoot to determine where the bug is. It is definitely our code. And we fix it fast because we are quite familiar with our code.

If you look at our commit graph, you can see we had a lot of work at the beginning, but then over time we’ve had only large spikes coinciding with features:

Commit graph12
MeetSpace’s code commits over time (View large version13)

We’ve never had any big refactorings or upgrades. The few times we did upgrade our libraries, nothing went wrong, because the updates were small and didn’t break the libraries’ APIs. It’s hard to compare with how much work it would have been had we used a framework, so the best we can do is to compare with past projects. My gut feeling is that, had we used a framework, more time would have been spent in total because of extra time spent learning the framework, tracking bugs through framework code and doing upgrades across framework versions. The best we can say about this project is that, over time, tracking down bugs and performing upgrades has been very little work.

Now, let’s get to the gory details: speed and size. For this section, I’ll talk about three pages: sign-in, dashboard and chat. Sign-in is the absolute lightest page, because it’s just a form and there’s no user context. Dashboard is our heaviest page that is mostly static. Chat is our heaviest page with the most action on it.

Bootstrap 4Foundation for Sites 6UIkit 3Current version, release date4.0.0-alpha 6, released January 20176.3.0, released January 20173.00 beta 9, released February 2017.

PageCold # requestsCold KBCold loadWarm # requestsWarm KBWarm load

Sign-in 13 87.2 253 ms 1 1.1 97 ms
Dashboard 23 210 318 ms 1 2.0 80 ms
Chat 13 202 321 ms 1 1.8 182 ms

“Cold” refers to the initial visit, when the cache is empty; “warm” refers to subsequent visits, when cached files can be used.

All our JavaScript, CSS and images are fully cached, so after the first cold load, the only request and transfer being performed is the HTML of the page. There are zero other requests — no other libraries, templates, analytics, metrics, nothing. With every page clocking in at about 100 milliseconds from click to loaded, the website feels as fast as a single-page application, but without anywhere nearly as much complexity. We set our Cache-Control headers far into the future to fully cache our assets. Ilya Grigorik has written a great article on HTTP caching14.

The majority of the page load is for waiting on the server to process the request, render and send the HTML. And I’m sure you’re not surprised to hear that our back end is also almost entirely vanilla and frameworkless; built with Go, it’s got an average median response time of 8.7 milliseconds.

Please note: This article and the benchmarks here are for MeetSpace’s inner application, not our marketing website. So, if you go to MeetSpace’s website, you’ll have to click “Sign in” to reach the main application, where these improvements reside. The main www site has a different architecture.

Would We Do It Again? Link

For MeetSpace? Definitely. What about other projects? I think that all of the research we did ahead of time, our hypothesis on cost and our results point to a pretty simple tradeoff based on one broad metric: complexity.

The simpler, smaller and lighter an application is, the cheaper and easier it will be to write from scratch. As complexity and size (of your application and of your team and organization) grow, so does the likelihood that you’ll need a bigger base to build on. You’ll see stronger gains from using a standard framework across a large application, as well as from using the common language of that framework across a large team.

At the end of the day, your job as a developer is to make the tough tradeoff decisions, but that’s my favorite part!

(da, vf, yk, al, il)

  1. 1 http://ift.tt/2reNlPi
  2. 2 http://ift.tt/2reXewJ
  3. 3 http://ift.tt/2oUjasy
  4. 4 http://ift.tt/1PfpkYH
  5. 5 http://ift.tt/2jT9jnj
  6. 6 http://ift.tt/1ISnyRc
  7. 7 http://ift.tt/2gPyz8W
  8. 8 http://ift.tt/2qvNDyE
  9. 9 http://ift.tt/2reHY2E
  10. 10 http://ift.tt/2pTLPOU
  11. 11 http://ift.tt/2pTLPOU
  12. 12 http://ift.tt/2rf00SB
  13. 13 http://ift.tt/2rf00SB
  14. 14 http://ift.tt/1mhZ1Hl
  15. 15 http://ift.tt/2reXewJ
  16. 16 http://ift.tt/1xEe2eY
  17. 17 http://ift.tt/1NHQz3A
  18. 18 http://ift.tt/1fE3YqF
  19. 19 http://ift.tt/2b7MKDy

↑ Back to top

Tweet itShare on Facebook

via Smashing Magazine
“Why We Didn’t Use A Framework” (Case Study)