Log 500 errors to a file

You might be familiar with the dreaded blank page when your PHP script doesn't work.

Here's how to spit out errors to the screen, instead of getting just a blank page, as well as logging errors to a file.

FreeCodeCamp Moves Off of Medium after being Pressured to Put Articles Behind Paywalls

After four years of publishing on Medium, FreeCodeCamp is migrating all of its articles to its own open source publishing platform, a modified version of Ghost. The platform allows approved authors to cross-post their blog articles on the new FreeCodeCamp News site for free, without any ads.

“Medium was a great place to publish because it helped a lot of people discover your articles. But the community has outgrown Medium,” FreeCodeCamp founder Quincy Larson said.

“Medium has shifted to a paywall model where they mainly recommend paywalled articles, then encourage visitors to pay to get around their paywall.

“At the same time, not much of the traffic to Medium articles comes from Medium itself. Most of it comes from Google and social media.”

In the detailed public announcement on the FreeCodeCamp forums, Larson said he noticed his articles started to get less distribution after he decided that putting them behind a paywall would not be compatible with the mission of his organization.

“As of 2019, Medium won’t give you much ‘distribution’ within their platform unless you’re willing to put your articles to be behind their paywall,” Larson said. “At the same time, if you do put your article behind their paywall, you’re limiting your readership to just the people who have the resources to pay. This is at odds with the goals of the freeCodeCamp community. We want to make these learning resources as widely available as possible.”

In an email to blog authors who had published on FreeCodeCamp’s Medium publication, Larson elaborated on more serious concerns that he had with the platform’s approach to his organization. Oleg Isonen, one of the blog authors, published the contents of the email, which was later deleted at Larson’s request.

“But over the past year Medium had become more aggressive toward us,” Larson said. “They have pressured us to put our articles behind their paywalls. We refused. So they tried to buy us. (Which makes no sense. We’re a public charity.) We refused. Then they started threatening us with a lawyer.”

Many of those who read the email encouraged Larson to write a follow-up article, as Medium’s tactics towards publishers are a matter of legitimate public concern, both to those who use the platform and readers who support the company through subscriptions.

Larson responded, confirming that he sent the email but that he wanted to move on from the situation.

The new freeCodeCamp News site has migrated the organization’s 5,000 articles that were previously posted on Medium. The articles will still be available on Medium, but from now on freeCodeCamp plans to publish on its own platform. The site promises users full control, better analytics, AMP support, and a better reader experience that doesn’t require people to sign in or pay to read articles.

“I’m optimistic that all of us in the developer community can start our own blogs on the open web, then use community tools like freeCodeCamp News to raise awareness of them,” Larson said.

Medium abruptly changed course in 2017 to become a publisher of subscription-based content, scrapping the ad-driven revenue model without notifying publishers ahead of time. Many publications that had invested heavily in building a following on Medium were forced to leave after discovering that the company did not have their best interests in mind. Medium’s new paywalled content model, which CEO Ev Williams claims is “a different, bolder approach” targeted at fixing what is broken with media, could not sustain publishers who were convinced to join the platform in its earlier days.

FreeCodeCamp joins a wave of other publications that are moving back to WordPress and other open source platforms. This trend is set to continue as Medium’s obtrusive popups and poor reader experience drive readers away from the content hosted there. Publishers who are in it for the long haul, those who value stability and full control of their content, will return to the open web.

Implementing Private Variables In JavaScript

JavaScript (or ECMAScript) is the programming language that powers the web. Created in May 1995 by Brendan Eich, it’s found its place as a widely-used and versatile technology. Despite its success, it’s been met with its fair share of criticism, especially for idiosyncrasies. Things like objects being casted to string form when used as indices, 1 == "1" returning true, or the notoriously confusing this keyword. A particularly interesting quirk though, is the existence of various techniques for variable privacy.

In its current state, there is no "direct” way to create a private variable in JavaScript. In other languages, you can use the private keyword or double-underscores and everything works, but variable privacy in JavaScript carries characteristics that make it seem more akin to an emergent trait of the language rather than an intended functionality. Let’s introduce some background to our problem.

The "var” keyword

Before 2015, there was essentially one way to create a variable, and that was the var keyword. var is function-scoped, meaning that variables instantiated with the keyword would only be accessible to code within the function. When outside of a function, or "global” essentially, the variable will be accessible to anything executed after the definition of the variable. If you try to access the variable in the same scope before its definition, you will get undefined rather than an error. This is due to the way the var keyword "hoists."

// Define "a" in global scope
var a = 123;

// Define "b" in function scope
(function() {
  console.log(b); //=> Returns "undefined" instead of an error due to hoisting.
  var b = 456;
})();

console.log(a); // => 123
console.log(b); // Throws "ReferenceError" exception, because "b" cannot be accessed from outside the function scope.

The birth of ES6 variables

In 2015, ES6/ES2015 was made official, and with it came two new variable keywords: let and const. Both were block-scoped, meaning that variables created with the keywords would be accessible from anything within the same pair of braces. Same as with var, but the let and const variables could not be accessed outside of block scope with loops, functions, if statements, braces, etc.

const a = 123;

// Block scope example #1
if (true) {
  const b = 345;
}

// Block scope example #2
{
  const c = 678;
}

console.log(a); // 123
console.log(b); // Throws "ReferenceError" because "b" cannot be accessed from outside the block scope.
console.log(c); // Throws "ReferenceError" because "b" cannot be accessed from outside the block scope.

Since code outside of the scope cannot access the variables, we get an emergent trait of privacy. We’re going to cover some techniques for implementing it in different ways.

Using functions

Since functions in JavaScript also are blocks, all variable keywords work with them. In addition, we can implement a very useful design pattern called the "module.”

The Module Design Pattern

Google relies on the Oxford Dictionary to define a "module":

Any of a number of distinct but interrelated units from which a program may be built up or into which a complex activity may be analyzed.

—"Module" Definition 1.2

The module design pattern is very useful in JavaScript because it combines public and private components and it allows us to break a program into smaller components, only exposing what another part of the program should be able to access through a process called "encapsulation.” Through this method, we expose only what needs to be used and can hide the rest of the implementation that doesn’t need to be seen. We can take advantage of function scope to implement this.

const CarModule = () => {
  let milesDriven = 0;
  let speed = 0;

  const accelerate = (amount) => {
    speed += amount;
    milesDriven += speed;
  }

  const getMilesDriven = () => milesDriven;

  // Using the "return" keyword, you can control what gets
  // exposed and what gets hidden. In this case, we expose
  // only the accelerate() and getMilesDriven() function.
  return {
    accelerate,
    getMilesDriven
  }
};

const testCarModule = CarModule();
testCarModule.accelerate(5);
testCarModule.accelerate(4);
console.log(testCarModule.getMilesDriven());

With this, we can get the number of miles driven, as well as the amount of acceleration, but since the user doesn’t need access to the speed in this case, we can hide it by only exposing the accelerate() and getMilesDriven() method. Essentially, speed is a private variable, as it is only accessible to code inside of the same block scope. The benefit to private variables begins to become clear in this situation. When you remove the ability to access a variable, function, or any other internal component, you reduce the surface area for errors resulting from someone else mistakenly using something that wasn’t meant to be.

The alternative way

In this second example, you’ll notice the addition of the this keyword. There’s a difference between the ES6 arrow function ( => ) and the traditional function(){}. With the function keyword, you can use this, which will be bound to the function itself, whereas arrow functions don’t allow any kind of use of the this keyword. Both are equally-valid ways to create the module. The core idea is to expose parts that should be accessed and leave other parts that should not be interacted with, hence both public and private data.

function CarModule() {
  let milesDriven = 0;
  let speed = 0;

  // In this case, we instead use the "this" keyword,
  // which refers to CarModule
  this.accelerate = (amount) => {
    speed += amount;
    milesDriven += speed;
  }

  this.getMilesDriven = () => milesDriven;
}

const testCarModule = new CarModule();
testCarModule.accelerate(5);
testCarModule.accelerate(4);
console.log(testCarModule.getMilesDriven());

Enter ES6 Classes

Classes were another addition that came with ES6. Classes are essentially syntactic sugar — in other words, still a function, but potentially "sweetening” it into a form that’s easier to express. With classes, variable privacy is (as of now) close to impossible without making some major changes to the code.

Let’s take a look at an example class.

class CarModule {
  /*
    milesDriven = 0;
    speed = 0;
  */
  constructor() {
    this.milesDriven = 0;
    this.speed = 0;
  }
  accelerate(amount) {
    this.speed += amount;
    this.milesDriven += this.speed;
  }
  getMilesDriven() {
    return this.milesDriven;
  }
}

const testCarModule = new CarModule();
testCarModule.accelerate(5);
testCarModule.accelerate(4);
console.log(testCarModule.getMilesDriven());

One of the first things that stands out is that the milesDriven and speed variable are inside of a constructor() function. Note that you can also define the variables outside of the constructor (as shown in the code comment), but they are functionally the same regardless. The problem is that these variables will be public and accessible to elements outside of the class.

Let’s look at some ways to work around that.

Using an underscore

In cases where privacy is to prevent collaborators from making some catastrophic mistake, prefixing variables with an underscore (_), despite still being "visible” to the outside, can be sufficient to signal to a developer, "Don’t touch this variable.” So, for example, we now have the following:

// This is the new constructor for the class. Note that it could
// also be expressed as the following outside of constructor().
/*
  _milesDriven = 0;
  _speed = 0;
*/
constructor() {
  this._milesDriven = 0;
  this._speed = 0;
}

While this does work for its specific use case, it’s still safe to say that it’s less than ideal on many levels. You can still access the variable but you also have to modify the variable name on top of that.

Putting everything inside the constructor

Technically, there is a method for variable privacy in a class that you can use right now, and that’s placing all variables and methods inside the constructor() function. Let’s take a look.

class CarModule {
  constructor() {
    let milesDriven = 0;
    let speed = 0;

    this.accelerate = (amount) => {
      speed += amount;
      milesDriven += speed;
    }

    this.getMilesDriven = () => milesDriven;
  }
}

const testCarModule = new CarModule();
testCarModule.accelerate(5);
testCarModule.accelerate(4);
console.log(testCarModule.getMilesDriven());
console.log(testCarModule.speed); // undefined -- We have true variable privacy now.

This method accomplishes true variable privacy in the sense that there is no way to directly access any variables that aren’t intentionally exposed. The problem is that we now have, well, code that doesn’t look all that great compared to what we had before, in addition to the fact that it defeats the benefits of the syntactic sugar we had with classes. At this point, we might as well be using the function() method.

Using WeakMap

There’s another, more creative way to go about making a private variable, and that’s using WeakMap(). Although it may sound similar to Map, the two are very different. While maps can take any type of value as a key, a WeakMap only take objects and deletes the values in the WeakMap when the object key is garbage collected. In addition, a WeakMap cannot be iterated through, meaning that you must have access to the reference to an object key in order to access a value. This makes it rather useful for creating private variables, since the variables are effectively invisible.

class CarModule {
  constructor() {
    this.data = new WeakMap();
    this.data.set(this, {
      milesDriven: 0,
      speed: 0
    });
  }

  accelerate(amount) {
    // In this version, we instead create a WeakMap and
    // use the "this" keyword as a key, which is not likely
    // to be used accidentally as a key to the WeakMap.
    const data = this.data.get(this);
    const speed = data.speed + amount;
    const milesDriven = data.milesDriven + data.speed;
    this.data.set({ speed, milesDriven });
  }

  this.getMilesDriven = () => this.data.get(this).milesDriven;
}

const testCarModule = new CarModule();
testCarModule.accelerate(5);
testCarModule.accelerate(4);
console.log(testCarModule.getMilesDriven());
console.log(testCarModule.data); //=> WeakMap { [items unknown] } -- This data cannot be accessed easily from the outside!

This solution is good at preventing an accidental usage of the data, but it isn’t truly private, since it can still be accessed from outside the scope by substituting this with CarModule. In addition, it adds a fair amount of complexity to the mix and, therefore, isn’t the most elegant solution.

Using symbols to prevent collisions

If the intent is to prevent name collisions, there is a useful solution using Symbol. These are essentially instances that can behave as unique values that will never be equal to anything else, except its own unique instance. Here’s an example of it in action:

class CarModule {
  constructor() {
    this.speedKey = Symbol("speedKey");
    this.milesDrivenKey = Symbol("milesDrivenKey");
    this[this.speedKey] = 0;
    this[this.milesDrivenKey] = 0;
  }

  accelerate(amount) {
    // It's virtually impossible for this data to be
    // accidentally accessed. By no means is it private,
    // but it's well out of the way of anyone who would
    // be implementing this module.
    this[this.speedKey] += amount;
    this[this.milesDrivenKey] += this[this.speedKey];
  }

  getMilesDriven() {
    return this[this.milesDrivenKey];
  }
}

const testCarModule = new CarModule();
testCarModule.accelerate(5);
testCarModule.accelerate(4);
console.log(testCarModule.getMilesDriven());
console.log(testCarModule.speed); // => undefined -- we would need to access the internal keys to access the variable.

Like the underscore solution, this method more or less relies on naming conventions to prevent confusion.

TC39 private class field proposal

Recently, a new proposal was introduced that would introduce private variables to classes. It’s rather simple: put a # before the name of a variable, and it becomes private. No extra structural changes needed.

class CarModule {
  #speed = 0
  #milesDriven = 0
  
  accelerate(amount) {
    // It's virtually impossible for this data to be
    // accidentally accessed. By no means is it private,
    // but it's well out of the way of anyone who would
    // be implementing this module.
    this.#speed += amount;
    this.#milesDriven += speed;
  }

  getMilesDriven() {
    return this.#milesDriven;
  }
}

const testCarModule = new CarModule();
testCarModule.accelerate(5);
testCarModule.accelerate(4);
console.log(testCarModule.getMilesDriven());
console.log(testCarModule.speed); //=> undefined -- we would need to access the internal keys to access the variable.

The private class field proposal is not standard and cannot be done without using Babel as of this writing, so you’ll have to wait a bit for it to be usable on major browsers, Node, etc.

Conclusion

That sums up the various ways you can implement private variables in JavaScript. There isn’t a single "correct” way to do it. These will work for different needs, existing codebases, and other constraints. While each has advantages and disadvantages, ultimately, all methods are equally valid as long as they effectively solve your problem.

Thanks for reading! I hope this provides some insight into how scope and variable privacy can be applied to improve your JavaScript code. This is a powerful technique and can support so many different methods and make your code more usable and bug-free. Try out some new examples for yourself and get a better feel.

The post Implementing Private Variables In JavaScript appeared first on CSS-Tricks.

Chrome DevTools Console

I'm not quite sure what happened, but at some point fairly recently, Chrome DevTools stopped showing things in the Console.

As a web developer, I obviously frequently use this to debug Javascript. Now, instead, there will be a little red circle with an error count in the top right corner of the DevTools window (as always), so it will recognize when there's an error, but the Console will be empty instead of spitting out what's wrong.

Even if I do console.log('foo'); from within a Javascript file, it won't write to the console.

I'm using what's currently the latest version of Chrome, Version 74.0.3729.169 (Official Build) (64-bit).

Help much appreciated as I don't like Firefox or Safari, but not having access to the Console is not sustainable.

Write to file in PHP

There are two ways to write to a file in PHP. You can either open a stream, and write to it in parts, or you can use file_put_contents() which is much more convenient, with the trade off being that it takes up much more memory, and is not ideal if you want to send a lot of data upstream.

40 of the Best Free Typography Fonts Choosen by Designers

typography fonts

The past few articles covered four of the most important categories of fonts: modern fonts, classic fonts, retro fonts, and vintage fonts. For today’s article, we won’t focus on a single category, but we will list the best typography fonts out there. What does this mean? Our professional designers have put up a list of the fonts they use the most and like the most. This list will include all kinds of fonts, from script, serif, sans serif, calligraphic, geometric fonts, to rounded, slab serif, and handwritten.

If the word FREE is music to your ears, then you better expect to see the best of the best free typography fonts cataloged below. Most of these amazing typography examples come from awwwards.com, so show your appreciation for their hard work by sharing, liking, and commenting in the comment section below. Let’s get started!

1. Wolf in the City

typography fonts

Wolf in the City is a classic, elegant handwritten font with amazing details, and 3 weights available.

 

2. WILD YOUTH

typography fonts

Wild Youth is a gorgeous brush script that will give your designs a natural look.

3. Linux Libertine

typography fonts

Linux is for fonts what Zeus is for Greek mythology. This typography font can easily be introduced to many projects, and will always be an important font found in books, dictionaries, and magazines.

4. Bebas Neue

typography fonts

Bebas Neue Sans Serif font inspires a versatility without limits.

5. Somatic Rounded

typography fonts

Risking to be a little bit predictable, this font looks like the best font for any mobile app.

6. Nautilus Pompilius

typography fonts

Nautilus Pompilius is a perfect script font that excels in symmetry and precision.

7. PILSNER & GUTENBERG

typography fonts

Yes, Gutenberg does have the smell of an old newspaper and will give your projects the needed old-school look.

8. Tracks Type

typography fonts

And if I said that Gutenberg smells like old newspapers, Tracks Type screams urban, modern font.

9. Campton Typefamily

typography fonts

This geometric sans that features perfect circles has a futuristic touch, one that will not go outdated any time soon.

10. Gandhi Sans

typography fonts

We need creative typography fonts like Gandi Sans when the meaning of the text is more important than the looks of a text. Use this font for meaningful projects.

11. Blenda Script

typography fonts

Blenda is a classic font that will always look perfect on packaging designs.

12. Bitter Ht

typography fonts

Serif fonts add wight to a font, making it stand out in the crowd. The same thing applied regarding this bold font.

13. Hello Stockholm

typography fonts

Hello Stockholm makes me nostalgic. This is the perfect example of how fonts carry a certain message and a certain feeling with them. You can enhance the meaning of a text by using an expressive font,

14. Poetesen One

typography fonts

Poesten One makes a great font for company logos and branding.

15. Free Font – New Day

typography fonts

New Day talks about a project that needs a futuristic touch.

16. Ginebra free font

typography fonts

Ginebra, as shown in the presentation image, is an amazing font suited for magazines.

17. Big John – Free Font

typography fonts

Both BIG JOHN and SLIM JOE want to be displayed on the billboards. Want to fulfill their wishes?

18. Fibre Free Vintage Font

typography fonts

This free vintage font features a great chuck texture, great for posters, book titles, and packaging.

19. Westfalia Free Font

typography fonts

You’ve probably seen this brush sans before because designers fell in love with it from the first sight. Did you?

20. Islander free font

typography fonts

Islander, just like Somatic Rounded, looks like the perfect font for a mobile app.

21. Simplifica – Free Font

typography fonts

Simplifica is not as simple as its name suggests. It actually comes with many alternatives to the font which will make it very difficult to choose the right one for your project.

22. Bohem Free Font

typography fonts

Bohem vintage font is the perfect font for all vintage product packaging and branding.

23. Playlist Free Font

typography fonts

Playlist has a natural feel to it, the right amount of naturalness for a cursive font.

24. Cast Iron

typography fonts

Cast Iron features elements of a unique 3D typeface which will make your text pop.

25. Noway Free Font

typography fonts

“Functionality is the smart way,” says the motto of this strong, bold font. No further description needed.

26. Elisabeth Font

typography fonts

Elisabeth is simple but modern, easy to incorporate into various projects.

27. Wavehaus Sans Typeface

typography fonts

Details make the difference. Did you not see the details of this font? Look again!

28. Wesley Gothic

typography fonts

If Wesley Gothic is indeed a gothic font, then it must be a modernized one. Use this unique font with care, as it might not do the magic to all your projects due to its complex particularities.

29. Youth Culture

typography fonts

Youth Culture reminds me of tattoo fonts. This says a lot about the personality of this amazing font.

30. Kitchen Sink

typography fonts

This wall texture marks an innovation in the history of textured fonts. Hard to miss in this sea of fonts online.

31. HK NOVA

typography fonts

HK NOVA’s bold font deserves to be placed on the cover of magazines and books of science.

32. Black Animal

typography fonts

This bold brush looks rather like a bold marker that highlights an important message.

33. Belda Regular

typography fonts

Belda is such an elegant and delicate font, exactly the looks this font will offer your designs.

34. Bunday Slab Bold , Light & Italic

typography fonts

Bunday comes with a package of contemporary moods and styles in almost 100 languages/

35. Aloja handwriting font

typography fonts

Aloja is such a joyful font, perfect for party posters, wedding invitations with a twist, and any other project you think it would work with.

36. Space Grotesk

typography fonts

At first glance, Space Grotesk looks like any classic font, but when studied a little bit more, you notice those little details that will intrigue any reader.

37. Fat Font

typography fonts

Fat fonts have one purpose only: to be the center of attention. And oh, do they do it with ease.

38. Labour Union

typography fonts

The Labor Union calls out for all the farmers to gather at the market.

39. Circus Display Font

typography fonts
The Circous explains itself and it does it right. It’s a font so full of personality!

40. Escucha (+ Consuela font duo)

typography fonts

Last, but not least, Escucha is the modern font that every designer needs in their tool kit yesterday.

 

Did I mention that all these fonts are free? Hurry to download them as soon as possible. Until later,

 

WDL

 

Read More at 40 of the Best Free Typography Fonts Choosen by Designers

HTTP Redirect in PHP

If you need your PHP script to redirect to a different website, you can send an HTTP header to do that.

Remember, header() must be called before any actual output is sent, which includes not just HTML, but blank lines, etc.. as well.

Automated Testing: Facilitating Continuous Delivery

It's no surprise that more organizations are making the shift from manual to automated testing — or that they're incorporating testing earlier in the software development lifecycle. Automated testing is a significant step on the road to continuous delivery. Download this guide to learn when to implement test-driven development, how to automate mobile UI testing, how to use natural language processing to write automated tests in plain English, and much more.

3 Key Metrics to Identify the Usability of Your Product

Is your app usable? Really? Did you check the metrics?

"Is your product usable enough to release now?" is the most difficult question to be answered when not backed up by usability metrics. Before understanding the key metrics of usability, though, we need to understand what usability is in the first place.

Per ISO standards (ISO 9241-11), usability is defined as:

Benefits of PrevNext

A lot of forums and blogs have links at the bottom of the article to jump to the Previous Post or the Next Post, by way of various forum and blog system PrevNext plugins. More recently, Q&A platforms have been shifting to show a sidebar listing of other similar questions asked. DaniWeb goes this route.

I was wondering if anyone out there has found either of these methods very helpful? What is the likelihood that, when stumbling across a question or topic as a result of a Google search, that you would have an interest in the question that just so happened to have been asked before or after?

I understand that the goal here is to increase time on site and user retention, but surely there are some better ways of going about achieving that. You know, ways that actually take the user's tastes or interests into consideration. Or, perhaps, I'm just way too much about data mining.

I guess the benefits are not so much for a Q&A site, but more for a discussion forum about a topic where there might be interest in browsing one topic after the next. What about going the route of infinite scrolling if that's the case?

Out of curiosity, what do the interwebs here think about news sites that do infinite scrolling on articles, such that you click on one article, and just keep scrolling infinitely down seeing one article after the next?

A problem that we definitely suffer from here at DaniWeb is people coming into an individual forum thread as a result of a Google search, and then bouncing as soon as they read what they needed to read. It's definitely a symptom of being the type of site where people typically visit only when they are actively trying to solve a problem, and are therefore goal-minded in their visit. They're not in the mindset to be like, "Oh, while I'm here trying to solve a problem, look at this nice purple forum I stumbled across. Let me stop what I'm working on and sign up and customize my profile!"

What could we be doing better, for example, to get this visitor to visit just one more page?

Re-Imagine Your Scrum to Firm up Your Agility

Happy workers come from true agility.

Many of today's enterprises are hardly fit to play a leading role in today's world. They are designed on the past-world premises of stability and high predictability, of repetitive work with easily scalable results. They experience profound difficulties having to navigate the predominantly uncertain and unpredictable seas of today's world.

An increase in agility is needed. They adopt Scrum. But rather than updating their past-world structures while introducing Scrum, they twist Scrum to fit their current organization. An illusion of agility is created as a result.

6 Common Mistakes to Avoid When Implementing Agile at Scale

The benefits of Agile and lean business approaches are widely acknowledged, yet the effective adoption and embedding of these practices in big corporate environments is much easier said than done. The theory makes sense in textbooks, and the practice is easily embraced in small product teams. However, the scale, complexity, and characteristics of big organizations create significant challenges with implementing these philosophies.

Only 12% of respondents say that their organization has a high level of competency with Agile

What Is a Code Review and Why Do You Need It?

Building a startup is hard, building software for it is not easier. But what makes software great? Good code. But how can you be sure that the code is good?

Working with many clients who came to us with software samples they would like to develop, we found out that, apparently, many freelance developers and even IT companies ignore the process of code review. Since we in GBKSOFT consider the code review stage to be a basic service, we decided to explain our perspective.

Take the Shortest Path to Success in Project Management

Are you planning to be a project manager? Project managers can easily qualify as the lifeline of a project. They are the ones who must make sure that things are done quickly and accurately. Not just that, a project manager also must make sure that the team sticks to the scope of the task. In order to accomplish all this, a project manager must have analytical acumen without letting the numbers diminish their creativity.

So, what does it take to become a project manager? The answer to this question is not a simple one, owing to the fact that there are multiple ways to become a project manager or to lead and coordinate a project. There are several factors that come into play, from skill to experience. In this article, we are going to discuss two paths to becoming a project manager: a more structured path led by formal education and training and a path guided by personal experience.

What Is Code?

Sometimes, it feels like people who can code seem like they have superpowers. But what is code, anyway? Code is all around us. Code is used in things like computers, phones, self-driving cars, and all other...

The post What Is Code? appeared first on Treehouse Blog.

Why Analytics Are More Important Than Ever

At the dawn of the computer age, there were many individuals that truly believed that while the Internet might be valuable, that it would not have a lasting impact on human civilization. Paul Krugman famously wrote in 1998 that the effect of the Internet on the world economy would be “no greater than the fax machine’sâ€. When one considers that Krugman is a Nobel Prize-winning economist, you start to realize that not everyone truly understood the digital transformation that was actually about to take place. Of course, now we completely understand that every business that takes itself seriously has to have some sort of an online presence, and that the Internet has forever transformed the way that human beings connect, consume, and interact.

The days of discovering the right keywords and optimizing them are not over by any means, but the truth is that we now have more data than ever to truly understand what consumers are looking for, and take advantage of it. While there are many businesses out there that certainly are luring in new customers thanks to SEO-focused content, blog posts, and linking out to authority sites - the truth is that digital marketing requires actual analytics more than ever. This is a bit of a “crisis†that the entire sector is facing, as digital marketers are increasingly struggling to improve ROI for businesses and brands, and corporations are shelling out more money than ever to try to figure out how to digitally market their products and services.

Digital marketers require a much more comprehensive view of what is happening with consumers than traffic and conversion. That’s why actual analytics are more essential to digital marketers than before, which is only natural considering that digital marketing has been utilizing some of the same tactics now for years. This is examining what device that your consumers are on, how much time they spend on which web pages, and interactions per visit. Is the consumer actually interested in your company’s services, or do they just find your blog posts valuable? You thought that your landing page was incredible, and laid out your price points quite eloquently - but why are consumers not spending more time on that page? What is your ratio of new traffic to returning traffic, and what are the reasons that it might be fluctuating? These are the kind of new questions that digital marketers have to constantly ask themselves in order to improve ROI for their clients.

The Past Is The Past

This also just simply isn’t about a website anymore. We all know that there are more ways than ever to communicate with the customer. It might be through Instagram lives, influencers, Facebook messages, apps that companies create, newsletters that corporations send, and more. There has to be much more to learn about than simply traffic, because there is more consumer data out there than ever, and more ways for consumers to engage with organizations of all sizes. This begs the question: what should digital marketers be thinking about? While it’s always great to know more about how much web traffic you are getting, what more can be done to make sure that more potential customers know about you, and are interested in what you have to offer?

In the past, digital marketers simply believed that the more content that was put out there, the more would be consumed. That’s why techniques such as “keyword stuffing†rose in popularity, because digital marketers knew that if they mentioned certain words, web rankings would improve, and that would mean profit for their clients. Of course, this simply isn’t nowhere near as effective as it used to be. These days, digital marketers are more interested in knowing WHAT KIND of marketing strategies work more than others.

Comparing Your Various Marketing Strategies

Let’s say that your company is a startup that is in an extremely competitive sector. As a digital marketer, both you and your client understand that gaining market share might take some time. You start strategizing about how to provide some value, and create a Youtube channel for potential clients to learn more about what you do. You might even hire an influencer to make sure that the videos reach a certain amount of people, as well. In addition, you also reach out to industry experts and ask if they might be interested in appearing on a podcast. Your organization has made it clear that they want as meaningful content as possible, and you are making sure that this is the case. Months might pass by, without any real metrics changing. After this time, all of a sudden, the startup is receiving more traffic than ever, and being discussed on social media.

You might check the Youtube videos only to find that no real progress has been made, despite the fact that the influencer is actively posting about your client. You switch over to find that the podcast has more listens than ever, because of a specific guest that is has been in the headlines because his company just got acquired by a major corporation. As a result, there are thousands of people listening in to the advice that he gave on the recent podcast. Now, your startup is receiving more traffic, and your client is actually gaining business.

A digital marketer has to be conscious of these immediate changes. While this story is obviously an anecdotal one, the truth is that digital marketers have to find out new ways to create content that fit with industry trends. It’s no secret that podcasting is a budding industry, as evidenced by the fact that one of the most powerful and influential tech companies in the world, Apple, is actively investing in the space. The Joe Rogan Podcast has grown tremendously over the past decade, and now regularly features presidential candidates attempting to spread their message. This is all just a testament to the way that content trends are changing. If digital marketers want to truly help their clients, they have to be aware of these trends and take advantage of them, because it could mean very real profit for them.

Focusing On The Consumer Journey

It’s no secret that companies and organizations have always wanted to know more about their customer, to figure out how to keep them happy. While customer retention has always been a focus, the truth is that digital marketers will have to zero in on the consumer journey more than ever. We all have taken a survey where a company asks us “How did you hear about us?â€, but that simply isn’t going to cut it in the future.

Digital marketers will have to know more and more about where these consumers are coming from. Are they visiting your client’s website because of a recent news article? Was it a positive news article, and why? Are potential customers visiting your website because of a press release that was recently circulated? Is it because it was discussed on social media by an influencer, or because your client’s app is rising up the stores? This kind of information will help to shape your content marketing strategy going forward.

Looking To The Future

The truth is that while digital marketers have been creating content in many different channels for some time now, their analytics will have to expand, as well. It’s no longer just about web traffic or customer retention. It’s about whether customers are visiting your website and mobile. Are they staying long enough? If so, what are they looking at? If they aren’t staying and your bounce rate is high, is it because of your load time? There is nothing more frustrating than waiting for a website to load, and if that’s the reason your customers are leaving - that’s important information, because it doesn’t really have to do with your product or customer service. If a digital marketer is truly on top of their client’s analytics, it can be an invaluable tool to creating new streams of revenue and saving massive amounts of money elsewhere, as well.

You can learn more about which social media platform ad campaigns are working, and why. Is it because of the copywriter that was hired? Is it because of the graphics or overall message that was conveyed? Why are many people adding products to a cart but the cart abandonment rate so high? Does this mean that your client is missing out on money by insisting on a price point? Would an effective sales promotion or newsletter change that situation and help your client make more profit than ever? Is one micro-influencer providing much more value for your client than the more expensive high-profile influencer that you previously hired, and why? In a world of ever-changing analytics, digital marketers have to understand that tracking all sorts of metrics might lead to insight that wasn’t previously available. While this doesn’t mean that ALL information is essential, it does require much more analysis on the part of digital marketers. As the saying goes, “knowledge is powerâ€, and certainly, when it comes to the digital marketing sector, “analytics are powerâ€, as well.