PHP Internals News: Episode 95: PHP 8.1 Celebrations

PHP Internals News: Episode 95: PHP 8.1 Celebrations

In this episode of "PHP Internals News" we're looking back at all the RFCs that we discussed on this podcast for PHP 8.1. In their own words, the RFC authors explain what these features are, with your host interjecting his own comments on the state of affairs.

The RSS feed for this podcast is https://derickrethans.nl/feed-phpinternalsnews.xml, you can download this episode's MP3 file, and it's available on Spotify and iTunes. There is a dedicated website: https://phpinternals.news

Transcript

Derick Rethans 0:14

Hi, I'm Derick, and this is PHP internals news, a weekly podcast dedicated to demystifying the development of the PHP language.

Derick Rethans 0:23

This is episode 95. I've been absent on the podcast for the last few months due to other commitments. It takes approximately four hours to make each episode. And I can now unfortunately not really justify spending the time to work on it. I have yet to decide whether I will continue with it next year to bring you all the exciting development news for PHP 8.2.

Derick Rethans 0:44

However, back to today, PHP eight one is going to be released today, November 25. In this episode, I'll look back at the previous episodes this year to highlight a new features that are being introduced in PHP 8.1. I am not revisiting the proposals that did not end up making it into PHP 8.1 feature two features I will let my original interview speak. I think you will hear Nikita Popov a lot as he's been so prolific, proposing and implementing many of the features of this new release. However, in the first episode of the year, I spoke with Larry about enumerations, which he was proposing together with Ilija Tovilo. I asked him what enumerations are.

Larry Garfield 1:26

Enumerations, or enums, are a feature of a lot of programming languages. What they look like varies a lot depending on the language, but the basic concept is creating a type that has a fixed finite set of possible values. The classic example is booleans. Boolean is a type that has two and only two possible values true and false. Enumerations are way to let you define your own types like that, to say this type has two values Sort Ascending or Sort Descending. This type has four values for the four different card suits, and a standard card deck. Or a user can be in one of four states pending, approved, cancelled or active. And so those are the four possible values that this variable type can have. What that looks like varies widely depending on the language. In a language like C or C++, it's just a thin layer on top of integer constants, which means they get compiled away to introduce at compile time, and they don't actually do all that much they're a little bit to help for reading. On the other end of the spectrum, you have languages like rust or Swift, where enumerations are a robust, advanced data type and data construct of their own. That also supports algebraic data types. We'll get into that a bit more later. And is a core part of how a lot of the system actually works in practice, and a lot of other languages are somewhere in the middle. Our goal with this RFC is to give PHP more towards the advanced end of enumerations. Because there are perfectly good use cases for it, so let's not cheap out on it.

Derick Rethans 3:14

In the next episode, I spoke with Aaron Piotrowski about another big new feature: fibres.

Aaron Piotrowski 3:20

A few other languages already have Fibers like Ruby. And they're sort of similar to threads in that they contain a separate call stack and a separate memory stack. But they differ from threads in that they exist only within a single process and that they have to be switched to cooperatively by that process rather than pre-emptively by the OS like threads. And so the main motivat

Truncated by Planet PHP, read more at the original (another 16365 bytes)

Mezon Infrastructure Layer (New)

Package:
Summary:
Base classes to implement Web applications
Groups:
Author:
Description:
This package provides base classes to implement Web applications...

Read more at https://www.phpclasses.org/package/12297-PHP-Base-classes-to-implement-Web-applications.html

Watch State of the Word at a Watch Party with your WordPress Friends

State of the Word 2021 is just around the corner! 

Although attending State of the Word in person would be ideal, not all WordPress community members get to enjoy the experience of attending the speech live with friends. 

This year, as State of the Word is streamed live for the second time, we want to restore that in person camaraderie through State of the Word watch parties for WordPress Community members around the world.

We encourage WordPress meetup organizers and community members worldwide to (safely) host State of the Word 2021 watch parties —read this handbook to learn more.

Why organize a watch party? 

  • If you are a WordPress meetup organizer, many folks in your meetup may be unaware of the State of the Word, and a watch party could be a great opportunity to introduce or remind them.
  • As meetup organizers slowly bid goodbye to a tough year, the watch party could be an excellent opportunity to revitalize your group, especially if you haven’t had many events this year.
  • Along with your Meetup group members, you get a platform to ask questions directly to Matt Mullenweg.
  • And last but not least, even if you are not a Meetup Organizer, a watch party can be the perfect opportunity to reconnect and have a blast with your WordPress friends!

How do I organize a State of the Word watch party?

You can choose to host a watch party online or in person.

Online

The simplest way to organize an online watch party is to schedule an online event for your WordPress group and add the State of the Word YouTube streaming link directly on Meetup.com. Alternatively, you can schedule an online meeting using tools like Zoom and broadcast the live stream over there by screen sharing––thereby facilitating better engagement.

In Person

If your region meets the guidelines for in person events (if vaccines and testing are freely available), you can organize an in person watch party event (for fully vaccinated OR recently tested OR recently recovered folks) for your WordPress Meetup! Group members can hang out together (following local safety guidelines of course) and watch State of the Word live.

If your Local WordPress Meetup is organizing an in person watch party, fill out this form so that we can ship some swag for your group to celebrate!
Deadline: November 30, 2021

What else do I need to know about organizing a State of the Word watch party?

Excited? To help you get started, we’ve put together a few resources:

  • Check out this handbook for detailed instructions on how to organize a watch party, be it online or in person.
  • Looking for a Zoom Pro account to host your online watch party? Request a community zoom pro account for your event right away!
  • We have prepared some email templates that Meetup Organizers can use to spread the word in their Meetup groups.
  • Don’t forget to share on social media about your watch party events using the hashtag #StateOfTheWord so we can join in on the fun!

NOTE: The guidelines in this post are primarily aimed at WordPress Meetup organizers. However, you do not need to be a Meetup organizer to schedule a watch party! You can simply hang out together with your friends online or in person (while following local safety guidelines) and catch the event live!

If you are planning a watch party for State of the Word, and have questions, please drop us an email to: support@wordcamp.org if you have any questions. We are happy to help you in the best way possible.

The following folks contributed to this post: @anjanavasan @eidolonnight @evarlese and @rmartinezduque

7 Free Plugins for Adding Structured Data to Your WordPress Website

Structured data (sometimes called “Schema” or “microdata”) has emerged as an important part of SEO strategy. Search engines are making use of this information to enhance listings and provide users with more immediate answers.

Even if you’re not 100% sure what structured data is, you’ve undoubtedly run across it in Google. For instance, a search for “Fantastic Beasts: The Crimes of Grindelwald” brings up a wealth of information. I can see where the movie is playing, its listing on IMDB, and aggregate reviews. Much of this comes from structured data that is being pulled from multiple websites.

But this goes beyond just finding the latest movie listings. Structured data can help almost any business, from restaurants to pet stores and everything in-between. Helpful info such as business hours, cafe menus and addresses are just a few examples of what can be mined. That’s really just the tip of the iceberg. To get a better sense of the types of data being used, check out Schema.org’s website.

So, how do you get started? In general, structured data requires adding some attributes to your site’s HTML tags. But thanks to some terrific WordPress plugins, we don’t have to do this manually. Instead, the plugins below provide an easy way to add your website to this data powerhouse.

WPSSO Core

With support for over 500 Schema types and sub-types, WPSSO core can provide structured data in many popular formats. It works with Facebook Open Graph, Google Rich Results/Knowledge Graph, Twitter Cards, oEmbed, Slack – among others.

The plugin will automatically read your site’s content and third-party APIs, then generate the appropriate data. A premium version adds support for WooCommerce, Google Merchant Feed, and several popular WordPress plugins.

WPSSO Core | Advanced Structured Data

Schema

Schema will add valid markup to your WordPress website and supports a variety of data types. It’s a great option for publishers, as it will enhance articles, blog posts, multimedia content and author profiles.

Need more? There are free extensions for marking up reviews and setting a default image.

Schema

Business Profile

Structured data spans a vast number of categories. But what if you just want to share basic business information? Business Profile will do exactly that, without all the extras you don’t need.

Enter your business name, hours, etc., and the plugin will generate a “Contact Card” widget that you can place anywhere via a shortcode. It’s an easy way to share your business info with search engines. Support for reviews can also be added via a free companion plugin.

Business Profile

WP SEO Structured Data Schema

For those who really want to micromanage their site, WP SEO Structured Data Schema offers options galore. An options panel will appear on individual pages and posts to let you tweak a plethora of items to your heart’s content.

The available pro version ups the ante by auto-filling page/post data, support for custom post types and more data types.

WP SEO Structured Data Schema

Markup (JSON-LD)

Though a little light on documentation, Markup (JSON-LD) is a fairly straightforward plugin for adding structured data. Within its settings panel, you can choose from a number of different types of data (Article, Blog Post, Event, Local Business, Site Navigation – among others).

Simply click on the data types you want, enable them and tweak settings. While there isn’t much in the way of plugin-specific info, each data type features some helpful Schema.org/Google links for further information.

Markup (JSON-LD)

Schema & Structured Data

With Schema & Structured Data for WP & AMP, you have a comprehensive plugin that is both highly-tweakable and easy to use. For instance, you can conditionally display markup fields based on a number of criteria, such as post type.

It’s also compatible with Google AMP, putting you into the good graces of the search behemoth.

Schema & Structured Data for WP & AMP

Schema App Structured Data

Schema App Structured Data is another great choice if you prefer something that doesn’t require a complicated setup. Once you activate the plugin and fill out a few basic details, all of your pages, posts, categories, and more will be automatically marked up with compliant Schema.

Optionally, you can also display breadcrumb navigation that will further enhance both your site and your SERP listing.

Schema App Structured Data

Enjoy the Benefits of Structured Data

Adding structured data markup to your website helps users get the information they need with less hassle. Instead of having to comb through your website to find business hours, they can simply ask Google. This is especially important as voice-based search becomes more prevalent.

Users no longer have to attempt the dangerous combination of typing and driving. Talking to whichever virtual assistant they’re using will provide the answers they’re looking for.

While there are certainly some concerns that users will bypass your site altogether, providing access to this data at least keeps your business in the game. If your competitors share structured data and you don’t, you could lose some potential customers. Plus, the fact that website navigation can be mined could be of some benefit as well.

In short, structured data is too important to ignore. Thankfully, the plugins above can help make the process quick and easy.

The post 7 Free Plugins for Adding Structured Data to Your WordPress Website appeared first on Speckyboy Design Magazine.

How Web Designers Can Cope with Situations Out of Their Control

Everyone wants to control their own destiny. For web designers, that means layouts that look great, code that works as intended, and clients who pay on time.

While we may wish for each of those things, reality usually plays out differently. Layouts aren’t always pixel-perfect, code breaks and clients – well, they’re human.

But it goes even further. The deeper you look, the more situations you’ll find that are out of your control.

This is especially tough for those of us who keep a tight grip on both our business and projects. When something is out of our sphere of influence, it’s easy to become frustrated. And that can harm virtually every aspect of your work. It may even creep into your personal life as well.

That’s why the ability to cope with these situations is vital. By saving yourself from obsessing over something you can’t control, you’ll have more energy to focus on being positive and productive.

Let’s look at a few difficult-to-control situations that typically impact web designers. Along the way, we’ll discuss some methods for letting go in a healthy manner.

When a Longtime Client Leaves

If you’ve worked in this industry for a few years, you may have gotten an unexpected email from a client that goes something like this:

“Hi,

We wanted to let you know that we are in the process of building a new website. It should be ready in the next few weeks. Could you work with our new designer to help with the transition?

It was great working with you!
Your Ex-Client”

This is frustrating on a few different levels. First and foremost, it hurts that you didn’t get a chance to even discuss the project. On top of that, your soon-to-be ex-client expects you to work on the transition away from your services.

Clients will come and go – that’s just part of doing business. However, it’s particularly difficult when someone blindsides you like this.

As it turns out, you had no warning and zero control. If you had just been able to pitch an idea or two, maybe things would have turned out differently? These are the types of thoughts likely racing through your head after reading such a letter.

How to Cope

True, the damage has already been done. And while you can angrily fire off a one or two-word reply to your client, that’s not going to help the situation.

On the bright side, this could be a great learning opportunity. Reply with a few politely-asked questions, such as:

  • Was there a particular reason you went with a new designer?
  • Did you have any issues with the quality of my work?
  • So that I can continue to improve my services, is there anything else you’d like to share?

Much of what you ask will depend on the client and the project. But this is a solid place to start. The idea is to get inside your client’s head a bit and find out what went into their decision.

And while not everyone will provide answers, the ones who do can prove valuable. You may find that your services were lacking in some areas. Or, perhaps the client’s cousin is the “new designer”. Either way, it’s better than pounding your fist over the situation.

A sign that reads: "Goodbye"

When a Third-Party Provider Messes Up

So much of what web designers do these days depends on third-party providers. That could be anything from web hosting, plugins, themes, or email delivery services. In other words – a big piece of a website’s ability to function or be accessed at all is run by someone else.

A failure at any one of these links in the chain can be disastrous. To illustrate the point, think about what happens when a content delivery network (CDN) has an outage. That could bring down a massive number of websites.

Meanwhile, web designers are left without much (if any) control. On one hand, you have an understandably frustrated client. On the other is a company that dropped the ball. Oh, look – there’s you in the middle!

In this type of situation, every second can feel like an eternity. There might be an opportunity to switch to a different product, but that’s not always feasible. If the issue is prolonged, tension continues to grow on all sides.

How to Cope

Maybe you can’t control an outage or even a troublesome line of code. But there are some things you can do proactively.

Working with the provider’s technical support can at least make you feel like you’re in the game. By getting the status of the situation, there’s an opportunity to pass it along to affected clients.

What’s more, any troubleshooting information you can offer also has value. Who knows? If it leads to a resolution, you can say you were part of the process.

A broken plate

When a Favorite App Changes for the Worse

This one often hurts on a personal level. We web designers tend to fall in love with tools and applications that allow us to get things done. Perhaps it’s a favorite design app like Photoshop or a content management system (CMS) such as WordPress.

When apps change, those changes are inevitably forced onto us, as well. They impact our workflow – and not always in the most positive way.

All it takes is a quick look around support forums and social media to see the frustration. Users go on about how the feature they loved was “ruined” or that things will never be the same. We’ve all seen it and, at one time or another, been a part of that collective disappointment.

How to Cope

The first coping strategy is to give such changes a chance to sink in. Even if your first impression of them wasn’t favorable, it can take time to build a comfort level. A feature that may have frustrated you at first could become positive after more exposure.

Second, you might reach out to the developer and let them know how you feel. Maybe it doesn’t result in an immediate remedy, but at least you get it off of your chest. And if enough people feel the same way, there’s a chance that things evolve more acceptably.

If all else fails, perhaps it’s time to find a suitable alternative. Sometimes, your relationship with a tool simply runs its course.

A person looks at a computer screen.

A Different Take on Control

In a profession where we aim to control all the variables, having the opposite can be maddening.

But, think of it this way: even if you could control every aspect of your work, would you even want to? It’s a major responsibility and more stress than most of us can bear.

Somewhere along the line, you have to put a level of trust in others. Whether that’s trusting a client, a software developer, or a service provider – they are often necessary rungs on the ladder to a successful business.

There will be failures and disconnects along the way. And, while it would be nice to have a measure of control over them, it’s also a bit unrealistic.

However, lack of control doesn’t mean that you have to give up all hope. Instead, look for ways to learn from the situation. The knowledge and experience you gain will serve you long into the future.

The post How Web Designers Can Cope with Situations Out of Their Control appeared first on Speckyboy Design Magazine.

A Look at WordPress 5.9

WordPress 5.9 is expected to be a ground-breaking release. It will introduce the next generation of themes with Twenty Twenty-Two joining the fun and over 30 theme blocks to build all parts of your site. In anticipation of the January 25th release, we hope you enjoy this sneak peek of 5.9.

New design tools will allow you to create exactly what you want, from adding filters to all your images to fine-tuning the border radius on all your buttons. With WordPress 5.9 providing more design control along with streamlined access to patterns, you can easily change the entire look and feel of your site without switching themes.

No matter what you’re editing, whether it’s crafting a new post or working on a header, improvements to List View make it simple to navigate content regardless of complexity. More improvements and features for everyone are to come in this release and we can’t wait to see what you create with WordPress 5.9! 

Stay Tuned

Stay tuned for more updates as the date draws near. If you want to help, the best thing you can do is test everything! For all the details, check out this Make Core post.

Video props: @annezazu (also co-wrote the post) @michaelpick @matveb @beafialho @javiarce @critterverse @joen.

Teo

Package:
Summary:
MVC Framework with configurable routes and filters
Groups:
Author:
Description:
This package provides an MVC Framework with configurable routes and filters...

Read more at https://www.phpclasses.org/package/12300-PHP-MVC-Framework-with-configurable-routes-and-filters.html#2021-11-23-09:52:23

Community News: Latest PECL Releases (11.23.2021)

Latest PECL Releases:

  • rdkafka 6.0.0RC1
    ## Enhancements

    • PHP 8.1 support (@ruudk, @remicollet, @nick-zh, @arnaud-lb)

    Breaking changes

    • Added tentative return types in PHP 8.1 builds
  • rdkafka 5.0.1
    ## Enhancements - Add pausePartitions(), resumePartitions() on RdKfaka, RdKafkaKafkaConsumer (#438, @arnaud-lb) - Clarify error when KafkaConsumer is closed (@zoonru)

    Bugfixes

    • Fix windows build (#440, @nick-zh)
    • Fix crash in RdKafkaMetadataTopic::getTopic() (#465, @arnaud-lb)
  • gRPC 1.42.0
    - gRPC Core 1.42.0 update
  • swoole 4.8.2
    - Fixed memory leak of proc_open hook - Fixed compatibility of curl native hook with PHP-8.0 and PHP-8.1 - Fixed connection cannot be closed normally in the Manager process - Fixed Manager process cannot use sendMessage - Fixed CoroutineHttpServer received abnormally large POST data parsing - Fixed cannot exit directly when a fatal error occurs in PHP8 environment - Adjust coroutine max_concurrency option, only allowed to be used in Co::set() - Adjust Coroutine::join() to ignore non-exists coroutine
  • imagick 3.6.0
    - No change from 3.6.0RC2
  • phalcon 5.0.0alpha7
    Full changelog can be found at: https://github.com/phalcon/cphalcon/blob/master/CHANGELOG-5.0.md

    Changed

    • Changes to the PhalconAcl:
    • Renamed PhalconAclComponentAware to PhalconAclComponentAwareInterface
    • Renamed PhalconAclRoleAware to PhalconAclRoleAwareInterface #15691
    • Changed require to require_once in PhalconLoader to avoid conflicts with other loaders #15489
    • Changed require to require_once in PhalconCliConsole and PhalconMvcApplication for a bit of extra performance #15489
    • PhalconCollection has been moved under the Support namespace:
    • Renamed PhalconCollection to PhalconSupportCollection
    • Renamed PhalconCollectionException to PhalconSupportCollectionException
    • Renamed PhalconCollectionReadOnly to PhalconSupportCollectionReadOnly
    • Renamed PhalconCollection to PhalconSupportCollection #15700
    • Changes to PhalconSessionBag:
    • Changed PhalconSessionBag::construct to accept a container instead of internally calling the default
    • Changed PhalconSessionBag::construct to throw an exception if the container is not specified
    • Changed PhalconSessionBag::init to store the data in the session #15494
    • Changed PhalconEventsEvent::construct() to allow source to be nullable #15133
    • Changes to PhalconCrypt
    • Moved PhalconCryptException to PhalconCryptExceptionException
    • Moved PhalconCryptMismatch to PhalconCryptExceptionMismatch
    • Changed the ccm/gcm modes to store the authTag with the encryption string and process it with the decryption string #15717
    • Created new namespace PhalconEncryption
    • Moved PhalconCrypt to PhalconEncryptionCrypt
    • Moved PhalconSecurity to PhalconEncryptionSecurity
    • Moved the whole Security namespace under Encryption
    • SecurityJWTExceptionsUnsupportedAlgorithmException to EncryptionSecurityJWTExceptionsUnsupportedAlgorithmException
    • SecurityJWTExceptionsValidatorException to EncryptionSecurityJWTExceptionsValidatorException
    • SecurityJWTSignerAbstractSigner to EncryptionSecurityJWTSignerAbstractSigner
    • SecurityJWTSignerHmac to EncryptionSecurityJWTSignerHmac
    • SecurityJWTSignerNone to EncryptionSecurityJWTSignerNone
    • SecurityJWTSignerSignerInterface to EncryptionSecurityJWTSignerSignerInterface
    • SecurityJWTTokenAbstractItem to EncryptionSecurityJWTTokenAbstractItem
    • SecurityJWTTokenEnum to EncryptionSecurityJWTTokenEnum
    • SecurityJWTTokenItem to EncryptionSecurityJWTTokenItem
    • SecurityJWTTokenParser to EncryptionSecurityJWTTokenParser
    • SecurityJWTTokenSignature to EncryptionSecurityJWTTokenSignature
    • SecurityJWTTokenToken to EncryptionSecurityJWTTokenToken
    • SecurityJWTBuilder to EncryptionSecurityJWTBuilder
    • SecurityJWTValidator to EncryptionSecurityJWTValidator
    • SecurityJWTValidator to EncryptionSecurityJWTValidator
    • SecurityException to EncryptionSecurityException
    • SecurityRandom to EncryptionSecurityRandom #15729
    • Renamed
    • PhalconCryptCrypt::getHashAlgo() to PhalconCryptCrypt::getHashAlgorithm()
    • PhalconCryptCrypt::getAvailableHashAlgos() to PhalconCryptCrypt::getAvailableHashAlgorithms()
    • PhalconCryptCrypt::setHashAlgo() to PhalconCryptCrypt::setHashAlgorithm() #15717
    • Renamed PhalconFactoryAdapterFactory::getAdapters() to PhalconFactoryAdapterFactory::getServices() #15717
    • Changed PhalconCryptCrypt::__construct() to have useSigning set to true by default #15717
    • Changes to PhalconConfig
    • Moved PhalconConfig to PhalconConfigConfig
    • Changed PhalconConfigConfig::path by making the delimiter parameter a string
    • Changed PhalconConfigAdapterIni::__construct to not accept null as the mode. The default is now INI_SCANNER_NORMAL (2)
    • Refactored the code for more efficiency and speed #15720
    • Changed PhalconDbAdapterAdapterInterface::getInternalHandler() and PhalconDbAdapterPdoAbstractPdo::getInternalHandler() to return var instead of PDO for custom adapters with different engines #15119
    • Moved PhalconFilter to PhalconFilterFilter; added more tests #15726
    • Changed PhalconMvcModel::getPreparedQuery() to return QueryInterface instead of Query #15562
    • Moved PhalconCache to PhalconCacheCache #15728
    • Changed PhalconFactoryAdapterFactory to define the factory exception in getExceptionClass() instead of a property. #15728
    • Renamed PhalconDbAdapterAbstractAdapter::getSqlVariables() to PhalconDbAdapterAbstractAdapter::getSQLVariables() to align with the rest of the getSQL* methods #15637
    • Moved PhalconLogger to PhalconLoggerLogger #15727
    • Changes to PhalconEscaper
    • Moved PhalconEscaper to PhalconHtmlEscaper
    • Moved PhalconEscaperEscaperInterface to PhalconHtmlEscaperEscaperInterface
    • Moved PhalconEscaperException to PhalconHtmlEscaperException
    • Deprecated methods (to be removed at a future version)
    • escapeCss() becomes css()
    • escapeJs(), becomes js()
    • escapeHtml() becomes html()
    • escapeHtmlAttr() becomes attributes()
    • escapeUrl() becomes url()
    • setHtmlQuoteType() becomes setFlags() #15757
    • Changed PhalconEncryptionSecurity::hash() to also use password_hash() and accept ARGON2* algorithms #15731
    • Removed uncamelize of realClassName in PhalconMvcRouterRoute::getRoutePaths() if definition is string to make processing same as if array definition #15067
    • Changed PhalconValidation::getValue() behavior to get value from data if not found in entity. #14203
    • Changed PhalconFormsForm::isValid() signature: added whitelist argument. #14203
    • Changed PhalconSupportCollectionReadOnly to PhalconSupportCollectionReadOnlyCollection to avoid conflicts with the read-only feature in PHP 8.1 #15767
    • Removed PhalconText - replaced by PhalconSupportHelperStr* #15776
    • Removed PhalconHelperArr - replaced by PhalconSupportHelperArr* #15776
    • Removed PhalconHelperFile - replaced by PhalconSupportHelperFile* #15776
    • Removed PhalconHelperJson - replaced by PhalconSupportHelperJson* #15776
    • Removed PhalconHelperNumber - replaced by PhalconSupportHelperNumber* #15776
    • Removed PhalconHelperStr - replaced by PhalconSupportHelperStr* #15776
    • Removed references to PhalconText, PhaconHelper* from the code replacing it with PhalconSupportHelper* #15776
    • Synchronized tests with phalcon/phalcon thus increasing coverage #15776
    • Changed PhalconAssetsManager to require a PhalconHtmlTagFactory in its constructor #15776

    Added

    • Added more tests in the suite for additional code coverage #15691
    • Added PhalconEventsAbstractEventsAware class to handle the Events Manager when necessary #15691
    • Added PhalconAclAdapterAdapterInterface::getInheritedRoles() and PhalconAclAdapterMemory::getInheritedRoles() that returns the inherited roles based on a passed role name (or all if no parameter supplied) #15154
    • Changes to PhalconCrypt
    • Added PhalconCryptPaddingPadInteface and padding adapters
    • PhalconCryptPaddingAnsi
    • PhalconCryptPaddingIso10126
    • PhalconCryptPaddingIsoIek
    • PhalconCryptPaddingNoop
    • PhalconCryptPaddingPadInterface
    • PhalconCryptPaddingPkcs7
    • PhalconCryptPaddingSpace
    • PhalconCryptPaddingZero
    • Added PhalconCryptPadFactory to easily create padding adapters
    • Added more tests increasing coverage #15717
    • Added PhalconCacheAdapter*::setForever() and PhalconStorageAdapter*::setForever() to allow storing a key forever #15485
    • Added PhalconEncryptionSecurity::getHashInformation() to return information for a hash #15731
    • Added constants PhalconEncryptionSecurity::CRYPT_ARGON2I and PhalconEncryptionSecurity::CRYPT_ARGON2ID #15731
    • Added allowEmpty checks to common validators #15515
    • Added PhalconFormsForm::getFilteredValue() to get filtered value without providing entity #15438
    • Added PhalconFormsForm::setWhitelist() and PhalconFormsForm::getWhitelist() #14203
    • Added dirtyState serialization in PhalconMvcModel #15571
    • Added short versions of helpers for PhalconHtmlTagFactory (call service as a method) #15776
    • Added short versions of helpers for PhalconSupportHelperFactory (call service as a method) #15776
    • Added PhalconHtmlHelperDoctype helper for doctype generation #15776
    • Added style or link tag option for PhalconHtmlHelperStyle #15776

    Fixed

    • Fixed Query::getExpression() return type #15553
    • Fixed PhalconMvcModel::getRelated() to correctly return relationships (cached or not) when the foreign key has changed #15649
    • Fixed PhalconDbAdapterPdo*, PhalconMvcModel and PhalconMvcModelMetaDataStrategyAnnotations to treat BIGINT numbers as string #15632
    • Fixed PhalconCryptCrypt::decrypt() to correctly calculate the hash when using signed mode #15717
    • Fixed PhalconMvcModelManager::isVisibleModelProperty() to correctly check if setting property is visible #15276
    • Fixed PhalconConfigConfig::merge to retain numeric indexes in deep merges #14705
    • Fixed globals (Zephir change) to correctly display string values for global settings in phpinfo() #15269
    • Fixed PhalconStorageAdapterRedis::getAdapter() and PhalconCacheAdapterRedis::getAdapter() to accept the connection timeout in the constructor options #15744
    • Fixed PhalconDbAdapterAbstractAdapter::getSQLVariables() to return an empty array when initialized #15637
    • Fixed PhalconCacheAdapter* and PhalconStorageAdapter* to delete a key when set() is called with a zero or negative TTL #15485
    • Fixed PhalconDbAdapterPdoMysql to not use PDO::ATTR_EMULATE_PREPARES and PDO::ATTR_STRINGIFY_FETCHES by default. This allows numbers to be returned with resultsets instead of strings for numeric fields #15361
    • Fixed PhalconValidationValidatorFile to use messageFileEmpty #14928
    • Fixed PhalconDbRawValue usage bugs in PhalconMvcModel::doLowUpdate() #15413
    • Fixed type attribute for stylesheet links #15776
    • Fixed PhalconDebug to not throw an exception if a URL service is not present #15381

    Removed

    • Removed PhalconKernel - obsolete #15776
  • redis 5.3.5RC1
    phpredis 5.3.5RC1

    This release adds support for exponential backoff w/jitter, experimental support for detecting a dirty connection, as well as many other fixes and improvements.

    You can find a detailed list of changes in Changelog.md and package.xml or by inspecting the git commit logs.

    --- Sponsors ---

    Audiomack - https://audiomack.com Open LMS - https://openlms.net BlueHost - https://bluehost.com Object Cache Pro for WordPress - https://objectcache.pro Avtandil Kikabidze - https://github.com/akalongman Zaher Ghaibeh - https://github.com/zaherg BatchLabs - https://batch.com Luis Zarate - https://github.com/jlzaratec


    • Fixed segfault in redis_setoption_handler [692e4e84] (Pavlo Yatsukhnenko)

    • Fix masters array in the event of a cluster failover [bce692962] (Bar Shaul)

    • Fix 32 bit type error [672dec87f] (Remi Collet)

    • Fix radix character in certain locales [89a871e24] (Pavlo Yatsukhnenko)

    • ZSTD Validation fix [6a77ef5cd] (Michael Grunder)

    • Remove superfluous typecast [b2871471f] (Remi Collet)

    • Updated documentation [f84168657, d017788e7, 20ac84710, 0adf05260, aee29bf73, 09a095e72, 12ffbf33a, ff331af98, a6bdb8731, 305c15840, 1aa10e93a, d78b0c79d, c6d37c27c, a6303f5b9, d144bd2c7, a6fb815ef, 9ef862bc6] (neodisco, Clement Tessier, T. Todua, dengliming, Maxime Cornet, Emanuele Filannino Michael Grunder)

    • Travis CI Fixes [a43f4586e, 4fde8178f, 7bd5415ac, fdb8c4bb7, d4f407470] (Pavlo Yatsukhnenko)

    • Minor fixes/cleanup [2e190adc1, 99975b592, 9d0879fa5, 22b06457b] (Pavlo Yatsukhnenko)

    • Fix RedisArray constructor bug 85dc883ba (Pavlo Yatsukhnenko)

    • Moved to GitHub Actions [4d2afa786, 502d09fd5] (Pavlo Yatsukhnenko)

    • Use more appropriate array iteration macro [6008900c2] (Pavlo Yatsukhnenko)

    • Clean up session tests [ab25ae7f3] (Michael Grunder)

    • RedisArray refactors [1250f0001, 017b2ea7f, 37ed3f079] (Pavlo Yatsukhnenko)

    • Use zend_parse_parameters_none helper [a26b14dbe] (Remi Collet)

    • Support for various exponential backoff strategies [#1986, #1993, 732eb8dcb, 05129c3a3, 5bba6a7fc], (Nathaniel Braun)

    • Added experimental support for detecting a dirty connection [d68579562] (Michael Grunder)

    • Created distinct compression utility methods (pack/unpack) [#1939, da2790aec] (Michael Grunder)

    • SMISMEMBER Command [#1894, ae2382472, ed283e1ab] (Pavlo Yatsukhnenko)

Testing Your Marketing Efforts as a Freelancer Designer

In today’s freelancing climate, one of the best things you can do in terms of marketing yourself is to think in what I like to call “Test Terms.”

What does this mean? When a food company is developing a new product to release into the market, they don’t simply travel in a straight line from recipe to manufacturing to stocking the shelves at the grocery store. What happens is they perform a series of tests, which allow them to tweak their product until it gets just the right kind of response they’re looking for.

As a designer, it’s eminently possible to plan out a system that allows you to do the same thing, with similar results. However, many people remain stuck on one method of promotion, believing they’re too busy working to devote too much time to marketing themselves.

But the sad paradox of that belief is that, by not adjusting the way they market themselves, these freelance designers will always be too busy scraping by. They’re not getting the exposure they need to be choosier about the types of jobs they can take on, because the only jobs available are the ones that limited exposure gets them.

Everyone Tests Everything

One of the best ways to test consumers’ reactions to new food products is to get their direct feedback. Starting with just one local area, a company will test out a variety of different approaches to everything about the product. And I mean everything.

Do people in this small town like the taste of this new product, or do they hate it? If they hate it, it’s back to the test kitchens to improve the recipe. Are they repelled by the packaging?

Get that designer back in here – time to revise! Are the ads falling flat? Well, you get the idea.

Every tiny detail of this new product gets tested and re-tested, adjusted and refined wherever needed. After they’ve made enough improvements that people are now responding well to the product, it’s time to take it to a new area. This process gets repeated again and again until there’s a hugely positive response and people are stockpiling the new food item like they’re preparing for Armageddon.

A similar process happens, by the way, in the movie business, the government (think road signs or jury duty summonses aren’t tested? Think again), and other consumer industries like toys and games.

Testing is a proven strategy to improving a product’s chances of success, and as a designer, you can very easily start taking advantage of some of these sophisticated testing methods to place yourself practically in the lap of your most desired clients. Of course, you can and do test your approaches to design, but trying out new ways of marketing is easier to implement in your regular schedule than you might think.

sharpen your idea pencil sharp illustration

Sharpen Your Pencils

Start with your main marketing approach, which might be your website, your business card, your cover letter, or your resume. How well does this approach work for you? Are the clients beating down your door, or is something not quite working the way it’s supposed to?

If you regularly hand out business cards at networking events, are they completely up to date? Do they display the important information clearly? Are you giving them to the right people? That last one is an important detail that many creative freelancers miss.

Business cards are practically useless if you don’t use them properly. At a networking event, the people you typically end up chatting with aren’t people who can provide you with tons of high-quality work.

They’re people just like you – struggling entrepreneurs who need services on the cheap. It doesn’t mean you shouldn’t work with these people, but it’s important to keep in mind the overall value of a client when you’re passing out those expensive business cards.

How good of a return on your investment will you be getting? Test out handing your business card to a different sort of person than you ordinarily would, and see what type of response you get.

In a similar way, your website may or may not be bringing you the steady stream of work that it could be. You may be the most brilliant, multifaceted designer the world has ever seen, and yet if no one knows about your work, you might as well be invisible.

The real key to getting better quality clients is not to put as much of your work “out there” as you possibly can. It’s making sure that the work you’ve done is being seen by the maximum number of eyeballs.

In the design world, the best way to do this, in my opinion, is by doing a personal side project that you really love and are passionate about.

chef The Gold Standard Of Eating

The Gold Standard Of Eating

It turns out that as a designer operating a business as a freelancer, you should be adjusting everything you do to market yourself – all the time.

What do I mean by adjusting? In many restaurants, well before the rush of customers comes in, chefs create something called a Gold Standard, a single plate that sets the, well, standard for all the plates the kitchen will produce for that day.

It’s such an important part of the culinary process that the plates used in most restaurants – the ones you eat your main course on – are known as Gold Standard Plates.

The original Gold Standard is a test plate – any changes to the dish are tried out there first. If something is off about the flavor, the ingredients, or the arrangement of the items, the Gold Standard will be the laboratory where those things can be tweaked.

As a designer, incorporating a similar philosophy will be helpful in streamlining your marketing process. Creating your own “Gold Standard” of promotion will allow you to make quick adjustments locally, to one portion of your marketing campaign, before you roll out those changes to everything else.

Whether it’s your website’s analytics, your business card, or your resume, zoom in on one single marketing material and find out what works and what doesn’t.

Usually the information you learn is transferable to other parts of your marketing package, and you may even discover that one or more of your marketing materials are unnecessary.

You definitely need to have a website if you design them for a living, but what about business cards? A CV? Social media? How well are these things really working to directly deliver you the clients you want?

Different types of clients care about different things. Maybe your clients don’t care so much about your resume, but they would really love to read your personal blog or Twitter updates. Other clients might be the exact opposite – it’s essential to know your market and be able to provide them the proof they’re looking for that tells them you’re the designer for the job.

The post Testing Your Marketing Efforts as a Freelancer Designer appeared first on Speckyboy Design Magazine.

Powered by Gewgley