PageSourceSearch

https://odan.github.io/

html odan.github.io collected 2026-10-03 09:42:17 UTC 27,304 bytes, 783 lines download raw bytes

1<!DOCTYPE html>
2<html lang=" en-US" data-theme="dark">
3
4<head>
5    
5<script>
6        (function () {
7            var saved = localStorage.getItem('theme') || 'dark';
8            document.documentElement.setAttribute('data-theme', saved);
9        })();
10    </script>
10
11    <meta charset="UTF-8">
12    <!-- Begin Jekyll SEO tag v2.8.0 -->
13<title>Blog | Daniel Opitz - Blog</title>
14<meta name="generator" content="Jekyll v3.10.0" />
15<meta property="og:title" content="Blog" />
16<meta property="og:locale" content="en_US" />
17<meta name="description" content="blog posts about web development, php, dotnet" />
18<meta property="og:description" content="blog posts about web development, php, dotnet" />
19<link rel="canonical" href="https://odan.github.io/" />
20<meta property="og:url" content="https://odan.github.io/" />
21<meta property="og:site_name" content="Daniel Opitz - Blog" />
22<meta property="og:type" content="website" />
23<meta name="twitter:card" content="summary" />
24<meta property="twitter:title" content="Blog" />
25<script type="application/ld+json">
26{"@context":"https://schema.org","@type":"WebSite","description":"blog posts about web development, php, dotnet","headline":"Blog","name":"Daniel Opitz - Blog","url":"https://odan.github.io/"}</script>
26
27<!-- End Jekyll SEO tag -->
28
29    <meta name="viewport" content="width=device-width, initial-scale=1">
30    <meta name="theme-color" content="#1e293b">
31    <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
32    
33    <meta name="keywords" content="php, dotnet, webdeveloper" />
34    
35    <link rel="alternate" type="application/rss+xml" title="Subscribe to What's New"
36        href="https://odan.github.io/feed.xml" />
37    <link rel="preconnect" href="https://fonts.bunny.net">
38    <link rel="stylesheet" href="/assets/css/style.css?v=e9a526afe686618291ddcbf01fc2dc3799c141f8">
39    <link href="https://fonts.bunny.net/css?family=inter:400,500,600,700,800|jetbrains-mono:400,500" rel="stylesheet" />
40    <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico?">
41    
41<script type="module"
42        src="https://cdn.jsdelivr.net/npm/@hotwired/turbo@latest/dist/turbo.es2017-esm.min.js"></script>
42
43    <meta name="view-transition" content="same-origin">
44    <meta name="turbo-prefetch" content="false">
45    <meta name="turbo-refresh-method" content="morph">
46    <meta name="turbo-refresh-scroll" content="preserve">
47</head>
48
49<body>
50    <nav>
51        <div class="nav-inner">
52            <a href="/" class="nav-logo">odan/blog</a>
53            <div class="nav-links" id="nav-links">
54                <a href="/">Blog</a>
55                <a href="/about.html">About</a>
56                <a href="/donate.html">Donate</a>
57                <a href="/search.html">Search</a>
58            </div>
59            <button class="theme-btn" id="toggle-mode" aria-label="Toggle dark/light mode">&#9790;</button>
60            <button class="hamburger" id="hamburger" aria-label="Menu">&#9776;</button>
61        </div>
62        <div class="nav-overlay" id="nav-overlay"></div>
63    </nav>
64
65    <header class="hero" role="banner">
66        <div class="hero-bg"></div>
67        <div class="hero-content">
68            <h1>Daniel Opitz - Blog</h1>
69            <p>Developer, Trainer, Open Source Contributor</p>
70        </div>
71    </header>
72
73    <main id="content" class="container-wide" role="main">
74        <h1 class="page-heading" id="blog">Blog</h1>
75
76<!--
77<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8731878573760439"
78        crossorigin="anonymous">
79</script>
79
80-->
81<!--
82<iframe src="https://rcm-eu.amazon-adsystem.com/e/cm?o=3&p=26&l=ez&f=ifr&linkID=abb0f54a7e918b0807606332fe09d652&t=28031982-21&tracking_id=28031982-21" width="468" height="60" scrolling="no" border="0" marginwidth="0" style="border:none;" frameborder="0"></iframe>
83-->
84
85<!--
86<iframe src="https://rcm-eu.amazon-adsystem.com/e/cm?o=3&p=26&l=ur1&category=gift_certificates&banner=1FRYA4Y34G5SPX4CXAR2&f=ifr&linkID=d02832eeac1478aae87ef3f420acc971&t=28031982-21&tracking_id=28031982-21" width="468" height="60" scrolling="no" border="0" marginwidth="0" style="border:none;" frameborder="0"></iframe>
87-->
88
89
90
91<h2 class="year-heading" data-year="2026">2026 <span class="year-count">(4)</span></h2>
92<div class="card-grid">
93    
94    <div class="card">
95        <h3><a href="/2026/09/02/trusting-self-signed-certificate-on-linux.html">Trusting a self-signed localhost certificate in Chrome on Linux</a></h3>
96        <div class="meta">2026-09-02</div>
97        
98        <p>Trust a self-signed localhost HTTPS certificate in Chrome on Ubuntu, Linux Mint, and other Debian-based Linux distributions.</p>
99        
100    </div>
101    
102    <div class="card">
103        <h3><a href="/2026/06/28/smooth-page-transitions.html">Smooth page transitions without flickering</a></h3>
104        <div class="meta">2026-06-28</div>
105        
106        <p>How to add smooth, SPA-like page transitions to a static site using Hotwire</p>
107        
108    </div>
109    
110    <div class="card">
111        <h3><a href="/2026/06/16/cline-ai.html">Cline in VS Code with a free DeepSeek model</a></h3>
112        <div class="meta">2026-06-16</div>
113        
114    </div>
115    
116    <div class="card">
117        <h3><a href="/2026/06/16/agents-md.html">Why your project needs an AGENTS.md file</a></h3>
118        <div class="meta">2026-06-16</div>
119        
120    </div>
121    
122</div>
123
124<h2 class="year-heading" data-year="2025">2025 <span class="year-count">(3)</span></h2>
125<div class="card-grid">
126    
127    <div class="card">
128        <h3><a href="/2025/12/14/fix-dotnet-sdk10-ubuntu-libicu78.html">Fixing the libicu dependency error when installing .NET SDK 10 on Ubuntu</a></h3>
129        <div class="meta">2025-12-14</div>
130        
131    </div>
132    
133    <div class="card">
134        <h3><a href="/2025/12/12/recap-2025.html">The year in review 2025</a></h3>
135        <div class="meta">2025-12-12</div>
136        
137    </div>
138    
139    <div class="card">
140        <h3><a href="/2025/06/01/php-dev-box.html">PHP - A Lightweight Dev Setup for Windows</a></h3>
141        <div class="meta">2025-06-01</div>
142        
143    </div>
144    
145</div>
146
147<h2 class="year-heading" data-year="2024">2024 <span class="year-count">(5)</span></h2>
148<div class="card-grid">
149    
150    <div class="card">
151        <h3><a href="/2024/07/26/slim5.html">Slim - Work on Slim 5 has begun</a></h3>
152        <div class="meta">2024-07-26</div>
153        
154    </div>
155    
156    <div class="card">
157        <h3><a href="/2024/07/04/aspnet-single-action-controllers.html">ASP.NET - Single Action Controllers</a></h3>
158        <div class="meta">2024-07-04</div>
159        
160    </div>
161    
162    <div class="card">
163        <h3><a href="/2024/06/16/uuid-in-apis.html">Maximizing Database Efficiency - Why UUIDs Should Stay at the API Level</a></h3>
164        <div class="meta">2024-06-16</div>
165        
166    </div>
167    
168    <div class="card">
169        <h3><a href="/2024/06/09/slim-framework-member.html">Joining the Slim Framework Organization on GitHub</a></h3>
170        <div class="meta">2024-06-09</div>
171        
172    </div>
173    
174    <div class="card">
175        <h3><a href="/2024/03/20/aspnet-openapi-swagger-ui.html">ASP.NET - Streamlining OpenAPI Documentation</a></h3>
176        <div class="meta">2024-03-20</div>
177        
178    </div>
179    
180</div>
181
182<h2 class="year-heading" data-year="2023">2023 <span class="year-count">(13)</span></h2>
183<div class="card-grid">
184    
185    <div class="card">
186        <h3><a href="/2023/12/06/recap-2023.html">Recap 2023 - A Year of Changes and Innovations</a></h3>
187        <div class="meta">2023-12-06</div>
188        
189    </div>
190    
191    <div class="card">
192        <h3><a href="/2023/11/16/clock-psr20-datetime.html">PHP - Using the PSR-20 Clock</a></h3>
193        <div class="meta">2023-11-16</div>
194        
195    </div>
196    
197    <div class="card">
198        <h3><a href="/2023/11/03/api-orm-decoupling.html">API Design - Decoupling from ORM Dependencies</a></h3>
199        <div class="meta">2023-11-03</div>
200        
201    </div>
202    
203    <div class="card">
204        <h3><a href="/2023/08/20/reducing-background-audio-noise.html">
204Reducing Background Audio Noise Using Neural Networks</a></h3>
205        <div class="meta">2023-08-20</div>
206        
207    </div>
208    
209    <div class="card">
210        <h3><a href="/2023/08/12/slim4-ebook-vol3.html">Slim 4 - eBook Vol. 3</a></h3>
211        <div class="meta">2023-08-12</div>
212        
213    </div>
214    
215    <div class="card">
216        <h3><a href="/2023/08/12/slim-htmx.html">Slim 4 - HTMX Server-side Integration</a></h3>
217        <div class="meta">2023-08-12</div>
218        
219    </div>
220    
221    <div class="card">
222        <h3><a href="/2023/07/07/vscode-aspnet.html">Visual Studio Code Setup for ASP.NET Core</a></h3>
223        <div class="meta">2023-07-07</div>
224        
225    </div>
226    
227    <div class="card">
228        <h3><a href="/2023/06/28/ipc-2023-berlin.html">International PHP Conference 2023 - Berlin</a></h3>
229        <div class="meta">2023-06-28</div>
230        
231    </div>
232    
233    <div class="card">
234        <h3><a href="/2023/05/09/video-reverse-search.html">Unraveling the Origins of a Video - A Guide to Source Discovery</a></h3>
235        <div class="meta">2023-05-09</div>
236        
237    </div>
238    
239    <div class="card">
240        <h3><a href="/2023/02/09/orm.html">Beyond ORM - A guide for advanced database queries</a></h3>
241        <div class="meta">2023-02-09</div>
242        
243    </div>
244    
245    <div class="card">
246        <h3><a href="/2023/01/22/slim-error-handling.html">Slim Framework - Debugging and Error Handling</a></h3>
247        <div class="meta">2023-01-22</div>
248        
249    </div>
250    
251    <div class="card">
252        <h3><a href="/2023/01/16/youtube-slim-middlware.html">New video - Slim Framework - Middleware</a></h3>
253        <div class="meta">2023-01-16</div>
254        
255    </div>
256    
257    <div class="card">
258        <h3><a href="/2023/01/12/phpstan-disallow-assign-in-conditional-rule.html">PHPStan - Creating a rule to disallow assignments in a conditional expression</a></h3>
259        <div class="meta">2023-01-12</div>
260        
261    </div>
262    
263</div>
264
265<h2 class="year-heading" data-year="2022">2022 <span class="year-count">(6)</span></h2>
266<div class="card-grid">
267    
268    <div class="card">
269        <h3><a href="/2022/10/25/collections-php.html">Collections in PHP</a></h3>
270        <div class="meta">2022-10-25</div>
271        
272    </div>
273    
274    <div class="card">
275        <h3><a href="/2022/09/09/slim4-ebook-vol2.html">Slim 4 - eBook Vol. 2</a></h3>
276        <div class="meta">2022-09-09</div>
277        
278    </div>
279    
280    <div class="card">
281        <h3><a href="/2022/07/02/slim4-ebook-online.html">Slim 4 - eBook Online Version</a></h3>
282        <div class="meta">2022-07-02</div>
283        
284    </div>
285    
286    <div class="card">
287        <h3><a href="/2022/06/18/slim-blade.html">Slim 4 - Blade</a></h3>
288        <div class="meta">2022-06-18</div>
289        
290    </div>
291    
292    <div class="card">
293        <h3><a href="/2022/04/06/slim4-latte.html">Slim 4 - Latte Template Engine</a></h3>
294        <div class="meta">2022-04-06</div>
295        
296    </div>
297    
298    <div class="card">
299        <h3><a href="/2022/02/19/slim-basic-auth.html">Slim 4 - Basic Authentication</a></h3>
300        <div class="meta">2022-02-19</div>
301        
302    </div>
303    
304</div>
305
306<h2 class="year-heading" data-year="2021">2021 <span class="year-count">(12)</span></h2>
307<div class="card-grid">
308    
309    <div class="card">
310        <h3><a href="/2021/09/12/slim-cycle-query-builder.html">Slim 4 - Cycle Query Builder</a></h3>
311        <div class="meta">2021-09-12</div>
312        
313    </div>
314    
315    <div class="card">
316        <h3><a href="/2021/08/14/slim-reactphp.html">Slim 4 - ReactPHP</a></h3>
317        <div class="meta">2021-08-14</div>
318        
319    </div>
320    
321    <div class="card">
322        <h3><a href="/2021/08/12/slim-graphql.html">Slim 4 - GraphQL</a></h3>
323        <div class="meta">2021-08-12</div>
324        
325    </div>
326    
327    <div class="card">
328        <h3><a href="/2021/07/06/slim-whoops.html">Slim 4 - Whoops</a></h3>
329        <div class="meta">2021-07-06</div>
330        
331    </div>
332    
333    <div class="card">
334        <h3><a href="/2021/06/23/slim-console.html">Slim 4 - Console</a></h3>
335        <div class="meta">2021-06-23</div>
336        
337    </div>
338    
339    <div class="card">
340        <h3>
340<a href="/2021/06/20/slim-memcached.html">Slim 4 - Memcached</a></h3>
341        <div class="meta">2021-06-20</div>
342        
343    </div>
344    
345    <div class="card">
346        <h3><a href="/2021/06/14/slim-redis.html">Slim 4 - Redis</a></h3>
347        <div class="meta">2021-06-14</div>
348        
349    </div>
350    
351    <div class="card">
352        <h3><a href="/2021/01/22/slim4-framework-vs-micro-framework.html">Slim 4 - Framework vs. Micro Framework</a></h3>
353        <div class="meta">2021-01-22</div>
354        
355    </div>
356    
357    <div class="card">
358        <h3><a href="/2021/01/16/slim4-spam-protection.html">Slim 4 - Spam Protection</a></h3>
359        <div class="meta">2021-01-16</div>
360        
361    </div>
362    
363    <div class="card">
364        <h3><a href="/2021/01/15/slim4-session.html">Slim 4 - Session</a></h3>
365        <div class="meta">2021-01-15</div>
366        
367    </div>
368    
369    <div class="card">
370        <h3><a href="/2021/01/07/webpack-bootstrap-icons.html">Webpack - Bootstrap Icons</a></h3>
371        <div class="meta">2021-01-07</div>
372        
373    </div>
374    
375    <div class="card">
376        <h3><a href="/2021/01/03/slim4-sftp.html">Slim 4 - League Flysystem v2 SFTP</a></h3>
377        <div class="meta">2021-01-03</div>
378        
379    </div>
380    
381</div>
382
383<h2 class="year-heading" data-year="2020">2020 <span class="year-count">(21)</span></h2>
384<div class="card-grid">
385    
386    <div class="card">
387        <h3><a href="/2020/12/28/slim4-flysystem-v2.html">Slim 4 - League Flysystem v2</a></h3>
388        <div class="meta">2020-12-28</div>
389        
390    </div>
391    
392    <div class="card">
393        <h3><a href="/2020/12/23/annual-review-2020.html">Annual Review 2020</a></h3>
394        <div class="meta">2020-12-23</div>
395        
396    </div>
397    
398    <div class="card">
399        <h3><a href="/2020/12/22/php8-compatibility-check.html">PHP 8 Compatibility Check</a></h3>
400        <div class="meta">2020-12-22</div>
401        
402    </div>
403    
404    <div class="card">
405        <h3><a href="/2020/12/09/slim4-php-view.html">Slim 4 - PHP Templates</a></h3>
406        <div class="meta">2020-12-09</div>
407        
408    </div>
409    
410    <div class="card">
411        <h3><a href="/2020/12/03/xampp-xdebug-setup-php8.html">XAMPP - XDebug Setup for PHP 8</a></h3>
412        <div class="meta">2020-12-03</div>
413        
414    </div>
415    
416    <div class="card">
417        <h3><a href="/2020/10/18/slim4-cakephp-validation.html">Slim 4 - CakePHP Validation</a></h3>
418        <div class="meta">2020-10-18</div>
419        
420    </div>
421    
422    <div class="card">
423        <h3><a href="/2020/10/08/slim4-respect-validation.html">Slim 4 - Respect/Validation</a></h3>
424        <div class="meta">2020-10-08</div>
425        
426    </div>
427    
428    <div class="card">
429        <h3><a href="/2020/10/06/slim4-filepond.html">Slim 4 - File uploads with FilePond</a></h3>
430        <div class="meta">2020-10-06</div>
431        
432    </div>
433    
434    <div class="card">
435        <h3><a href="/2020/09/04/slim4-programmez.html">Programmez! - À la découverte de Slim 4</a></h3>
436        <div class="meta">2020-09-04</div>
437        
438    </div>
439    
440    <div class="card">
441        <h3><a href="/2020/08/09/slim4-http-session.html">Slim 4 - Symfony Session</a></h3>
442        <div class="meta">2020-08-09</div>
443        
444    </div>
445    
446    <div class="card">
447        <h3><a href="/2020/07/21/slim4-vue.html">Slim 4 - Vue.js</a></h3>
448        <div class="meta">2020-07-21</div>
449        
450    </div>
451    
452    <div class="card">
453        <h3><a href="/2020/06/18/slim4-sentry.html">Slim 4 - Sentry</a></h3>
454        <div class="meta">2020-06-18</div>
455        
456    </div>
457    
458    <div class="card">
459        <h3><a href="/2020/06/12/slim4-swagger-ui.html">Slim 4 - API documentation with Swagger</a></h3>
460        <div class="meta">2020-06-12</div>
461        
462    </div>
463    
464    <div class="card">
465        <h3><a href="/2020/06/09/slim4-testing.html">Slim 4 - Testing</a></h3>
466        <div class="meta">2020-06-09</div>
467        
468    </div>
469    
470    <div class="card">
471        <h3><a href="/2020/05/27/slim4-error-handling.html">Slim 4 - Error handling</a></h3>
472        <div class="meta">2020-05-27</div>
473        
474    </div>
475    
476    <div class="card">
477        <h3><a href="/2020/05/25/slim4-logging.html">Slim 4 - Logging</a></h3>
478        <div class="meta">2020-05-25</div>
479        
480    </div>
481    
482    <div class="card">
483        <h3><a href="/2020/05/20/slim4-php-magazin-420.html">Slim 4 - PHP Magazin 4.20</a></h3>
484        <div class="meta">2020-05-20</div>
485        
486    </div>
487    
488    <div class="card">
489        <h3><a href="/2020/05/07/slim4-working-with-images.html">Slim 4 - Images</a></h3>
490        <div class="meta">2020-05-07</div>
491        
492    </div>
493    
494    <div class="card">
495        <h3><a href="/2020/04/17/slim4-twig-templates.html">Slim 4 - Twig</a></h3>
496        <div class="meta">2020-04-17</div>
497        
498    </div>
499    
500    <div class="card">
501        <h3><a href="/2020/04/11/slim4-sending-emails.html">Slim 4 - Mailer</a></h3>
502        <div class="meta">2020-04-11</div>
503        
504    </div>
505    
506    <div class="card">
507        <h3><a href="/2020/04/05/slim4-multiple-pdo-database-connections.html">Slim 4 - Multiple database connections</a></h3>
508        <div class="meta">2020-04-05</div>
509        
510    </div>
511    
512</div>
513
514<h2 class="year-heading" data-year="2019">2019 <span class="year-count">(14)</span></h2>
515<div class="card-grid">
516    
517    <div class="card">
518        <h3><a href="/2019/12/20/slim4-performance-testing.html">Slim 4 - Performance</a></h3>
519        <div class="meta">2019-12-20</div>
520        
521    </div>
522    
523    <div class="card">
524        <h3><a href="/2019/12/06/php-best-practice-2019.html">
524PHP - Best Practices 2019</a></h3>
525        <div class="meta">2019-12-06</div>
526        
527    </div>
528    
529    <div class="card">
530        <h3><a href="/2019/12/05/slim4-doctrine-dbal.html">Slim 4 - Doctrine DBAL</a></h3>
531        <div class="meta">2019-12-05</div>
532        
533    </div>
534    
535    <div class="card">
536        <h3><a href="/2019/12/03/slim4-eloquent.html">Slim 4 - Laravel Query Builder</a></h3>
537        <div class="meta">2019-12-03</div>
538        
539    </div>
540    
541    <div class="card">
542        <h3><a href="/2019/12/03/slim4-cakephp-query-builder.html">Slim 4 - CakePHP Query Builder</a></h3>
543        <div class="meta">2019-12-03</div>
544        
545    </div>
546    
547    <div class="card">
548        <h3><a href="/2019/12/01/the-phpstorm-sonarlint-plugin.html">PhpStorm - SonarLint Plugin</a></h3>
549        <div class="meta">2019-12-01</div>
550        
551    </div>
552    
553    <div class="card">
554        <h3><a href="/2019/12/01/slim4-laminas-db-query-builder-setup.html">Slim 4 - Laminas Query Builder</a></h3>
555        <div class="meta">2019-12-01</div>
556        
557    </div>
558    
559    <div class="card">
560        <h3><a href="/2019/11/24/slim4-cors.html">Slim 4 - CORS</a></h3>
561        <div class="meta">2019-11-24</div>
562        
563    </div>
564    
565    <div class="card">
566        <h3><a href="/2019/11/17/xampp-replacing-mariadb-with-mysql-8.html">XAMPP - Replacing MariaDB with MySQL 8</a></h3>
567        <div class="meta">2019-11-17</div>
568        
569    </div>
570    
571    <div class="card">
572        <h3><a href="/2019/11/05/slim4-tutorial.html">Slim 4 - Tutorial</a></h3>
573        <div class="meta">2019-11-05</div>
574        
575    </div>
576    
577    <div class="card">
578        <h3><a href="/2019/09/21/slim4-compiling-assets-with-webpack.html">Slim 4 - Webpack</a></h3>
579        <div class="meta">2019-09-21</div>
580        
581    </div>
582    
583    <div class="card">
584        <h3><a href="/2019/09/09/slim-4-cheatsheet-and-faq.html">Slim 4 - Cheatsheet and FAQ</a></h3>
585        <div class="meta">2019-09-09</div>
586        
587    </div>
588    
589    <div class="card">
590        <h3><a href="/2019/08/30/creating-a-strictly-typed-collection-of-objects-in-php.html">Creating a strictly typed collection of objects in PHP</a></h3>
591        <div class="meta">2019-08-30</div>
592        
593    </div>
594    
595    <div class="card">
596        <h3><a href="/2019/03/18/creating-your-first-slim-framework-application-part-2.html">Creating your first Slim 3 Framework Application Part 2</a></h3>
597        <div class="meta">2019-03-18</div>
598        
599    </div>
600    
601</div>
602
603<h2 class="year-heading" data-year="2018">2018 <span class="year-count">(1)</span></h2>
604<div class="card-grid">
605    
606    <div class="card">
607        <h3><a href="/2018/07/17/aspnet-core-2-ubuntu-setup.html">Installing ASP.NET Core 2.1 on Ubuntu 18.4 Linux</a></h3>
608        <div class="meta">2018-07-17</div>
609        
610    </div>
611    
612</div>
613
614<h2 class="year-heading" data-year="2017">2017 <span class="year-count">(12)</span></h2>
615<div class="card-grid">
616    
617    <div class="card">
618        <h3><a href="/2017/12/16/creating-and-downloading-excel-files-with-slim.html">Slim Framework - Export Excel and CSV</a></h3>
619        <div class="meta">2017-12-16</div>
620        
621    </div>
622    
623    <div class="card">
624        <h3><a href="/2017/11/30/creating-your-first-slim-framework-application.html">Creating your first Slim 3 Framework Application</a></h3>
625        <div class="meta">2017-11-30</div>
626        
627    </div>
628    
629    <div class="card">
630        <h3><a href="/2017/10/29/installing-an-ssl-certificate-under-apache-xampp.html">Installing an SSL Certificate under Apache (XAMPP)</a></h3>
631        <div class="meta">2017-10-29</div>
632        
633    </div>
634    
635    <div class="card">
636        <h3><a href="/2017/08/13/xampp-replacing-mariadb-with-mysql.html">XAMPP - Replacing MariaDB with MySQL</a></h3>
637        <div class="meta">2017-08-13</div>
638        
639    </div>
640    
641    <div class="card">
642        <h3><a href="/2017/08/10/aes-256-encryption-and-decryption-in-php-and-csharp.html">AES-256 encryption and decryption in PHP and C#</a></h3>
643        <div class="meta">2017-08-10</div>
644        
645    </div>
646    
647    <div class="card">
648        <h3><a href="/2017/04/17/rest-restful-api-quick-reference.html">RESTful API - Quick Reference</a></h3>
649        <div class="meta">2017-04-17</div>
650        
651    </div>
652    
653    <div class="card">
654        <h3><a href="/2017/03/30/xampp-curl-ssl-setup.html">XAMPP - CURL SSL Setup</a></h3>
655        <div class="meta">2017-03-30</div>
656        
657    </div>
658    
659    <div class="card">
660        <h3><a href="/2017/03/21/xampp-oracle-driver-setup-v12.html">XAMPP - Oracle Driver Setup (v12)</a></h3>
661        <div class="meta">2017-03-21</div>
662        
663    </div>
664    
665    <div class="card">
666        <h3><a href="/2017/02/05/xampp-how-to-enable-php-opcache.html">XAMPP - How to enable PHP OPCache</a></h3>
667        <div class="meta">2017-02-05</div>
668        
669    </div>
670    
671    <div class="card">
672        <h3><a href="/2017/01/07/basic-crud-operations-with-pdo.html">Basic CRUD operations with PDO</a></h3>
673        <div class="meta">2017-01-07</div>
674        
675    </div>
676    
677    <div class="card">
678        <h3><a href="/2017/01/02/resources-for-php.html">Learn modern PHP</a></h3>
679        <div class="meta">2017-01-02</div>
680        
681    </div>
682    
683    <div class="card">
684        <h3><a href="/2017/01/02/how-to-use-htmlspecialchars-in-php.html">Using htmlspecialchars correctly</a></h3>
685        <div class="meta">2017-01-02</div>
686        
687    </div>
688    
689</div>
690
691<h2 class="year-heading" data-year="2015">2015 <span class="year-count">(1)</span></h2>
692<div class="card-grid">
693    
694    <div class="card">
695        <h3><a href="/2015/12/27/installing-xdebug-for-xampp-with-php-7-x.html">Installing Xdebug for XAMPP with PHP 7.x</a></h3>
696        <div class="meta">2015-12-27</div>
697        
698    </div>
699    
700</div>
701
702
703<script>
704    (function() {
705        var headings = document.querySelectorAll('.year-heading');
706        headings.forEach(function(h) {
707            var year = parseInt(h.getAttribute('data-year'), 10);
708            var currentYear = new Date().getFullYear();
709            var grid = h.nextElementSibling;
710            if (grid && grid.classList.contains('card-grid')) {
711                if (year >= currentYear - 2) {
712                    grid.style.display = 'grid';
713                } else {
714                    grid.style.display = 'none';
715                }
716                h.addEventListener('click', function() {
717                    if (grid.style.display === 'none') {
718                        grid.style.display = 'grid';
719                    } else {
720                        grid.style.display = 'none';
721                    }
722                });
723            }
724        });
725    })();
726</script>
726
727
728<!--
729<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8731878573760439"
730        crossorigin="anonymous">
731</script>
731
732-->
733<!--
734<iframe src="https://rcm-eu.amazon-adsystem.com/e/cm?o=3&p=26&l=ez&f=ifr&linkID=abb0f54a7e918b0807606332fe09d652&t=28031982-21&tracking_id=28031982-21" width="468" height="60" scrolling="no" border="0" marginwidth="0" style="border:none;" frameborder="0"></iframe>
735-->
736
737<!--
738<iframe src="https://rcm-eu.amazon-adsystem.com/e/cm?o=3&p=26&l=ur1&category=gift_certificates&banner=1FRYA4Y34G5SPX4CXAR2&f=ifr&linkID=d02832eeac1478aae87ef3f420acc971&t=28031982-21&tracking_id=28031982-21" width="468" height="60" scrolling="no" border="0" marginwidth="0" style="border:none;" frameborder="0"></iframe>
739-->
740
741
742        <footer>
743            &copy; 2026 Daniel Opitz
744            &nbsp;|&nbsp; <a href="https://x.com/dopitz" target="_blank">X</a>
745            &nbsp;|&nbsp; <a href="https://github.com/odan" target="_blank">GitHub</a>
746            &nbsp;|&nbsp; <a href="https://www.linkedin.com/in/daniel-opitz-493816111" target="_blank">LinkedIn</a>
747            &nbsp;|&nbsp; <a href="https://odan.github.io/feed.xml" target="_blank">RSS</a>
748        </footer>
749    </main>
750
751    
751<script>
752        (function () {
753            document.getElementById('toggle-mode').addEventListener('click', function (e) {
754                var cur = document.documentElement.getAttribute('data-theme');
755                var next = cur === 'dark' ? 'light' : 'dark';
756                document.documentElement.setAttribute('data-theme', next);
757                localStorage.setItem('theme', next);
758            });
759
760            var hamburger = document.getElementById('hamburger');
761            var navLinks = document.getElementById('nav-links');
762            var overlay = document.getElementById('nav-overlay');
763            if (hamburger && navLinks) {
764                function closeMenu() {
765                    navLinks.classList.remove('open');
766                    overlay.classList.remove('open');
767                    document.body.classList.remove('nav-open');
768                }
769                hamburger.addEventListener('click', function () {
770                    navLinks.classList.toggle('open');
771                    overlay.classList.toggle('open');
772                    document.body.classList.toggle('nav-open');
773                });
774                overlay.addEventListener('click', closeMenu);
775                navLinks.querySelectorAll('a').forEach(function (link) {
776                    link.addEventListener('click', closeMenu);
777                });
778            }
779        })();
780    </script>
780
781</body>
782
783</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.