
<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>General &#8211; Conetix</title>
	<atom:link href="https://testing.conetix.com.au/blog/category/general/feed/" rel="self" type="application/rss+xml" />
	<link>https://testing.conetix.com.au</link>
	<description>Premier Web Hosting Provider</description>
	<lastBuildDate>Mon, 18 Nov 2024 05:05:39 +0000</lastBuildDate>
	<language>en-AU</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://testing.conetix.com.au/wp-content/uploads/favicon.png</url>
	<title>General &#8211; Conetix</title>
	<link>https://testing.conetix.com.au</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Why You Need to Backup Your Microsoft 365 Data: A Comprehensive Guide</title>
		<link>https://testing.conetix.com.au/blog/why-you-need-to-backup-your-microsoft-365-data-a-comprehensive-guide/</link>
		
		<dc:creator><![CDATA[The Web Hosting Wizard]]></dc:creator>
		<pubDate>Wed, 21 Aug 2024 04:44:17 +0000</pubDate>
				<category><![CDATA[General]]></category>
		<guid isPermaLink="false">https://conetix.com.au/?p=22617</guid>

					<description><![CDATA[In today’s digital world, Microsoft 365 has become an integral part of business operations, offering a suite of cloud-based tools that enable collaboration, productivity, and seamless communication. From emails to documents, and from spreadsheets to Teams conversations, the data generated and stored within Microsoft 365 is vast and crucial to the functioning of any organization....  <a class="excerpt-read-more" href="https://testing.conetix.com.au/blog/why-you-need-to-backup-your-microsoft-365-data-a-comprehensive-guide/" title="Read Why You Need to Backup Your Microsoft 365 Data: A Comprehensive Guide">Read more &#187;</a>]]></description>
										<content:encoded><![CDATA[


<p>In today’s digital world, Microsoft 365 has become an integral part of business operations, offering a suite of cloud-based tools that enable collaboration, productivity, and seamless communication. From emails to documents, and from spreadsheets to Teams conversations, the data generated and stored within Microsoft 365 is vast and crucial to the functioning of any organization. However, there’s a critical aspect that many businesses overlook: the importance of backing up Microsoft 365 data.</p>



<p>This article will explore why backing up your Microsoft 365 data is not just a good practice but an essential one for ensuring business continuity and protecting against data loss.</p>



<h3 class="wp-block-heading">The Myth of Built-In Backup</h3>



<p>One of the most common misconceptions about Microsoft 365 is that because it&#8217;s a cloud service, data is automatically backed up and fully protected by Microsoft. While Microsoft does provide robust infrastructure and redundancy measures, these are primarily designed to ensure service availability and prevent data loss on their end—think hardware failures, natural disasters, and other large-scale events.</p>



<p>However, when it comes to specific instances like accidental deletion, malicious attacks, or compliance requirements, the responsibility to recover lost data often falls on the organization itself. Microsoft operates on a shared responsibility model, meaning that while they manage the infrastructure, the onus of data protection at the application level—emails, files, and other user-generated content—rests with you, the business owner.</p>



<h3 class="wp-block-heading">Common Causes of Data Loss in Microsoft 365</h3>



<p>Data loss can happen in many ways, and relying solely on the built-in recovery features of Microsoft 365 can leave you vulnerable. Here are some of the most common causes of data loss:</p>



<h4 class="wp-block-heading"><strong>Accidental Deletion</strong></h4>



<p>It’s surprisingly easy for users to accidentally delete emails, files, or even entire folders. While Microsoft 365 does offer a recycle bin or similar feature for restoring deleted items, these are often only temporary solutions with retention limits. If a user deletes a file and doesn’t realize it within the retention period, that data could be lost permanently.</p>



<h4 class="wp-block-heading"><strong>Malicious Insiders</strong></h4>



<p>While we like to think of our colleagues as trustworthy, insider threats remain a real concern. A disgruntled employee might delete critical files or emails, and by the time the issue is discovered, it may be too late to recover the data through traditional means.</p>



<h4 class="wp-block-heading"><strong>External Cyber Threats</strong></h4>



<p>Phishing, ransomware, and other cyber threats are on the rise, and even with strong security measures in place, no system is entirely immune. In the event of a successful attack, data can be corrupted, encrypted, or deleted altogether. Having a backup ensures that you can restore your data to a point before the attack occurred, minimizing downtime and loss.</p>



<h4 class="wp-block-heading"><strong>Legal and Compliance Requirements</strong></h4>



<p>Certain industries are subject to strict data retention and protection regulations. Failure to comply can result in hefty fines and legal consequences. Relying on the default settings of Microsoft 365 might not meet the specific retention needs for your industry, and without a proper backup solution, you could find yourself in violation of these regulations.</p>



<h4 class="wp-block-heading"><strong>Retention Policy Gaps</strong></h4>



<p>Microsoft 365 offers configurable retention policies, but they can be complex to manage and may not cover all your needs. There might be gaps in what’s retained and for how long, leaving some data vulnerable to permanent deletion.</p>



<h3 class="wp-block-heading">The Benefits of a Dedicated Microsoft 365 Backup Solution</h3>



<p>Investing in a dedicated backup solution for your Microsoft 365 environment offers several key benefits that go beyond what the default settings can provide.</p>



<h4 class="wp-block-heading"><strong>Comprehensive Protection</strong></h4>



<p>A third-party backup solution can provide more granular and comprehensive coverage across all Microsoft 365 applications, including Exchange, SharePoint, OneDrive, and Teams. This means you can protect everything from individual emails to entire Teams channels, ensuring that no critical data is left unprotected.</p>



<h4 class="wp-block-heading"><strong>Extended Retention Policies</strong></h4>



<p>With a dedicated backup solution, you can customize your retention policies to meet your specific business needs, ensuring that data is kept for as long as required by your industry regulations or internal policies. This gives you greater control and peace of mind knowing that your data is safe, no matter how long it needs to be retained.</p>



<h4 class="wp-block-heading"><strong>Quick and Easy Recovery</strong></h4>



<p>In the event of data loss, time is of the essence. A dedicated backup solution allows for quick and easy recovery, minimizing downtime and ensuring that your business can continue to operate with minimal disruption. Whether you need to recover a single file or an entire mailbox, the process is straightforward and efficient.</p>



<h4 class="wp-block-heading"><strong>Protection Against Human Error</strong></h4>



<p>Accidents happen, but with a dedicated backup solution, you can easily recover from them. Whether a file is accidentally deleted or an entire folder is misplaced, having a backup means that you can restore the data quickly, without the need for complicated procedures or extended downtime.</p>



<h4 class="wp-block-heading"><strong>Defence Against Cyber Threats</strong></h4>



<p>In the event of a ransomware attack or other cyber threat, a backup solution provides a reliable way to restore your data to its pre-attack state. This ensures that you can recover quickly and avoid paying ransoms or dealing with the extended consequences of data loss.</p>



<h4 class="wp-block-heading"><strong>Meeting Compliance Requirements</strong></h4>



<p>For businesses in regulated industries, a dedicated backup solution can help ensure compliance with data retention and protection regulations. This not only protects your business from legal repercussions but also builds trust with your clients and stakeholders, who can be assured that their data is being handled with the utmost care.</p>



<h3 class="wp-block-heading">Choosing the Right Backup Solution for Microsoft 365</h3>



<p>When selecting a backup solution for your Microsoft 365 environment, there are several factors to consider:</p>



<h4 class="wp-block-heading"><strong>Ease of Use</strong></h4>



<p>The backup solution should be user-friendly, with a straightforward interface that allows for easy management and recovery of data. It should integrate seamlessly with Microsoft 365, providing a consistent and reliable backup experience.</p>



<h4 class="wp-block-heading"><strong>Scalability</strong></h4>



<p>As your business grows, so too will your data needs. The backup solution you choose should be scalable, capable of handling an increasing volume of data without compromising performance or reliability.</p>



<h4 class="wp-block-heading"><strong>Security</strong></h4>



<p>The backup solution should offer robust security features, including encryption, access controls, and regular security updates, to protect your data from unauthorized access and other threats.</p>



<h4 class="wp-block-heading"><strong>Data Residency</strong></h4>



<p>Ensuring <a href="https://testing.conetix.com.au/blog/australian-customers-need-data-sovereignty/">data residency</a> for Microsoft 365 backups in Australia guarantees that all backup data is stored within Australian borders, complying with local data residency and privacy regulations. This provides businesses with peace of mind, knowing that their data is protected in Australia.</p>



<h4 class="wp-block-heading"><strong>Support and Reliability</strong></h4>



<p>Partnering with the right people who understand Microsoft 365 and the critical importance of backup can significantly enhance your business&#8217;s resilience and data security. An expert partner provides tailored backup solutions that align with your specific needs, ensuring that vital data is always protected and recoverable. With the right solution in place, you can focus on your business, knowing that your data is safeguarded by professionals who prioritize reliability, compliance, and seamless integration.</p>



<h3 class="wp-block-heading">Conclusion</h3>



<p>Backing up your Microsoft 365 data is not just a good practice; it’s an essential component of your overall data protection strategy. With the increasing reliance on cloud services and the growing threats to data security, a dedicated backup solution is the best way to ensure that your critical business data is protected, recoverable, and compliant with industry regulations.</p>



<p>Don’t leave your data’s safety to chance. Invest in a comprehensive backup solution for Microsoft 365 and safeguard your business against the unexpected.</p>



<h3 class="wp-block-heading"><strong>Need Assistance</strong>?</h3>



<p>Need to know more and find the right solution for you, reach out to one of our Conetix Web Hosting wizards and they can assist.</p>



<h3 class="wp-block-heading">References:</h3>



<p>Gartner&#8217;s Market Guide for Backup as a Service: <a href="https://www.gartner.com/en/documents/4455799">Gartner</a></p>



<p>Microsoft Service Trust Portal: <a href="https://servicetrust.microsoft.com/ViewPage/TrustDocumentsV3?docid=48&amp;lang=en">Microsoft Shared Responsibility Model</a></p>



<p>Veeam Data Protection Report 2024: <a href="https://go.veeam.com/wp-data-protection-trends-2024">Veeam</a></p>



<p>Cybersecurity Ventures: <a href="https://cybersecurityventures.com/global-ransomware-damage-costs-predicted-to-reach-250-billion-usd-by-2031/">Global Ransomware Damage Costs Predicted To Reach $265 Billion By 2031</a></p>



<p>General Data Protection Regulation (GDPR): <a href="https://gdpr.eu/">GDPR.eu</a> and HIPAA Guide: <a href="https://www.hipaaguide.net/hipaa-record-retention-requirements">HIPAA Data Retention Requirements</a></p>



<p>Probax MSP Backup for Microsoft 365: <a href="https://probax.io/msp-backup-for-microsoft-365">Probax.io</a></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>AI: Is it really going to take over?</title>
		<link>https://testing.conetix.com.au/blog/ai-is-it-really-going-to-take-over/</link>
		
		<dc:creator><![CDATA[Tim Butler]]></dc:creator>
		<pubDate>Mon, 17 Apr 2023 03:13:45 +0000</pubDate>
				<category><![CDATA[General]]></category>
		<category><![CDATA[ai]]></category>
		<category><![CDATA[artificial intelligence]]></category>
		<category><![CDATA[business]]></category>
		<category><![CDATA[future]]></category>
		<category><![CDATA[technology]]></category>
		<guid isPermaLink="false">https://conetix.com.au/?p=19985</guid>

					<description><![CDATA[AI. Artificial Intelligence. There’s a crazy amount of hype going around about AI which includes everything like Skynet, mass job losses and/or changing the world. Suffice to say, the hype around AI in 2023 has hit an all time high. But, what is it really, what does it mean and is it really going to...  <a class="excerpt-read-more" href="https://testing.conetix.com.au/blog/ai-is-it-really-going-to-take-over/" title="Read AI: Is it really going to take over?">Read more &#187;</a>]]></description>
										<content:encoded><![CDATA[


<p>AI. Artificial Intelligence. There’s a crazy amount of hype going around about AI which includes everything like Skynet, mass job losses and/or changing the world. Suffice to say, the hype around AI in 2023 has hit an all time high.</p>



<p>But, what is it really, what does it mean and is it really going to run the world? As much as I don’t want this to sound like a clickbait headline, <em>the answer may shock you!</em></p>



<p>First, we need to start with the basics.</p>



<h2 class="wp-block-heading">What is AI?</h2>



<p>Artificial Intelligence is essentially  defined as:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>a simulation of basic human intelligence whereby the system can make decisions based on the information and then learn from decisions.&nbsp;</p>
</blockquote>



<p><em>Still doesn’t make sense right?&nbsp;</em></p>



<p>Think back to something like the basics of riding a bike. From a human perspective, we start with training wheels until we work out balance. As our confidence builds, in a few months to a year we can ride without them.</p>



<p>If we had to write a software program to do the same thing, there’s an enormous amount of scenarios we need to write. We need to measure the basics such as speed to get inertia, if we drop below a certain speed we require more inputs to correct. If we ride on an uneven surface, that’s different to a bitumen one. If we ride on a slightly sloped surface, we need to compensate for it and adjust. Now put into context being on a road with others, we now need to be able to understand how cars move, what side of the road to be on and what happens at intersections and what to do if a car turns in front of us. Being Australian, we also have the added risk and complexity of being swooped by <a href="https://en.wikipedia.org/wiki/Australian_magpie" target="_blank" rel="noreferrer noopener">magpies</a> (an Australian native bird which can be very territorial around nesting time).</p>



<p>As a programmer, if I have to write every scenario into a program on how to ride a bike this could be years and years of work, and the program would still only understand the exact scenarios I put in.</p>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="1024" height="1024" src="https://testing.conetix.com.au/wp-content/uploads/2023/04/room_full_of_humanoid_robots-midjourney.jpg" alt="" class="wp-image-19986" srcset="https://testing.conetix.com.au/wp-content/uploads/2023/04/room_full_of_humanoid_robots-midjourney.jpg 1024w, https://testing.conetix.com.au/wp-content/uploads/2023/04/room_full_of_humanoid_robots-midjourney-300x300.jpg 300w, https://testing.conetix.com.au/wp-content/uploads/2023/04/room_full_of_humanoid_robots-midjourney-150x150.jpg 150w, https://testing.conetix.com.au/wp-content/uploads/2023/04/room_full_of_humanoid_robots-midjourney-768x768.jpg 768w, https://testing.conetix.com.au/wp-content/uploads/2023/04/room_full_of_humanoid_robots-midjourney-50x50.jpg 50w, https://testing.conetix.com.au/wp-content/uploads/2023/04/room_full_of_humanoid_robots-midjourney-32x32.jpg 32w, https://testing.conetix.com.au/wp-content/uploads/2023/04/room_full_of_humanoid_robots-midjourney-64x64.jpg 64w, https://testing.conetix.com.au/wp-content/uploads/2023/04/room_full_of_humanoid_robots-midjourney-128x128.jpg 128w, https://testing.conetix.com.au/wp-content/uploads/2023/04/room_full_of_humanoid_robots-midjourney-250x250.jpg 250w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>This is where AI fits in. Instead of writing every scenario line by line, we feed in the inputs (speed, ground surface, angle of the road, cars, magpies etc) and we allow the AI to build what’s called a “model” to understand how to deal with these scenarios. With a limited amount of information, the initial results won’t be perfect.</p>



<p>However, the AI advantage is that we can (quite efficiently) keep training this model based on more input data to generate better outcomes. It may take a toddler a year of training in the afternoon to outgrow the requirement for training wheels. As humans, we then need a few years of understanding traffic and cars before it’s safe for us to ride on the roads. AI? With the right data this could be a <em>few hours</em> of training to build the model. We can then put it in simulated environments to build more data and keep perfecting the model.</p>



<p>The key bit here is that a programmer didn’t have to write thousands of extra lines of code to keep improving the system. </p>



<h2 class="wp-block-heading">Yeah OK, now I’m scared AI is taking over?!!</h2>



<p>There’s no need to panic… yet. With the above scenario of riding a bike, what we’ve described is <strong>narrow AI</strong>. This is a system which can do a specific task and can learn to do that very well. And, this is a great thing. The more of the simple tasks which can be automated, the better. Especially in the early days of AI, this is a perfect fit for mundane tasks. For example, do you have to write a letter or email to staff in regards to cleaning the fridge out? This is a nice, simple one for AI.</p>



<p>One of the systems gaining the most hype recently (and for good reason) is <a href="https://chat.openai.com/">ChatGPT</a>. Produced by the <a href="https://openai.com/">OpenAI</a> team, ChatGPT is a ​​generative pre-trained transformer AI system, which essentially means it can converse like a human where you can ask questions and even give feedback so it can adjust the answer.</p>



<p>For example, all I have to do ask for:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><em>“Write an email to all staff, asking them to clean their items out of the fridge or it goes in the bin next Friday”</em></p>
</blockquote>



<p>Using ChatGPT, this gives me:</p>



<pre class="wp-block-code"><code>Subject: Request for Fridge Cleanout

Dear All,

I hope this email finds you well. I am writing to request your immediate attention to the contents of the fridge. Over the past few weeks, the fridge has become cluttered with items that are past their expiration date or no longer needed.

In order to maintain a clean and organized workspace, I am asking that all staff remove any personal items from the fridge by next Friday, February 11th. Any items left in the fridge after this date will be discarded.

Please take a moment to check the contents of the fridge and make sure that you have removed all of your belongings. If you have any questions or concerns, please do not hesitate to reach out to me.

Thank you for your cooperation and understanding.

Best regards,

&#091;Your Name]</code></pre>



<p>You can see that with limited input, the ChatGPT system is able to expand this out into a verbose letter and even added the date (as at the time of writing this article).</p>



<p>What’s even better is that we’re able to tune and adjust quickly. What if this is the 5th time staff have been told? Lets ask ChatGPT to “<em>make the letter angry</em>”:</p>



<pre class="wp-block-code"><code>Subject: Urgent Request for Fridge Cleanout

Dear All,

I am writing to you with great frustration and disappointment. The contents of the fridge have become completely unacceptable and it is clear that some staff members are not taking responsibility for their own items.

I am completely fed up with the cluttered and unsanitary state of the fridge. As a result, I am giving everyone a final warning to remove their belongings by next Friday, February 11th. Any items left in the fridge after this date will be promptly thrown in the trash without exception.

This is not a request. It is an ultimatum. I expect all staff to act like professionals and take responsibility for their own belongings. If you are unable to do so, then I suggest you reconsider your place in this company.

I am beyond disappointed in the behavior of some staff members and the lack of consideration for the common area. This is a workplace, not a storage unit. I expect all staff to maintain a clean and organized environment.

Please take this email seriously and take immediate action to clean out your items from the fridge.

Best regards,

&#091;Your Name]</code></pre>



<p>You can see that we can near instantly change the tone by giving simple feedback to ChatGPT to produce the result we want. There area already tools which can analyse your existing emails and writing to mimic your personal writing style to further personalise the output too.</p>



<h2 class="wp-block-heading">Is my job at risk of being replaced by AI?</h2>



<p>This quick answer is, “it depends”.</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="1024" src="https://testing.conetix.com.au/wp-content/uploads/2023/04/humans_out_of_a_job-midjourney-1024x1024.jpg" alt="" class="wp-image-19988" srcset="https://testing.conetix.com.au/wp-content/uploads/2023/04/humans_out_of_a_job-midjourney-1024x1024.jpg 1024w, https://testing.conetix.com.au/wp-content/uploads/2023/04/humans_out_of_a_job-midjourney-300x300.jpg 300w, https://testing.conetix.com.au/wp-content/uploads/2023/04/humans_out_of_a_job-midjourney-150x150.jpg 150w, https://testing.conetix.com.au/wp-content/uploads/2023/04/humans_out_of_a_job-midjourney-768x768.jpg 768w, https://testing.conetix.com.au/wp-content/uploads/2023/04/humans_out_of_a_job-midjourney-50x50.jpg 50w, https://testing.conetix.com.au/wp-content/uploads/2023/04/humans_out_of_a_job-midjourney-1536x1536.jpg 1536w, https://testing.conetix.com.au/wp-content/uploads/2023/04/humans_out_of_a_job-midjourney-32x32.jpg 32w, https://testing.conetix.com.au/wp-content/uploads/2023/04/humans_out_of_a_job-midjourney-64x64.jpg 64w, https://testing.conetix.com.au/wp-content/uploads/2023/04/humans_out_of_a_job-midjourney-128x128.jpg 128w, https://testing.conetix.com.au/wp-content/uploads/2023/04/humans_out_of_a_job-midjourney-250x250.jpg 250w, https://testing.conetix.com.au/wp-content/uploads/2023/04/humans_out_of_a_job-midjourney.jpg 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>Anything AI driven currently requires the inputs and outputs of the role to be reasonably well defined and/or ideally a repeatable process.</p>



<p>As shown in our letter above, it’s quite possible that positions such as Executive Assistants (EA’s) will certainly be augmented by AI but could quite genuinely be replaced within the next decade.&nbsp;</p>



<p>Already, we have AI driven phone assistants whereby it’s able to wait on hold and then negotiate booking appointments such as a restaurant by cross-referencing a calendar to find a suitable time.</p>



<p>However, it’s not just EA’s. Again, thinking back to a repeatable process with defined inputs and outputs… one possible role which could be replaced is a Systems Administrator (sysadmin). I know that’ll have many in IT shocked, but let’s look at the basic flow at times:</p>



<ol class="wp-block-list">
<li>An error occurs, generally a complex one which doesn’t make a lot of sense</li>



<li>Sysadmins scour Google and sites like Stack Overflow to find an exact match for the error</li>



<li>If an exact match doesn’t occur, ones similar are searched and a fix (hopefully) located.</li>



<li>A fix is then applied, then the system monitored for adverse events and to confirm if it worked.</li>
</ol>



<p>This is of course one of many tasks sysadmins perform, but it shows how the input (the error) is defined and the output (the fix) is also able to be measured so there&#8217;s the ability to either semi-automate or replace sysadmin&#8217;s performing the role. </p>



<p>Other roles where this can be neatly defined include things like bookkeepers, accountants, lawyers, market research / data analysts and more.</p>



<p>And, this is all still <em>narrow AI.</em> </p>



<p>The shift to<strong> general AI </strong>will change all of this and quite dramatically. Essentially, at a general AI level there&#8217;s no difference between what AI can do compared to an adult human. This means being able to give it unfamiliar tasks and instructions yet still being capable of completing the job. Once we hit this point, <em>every</em> job can be potentially be replaced by AI.</p>



<h2 class="wp-block-heading">Alright, if I’m not immediately being replaced… How can I use AI?</h2>



<p>Excellent question and an excellent approach. We shouldn’t fear AI. Change <em>is</em><strong><em> </em></strong>going to occur so it’s best we embrace it instead of avoiding it.&nbsp;</p>



<h3 class="wp-block-heading">Coding</h3>



<p>Right now, the current hotness in AI is clearly ChatGPT. And with good reason. It’s a helpful tool which is simple to use yet very effective. Our letter is only one very small part of what it can do. ChatGPT can also code! For example, I asked ChatGPT to write a small function to extract the domain name from a URL. Here’s what I asked:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><em>“Write a Groovy script to generate a filename safe, base 64 encoded URL”</em></p>
</blockquote>



<figure class="wp-block-image size-full"><img decoding="async" width="728" height="500" src="https://testing.conetix.com.au/wp-content/uploads/2023/04/groovyscript.png" alt="" class="wp-image-19989" srcset="https://testing.conetix.com.au/wp-content/uploads/2023/04/groovyscript.png 728w, https://testing.conetix.com.au/wp-content/uploads/2023/04/groovyscript-300x206.png 300w, https://testing.conetix.com.au/wp-content/uploads/2023/04/groovyscript-50x34.png 50w, https://testing.conetix.com.au/wp-content/uploads/2023/04/groovyscript-32x22.png 32w, https://testing.conetix.com.au/wp-content/uploads/2023/04/groovyscript-64x44.png 64w, https://testing.conetix.com.au/wp-content/uploads/2023/04/groovyscript-128x88.png 128w" sizes="(max-width: 728px) 100vw, 728px" /></figure>



<p>Not only did it write the code, but it explained how it worked. As a programmer, even if this wasn’t 100% correct it’s a very good start! Being able to get 90% of the answer within 10 seconds <em>and</em> having a system explain it is an awesome start.</p>



<h3 class="wp-block-heading">Image Generation</h3>



<p>Want some images? This is where <a href="https://www.midjourney.com/" target="_blank" rel="noreferrer noopener">Midjourney</a> comes in! In fact, other than the screenshots all images in this article have been generated by Midjourney. Put simply, it’s a text to image generation system. You describe the image or scene you’re trying to create, and it will start generating images which it thinks are a fit.</p>



<p>For example, here’s a prompt which was to create the cover image:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><em>describe how artificial intelligence works, infographics, blueprint, detailed, line art, computing, graphics&nbsp;</em></p>
</blockquote>



<p>From this prompt, we received 4 images which Midjourney had created:</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="683" src="https://testing.conetix.com.au/wp-content/uploads/2023/04/describe_how_artificial_intelligence_works-4-images-midjourney-1024x683.jpg" alt="" class="wp-image-19990" style="height:600px" srcset="https://testing.conetix.com.au/wp-content/uploads/2023/04/describe_how_artificial_intelligence_works-4-images-midjourney-1024x683.jpg 1024w, https://testing.conetix.com.au/wp-content/uploads/2023/04/describe_how_artificial_intelligence_works-4-images-midjourney-300x200.jpg 300w, https://testing.conetix.com.au/wp-content/uploads/2023/04/describe_how_artificial_intelligence_works-4-images-midjourney-768x512.jpg 768w, https://testing.conetix.com.au/wp-content/uploads/2023/04/describe_how_artificial_intelligence_works-4-images-midjourney-50x33.jpg 50w, https://testing.conetix.com.au/wp-content/uploads/2023/04/describe_how_artificial_intelligence_works-4-images-midjourney-1536x1024.jpg 1536w, https://testing.conetix.com.au/wp-content/uploads/2023/04/describe_how_artificial_intelligence_works-4-images-midjourney-2048x1365.jpg 2048w, https://testing.conetix.com.au/wp-content/uploads/2023/04/describe_how_artificial_intelligence_works-4-images-midjourney-32x21.jpg 32w, https://testing.conetix.com.au/wp-content/uploads/2023/04/describe_how_artificial_intelligence_works-4-images-midjourney-64x43.jpg 64w, https://testing.conetix.com.au/wp-content/uploads/2023/04/describe_how_artificial_intelligence_works-4-images-midjourney-128x85.jpg 128w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>I could keep iterating through and generating variances of images and if I find one close, I can get the system to vary it or simply just generate a higher quality version. The good thing here is, for relatively low cost you can provide plenty of creative input to generate unique and hopefully very on-topic artwork and images.</p>



<h3 class="wp-block-heading">Web Development</h3>



<p>For web development, there’s already some very neat demos with the latest GPT-4 was turning a very rough sketch into a full website.</p>



<figure class="wp-block-image size-large is-resized is-style-default"><img loading="lazy" decoding="async" width="1024" height="728" src="https://testing.conetix.com.au/wp-content/uploads/2023/04/gpt4-sketch-1024x728.jpg" alt="" class="wp-image-19992" style="height:500px" srcset="https://testing.conetix.com.au/wp-content/uploads/2023/04/gpt4-sketch-1024x728.jpg 1024w, https://testing.conetix.com.au/wp-content/uploads/2023/04/gpt4-sketch-300x213.jpg 300w, https://testing.conetix.com.au/wp-content/uploads/2023/04/gpt4-sketch-768x546.jpg 768w, https://testing.conetix.com.au/wp-content/uploads/2023/04/gpt4-sketch-50x36.jpg 50w, https://testing.conetix.com.au/wp-content/uploads/2023/04/gpt4-sketch-1536x1092.jpg 1536w, https://testing.conetix.com.au/wp-content/uploads/2023/04/gpt4-sketch-32x23.jpg 32w, https://testing.conetix.com.au/wp-content/uploads/2023/04/gpt4-sketch-64x46.jpg 64w, https://testing.conetix.com.au/wp-content/uploads/2023/04/gpt4-sketch-128x91.jpg 128w, https://testing.conetix.com.au/wp-content/uploads/2023/04/gpt4-sketch.jpg 1806w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Source: <a href="https://youtu.be/outcGtbnMuQ?t=979" target="_blank" rel="noreferrer noopener">OpenAI GPT-4 Demo</a></figcaption></figure>



<p>A few years ago it’d be inconceivable to think this sort of system would be available. Now in 2023, it’s instead going to be a reality. Even if the result isn’t perfect, we’ll be able to prototype and code the basics of some ideas to get rapid feedback.&nbsp;</p>



<p>Imagine being able to quickly draw a website while sitting with a client, then present a working prototype to them minutes later? Even better, imagine if the code is of sufficient quality that you can actually build upon and implement it within hours instead of days? This is where AI will be heading in the world of web development.</p>



<h2 class="wp-block-heading">&#8230; And more</h2>



<p>Quite simply, the rate of new tools and concepts being released is hard to comprehend. There&#8217;s up to 1,000 new AI based tools and programs <strong>per week</strong> being released. Everything which was too niche and too specialised will have a number of tools developed and released within the next 12 months. Here&#8217;s just a very, very small snippet of a few tools which may be of interest:</p>



<ul class="wp-block-list">
<li><a href="https://www.jounce.ai/" target="_blank" rel="noreferrer noopener">Jounce</a> &#8211; AI copywriting and artwork for marketers</li>



<li><a href="https://10web.io/" target="_blank" rel="noreferrer noopener">10web</a> &#8211; AI powered WordPress</li>



<li><a href="https://www.hyperwriteai.com/" target="_blank" rel="noreferrer noopener">HyperWrite</a> &#8211; Personalised AI writing assistant</li>



<li><a href="https://www.synthesia.io/" target="_blank" rel="noreferrer noopener">Synthesia</a> &#8211; AI video generation</li>



<li><a href="https://www.stork.ai/ai-tools/superusapp-com" target="_blank" rel="noreferrer noopener">Superus</a> &#8211; AI powered, automated mind mapping</li>



<li><a href="https://seomatic.ai/" target="_blank" rel="noreferrer noopener">Seomatic</a> &#8211; AI driven SEO </li>



<li><a href="https://magical.so/" target="_blank" rel="noreferrer noopener">Magical</a> &#8211; AI powered meeting management</li>



<li><a href="https://www.lavender.ai/" target="_blank" rel="noreferrer noopener">Lavender</a> &#8211; AI powered sales coach</li>



<li><a href="https://www.usechannel.com/" target="_blank" rel="noreferrer noopener">Channel</a> &#8211; AI powered business analysis</li>
</ul>



<p>Again, this is just a small fraction of the tools available which may help your business and assist with web development. By the time you read this article, there&#8217;s going to be thousands more . </p>



<h2 class="wp-block-heading">Can AI be a villain too?</h2>



<p>Any tool which can be used for good unfortunately also has some bad to it. There are a number of problems AI poses. It doesn’t mean we necessarily need to be afraid of it, but simply aware so we can plan around and look out for.</p>



<p>Firstly, in the context of narrow AI we have the issue of bias. AI doesn’t know ethics, if it’s fed millions of pages from books then it doesn’t necessarily understand views on things like racism have changed massively in the last 50 years. Some of the issues can also come from marginalised groups, whereby the content might only be very small and therefore not equally represented. It means these AI systems have to work around the issues and has certainly been one of the early issues.</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://testing.conetix.com.au/wp-content/uploads/2023/04/criminals_and_hackers-midjourney.jpg" alt="" class="wp-image-19994" style="height:600px" srcset="https://testing.conetix.com.au/wp-content/uploads/2023/04/criminals_and_hackers-midjourney.jpg 1024w, https://testing.conetix.com.au/wp-content/uploads/2023/04/criminals_and_hackers-midjourney-300x300.jpg 300w, https://testing.conetix.com.au/wp-content/uploads/2023/04/criminals_and_hackers-midjourney-150x150.jpg 150w, https://testing.conetix.com.au/wp-content/uploads/2023/04/criminals_and_hackers-midjourney-768x768.jpg 768w, https://testing.conetix.com.au/wp-content/uploads/2023/04/criminals_and_hackers-midjourney-50x50.jpg 50w, https://testing.conetix.com.au/wp-content/uploads/2023/04/criminals_and_hackers-midjourney-32x32.jpg 32w, https://testing.conetix.com.au/wp-content/uploads/2023/04/criminals_and_hackers-midjourney-64x64.jpg 64w, https://testing.conetix.com.au/wp-content/uploads/2023/04/criminals_and_hackers-midjourney-128x128.jpg 128w, https://testing.conetix.com.au/wp-content/uploads/2023/04/criminals_and_hackers-midjourney-250x250.jpg 250w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Secondly, if you can get an AI system to write code for normal programs, then it can also write code for malicious programs. With ransomware being such a lucrative, criminal income then some of these tools (despite systems trying to block it) will be used to produce new and malicious code.</p>



<p>Move forward to general AI and we have a huge risk factor. A system making very complex and intelligent decisions. Anything we can train the system to do good, someone will have the capability to do the opposite.</p>



<p>The trouble here is, there’s nothing we can do to stop this. It’s like building stronger cars and expecting them not to be used in ram raids or as getaway cars. There’s simply <em>always</em> going to be an element of human society which will misuse and exploit for personal gain.&nbsp;</p>



<p>Instead of fearing it however, we simply need to plan for it. We already (mostly!) <a href="https://testing.conetix.com.au/blog/secure-passwords-why-theyre-important/" data-type="post" data-id="1962">secure our passwords</a> and ensure systems remain locked down. There’s already scripts and hackers constantly scouring the internet to find systems to exploit, all that changes is how clever these systems could be. What may have been an optional lockdown will become a mandatory one to keep your system protected.</p>



<h2 class="wp-block-heading">What’s next with AI?</h2>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="683" src="https://testing.conetix.com.au/wp-content/uploads/2023/04/prediction_of_how_the_future_will_look-midjourney-1024x683.jpg" alt="" class="wp-image-19995" srcset="https://testing.conetix.com.au/wp-content/uploads/2023/04/prediction_of_how_the_future_will_look-midjourney-1024x683.jpg 1024w, https://testing.conetix.com.au/wp-content/uploads/2023/04/prediction_of_how_the_future_will_look-midjourney-300x200.jpg 300w, https://testing.conetix.com.au/wp-content/uploads/2023/04/prediction_of_how_the_future_will_look-midjourney-768x512.jpg 768w, https://testing.conetix.com.au/wp-content/uploads/2023/04/prediction_of_how_the_future_will_look-midjourney-50x33.jpg 50w, https://testing.conetix.com.au/wp-content/uploads/2023/04/prediction_of_how_the_future_will_look-midjourney-32x21.jpg 32w, https://testing.conetix.com.au/wp-content/uploads/2023/04/prediction_of_how_the_future_will_look-midjourney-64x43.jpg 64w, https://testing.conetix.com.au/wp-content/uploads/2023/04/prediction_of_how_the_future_will_look-midjourney-128x85.jpg 128w, https://testing.conetix.com.au/wp-content/uploads/2023/04/prediction_of_how_the_future_will_look-midjourney.jpg 1344w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>As only the last two iterations of ChatGPT have shown, things are improving at an <strong>exponential rate</strong>. We haven’t seen a rise in technology change occur this quickly ever (even back to when computers were first invented), so there’s going to be lots of excitement and some definite bumps in the road.</p>



<p>My prediction is that things will change from “I wonder what AI could do here” to “how did we ever do without it”. Especially where AI can take away the ultra repetitive tasks, we’re going to see things advance and evolve rapidly and it definitely will disrupt a number of areas across different industries.</p>



<p>Even in the short term (within the next 12 months), if you’re not using ChatGPT or a similar system then <strong>you’re already falling behind</strong>. More and more programs are going to be integrating GPT style systems into their existing systems to give them an edge over the competition.</p>



<p>The important bit here isn’t to fear this change, but embrace and adapt. Government regulation will be very slow to adapt (as usual) and there’s going to be ethical questions about where AI should or shouldn&#8217;t be used but doing nothing simply isn&#8217;t viable. For example, can you trust an AI doctor over a human one? &nbsp;</p>



<p>Unlike fictional things like <a href="https://en.wikipedia.org/wiki/Skynet_(Terminator)" target="_blank" rel="noreferrer noopener">Skynet</a> however, we’ll remain in control so it’s all about the best use of the technology. As an avid technology enthusiast, I&#8217;m super excited to see how our AI future pans out!</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Anchoring Bias: The IT Technician&#8217;s Arch Nemesis for fault finding</title>
		<link>https://testing.conetix.com.au/blog/anchoring-bias-the-it-technicians-arch-nemesis-for-fault-finding/</link>
					<comments>https://testing.conetix.com.au/blog/anchoring-bias-the-it-technicians-arch-nemesis-for-fault-finding/#comments</comments>
		
		<dc:creator><![CDATA[Tim Butler]]></dc:creator>
		<pubDate>Tue, 25 Aug 2020 04:17:06 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[anchor bias]]></category>
		<category><![CDATA[bias]]></category>
		<category><![CDATA[expert beginner]]></category>
		<category><![CDATA[fault finding]]></category>
		<category><![CDATA[learning]]></category>
		<guid isPermaLink="false">https://conetix.com.au/?p=11454</guid>

					<description><![CDATA[Regardless of if we realise it or not, we apply our own biases to our cognitive thinking all the time. In the Information Technology (IT) world of diagnostics, one of the most influential is Anchoring Bias. Let’s start with the definition: Anchoring or focalism is a cognitive bias where an individual depends too heavily on...  <a class="excerpt-read-more" href="https://testing.conetix.com.au/blog/anchoring-bias-the-it-technicians-arch-nemesis-for-fault-finding/" title="Read Anchoring Bias: The IT Technician&#8217;s Arch Nemesis for fault finding">Read more &#187;</a>]]></description>
										<content:encoded><![CDATA[
<p>Regardless of if we realise it or not, we apply our own biases to our cognitive thinking all the time. In the Information Technology (IT) world of diagnostics, one of the most influential is <strong>Anchoring Bias.</strong> Let’s start with the definition:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><em>Anchoring or focalism is a cognitive bias where an individual depends too heavily on an initial piece of information offered to make subsequent judgments during decision making. Once the value of this anchor is set, all future negotiations, arguments, estimates, etc. are discussed in relation to the anchor.</em></p><cite>Source: <a href="https://en.wikipedia.org/wiki/Anchoring_(cognitive_bias)">https://en.wikipedia.org/wiki/Anchoring_(cognitive_bias)</a></cite></blockquote>



<p>The important part to remember here is that <strong>subconsciously your brain can and will fixate on the first piece of information it finds</strong>. When it comes to fault finding, this can be the first error we see or the first reported information provided. This information (and therefore bias) can then cloud our judgement when it comes to further diagnostics of a fault, as we gravitate back to that singular piece of information instead of considering the bigger picture.</p>



<p>An IT person’s job is normally 90% fault finding, 10% doing. As the saying goes: “<em>I’m not a geek, I’m just better at Googling than you</em>”. What’s more, the saying is right. Nobody wants to spend 3 hours diagnosing the cause of a fault if they can simply jump straight to the fix.</p>



<p>Programmers are no different here too, the moment there’s a fault or error message it’s straight to Google to try and find someone else who’s had the same issue so that they can copy and paste the code to fix.</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="735" height="613" src="https://testing.conetix.com.au/wp-content/uploads/2020/07/doctors-googling-stuff-online-does-not-make-you-a-doctor-programmers-confused.jpg" alt="" class="wp-image-11457" srcset="https://testing.conetix.com.au/wp-content/uploads/2020/07/doctors-googling-stuff-online-does-not-make-you-a-doctor-programmers-confused.jpg 735w, https://testing.conetix.com.au/wp-content/uploads/2020/07/doctors-googling-stuff-online-does-not-make-you-a-doctor-programmers-confused-300x250.jpg 300w, https://testing.conetix.com.au/wp-content/uploads/2020/07/doctors-googling-stuff-online-does-not-make-you-a-doctor-programmers-confused-50x42.jpg 50w, https://testing.conetix.com.au/wp-content/uploads/2020/07/doctors-googling-stuff-online-does-not-make-you-a-doctor-programmers-confused-32x27.jpg 32w, https://testing.conetix.com.au/wp-content/uploads/2020/07/doctors-googling-stuff-online-does-not-make-you-a-doctor-programmers-confused-64x53.jpg 64w, https://testing.conetix.com.au/wp-content/uploads/2020/07/doctors-googling-stuff-online-does-not-make-you-a-doctor-programmers-confused-128x107.jpg 128w" sizes="auto, (max-width: 735px) 100vw, 735px" /><figcaption>Source: <a href="https://starecat.com/doctors-googling-stuff-online-does-not-make-you-a-doctor-programmers-confused/">starecat.com</a></figcaption></figure></div>



<p>While finding the right result in Google can and does lead to a quick fix in many cases, it can also lead to a fallacy in your decision making process. In many cases, the focus is then on finding the right result for the error message, not <strong>why </strong>the error message existed in the first place.</p>



<h2 class="wp-block-heading">A real world example</h2>



<p>This is where Anchoring bias will rear its ugly head. If we see an error message about backups failing because it couldn’t run a certain command, we’re straight onto Google to find someone else who’s experienced that error message. IT faults can usually be broken down into three parts:</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="240" height="300" src="https://testing.conetix.com.au/wp-content/uploads/2020/07/conetix-fault-parts.png" alt="" class="wp-image-11458" srcset="https://testing.conetix.com.au/wp-content/uploads/2020/07/conetix-fault-parts.png 240w, https://testing.conetix.com.au/wp-content/uploads/2020/07/conetix-fault-parts-40x50.png 40w, https://testing.conetix.com.au/wp-content/uploads/2020/07/conetix-fault-parts-26x32.png 26w, https://testing.conetix.com.au/wp-content/uploads/2020/07/conetix-fault-parts-51x64.png 51w, https://testing.conetix.com.au/wp-content/uploads/2020/07/conetix-fault-parts-102x128.png 102w" sizes="auto, (max-width: 240px) 100vw, 240px" /></figure></div>



<p>To start with, we normally only have the result and the output. For example:</p>



<figure class="wp-block-table"><table><tbody><tr><td><strong>Result</strong></td><td>Backups Failed</td></tr><tr><td><strong>Output</strong></td><td>Error message in the logs that the system didn’t have the correct permissions to create the backup file.</td></tr></tbody></table></figure>



<p>In this scenario (which was a real world one), it’s very easy to race to the conclusion that the filesystem has the wrong permissions and start to google for “Vendor X error file permissions” or to even start instantly running commands to widen permissions.</p>



<p>Scenarios like this are what have led to so many S3 bucket leaks, where the wrong fix is applied to a backup failure fault and while it may fix the problem it’s created a far worse one behind the scenes.</p>



<p>Because the focus was all on <strong>what</strong> the error said, we lost sight of the actual fault itself. In this real world scenario, here was the resultant fault:</p>



<figure class="wp-block-table"><table><tbody><tr><td><strong>Fault</strong></td><td>Storage was full.</td></tr></tbody></table></figure>



<p>The true fault ended up being that the backup system had run out of disk space. The particular vendor (seemingly) had no check in place to determine if it should try to create a new backup file and therefore failed during that particular area of the code.</p>



<p>But why the wrong error message? It’s normally because we see error messages where a try / catch or other similar error handling is too broad. For example, here’s some pseudo code for the above example:</p>



<pre class="wp-block-code"><code>try {
   create_backup_file();
   set_backup_permissions();
   start_backup();
}
catch (err) {
   panic("Failed to start the backup. Tried to set the backup permissions but couldn't do so");
}</code></pre>



<p>Because there’s multiple potential points of failure handled by a singular error message, it means the error itself may not be enough to effectively fault find.</p>



<p>Those who remember Windows 95 and had filled their hard drive may have been greeted with this error:</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="800" height="267" src="https://testing.conetix.com.au/wp-content/uploads/2020/07/cannot-delete-samples.jpg" alt="" class="wp-image-11459" srcset="https://testing.conetix.com.au/wp-content/uploads/2020/07/cannot-delete-samples.jpg 800w, https://testing.conetix.com.au/wp-content/uploads/2020/07/cannot-delete-samples-300x100.jpg 300w, https://testing.conetix.com.au/wp-content/uploads/2020/07/cannot-delete-samples-768x256.jpg 768w, https://testing.conetix.com.au/wp-content/uploads/2020/07/cannot-delete-samples-50x17.jpg 50w, https://testing.conetix.com.au/wp-content/uploads/2020/07/cannot-delete-samples-32x11.jpg 32w, https://testing.conetix.com.au/wp-content/uploads/2020/07/cannot-delete-samples-64x21.jpg 64w, https://testing.conetix.com.au/wp-content/uploads/2020/07/cannot-delete-samples-128x43.jpg 128w" sizes="auto, (max-width: 800px) 100vw, 800px" /><figcaption>Source: <a href="https://www.techrepublic.com/pictures/27-old-school-computer-error-screens-that-will-fill-you-with-anxiety/12/">techrepublic.com</a></figcaption></figure></div>



<p>This one is obvious of course, but a simple example of how the wrong conclusion to a fault has led to a scenario which doesn’t make sense.</p>



<h2 class="wp-block-heading">It gets worse</h2>



<p>Even worse, when there’s no corresponding error message or log output for the fault at all, we can sometimes attribute the fault to one of the other (unrelated) error messages. This scenario still involves Anchoring bias as we’ve fixated on the first message seen and means we drift even further off track trying to find the fault. Time is now spent chasing errors which aren’t even related to the original fault, leading to the possibility of applying fixes which will make things worse instead of better. These “fixes” can then induce further faults, leading to a huge mess or catastrophic failure instead of a minor one.</p>



<p>Biases can also be combined subconsciously with other cognitive faults as well. As it was distinctly put by Erik Dietrich, you can also have <strong><a href="https://daedtech.com/how-developers-stop-learning-rise-of-the-expert-beginner/">Expert Beginners</a></strong>:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="413" height="777" src="https://testing.conetix.com.au/wp-content/uploads/2020/07/ExpertBeginner.jpg" alt="" class="wp-image-11462" srcset="https://testing.conetix.com.au/wp-content/uploads/2020/07/ExpertBeginner.jpg 413w, https://testing.conetix.com.au/wp-content/uploads/2020/07/ExpertBeginner-159x300.jpg 159w, https://testing.conetix.com.au/wp-content/uploads/2020/07/ExpertBeginner-27x50.jpg 27w, https://testing.conetix.com.au/wp-content/uploads/2020/07/ExpertBeginner-17x32.jpg 17w, https://testing.conetix.com.au/wp-content/uploads/2020/07/ExpertBeginner-34x64.jpg 34w, https://testing.conetix.com.au/wp-content/uploads/2020/07/ExpertBeginner-68x128.jpg 68w" sizes="auto, (max-width: 413px) 100vw, 413px" /><figcaption>Source: <a href="https://daedtech.com/how-developers-stop-learning-rise-of-the-expert-beginner/" target="_blank" aria-label="undefined (opens in a new tab)" rel="noreferrer noopener">daedtech.com</a></figcaption></figure>



<p>The difficulty is that as you learn, you can fall into the false trap that you understand a system well enough that your learning plateaus. This is normally due to only having a narrow view or understanding of a system, whereby you’ve only dealt with a small component of a large system and therefore reach the logical fallacy that you’ve learnt everything there is to know.</p>



<p>This narrowed view combined with anchoring bias leads will often strip you of the ability to consider wider views of the systems and the complexities involved.</p>



<h2 class="wp-block-heading">How do we get around it?</h2>



<p>There’s a few quick steps we can take:</p>



<p><strong>Acknowledge the existence of bias:</strong> Like any bias, the first step is to acknowledge the existence. Once you know to be wary of this bias, it means you can compensate for it. There’s more than a dozen <a href="https://en.wikipedia.org/wiki/List_of_cognitive_biases" target="_blank" rel="noreferrer noopener">different biases</a> which can affect your fault finding and decision making processes too, so it&#8217;s worth understanding how and where they may affect your thinking.</p>



<p><strong>Write the fault out on paper:</strong> In the same way that <a href="https://en.wikipedia.org/wiki/Rubber_duck_debugging" target="_blank" rel="noreferrer noopener">Rubber duck debugging</a> can help you because it forces you to put all the pieces together, writing it out on paper can also achieve the same thing. I also find drawing a timeline or flow diagram also helps, again because your brain will skip parts unless you force it to explicitly detail each stage.</p>



<p><strong>Treat error messages with scepticism.</strong> Unless you can see the code itself to confirm, expect that they may not cover every fault scenario fully and may be generic messages. Think about the error message in context, does it fit the fault scenario? Did it occur timing wise when you&#8217;d expect it to trigger? Could it be triggered by a different scenario?</p>



<p><strong>Look for the cause, not the symptom:</strong> This is the most effective method. Many of these examples can be traced back to the fault if you look for the <strong>cause</strong>. This isn’t to say we ignore the symptoms as such, but in a broad sense we use them as guidance not as gospel.&nbsp;</p>



<p>In our storage scenario, we can use the fact that it can’t set file permissions as a guide that the fault is to do with the filesystem and not as narrow as just file permissions themselves.</p>



<p>Running through rudimentary system checks in these scenarios (ie, looking at space, system load, network errors etc) can potentially serve as a quick sanity check and identify root causes early. At the very least, they will give you some confirmation that there’s not a high level or systemic fault.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://testing.conetix.com.au/blog/anchoring-bias-the-it-technicians-arch-nemesis-for-fault-finding/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>HTTP Status Codes &#8211; What they really mean</title>
		<link>https://testing.conetix.com.au/blog/http-status-codes-what-they-really-mean/</link>
		
		<dc:creator><![CDATA[Tim Butler]]></dc:creator>
		<pubDate>Thu, 06 Aug 2020 23:47:35 +0000</pubDate>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Web Hosting]]></category>
		<category><![CDATA[202]]></category>
		<category><![CDATA[301]]></category>
		<category><![CDATA[403]]></category>
		<category><![CDATA[404]]></category>
		<category><![CDATA[500]]></category>
		<category><![CDATA[502]]></category>
		<category><![CDATA[503]]></category>
		<category><![CDATA[522]]></category>
		<category><![CDATA[codes]]></category>
		<category><![CDATA[status]]></category>
		<guid isPermaLink="false">https://conetix.com.au/?p=10898</guid>

					<description><![CDATA[While we&#8217;d all love our websites to run 24/7, 365 days a year without any errors, every now and then you may experience an issue. Sometimes, your website may be broken enough that it can&#8217;t show an error or it may be the web server itself displaying an error to you. The HyperText Transfer Protocol...  <a class="excerpt-read-more" href="https://testing.conetix.com.au/blog/http-status-codes-what-they-really-mean/" title="Read HTTP Status Codes &#8211; What they really mean">Read more &#187;</a>]]></description>
										<content:encoded><![CDATA[
<p>While we&#8217;d all love our websites to run 24/7, 365 days a year without any errors, every now and then you may experience an issue. Sometimes, your website may be broken enough that it can&#8217;t show an error or it may be the web server itself displaying an error to you.</p>



<p>The HyperText Transfer Protocol (HTTP) and HyperText Transfer Protocol Secure (HTTPS) are the key protocols used to communicate between your web browser and the web server. For example, here&#8217;s a very basic example:</p>



<div class="wp-block-image"><figure class="aligncenter size-large is-resized"><img decoding="async" src="https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-simple.png" alt="" class="wp-image-10950" width="500" srcset="https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-simple.png 812w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-simple-300x72.png 300w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-simple-768x184.png 768w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-simple-50x12.png 50w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-simple-32x8.png 32w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-simple-64x15.png 64w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-simple-128x31.png 128w" sizes="(max-width: 812px) 100vw, 812px" /></figure></div>



<p>While this is a simplified view, when the web server returns the data it&#8217;ll also send back a status code so that the browser knows if it was successful (200) or not. </p>



<p>While the list below isn&#8217;t all of the status codes, these are the common ones you may experience as well as some easy to understand examples of when they occur and what you action you need to take (if any).</p>





<p></p>



<h2 class="wp-block-heading">200 OK</h2>



<figure class="wp-block-table"><table><tbody><tr><td><strong>Meaning</strong></td><td>&nbsp;The request has succeeded.</td></tr></tbody></table></figure>



<p><strong>Example</strong></p>



<div class="wp-block-image"><figure class="aligncenter size-large is-resized"><img decoding="async" src="https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-200.png" alt="" class="wp-image-10903" width="500" srcset="https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-200.png 812w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-200-300x187.png 300w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-200-768x479.png 768w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-200-50x31.png 50w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-200-32x20.png 32w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-200-64x40.png 64w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-200-128x80.png 128w" sizes="(max-width: 812px) 100vw, 812px" /></figure></div>



<p>Any website which loads without error. This is the code you expect to see from your web server most of the time.</p>



<h2 class="wp-block-heading">301 Moved Permanently</h2>



<figure class="wp-block-table"><table><tbody><tr><td><strong>Meaning</strong></td><td>The requested resource has been assigned a new permanent <a aria-label="undefined (opens in a new tab)" href="https://en.wikipedia.org/wiki/Uniform_Resource_Identifier" target="_blank" rel="noreferrer noopener">Uniform Resource Identifier</a> (URI) and any future references to this resource SHOULD use one of the returned URIs.</td></tr></tbody></table></figure>



<p><strong>Example</strong></p>



<div class="wp-block-image"><figure class="aligncenter size-large is-resized"><img decoding="async" src="https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-301-1.png" alt="" class="wp-image-10902" width="500" srcset="https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-301-1.png 812w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-301-1-300x196.png 300w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-301-1-768x501.png 768w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-301-1-50x33.png 50w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-301-1-32x21.png 32w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-301-1-64x42.png 64w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-301-1-128x84.png 128w" sizes="(max-width: 812px) 100vw, 812px" /></figure></div>



<p>If you&#8217;ve changed website platforms where the <a href="https://en.wikipedia.org/wiki/URL" target="_blank" aria-label="undefined (opens in a new tab)" rel="noreferrer noopener">Uniform Resource Locator </a>(URL) is now different, then adding 301 redirects tells the browser (or web crawler, eg Google) that the page, image or similar has moved permanently to a new location. </p>



<h2 class="wp-block-heading">404 Not Found</h2>



<figure class="wp-block-table"><table><tbody><tr><td><strong>Meaning</strong></td><td>The server couldn&#8217;t find anything matching the request.</td></tr></tbody></table></figure>



<p><strong>Example</strong></p>



<div class="wp-block-image"><figure class="aligncenter size-large is-resized"><img decoding="async" src="https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-404.png" alt="" class="wp-image-10904" width="500" srcset="https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-404.png 812w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-404-300x196.png 300w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-404-768x501.png 768w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-404-50x33.png 50w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-404-32x21.png 32w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-404-64x42.png 64w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-404-128x84.png 128w" sizes="(max-width: 812px) 100vw, 812px" /></figure></div>



<p>If you&#8217;ve deleted a page or renamed an image, it may generate a 404 if someone tries to access it. This is also common when you&#8217;ve built a new website and the URL structure has changed, so it&#8217;s important to analyse and redirect any broken links to the right location.</p>



<h2 class="wp-block-heading">403 Forbidden</h2>



<figure class="wp-block-table"><table><tbody><tr><td><strong>Meaning</strong></td><td>The server denied you access to that page or request.</td></tr></tbody></table></figure>



<p><strong>Example</strong></p>



<div class="wp-block-image"><figure class="aligncenter size-large is-resized"><img decoding="async" src="https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-403.png" alt="" class="wp-image-10941" width="500" srcset="https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-403.png 812w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-403-300x196.png 300w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-403-768x501.png 768w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-403-50x33.png 50w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-403-32x21.png 32w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-403-64x42.png 64w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-403-128x84.png 128w" sizes="(max-width: 812px) 100vw, 812px" /></figure></div>



<p>403 means that the server received your request, but has denied access to it. This can be commonly seen if you&#8217;ve tried to login too many times with the wrong password or if you have blocks on specific pages or directories for your site.</p>



<h2 class="wp-block-heading">500 Internal Server Error</h2>



<figure class="wp-block-table"><table><tbody><tr><td><strong>Meaning</strong></td><td>The server tried to process the request but ran into an error.</td></tr></tbody></table></figure>



<p><strong>Example</strong></p>



<div class="wp-block-image"><figure class="aligncenter size-large is-resized"><img decoding="async" src="https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-500.png" alt="" class="wp-image-10908" width="500" srcset="https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-500.png 812w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-500-300x196.png 300w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-500-768x501.png 768w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-500-50x33.png 50w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-500-32x21.png 32w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-500-64x42.png 64w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-500-128x84.png 128w" sizes="(max-width: 812px) 100vw, 812px" /></figure></div>



<p>If you experience a 500 error, this generally means that there&#8217;s a bug or conflict in your website code. For example, if you&#8217;ve changed <a href="https://testing.conetix.com.au/support/plesk-obsidian-php-settings/">PHP versions</a> and your website now throws 500 errors, it&#8217;s likely that the code isn&#8217;t compatible with the new version.</p>



<h2 class="wp-block-heading">502 Bad Gateway</h2>



<figure class="wp-block-table"><table><tbody><tr><td><strong>Meaning</strong></td><td>Somewhere between the web server and one of the other services couldn&#8217;t talk to each other.</td></tr></tbody></table></figure>



<p><strong>Example</strong></p>



<div class="wp-block-image"><figure class="aligncenter size-large is-resized"><img decoding="async" src="https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-502.png" alt="" class="wp-image-10911" width="500" srcset="https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-502.png 812w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-502-300x196.png 300w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-502-768x501.png 768w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-502-50x33.png 50w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-502-32x21.png 32w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-502-64x42.png 64w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-502-128x84.png 128w" sizes="(max-width: 812px) 100vw, 812px" /></figure></div>



<p>This is generally a <em>temporary</em> error. </p>



<p>For example, if you change PHP versions for your site then you may experience 502 errors for a few seconds while the service is restarting. Make sure you refresh your browser and if the issue still persists after 30 seconds, contact your hosting provider.</p>



<h2 class="wp-block-heading">503 Service Unavailable</h2>



<figure class="wp-block-table"><table><tbody><tr><td><strong>Meaning</strong></td><td>Your server or website is at capacity or the server is overloaded.</td></tr></tbody></table></figure>



<p><strong>Example</strong></p>



<div class="wp-block-image"><figure class="aligncenter size-large is-resized"><img decoding="async" src="https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-503-1.png" alt="" class="wp-image-10913" width="500" srcset="https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-503-1.png 812w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-503-1-300x196.png 300w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-503-1-768x501.png 768w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-503-1-50x33.png 50w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-503-1-32x21.png 32w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-503-1-64x42.png 64w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-503-1-128x84.png 128w" sizes="(max-width: 812px) 100vw, 812px" /></figure></div>



<p>If you experience 503 errors, it can either mean that your site is hitting resource limits or that the webserver it&#8217;s hosted on doesn&#8217;t have enough capacity to respond (it may be overloaded).</p>



<p>When you see 503 errors, you can check your <a href="https://testing.conetix.com.au/support/plesk-onyx-view-website-error-logs/">web server error logs</a> for more details or contact your hosting provide for further assistance.</p>



<h2 class="wp-block-heading">504 Gateway Timeout</h2>



<figure class="wp-block-table"><table><tbody><tr><td><strong>Meaning</strong></td><td>The code for your website took too long and the request timed out.</td></tr></tbody></table></figure>



<p><strong>Example</strong></p>



<div class="wp-block-image"><figure class="aligncenter size-large is-resized"><img decoding="async" src="https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-504.png" alt="" class="wp-image-10914" width="500" srcset="https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-504.png 812w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-504-300x196.png 300w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-504-768x501.png 768w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-504-50x33.png 50w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-504-32x21.png 32w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-504-64x42.png 64w, https://testing.conetix.com.au/wp-content/uploads/2020/04/basic-http-504-128x84.png 128w" sizes="(max-width: 812px) 100vw, 812px" /></figure></div>



<p>A 504 error generally means that the webserver talked to the process handling your website code (eg, PHP) but it took too long and didn&#8217;t return any information.</p>



<p>This can occur when you have a process which takes too long to run (eg it&#8217;s very resource intensive) or it relies on a third party system which may be down or slow to respond (eg image optimisation servers). You can check your <a href="https://testing.conetix.com.au/support/plesk-onyx-view-website-error-logs/">web server error logs</a> for further details or ask your hosting provider to see if they can provide further information.</p>



<h2 class="wp-block-heading">522 / 524 Connection Timed Out</h2>



<figure class="wp-block-table"><table><tbody><tr><td><strong>Meaning</strong></td><td>The server didn&#8217;t respond back to Cloudflare or similar proxy service</td></tr></tbody></table></figure>



<p><strong>Example</strong></p>



<div class="wp-block-image"><figure class="aligncenter size-medium is-resized"><img loading="lazy" decoding="async" src="https://testing.conetix.com.au/wp-content/uploads/2020/06/http-code-522.png" alt="" class="wp-image-11261" width="500" height="326" srcset="https://testing.conetix.com.au/wp-content/uploads/2020/06/http-code-522.png 812w, https://testing.conetix.com.au/wp-content/uploads/2020/06/http-code-522-300x196.png 300w, https://testing.conetix.com.au/wp-content/uploads/2020/06/http-code-522-768x501.png 768w, https://testing.conetix.com.au/wp-content/uploads/2020/06/http-code-522-50x33.png 50w, https://testing.conetix.com.au/wp-content/uploads/2020/06/http-code-522-32x21.png 32w, https://testing.conetix.com.au/wp-content/uploads/2020/06/http-code-522-64x42.png 64w, https://testing.conetix.com.au/wp-content/uploads/2020/06/http-code-522-128x84.png 128w" sizes="auto, (max-width: 500px) 100vw, 500px" /></figure></div>



<p>This can be one you may see if your service is proxied through <a href="https://www.cloudflare.com/">Cloudflare</a>. It means that Cloudflare tried to talk to your server, but it never received a response in time. It may also appear as a 524 error, which virtually means the same thing.</p>



<p>If it&#8217;s a once off, it may that a service on your web server was restarting. This is expected behaviour for web servers and most will restart once a day to flush logs (generally early in the morning).</p>



<p>However, if it&#8217;s a continuous issue then it may be a script taking too long to process on your server or the server is overloaded. If you have your own Virtual Private Server, we recommend reviewing the <a data-type="ht_kb" data-id="9774" href="https://testing.conetix.com.au/support/plesk-obsidian-advanced-monitoring/">Advanced Monitoring</a> at the time you saw the 522 in order to determine if this is an issue or not.</p>



<h2 class="wp-block-heading">Other Codes</h2>



<p>With more than 50 specified codes, these are just the most common ones you may see when it comes to standard web hosting.</p>



<p>For a full list and basic description of each, we recommend also reading the Mozilla page on the status codes: <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Status">https://developer.mozilla.org/en-US/docs/Web/HTTP/Status</a></p>



<p>If there&#8217;s one we&#8217;ve missed that you see all the time, please feel free to let us know in the comments below!</p>



<p class="has-small-font-size"><em>Main Photo by&nbsp;<a href="https://unsplash.com/@introspectivedsgn?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Erik Mclean</a>&nbsp;on&nbsp;<a href="https://unsplash.com/s/photos/404?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></em></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Analysis of a WordPress Pingback DDOS Attack</title>
		<link>https://testing.conetix.com.au/blog/analysis-wordpress-pingback-ddos-attack/</link>
		
		<dc:creator><![CDATA[Tim Butler]]></dc:creator>
		<pubDate>Thu, 24 Nov 2016 23:00:00 +0000</pubDate>
				<category><![CDATA[General]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[analysis]]></category>
		<category><![CDATA[attack]]></category>
		<category><![CDATA[ddos]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[pingback]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://conetix.com.au/analysis-wordpress-pingback-ddos-attack/</guid>

					<description><![CDATA[Two months ago, one of the websites we manage was hit by a wave of Distributed Denial of Service attacks, each with a changing attack vector as the systems mitigated the attacks. These started with basic UDP floods, moved through some NTP and DNS reflections and the only remaining attack which was effective was a...  <a class="excerpt-read-more" href="https://testing.conetix.com.au/blog/analysis-wordpress-pingback-ddos-attack/" title="Read Analysis of a WordPress Pingback DDOS Attack">Read more &#187;</a>]]></description>
										<content:encoded><![CDATA[<p>Two months ago, one of the websites we manage was hit by a wave of Distributed Denial of Service attacks, each with a changing attack vector as the systems mitigated the attacks. These started with basic UDP floods, moved through some NTP and DNS reflections and the only remaining attack which was effective was a layer 7 attack on the site directly.  This final, layer 7 attack was a WordPress Pingback attack. While it initially took the site down, we were able to mitigate quickly and see the full force of what the attack was.</p>
<p>While we performed some initial analysis when the attack first occurred, we&#8217;ve now taken the time to run though the data in detail to see if anything odd stands out. As this will be an analytical report, there will be lots of numbers. The first:</p>
<blockquote>
<p><strong>2.2 million requests in 15 minutes</strong>, which peaked at  <strong>4,500 requests per second</strong>.</p>
</blockquote>
<p>This is a lot of traffic for a site which previously averaged around 20,000 requests a day and while it’s low in terms of global DDOS attacks, it was still a significant issue for the destination content management system (not WordPress).</p>
<h2>How does the attack work?</h2>
<p>Unfortunately, out of the box WordPress has one component which can be exploited for malicious use. By default, the pingback (which allows you to record who linked to your blog) doesn’t have any form of validation to ensure the “pingback” was from the requesting server. This means that a request can be made against a fully patched, clean server and the return request will go to your intended target.</p>
<p><img decoding="async" alt="WordPress Pingback Attack" src="/wp-content/uploads/2016/11/25/wordpress-pingback_1.png" style="height: 319px; width: 471px;" /></p>
<p>The request from the attacker only needs to be a simple script or even a cURL based call, which is trivial to do.</p>
<p>Despite locking parts of it down, this option is still enabled by default and still an issue with version 4.6.1 (the latest as of this article). We highly recommend installing this plugin to disable the pingback: <a href="https://wordpress.org/support/plugin/disable-xml-rpc-pingback">https://wordpress.org/support/plugin/disable-xml-rpc-pingback</a></p>
<p>This will still leave the remaining XML-RPC code functional, but prevent your site from being used in a pingback dos attack. Chances are, if you don&#8217;t know what a pingback is then you probably don&#8217;t need it.</p>
<p>For more information on how widespread the attacks are, Sucuri have two great blog articles about it:</p>
<ul>
<li>
<p><a href="https://blog.sucuri.net/2014/03/more-than-162000-wordpress-sites-used-for-distributed-denial-of-service-attack.html">https://blog.sucuri.net/2014/03/more-than-162000-wordpress-sites-used-for-distributed-denial-of-service-attack.html</a></p>
</li>
<li><a href="https://blog.sucuri.net/2016/02/wordpress-sites-leveraged-in-ddos-campaigns.html">https://blog.sucuri.net/2016/02/wordpress-sites-leveraged-in-ddos-campaigns.html</a></li>
</ul>
<h2>Attack Mitigation</h2>
<p>To stop the effects of the attack, all we did was drop any user agent which was set to WordPress. The site itself wasn’t WordPress based, so there’s no reason to allow the pingback or any requests which originate from WordPress. This can be done with the following snippet in nginx:</p>
<pre class="prettyprint lang-sh " data-pbcklang="sh" data-pbcktabsize="4">if ($http_user_agent ~* "WordPress") {
    return 403;
}</pre>
<p>As we hadn’t disabled logging for this code block, all requests were still logged and it gives us the opportunity to analyse the data further.</p>
<p>Ideally of course we’d tweak a rule within our Web Application Firewall (WAF) to detect and rate limit requests, however being time sensitive this was the fastest approach to bring the site back online.</p>
<h2>The Data</h2>
<p>To run through the data, we used our <a href="https://www.elastic.co/">Elastic</a> stack so that we could use a high speed index to manipulate. If you haven’t tried the Elasticsearch / Kibana combo for log analysis, I highly recommend looking at it sooner rather than later. It’s absolutely invaluable when it comes to analysing patterns and being able to perform further analysis.</p>
<p>Here’s a few key findings:</p>
<blockquote>
<p><strong>Unique Sites: 9,984</strong></p>
</blockquote>
<blockquote>
<p><strong>Unique IP’s: 10,268</strong></p>
</blockquote>
<p>The distributed nature of nearly 10,000 sites making the calls means it’s impossible to block via IP. This is why attackers favour a distributed attacks, as the blocks from both the originating ASN and the destination aren’t feasible to do manually.</p>
<p>Especially since the pingback is a layer 7 attack, this means any DDOS scrubbing service needs to be intelligent to block proactively.</p>
<h3>WordPress Versions</h3>
<blockquote>
<p><strong>WordPress Versions in the Attack: 1,795</strong></p>
</blockquote>
<p>The number of WordPress versions seemed abnormally high, which upon investigation showed that many seemed to be obfuscating their version.</p>
<p>Here’s an example from the raw log:</p>
<pre class="prettyprint lang-sh " data-pbcklang="sh" data-pbcktabsize="4">GET / HTTP/1.0" 403 455 "-" "WordPress/2359; https://&lt;realsiteremoved&gt;; verifying pingback from xxxx.xxxx.xxxx.xxxx

</pre>
<p>I’m not aware of any plugins which obfuscate the version numbers like this, however over 1,400 sites had version numbers which didn’t match a standard WordPress pattern. I manually checked around a dozen sites to see if they were simply faking being WordPress based and all were legitimately running WordPress. If anyone knows the reason for this, please let me know in the comments below!</p>
<p>If we run a very rudimentary filter on the results by simply scanning for a period in the vesion (eg so that 4.6 etc match), this reduced the number to a more sensible figure:</p>
<blockquote>
<p><strong>Filtered WordPress Versions in the Attack: 137</strong></p>
</blockquote>
<p>Even this is fairly high, considering how easy WordPress makes it to update your software I was hoping to see less of a spread.</p>
<p>If we look closer at the remaining versions, there’s some scary stats. The oldest version is <strong>2.8.1</strong>, which was released back in <strong>2009</strong>! Thankfully this was only one hit and one manually verified out of disbelief (it really was that old).</p>
<p>Disturbingly though, there were still a significant number of sites older than 3.0:</p>
<p><img decoding="async" alt="WordPress - Old Versions" src="/wp-content/uploads/2016/11/25/wordpress-old-versions.png" style="height: 311px; width: 795px;" /></p>
<p>If we look at the top versions used (grouped by unique sites), we see a spread like this:</p>
<p><a href="https://plot.ly/~tim-conetix/7/" target="_blank" rel="noopener noreferrer"><img decoding="async" alt="" src="https://plot.ly/~tim-conetix/7.png" style="width: 600px;" /></a> <script data-plotly="tim-conetix:7" src="https://plot.ly/embed.js" async=""></script></p>
<p>As a percentage overall, sites running 4.5.3 were <strong>26%</strong> of overall sites and only <strong>11% </strong>of sites were running the latest 4.6 release (the latest when the data was gathered).</p>
<p>The official WordPress stats (<a href="https://wordpress.org/about/stats/">https://wordpress.org/about/stats/</a>) show more sites which have updated (thankfully), but it’d be nice to see a much lower spread in the future.</p>
<h3>Country Analysis</h3>
<p>Being an Australian based hosting company, we were interested in seeing where the pingbacks originated from and performed a geo-ip lookup of the requesting server&#8217;s IP address.</p>
<blockquote>
<p><strong>Countries in the Attack: 109</strong></p>
</blockquote>
<p>We then analysed how many requests came from each country and graphed the top 15 by request:</p>
<p><a href="https://plot.ly/~tim-conetix/10/" target="_blank" rel="noopener noreferrer"><img decoding="async" alt="" src="https://plot.ly/~tim-conetix/10.png" style="width: 600px;" /></a> <script data-plotly="tim-conetix:10" src="https://plot.ly/embed.js" async=""></script></p>
<p>Just to see if certain sites were being used more than others, we also plotted the country data against unique sites:</p>
<p><a href="https://plot.ly/~tim-conetix/4/" target="_blank" rel="noopener noreferrer"><img decoding="async" alt="" src="https://plot.ly/~tim-conetix/4.png" style="width: 600px;" /></a> <script data-plotly="tim-conetix:4" src="https://plot.ly/embed.js" async=""></script></p>
<p>The spread remains roughly the same. Given that a significant amount of cloud services and hosting companies are based in the USA, this figure doesn’t seem out of place.</p>
<h3>Origin IP Analysis</h3>
<p>One enhancement WordPress added to the pingbacks in 3.7, which at least tracked the originating IP of the request. While this doesn&#8217;t solve the problem, it at least allows you to trace where the calls are coming from. Unless the attacker is very, very naive however, this IP will simply trace back to another infected machine or site. Generally these requesting systems are part of a botnet to mask and distribute the requests. The only information it does give is how distributed the requests are:</p>
<blockquote>
<p><strong>Originating IP&#8217;s: 149</strong></p>
</blockquote>
<p>Again, this simply highlights why the verification doesn&#8217;t really assist in any meaningful way. We at least know that there were 149 bots / infected sites used in generating the calls, which had a spread like this:</p>
<p><a href="https://plot.ly/~tim-conetix/14/" target="_blank" rel="noopener noreferrer"><img decoding="async" alt="" src="https://plot.ly/~tim-conetix/14.png" style="width: 600px;" /></a> <script data-plotly="tim-conetix:14" src="https://plot.ly/embed.js" async=""></script></p>
<p>I&#8217;ve masked the real IP&#8217;s, and most of the requests came from two systems. There were also a number of sites which were using private IP&#8217;s and still a significant number of requests which weren&#8217;t from the two main IP&#8217;s. To give a bit more perspective, if we plot against the originating IP&#8217;s country, we see the following:</p>
<p><a href="https://plot.ly/~tim-conetix/17/" target="_blank" rel="noopener noreferrer"><img decoding="async" alt="" src="https://plot.ly/~tim-conetix/17.png" style="width: 600px;" /></a> <script data-plotly="tim-conetix:17" src="https://plot.ly/embed.js" async=""></script></p>
<p>This plot shows that the majority of the botnet / originating IP&#8217;s came from Russia. I&#8217;m not sure if other attack analyses have found any correlation between where the botnets are located and where the attack originated from, but there&#8217;s no way to tell from the data we have. It could be that the random IP selection of the bot has some predisposition to certain IP ranges, which I have seen before in other attacks. Either way, it does highlight how much of a global problem DDOS attacks are and the difficulties surrounding the ability to close associated botnets down.</p>
<h2>Conclusion</h2>
<p>The pingback tool within WordPress still remains an exploitable system for any WordPress site which hasn’t <strong>explicitly </strong>stopped it. From a web host’s perspective, this is quite frustrating. With enhanced firewall rules in our system, we’re now logging around <strong>2.5 million malicious pingback requests per month</strong> (inbound). In world hosting terms we’re only a small player too, no doubt the larger providers are seeing pingbacks in the hundreds of millions or more per month.</p>
<p>There’s two immediate changes WordPress could make to resolve the issue going forward. The first is to <strong>disable pingback by default</strong>. Those who require it would still be able to easily enable it. Chances are if you don’t know about it, then you probably don’t require it anyway. This would still leave those sites vulnerable to being used in attacks, so it&#8217;s only reducing the number of potential sites which can be used.</p>
<p>The second method is to consider the use of a third party system (such as Jetpack) to handle pingback requests as the default. It’s far easier for a centralised platform to be able to detect abnormal behaviour and implement basic rate limiting / blacklisting of bad requests. This is no different to their default installation of the Akismet plugin for spam handling, so it would be a sensible option for WordPress to adopt going forward.</p>
<p>With WordPress 4.7 just around the corner featuring a big upgrade to the REST API, we’re hoping that this is the catalyst to consider disabling XML-RPC by default. Those who still require it could still re-enable it, but it would at least reduce the amount of potential sites hackers can use for malicious use. At the end of the day we still absolutely love and recommend WordPress, especially since features such as the auto-updates are invaluable to patching security issues. If a few of the legacy issues like the pingback vulnerability are resolved then it&#8217;ll simply be even better.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>What&#8217;s New in Plesk Onyx</title>
		<link>https://testing.conetix.com.au/blog/whats-new-plesk-onyx/</link>
		
		<dc:creator><![CDATA[Jamin Andrews]]></dc:creator>
		<pubDate>Fri, 14 Oct 2016 01:49:00 +0000</pubDate>
				<category><![CDATA[General]]></category>
		<category><![CDATA[plesk]]></category>
		<guid isPermaLink="false">https://conetix.com.au/whats-new-plesk-onyx/</guid>

					<description><![CDATA[With recent changes to head company structure for Plesk,&#160;we have seen&#160;them&#160;emerge as their own entity and a reinvigorated identity.&#160;The term &#8220;Plesky&#8221;&#160;is quickly becoming the adopted&#160;vernacular&#160;within the Plesk&#160;company ranks, describing their new, invigorated focus on product development.&#160;With this new focus, forward thinking, and clear product&#160;direction, the latest&#160;Plesk Onyx&#160;version&#160;has leaped ahead of its nearest rivals.&#160; You might...  <a class="excerpt-read-more" href="https://testing.conetix.com.au/blog/whats-new-plesk-onyx/" title="Read What&#8217;s New in Plesk Onyx">Read more &#187;</a>]]></description>
										<content:encoded><![CDATA[
<p>With recent changes to head company structure for Plesk,&nbsp;we have seen&nbsp;them&nbsp;emerge as their own entity and a reinvigorated identity.&nbsp;The term &#8220;Plesky&#8221;&nbsp;is quickly becoming the adopted&nbsp;vernacular&nbsp;within the Plesk&nbsp;company ranks, describing their new, invigorated focus on product development.&nbsp;With this new focus, forward thinking, and clear product&nbsp;direction, the latest&nbsp;<strong>Plesk Onyx</strong>&nbsp;version&nbsp;has leaped ahead of its nearest rivals.&nbsp;</p>



<p>You might be forgiven in thinking &#8220;where did Plesk 13 go&#8221;? This would have been the natural progression in naming from&nbsp;<a href="https://www.conetix.com.au/blog/whats-new-parallels-plesk-12">Plesk 12</a> and then again in <a href="https://www.conetix.com.au/blog/odin-plesk-125-whats-new">Plesk 12.5</a>&nbsp;but instead the new version is Onyx.&nbsp;However, in line with the new <a href="https://devblog.plesk.com/2016/05/plesk-12-5-17-a-matter-of-dyscalculia-plesk/">Plesky</a> thinking,&nbsp;traditional numbering of its versions has been changed&nbsp;in favour of a new naming convention after precious stones.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Onyx is used to defend against negativity that is directed at you. Black stones have protective energies in the sense that black is the absence of light, and therefore, can be used to create invisibility. For Plesk, that means that we are making web professionals more successful and handle your WebOps needs, nearly invisibly.  <br>Lukas Hertig @PleskDevBlog</p>
</blockquote>



<p>Plesk Onyx release is packed with new features and improvements, and most of the focus has been around the Web Professional or Developer.&nbsp; With this in mind a number of new integrations&nbsp;have been introduced which I will outline below;&nbsp;however, it is important to look at Plesk overall and the change in how Plesk&nbsp;have&nbsp;changed their development process.</p>



<p>With Onyx, we see a number of the features no longer being part of the core Plesk&nbsp;product rather an add on or in the Plesk world an <strong>extension</strong>. &nbsp;Features such as the&nbsp;<a href="https://www.plesk.com/features/wordpress-management-toolkit/" target="_blank" rel="noopener noreferrer">WordPress Toolkit</a> (which was introduced in Plesk 12.5) are&nbsp;now part of the extension catalogue rather than the core product. This allows for the extensions and&nbsp;the core of Plesk to be individually developed and any enhancements to an extension can be rolled out independently of the core system.&nbsp;&nbsp;This means we should see a more rapid turnaround of enhanced features within the extensions, rather than waiting for a full core upgrade.</p>



<p>I like to think that the strength and power of Plesk is at its core and the flexibility and&nbsp;functionality is in its extensions.</p>



<h2 class="wp-block-heading">Core Changes</h2>



<figure class="wp-block-image"><img decoding="async" src="/wp-content/uploads/2016/10/14/onyx_screenshot.png" alt="What's new Plesk ONyx: Core Screenshot"/></figure>



<p>A number of key core features have been added in Plesk Onyx.&nbsp; Some&nbsp;improvements that are noteworthy include: improvements to backups, improvements to API, HTTP/2 added support and added improvements to&nbsp;Plesk&nbsp;SDK. &nbsp;For more details check out <a href="https://docs.plesk.com/release-notes/17.0/change-log/">change logs</a>.&nbsp;<br>The major feature updates which I will cover below include: system updates, improved logging, system resource usage limiting, DNSSEC Support and SSL improvements. &nbsp;One key aspect around some of the core improvements is what extensions are installed by default. &nbsp;The Security Advisor Plesk extension was recently added in Plesk 12.5 but is&nbsp;now a default key extension, which is tightly integrated with Let&#8217;s Encrypt Plesk Extension to help secure your Plesk Onyx server.&nbsp;</p>



<h2 class="wp-block-heading">System Updates</h2>



<figure class="wp-block-image"><img decoding="async" src="/wp-content/uploads/2016/10/14/onyx_feature_systemupdates.png" alt="What's New Plesk Onyx : System Updates"/></figure>



<p>Plesk Onyx provides server administrators with an easy-to-use tool for keeping their servers up to date. &nbsp;You can update any system packages present on the server either manually or automatically without having to open the console. &nbsp;The tool uses OS package managers (yum and apt) to perform updates, which makes the procedure of updating as robust as if it were done through native OS tools.</p>



<figure class="wp-block-image"><img decoding="async" src="/wp-content/uploads/2016/10/14/systemcheckscreenshot.png" alt="What's new Plesk Onyx: System Updates Screen Shot Main Page"/></figure>



<p>The tool provides extra flexibility if you don&#8217;t want to update certain packages. It is possible to prevent packages from being updated by locking them via two clicks in UI.</p>



<p>Plesk&nbsp;has&nbsp;a variety of components that were modified or built by the&nbsp;Plesk team itself (for example, PHP version packages). You can also use this tool to monitor and update these packages at any time you want without waiting for Plesk updates.</p>



<h2 class="wp-block-heading">Improved Logging Tools</h2>



<figure class="wp-block-image"><img decoding="async" src="/wp-content/uploads/2016/10/14/onyx_feature_logging.png" alt="What's new Plesk Onyx: Log Browser"/></figure>



<p>With the introduction of the Log Browser tool in&nbsp;Plesk&nbsp;12.5, this gave web developers easy access to see their web access and error logs.&nbsp;Plesk&nbsp;Onyx now allows you to open <strong>any</strong> arbitrary log file (eg specific to your application)&nbsp;located on your virtual host for quicker and easier monitoring and debugging. &nbsp;Users can save any opened log file in the list of logs for accessing it in the future. For example, we can even view&nbsp;WordPress debug logs:</p>



<figure class="wp-block-image"><img decoding="async" src="/wp-content/uploads/2016/10/14/plesk-onyx-read-wordpress-debug-logs.png" alt="Plesk Onyx Debug Logs"/></figure>



<p>Another key&nbsp;improvement of the Log Browser tool is the ability to&nbsp;highlight and filter in realtime&nbsp;various strings in your logs. This&nbsp;makes debugging&nbsp;websites&nbsp;even faster and finding potential issues much&nbsp;easier.&nbsp;<br><img decoding="async" alt="What's new Plesk Onyx: Log file debugging" src="/wp-content/uploads/2016/10/14/onyx-logging-debug.png" style="height: 354px; width: 900px;"></p>



<h2 class="wp-block-heading">System&nbsp;Resource Limits</h2>



<p><img decoding="async" alt="What's new Plesk Onyx: System Resource Usage Limits" src="/wp-content/uploads/2016/10/14/onyx_feature_resource.png" style="width: px;"><br>Plesk Onyx introduces the ability to limit the amount of system resources per subscription via service plans and&nbsp;can be set specific limits&nbsp;by CPU, RAM and&nbsp;Disk&nbsp;I/O.&nbsp;Based on&nbsp;CGroups&nbsp;(Control Groups), this is a standard feature of modern Linux kernels&nbsp;and already used by other container based platforms for resource control.</p>



<p>You can see a sample of what&#8217;s available in the following screenshot:</p>



<figure class="wp-block-image"><img decoding="async" src="/wp-content/uploads/2016/10/14/onyx-limits.png" alt="What's new Plesk Onyx: Resource limits for CPU, RAM, Disk I/O"/></figure>



<p>This will help to stop the &#8220;noisy neighbour&#8221; scenario, where one website&nbsp;can adversely affect the performance of the others.</p>



<h2 class="wp-block-heading">DNSSEC Support</h2>



<h2 class="wp-block-heading"><img decoding="async" alt="What's new Plesk Onyx: DNSSEC" src="/wp-content/uploads/2016/10/14/onyx_feature_dns.png" style="width: px;"></h2>



<p>The&nbsp;Domain Name System Security Extensions (DNSSEC),&nbsp;is a set of DNS protocol extensions that were introduced by&nbsp;<a href="https://ietf.org/">IETF</a>&nbsp;with the goal of signing DNS data to secure the domain name resolving process.</p>



<p>The&nbsp;goal of&nbsp;DNSSEC was&nbsp;to help make the Internet a safer and more secure place. Plesk Onyx now offers the support for DNSSEC, allowing users to protect the DNS data of hosted domains. The DNSSEC extension gives users the ability to do the following:</p>



<ul class="wp-block-list">
<li>Configure the settings used for key generation and rollover<br><img decoding="async" style="height: 684px; width: 928px;" src="/wp-content/uploads/2016/10/14/dnssec.png" alt="What's new in Plesk Onyx: DNSSEC"></li>



<li>Sign and unsign domain zones according to the DNSSEC specifications</li>



<li>Receive notifications related to DNSSEC records and keys</li>



<li>View and copy DS resource records and DNSKEY resource record sets</li>
</ul>



<p>DNSSEC will help reduce the possibility of DNS spoofing, which can potentially allow malicious users to divert traffic and/or emails from your domain or easily conduct phishing attempts to exploit end users.</p>



<h2 class="wp-block-heading">Greater SSL Protection</h2>



<h2 class="wp-block-heading"><img decoding="async" alt="What's new Plesk Onyx: SSL/TLS" src="/wp-content/uploads/2016/10/14/onyx_feature_ssl.png" style="width: px;"></h2>



<p>Plesk Onyx can now provide greater protection of your services and now includes a security advisor to enable all your sites and services to be served from a valid SSL certificate. It does this through the Security Advisor extension, which provides an easy set of wizards to ensure your Plesk&nbsp;login has a valid certificate,&nbsp;help enable all sites to be&nbsp;served via&nbsp;HTTPS and even generate the&nbsp;certificates using <a href="https://testing.conetix.com.au/support/how-install-lets-encrypt-extension-plesk-125/" data-type="ht_kb" data-id="3606">Lets Encrypt</a>.</p>



<ul class="wp-block-list">
<li>Quickly and easily secure your Plesk Admin<br><img decoding="async" style="width: px;" src="/wp-content/uploads/2016/10/14/onyx-secureadmin.png" alt="What's New Plesk Onyx: Secure Admin"></li>
</ul>



<p>You can also use your existing certificates (including ones generated by Lets Encrypt) secure your mail&nbsp;services (SMTP, POP and IMAP), which means that email applications&nbsp;won&#8217;t complain about an invalid or self-signed certificate..</p>



<figure class="wp-block-image"><img decoding="async" src="/wp-content/uploads/2016/10/14/onyx-securemail.png" alt="What's new Plesk Onyx: Secure Mail Server with SSL/TLS"/></figure>



<p>Connections to the Plesk webmail can now be secured with a valid SSL certificate with a simple drop-down menu now too:<br><img decoding="async" alt="What's new Plesk Onyx: Webmail SSL/TLS" src="/wp-content/uploads/2016/10/14/onyx-webmail-ssl-cert.png" style="height: 90px; width: 492px;"></p>



<h2 class="wp-block-heading">Extensions Catalog</h2>



<figure class="wp-block-image"><img decoding="async" src="/wp-content/uploads/2016/10/14/onyx_feature_extensioncatalog.png" alt="What's new Plesk Onyx: Plesk Extensions Catalog"/></figure>



<p>The Plesk Extensions catalog is not new,&nbsp;however&nbsp;as&nbsp;previously mentioned, Plesk is moving towards more flexibility by using Plesk Extensions. &nbsp;This&nbsp;provides&nbsp;Plesk developers&nbsp;and third party developers the ability to quickly add their offerings and expand the functionality of Plesk paving the way for the ability to add&nbsp;more features without Plesk core updates.&nbsp;</p>



<p>Some of the new noteworthy extensions that have been added are Docker Manager, Ruby Manager, Node.js Manager, Git Manager and Plesk Multi Server Extension. WordPress&nbsp;Management&nbsp;tools&nbsp;are now installed by default as an extension&nbsp;ready for&nbsp;WordPress Toolkit version&nbsp;2.0 to be released in first quarter 2017.</p>



<p>UPDATE 28/03/17 <a href="https://www.conetix.com.au/blog/whats-new-plesk-wordpress-toolkit-20">WordPress Toolkit 2.0 released. Here is link to what&#8217;s new</a>.</p>



<h2 class="wp-block-heading">Docker Support</h2>



<figure class="wp-block-image"><img decoding="async" src="/wp-content/uploads/2016/10/14/onyx_feature_docker.png" alt="What's new Plesk Onyx: Docker"/></figure>



<p>If you do not know anything about Docker here is an article on <a href="https://testing.conetix.com.au/blog/what-is-docker" class="rank-math-link">What is Docker?</a>&nbsp;<br>Just to give you a brief intro to Docker:&nbsp;&nbsp;</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Docker is an open platform for developers and sysadmins of distributed applications.</p>
</blockquote>



<p>Plesk Onyx now has support for Docker via Plesk&nbsp;extension, some key features are:</p>



<ul class="wp-block-list">
<li>On-demand access to a wide range of modern technologies, such as redis, mongodb, memcached, and many more via Local Images or <a class="rank-math-link" href="https://hub.docker.com/explore">Docker Hub</a>.</li>



<li>Choose from a catalog of available images, or upload a custom image.<br><code><img decoding="async" style="width: px;" src="/wp-content/uploads/2016/10/14/docker-local-host.png" alt="What's New Plesk Onyx: Docker Catalog"></code></li>



<li>Deploy and manage Docker containers straight from the Plesk interface.<br><img decoding="async" style="width: px;" src="/wp-content/uploads/2016/10/14/docker-manage-onyx.png" alt="What's new Plesk Onyx: Docker management for containers"><br><img decoding="async" style="height: 472px; width: 974px;" src="/wp-content/uploads/2016/10/14/docker-manage.png" alt="What's new Plesk Onyx: Manage Docker"></li>



<li>Install Docker containers locally, or to a remote node registered in Plesk.<br><img decoding="async" style="width: px;" src="/wp-content/uploads/2016/10/14/dockerremote.png" alt="What's new Plesk Onyx: Docker Remote Settings"></li>
</ul>



<p>If you want to know more about Docker, we have a series of articles to get you started:</p>



<ul class="wp-block-list">
<li><a class="rank-math-link" href="https://testing.conetix.com.au/blog/docker-basics-practical-starters-guid">Docker Basics: A practical starters guide</a></li>



<li><a class="rank-math-link" href="https://testing.conetix.com.au/blog/docker-compose-quick-intro">Docker Compose: A Quick Intro?</a> </li>



<li><a class="rank-math-link" href="https://testing.conetix.com.au/blog/category/docker">More Articles</a> </li>
</ul>



<h2 class="wp-block-heading">Nginx Only Hosting</h2>



<figure class="wp-block-image"><img decoding="async" src="/wp-content/uploads/2016/10/14/onyx_feature_nginx.png" alt="What's New Plesk Onyx : NGINX Only Hosting"/></figure>



<p>If you&#8217;re looking for Nginx-only hosting for your websites, Plesk Onyx delivers. &nbsp;By default, Plesk uses&nbsp;Nginx to&nbsp;proxy&nbsp;requests to Apache to allow Nginx to directly serve static files and act as the SSL terminator. If your stack is fully Nginx compatible (ie, you don&#8217;t use a .htaccess file etc), you can completely turn off Apache now to save on server resources.</p>



<h2 class="wp-block-heading">Full Git Integration</h2>



<figure class="wp-block-image"><img decoding="async" src="/wp-content/uploads/2016/10/14/onyx_feature_git.png" alt="What's New Plesk Onyx :  Git Manager"/></figure>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Git is a <a class="rank-math-link" href="https://git-scm.com/about/free-and-open-source">free and open source</a> distributed version control system designed to handle everything from small to very large projects with speed and efficiency. &#8211; Extract taken from <a href="https://git-scm.com/">Git Website</a></p>
</blockquote>



<p>In tune with Plesk&nbsp;Onyx focus on the Web professional and modern web deployment methodology,&nbsp;Plesk Onyx introduces integration with Git – the most popular source code management system which&nbsp;makes&nbsp;managing and&nbsp;deploying your&nbsp;website code&nbsp;even easier.</p>



<p>This feature enables you to do the following:</p>



<ul class="wp-block-list">
<li>Easily deploy your website content by either pushing it to a local Git repository or by pulling from a remote one.<br><img decoding="async" style="width: px;" src="/wp-content/uploads/2016/10/14/onyx-git-ssh.png" alt="What's new Plesk Onyx: Git Remote"></li>



<li>Use GitHub, BitBucket, Travis, or any other software engineering service of your choice.</li>



<li>Deploy manually for complete control or enable automatic deployment to save time.<br><img decoding="async" style="width: px;" src="/wp-content/uploads/2016/10/14/onyx-git-options.png" alt="What's New Plesk Onyx: Git Deployment Options"></li>
</ul>



<p>The trigger for the pull is a simple webhook, which allows you to remotely trigger this either from GitHub/BitBucket directly, or from your preferred Continuous Integration / Continuous Deployment tools. Scripts can also be triggered pre and post-pull, allowing you to run commands such as database merges, image optimisation or cache flushes automatically as well.</p>



<h2 class="wp-block-heading">Ruby Support</h2>



<figure class="wp-block-image"><img decoding="async" src="/wp-content/uploads/2016/10/14/onyx_feature_ruby.png" alt="What's new in Plesk Onyx:  Ruby"/></figure>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Ruby is&#8230;<br>A dynamic, open source programming language with a focus on simplicity and productivity. It has an elegant syntax that is natural to read and easy to write.<br> <a href="https://www.ruby-lang.org/en/">Ruby WebSite</a></p>
</blockquote>



<p>Plesk Onyx introduces proper Ruby language support as a Plesk extension. &nbsp;The Ruby extension allows users to quickly and easily deploy Ruby apps on their domains. Both Ruby on Rails and Sinatra frameworks are supported.</p>



<p>With this extension you can:</p>



<ul class="wp-block-list">
<li>Enable Ruby support on any given virtual host<br><img decoding="async" style="width: px;" src="/wp-content/uploads/2016/10/14/enable-ruby.png" alt="What's new in Plesk Onyx: Enable Ruby"></li>



<li>Choose which Ruby version should be used on a domain. Both UI and CLI calls use  the &#8220;rbenv&#8221; utility to ensure compatibility with your existing environment.<br><img decoding="async" style="width: px;" src="/wp-content/uploads/2016/10/14/rubyselect.png" alt="Whats new in Plesk Onyx: Ruby version selector"></li>



<li>Install gem file dependencies via the UI using the Bundler tool:<br><img decoding="async" style="width: px;" src="/wp-content/uploads/2016/10/14/installbundledone.png" alt="What's New Plesk Onyx: Install Bundle DONE"></li>



<li>Specify custom environment variables<br><img decoding="async" style="width: px;" src="/wp-content/uploads/2016/10/14/custom-variables.png" alt="Wha's new in Plesk Onyx: Ruby custom variables"></li>



<li>Edit configuration files<br><img decoding="async" style="width: px;" src="/wp-content/uploads/2016/10/14/onyx-edit-configs.png" alt="What's new Plesk Onyx: Edit Config File in Ruby"></li>
</ul>



<p>For a first release, this is quite a comprehensive set of functions. Ruby developers are no longer second class citizens when it comes to ease of administration through your favourite panel now!</p>



<h2 class="wp-block-heading">Node.js Support</h2>



<figure class="wp-block-image"><img decoding="async" src="/wp-content/uploads/2016/10/14/onyx_feature_node.png" alt="What's new Plesk Onyx: Node Extension"/></figure>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Node.js® is a JavaScript runtime built on <a href="https://developers.google.com/v8/">Chrome&#8217;s V8 JavaScript engine</a>. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient. Node.js&#8217; package ecosystem, <a href="https://www.npmjs.com/">npm</a>, is the largest ecosystem of open source libraries in the world. &#8211; Extract from <a href="https://nodejs.org/en/">Node.js Website.</a></p>
</blockquote>



<p><a href="https://nodejs.org/en/">Node.js</a>&nbsp;has been around for a few years, and has quickly gained popularity with developers who actively support the growth of Node.js community. &nbsp;Node.js&nbsp;helps web developers code high-speed&nbsp;applications. &nbsp;Node.js support in Plesk enables you to:</p>



<ul class="wp-block-list">
<li>Add Node.js applications to your websites with just a few clicks</li>



<li>Easily manage the application from Plesk, Start/Stop/Restart the application, run scripts.</li>



<li>Edit config files quickly and easily from Plesk.<br><img decoding="async" style="width: px;" src="/wp-content/uploads/2016/10/14/editconfigfiles.png" alt="What's new Plesk Onyx: Edit Config files"></li>



<li>Easily install NPM packages.<br><img decoding="async" style="width: 39092px;" src="/wp-content/uploads/2016/10/14/npminstallcomplete.png" alt="What's new Plesk Onyx: NPM Install Complete"></li>



<li>Have multiple Node.js versions installed on the server (Linux only).<br><img decoding="async" style="width: px;" src="/wp-content/uploads/2016/10/14/nodejsmultipleversion.png" alt="What's new Plesk Onyx: Node.js Multiple versions"></li>
</ul>



<h2 class="wp-block-heading">Multi-server Administration</h2>



<figure class="wp-block-image"><img decoding="async" src="/wp-content/uploads/2016/10/14/onyx_feature_multiserver.png" alt="What's new Plesk Onyx : Multiserver Extension"/></figure>



<p>Multi-server extension is designed to give you and your clients&nbsp;a single entry point to control webspaces and subscriptions on multiple Plesk Onyx servers.&nbsp;</p>



<p>Multi-server support include:<br><img decoding="async" alt="What's New Plesk Onyx: MultiServer" src="/wp-content/uploads/2016/10/14/multiserver_1.png" style="width: px;"></p>



<ul class="wp-block-list">
<li>Automatically distribute webspaces or subscriptions on connected service nodes</li>



<li>Both admin and customers can log into to all your servers from one</li>



<li>Centralized account management from across multiple Plesk instances</li>



<li>Subscriptions distributed across service nodes.</li>
</ul>



<h2 class="wp-block-heading">Windows Server 2016</h2>



<figure class="wp-block-image"><img decoding="async" src="/wp-content/uploads/2016/10/14/onyx_feature_2016.png" alt="What's new in Plesk Onyx: Windows Server 2016"/></figure>



<p>Windows Server 2016 is due to be released soon, Plesk Onyx already supports its latest available technical previews.&nbsp;With the introduction of IIS 10 web server a number of new&nbsp;features such as Wildcard subdomains, HTTP/2 support and&nbsp;new cipher suites and supported by Plesk Onyx.</p>



<p>For more details on Plesk Onyx and Microsoft Windows 2016 see current&nbsp;<a href="https://docs.plesk.com/release-notes/17.0/whats-new/">Plesk&nbsp;Onyx&nbsp;Release Notes</a>.</p>



<h2 class="wp-block-heading">Wrap Up</h2>



<p>In a hosting environment,&nbsp;Plesk&nbsp;Onyx ticks a lot of boxes. &nbsp;It not only adds more features and functions to our product suite offerings&nbsp;but it gives our Partners and End Users&nbsp;more control, better security and&nbsp;less time required to manage their websites. &nbsp;Plesk Onyx&nbsp;also creates new and exciting opportunities to provide solutions to a wider web professional community. Shared hosting can sometimes be seen as the &#8220;old&#8221; way to do things, however with the neat Git integration as well as full Ruby and Node.js support Plesk becomes very relevant again to modern web development languages and methodologies.</p>



<p>Full release&nbsp;notes and change log on&nbsp;Plesk&nbsp;Onyx&nbsp;can be found on&nbsp;<a href="https://docs.plesk.com/release-notes/17.0/whats-new/">Plesk&nbsp;Web Site</a>.</p>



<p>If you wish to try Plesk Onyx for yourself you can download a <a href="https://www.plesk.com/plesk-free-download/" class="rank-math-link">copy here</a>.<br>If you wish to upgrade your existing Plesk server, upgrade notes can be <a href="https://docs.plesk.com/release-notes/17.0/upgrade-notes/" class="rank-math-link">found here</a>.</p>



<figure class="wp-block-image"><a href="https://testing.conetix.com.au/plesk-licensing/"><img decoding="async" src="/wp-content/uploads/2016/10/14/onyxsalesbanner.png" alt="Plesk ONYX License BUY NOW"/></a></figure>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>WordPress 4.3: What&#8217;s New</title>
		<link>https://testing.conetix.com.au/blog/wordpress-43-whats-new/</link>
		
		<dc:creator><![CDATA[James Lake]]></dc:creator>
		<pubDate>Wed, 19 Aug 2015 23:45:00 +0000</pubDate>
				<category><![CDATA[General]]></category>
		<category><![CDATA[4.3]]></category>
		<category><![CDATA[billie]]></category>
		<category><![CDATA[four]]></category>
		<category><![CDATA[new version]]></category>
		<category><![CDATA[three]]></category>
		<category><![CDATA[update]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://conetix.com.au/wordpress-43-whats-new/</guid>

					<description><![CDATA[WordPress 4.3 has just been released, with this latest version named “Billie” after influential Jazz singer Billie Holiday, with a real focus on adding an extra layer of polish to the world’s premiere Content Management System (CMS). My role with Conetix involves managing quite a number of WordPress sites, so I’m always excited to see what new goodies are...  <a class="excerpt-read-more" href="https://testing.conetix.com.au/blog/wordpress-43-whats-new/" title="Read WordPress 4.3: What&#8217;s New">Read more &#187;</a>]]></description>
										<content:encoded><![CDATA[<p>WordPress 4.3 has just been released, with this latest version named “Billie” after influential Jazz singer Billie Holiday, with a real focus on adding an extra layer of polish to the world’s premiere Content Management System (CMS). My role with Conetix involves managing quite a number of WordPress sites, so I’m always excited to see what new goodies are bundled in each new version. While there are no big game-changing features in this release, with the tagline of “a more refined blend” making an already great product front and centre (and still with the price tag of free!!). So let’s see what’s new:</p>
<h2>
Formatting shortcuts</h2>
<p><img decoding="async" alt="WordPress 4.3 Formatting" src="/wp-content/uploads/2015/08/20/formatting.png" style="height: 286px; width: 505px;" /></p>
<p>So many websites forget the golden rule in the web world, that content is king. And what makes a great CMS is making authoring and publishing content simple and easy, with a clean workflow. Compared to all the major CMS’s this is where WordPress is the undisputed champion, and in this latest release we now have some great keyboard shortcuts for formatting on the fly. Now, settings &#8220;headings&#8221;, adding &#8220;ordered&#8221; and &#8220;unordered lists&#8221;, and adding italicised quotes can be added while typing, without needing to switch to the mouse for selecting formatting options, thus interrupting the work flow. While this might not seem significant, if you run a busy site, or you don’t have lots of time to spend to be on your business&#8217;s website making changes, little efficiencies add up over time, and who couldn’t use a few extra minutes in the day. </p>
<h2>
Site Icons</h2>
<p><img decoding="async" alt="WordPress 4.3 Billie Icon Maker" src="/wp-content/uploads/2015/08/20/wordpresscnxicon.png" style="height: 284px; width: 505px;" /></p>
<p>One of the pillars of any modern marketing strategy is branding, and with the new “Site Icons” feature in WordPress, stamping your logo on your site just got that little bit easier. By adding an icon through the customizer, WordPress pushes your logo to the bookmark menu and browser tabs. And for mobile users, when they create a shortcut to your website your logo appears as a icon on their homescreen. Its quick and easy to do, but when it comes to building a brand, paying attention to detail pays off in the long run. </p>
<h2> </h2>
<h2>Better password security</h2>
<p><img decoding="async" alt="WordPress 3.4 Billie Passwords" src="/wp-content/uploads/2015/08/20/better-passwords-1.png" style="height: 284px; width: 505px;" /></p>
<p>Password1 is a really bad password. I don’t care that ‘technically’ it’s got both an uppercase letter and a number, it’s terrible and it’s insecure. But yet every year it seems to top poor password lists. Password security is one of the most fundamental components of website security and the easiest to get right, yet it’s constantly overlooked.  Anyone who’s worked in the web industry that has seen first hand what happens when a password is compromised will tell you how important secure passwords are. WordPress has thus taken it upon themselves to help protect users by generating a difficult password for new users by default. Furthermore, if users change their passwords WordPress now displays how secure the new password is, so there’s no more excuses for your next password being ‘12345’!! </p>
<h2>
Menu’s in the customizer</h2>
<h2><img decoding="async" alt="WordPress 3.4 &quot;Billie&quot; Menu Cutomoiser" src="/wp-content/uploads/2015/08/20/menu-customizer.png" style="height: 284px; width: 505px;" /></h2>
<p>Tools are there to make work easier, but well designed, user friendly tools do more than that &#8211; they encourage creativity and experimentation. WordPress is full of these little gems (in my <a href="https://www.conetix.com.au/blog/wordpress-42-whats-new">review of WordPress 4.2</a> I had high praises for the live theme preview) and Menu’s in the Customizer is one of the absolute highlights of this release. From within the Customizer you can now create a ‘menu’ where you can restructure your site’s navigation in a live test environment by simply dropping and dragging elements in order. Getting your sites flow can be critical to getting visitors what they need quickly or for streamlining the process between decision and purchase. But for anyone who’s tried this before it can quickly become a philosophical debate with lines and site models scrawled across multiple white boards. And until you actually see it on the site, and use it from the user perspective it can be hard to get in right. Now you can without needing to create a copy of the site in a development environment and spend hours doing restructure after restructure. </p>
<p>Prior to publishing this article I was able to successfully update several WordPress sites all running 4.2+ with no issues, including using the new <a href="https://www.conetix.com.au/blog/plesk-12-wordpress-integration-making-your-life-ea">WordPress management tools integrated into Plesk 12.</a> For customers on our <a href="https://testing.conetix.com.au/managed-wordpress-hosting/">Managed WordPress service</a>, this latest update will be rolled out to you in the coming days.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Why You Should Use PDO Instead of MySQLi</title>
		<link>https://testing.conetix.com.au/blog/why-you-should-use-pdo-instead-mysqli/</link>
		
		<dc:creator><![CDATA[Matthew Setter]]></dc:creator>
		<pubDate>Thu, 23 Jul 2015 04:10:00 +0000</pubDate>
				<category><![CDATA[General]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[pdo]]></category>
		<category><![CDATA[sql]]></category>
		<guid isPermaLink="false">https://conetix.com.au/why-you-should-use-pdo-instead-mysqli/</guid>

					<description><![CDATA[Databases, what would web applications be without them, especially when you&#8217;re working with PHP. OK, that&#8217;s not a completely fair statement to make, as there&#8217;s a wide variety of data sources available for modern applications. There&#8217;s flat files, like CSV or text files. There&#8217;s databases, like MySQL, PostgreSQL, Oracle, Firebase, Sybase, and MS SQLServer. Then...  <a class="excerpt-read-more" href="https://testing.conetix.com.au/blog/why-you-should-use-pdo-instead-mysqli/" title="Read Why You Should Use PDO Instead of MySQLi">Read more &#187;</a>]]></description>
										<content:encoded><![CDATA[<p>Databases, what would web applications be without them, especially when you&rsquo;re working with PHP. OK, that&rsquo;s not a completely fair statement to make, as there&rsquo;s a wide variety of data sources available for modern applications.</p>
<p>There&rsquo;s flat files, like CSV or text files. There&rsquo;s databases, like MySQL, PostgreSQL, Oracle, Firebase, Sybase, and MS SQLServer. Then there&rsquo;s the newer NoSQL data sources, including Hadoop, Redis, Cassandra, and MongoDb, amongst a range of other options. But today I want to consider the database question.</p>
<p>If you&rsquo;ve been around PHP for some time&nbsp;you&rsquo;ll know that right from the early days that&nbsp;PHP was&nbsp;in-effect&nbsp;wedded to MySQL&nbsp;as the default distribution came with a MySQL driver. As time progressed however&nbsp;this extension started showing its age and was deprecated in favour of MySQLi (i for improved).</p>
<p>But then PHP continued maturing at a very rapid rate&nbsp;and became (depending on your perspective)&nbsp;either fully database-aware&nbsp;or database-agnostic&nbsp;with the arrival of the exceptional <a href="https://php.net/manual/en/book.pdo.php">PDO (PHP Data Objects) extension</a>. So in this post, I want to look at why you should consider migrating away from MySQLi to PDO in your PHP applications.</p>
<p><strong>What is PDO?</strong></p>
<p>If you&rsquo;re not familiar with PDO, or this is your first time hearing about it, here&rsquo;s the definition from the PHP manual:</p>
<p>The PHP Data Objects (PDO) extension defines a lightweight, consistent interface for accessing databases in PHP. Each database driver that implements the PDO interface can expose database-specific features as regular extension functions.</p>
<p>PDO provides a data-access abstraction layer, which means that, regardless of which database you&rsquo;re using, you use the same functions to issue queries and fetch data. PDO does not provide a database abstraction; it doesn&rsquo;t rewrite SQL or emulate missing features. You should use a full-blown abstraction layer if you need that facility.</p>
<p>From these two paragraphs, hopefully, you can begin to see just why PDO is the future, and why, in time, the MySQLi extension, might go the way of MySQL extension. Ask yourself: Why use a vendor-specific extension, when you can use one which supports multiple vendors? Why invest the time learning all about an extension, when it only supports one vendor; when you can learn an extension which supports <strong>up to 12</strong>?</p>
<p>I don&rsquo;t want to come across as though I&rsquo;m bashing the MySQLi extension. It&rsquo;s a good library which offers a lot of functionality, and is well tested. However, PDO has some features which set it apart, ones which may be well worth your while considering. Specifically, I suggest the following&nbsp;three:</p>
<ul>
<li>Vendor flexibility</li>
<li>Reduced learning curve</li>
<li>Named parameters</li>
</ul>
<p>Let&rsquo;s consider each of these.</p>
<p><strong>Vendor Flexibility</strong></p>
<p>For years the mantra of being able to change database vendors, to not be locked in to any specific one, has been touted as a key requirement for professional applications, even as a veritable silver bullet of safety. But in reality, once chosen, how often do applications change vendors? Arguably, not that often.</p>
<p>However, should the need arise, it&rsquo;s great to know that you can, without a whole lot of hassle. PDO, more than any other extension, offers a much shorter pathway to doing change, as it supports 12 database vendors, which includes:</p>
<ul>
<li>PostgreSQL</li>
<li>SQLite</li>
<li>MySQL</li>
<li>Oracle</li>
<li>ODBC</li>
<li>MS SQLServer &amp; Azure</li>
<li>Firebird</li>
<li>Informix</li>
<li>IBM DB2</li>
<li>Sybase</li>
<li>Cubrid</li>
<li>4D</li>
</ul>
<p>That&rsquo;s an impressive list of databases supported out of the box. This flexibility is likely even more apt if your application supports multiple vendors, right from the outset. Sure, you do have to consider the SQL that you&rsquo;re writing, and that it&rsquo;s portable across each database, or is written in such a way that it only takes advantage of database-specific features when it&rsquo;s able to do so.</p>
<p>But depending on your setup, were you to want to change from one vendor to another, depending on your SQL, all that might be required is to change the <a href="https://en.wikipedia.org/wiki/Data_source_name">DSN (data source name)</a>.</p>
<p><strong>Reduced Learning Curve</strong></p>
<p>Now let&rsquo;s consider the reduced learning curve, when one extension will support multiple database vendors. When you, or your team, only have to learn one library, instead of several, you can achieve both proficiency and mastery so much sooner. You don&rsquo;t need to learn multiple libraries. Once you&rsquo;ve mastered one, you&rsquo;re done.</p>
<p>Sure, that&rsquo;s an easy thing to say in theory, but in practise it will take time. However, by reducing the educational load, you reduce the overall investment required. The only thing which you need to know, is the vendor&rsquo;s SQL implementation and their query testing tools. But this is the case no matter which vendor you&rsquo;re working with.</p>
<p>I don&rsquo;t think it can be overstated how, by investing in one library, instead of several, a range of benefits become present. These include:</p>
<ul>
<li>Reduced time to library mastery</li>
<li>Reduced maintenance requirement</li>
<li>Reduced potential points of failure and bugs</li>
</ul>
<p>This is a simplistic set of benefits, granted. But they start to hint at the reduced investment required when mastering a universal library, instead of something vendor-specific. It&rsquo;s worth noting that, whilst PDO is a universal library, it&rsquo;s not lightweight or lacking. It&rsquo;s every bit as powerful, in many cases more so, than vendor specific libraries.</p>
<p><strong>Note:</strong> PDO doesn&rsquo;t do everything which MySQLi does. So if you&rsquo;re considering transitioning, if you&rsquo;re heavily tied to MySQL, using specific features which other database don&rsquo;t offer, or PDO doesn&rsquo;t readily provide, please consider the transition with care.</p>
<p><strong>Named Parameters</strong></p>
<p>Yes, MySQLi has <a href="https://php.net/manual/en/mysqli.prepare.php">placeholders</a>, but it doesn&rsquo;t have named parameters. Not sure of the difference? Consider the following example.</p>
<pre class="prettyprint lang-php " data-pbcklang="php" data-pbcktabsize="4">
php
&lt;?php
// Named parameters in PDO
$sql = &#39;SELECT name, colour, calories FROM fruit WHERE calories &lt; :calories AND colour = :colour&#39;;
</pre>
<p>This example contains a query with two named parameters, :calories and :colour. When the query is internally generated, the parameters can be reused as often as desired across a range of requests. They&rsquo;re clear to read and semantically easy to understand.</p>
<pre class="prettyprint lang-php " data-pbcklang="php" data-pbcktabsize="4">
php
// MySQLi parameterized query
$stmt = $mysqli-&gt;prepare(&quot;&#39;SELECT name, colour, calories FROM fruit WHERE calories &lt; ? AND colour = ?&#39;&quot;));
</pre>
<p>Now let&rsquo;s consider MySQLi, recasting the example using MySQLi. You can see that the query is just the same, but instead of a named parameter, we have a question mark, or placeholder. Now sure, the query&rsquo;s still legible. But a question mark as a placeholder doesn&rsquo;t hold as much semantic meaning.</p>
<p><strong>PDO Quick Introduction</strong></p>
<p>Now that we&rsquo;ve looked at a series of the reasons for using PDO instead of MySQLi, let&rsquo;s have a look at the basics of how to use it. Specifically, let&rsquo;s see how to perform some basic querying of database records.</p>
<p>Let&rsquo;s try and make this a semi-real world example, by using the <a href="https://dev.mysql.com/doc/employee/en/">MySQL Employees Sample Database</a>. This provides a series of tables which model a sample company payroll, covering employees, departments, salaries and so forth.</p>
<p><strong>Dependencies</strong></p>
<p>You don&rsquo;t need a lot to following along with the examples. Just a project directory and at least PHP 5.4 (ideally 5.6).</p>
<p><strong>Making a Connection</strong></p>
<p>First we need to make a connection to the database. To do that, we&rsquo;ll use the code below.</p>
<pre class="prettyprint lang-php " data-pbcklang="php" data-pbcktabsize="4">
php
$dbh = new PDO(
    &#39;mysql:host=localhost;port:33060;dbname=employees&#39;,
    &#39;homestead&#39;, &#39;secret&#39;
);
</pre>
<p>This creates a connection to my database on host localhost, using port 33060, connecting to a database called employees, using the credentials of homestead and secret. For more information, check out <a href="https://php.net/manual/en/ref.pdo-mysql.connection.php">the PDO MySQL DSN documentation</a>.</p>
<p><strong>Select Data</strong></p>
<p>With our connection established, let&rsquo;s select a set of user records, filtering the users by those with a salary of between $40,000 and $50,000, who work in marketing, and were hired after the first of January, 1985. Here&rsquo;s the query.</p>
<pre class="prettyprint lang-php " data-pbcklang="php" data-pbcktabsize="4">
php
$sql = &quot;SELECT e.*, s.salary
FROM employees e
INNER JOIN salaries s ON (s.emp_no = e.emp_no)
INNER JOIN dept_emp de ON (de.emp_no = e.emp_no)
INNER JOIN departments d ON (d.dept_no = de.dept_no)
WHERE (
  s.salary between :minSalary AND :maxSalary 
  AND d.dept_name = :department
  AND e.hire_date &gt; :hireDate
)&quot;;
$sth = $dbh-&gt;prepare($sql);
$sth-&gt;execute([
    &#39;:minSalary&#39; =&gt; 40000,
    &#39;:maxSalary&#39; =&gt; 50000,
    &#39;:department&#39; =&gt; &#39;Marketing&#39;,
    &#39;:hireDate&#39; =&gt; &#39;1985-01-01&#39;,
]);
$results = $sth-&gt;fetchAll();
foreach ($results as $result) {
    print_r($result);
}
</pre>
<p>Doing this will return an array of arrays, containing both an associative and scalar reference to each column in the resultset, as the example below shows.</p>
<pre class="prettyprint lang-php " data-pbcklang="php" data-pbcktabsize="4">
php
Array
(
    [emp_no] =&gt; 10928
    [0] =&gt; 10928
    [birth_date] =&gt; 1961-11-01
    [1] =&gt; 1961-11-01
    [first_name] =&gt; Udaiprakash
    [2] =&gt; Udaiprakash
    [last_name] =&gt; Schmezko
    [3] =&gt; Schmezko
    [gender] =&gt; M
    [4] =&gt; M
    [hire_date] =&gt; 1991-04-07
    [5] =&gt; 1991-04-07
    [salary] =&gt; 40531
    [6] =&gt; 40531
)
</pre>
<p>What about making it simpler, by hydrating a simple <a href="https://verraes.net/2013/11/value-objects-and-user-interfaces/">value object</a> per record in the resultset? To do that, first we create a value object to model a row, as below:</p>
<pre class="prettyprint lang-php " data-pbcklang="php" data-pbcktabsize="4">
php
class employee {
    public $emp_no;
    public $birth_date;
    public $first_name;
    public $last_name;
    public $gender;
    public $hire_date;
    public $salary;
}
</pre>
<p>Then, to use the object, we pass two arguments to the fetchAll() method, as below, PDO::FETCH_CLASS, which tells it to <a href="https://stackoverflow.com/questions/6991135/what-does-it-mean-to-hydrate-an-object">hydrate</a> an object, and the name of the class to hydrate.</p>
<pre class="prettyprint lang-php " data-pbcklang="php" data-pbcktabsize="4">
php
$results = $sth-&gt;fetchAll(PDO::FETCH_CLASS, &quot;employee&quot;);
</pre>
<p>Doing so, the results will now be hydrated objects, like the following example:</p>
<pre class="prettyprint lang-php " data-pbcklang="php" data-pbcktabsize="4">
php
employee Object
(
    [emp_no] =&gt; 10928
    [birth_date] =&gt; 1961-11-01
    [first_name] =&gt; Udaiprakash
    [last_name] =&gt; Schmezko
    [gender] =&gt; M
    [hire_date] =&gt; 1991-04-07
    [salary] =&gt; 40866
</pre>
<p>I&rsquo;d look at creating, updating, and deleting, but the functionality is largely the same as what we&rsquo;ve seen so far; so we&rsquo;ll end the examples here.</p>
<p><strong>&nbsp;Future of MySQLi</strong></p>
<p>To the best of my knowledge, MySQLi isn&rsquo;t going away anytime soon, and I&rsquo;d hate to suggest that it is or should. It&rsquo;s a well written and well tested library, which has a definite place in the PHP ecosystem. Additionally, as I&rsquo;m not one of the maintainers, I can&rsquo;t speak for them, nor make any pronouncements on their behalf.</p>
<p>What I can say though, is that, from my own perspective, I&rsquo;d encourage you to become familiar with PDO, if you&rsquo;re not already, in addition to what you&rsquo;ve read here. There are several very compelling arguments for using it, instead of a database vendor-specific extension.</p>
<p><strong>Wrapping Up</strong></p>
<p>And that&rsquo;s both an introduction to PDO, as well as three good reasons why you should consider using it, over a vendor specific library, such as MySQLi, for interacting with databases. Whilst, like any library of sufficient complexity, there&rsquo;s a lot to digest and learn with PDO, the investment will be worth it; especially as PDO is the foundation for so many of the newer database-related libraries available in the PHP ecosystem.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>The Cloud and the Internet of Things</title>
		<link>https://testing.conetix.com.au/blog/cloud-and-internet-things/</link>
		
		<dc:creator><![CDATA[Sid Young]]></dc:creator>
		<pubDate>Wed, 07 Jan 2015 06:00:00 +0000</pubDate>
				<category><![CDATA[General]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[embedded]]></category>
		<category><![CDATA[iot]]></category>
		<category><![CDATA[microcontroller]]></category>
		<category><![CDATA[mqtt]]></category>
		<category><![CDATA[robotics]]></category>
		<guid isPermaLink="false">https://conetix.com.au/cloud-and-internet-things/</guid>

					<description><![CDATA[In 2014 the &#34;Cloud&#34; gained some valuable traction with mature product offerings as well as clarity in service expectation and&#160;pricing models emerging. We also saw the rise of the &#34;Internet of Things&#34;, but some degree of misunderstanding and media hype exists and will continue to exist well into 2015. Firstly, what is &#34;The Internet of...  <a class="excerpt-read-more" href="https://testing.conetix.com.au/blog/cloud-and-internet-things/" title="Read The Cloud and the Internet of Things">Read more &#187;</a>]]></description>
										<content:encoded><![CDATA[<p>In 2014 the &quot;Cloud&quot; gained some valuable traction with mature product offerings as well as clarity in service expectation and&nbsp;pricing models emerging. We also saw the rise of the &quot;Internet of Things&quot;, but some degree of misunderstanding and media hype exists and will continue to exist well into 2015. Firstly, what is &quot;The Internet of Things&quot; (IOT) and secondly, how can the cloud benefit?</p>
<h2>What&#39;s old is new again?</h2>
<p>For decades machines have contained micro controllers&nbsp;that enable them to perform their task(s), over the years more sophisticated machines evolved with proprietary software protocols and hardware to enable them to talk to each others or central control systems usually with hefty incensing and software costs. These early systems were often referred to as <a href="https://en.wikipedia.org/wiki/SCADA">SCADA</a> systems, &quot;Supervisory, Control and Data Acquisition&quot;, they have been in existence for at least 20+ years and most oil &amp; gas&nbsp;plants, power generation,&nbsp;building automation and automated factory systems have them.</p>
<p>They are&nbsp;not new by any stretch of the imagination&nbsp;but what has happened in the last 10 years is the growing introduction of cheap Ethernet and Wifi&nbsp;interface modules&nbsp;that have been very economically priced to warrant adding them into these small control systems.&nbsp;</p>
<p>One area that has seen rapid adoption has been home automation and building control. Instead of wiring huge amounts of cable back to a central point, &nbsp;de-centralised nodes linked via Ethernet&nbsp;or Wifi&nbsp;emerged, reducing&nbsp;installation and maintenance costs significantly. With the increase in control nodes there has been a corresponding increase in the data these nodes can provide. By using nonproprietary&nbsp;networking protocols (such as&nbsp;TCP/IP)&nbsp;and network hardware more device platforms can interface into them to utilise that data and open opportunities to provide control and monitoring.</p>
<p>For a typical building, there are 1000&#39;s of temperature zones that can be monitored, air-flow into rooms, floor humidity, chilling stages, re-heating stages as well as occupancy detection, lighting control, lift control, water monitoring and regulation and a host of other control and monitoring points for ancillary services. If you even just consider a house, each room could have half a dozen monitoring points, multiply that by the number of rooms as well as the outside environment&nbsp;and the number of connected devices and the data they generate is substantial. Now multiply that by a suburb, city or country!&nbsp;We haven&#39;t even started on cars, trucks, trains or our road and environmental infrastructure!</p>
<h2>So where is IOT heading and where does &quot;The Cloud&quot;&nbsp;fit in?</h2>
<p>Lets assume home automation is big in 2015, it might be if the purchases by Google are an indication. Over the last few years Google has been buying up the cream of the worlds Robotic companies and adding to the list of acquisitions is a (growing) number of home automation companies. My guess is that the future thinkers at Google can see a&nbsp;fully interconnected world where factories are automated, cars drive themselves and people basically work to solve the future problems, robots do the manual labour and systems interact to serve us. Sounds almost futuristic, but its only been 50 years since we travelled into space and the explosion of technology in the&nbsp;last 20 years has outpaced all previous periods in history.&nbsp;Owning the technology that delivers this could be very rewarding. But back to the Cloud, the key outcome of all this information is data generation and control,&nbsp;ideally centralised and ideally secured.</p>
<p>Opening all those devices to open slather access to the Internet for anybody to see&nbsp;is a receipt for disaster and in terms of security&nbsp;would see homes, commercial buildings&nbsp;and any other IOT system the subject of all kinds of security threats. Cloud based servers that provide&nbsp;secured central points of access limit&nbsp;the threat of attacks to IOT systems, Cloud Servers&nbsp;can provide central points of authentication, provide web interfaces for IOT devices that might need to talk different protocols like <a href="https://en.wikipedia.org/wiki/MQTT">MQTT</a> or <a href="https://en.wikipedia.org/wiki/Representational_state_transfer">REST</a> and&nbsp;they can be the repository of data generated by IOT devices. We already entrust huge volumes of data to Cloud storage providers so this creates new and exciting opportunities to Cloud Vendors&nbsp;for value added services.</p>
<h2>Some Technical Scenarios to consider</h2>
<p>Lets get technical, lets assume you have spent $1000&#39;s adding automation to your house, you can see the temperature in any room, the attic and outside, you can turn on the&nbsp;lights, the garden&nbsp;sprinklers and regulate the time the pool pump is running as well as monitor your overall power usage. You announce it on a Blog and suddenly 30,000 people go to your home automation page and flood your home Internet link, assuming you have a fixed IP address and a public facing web server! Obviously the traffic load will be an issue, so in reality you don&#39;t want people to connect to your home, but while you are home you will need some level of Intranet access to do neat things like enable your security lighting, reduce cooling and air flow to un-occupied rooms and make sure the pool PH level is correct. Even on an intranet using Wifi, there are dangers.</p>
<p>Security for IOT systems is going to be a nightmare!</p>
<p>What protocol should these devices talk? While Internet Protocol (IP) is the defacto transport layer, high level protocols like MQTT are being promoted as the way forward and&nbsp;is sending your data to the Cloud&nbsp;a realistic idea and of any benefit?</p>
<p>Lets say a company offers you money for your power usage data, from this data a&nbsp;real time usage map could be produced that shows power consumption for a collection of streets, a suburb or an entire city. Not only is the data about power usage but its smart enough to report power usage for lighting, heating, cooling, cooking etc brokering this data and being paid for it might produce additional house hold income and create new economic models. Technically data needs to be delivered to those who wish to use it, Cloud Servers could be employed to store the data and broker it onwards to other interested parties, this could be done&nbsp;independently&nbsp;of the data source (your home or office building). If those devices also identify themselves then a whole new marketing segment opens up as well, this might be an unwelcome side effect for future consumers.</p>
<p>For data gathering use cases,&nbsp;pushing data to a Cloud Based server using a protocol like MQTT or a Publish/Subscribe protocol like RabbitMQ or some &quot;yet to become popular&quot; protocol needs to be identified early so the bugs can be ironed out. Personally I like the idea of generating data in JSON format and pushing that to a web service running on the Cloud Server, this data can then be brokered to third parties at a cost that reduces my server bill and subsidises my investment in technology.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>WordPress 4.0 Performance Benchmarking</title>
		<link>https://testing.conetix.com.au/blog/wordpress-40-performance-benchmarking/</link>
		
		<dc:creator><![CDATA[Tim Butler]]></dc:creator>
		<pubDate>Wed, 17 Dec 2014 03:00:00 +0000</pubDate>
				<category><![CDATA[General]]></category>
		<category><![CDATA[benchmark]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://conetix.com.au/wordpress-40-performance-benchmarking/</guid>

					<description><![CDATA[Overview Since WordPress is one of the most popular hosting platforms in the world, we have a significant amount of customers who use and trust WordPress for their websites. Throughout the years, we&#8217;ve spent a considerable amount of time&#160;working with&#160;the platform from a server perspective to optimise, tune and ensure that&#160;we offer a great WordPress...  <a class="excerpt-read-more" href="https://testing.conetix.com.au/blog/wordpress-40-performance-benchmarking/" title="Read WordPress 4.0 Performance Benchmarking">Read more &#187;</a>]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Overview</h2>



<p>Since WordPress is one of the most popular hosting platforms in the world, we have a significant amount of customers who use and trust WordPress for their websites. Throughout the years, we&#8217;ve spent a considerable amount of time&nbsp;working with&nbsp;the platform from a server perspective to optimise, tune and ensure that&nbsp;we offer a great WordPress environment. What we haven&#8217;t seen completed recently was a comparison as to what effect plugins have to performance, as well as various PHP versions. So, we&#8217;ve written this article so that we have some reliable performance metrics to measure the effect of adding plugins, PHP versions and what effect caching has on performance.</p>



<p>The speed of your website is a critical component of the success of your website. Fast sites lead to better user experience and in&nbsp;turn&nbsp;gives greater confidence in your business or company. If you&#8217;re running an eCommerce site, the statistics are even harder to ignore. According to <a rel="noopener noreferrer" class="rank-math-link" href="https://blog.kissmetrics.com/speed-is-a-killer/" target="_blank">KISSmetrics</a> 40% of consumers will abandon a cart for a website which takes longer than 3 seconds to load. Nearly 80% who have experienced performance issues with a website are less likely to buy from the same shop again. There&#8217;s also the SEO component too, Google uses the speed of the site as one of the factors for ranking your website.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>If you ignore your website performance then your competitors will get the upper hand.</p></blockquote>



<h2 class="wp-block-heading">Test Environment</h2>



<p>For this testing, we’ll be using a minimal CentOS 6 (64 bit) build using our container based hosting. We’ve ensured that the resource allocation is dedicated to ensure repeatable performance during testing. Unless otherwise specified below, we’ll be using stock configurations.</p>



<p><strong>Note:&nbsp;</strong>The premise of the testing is aimed at smaller sites with less than 10,000 hits a day, since this is where many&nbsp;WordPress&nbsp;users start to run into issues. We&#8217;ve aimed the specs&nbsp;on what we see for many &#8220;typical&#8221; small&nbsp;and&nbsp;medium-sized&nbsp;enterprise&nbsp;(SME) based systems.&nbsp;Of course, if we were talking about high end sites then the testing, environment used and optimisation techniques would be quite different.&nbsp;We&#8217;ve recently provided WordPress&nbsp;infrastructure platform which sustains over 1Gb/s of traffic, so it&#8217;s all about the right deployment for the right environment.</p>



<p>This base configuration includes</p>



<ul class="wp-block-list"><li>MySQL 5.1</li><li>PHP 5.3.3</li><li>Apache 2.2.15</li></ul>



<p>This is running on a VPS with 1GB of RAM and 2 CPU&#8217;s allocated (E5 based Xeons).</p>



<h2 class="wp-block-heading">Basic Install</h2>



<p>We then quickly install WordPress 4.0 by downloading the zip from the WordPress site and running through a standard configuration. I won’t document how to do that for this article, if you want instructions on how to install it manually you can read the guide&nbsp;<a href="https://codex.wordpress.org/Installing_WordPress" class="rank-math-link">here</a>.</p>



<p>The only item we changed from the standard configuration&nbsp;was “AllowOverrides” within the html directory so that the mod_rewrite rules&nbsp;could be set in the .htaccess file.</p>



<h2 class="wp-block-heading">Initial Benchmarking</h2>



<p>For a clean build, we now have a basic reference to run. All tests are repeated three times to ensure consistency. We’re simply using the <a href="https://httpd.apache.org/docs/2.4/programs/ab.html" target="_blank" rel="noreferrer noopener">Apache Benchmark</a> tool, which solely focuses on the performance of the server and application and not necessarily what occurs in real world performance. It will give us the Time To First Byte (TTFB), which is only one part which needs to be considered when looking at overall website performance. What it does give is a good indication as to how the server and server code performs, so it&#8217;s the main focus of this article. </p>



<p>We&#8217;re using the same test for each step, which is to use one concurrent thread to make 50 requests to the main WordPress page. This is a very low workload but will give a reasonable and repeatable metric to measure the performance.&nbsp;These tests are being run from a different VPS on the system server, so that network performance isn&#8217;t a factor.</p>



<pre class="wp-block-preformatted prettyprint lang-sh">ab -n 50 -c 1 https://wpserver/wordpress/</pre>



<p>The output looks like this:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>ab -n 50 -c 1&nbsp;https://wpserver/wordpress/&nbsp;<br>This is ApacheBench, Version 2.3 &lt;Revision:655654&gt;&nbsp;<br>Copyright 1996 Adam Twiss, Zeus Technology Ltd,&nbsp;https://www.zeustech.net/&nbsp;<br>Licensed to The Apache Software Foundation,&nbsp;https://www.apache.org/</p><p>Benchmarking wpserver (be patient)…..done</p><p>Server Software: Apache/2.2.15&nbsp;<br>Server Hostname: wpserver&nbsp;<br>Server Port: 80</p><p>Document Path: /wordpress/&nbsp;<br>Document Length: 7716 bytes</p><p>Concurrency Level: 1&nbsp;<br>Time taken for tests: 15.253 seconds&nbsp;<br>Complete requests: 50&nbsp;<br>Failed requests: 0&nbsp;<br>Write errors: 0&nbsp;<br>Total transferred: 398250 bytes&nbsp;<br>HTML transferred: 385800 bytes&nbsp;<br>Requests per second: 3.28 [#/sec] (mean)&nbsp;<br>Time per request: 305.059 [ms] (mean)&nbsp;<br>Time per request: 305.059 [ms] (mean, across all concurrent requests)&nbsp;<br>Transfer rate: 25.50 [Kbytes/sec] received</p><p>Connection Times (ms)&nbsp;<br>min mean[+/-sd] median max&nbsp;<br>Connect: 0 0 0.0 0 0&nbsp;<br>Processing: 273 305 15.2 299 349&nbsp;<br>Waiting: 273 305 15.2 299 349&nbsp;<br>Total: 273 305 15.2 299 349</p><p>Percentage of the requests served within a certain time (ms)&nbsp;<br>50% 299&nbsp;<br>66% 306&nbsp;<br>75% 318&nbsp;<br>80% 320&nbsp;<br>90% 331&nbsp;<br>95% 334&nbsp;<br>98% 349&nbsp;<br>99% 349&nbsp;<br>100% 349 (longest request)</p></blockquote>



<p>This gives us our mean starting value of&nbsp;<strong>305ms</strong>&nbsp;for the server response time. Not too bad, but certainly far from perfect if we want to provide the best customer experience and allow the website to scale.</p>



<h2 class="wp-block-heading">Adding Plugins</h2>



<p>So, lets do what most WordPress users do and install a few plugins. I must make this extremely clear:&nbsp;<strong>We don’t consider these plugins bad, nor should you avoid using them</strong>. Extra functionality can create further overhead, so it’s simply something you need to consider when installing plugins. This testing is simply to help quantify the difference and how to mitigate any drop in performance.</p>



<p>The first is the WordPress&nbsp;SEO&nbsp;Plugin&nbsp;by Yoast. All we enabled was the&nbsp;permalinks, which is what is typically used.&nbsp;The mean response is now&nbsp;<strong>375ms</strong>.&nbsp;</p>



<p>Next, we’ve added Contact Form 7 (without doing anything but enabling the plugin) and the mean response time has now inceased&nbsp;to&nbsp;<strong>401ms</strong>.</p>



<p>Installing&nbsp;Jetpack brings this up to&nbsp;<strong>441ms</strong>. You can see that each plugin adds a small, but measurable performance overhead.</p>



<p>Now lets add a full e-Commerce solution to our site, using wooCommerce. This now brings our mean time up to&nbsp;<strong>595ms.&nbsp;</strong></p>



<p>Just to confirm that it’s not external factors and to validate the results, I then disabled these additional plugins and re-ran the testing. The&nbsp;mean response dropped back down to&nbsp;<strong>301ms</strong>, which is virtually the same value we started with.</p>



<p>Again, there’s <strong>nothing wrong</strong> with any of these plugins. This build is what I see many typical small business websites, so it’s nothing out of the ordinary. What must be noted is that these plugins effectively&nbsp;<strong>doubled</strong>&nbsp;the time the server takes to render a page. This means we need to look at what we can do to optimise and speed up our WordPress installation.</p>



<h2 class="wp-block-heading">Upgrade PHP / MySQL</h2>



<p>The first steps are to see what impact running the latest variants of PHP and MySQL do, since this is something you should do from a “best practices” perspective anyway. As we’re an official mirror for the&nbsp;<a class="rank-math-link" href="https://remi.conetix.com.au/">Remi</a>&nbsp;repository,&nbsp;this is the method we’re using.</p>



<p>Lets upgrade PHP to PHP 5.4:&nbsp;</p>



<pre class="wp-block-preformatted prettyprint lang-sh">yum upgrade php</pre>



<p>This will also upgrade MySQL to version 5.5 (5.1 is stock), since it’s a dependency of the PHP 5.4 build for the Remi repo.</p>



<p>Then, restart the MySQL server and Apache and upgrade the MySQL database:</p>



<pre class="wp-block-preformatted prettyprint lang-sh">service httpd restart 
service mysqld restart 
mysql_upgrade</pre>



<p>What difference did this make? Our mean is now&nbsp;<strong>593ms </strong>(with the plugins enabled), basically no change.</p>



<p>Rattling through the tests, I then upgraded to PHP 5.5, restarted Apache and re-ran the test (3 times of course). Result?&nbsp;<strong>579ms</strong>. A little bit better, but not enough to be statistically significant. The reality is this wouldn’t be noticed by the user and certainly won’t increase the amount of users the server can handle concurrently.</p>



<p>Since we now have PHP 5.6.0 released as a stable build, let’s give it a go. The result? A mean of&nbsp;<strong>576ms</strong>. Not a notable improvement here. This isn’t to say that running the latest PHP isn’t worth doing, just don’t expect that it’s going to instantly boost your performance. There are other advantages to running newer versions of PHP, especially when it comes to updates and security.</p>



<h2 class="wp-block-heading">MySQL Tuning</h2>



<p>A basic&nbsp;install of WordPress isn&#8217;t overly database intensive, but what’s the effect of a bit of basic tuning? We can use <a href="https://mysqltuner.com/" target="_blank" aria-label=" (opens in a new tab)" rel="noreferrer noopener" class="rank-math-link">MySQL Tuner</a> as reference to go forth with, but before making changes you should ensure you read our <a href="/support/mysql-performance-tuning-and-optimisation" class="rank-math-link">MySQL Tuning Guide</a>.</p>



<p>The first main item to look at is query caching. We enable it by adding the following field into /etc/my.conf:</p>



<pre class="wp-block-preformatted prettyprint lang-html">query_cache_size=8M</pre>



<p>This gives the server a modest amount of memory in which to cache lookups. We restarted MySQL and re-ran the testing, which resulted in a mean of&nbsp;<strong>568ms</strong>. Again, no huge performance gain. Let’s enable all of the suggestions, so the extra parts to our my.conf file look like this:</p>



<pre class="wp-block-preformatted prettyprint lang-sh">query_cache_size=8M 
tmp_table_size=16M 
max_heap_table_size=32M 
thread_cache_size=4 
table_open_cache=800</pre>



<p>Result:&nbsp;<strong>571ms.</strong>&nbsp;Clearly, MySQL isn&#8217;t a limiting factor for these tests.&nbsp;To confirm our results, I even disabled all the plugins&nbsp;temporarily&nbsp;to see if the&nbsp;result&nbsp;is the same as our starting reference. This brought the mean average back down to <strong>297ms</strong>, so again perfectly consistent with the base results.</p>



<p><strong>Conclusion:&nbsp;</strong>MySQL gives you pretty good performance right out of the box. The performance difference between PHP 5.4 / 5.5 and 5.6 isn’t significant for WordPress.</p>



<p>A lot of this tuning will assist with a site which is heavily loaded, especially with a number of widgets displayed or shopping carts. The age old ethos of avoiding “premature optimisation is the root of all evil” sings strong and loud here.</p>



<h2 class="wp-block-heading">Server Caching</h2>



<p>If simply running the latest software and a bit of tuning of MySQL hasn’t given us performance gains, what else can be done then? The answer is caching. WordPress have a guide on this&nbsp;<a href="https://codex.wordpress.org/WordPress_Optimization/Caching" target="_blank" aria-label=" (opens in a new tab)" rel="noreferrer noopener" class="rank-math-link">here</a>, with their top recommendation being W3 Total Cache. Here at Conetix, this has always remained our answer to those having WordPress performance issues, but there&#8217;s one option to benchmark first. PHP 5.5 and above now have the <a href="https://php.net/manual/en/book.opcache.php" target="_blank" aria-label=" (opens in a new tab)" rel="noreferrer noopener" class="rank-math-link">OPcache</a>&nbsp;library, which stores the pre-compiled&nbsp;bytecode in memory. Without this, every&nbsp;time you call a PHP based site it has to compile the PHP code into machine code before executing. OPCache stores this result in memory, which therefore reduces the overhead every time you call a PHP script.</p>



<p>Firstly, lets install and enable the&nbsp;PHP OPcache:</p>



<pre class="wp-block-preformatted prettyprint lang-sh">yum install php-opcache 
service httpd restart</pre>



<p>So does it make much of a difference? We now have a mean time of&nbsp;<strong>151ms</strong>, with the plugins enabled. That’s a response time decrease&nbsp;of nearly 75%, which will not only be noticed by your clients by also increase your server capacity. This is the sort of optimisation we need to achieve!</p>



<p>Running against the WordPress server with all the plugins off again drops this down to <strong>69ms</strong>, which is again about a 75% decrease against the stock figures. This is a great improvement and therefore we highly recommend using PHP 5.5+ with OPcache enabled. It can be installed on previous versions via PECL as well, but it&#8217;s a much easier task to simply upgrade to PHP 5.5.</p>



<p>Is this all we can achieve? Of course not! W3 Total Cache takes this caching a step further and covers areas such as object and page caching. After installing W3 Total Cache, I enabled the&nbsp;<strong>Object Cache</strong>&nbsp;to see if this makes any difference. Result?&nbsp;<strong>190ms</strong>. Those who are following the figures carefully will note that this is slower. The reasonable conclusion to draw from this is that the PHP OPCache is more efficient at optimisation then just at the object level.</p>



<p>Now lets try the Page Cache. This stores a complete compiled version of the whole page, rather than having to run the database queries and compile the templates and plugins each time. The result?&nbsp;<strong>2.9ms</strong>. There’s no typo here, that’s&nbsp;<strong>2.9ms!</strong>&nbsp;Clearly, this has provided the most significant performance gain yet. Not only will the user experience dramatically increase, but the resource drain on the server will also significantly decrease.</p>



<p><strong>Conclusion:</strong>&nbsp;Installing W3 Total Cache and enabling the Page Cache gives a <strong>99% decrease</strong> in server response times. The difference is literally that black and white.</p>



<p>There’s a few caveats with caching of course, it needs to be tightly coupled to your platform in order for changes to become live. In the case of WordPress, if you&#8217;re modifying data outside of the framework (not recommended anyway!), W3 Total Cache won&#8217;t be aware of the change. As long as you stick to a well planned system then this shouldn&#8217;t be a problem.</p>



<h2 class="wp-block-heading">Further&nbsp;Optimisation</h2>



<p>Once you have&nbsp;WordPress running at optimal levels on your server, the next parts to focus on are client side caching and optimisation. Anything which can be done to reduce the amount of files download and the size of the downloads will have a positive impact on all clients. Especially now that mobile devices&nbsp;make up nearly 30% of website traffic, this impact can be significant. A good source of information on this topic is&nbsp;<a href="https://browserdiet.com/" class="rank-math-link">Browser Diet</a>, which outlines not only how to reduce the size of your site but how to best optimise the performance of areas such as Javascript and CSS as well. Before starting any optimisation, we highly recommend reading through this site. We&#8217;ll cover the impact this can have in a future guide, but for now we recommend a site like <a href="https://gtmetrix.com/" target="_blank" aria-label=" (opens in a new tab)" rel="noreferrer noopener" class="rank-math-link">GTmetrix</a>&nbsp;in order to get a basic overview of how your site is performing.</p>



<h2 class="wp-block-heading">Conclusion</h2>



<p>The results are pretty clear, we took a very basic WordPress instance (including commonly used plugins)&nbsp;and improved the server response from nearly <strong>600ms down to 3ms, </strong>a 99% decrease in response times. While this may only be for a test site, similar results should be possible from your website as well. As a picture says a thousands words, here&#8217;s a graph of the results:</p>



<figure class="wp-block-image"><img decoding="async" src="/wp-content/uploads/2014/12/17/wordpress_benchmark_results.png" alt="WordPress Benchmark Results"/></figure>



<p>The effect of adding various plugins, PHP version changes and caching can be quite clearly seen. The real world experience is noticeable as well, so the performance increase extends beyond a few basic benchmarks.</p>



<p><strong>So, as our takeaway points for this article:</strong></p>



<ol class="wp-block-list"><li>Variations in the PHP versions don&#8217;t provide any performance gains for lower traffic sites.<br>&nbsp;</li><li>Plugins can slow down your website, but this doesn&#8217;t make them a bad thing.<br>&nbsp;</li><li>OpCache&nbsp;makes a big difference to performance.<br>&nbsp;</li><li>W3 Total Cache makes the biggest difference and is the largest contributing factor to performance on your WordPress based site.<br>&nbsp;</li><li>Optimisations beyond the server level are needed to make your website perform optimally.<br>&nbsp;</li></ol>



<p>Again, I want to re-iterate that these apply to SME level deployments of WordPress only. If you&#8217;re looking at optimising your WordPress based installation for hundreds of thousands of users, the level of optimisation and work required to sustain this requires a completely different approach. This is something we have experience with too and we may look to detail how we&#8217;ve achieved this for some of our clients in a future article.</p>



<p>If you have any questions or other suggestions, please feel free to add them below!</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
