Emoji to Scale – A unique library that displays emoji at scale.
2021 Design Tools Survey – A look at how the design industry continues to shift in the remote world.
a11y myths – This resource debunks some of the most common website accessibility myths.
The State of UX in 2022 – Designers in 2022 have a unique opportunity to rebuild our practice with a new perspective, incorporating all we’ve learned since the start of the pandemic.
We’ve all heard the saying, “a designer is only as good as their clients.”
Some designers, regardless of skill level or experience, seem to always have the most interesting assignments that are creative, challenging, and highly paid, while others, who may have more experience, technical skill, or talent, get stuck working for peanuts on unfulfilling, low-level work.
Why is that? Why do some mediocre designers seem to always get the best jobs, while good, talented designers struggle in obscurity?
The answer almost always has to do with marketing. Every designer’s Achilles’ heel, marketing is nonetheless a vital part of freelancing success.
Today, I’m going to share some tips on how good designers can market themselves to exactly the kind of clients that will best suit their services.
It’s All Sales
What’s the difference between a good designer and a great designer? Notoriety, of course. There are literally thousands – possibly millions – of designers out there whose talent and technical skills rival or even surpass those of the tiny handful of designers who are “well-known” or famous.
Are those well-known designers doing something especially different that the talented designer “misses?” Well, yes and no. We already know they’re not necessarily better designers – perhaps their style is more in line with current trends and thus they’ve gotten more recognition in recent years, but good design is good design.
Trends come and go, but a strong understanding of basic design principles will never go out of style. So how do these famous designers differentiate themselves?
If you’ve ever worked in an office, you know that the management positions don’t always go to the most capable or competent leaders, hard workers, and visionaries.
In my time as a corporate employee, I saw brilliant, talented, creative people get passed over for promotions and high-level work by incompetent, lazy, belligerent jerks – over and over again.
Why? Because the jerks knew exactly how to market themselves to their superiors. They knew what to say and how to say it. Every job is a sales job.
It doesn’t matter if you’re a lawyer, an artist, or a Sunday school teacher – we all have to sell something to someone. And we all have to make ourselves known to the people who can help further our careers.
This applies doubly to those of us who make our living freelancing, as there’s no framework or built-in networking platform vis-a-vis a corporate job.
Selling the Experience
Designers who compete for freelance jobs have quite an uphill battle to fight. They constantly have to convince potential clients that they’re the best person for the job, while simultaneously diverting the client’s attention away from the zillions of other designers out there who provide essentially the same service.
Now, I’m about to say something that might depress many of you out there who are hoping for a freelancing miracle.
The sad truth of the matter is this: the typical design client knows next to nothing about design, and couldn’t care less about your technical knowledge, years of experience, or brilliant design sense.
Yup, it’s true. They just don’t give a damn. You say you’re an award-winning branding manager who’s been featured in industry publications? That’s nice. Don’t call us, we’ll call you. Standards-compliant web developer? Eh? What’s that?
It can be extremely frustrating when a client simply doesn’t care about the work you’ve put into perfecting your craft.
I could be smug and suggest that you only work with clients who do care, but that would be pretty irresponsible of me. No matter how far up the freelancing ladder you go, there’s always going to be a discrepancy between what you think the client should care about, and what they actually care about.
The key to selling yourself as a talented, capable designer lies in the way you present your skills.
The first thing to go should be the idea that you can somehow convince a non-designer to care about the intricacies of design. You can’t. Save it for your fellow designers, and instead focus on the experience you can provide your clients.
Your technical skills and knowledge are not experiences for your clients – they are merely attributes.
Put another way, when you see a television commercial for a pizza shop, do you ever see the inside of the actual pizza kitchen anywhere in the ad (not the fake set meant to sell you on “authentic Italian cooking” or some such nonsense)?
Do you ever see what kind of knife the chef uses to cut the pepperoni and other toppings? Or the Serv-Safe certificates of the pizza-making staff? Of course not.
What you see is a delicious-looking pizza, complete with sizzling sound effects and mouth-watering, rising steam, possibly being paraded in front of the camera on a round dish by an attractive, young actor dressed up as a server or a pizza chef.
In the background, you might see a laughing group of diners seated at a table, pulling apart their pizza slice by cheesy, gooey slice. You’re being sold an experience, not a simple list of attributes or qualities.
If your clients are decent and treat you with a reasonable amount of professionalism, they’re going to expect that you know what you’re doing. They will take it as a matter of course that you have all the necessary skills and know-how to complete the job adequately.
A simple list of the things you can do isn’t going to impress them. You need to sell them an experience – the sizzle, not the steak, in other words.
Having a Backup Plan
You’ve probably heard of the recent business phrase “multiple streams of income.” It’s become quite a popular goal for business owners and freelancers, especially since the internet has become a powerful and simplified way to make multiple income sources a reality.
But you don’t have to be a fast-talking, greasy-haired entrepreneur wannabe to take advantage of this important idea.
Today’s economy makes it challenging for even the most established freelancers to stay afloat, and if your client base is too small, you could find yourself in real trouble if one of them stops calling.
Creating an exclusive niche for yourself is important, but it’s equally important to have a large enough pool that you can easily generate new business.
Keeping up with your marketing efforts, even if you can’t currently take on the new work, will ensure that you always have prospects lined up just in case one of your current clients falls through.
Also, don’t be afraid to ask your current or past clients for referrals. Generally, people are happy to spread the word about freelancers who have done a remarkable job.
And as a bonus, you’ll widen the net of clients who are similar to those clients you’ve already worked for, since people tend to talk to their friends in the same industry.
So, how did 2021 work out for you? For this grumpy designer, the year felt quite similar to 2020. Uncertainty, along with both personal and professional challenges were around every corner. Let’s pat ourselves on the back for making it this far.
Now it’s time to straighten up and get ready for another go. 2022 promises to be an eventful year – particularly for web designers.
Do you know what that means? Predictions! But these aren’t the play-it-safe, incremental types of prognostications you’ll see elsewhere. If you’ve read my past columns, you know that I aim for the moon. And this year will be no different.
In fact, let’s see what I can get away with up the ante. The following are the boldest (notice the bold type) predictions for 2022 you’ll find anywhere.
Google’s AMP Fiasco Will Be Resolved
It turns out that Google’s vision for AMP (Accelerated Mobile Pages) didn’t pan out quite the way the omnipresent company had anticipated. Instead of becoming a fast-loading proponent of the “open web”, the framework generally frustrated both developers and publishers alike.
But the real kicker has been the antitrust allegations put forth. Unredacted documents seem to indicate that the real goal was to crush competing advertisers while providing very little benefit to participating websites. Even the perceived speed benefits have come under fire.
These are very serious assertions that will likely play out in a courtroom. But I predict that everyone involved will come to a reasonable solution. One that not only gives AMP’s users some peace of mind but will also result in some major concessions from Google.
How Will It End?
To make up for allegedly slowing down competitor’s ads, Google will introduce “dialup mode”, a universal 10-second delay when loading all of its web properties. Think those ads at the beginning of your favorite YouTube videos are annoying? Imagine waiting 10 seconds for search results to pop up. It’ll be like 1997 all over again.
As an extra measure, irrelevant (and potentially inappropriate) emoji will be interspersed throughout Google’s API documentation.
The Web and Metaverse Will Become BFFs
Facebook’s embrace of the metaverse was a shock to the system. It was so out of the blue that, for some reason, it felt as though they were trying to change the subject. Hmmm…🤔
But there’s certainly intrigue with this virtual world. Watching an early commercial from Meta (oh, that’s Facebook’s name now), one can’t help but want to become fully immersed.
As I see it, this is bigger than just a single social network. The metaverse belongs to all of us. And the web will be the perfect place to give people what they want.
Thus, web designers had better get ready. Our clients are going to start asking us to implement these “Meta®” features into their sites. And just think of the possibilities:
A convenience store website where users can simulate the experience of paying for bottled water;
A “virtual ATM” that allows banking customers to enter their secret PIN while friendly forest creatures look on;
Online events that teleport attendees to the surface of Mars – complete with space dust;
This new MetaWeb (that’s what I’m calling it) will place users anywhere and everywhere at once. After the initial confusion wears off, we’ll be in for quite a ride.
Unintended Side-Effect
All avatars within the MetaWeb will be non-fungible tokens (NFTs). As such, losing your password will also mean a loss of identity. Oh well, it’s always nice to start fresh. Try doing that in the real world!
The Continued Gentrification of WordPress
Just like major cities around the world, WordPress has been dealing with gentrification. Out with the old way of doing things and in with the new. You can see it all around the community and ecosystem.
The shakeup started with the Gutenberg block editor, which is rapidly taking over various pieces of the content management system. It’s not just for editing posts. Indeed, it has now enveloped both the widgets screen and even the entire layout of a website via Full Site Editing (FSE).
Elsewhere, plugin and service provider acquisitions were everywhere. Many longtime community members sold off their products to larger firms, leaving users to wonder what it all means.
I don’t expect this to slow down in 2022. If anything, it’s going to ramp up to warp speed. Here are just a few major changes in store:
Competitor Site Editing (CSE)
Why stop at simply editing every aspect of your own website? That’s the idea behind CSE. The feature will provide site administrators access to the innards of a random competitor’s site. While any advantage you might gain is temporary, the ensuing game of tit-for-tat will be incredibly energizing.
The Plugin Acquisition Plugin
For those with a lot of cash or crypto in reserve, this will be a must-have plugin for 2022. And, unlike so many other areas of WordPress, the UI is dead simple.
First, connect your financial accounts via an API. Next, a checklist of WordPress plugins is displayed on the screen. Check off the plugins you want to own and…boom! They’re now in your portfolio.
It’s that easy. Just make sure to send out a reassuring press release to your new customers after each acquisition.
Final Prediction: Web Designers Will Adapt and Thrive
While the above predictions may be in jest, one thing is for certain. Web designers will continue to adapt to a changing landscape. That’s a safe bet in any year.
Thanks for reading. And here’s wishing you a happy, safe, and successful 2022!
WordPress 5.9 Beta 2 is now available for testing!
This software version is still under development. Please do not run this software on a production site. Instead, install it on a test site, where you can try out the newest features to get a feel for how they will work on your site.
You can test the WordPress 5.9 Beta 2 in three ways:
Option 1: Install and activate the WordPress Beta Testerplugin (select the “Bleeding edge” channel and “Beta/RC Only” stream).
Option 2: Direct download the beta version here (zip).
Option 3: When using WP-CLI to upgrade from Beta 1 to Beta 2 on a case-insensitive filesystem, please use the following command sequence:
Command One:
wp core update --version=5.9-beta1
Command Two:
wp core update --version=5.9-beta2 --force
The current target for the final release of 5.9 is January 25, 2022, which is just seven weeks away. Your help testing this version is a vital part of making this release as good as it can be.
Some Highlights
SinceBeta 1, 24 bugs have been fixed. Here are a few of the changes you will find in Beta 2:
Block Editor: Block template theme error related to child themes (#54515)
General: Fixing existing links to Customizer when the Site Editor is enabled (#54460)
Media: Media library showing only the selected image (#53765)
Media: Fatal error uploading media on PHP8 (#54385)
REST API: Add Global Styles REST API endpoints from Gutenberg into Core (#54336)
Also, note that some users testing 5.9 Beta 1 faced some fatal errors upon upgrade. In turn, these errors revealed the need for some extra work on the filesystem and upgrader. Those fatal errors are no longer a problem, and the enhancements will be part of version 6.0.
How You Can Help
Do some testing!
Testing for bugs is vital for polishing the release in the beta stage and a great way to contribute.
If you think you’ve found a bug, please post to the Alpha/Beta area in the support forums. If you’re comfortable writing a reproducible bug report, file one on WordPress Trac. That’s also where you can find a list of known bugs.
Advent of Code Day 7 this year is another problem that's more about the math than about the programming, so we won't see much in the way of new functional techniques. Still, there's some interesting bits in there.
Today we need to calculate the fuel costs of moving a bunch of crabs in submarines all into a line. (Don't ask. Really, don't ask.) Essentially we want to center-align a series of points using the least "cost" possible. Crab positions are represented by a single number, as crabs can only move horizontally. (Because crabs.)
The trick for today is realizing that the crabs don't matter; it's a distance-cost calculation. In part 1, the cost for a crab to move one space toward whatever alignment number we want to pick is 1.
In this monthly update I explain what happened with Xdebug development in this past month. These will be published on the first Tuesday after the 5th of each month.
Patreon and GitHub supporters will get it earlier, around the first of each month.
You can become a patron or support me through GitHub Sponsors. I am currently 46% towards my $2,500 per month goal. If you are leading a team or company, then it is also possible to support Xdebug through a subscription.
In November, I worked on Xdebug directly for only about 16 hours, with funding being around 24 hours. Please become a supporter of Xdebug through Patreon or GitHub.
Xdebug 3.1 and further
Since my last report, there were no more new issues reported with either functionality or crashes, and I have prepared for the Xdebug 3.1.2 release. Although I didn't publish that in November, I did release it on December 1st.
It addresses a few crash bugs related to PHP 8.1 fibers, a crash bug when Xdebug can't write a profiler file, and an issue with Xdebug's var_dump() not using the magic __debugInfo method.
The full list of changes can be found on the updates page on the Xdebug website.
So what's next? Xdebug's profiler needs a rewrite. There are several design and implementation issues, that can only be resolved by a rewrite. To create less overhead it can also use PHP 8's new Observer API as well.
But this is going to take a large amount of work, and with the current low, and decreasing, funding levels, I can not put a lot of effort behind this.
Xdebug Cloud
To help with funding my work on Xdebug, I have a paid-for-service, called Xdebug Cloud.
Xdebug Cloud is the Proxy As A Service platform to allow for debugging in more scenarios, where it is hard, or impossible, to have Xdebug make a connection to the IDE. It is continuing to operate as Beta release.
Packages start at £49/month, and revenue will be used to further the development of Xdebug.
If you want to be kept up to date with Xdebug Cloud, please sign up to the mailinglist, which I will use to send out an update not more than once a month.
Xdebug Videos
I have published more videos on how to use Xdebug on my YouTube channel.
sqlsrv 5.10.0beta2
[Added]
- Support for PHP 8.1
- Support for Ubuntu 21.10
[Fixed]
- Issue [#1307](https://github.com/microsoft/msphpsql/issues/1307) - added TVP support to non-procedure statements
- Issue [#1310](https://github.com/microsoft/msphpsql/issues/1310) - adjusted sql_data_type and column size for NULL parameters - pull request [#1311](https://github.com/microsoft/msphpsql/pull/1311) by gjcarrette
- Pull request [#1326](https://github.com/microsoft/msphpsql/pull/1326) - php drivers simply pass Azure AD Authentication to ODBC driver, which will verify the settings
- Issue [#1329](https://github.com/microsoft/msphpsql/issues/1329) - reset sql type and column size for input params
[Limitations]
- No support for inout / output params when using sql_variant type
- No support for inout / output params when formatting decimal values
- In Linux and macOS, setlocale() only takes effect if it is invoked before the first connection. Attempting to set the locale after connecting will not work
- Always Encrypted requires [MS ODBC Driver 17+](https://docs.microsoft.com/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server)
- Only Windows Certificate Store and Azure Key Vault are supported. Custom Keystores are not yet supported
- Issue [#716](https://github.com/Microsoft/msphpsql/issues/716) - With Always Encrypted enabled, named parameters in subqueries are not supported
- Issue [#1050](https://github.com/microsoft/msphpsql/issues/1050) - With Always Encrypted enabled, insertion requires the column list for any tables with identity columns
- [Always Encrypted limitations](https://docs.microsoft.com/sql/connect/php/using-always-encrypted-php-drivers#limitations-of-the-php-drivers-when-using-always-encrypted)
[Known Issues]
- This preview release requires ODBC Driver 17.4.2 or above. Otherwise, a warning about failing to set an attribute may be suppressed when using an older ODBC driver.
- Connection pooling on Linux or macOS is not recommended with [unixODBC](http://www.unixodbc.org/) < 2.3.7
- When pooling is enabled in Linux or macOS
- unixODBC <= 2.3.4 (Linux and macOS) might not return proper diagnostic information, such as error messages, warnings and informative messages
- due to this unixODBC bug, fetch large data (such as xml, binary) as streams as a workaround. See the examples [here](https://github.com/Microsoft/msphpsql/wiki/Features#pooling)
pdo_sqlsrv 5.10.0beta2
[Added]
- Support for PHP 8.1
- Support for Ubuntu 21.10
- Feature Request [#1320](https://github.com/microsoft/msphpsql/issues/1320) - allow PDO::ATTR_EMULATE_PREPARES to be set at the connection level
[Fixed]
- Issue [#1307](https://github.com/microsoft/msphpsql/issues/1307) - added TVP support to non-procedure statements
- Issue [#1310](https://github.com/microsoft/msphpsql/issues/1310) - adjusted sql_data_type and column size for NULL parameters - pull request [#1311](https://github.com/microsoft/msphpsql/pull/1311) by gjcarrette
- Pull request [#1326](https://github.com/microsoft/msphpsql/pull/1326) - php drivers simply pass Azure AD Authentication to ODBC driver, which will verify the settings
- Issue [#1329](https://github.com/microsoft/msphpsql/issues/1329) - reset sql type and column size for input params
- Issue [#1331](https://github.com/microsoft/msphpsql/issues/1331) - restore PDO::ATTR_ERRMODE if calling PDO::lastInsertId() call fails - pull request [#1330](https://github.com/microsoft/msphpsql/pull/1330) by mpyw and pull request [#1332](https://github.com/microsoft/msphpsql/pull/1332)
[Limitations]
- No support for inout / output params when using sql_variant type
- No support for inout / output params when formatting decimal values
- In Linux and macOS, setlocale() only takes effect if it is invoked before the first connection. Attempting to set the locale after connecting will not work
- Always Encrypted requires [MS ODBC Driver 17+](https://docs.microsoft.com/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server)
- Only Windows Certificate Store and Azure Key Vault are supported. Custom Keystores are not yet supported
- Issue [#716](https://github.com/Microsoft/msphpsql/issues/716) - With Always Encrypted enabled, named parameters in subqueries are not supported
- Issue [#1050](https://github.com/microsoft/msphpsql/issues/1050) - With Always Encrypted enabled, insertion requires the column list for any tables with identity columns
- [Always Encrypted limitations](https://docs.microsoft.com/sql/connect/php/using-always-encrypted-php-drivers#limitations-of-the-php-drivers-when-using-always-encrypted)
[Known Issues]
- This preview release requires ODBC Driver 17.4.2 or above. Otherwise, a warning about failing to set an attribute may be suppressed when using an older ODBC driver.
- Connection pooling on Linux or macOS is not recommended with [unixODBC](http://www.unixodbc.org/) < 2.3.7
- When pooling is enabled in Linux or macOS
- unixODBC <= 2.3.4 (Linux and macOS) might not return proper diagnostic information, such as error messages, warnings and informative messages
- due to this unixODBC bug, fetch large data (such as xml, binary) as streams as a workaround. See the examples [here](https://github.com/Microsoft/msphpsql/wiki/Features#pooling)
Fixed issue #2036: Segfault on fiber switch in finally block in garbage collected fiber
Fixed issue #2037: Crash when profile file can not be created
Fixed issue #2041: __debugInfo is not used for var_dump output
Fixed issue #2046: Segault on xdebug_get_function_stack inside a Fiber
swoole 4.8.3
- Fixed compatibility of curl native hook with PHP-8.1
- Fixed compatibility of sockets hook with PHP-8
- Fixed the return value error of sockets hook function
- Added CoroutineSocket::isClosed()
- Fixed Http2Server sendfile cannot set content-type
- Optimize performance of HttpServer date header