{
    "version": "https://jsonfeed.org/version/1",
    "user_comment": "This feed allows you to read the posts from this site in any feed reader that supports the JSON Feed format. To add this feed to your reader, copy the following URL -- https://wp-devil.com/category/development/feed/json/ -- and add it your reader.",
    "home_page_url": "https://wp-devil.com/category/development/",
    "feed_url": "https://wp-devil.com/category/development/feed/json/",
    "title": "WP Devil",
    "description": "WordPress, ClassicPress, Music and Geekdom",
    "items": [
        {
            "id": "https://wp-devil.com/classicpress-v2-becoming-reality/",
            "url": "https://wp-devil.com/classicpress-v2-becoming-reality/",
            "title": "ClassicPress v2 becoming reality",
            "content_html": "<p>The refork of WordPress, that was decided in late 2022, which is going to be ClassicPress v2.0, is happening right now. Its based on WP 6.2 and does not contain Gutenborg (ie. the Block Editor), but compatiblity layers for allowing &#8220;regular&#8221; block-focused plugins to continue working. So CP 1.6 is supposed to be <a href=\"https://www.classicpress.net/classicpress-v1-6-0-is-out/\">the last version based on WP 4.9</a>.</p>\n<p>I&#8217;m going to test <a href=\"https://www.classicpress.net/help-test-classicpress-v2/\">the current alpha / nightly release of CP v2.0</a> soonish under a separate subdomain. It should allow for using newer WooCommerce versions, which in turn would enable me to do a &#8220;proper&#8221; fork of WooCommerce with most things up-to-date and working, instead of having to rely on WC 3.9.x and a lot of backporting / rearranging. </p>\n<p>&#8220;Soonish&#8221;, because these days, I&#8217;m quite busy with work and cannot exactly say when I&#8217;m going to have some spare time left to do a proper installation. Proper installation includes the complete data of THIS blog, with a potentially updated / enhanced theme (I&#8217;d love to switch this one over to the amalgam of Bootstrap 4 and 5 I&#8217;ve been using for client projects lately), and all the plugins that mostly stopped working.<br>\nI&#8217;d also like to test if WP Super Cache works again with CP 2, or if I still need to do a soft-fork. From what I could see from comparision of commits is: The incompatiblity is non-existent, its a decision made by the developers, changing the &#8220;Compatiblity&#8221; setting in the plugin identification block to &#8220;at least 5.x&#8221;, but the plugin by itself works perfectly well even in WP 4.9.x and CP v1.x, as soon as one changes the resp. line to &#8220;4.9&#8221;.</p>\n",
            "content_text": "The refork of WordPress, that was decided in late 2022, which is going to be ClassicPress v2.0, is happening right now. Its based on WP 6.2 and does not contain Gutenborg (ie. the Block Editor), but compatiblity layers for allowing &#8220;regular&#8221; block-focused plugins to continue working. So CP 1.6 is supposed to be the last version based on WP 4.9.\nI&#8217;m going to test the current alpha / nightly release of CP v2.0 soonish under a separate subdomain. It should allow for using newer WooCommerce versions, which in turn would enable me to do a &#8220;proper&#8221; fork of WooCommerce with most things up-to-date and working, instead of having to rely on WC 3.9.x and a lot of backporting / rearranging. \n&#8220;Soonish&#8221;, because these days, I&#8217;m quite busy with work and cannot exactly say when I&#8217;m going to have some spare time left to do a proper installation. Proper installation includes the complete data of THIS blog, with a potentially updated / enhanced theme (I&#8217;d love to switch this one over to the amalgam of Bootstrap 4 and 5 I&#8217;ve been using for client projects lately), and all the plugins that mostly stopped working.\nI&#8217;d also like to test if WP Super Cache works again with CP 2, or if I still need to do a soft-fork. From what I could see from comparision of commits is: The incompatiblity is non-existent, its a decision made by the developers, changing the &#8220;Compatiblity&#8221; setting in the plugin identification block to &#8220;at least 5.x&#8221;, but the plugin by itself works perfectly well even in WP 4.9.x and CP v1.x, as soon as one changes the resp. line to &#8220;4.9&#8221;.",
            "date_published": "2023-07-18T01:10:14+02:00",
            "date_modified": "2023-07-18T01:11:38+02:00",
            "author": {
                "name": "fwolf",
                "url": "https://wp-devil.com/author/fwolf/",
                "avatar": "https://secure.gravatar.com/avatar/c2a31599f60eec1232806bfc26066ed2?s=512&d=mm&r=g"
            },
            "image": "https://wp-devil.com/wp-content/uploads/2021/10/3wzkmfh8zse.jpg",
            "tags": [
                "ClassicPress",
                "development",
                "wordpress",
                "Work vs. Life"
            ]
        },
        {
            "id": "https://wp-devil.com/i18n-changes-to-the-site/",
            "url": "https://wp-devil.com/i18n-changes-to-the-site/",
            "title": "i18n changes to the site",
            "content_html": "<p>So I finally decided to disable Bogo, which has been a shoddy solution from the very start. But now its a shoddy solution only supporting the other shoddy, WP-6-only solution, ie. Gutenborg. Tried a few workarounds, but in the end, its wasted time and efforts to get this shoddy piece really working.</p>\n<p>Hence I&#8217;m probablly going the dirty&#8217;n&#8217;hard way, as in: its not quick, but its gonna work somehow: Use meta fields to assign language, add fancy stuff to the theme to indicate the language of the current post or page, connect posts and pages using meta fields, and so on. Maybe also add a simple translation / i18n shortcode for quick inline sections, and a simplified language switcher to the sidebar / navigation.</p>\n<p>Maybe release a simple tutorial + micro plugin, too. All to be seen in the nearby future.</p>\n",
            "content_text": "So I finally decided to disable Bogo, which has been a shoddy solution from the very start. But now its a shoddy solution only supporting the other shoddy, WP-6-only solution, ie. Gutenborg. Tried a few workarounds, but in the end, its wasted time and efforts to get this shoddy piece really working.\nHence I&#8217;m probablly going the dirty&#8217;n&#8217;hard way, as in: its not quick, but its gonna work somehow: Use meta fields to assign language, add fancy stuff to the theme to indicate the language of the current post or page, connect posts and pages using meta fields, and so on. Maybe also add a simple translation / i18n shortcode for quick inline sections, and a simplified language switcher to the sidebar / navigation.\nMaybe release a simple tutorial + micro plugin, too. All to be seen in the nearby future.",
            "date_published": "2023-05-12T04:29:05+02:00",
            "date_modified": "2023-05-12T04:29:05+02:00",
            "author": {
                "name": "fwolf",
                "url": "https://wp-devil.com/author/fwolf/",
                "avatar": "https://secure.gravatar.com/avatar/c2a31599f60eec1232806bfc26066ed2?s=512&d=mm&r=g"
            },
            "image": "https://wp-devil.com/wp-content/uploads/2021/06/ukzhlkoz1ie.jpg",
            "tags": [
                "ClassicPress",
                "development",
                "Life and let die",
                "wordpress"
            ]
        },
        {
            "id": "https://wp-devil.com/micro-plugin-mastodon-profile-verification-link/",
            "url": "https://wp-devil.com/micro-plugin-mastodon-profile-verification-link/",
            "title": "Micro-Plugin: Mastodon Profile Verification Link",
            "content_html": "<p>Just finished building a quick micro plugin for ClassicPress and WordPress, which allows you to add a verification link pointing back to your mastodon profile.<br>\nBut not to just one, but to ALL your potential profiles (eg. I got two: one for my main stuff, and the other is for DJing + artsy fartsy).</p>\n<p>Lazy being that I am, the settings are being displayed under Settings > Discussion => &#8220;Mastodon Profile URL(s)&#8221;. One profile URL per line.</p>\n<p>Tested with ClassicPress 1.4. Released under the GNU GPL v2.<br>\nGet it yourself from the gist / source code. drop it in your plugin directory (preferable in its own sub-directory), activate, et voila!</p>\n<p>View the code on <a href=\"https://gist.github.com/ginsterbusch/ce9497e4e1c416dc7e0b49e767a994b1\">Gist</a>.</p>\n",
            "content_text": "Just finished building a quick micro plugin for ClassicPress and WordPress, which allows you to add a verification link pointing back to your mastodon profile.\nBut not to just one, but to ALL your potential profiles (eg. I got two: one for my main stuff, and the other is for DJing + artsy fartsy).\nLazy being that I am, the settings are being displayed under Settings > Discussion => &#8220;Mastodon Profile URL(s)&#8221;. One profile URL per line.\nTested with ClassicPress 1.4. Released under the GNU GPL v2.\nGet it yourself from the gist / source code. drop it in your plugin directory (preferable in its own sub-directory), activate, et voila!\nView the code on Gist.",
            "date_published": "2022-11-07T07:10:33+01:00",
            "date_modified": "2022-11-07T07:29:03+01:00",
            "author": {
                "name": "fwolf",
                "url": "https://wp-devil.com/author/fwolf/",
                "avatar": "https://secure.gravatar.com/avatar/c2a31599f60eec1232806bfc26066ed2?s=512&d=mm&r=g"
            },
            "image": "https://wp-devil.com/wp-content/uploads/2021/06/jdgtvgzqmgq.jpg",
            "tags": [
                "ClassicPress",
                "development",
                "mastodon",
                "wordpress"
            ]
        },
        {
            "id": "https://wp-devil.com/how-to-change-the-admin-page-title-to-something-useful/",
            "url": "https://wp-devil.com/how-to-change-the-admin-page-title-to-something-useful/",
            "title": "How to change the admin page title to something useful",
            "content_html": "<p>Fix the HTML title of the post editor in the WordPress admin to something much more useful.<br>\nVery helpful when editing multiple posts, but also, when changing lots of images (eg. post thumbnail or product gallery etc.).</p>\n<p>View the code on <a href=\"https://gist.github.com/ginsterbusch/3c18f6863c070a2e35148ef8f1e66911\">Gist</a>.</p>\n",
            "content_text": "Fix the HTML title of the post editor in the WordPress admin to something much more useful.\nVery helpful when editing multiple posts, but also, when changing lots of images (eg. post thumbnail or product gallery etc.).\nView the code on Gist.",
            "date_published": "2022-08-15T15:40:06+02:00",
            "date_modified": "2022-09-27T11:53:31+02:00",
            "author": {
                "name": "fwolf",
                "url": "https://wp-devil.com/author/fwolf/",
                "avatar": "https://secure.gravatar.com/avatar/c2a31599f60eec1232806bfc26066ed2?s=512&d=mm&r=g"
            },
            "image": "https://wp-devil.com/wp-content/uploads/2022/06/c2zhshtnl5i.jpg",
            "tags": [
                "development",
                "wordpress"
            ]
        },
        {
            "id": "https://wp-devil.com/web-performance-optimization-in-a-nutshell/",
            "url": "https://wp-devil.com/web-performance-optimization-in-a-nutshell/",
            "title": "Web Performance Optimization in a nutshell",
            "content_html": "<p>After doing this for over 20+ years, and having seen a lot of fancy stuff come and go, my game in optimizing load times and rendering speed hasnt change that much.</p>\n<p>If I was asked for the main contenders for improving loading times, in 2022, it still boils down primarly to the following ones:</p>\n<ol>\n<li>Images &#8211; too big in both dimension and file size, but also using the wrong file format (eg. PNG instead of JPEG for photos)</li>\n<li>Render-blocking scripts / CSS / embeds</li>\n<li>(No) Caching policy &#8211; whether that just means caching rules or actual pre-caching, eg. static HTML</li>\n<li>Requests &#8211; numbers of overall resource requests of the page</li>\n</ol>\n<p>Other common factors nowadays:</p>\n<ul>\n<li>CDN &#8211; not using one, or not properly using it (also related with bad or missing caching policy)</li>\n<li>Massive HTML DOM structures &#8211; take much longer to parse and render; known also under the moniker &#8220;divitis&#8221; or just &#8220;HTML tag orgy&#8221;</li>\n<li>Media Queries &#8211; improper use of such, eg. missing, badly set breakpoints or missing optimization of the whole site towards these breakpoints</li>\n<li>Lazy-loading / picture / srcset &#8211; not using those techniques, but also not knowinng how to properly apply them; eg. lazy-loading can be used for ALL sources, not just images</li>\n<li>Icon fonts / Data URL &#8211; if you use an icon or small image everywhere across your site, why not instead rely on either icon fonts, which already supply these, and are loaded only once, or data URLs, which help in similar ways, if the image in question is on the smaller side (file size)?</li>\n</ul>\n<p>This is just a quick notice &#8211; for now. I&#8217;m going to add detailed articles to several topics when I get some time to spare, and link to them from here, as soon as they are up \ud83d\ude42</p>\n",
            "content_text": "After doing this for over 20+ years, and having seen a lot of fancy stuff come and go, my game in optimizing load times and rendering speed hasnt change that much.\nIf I was asked for the main contenders for improving loading times, in 2022, it still boils down primarly to the following ones:\n\nImages &#8211; too big in both dimension and file size, but also using the wrong file format (eg. PNG instead of JPEG for photos)\nRender-blocking scripts / CSS / embeds\n(No) Caching policy &#8211; whether that just means caching rules or actual pre-caching, eg. static HTML\nRequests &#8211; numbers of overall resource requests of the page\n\nOther common factors nowadays:\n\nCDN &#8211; not using one, or not properly using it (also related with bad or missing caching policy)\nMassive HTML DOM structures &#8211; take much longer to parse and render; known also under the moniker &#8220;divitis&#8221; or just &#8220;HTML tag orgy&#8221;\nMedia Queries &#8211; improper use of such, eg. missing, badly set breakpoints or missing optimization of the whole site towards these breakpoints\nLazy-loading / picture / srcset &#8211; not using those techniques, but also not knowinng how to properly apply them; eg. lazy-loading can be used for ALL sources, not just images\nIcon fonts / Data URL &#8211; if you use an icon or small image everywhere across your site, why not instead rely on either icon fonts, which already supply these, and are loaded only once, or data URLs, which help in similar ways, if the image in question is on the smaller side (file size)?\n\nThis is just a quick notice &#8211; for now. I&#8217;m going to add detailed articles to several topics when I get some time to spare, and link to them from here, as soon as they are up \ud83d\ude42",
            "date_published": "2022-06-09T21:58:00+02:00",
            "date_modified": "2022-06-09T21:58:00+02:00",
            "author": {
                "name": "fwolf",
                "url": "https://wp-devil.com/author/fwolf/",
                "avatar": "https://secure.gravatar.com/avatar/c2a31599f60eec1232806bfc26066ed2?s=512&d=mm&r=g"
            },
            "image": "https://wp-devil.com/wp-content/uploads/2022/06/gt3rjumq2zm.jpg",
            "tags": [
                "loading speed",
                "loading times",
                "web performance",
                "development",
                "Webdesign",
                "Work"
            ]
        },
        {
            "id": "https://wp-devil.com/woocommerce-setting-a-specific-stock-number-for-all-products-but-a-selected-few/",
            "url": "https://wp-devil.com/woocommerce-setting-a-specific-stock-number-for-all-products-but-a-selected-few/",
            "title": "WooCommerce: Setting a specific stock number for all products but a selected few?",
            "content_html": "<p>Client wanted to have inventory management, but the items are all produced on-demand &#8211; except for unique specimens, which are either custom-made pieces which have been returned, or have been produced as a side or test run.</p>\n<p>So, we decided to enable inventory management, and set the stock number for all items in any category BUT the &#8220;Einzelst\u00fccke&#8221; (singular pieces) to 999, and items in that specific category to 1.</p>\n<p>There certainly are plugins and a few screencasts / tutorials how to do achieve this, but the crafty developer who&#8217;s at least a bit versed with SQL might just prefer the following approach:</p>\n<ol>\n<li>Before-hand: <code>_stock</code> is the meta field used for inventory management by WooCommerce.</li>\n<li>SQL command:\n<pre>UPDATE {prefix}postmeta SET meta_value = '999' WHERE meta_key = 'stock'</pre>\n<p> solves the issue with pre-existing products</li>\n<li>The following SQL subquery should solve any issues with (public) products which have not yet set a fixed stock value:\n<pre>UPDATE {prefix}postmeta SET meta_value = '999' WHERE meta_key = 'stock' AND post_id IN (SELECT ID FROM {prefix}posts WHERE product_type = 'product' AND post_status = 'publish')</pre>\n</li>\n<li>Head over into the WP admin area, to the product overview, filter by the specific category, and then select all the products that should have a specific different amount</li>\n<li>Select &#8220;Edit&#8221; from the action menu and click the &#8220;Apply&#8221; button</li>\n<li>This should display an edit form to mass-edit all selected products</li>\n<li>Now select &#8220;Stock qty&#8221;, select &#8220;Change to:&#8221; and then enter the desired different number (in our case: 1)</li>\n<li>Apply the changes with clicking on the &#8220;Update&#8221; button</li>\n<li>et voila! Done \ud83d\ude09</li>\n</ol>\n",
            "content_text": "Client wanted to have inventory management, but the items are all produced on-demand &#8211; except for unique specimens, which are either custom-made pieces which have been returned, or have been produced as a side or test run.\nSo, we decided to enable inventory management, and set the stock number for all items in any category BUT the &#8220;Einzelst\u00fccke&#8221; (singular pieces) to 999, and items in that specific category to 1.\nThere certainly are plugins and a few screencasts / tutorials how to do achieve this, but the crafty developer who&#8217;s at least a bit versed with SQL might just prefer the following approach:\n\nBefore-hand: _stock is the meta field used for inventory management by WooCommerce.\nSQL command:\nUPDATE {prefix}postmeta SET meta_value = '999' WHERE meta_key = 'stock'\n solves the issue with pre-existing products\nThe following SQL subquery should solve any issues with (public) products which have not yet set a fixed stock value:\nUPDATE {prefix}postmeta SET meta_value = '999' WHERE meta_key = 'stock' AND post_id IN (SELECT ID FROM {prefix}posts WHERE product_type = 'product' AND post_status = 'publish')\n\nHead over into the WP admin area, to the product overview, filter by the specific category, and then select all the products that should have a specific different amount\nSelect &#8220;Edit&#8221; from the action menu and click the &#8220;Apply&#8221; button\nThis should display an edit form to mass-edit all selected products\nNow select &#8220;Stock qty&#8221;, select &#8220;Change to:&#8221; and then enter the desired different number (in our case: 1)\nApply the changes with clicking on the &#8220;Update&#8221; button\net voila! Done \ud83d\ude09",
            "date_published": "2022-05-19T19:09:26+02:00",
            "date_modified": "2022-05-19T19:11:53+02:00",
            "author": {
                "name": "fwolf",
                "url": "https://wp-devil.com/author/fwolf/",
                "avatar": "https://secure.gravatar.com/avatar/c2a31599f60eec1232806bfc26066ed2?s=512&d=mm&r=g"
            },
            "image": "https://wp-devil.com/wp-content/uploads/2022/05/vh-opmrhfii.jpg",
            "tags": [
                "development",
                "WooCommerce",
                "wordpress"
            ]
        },
        {
            "id": "https://wp-devil.com/new-show-code-of-dark-joy/",
            "url": "https://wp-devil.com/new-show-code-of-dark-joy/",
            "title": "New show: Code of Dark Joy",
            "content_html": "<p>Tomorrow, ie. Thursday, 18th of March, 2021, I gonna start the first test run of my new show called <strong>Code of Dark Joy</strong>, which is specifically aimed towards <strong>live coding</strong>. It&#8217;s still gonna contain the element of music, as a lot of it focused on the topics of building up your OBS interface and its related periphery, for streaming Music on Twitch, YouTube and other live video platforms.</p>\n<p>For starters, I&#8217;ve planned to work on the overall interface of the new show, maybe get the cover &#8220;flow&#8221; / display I have been pondering about started, do a quick &#8220;ask me anything&#8221; Q &amp; A, and spin some nice dark music (whatever rocks my boat, but yes, also taking requests) \ud83d\ude42</p>\n<p>At the end, I&#8217;m going to raid over to <a href=\"https://twitch.tv/hatemior\">DJ Hatemiors &quot;Day Drunk&quot;</a>, which starts at 17:00 UTC+0 / 18:00 CET.</p>\n<p>If everything works out nicely, I intend to turn this into a weekly occurance, although I cannot promise that its always going to happen on a Thursday.</p>\n<p>Twitch Channel: <a href=\"https://twitch.tv/gothicforesttroll\">https://twitch.tv/gothicforesttroll</a><br>\nTips &amp; Donations: <a href=\"https://gothicforesttroll.org/donations\">https://gothicforesttroll.org/donations</a><br>\nFB Event: <a href=\"https://fb.me/e/y5Zj30aa\">https://fb.me/e/y5Zj30aa</a></p>\n",
            "content_text": "Tomorrow, ie. Thursday, 18th of March, 2021, I gonna start the first test run of my new show called Code of Dark Joy, which is specifically aimed towards live coding. It&#8217;s still gonna contain the element of music, as a lot of it focused on the topics of building up your OBS interface and its related periphery, for streaming Music on Twitch, YouTube and other live video platforms.\nFor starters, I&#8217;ve planned to work on the overall interface of the new show, maybe get the cover &#8220;flow&#8221; / display I have been pondering about started, do a quick &#8220;ask me anything&#8221; Q &amp; A, and spin some nice dark music (whatever rocks my boat, but yes, also taking requests) \ud83d\ude42\nAt the end, I&#8217;m going to raid over to DJ Hatemiors &quot;Day Drunk&quot;, which starts at 17:00 UTC+0 / 18:00 CET.\nIf everything works out nicely, I intend to turn this into a weekly occurance, although I cannot promise that its always going to happen on a Thursday.\nTwitch Channel: https://twitch.tv/gothicforesttroll\nTips &amp; Donations: https://gothicforesttroll.org/donations\nFB Event: https://fb.me/e/y5Zj30aa",
            "date_published": "2021-03-18T00:54:34+01:00",
            "date_modified": "2021-03-18T07:20:30+01:00",
            "author": {
                "name": "fwolf",
                "url": "https://wp-devil.com/author/fwolf/",
                "avatar": "https://secure.gravatar.com/avatar/c2a31599f60eec1232806bfc26066ed2?s=512&d=mm&r=g"
            },
            "image": "https://wp-devil.com/wp-content/uploads/2021/03/dark-joy-music-edition_desktop02-fs8.png",
            "tags": [
                "dark music",
                "ebm",
                "electropunk",
                "gothic",
                "live coding",
                "streaming",
                "ClassicPress",
                "development",
                "Life and let die",
                "Live broadcasting",
                "Musick",
                "wordpress"
            ]
        },
        {
            "id": "https://wp-devil.com/master-of-the-home-office-tools-of-trade/",
            "url": "https://wp-devil.com/master-of-the-home-office-tools-of-trade/",
            "title": "Master of the Home Office: Tools of Trade",
            "content_html": "<p>As a matter of fact, I&#8217;ve been working from home for over 12 years by now. Thus, looking at all the panic and craze of the rest of the world with &#8220;we have to go into home office&#8221; kinda makes me both annoyed and amuzed: So you want to reinvent the wheel, kids? \ud83d\ude00</p>\n<p>Before getting to my current list of my &#8220;tools of trade&#8221;, I&#8217;ve got to point out: My focus is on usability and form follows function, not &#8220;looks fancy, works crappy&#8221;. Also, collaboration tools have to GET THE JOB DONE. No long fumbling around, explaining how they are supposed to work, etc. pp. That means, no fancy bullshit project management tools either. The KISS principle. Nuff said. On to the list:</p>\n<ul>\n<li><a href=\"https://trello.com/\">Trello</a> &#8211; for task and team coordination, in the kanban way; I&#8217;m using it for more complex projects, and also whenever I&#8217;m supposed to work together with one or more person</li>\n<li>Telegram / Facebook Messenger &#8211; chat of choice; for larger teams, Slack might be the better choice; on the desktop I&#8217;m using the Telegram Desktop app, and until recently, Pidgin + the Facebook Plugin, but as the latter one seems to have some nasty issues, I&#8217;m currently using Caprine as an intermediate solution</li>\n<li><a href=\"https://geany.org\">Geany</a> &#8211; Minimalist cross-platform IDE of choice, for general development purposes, but also used for editing my weekly to-do-lists, which are simple structured text files</li>\n<li><a href=\"https://sourceforge.net/projects/timeslottracker/\">Time Slot Tracker</a> &#8211; one of the very few stand-alone time tracker programs for SINGLE users; allows connection to JIRA and the likes; requires Java, and looks a bit fugly, but is very easy to use</li>\n<li>Git &#8211; decentralized version system of choice</li>\n<li><a href=\"https://www.apachefriends.org/index.html\">XAMPP</a> &#8211; my preferred all-in-one local development web server package of choice; instead of figuring out how to compile AND configure everything nice and fancy, one gets a big package that covers ALL of your web developers needs. Or at least for the classic LAMP stack \ud83d\ude09</li>\n<li><a href=\"https://www.inkscape.org\">Inkscape</a> &#8211; Vector graphic editor, very nice for sprucing up those dry website sketches; also rather helpful for creating logos and the likes</li>\n<li><a href=\"https://en.wikipedia.org/wiki/Krita\">Krita</a> / <a href=\"https://en.wikipedia.org/wiki/LazPaint\">LazPaint</a> &#8211; both used as Photoshop replacements; the first one is more focused on digital painting, while the other is more into classic graphics editing; in the nearby future, I might be switching to good old Paint Shop Pro though (I originally started with PSP in the late 90s / early 2000s, being the first real graphics editing program I&#8217;ve used thoroughly, before moving to PS in 2001)</li>\n<li>Debian / Ubuntu / Manjaro &#8211; Linux as my platform of choice</li>\n<li>Libre Office &#8211; for all those pesky tasks like writing invoices, fumbling around with abysmal CSV data your customers clobbered together etc. pp.</li>\n<li><a href=\"https://en.wikipedia.org/wiki/Krusader\">Krusader</a> &#8211; my favorite file manager of choice, with the power of KIO underneath, which enables you to use anything KDE is able to, eg. SSH / FISH, SFTP / FTP, etc. pp. But whenever I&#8217;m forced to work with Windows, my weapon of choice is Total Commander \ud83d\ude09</li>\n<li><a href=\"https://www.virtualbox.org\">VirtualBox</a> &#8211; for virtualization of any kind .. esp. Windows, or when I&#8217;m in the need of a decent photo graphics editor (ie. Photoshop); also got the advantage of &#8220;forwarding&#8221; PCI/e ports directly to the guest system, eg. a nice powerful professional graphics card (eg. the nVidia Quadro M2000M in my ThinkPad P50).</li>\n<li>Skype &#8211; for video calls; although I&#8217;m using it so seldom its kind of irrelevant; instead, Telegram is another nice option</li>\n<li><a href=\"https://www.sipgate.de\">Sipgate</a> &#8211; for land line / regular phone calls, I&#8217;m mostly relying on German Sipgate; its easy to connect to a Fritzbox, but also works very nice on your regular smartphone, eg. using <a href=\"https://www.zoiper.com/\">Zoiper</a></li>\n<li><a href=\"//alternativeto.net/software/orage/\">Orage</a> (XFCE) / <a href=\"https://play.google.com/store/apps/details?id=org.withouthat.acalendar\">aCalendar (Pro)</a> &#8211; as I do not really organize my appointments on my desktop system, there is no real need for a full-blown solution, hence I&#8217;m only using Orage for noting down important appointments once in a while; but normally I&#8217;d do that on my phone using aCalender (Pro), which also syncs with Google Calendar and across several devices</li>\n</ul>\n",
            "content_text": "As a matter of fact, I&#8217;ve been working from home for over 12 years by now. Thus, looking at all the panic and craze of the rest of the world with &#8220;we have to go into home office&#8221; kinda makes me both annoyed and amuzed: So you want to reinvent the wheel, kids? \ud83d\ude00\nBefore getting to my current list of my &#8220;tools of trade&#8221;, I&#8217;ve got to point out: My focus is on usability and form follows function, not &#8220;looks fancy, works crappy&#8221;. Also, collaboration tools have to GET THE JOB DONE. No long fumbling around, explaining how they are supposed to work, etc. pp. That means, no fancy bullshit project management tools either. The KISS principle. Nuff said. On to the list:\n\nTrello &#8211; for task and team coordination, in the kanban way; I&#8217;m using it for more complex projects, and also whenever I&#8217;m supposed to work together with one or more person\nTelegram / Facebook Messenger &#8211; chat of choice; for larger teams, Slack might be the better choice; on the desktop I&#8217;m using the Telegram Desktop app, and until recently, Pidgin + the Facebook Plugin, but as the latter one seems to have some nasty issues, I&#8217;m currently using Caprine as an intermediate solution\nGeany &#8211; Minimalist cross-platform IDE of choice, for general development purposes, but also used for editing my weekly to-do-lists, which are simple structured text files\nTime Slot Tracker &#8211; one of the very few stand-alone time tracker programs for SINGLE users; allows connection to JIRA and the likes; requires Java, and looks a bit fugly, but is very easy to use\nGit &#8211; decentralized version system of choice\nXAMPP &#8211; my preferred all-in-one local development web server package of choice; instead of figuring out how to compile AND configure everything nice and fancy, one gets a big package that covers ALL of your web developers needs. Or at least for the classic LAMP stack \ud83d\ude09\nInkscape &#8211; Vector graphic editor, very nice for sprucing up those dry website sketches; also rather helpful for creating logos and the likes\nKrita / LazPaint &#8211; both used as Photoshop replacements; the first one is more focused on digital painting, while the other is more into classic graphics editing; in the nearby future, I might be switching to good old Paint Shop Pro though (I originally started with PSP in the late 90s / early 2000s, being the first real graphics editing program I&#8217;ve used thoroughly, before moving to PS in 2001)\nDebian / Ubuntu / Manjaro &#8211; Linux as my platform of choice\nLibre Office &#8211; for all those pesky tasks like writing invoices, fumbling around with abysmal CSV data your customers clobbered together etc. pp.\nKrusader &#8211; my favorite file manager of choice, with the power of KIO underneath, which enables you to use anything KDE is able to, eg. SSH / FISH, SFTP / FTP, etc. pp. But whenever I&#8217;m forced to work with Windows, my weapon of choice is Total Commander \ud83d\ude09\nVirtualBox &#8211; for virtualization of any kind .. esp. Windows, or when I&#8217;m in the need of a decent photo graphics editor (ie. Photoshop); also got the advantage of &#8220;forwarding&#8221; PCI/e ports directly to the guest system, eg. a nice powerful professional graphics card (eg. the nVidia Quadro M2000M in my ThinkPad P50).\nSkype &#8211; for video calls; although I&#8217;m using it so seldom its kind of irrelevant; instead, Telegram is another nice option\nSipgate &#8211; for land line / regular phone calls, I&#8217;m mostly relying on German Sipgate; its easy to connect to a Fritzbox, but also works very nice on your regular smartphone, eg. using Zoiper\nOrage (XFCE) / aCalendar (Pro) &#8211; as I do not really organize my appointments on my desktop system, there is no real need for a full-blown solution, hence I&#8217;m only using Orage for noting down important appointments once in a while; but normally I&#8217;d do that on my phone using aCalender (Pro), which also syncs with Google Calendar and across several devices",
            "date_published": "2020-04-08T02:34:15+02:00",
            "date_modified": "2020-04-08T02:36:23+02:00",
            "author": {
                "name": "fwolf",
                "url": "https://wp-devil.com/author/fwolf/",
                "avatar": "https://secure.gravatar.com/avatar/c2a31599f60eec1232806bfc26066ed2?s=512&d=mm&r=g"
            },
            "image": "https://wp-devil.com/wp-content/uploads/2019/01/d0acxmk33is.jpg",
            "tags": [
                "development",
                "Linux"
            ]
        },
        {
            "id": "https://wp-devil.com/breaking-the-curse-of-the-admin-redirection-loop/",
            "url": "https://wp-devil.com/breaking-the-curse-of-the-admin-redirection-loop/",
            "title": "Breaking the Curse of the Admin Redirection Loop",
            "content_html": "<p>Second time this has happened to me: A WordPress site needed to be updated to WP 5.x and switched over to a temporary subdomain. After doing the usual dance of backup, duplicate and manual update of WP, when I was trying to access the frontend, I&#8217;ve got redirected again to the backend. The <a href=\"https://www.hostinger.com/tutorials/fix-wordpress-login-redirect-loop\">usual suspects</a> like deleting all cookies, replacing all occurences of the old site URL in the database etc. didn&#8217;t work .. </p>\n<p>But then I remembered: Last time this happened to me, the cause were left-over transients &#8211; specifically of the PolyLang plugin. Apparently it&#8217;s storing some auto-redirection info in a transient, prefixed with <strong>_pll_</strong>. Delete THAT, and The Curse of the &#8220;Infininite Admin Interface Redirection Loop&#8221; will be broken \ud83d\ude42</p>\n",
            "content_text": "Second time this has happened to me: A WordPress site needed to be updated to WP 5.x and switched over to a temporary subdomain. After doing the usual dance of backup, duplicate and manual update of WP, when I was trying to access the frontend, I&#8217;ve got redirected again to the backend. The usual suspects like deleting all cookies, replacing all occurences of the old site URL in the database etc. didn&#8217;t work .. \nBut then I remembered: Last time this happened to me, the cause were left-over transients &#8211; specifically of the PolyLang plugin. Apparently it&#8217;s storing some auto-redirection info in a transient, prefixed with _pll_. Delete THAT, and The Curse of the &#8220;Infininite Admin Interface Redirection Loop&#8221; will be broken \ud83d\ude42",
            "date_published": "2019-12-02T23:37:20+01:00",
            "date_modified": "2019-12-03T00:18:13+01:00",
            "author": {
                "name": "fwolf",
                "url": "https://wp-devil.com/author/fwolf/",
                "avatar": "https://secure.gravatar.com/avatar/c2a31599f60eec1232806bfc26066ed2?s=512&d=mm&r=g"
            },
            "image": "https://wp-devil.com/wp-content/uploads/2019/12/tejq7cyc-za.jpg",
            "tags": [
                "polylang",
                "site relocation",
                "transients",
                "development",
                "wordpress"
            ]
        },
        {
            "id": "https://wp-devil.com/cryptic-characters-in-shortcode-attributes/",
            "url": "https://wp-devil.com/cryptic-characters-in-shortcode-attributes/",
            "title": "Side note: Strange cryptic characters in shortcodes",
            "content_html": "<p>Note: Also <a href=\"https://wp-devil.com/?page_id=321\">available in German</a> \ud83d\ude42</p>\n<p>A colleague of mine today: There is a shortcode with strange-looking, cryptic characters in one of its attributes.<br>\nSomething like this:</p>\n<pre>eyJoYWxsbyI6IndlbHQiLCJzb25nLXRpdGVsIjp7Im1laW4iOiJnZWhpcm4iLCJkZWluIjoiZ2VoaXJuIn0sInVybCI6Imh0dHBzJTNBJTJGJTJGdXNhYmlsaXR5LWlkZWFsaXN0Lm5ldCUyRiUyM2tvbnRha3QiLCJlaW5zX3BsdXMiOnRydWV9</pre>\n<p>My comment: <em>Looks a bit like <a href=\"https://en.wikipedia.org/wiki/ROT13\">rot13</a> ..</em><br>\nHis reply a bit later on: <em>Yes, it is <a href=\"https://en.wikipedia.org/wiki/Base64\">base64</a>, and the result is a JSON string.</em></p>\n<h3>Putting the rule to the test:</h3>\n<p>View the code on <a href=\"https://gist.github.com/ginsterbusch/590bf349927685b094bff6e084a86f09\">Gist</a>.</p>\n<p>Yep &#8230; works \ud83d\ude42<br>\nThis is how the Uncode plugin is saving its data into shortcode attributes, and a few themes use it as well, to store their settings, eg. as a transient.</p>\n<h3>What effects does this have?</h3>\n<p>Well, right after moving a site, search &#038; replace utterly fails with this. Ergo this is a really rotten habit. Yes, of corpse I do understand why one would go so far and store data this way &#8211; because (at least older version of) Visual Composer doesnt give any options to create direct connections between shortcodes and eg. meta fields. But still, if it was me who had to develop something like this, I&#8217;d still strived to get it done with meta fields, and maybe a shortcode attribute acting as ID. Because with that lengthy search, after those &#8220;hidden URLs&#8221;, my colleague wasted most of the day. That is time and money, he wont get back. At all.</p>\n",
            "content_text": "Note: Also available in German \ud83d\ude42\nA colleague of mine today: There is a shortcode with strange-looking, cryptic characters in one of its attributes.\nSomething like this:\neyJoYWxsbyI6IndlbHQiLCJzb25nLXRpdGVsIjp7Im1laW4iOiJnZWhpcm4iLCJkZWluIjoiZ2VoaXJuIn0sInVybCI6Imh0dHBzJTNBJTJGJTJGdXNhYmlsaXR5LWlkZWFsaXN0Lm5ldCUyRiUyM2tvbnRha3QiLCJlaW5zX3BsdXMiOnRydWV9\nMy comment: Looks a bit like rot13 ..\nHis reply a bit later on: Yes, it is base64, and the result is a JSON string.\nPutting the rule to the test:\nView the code on Gist.\nYep &#8230; works \ud83d\ude42\nThis is how the Uncode plugin is saving its data into shortcode attributes, and a few themes use it as well, to store their settings, eg. as a transient.\nWhat effects does this have?\nWell, right after moving a site, search &#038; replace utterly fails with this. Ergo this is a really rotten habit. Yes, of corpse I do understand why one would go so far and store data this way &#8211; because (at least older version of) Visual Composer doesnt give any options to create direct connections between shortcodes and eg. meta fields. But still, if it was me who had to develop something like this, I&#8217;d still strived to get it done with meta fields, and maybe a shortcode attribute acting as ID. Because with that lengthy search, after those &#8220;hidden URLs&#8221;, my colleague wasted most of the day. That is time and money, he wont get back. At all.",
            "date_published": "2019-08-19T20:41:53+02:00",
            "date_modified": "2019-08-19T22:38:36+02:00",
            "author": {
                "name": "fwolf",
                "url": "https://wp-devil.com/author/fwolf/",
                "avatar": "https://secure.gravatar.com/avatar/c2a31599f60eec1232806bfc26066ed2?s=512&d=mm&r=g"
            },
            "image": "https://wp-devil.com/wp-content/uploads/2019/08/4lnpasdxn9i.jpg",
            "tags": [
                "development",
                "wordpress"
            ]
        }
    ]
}