15+ Best Appointment Booking WordPress Plugins

Best Appointment Booking WordPress Plugins for Scheduling & ReservationsIf your business relies on appointments, you have a WordPress site and you haven’t installed a booking plugin yet, you need to get on that. Specifically one of these appointment booking WordPress plugins. There’s no reason for so many businesses to still force their customers to call them on the phone, contact them by email […]

The post 15+ Best Appointment Booking WordPress Plugins appeared first on WPExplorer.

Google Announces Beta Testing of Augmented Reality Walking Directions in Maps App

As anyone who has used Google Maps’ walking navigation feature in a major city can attest, the app doesn’t always get it right. Relying on GPS technology to guide users from one precise location to another can be a rather tenuous endeavor in an urban environment, where visibility from the ground can be low and GPS signals are often interrupted by tall structures.

“We’re experimenting with a way to solve this problem using a technique we call global localization, which combines Visual Positioning Service (VPS), Street View, and machine learning to more accurately identify position and orientation. Using the smartphone camera as a sensor, this technology enables a more powerful and intuitive way to help people quickly determine which way to go,” the company said Monday on the Google AI Blog.

The Modern JavaScript Landscape

It might be that by the time we end this article, a new Javascript framework would have been launched somewhere. But that's really not in our control. Therefore, we should simply continue with what we have. At least, because of the disclaimer, we can be sure that we aren't inventing a new framework.

There was a time when writing effective front-end code meant that you had to possess a good understanding of how HTML, CSS, and JavaScript meld together to create web pages. Well, fortunately, that's mostly true even today. However, in the past decade, the Javascript landscape has exploded. Due to this, developers have been left scratching their heads to simply figure out what all they should know in order to build effective web applications.

Cybersecurity and the Need for SSL Monitoring

The cybersecurity industry is constantly striving to stay well prepared and well ahead of new threats. Data protection was in the spotlight all through 2018. It’s a common practice for applications to collect user data like the user’s personal information, location, and other personal preferences. Such important data is vulnerable and, if left unprotected, can be stolen and misused by hackers.

UK enacted the General Data Protection Regulation (GDPR) that forced companies to state and comply with data privacy policies. GDPR gives the users control over their data and the freedom to decide whether the data can be shared or not.

Kafka Logging With the ELK Stack

Kafka and the ELK Stack — usually these two are part of the same architectural solution, Kafka acting as a buffer in front of Logstash to ensure resiliency. This article explores a different combination — using the ELK Stack to collect and analyze Kafka logs. 

More on the subject:

Selenium Grid Setup Tutorial for Cross-Browser Testing

When performing cross-browser testing manually, one roadblock that you might have hit during the verification phase is testing the functionalities of your web application across different operating systems, devices, and/or browsers with respect to time. With thousands of browsers available in the market, automation testing for validating cross-browser compatibility has become a necessity.

Referring to automation and considering our love for open-source software, it is inevitable to turn a blind eye from one of the most renowned test automation frameworks, Selenium. We have covered automation testing with Selenium WebDriver for cross-browser testing previously on our blog where we discussed different variants of Selenium, i.e IDE, RC, WebDriver, etc. and ran our first automation script.

DevOps Radio: Seeking Progressive Delivery, Debunking DevOps Hogwash

James Governor, analyst and co-founder of RedMonk, sat with Sacha Labourey at DevOps World | Jenkins World to catch up on software development and deployment and discuss which companies were doing it well. Before they tackle the future of DevOps in Episode 44, they revisit the past (think: Sacha's JBoss days) and what James admits is not his finest moment as an industry analyst in regard to some "hogwash" on the decoupling of open source.

From there, they dive into a new-ish concept with a newer title — progressive delivery. James shares his perspective on the interaction between IT and the business if you decouple deploy from release. He notes one needs to look at the bridge between what an enterprise customer and what web companies are doing. His solution? Train the people in organizations first, or at least give IT the green light to keep deploying software and services, but let businesses decide when to activate it. It's not enough to just spin the IT wheel faster. If organizations want to have an impact loop, they need to involve the business stakeholders that understand the users of the service, and how they should be integrated into the process.

How to Properly Resize and Serve Scaled Images with WordPress

Serving scaled images is one of the most overlooked ways to deliver a better site performance. Are your images holding your site back? Images take up a lot of file size space, especially if they’re bloated and oversized. That’s why images should be number one on your list of things to optimize if you’re trying to […]

How to Manage Multiple WordPress Sites from One Dashboard

Are you looking for an easy way to manage multiple WordPress sites?

Monitoring multiple websites and keeping them up to date can be very time-consuming.

Luckily, there are several WordPress management tools that make it super easy to manage multiple WordPress websites from a single dashboard. This will help you save a lot of time while keeping all your WordPress installs and plugins up to date.

In this article, we will share some of the best tools to help you easily manage multiple WordPress sites from one dashboard like a pro.

Best tools to easily manage multiple WordPress sites

Why Use a WordPress Management Tool to Maintain Multiple Sites?

WordPress management tools make it easy to manage multiple WordPress websites from a single dashboard.

You will be able to:

  • Quickly update WordPress software on all your websites.
  • Monitor theme and plugin updates across your websites and install them easily.
  • Automatically back up your WordPress sites and store them in an offsite location.
  • Manage users, comments, and other WordPress options.

Managing your sites using a multi-site management tool helps you keep an eye on all your sites without logging into each site separately.

Whether you are an individual user, freelancer, blogger, or agency, using one of these tools can help you save time while making sure that all your sites are functioning properly.

Providing website maintenance services to businesses is also a popular online business idea. You can use these WordPress site management tools to help grow your freelance business.

That being said, let’s look at the best tools to easily manage multiple WordPress sites from a single dashboard.

1. InfiniteWP

InfiniteWP

InfiniteWP is a powerful WordPress site management tool optimized for agencies, developers, and freelancers.

You can manage unlimited websites. However, the free version is limited to managing WordPress plugins, themes, and core updates. It also allows you to create on-demand site backups, but you will need a paid addon to store them in a remote storage location.

The real power of InfiniteWP is unlocked with their premium plan, which includes all paid features like easy website deployments, staging websites, migrations, malware scans, uptime monitoring, client reports, managing comments, publishing posts and pages, 2-factor authentication, a broken link checker, and more.

They also let you white-label the plugin with your own branding so that your clients see your logo instead of InfiniteWP.

InfiniteWP is not a SaaS application. Instead, it allows you to install the WordPress management tool directly on your own site. You can install it via an installer plugin, via cPanel, or manually upload it to your server.

Once set up, you can add websites that you want to manage and then install the InfiniteWP client plugin on those websites. This client plugin connects your websites to InfiniteWP’s admin panel. This gives you infinite control over the sites you manage.

Pricing: Paid plans start from $147/year for 10 sites.

2. iThemes Sync

iThemes Sync

iThemes Sync is a powerful WordPress management tool from the people behind the popular BackupBuddy plugin.

It allows you to manage WordPress updates from a single dashboard. You can also install themes and plugins from WordPress.org or manually upload them.

It also gives you access to uptime monitoring, client reports, user management, security, and integration with BackupBuddy cloud storage, Google Search Console, and more.

It comes with an easy-to-use, intuitive interface which makes site management a breeze.

Pricing: Paid plans start from $69 per year for 5 sites.

3. Jetpack

Jetpack WP

Jetpack is a powerful plugin suite that comes with multiple WordPress site management features. You will need a WordPress.com account to start using Jetpack. (See the difference between WordPress.com vs. WordPress.org).

The free Jetpack plugin acts as a connector between your website and WordPress.com servers. You will be using the WordPress.com dashboard to manage all your WordPress sites.

Using the free version, you can manage WordPress plugins and core updates across all your websites. It also comes with downtime monitoring and basic brute force attack protection.

However, you will need to upgrade to their paid plans to get more features. There are plans with different features, including automated backups with Jetpack, malware scanning, security fixes, site activity logs, and more.

Pricing: Paid plans start from $3.95/month (billed annually).

4. CMS Commander

CMS Commander

CMS Commander is a paid WordPress website management tool. You will manage your websites from the CMS Commander dashboard. To connect all your websites, you will need to install a client plugin on each site.

It includes 1-click updates, backup management, 2-factor authentication, a basic malware scanner, custom branding, and more.

What makes CMS Commander a little different than other tools on the list is its content management features. It allows you to utilize third-party sources like YouTube, Flickr, Yelp, and more to add content.

It also connects with article spinning services to rewrite the content and post it to your multiple websites. For affiliate marketers, it offers integrations with popular affiliate networks like Amazon, ShareASale, Commission Junction, and more.

Pricing: Plans start from $8/month for 5 sites. Business plans for agencies and large site networks start from $30/month for 50 sites.

5. MainWP

MainWP

MainWP is a free WordPress website management tool supported by paid addons. It comes as an admin plugin that you install on a separate WordPress website.

After that, you need to install the MainWP child plugin on all the websites you want to manage.

MainWP comes with easy update management, uptime monitoring, a security scanner by Sucuri, a vulnerable plugin and theme scanner, user and content management tools, and more.

It also comes with extensions for several popular WordPress backup plugins, including UpdraftPlus, allowing you to manage your backups as you want. You can also find extensions for bulk upload articles, client reports, access control, and more.

Pricing: The core plugin is free, with paid extensions for different features. All extensions subscription starts at 17/month (billed annually).

6. ManageWP

ManageWP

ManageWP is a free WordPress website management tool that allows you to manage all your WordPress sites from a single dashboard.

The dashboard is hosted on ManageWP’s website, and you connect all your websites by installing the Worker plugin on each site. This plugin acts as a bridge between your websites and the ManageWP dashboard.

Using a single dashboard, you can install one-click updates for all your WordPress plugins, themes, and core WordPress files. It lets you moderate comments on all your sites from the ManageWP dashboard.

The core ManageWP functionality is free for unlimited sites. However, they also offer paid addons on a monthly subscription basis. It includes automated monthly backups and security scans for free, but you will need the paid addons for real-time backups and automated scheduled security scans.

Other notable features include performance analysis, uptime monitoring, SEO rankings, and historical logs of all activities performed by ManageWP on your sites.

If you are an agency, you will like their client reports, which you can send to your clients to keep them in the loop. ManageWP also offers a white label service, which entirely hides ManageWP branding and allows you to offer your clients a user experience with your own brand.

Pricing: Free for unlimited sites with paid addons available on a monthly subscription basis.

7. WP Remote

WP Remote

WP Remote offers a simple way to manage updates on all your WordPress sites. It is a basic WordPress management tool with a limited set of features than some other tools on this list.

It lets you easily install WordPress updates for core, plugins, and themes. You can also use it to create backups and download them to your computer or store them on AWS or SFTP.

Pricing: Agency plans start from $29/month for 5 sites, allowing you to add more users.

Which Is the Best Tool to Manage Multiple WordPress Sites?

Choosing the best WordPress website management tool entirely depends on your needs. An individual user with fewer WordPress sites may want an easier and cheaper solution.

On the other hand, if you are a freelancer or agency working for clients, you will want to use something more powerful and advanced.

Regarding features, ease of use, and flexibility, we found InfiniteWP to be the best WordPress management tool. It is a perfect fit for freelancers, agencies, and developers.

If you only want to manage a few sites and don’t need all the advanced features that InfiniteWP offers, then we recommend iThemes Sync or Jetpack for basic website management.

We hope this article helped you find the best tools to manage multiple WordPress sites easily. You may also want to see our ultimate WordPress security guide and our expert picks for the must have WordPress plugins to grow your website.

If you liked this article, then please subscribe to our YouTube Channel for WordPress video tutorials. You can also find us on Twitter and Facebook.

The post How to Manage Multiple WordPress Sites from One Dashboard first appeared on WPBeginner.

Grid Reveal Effects with Anime.js

Recently, a new version of anime.js was released. One of the great new features is its staggering system that makes complex follow through and overlapping animations really simple. We wanted to give it a try and experiment with this new feature on an image grid with many thumbnails. We’ve created four demos, each with a different staggering effect that hides and shows small images to reveal some content underneath.

Attention: Note that this is highly experimental and that we use modern CSS properties that might not be supported in older browsers.

If you want to learn more about staggering in anime, you can check out the great documentation: Staggering in anime.js

In the first demo, we make the thumbnails disappear from the point where we clicked and then reverse this animation when closing the full view.

GridRevealEffects_00

GridRevealEffects_01

In the second demo, we fade and scale the thumbnails down. Not from the center though but from the edges. We also make the thumbnails appear again in the same way when closing the full view.

GridRevealEffects_02

The third demo shows how to make the items disappear towards the bottom right corner.

GridRevealEffects_06

The last demo is a more playful example: here we let the thumbnails “fall down”. When closing the view, we make them show again by moving them upwards.

GridRevealEffects_04

We hope you like these effects and find them useful!

References and Credits

Grid Reveal Effects with Anime.js was written by Mary Lou and published on Codrops.

An Introduction To WebBluetooth

An Introduction To WebBluetooth

An Introduction To WebBluetooth

Niels Leenheer

With Progressive Web Apps, the web has been ever more closely moving towards native apps. However, with the added benefits that are inherent to the web such as privacy and cross-platform compatibility.

The web has traditionally been fantastic about talking to servers on the network, and to servers on the Internet specifically. Now that the web is moving towards applications, we also need the same capabilities that native apps have.

The amount of new specifications and features that have been implemented in the last few years in browsers is staggering. We’ve got specifications for dealing with 3D such as WebGL and the upcoming WebGPU. We can stream and generate audio, watch videos and use the webcam as an input device. We can also run code at almost native speeds using WebAssembly. Moreover, despite initially being a network-only medium, the web has moved towards offline support with service workers.

That is great and all, but one area has been almost the exclusive domain for native apps: communicating with devices. That is a problem we’ve been trying to solve for a long time, and it is something that everybody has probably encountered at one point. The web is excellent for talking to servers, but not for talking to devices. Think about, for example, trying to set up a router in your network. Chances are you had to enter an IP address and use a web interface over a plain HTTP connection without any security whatsoever. That is just a poor experience and bad security. On top of that, how do you know what the right IP address is?

HTTP is also the first problem we run into when we try to create a Progressive Web App that tries to talk to a device. PWAs are HTTPS only, and local devices are always just HTTP. You need a certificate for HTTPS, and in order to get a certificate, you need a publicly available server with a domain name (I’m talking about devices on our local network that is out of reach).

So for many devices, you need native apps to set the devices up and use them because native apps are not bound to the limitations of the web platform and can offer a pleasant experience for its users. However, I do not want to download a 500 MB app to do that. Maybe the device you have is already a few years old, and the app was never updated to run on your new phone. Perhaps you want to use a desktop or laptop computer, and the manufacturer only built a mobile app. Also not an ideal experience.

WebBluetooth is a new specification that has been implemented in Chrome and Samsung Internet that allows us to communicate directly to Bluetooth Low Energy devices from the browser. Progressive Web Apps in combination with WebBluetooth offer the security and convenience of a web application with the power to directly talk to devices.

Bluetooth has a pretty bad name due to limited range, bad audio quality, and pairing problems. But, pretty much all those problems are a thing of the past. Bluetooth Low Energy is a modern specification that has little to do with the old Bluetooth specifications, apart from using the same frequency spectrum. More than 10 million devices ship with Bluetooth support every single day. That includes computers and phones, but also a variety of devices like heart rate and glucose monitors, IoT devices like light bulbs and toys like remote controllable cars and drones.

Recommended reading: Understanding API-Based Platforms: A Guide For Product Managers

The Boring Theoretical Part

Since Bluetooth itself is not a web technology, it uses some vocabulary that may seem unfamiliar to us. So let’s go over how Bluetooth works and some of the terminology.

Every Bluetooth device is either a ‘Central device’ or a ‘Peripheral’. Only central devices can initiate communication and can only talk to peripherals. An example of a central device would be a computer or a mobile phone.

A peripheral cannot initiate communication and can only talk to a central device. Furthermore, a peripheral can only talk to one central device at the same time. A peripheral cannot talk to another peripheral.

a phone in the middle, talking to multiple peripherals, such as a drone, a robot toy, a heart rate monitor and a lightbulb
A central device can talk to multiple peripherals. (Large preview)

A central device can talk to multiple peripherals at the same time and could relay messages if it wanted to. So a heart rate monitor could not talk to your lightbulbs, however, you could write a program that runs on a central device that receives your heart rate and turns the lights red if the heart rate gets above a certain threshold.

When we talk about WebBluetooth, we are talking about a specific part of the Bluetooth specification called Generic Attribute Profile, which has the very obvious abbreviation GATT. (Apparently, GAP was already taken.)

In the context of GATT, we are no longer talking about central devices and peripherals, but clients and servers. Your light bulbs are servers. That may seem counter-intuitive, but it actually makes sense if you think about it. The light bulb offers a service, i.e. light. Just like when the browser connects to a server on the Internet, your phone or computer is a client that connects to the GATT server in the light bulb.

Each server offers one or more services. Some of those services are officially part of the standard, but you can also define your own. In the case of the heart rate monitor, there is an official service defined in the specification. In case of the light bulb, there is not, and pretty much every manufacturer tries to re-invent the wheel. Every service has one or more characteristics. Each characteristic has a value that can be read or written. For now, it would be best to think of it as an array of objects, with each object having properties that have values.

the hierarchy of services and characteristics compared to more familiar constructs from JavaScript - a server is similar to an array of objects, a service to an object in that array, a characteristic to a property of that object and both have values
A simplified hierarchy of services and characteristics. (Large preview)

Unlike properties of objects, the services and characteristics are not identified by a string. Each service and characteristic has a unique UUID which can be 16 or 128 bits long. Officially, the 16 bit UUID is reserved for official standards, but pretty much nobody follows that rule. Finally, every value is an array of bytes. There are no fancy data types in Bluetooth.

A Closer Look At A Bluetooth Light Bulb

So let’s look at an actual Bluetooth device: a Mipow Playbulb Sphere. You can use an app like BLE Scanner, or nRF Connect to connect to the device and see all the services and characteristics. In this case, I am using the BLE Scanner app for iOS.

The first thing you see when you connect to the light bulb is a list of services. There are some standardized ones like the device information service and the battery service. But there are also some custom services. I am particularly interested in the service with the 16 bit UUID of 0xff0f. If you open this service, you can see a long list of characteristics. I have no idea what most of these characteristics do, as they are only identified by a UUID and because they are unfortunately a part of a custom service; they are not standardized, and the manufacturer did not provide any documentation.

The first characteristic with the UUID of 0xfffc seems particularly interesting. It has a value of four bytes. If we change the value of these bytes from 0x00000000 to 0x00ff0000, the light bulb turns red. Changing it to 0x0000ff00 turns the light bulb green, and 0x000000ff blue. These are RGB colors and correspond exactly to the hex colors we use in HTML and CSS.

What does that first byte do? Well, if we change the value to 0xff000000, the lightbulb turns white. The lightbulb contains four different LEDs, and by changing the value of each of the four bytes, we can create every single color we want.

The WebBluetooth API

It is fantastic that we can use a native app to change the color of a light bulb, but how do we do this from the browser? It turns out that with the knowledge about Bluetooth and GATT we just learned, this is relatively simple thanks to the WebBluetooth API. It only takes a couple of lines of JavaScript to change the color of a light bulb.

Let’s go over the WebBluetooth API.

Connecting To A Device

The first thing we need to do is to connect from the browser to the device. We call the function navigator.bluetooth.requestDevice() and provide the function with a configuration object. That object contains information about which device we want to use and which services should be available to our API.

In the following example, we are filtering on the name of the device, as we only want to see devices that contain the prefix PLAYBULB in the name. We are also specifying 0xff0f as a service we want to use. Since the requestDevice() function returns a promise, we can await the result.

let device = await navigator.bluetooth.requestDevice({
    filters: [ 
        { namePrefix: 'PLAYBULB' } 
    ],
    optionalServices: [ 0xff0f ]
});

When we call this function, a window pops up with the list of devices that conform to the filters we’ve specified. Now we have to select the device we want to connect to manually. That is an essential step for security and privacy and gives control to the user. The user decides whether the web app is allowed to connect, and of course, to which device it is allowed to connect. The web app cannot get a list of devices or connect without the user manually selecting a device.

the Chrome browser with the window that the user needs to use to connect to a device, with the lightbulb visible in the list of devices
The user has to manually connect by selecting a device. (Large preview)

After we get access to the device, we can connect to the GATT server by calling the connect() function on the gatt property of the device and await the result.

let server = await device.gatt.connect();

Once we have the server, we can call getPrimaryService() on the server with the UUID of the service we want to use as a parameter and await the result.

let service = await server.getPrimaryService(0xff0f);

Then call getCharacteristic() on the service with the UUID of the characteristic as a parameter and again await the result.

We now have our characteristics which we can use to write and read data:

let characteristic = await service.getCharacteristic(0xfffc);

Writing Data

To write data, we can call the function writeValue() on the characteristic with the value we want to write as an ArrayBuffer, which is a storage method for binary data. The reason we cannot use a regular array is that regular arrays can contain data of various types and can even have empty holes.

Since we cannot create or modify an ArrayBuffer directly, we are using a ‘typed array’ instead. Every element of a typed array is always the same type, and it does not have any holes. In our case, we are going to use a Uint8Array, which is unsigned so it cannot contain any negative numbers; an integer, so it cannot contain fractions; and it is 8 bits and can contain only values from 0 to 255. In other words: an array of bytes.

characteristic.writeValue(
    new Uint8Array([ 0, r, g, b  ])
);

We already know how this particular light bulb works. We have to provide four bytes, one for each LED. Each byte has a value between 0 and 255, and in this case, we only want to use the red, green and blue LEDs, so we leave the white LED off, by using the value 0.

Reading Data

To read the current color of the light bulb, we can use the readValue() function and await the result.

let value = await characteristic.readValue();
    
let r = value.getUint8(1); 
let g = value.getUint8(2);
let b = value.getUint8(3);

The value we get back is a DataView of an ArrayBuffer, and it offers a way to get the data out of the ArrayBuffer. In our case, we can use the getUint8() function with an index as a parameter to pull out the individual bytes from the array.

Getting Notified Of Changes

Finally, there is also a way to get notified when the value of a device changes. That isn’t really useful for a lightbulb, but for our heart rate monitor we have constantly changing values, and we don’t want to poll the current value manually every single second.

characteristic.addEventListener(
    'characteristicvaluechanged', e => {
        let r = e.target.value.getUint8(1); 
        let g = e.target.value.getUint8(2);
        let b = e.target.value.getUint8(3);
    }
);

characteristic.startNotifications();

To get a callback whenever a value changes, we have to call the addEventListener() function on the characteristic with the parameter characteristicvaluechanged and a callback function. Whenever the value changes, the callback function will be called with an event object as a parameter, and we can get the data from the value property of the target of the event. And, finally extract the individual bytes again from the DataView of the ArrayBuffer.

Because the bandwidth on the Bluetooth network is limited, we have to manually start this notification mechanism by calling startNotifications() on the characteristic. Otherwise, the network is going to be flooded by unnecessary data. Furthermore, because these devices typically use a battery, every single byte that we do not have to send will definitively improve the battery life of the device because the internal radio does not need to be turned on as often.

Conclusion

We’ve now gone over 90% of the WebBluetooth API. With just a few function calls and sending 4 bytes, you can create a web app that controls the colors of your light bulbs. If you add a few more lines, you can even control a toy car or fly a drone. With more and more Bluetooth devices making their way on to the market, the possibilities are endless.

Further Resources

Smashing Editorial (dm, ra, il)

The Essential Tools for Programmers

This is a list of essential tools and services from my coding workflow that I think should be part of every web programmer’s toolkit. Whether you a building a simple “Hello World” app or a complex web application, these tools should make your coding easier and increase productivity.

programmers-toolkit.jpg

The Web Developer’s Toolkit

1. devdocs.io — API documentation for all popular programming languages and frameworks. Includes instant search and works offline too.

2. glitch.com — create your own web apps in the browser, import GitHub repos, use any NPM package or build on any popular frameworks and directly deploy to Firebase.

3. bundlephobia.com — quickly find the import cost (download size) of any package in the NPM registry. Or upload your package.json file to scan all dependencies in your project.

4. babeljs.io/repl — Write your code in modern JavaScript and let Babel transform your code into JavaScript that is compatible with even older browsers.

5. codeply.com — quickly build frontend responsive layouts with frameworks like Bootstrap, Materialize CSS and SemanticUI.

6. httpie.org — a command-line tool that is useful for making HTTP requests to web servers and RESTful APIs. Almost as powerful as CURL and Wget but simpler.

7. regexr.com — A good tool for testing your regular expressions in the browser.

8. jex.im/regulex — Write any regular expression into the editor and get a visual representation of how the pieces work.

9. buildregex.com — Construct regular expressions visually.

Also see: The Most Useful Websites on the Internet

10. explainshell.com — Type any Unix command and get a visual explanation of each flag and argument in the command.

11. tldr.ostera.io — Unix man pages are long and complex. This site offers practical examples for all popular Unix command without you having to dive into the man pages.

12. mockaroo.com — quickly generate dummy test data in the browser in CSV, JSON, SQL and other export formats.

13. jsdelivr.com — Serve any GitHub file or WordPress plugin through a CDN. Combine multiple files in a single URL, add “.min” to any JS/CSS file to get a minified version automatically. Also see unpkg.com.

14. carbon.now.sh — create beautiful screenshots of your source code. Offers syntax highlighting for all popular languages.

15. wakatime.com — know exactly how long you spend coding with detailed metrics per file and even language. Integrates with VS Code, Sublime text, and all popular code editors.

16. astexplorer.net — paste your JavaScript code into the editor and generate the Abstract Syntax Tree that will help you understand how the JavaScript parser works.

17. hyper.is — A better alternative to the command line terminal and also iTerm. Use with the Oh My Zsh shell and add superpowers to your terminal.

18. curlbuilder.com — make your own CURL requests in the browser.

19. htaccess.madewithlove.be — easily test the redirect and rewrite rules in the .htaccess file of your Apache server. See useful .htaccess snippets.

Also see: The Best Places to Download HTML Templates

20. trackjs.com — monitor errors in your JavaScript based web projects and get instant email notifications when a new error is detected.

21. ngrok.com — Start a local web server, fire up ngrok, point to the port where the localhost is running and get a public URL of your tunnel.

22. codeshare.io — An online code editor for pair programming, live interviews with video conferences or for teaching code to students remotely.

23. webhooks.site — Easily inspect the payloads and debug HTTP webhooks in the browser. All HTTP requests are logged in real-time. Another good alternative is RequestBin.

24. surge.sh — the easiest way to deploy web pages and other static content from the command line. Supports custom domains and SSL. Also see Zeit Now.

25. visbug — A must-have add-on for web developers that brings useful web design tools right in your browser. Available for Google Chrome and Firefox.

26. puppeteersandbox.com — Puppeteer is a Node.js framework for automating Google Chrome. Use the sandbox to quickly test your scripts in the browser. Also see try-puppeteer.com.

27. prettier.io/playground — Beautify your JavaScript and TypeScript code using Prettier, the favorite code formatter of programmers.

28. json.parser.online.fr — The only JSON parser you’ll ever need to analyze and beautify your complex JSON strings.

29. scrimba.com — Create your own programming screencasts in the browser or watch other developers code.code.

30. katacoda.com — A training platform for software developers where anyone can create their own dedicated and interactive training environments.

31. codesandbox.io — A full-featured online IDE where you can create web applications in all popular languages including vanilla JavaScript, React, TypeScript, Vue and Angular. Also see StackBlitz.com and Repl.it.

32. apify.com — Write your own web scrapers using JavaScript and schedule your scrapers to run at specific intervals automatically.

33. vim-adventures.com — The Vim text editor is hugely popular among programmers. The site will help you master the various key commands through a game.

34. insomnia.rest — A desktop based REST client that lets you create HTTP requests and view response details all in a easy-to-use interface. Advanced users may consider Postman.

Also see: The Most Awesome Teachers for Learning Web Development

The post The Essential Tools for Programmers appeared first on Digital Inspiration.