If you are not sure if the website you would like to visit is secure, you can verify it here. Enter the website address of the page and see parts of its content and the thumbnail images on this site. None (if any) dangerous scripts on the referenced page will be executed. Additionally, if the selected site contains subpages, you can verify it (review) in batches containing 5 pages.
favicon.ico: markjaquith.wordpress.com - Mark on WordPress  Thoughts on.

site address: markjaquith.wordpress.com redirected to: markjaquith.wordpress.com

site title: Mark on WordPress Thoughts on WordPress

Our opinion (on Thursday 01 October 2026 1:06:55 UTC):

GREEN status (no comments) - no comments
After content analysis of this website we propose the following hashtags:


page from cache: 5 days ago
Meta tags:
description=Thoughts on WordPress;

Headings (most frequently used words):

wordpress, for, your, site, thank, you, response, on, and, to, making, scoutdocs, git, tips, of, mark, page, handling, php, plugins, using, wp, how, the, caching, solution, dev, test, uploads, lots, about, jetpack, driver, laravel, valet, links, v3, build, tools, react, lessons, learned, outsourcing, old, versions, in, plugin, updating, cli, configuring, environments, simple, deploys, fixed, yoast, seo, sitemaps, large, best, hosts, 2016, hosting, pantheon, introducing, cache, buddy, companion, ask, anything, don, use, template_redirect, load, an, alternative, template, file, posts, navigation, thoughts, credentials, production, is, choice, starter, developer, friendly, intermediate, professional, enterprise, picked, powered, deployments, command, line, deployment, live, keep, databases, fresh, no, special, config, setup, problems, sometimes, notices, cause, segfaults, have, own,

Text of the page (most frequently used words):
the (261), and (200), you (175), that (141), wordpress (135), for (115), this (111), your (102), site (74), #plugin (55), php (54), can (54), with (53), but (50), have (48), code (45), are (42), what (41), git (41), was (40), not (37), they (36), their (36), page (34), all (32), mark (31), will (31), like (30), just (30), about (29), react (29), file (28), from (28), cache (26), one (26), required (25), sites (24), use (24), plugins (24), which (24), local (24), when (23), has (23), comment (22), need (22), development (22), pantheon (22), scoutdocs (22), hosting (21), now (20), them (20), these (20), get (20), out (20), would (20), function (19), some (19), more (19), test (19), 2018 (19), using (18), into (18), time (18), _env (18), define (18), jaquith (17), work (17), config (17), live (17), name (16), custom (16), run (16), want (16), start (16), version (16), update (16), services (16), content (15), good (15), don (15), had (15), url (15), new (15), simple (15), sitemap (15), see (14), user (14), also (14), caching (14), could (14), solutions (14), things (14), make (14), dev (14), tools (14), how (14), other (13), very (13), lot (13), been (13), production (13), return (12), web (12), cookies (12), then (12), might (12), back (12), cli (12), even (12), else (11), there (11), issue (11), add (11), because (11), dynamic (11), much (11), really (11), well (11), here (11), server (11), let (11), environments (11), versions (11), com (10), doesn (10), files (10), array (10), deploy (10), hosts (10), developer (10), seo (10), 20k (10), 10k (10), components (10), email (9), should (9), public (9), logged (9), post (9), making (9), database (9), something (9), being (9), example (9), uploads (9), month (9), environment (9), www (9), host (9), needed (9), data (9), yoast (9), outsourcing (9), build (9), icon (9), component (9), website (8), view (8), load (8), its (8), than (8), sure (8), running (8), take (8), links (8), instead (8), know (8), error (8), down (8), first (8), line (8), those (8), command (8), great (8), siteground (8), many (8), project (8), xml (8), commit (8), updates (8), private (8), github (7), may (7), ask (7), still (7), people (7), way (7), available (7), before (7), every (7), done (7), set (7), static (7), seconds (7), next (7), used (7), spend (7), recommend (7), testing (7), terminus (7), option (7), commands (7), link (7), covered (7), above (7), please (7), over (7), someone (7), credentials (7), echo (7), title (7), short (7), redux (7), write (6), sign (6), create (6), posts (6), february (6), redirect (6), going (6), after (6), runs (6), made (6), main (6), output (6), little (6), speed (6), users (6), information (6), javascript (6), pages (6), experience (6), open (6), give (6), based (6), solution (6), where (6), redis (6), clear (6), bit (6), put (6), age (6), called (6), access (6), long (6), check (6), found (6), around (6), plans (6), flow (6), focuses (6), too (6), reach (6), complex (6), index (6), process (6), rewrite (6), once (6), through (6), search (6), were (6), stripe_settings (6), hidden (6), characters (6), unicode (6), june (6), task (6), learned (6), app (6), valet (6), log (5), already (5), include (5), same (5), isn (5), template_redirect (5), add_action (5), last (5), twitter (5), idea (5), varnish (5), nginx (5), buddy (5), sets (5), support (5), front (5), who (5), means (5), works (5), doing (5), following (5), between (5), keep (5), less (5), cookie (5), read (5), powerful (5), urls (5), setting (5), minutes (5), control (5), yoursite (5), env (5), tool (5), repo (5), enterprise (5), staging (5), higher (5), january (5), submit (5), description (5), select (5), budget (5), thank (5), response (5), conversation (5), specializes (5), security (5), optimization (5), customization (5), migrations (5), didn (5), sitemap_index (5), while (5), interface (5), timeout (5), wrong (5), few (5), bad (5), wp_environment (5), updated (5), list (5), passes (5), coding (5), wanted (5), series (5), sharing (5), accept (5), blog (4), older (4), easy (4), my_callback (4), problem (4), reason (4), stop (4), best (4), think (4), questions (4), super (4), total (4), 2015 (4), honestly (4), always (4), views (4), non (4), caches (4), changes (4), takes (4), five (4), times (4), longer (4), though (4), built (4), store (4), makes (4), any (4), tips (4), own (4), low (4), errors (4), likely (4), segfaults (4), does (4), isset (4), until (4), 000 (4), directory (4), day (4), right (4), each (4), http (4), home (4), false (4), two (4), rewriting (4), giving (4), remote (4), deployments (4), engine (4), pagely (4), 2016 (4), method (4), client (4), did (4), money (4), started (4), since (4), range (4), professional (4), choice (4), save (4), off (4), intermediate (4), gogeek (4), working (4), hard (4), sitemaps (4), without (4), engines (4), wait (4), settings (4), increased (4), chunks (4), mode (4), defined (4), quickly (4), txt (4), machine (4), div (4), min_version (4), bidirectional (4), learn (4), syntax (4), old (4), better (4), grunt (4), browserify (4), loading (3), manage (3), subscribe (3), account (3), 2014 (3), redirects (3), theme (3), add_filter (3), anything (3), break (3), alternative (3), template (3), hook (3), quick (3), benefits (3), batcache (3), march (3), customizations (3), commenters (3), served (3), object (3), small (3), toolbar (3), form (3), having (3), registration (3), uses (3), readable (3), years (3), configured (3), everyone (3), taking (3), traffic (3), share (3), why (3), change (3), wouldn (3), worth (3), only (3), individual (3), skip (3), layer (3), happens (3), given (3), bunch (3), mostly (3), level (3), handler (3), trouble (3), show (3), modify (3), nothing (3), reliably (3), handling (3), filesystem (3), consider (3), problems (3), site_server (3), yes (3), nice (3), getting (3), step (3), stuff (3), goes (3), latest (3), yourenv (3), deployment (3), most (3), developers (3), service (3), picks (3), went (3), affiliate (3), three (3), directly (3), whole (3), shared (3), love (3), flows (3), deploys (3), container (3), specific (3), features (3), options (3), look (3), favorite (3), customers (3), asked (3), ecosystem (3), kind (3), happy (3), everything (3), srv (3), eval (3), matter (3), needs (3), slow (3), high (3), maintenance (3), pull (3), able (3), question (3), complicated (3), result (3), commits (3), __dir__ (3), bisect (3), granularity (3), state (3), cannot (3), class (3), admin_notices (3), deactivate (3), args (3), your_plugin_requirements_check (3), installs (3), feel (3), week (3), thoughts (3), outsource (3), partners (3), spending (3), lessons (3), unit (3), rest (3), api (3), adds (3), apps (3), jsx (3), building (3), webpack (3), copy (3), menu (3), jetpack (3), driver (3), missing (3), laravel (3), comments (2), bar (2), report (2), subscribed (2), subscribers (2), template_ (2), includes (2), template_include (2), original_template (2), some_condition (2), some_path (2), lead (2), objects (2), browser (2), queried (2), note (2), mean (2), personal (2), google (2), deal (2), mail (2), decided (2), looks (2), anonymous (2), visitor (2), recreate (2), currently (2), buddypress (2), friend (2), default (2), won (2), useful (2), percentage (2), filled (2), normal (2), cached (2), magic (2), again (2), paths (2), difference (2), miss (2), hit (2), faster (2), second (2), cpu (2), eventually (2), hits (2), top (2), edit (2), feature (2), active (2), community (2), examples (2), outside (2), html (2), future (2), part (2), completely (2), flexible (2), become (2), april (2), debug (2), disable_pantheon_error_handler (2), seen (2), cause (2), hours (2), fixed (2), sometimes (2), crops (2), upload (2), help (2), lots (2), appropriate (2), db_name (2), db_user (2), db_password (2), db_host (2), auth_key (2), secure_auth_key (2), logged_in_key (2), nonce_key (2), auth_salt (2), secure_auth_salt (2), logged_in_salt (2), nonce_salt (2), remove (2), header (2), issues (2), automatically (2), cache_host (2), aren (2), documentation (2), setup (2), my_pantheon_varnish_caching (2), product (2), is_product (2), 120 (2), pantheon_varnish_max_age (2), including (2), publish (2), easily (2), clone (2), push (2), master (2), anywhere (2), deploying (2), drupal (2), marketplace (2), ability (2), multiple (2), tiers (2), cheap (2), november (2), advice (2), categories (2), offer (2), value (2), picked (2), four (2), written (2), excellent (2), plan (2), tier (2), starts (2), 100 (2), taken (2), branch (2), clients (2), awesome (2), payment (2), solid (2), free (2), advanced (2), friendly (2), perks (2), upgrade (2), company (2), choose (2), starter (2), fit (2), exhaustive (2), tell (2), distinct (2), processes (2), benefit (2), date (2), reliable (2), switch (2), location (2), xsl (2), cron (2), generation (2), bin (2), wpseo_sitemaps (2), build_root_map (2), happen (2), generated (2), meant (2), increasing (2), reasonable (2), various (2), figured (2), simply (2), fixing (2), recently (2), came (2), broken (2), breaks (2), methods (2), optional (2), hash (2), ready (2), ssh (2), tedious (2), reset (2), modifications (2), ways (2), current (2), system (2), capistrano (2), anymore (2), clifton (2), griffin (2), hey (2), markjaquith (2), stripe (2), digital (2), gateway (2), situations (2), connecting (2), prevent (2), option_gravityformsaddon_gravityformsstripe_settings (2), api_mode (2), tells (2), section (2), die (2), keeping (2), replace (2), connected (2), flywheel (2), configuring (2), field (2), within (2), broke (2), revisions (2), asking (2), whether (2), revision (2), identify (2), configure (2), hosted (2), requirements (2), raw (2), esc_html (2), wp_version_notice (2), version_compare (2), __wp_at_least (2), true (2), wp_passes (2), php_version_notice (2), __php_at_least (2), php_passes (2), your_prefix_requirements_check (2), contains (2), text (2), interpreted (2), compiled (2), differently (2), appears (2), below (2), review (2), editor (2), reveals (2), initialize (2), autoloader (2), __file__ (2), itself (2), admin (2), saying (2), minimum (2), checks (2), call (2), okay (2), writing (2), namespaces (2), gives (2), closures (2), require (2), supporting (2), increases (2), specify (2), rewrote (2), away (2), our (2), knowing (2), valuable (2), amazon (2), joy (2), maze (2), additionally (2), months (2), looked (2), ran (2), another (2), morning (2), via (2), cdn (2), individuals (2), repository (2), row (2), single (2), mistake (2), hear (2), saved (2), nested (2), refactor (2), yet (2), hate (2), functionality (2), userstatus (2), wrote (2), tried (2), tutorials (2), learning (2), feels (2), beyond (2), handles (2), order (2), continuing (2), talking (2), tweaking (2), comfortable (2), npm (2), runner (2), find (2), redirected (2), item (2), pointed (2), destination (2), fast (2), screen (2), summer (2), today (2), photon (2), myself (2), technique (2), collapse, subscriptions, reader, join, 053, navigation, effect, interfere, distinction, remember, hooked, odd, bugs, filter, exit, popular, query, instantiated, sent, somewhere, place, full, knowledge, ama, treat, searcher, grepper, topic, uniquely, qualified, address, forces, opposed, allows, depth, discussions, talk, topics, try, experiment, zach, holman, tracker, purpose, splendid, appear, reading, supported, hoping, meta, widget, commerce, cms, significant, number, massively, requests, luck, customize, cases, subscriber, contributor, anyway, authors, editors, administrators, viewers, commenter, commented, maybe, requires, signed, prompt, kicker, unknown, optimized, plus, relevant, backend, exist, solving, strip, serve, moved, techniques, calling, minimal, effort, delivered, 002, hundred, slower, connection, cycles, snowball, under, heavy, connections, during, situation, downside, alters, customized, privileges, returning, helpfully, forms, such, hold, triggered, rules, password, infrequently, commenting, smaller, dreaded, fall, generate, common, cdns, generates, later, request, cloudflare, akamai, fastcgi, transformed, crank, nature, challenge, introducing, companion, stops, bubbling, core, lies, blank, disable, causes, pantheon_environment, set_error_handler, produce, logs, tracking, causing, reproducible, weird, ticket, suggest, e_notice, notices, distributed, trivial, scale, adding, linux, containers, directories, folder, usually, partitioned, approaching, mind, count, towards, limit, 1000, splitting, strained, gotchas, hardcode, values, fill, db_port, keys, salts, variables, pretty, cool, huh, domains, leading, preg_replace, _server, http_host, wp_home, wp_siteurl, trick, play, beware, redirection, variants, massage, solidified, siteurl, boom, globals, redis_server, port, cache_port, auth, cache_password, apparently, download, special, unclear, is_user_logged_in, is_home, get_query_var, paged, elseif, function_exists, absint, max, rid, invalidating, standard, headers, obey, developing, complete, workflow, databases, fresh, blogname, usage, bitbucket, powered, entry, quite, welcome, dream, automatic, justify, expense, encourage, thought, answer, asks, regarded, fitting, considered, programs, offered, direct, earn, course, stand, recommendations, either, 2017, favorites, 2006, dedicated, targeted, focus, big, brands, folks, partner, vps, 499, neutrino, staff, retainer, got, innovative, technology, market, appreciate, dead, multidev, lets, spin, sandboxed, send, testers, isolation, merged, 2010, entirely, established, themself, guarantee, automated, migration, existing, grow, offers, unlimited, hired, she, maximum, efficiency, companies, tailored, tremendously, respected, win, retain, business, incredibly, target, picking, kinds, seasoned, frequently, choices, truly, bounty, comparison, comparisons, approach, loads, instantly, kept, background, install, separate, thanks, permanent, sitemap_n, final, path, point, created, resolving, usr, took, job, digging, determined, arbitrary, intensive, requesting, unreasonable, expect, penalize, rankings, irresponsibly, leaving, potentially, abuse, illustrates, face, accumulate, 500, enough, 300, decade, helpful, providing, priority, frustrated, confused, fine, largest, highest, table, contents, prevented, finding, large, bonus, points, roll, previous, case, type, chmod, bash, sshing, script, redirectmatch, 404, apache, htaccess, svn, deny, implement, important, ensure, leak, sensitive, depend, wipe, mistakenly, fetch, origin, fail, naughty, sync, simplest, root, checkout, massive, overkill, maintaining, clifgriffin, weeks, localdev, rely, procedures, explicit, impossible, screw, stressful, pattern, hide, analytics, downloads, protects, against, charged, transactions, purchasing, products, constant, along, calls, gitignore, file_exists, defines, opt, destroyed, his, accidentally, different, playing, tweaks, risking, breaking, mamp, pro, granular, messages, slurps, grabs, writes, steps, instance, loops, message, references, lump, eighteen, known, past, jumps, efficiently, pinpoint, caused, updater, updating, get_bloginfo, contact, phpversion, deactivate_plugins, plugin_basename, foreach, __construct, unset, classes, dirname, lib, rude, goal, move, ancient, wp_die, display, notice, met, minimums, reached, bootstrapper, initializes, compatible, careful, syntactic, goodness, typing, named, handlers, organize, simplify, array_map, traits, dereferencing, guaranteed, availability, late, binding, nowdoc, __dir, economics, force, hand, seemingly, selfish, reasons, unlearn, equivalents, branches, burden, released, year, supports, extreme, redoing, yourself, exactly, constitutes, success, delegation, sense, software, regretted, solved, slog, however, upfront, tasks, throw, gotten, figuring, realizations, sooner, waste, retained, relating, glad, experienced, singular, eternity, lost, confusing, samples, initial, spare, horrifying, realization, delayed, several, rolled, sleeves, almost, original, remained, contractors, realized, forget, quality, despite, vain, reshuffling, lacking, overall, terrible, rather, horrifyingly, admitted, wasn, looking, hiring, him, spaces, tabs, spent, nebulously, unlikely, match, assumptions, mine, odds, happened, raised, beneficial, limited, slept, hour, reviewing, direction, workday, visions, scanning, coffee, brewed, twirling, invisible, moustache, muttering, weekly, cover, stored, securely, cloud, https, global, groups, notifications, handled, delivery, recipients, decline, employees, employee, handbook, living, attachments, third, party, teaches, taught, reusable, originally, envisioned, circumstances, ugh, certainly, altogether, beforerow, onclickothericon, othericon, early, accepted, restrictive, prefix, clickable, property, passed, font, clicked, worked, onclickicon, unwieldy, frustration, converting, structure, props, forwarded, layers, wish, dave, ceddia, earlier, solves, letting, deeply, worse, events, upwards, username, profileform, profile, event, forwarding, chain, stays, tedium, pageheader, navbar, parent, downstream, renders, except, forward, children, actually, caring, themselves, inevitably, pass, explore, storing, application, commonly, creator, skipped, probably, starting, fleshed, complexity, nearly, physically, itchy, jump, gun, stuck, frustrating, toy, overwhelmed, interactive, slowly, refactoring, understood, ended, creating, lesson, felt, straightforward, weekend, incredible, momentum, behind, rich, libraries, educational, resources, plain, central, premise, controller, inextricably, linked, weirdness, quasi, fun, iteration, none, became, deliver, clean, uploading, leave, bounds, decide, strings, etc, began, tooling, becoming, listening, productivity, podcasts, productive, sucked, trap, putting, amount, pay, dividends, mistakes, often, confidence, builds, bundler, modular, gets, pulled, together, executable, bundle, deliberating, chose, avoid, haven, easier, side, scripts, involves, bizarre, wonderful, dump, middle, exquisitely, browsers, agree, containing, transpiled, regular, involve, babel, gulp, uglify, uglifyify, decisions, fierce, advocates, july, announce, soon, stay, tuned, hover, pointing, grab, chosen, visits, click, actions, clipboard, elsewhere, release, indicator, screens, items, hovered, reveal, slug, remembering, shorten, draft, allow, entire, editing, received, survey, responses, 800, interesting, cluttered, creation, specials, aspx, season, _utm_source, internal, sale, celebrate, transition, teenager, added, enhancements, pushed, repointing, tomorrow, org, 339th, 2020, normally, codebase, image, laboriously, clutter, thing, tricky, configs, couldn, routing, images, accelerator, formerly, mac, consulting, tempus, fugit, hub, online, presences, provider, publishing, platform, freelance, close, primary,


Text of the page (random words):
view the link icon means that this item has been pointed elsewhere if you want to grab the local short url which will be redirected to your chosen url when someone visits it just click copy short url from the actions and it ll be in your clipboard hover the link icon to see where it s pointing that s it for version 3 0 but i ll have more to announce soon stay tuned comment july 23 2018 mark jaquith making scoutdocs build tools continuing my series about scoutdocs and the process of building it this week i m talking about build tools what is scoutdocs scoutdocs is a wordpress plugin that adds simple file sharing to your wordpress site coding in react involves jsx a bizarre but wonderful xml syntax that you dump directly into the middle of your javascript code it feels exquisitely wrong browsers agree so your jsx containing js code will have to be transpiled to regular javascript this can involve using a complex maze of tools babel npm webpack browserify gulp grunt uglify uglifyify yes you read that right and more you have decisions to make and you will find fierce advocates for various solutions for scoutdocs i decided to go with grunt for task running because i was already comfortable with it and i needed it for grunt wp deploy use a task runner you are already comfortable with even if it is just npm scripts you re learning a lot of new things already it s okay to keep your task runner setup next i had to choose a js bundler which would let me write and use modular code that gets pulled together into a browser executable bundle after deliberating between webpack and browserify i chose browserify webpack is really complicated it is also very powerful i recommend you avoid it until you need it i haven t needed it yet and found browserify to be easier to configure and use even though it s a bit on the slow side as i was building scoutdocs and tweaking my dev tools tweaking my grunt file and writing code to search replace strings etc i began to feel like the time i was spending too much time on tooling was i becoming one of those people who spend all their time listening to productivity podcasts instead of being productive i can see how someone could get sucked into that trap but putting a reasonable amount of time into configuring your development tools can pay dividends for you beyond simply the time saved it can also prevent mistakes keep you in coding mode more often and increasing your confidence in your code builds spend the time up front to make your tools work for you other posts in this series outsourcing react wordpress rest api php 7 build tools unit testing comment june 19 2018 june 11 2018 mark jaquith making scoutdocs react continuing my series about scoutdocs and the process of building it this week i m talking about react what is scoutdocs scoutdocs is a wordpress plugin that adds simple file sharing to your wordpress site after the first iteration of scoutdocs was built and none of the partners on the project were happy with its experience it became clear that in order to deliver a clean simple interface for file uploading and sharing we needed to leave the bounds of the wordpress admin it didn t take me long to decide that react would be the tool i used to build the new interface there is an incredible momentum behind react and a rich ecosystem of libraries tools and educational resources but beyond all that react is just plain fun to code once you accept the central premise that a view layer and the controller that handles that view are inextricably linked and once you get over the weirdness of quasi html in js that is jsx coding in react is a joy make no mistake learning react is not a weekend project it will take a while before it feels like home but once you get it you feel very powerful the first lesson i learned was don t learn react by rewriting your app in react i tried this i read some tutorials about react and it felt straightforward and i was like let s do this this was a bad idea i was overwhelmed i had no idea where to start next i tried following some of the interactive tutorials that required me to build a simple react app and then slowly add functionality to it refactoring it multiple times until i understood not just the code that i ended up with but the process of creating it this went much better start small and build a bunch of toy apps before you use react for your own apps once you are able to think in react you ll be nearly physically itchy to go re code your app in react and that s how you know you re ready if you jump the gun you are going to get stuck a lot and it will be frustrating as you learn react and explore the react ecosystem you will likely hear about redux which is a system for storing application state and is commonly used with react apps it looked complicated and even its creator wrote a post saying you might not need redux so i skipped it this was probably the right call when i was starting out but as i fleshed out the scoutdocs app and its complexity increased i ran into a problem see react breaks your app up into these nested chunks of ui and functionality called components data flows down through your components so if a user updates their name that change will flow down from higher up components like a page component down to a pageheader down to a navbar down to a userstatus once this is all set up and you update data in a parent component the changes automatically flow downstream and the userstatus component updates and re renders it s great except that there are a bunch of intermediate components that accept and forward that user name data to their children without actually caring about it themselves when you inevitably refactor something and need to add new data that flows through these components every single intermediate one needs to be updated to pass it on it is tedious you will hate it worse because events in react flow upwards if a user updates their name in the username component that change needs to flow up to profileform up to profile up to page and then up to your main app component when you refactor you need to make sure this event forwarding chain stays connected yet more tedium that you will hate redux solves this by letting your react components no matter how deeply they are nested subscribe directly to the data they need i really wish dave ceddia had written this excellent post about redux two months earlier if you have a component structure like the one above where props are being forwarded down through many layers consider using redux this is what i needed to hear and knowing this would have saved me a lot of frustration and time that i now have to spend converting scoutdocs to use redux use redux when your react data flow starts to get unwieldy another mistake i made early on was making the data my react components accepted too restrictive for example i wanted the ability to prefix a row component with a clickable icon so i let the component accept an icon and onclickicon property i just passed a font awesome icon name in and a function i wanted to run when clicked it worked great then i needed to add a second icon in front in some circumstances ugh i certainly didn t want to do othericon and onclickothericon instead what i should have done was let the component accept beforerow which could be anything like an array of icon components or a single one or even other components altogether this can be used for many more situations than the one put an icon before the row that i d originally envisioned your react components should be flexible so they can be reusable other posts in this series outsourcing react wordpress rest api php 7 build tools unit testing comment june 11 2018 june 11 2018 mark jaquith lessons learned making scoutdocs outsourcing now that scoutdocs is in the wordpress plugin repository i d like to share some lessons i learned making it every project teaches me something this one taught me a lot what is scoutdocs scoutdocs is a wordpress plugin that adds simple file sharing to your wordpress site you can upload files which are stored securely in the cloud and served over https via a global cdn and share them with individuals or groups of individuals email notifications are also handled by the scoutdocs service getting around the issue of reliable email delivery on a shared host you can require that recipients accept or decline the files you ve shared e g so you can see which of your employees has seen the new employee handbook instead of files living as email attachments if they even fit or off on some third party site people can access them on your site in this weekly series i m going to cover outsourcing react wordpress rest api php 7 build tools unit testing first up lessons learned about outsourcing when we started making scoutdocs the question was raised as to whether it would be beneficial to outsource any of the coding my time was valuable and limited so i figured that if i had another developer code while i slept i could spend an hour in the morning reviewing the code and giving them direction for the next workday i had visions of quickly scanning code while my morning coffee brewed twirling an invisible moustache and muttering good good this is not what happened the issue i quickly ran into was that for any nebulously defined problem someone else s solution was unlikely to match what i wanted their assumptions would not be the same as mine as a result the odds of me being happy with their solution were very low i spent a lot of time rewriting code i m not hiring him he uses spaces not tabs stop everything and because i was spending all my time fixing the code i wasn t really looking at the product as a whole when the contractors were done my scoutdocs partners and i looked at it and we realized that it was bad forget code quality which despite all my vain reshuffling was still lacking what we had was just overall a terrible user experience rather horrifyingly we admitted that what we needed to do to give it the user experience we wanted was nothing short of a total rewrite i rolled up my sleeves learned react and rewrote scoutdocs until almost nothing of the original code and user experience remained so was outsourcing a waste not completely some code was retained mostly relating to the amazon s3 interface i was glad that someone else had experienced the singular joy of spending an eternity lost in a maze of amazon web services documentation and confusing code samples additionally if i had set out to build the initial version of the code it would have taken a lot of my time which i did not have much to spare and might have meant that our horrifying realization would have been delayed for several months knowing what doesn t work is valuable even if you have to throw it away that s mostly what we had gotten for our money figuring out what didn t work if outsourcing can get you to these realizations sooner or for less money it might be well worth it as i rewrote the software my partners asked me a few times if i regretted outsourcing i didn t for the above reason but also because outsourcing had solved some of the coding issues that would have been a slog for me however if i was doing it all over again i would have done more work upfront to identify specific well defined tasks that i wanted to outsource delegation makes sense when the task is well defined at the extreme you could spend so much time redoing work and asking for revisions that you d have been better off just doing it yourself if you can specify exactly what constitutes success in a task and the time it takes you to specify that is much less than the time it would take you to do the task outsource it check back next week for my thoughts on rewriting scoutdocs in react comment june 1 2018 june 11 2018 mark jaquith handling old wordpress and php versions in your plugin new versions of wordpress are released about three times a year and wordpress itself supports php versions all the way back to 5 2 4 what does this mean for you as a plugin developer honestly many plugin developers spend too much time supporting old versions of wordpress and really old versions of php it doesn t have to be this way you don t need to support every version of wordpress and you don t have to support every version of php feel free to do this for seemingly selfish reasons supporting old versions is hard you have to unlearn new wordpress and php features and use their older equivalents or even have code branches that do version feature checks it increases your development and testing time it increases your support burden economics might force your hand here a bit you can t very well even in 2018 require that everyone be running php 7 1 and the latest version of wordpress but consider the following 97 of wordpress installs are running php 5 3 or higher this gives you namespaces late static binding closures nowdoc __dir __ and more 88 of wordpress installs are running php 5 4 or higher this gives you short array syntax traits function array dereferencing guaranteed echo syntax availability this access in closures and more you get even more things with php 5 5 and 5 6 64 of installs are running 5 6 or higher but a lot of the syntactic goodness came in 5 3 and 5 4 with very few people running versions less than 5 4 so stop typing array stop writing named function handlers for simple array_map uses and start using namespaces to organize and simplify your code okay so how i recommend that your main plugin file just be a simple bootstrapper where you define your autoloader do a few checks and then call a method that initializes your plugin code i also recommend that this main plugin file be php 5 2 compatible this should be easy to do just be careful not to use __dir__ in this file you should check the minimum php and wordpress versions that you are going to support and if the minimums are not reached have the plugin not initialize you don t want syntax errors display an admin notice saying which minimum version was not met deactivate itself optional do not die or wp_die that s rude and a bad user experience your goal here is for them to update wordpress or ask their host to move them off an ancient version of php so be kind here is what i use view code on github this file contains hidden or bidirectional unicode text that may be interpreted or compiled differently than what appears below to review open the file in an editor that reveals hidden unicode characters learn more about bidirectional unicode characters show hidden characters php plugin name your plugin name include dirname __file__ lib requirements check php your_plugin_requirements_check new your_prefix_requirements_check array title your plugin name php 5 4 wp 4 8 file __file__ if your_plugin_requirements_check passes 1 load classes or define an autoloader 2 initialize your plugin unset your_plugin_requirements_check view raw plugin php hosted with by github this file contains hidden or bidirectional unicode text that may be ...
Images from subpage: "markjaquith.wordpress.com/2018/02/05/tips-for-configuring-wo... " Verify
Images from subpage: "markjaquith.wordpress.com/tag/development/" Verify
Images from subpage: "markjaquith.wordpress.com/tag/environments/" Verify
Images from subpage: "markjaquith.wordpress.com/tag/localdev/" Verify
Images from subpage: "markjaquith.wordpress.com/2018/01/22/how-i-fixed-yoast-seo-s... " Verify

Verified site has: 46 subpage(s). Do you want to verify them? Verify pages:

1-5 6-10 11-15 16-20 21-25 26-30 31-35 36-40 41-45 46-46


The site also has references to the 2 subdomain(s)

  wordpress.com  Verify   subscribe.wordpress.com  Verify


Top 50 hastags from of all verified websites.

Supplementary Information (add-on for SEO geeks)*- See more on header.verify-www.com

Header

HTTP/1.1 301 Moved Permanently
Server nginx
Date Fri, 21 Aug 2026 02:41:19 GMT
Content-Type text/html
Content-Length 162
Connection keep-alive
Location htt????/markjaquith.wordpress.com/
Alt-Svc clear
Server-Timing a8c-cdn, dc;desc=cdg, cache;desc=BYPASS;dur=1.0
HTTP/2 200
server nginx
date Fri, 21 Aug 2026 02:41:19 GMT
content-type text/html; charset=UTF-8
vary Accept-Encoding
last-modified Thu, 20 Aug 2026 06:35:23 GMT
cache-control max-age=141, must-revalidate
x-nananana Batcache-Hit
x-hacker Want root? Visit join.a8c.com/hacker and mention this header.
host-header WordPress.com
link <htt????/public-api.wordpress.com/wp-json/?rest_route=/sites/markjaquith.wordpress.com>; rel= htt????/api.w.org/
link <htt????/wp.me/56>; rel=shortlink
vary accept, content-type, cookie
content-encoding gzip
x-ac 5.ams _dfw STALE
alt-svc clear
strict-transport-security max-age=31536000
server-timing a8c-cdn, dc;desc=ams, cache;desc=STALE;dur=2.0

Meta Tags

title="Mark on WordPress Thoughts on WordPress"
charset="UTF-8"
name="viewport" content="width=device-width, initial-scale=1"
name="robots" content="max-image-preview:large"
name="generator" content="WordPress.com"
property="og:type" content="website"
property="og:title" content="Mark on WordPress"
property="og:description" content="Thoughts on WordPress"
property="og:url" content="htt????/markjaquith.wordpress.com/"
property="og:site_name" content="Mark on WordPress"
property="og:image" content="htt????/markjaquith.wordpress.com/wp-content/uploads/2018/02/cropped-headshot13.jpg?w=200"
property="og:image:width" content="200"
property="og:image:height" content="200"
property="og:image:alt" content=""
property="og:locale" content="en_US"
property="fb:app_id" content="249643311490"
name="twitter:creator" content="@markjaquith"
name="twitter:site" content="@markjaquith"
name="description" content="Thoughts on WordPress"
name="msapplication-TileImage" content="htt????/markjaquith.wordpress.com/wp-content/uploads/2018/02/cropped-headshot13.jpg?w=270"
itemprop="width" content="596"
itemprop="height" content="333"
itemprop="width" content="596"
itemprop="height" content="333"
id="bilmur" property="bilmur:data" content="" data-provider="wordpress.com" data-service="simple" data-site-tz="America/New_York" data-custom-props='{"enq_jquery":"1","logged_in":"0","wptheme":"pub\/isola","wptheme_is_block":"0"}'

Load Info

page size321636
load time (s)0.059811
redirect count1
speed download1134932
server IP 192.0.78.12
* all occurrences of the string "http://" have been changed to "htt???/"