{"@attributes":{"version":"2.0"},"channel":{"title":"\u00d6zkan Pakdil Software Engineer","link":"https:\/\/ozkanpakdil.github.io\/","description":"Recent content on \u00d6zkan Pakdil Software Engineer","image":{"title":"\u00d6zkan Pakdil Software Engineer","url":"https:\/\/ozkanpakdil.github.io\/images\/papermod-cover.png","link":"https:\/\/ozkanpakdil.github.io\/images\/papermod-cover.png"},"generator":"Hugo -- 0.148.2","language":"en","copyright":"\u00d6zkan Pakdil","lastBuildDate":"Sun, 19 Jul 2026 00:00:00 +0000","item":[{"title":"How to add NVIDIA free models to VS Code","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2026\/2026-07-19-how-to-add-nvidia-free-model\/","pubDate":"Sun, 19 Jul 2026 00:00:00 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2026\/2026-07-19-how-to-add-nvidia-free-model\/","description":"<p>NVIDIA offers free access to their powerful Nemotron models through their <a href=\"https:\/\/build.nvidia.com\/\">NVIDIA Build platform<\/a>. In this post, I&rsquo;ll walk you through how to get a free API key and configure it in VS Code to use models like <code>nvidia\/nemotron-3-ultra-550b-a55b<\/code> directly in VS Code. Also you can choose any other model from <a href=\"https:\/\/build.nvidia.com\/models?orderBy=weightPopular%3ADESC&amp;filters=nimType%3Anim_type_preview\">here<\/a>.<\/p>\n<h3 id=\"prerequisites\">Prerequisites<\/h3>\n<p>VScode needs to be above 1.27 it needs to have customendpoint supporting<\/p>\n<h2 id=\"getting-your-free-nvidia-api-key\">Getting Your Free NVIDIA API Key<\/h2>\n<ol>\n<li>Go to <a href=\"https:\/\/build.nvidia.com\/\">build.nvidia.com<\/a><\/li>\n<li>Sign in or create an NVIDIA account<\/li>\n<li>Navigate to the model you want to use (e.g., <a href=\"https:\/\/build.nvidia.com\/nvidia\/nemotron-3-ultra\">Nemotron 3 Ultra<\/a>)<\/li>\n<li>Click &ldquo;Get API Key&rdquo; button<\/li>\n<\/ol>\n<p><strong>Note<\/strong>: In my experience, the &ldquo;Get API Key&rdquo; button in the UI didn&rsquo;t work properly (it appeared to do nothing). If this happens to you, here&rsquo;s how to get your API key:<\/p>"},{"title":"Beyond Functionality: Why Code Hygiene is Your Project's Immune System","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2026\/2026-04-22-code-hygiene\/","pubDate":"Wed, 22 Apr 2026 00:00:00 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2026\/2026-04-22-code-hygiene\/","description":"<p>In the world of software engineering, we often obsess over the &ldquo;Testing Pyramid.&rdquo; We pour resources into unit tests, integration tests, and E2E suites. These are critical, they tell us that our features work as designed. But there\u2019s a shadowy category of bugs that traditional tests often miss: the architectural &ldquo;anti-patterns&rdquo; and &ldquo;API misuses&rdquo; that don&rsquo;t break functionality today but lead to system failures, memory leaks, or portability issues tomorrow.<\/p>"},{"title":"Accelerating LLMs on Debian 13: Setting up Vulkan for llama.cpp","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2026\/2026-03-22-vulkan-llamacpp-debian-13\/","pubDate":"Sun, 22 Mar 2026 09:47:00 +0300","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2026\/2026-03-22-vulkan-llamacpp-debian-13\/","description":"<p>After setting up CUDA on my other laptop, I moved to a different(older) machine that doesn&rsquo;t have an NVIDIA GPU. This one is an everyday laptop with integrated Intel graphics, but that doesn&rsquo;t mean we have to settle for slow CPU-only performance.<\/p>\n<p>On this machine, I switched to the <strong>Vulkan<\/strong> backend for <code>llama.cpp<\/code> and the results were even more dramatic than I expected.<\/p>\n<h3 id=\"machine-hardware-info\">Machine Hardware Info<\/h3>\n<p>This laptop is running <strong>Debian 13 (Trixie\/Sid)<\/strong> with the following specs:<\/p>"},{"title":"Accelerating LLMs on Debian 13: Setting up CUDA for llama.cpp","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2026\/2026-03-20-cuda-llamacpp-debian-13\/","pubDate":"Fri, 20 Mar 2026 01:35:00 +0300","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2026\/2026-03-20-cuda-llamacpp-debian-13\/","description":"<p>Setting up NVIDIA CUDA on Debian 13 (Trixie\/Sid) to run Large Language Models (LLMs) can be a bit of a journey, especially if you&rsquo;re transitioning from the default open-source drivers to the proprietary stack required for GPGPU workloads.<\/p>\n<p>Over the last few days, I&rsquo;ve been working on getting <code>llama.cpp<\/code> to run with CUDA on my laptop to see how much of a difference it makes compared to pure CPU execution.<\/p>"},{"title":"Tuning Podman on macOS to Match OrbStack Performance","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2026\/2026-03-08-tuning-podman-macos-performance\/","pubDate":"Sun, 08 Mar 2026 22:02:00 +0300","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2026\/2026-03-08-tuning-podman-macos-performance\/","description":"<blockquote>\n<p><strong>Note:<\/strong> These are suggested optimizations I have not personally tried yet. I&rsquo;m blogging them as I&rsquo;m planning to test them throughout this week.<\/p><\/blockquote>\n<p>OrbStack is highly optimized for macOS, using a proprietary, high-performance networking stack and a custom VirtioFS implementation with aggressive caching. Podman, while being open-source and standard-compliant, can be tuned to significantly bridge the performance gap.<\/p>\n<p>The following plan outlines key areas where Podman&rsquo;s performance can be improved on macOS:<\/p>"},{"title":"Atlassian MCP","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2026\/2026-02-08-atlassian-mcp\/","pubDate":"Sun, 08 Feb 2026 00:00:00 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2026\/2026-02-08-atlassian-mcp\/","description":"<p>I have been using <a href=\"https:\/\/hub.docker.com\/r\/mcp\/atlassian\">Atlassian MCP<\/a> with internal Confluence and Jira, and it has been wonderful.<\/p>\n<p>Finding internal information is often challenging and time-consuming. To be honest, searching through Jira or Confluence and locating the right information can be really difficult.<\/p>\n<ol>\n<li>Create Jira and Confluence API tokens from your internal site profile page. For example: <code>https:\/\/internalconfluence.company.com\/profile\/personal<\/code> for Confluence and <code>https:\/\/jira.company.com\/secure\/admin\/CreateAPIToken!default.jspa<\/code> for Jira. These URLs may vary depending on your setup.<\/li>\n<li>Create an <code>mcp.json<\/code> file in the <code>.vscode<\/code> folder for Visual Studio Code, or place this MCP configuration in the appropriate folder for your IDE of choice:<\/li>\n<\/ol>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-json\" data-lang=\"json\"><span style=\"display:flex;\"><span>{\n<\/span><\/span><span style=\"display:flex;\"><span>  <span style=\"color:#f92672\">&#34;mcpServers&#34;<\/span>: {\n<\/span><\/span><span style=\"display:flex;\"><span>    <span style=\"color:#f92672\">&#34;mcp-atlassian&#34;<\/span>: {\n<\/span><\/span><span style=\"display:flex;\"><span>      <span style=\"color:#f92672\">&#34;command&#34;<\/span>: <span style=\"color:#e6db74\">&#34;uvx&#34;<\/span>,\n<\/span><\/span><span style=\"display:flex;\"><span>      <span style=\"color:#f92672\">&#34;args&#34;<\/span>: [<span style=\"color:#e6db74\">&#34;mcp-atlassian&#34;<\/span>],\n<\/span><\/span><span style=\"display:flex;\"><span>      <span style=\"color:#f92672\">&#34;env&#34;<\/span>: {\n<\/span><\/span><span style=\"display:flex;\"><span>        <span style=\"color:#f92672\">&#34;JIRA_URL&#34;<\/span>: <span style=\"color:#e6db74\">&#34;https:\/\/jira.company.com&#34;<\/span>,\n<\/span><\/span><span style=\"display:flex;\"><span>        <span style=\"color:#f92672\">&#34;JIRA_USERNAME&#34;<\/span>: <span style=\"color:#e6db74\">&#34;your.email@company.com&#34;<\/span>,\n<\/span><\/span><span style=\"display:flex;\"><span>        <span style=\"color:#f92672\">&#34;JIRA_API_TOKEN&#34;<\/span>: <span style=\"color:#e6db74\">&#34;your_api_token&#34;<\/span>,\n<\/span><\/span><span style=\"display:flex;\"><span>        <span style=\"color:#f92672\">&#34;CONFLUENCE_URL&#34;<\/span>: <span style=\"color:#e6db74\">&#34;https:\/\/internalconfluence.company.com\/wiki&#34;<\/span>,\n<\/span><\/span><span style=\"display:flex;\"><span>        <span style=\"color:#f92672\">&#34;CONFLUENCE_USERNAME&#34;<\/span>: <span style=\"color:#e6db74\">&#34;your.email@company.com&#34;<\/span>,\n<\/span><\/span><span style=\"display:flex;\"><span>        <span style=\"color:#f92672\">&#34;CONFLUENCE_API_TOKEN&#34;<\/span>: <span style=\"color:#e6db74\">&#34;your_api_token&#34;<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>      }\n<\/span><\/span><span style=\"display:flex;\"><span>    }\n<\/span><\/span><span style=\"display:flex;\"><span>  }\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><\/code><\/pre><\/div><p>Remember to run podman-desktop or docker desktop. Because this MCP works as a docker container.<\/p>"},{"title":"Building a Real-time File I\/O Heatmap with eBPF and Java 25","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2026\/2026-01-21-ebpf-java-heatmap\/","pubDate":"Wed, 21 Jan 2026 08:52:00 +0300","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2026\/2026-01-21-ebpf-java-heatmap\/","description":"<p>Have you ever wondered exactly which files are being hammered by your Linux system in real-time? While tools like <code>iotop<\/code> or <code>lsof<\/code> are great, sometimes you want something more visual, custom, and lightweight.<\/p>\n<p>In this post, I&rsquo;ll walk you through how I built a <strong>Real-time File I\/O Heatmap<\/strong> using the power of <strong>eBPF<\/strong> for data collection and <strong>Java 25<\/strong> for a modern Terminal UI (TUI).<\/p>\n<h3 id=\"what-is-ebpf-and-why-use-it\">What is eBPF and Why Use It?<\/h3>\n<p>eBPF (Extended Berkeley Packet Filter) is a revolutionary technology that allows you to run sandboxed programs in the Linux kernel without changing kernel source code or loading kernel modules.<\/p>"},{"title":"Bun Joins the Microservice Framework Benchmark: Surprisingly Fast JavaScript Runtime","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2026\/2026-01-10-bun-microservice-framework-benchmark\/","pubDate":"Sat, 10 Jan 2026 17:00:00 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2026\/2026-01-10-bun-microservice-framework-benchmark\/","description":"<h2 id=\"introduction\">Introduction<\/h2>\n<p>Today I&rsquo;m excited to announce the addition of <strong>Bun<\/strong> to our <a href=\"https:\/\/ozkanpakdil.github.io\/test-microservice-frameworks\/\">microservice framework benchmark suite<\/a>. The results are nothing short of remarkable . Bun has proven to be one of the fastest runtimes in our entire test suite, competing directly with Rust frameworks!<\/p>\n<h2 id=\"what-is-bun\">What is Bun?<\/h2>\n<p>Bun is a modern JavaScript runtime built from scratch using <a href=\"https:\/\/ziglang.org\/\">Zig<\/a> and <a href=\"https:\/\/developer.apple.com\/documentation\/javascriptcore\">JavaScriptCore<\/a> (the engine that powers Safari). It&rsquo;s designed to be a drop-in replacement for Node.js with a focus on:<\/p>"},{"title":"Eclipse Collections vs JDK Collections: A Performance Deep Dive","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/eclipse-collections-vs-jdk-collections\/","pubDate":"Mon, 29 Dec 2025 00:00:00 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/eclipse-collections-vs-jdk-collections\/","description":"Comparing the performance of Eclipse Collections against standard JDK Collections using JMH benchmarks. Spoiler: EC is slightly faster!"},{"title":"From PKIX errors to a clean mTLS + Feign + IAM demo","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/mtls-feignclient-client-server-iam\/","pubDate":"Fri, 05 Dec 2025 21:50:00 +0300","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/mtls-feignclient-client-server-iam\/","description":"A minimal, runnable client\u2013server example that fixes PKIX issues in OpenFeign with mutual TLS and adds application\u2011level identity\/authorization via Spring Security X.509."},{"title":"Adding Golang and Express.js to the Microservice Framework Benchmark Suite","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/2025-12-03-microservice-framework-test-golang-expressjs\/","pubDate":"Wed, 03 Dec 2025 21:49:00 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/2025-12-03-microservice-framework-test-golang-expressjs\/","description":"<h2 id=\"introduction\">Introduction<\/h2>\n<p><a href=\"https:\/\/ozkanpakdil.github.io\/test-microservice-frameworks\/posts\/2025\/2025-12-03-microservice-framework-test-25\/\">Test results for this benchmark run \u2192<\/a><\/p>\n<p>Over the last two days, I&rsquo;ve expanded our microservice framework benchmark suite to include two new contenders: <strong>Golang<\/strong> and <strong>Express.js<\/strong>. This addition allows us to compare performance across a broader spectrum of technologies, from compiled languages like Rust and Go to JVM-based frameworks and Node.js.<\/p>\n<h2 id=\"new-additions\">New Additions<\/h2>\n<h3 id=\"golang-go-12410\">Golang (Go 1.24.10)<\/h3>\n<p>Go was added using the <strong>standard library only<\/strong> - no external frameworks. The implementation uses <code>net\/http<\/code> package which is known for its excellent performance and simplicity.<\/p>"},{"title":"How to solve macos hdmi sound control problem","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/21-11-macos-hdmi-soundissue-fix\/","pubDate":"Fri, 21 Nov 2025 00:00:00 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/21-11-macos-hdmi-soundissue-fix\/","description":"<p>So I got my Mac Mini M4 from Amazon for \u00a3500 and started using it. I had so many problems with the shortcuts I normally use  even Ctrl+A wasn\u2019t working, I had to use Win+A, and many other shortcuts were different. One of the biggest problems was using the sound keys on the keyboard. On Linux they worked fine: sound up and down controlled the output volume. But on macOS it didn\u2019t work. Very strange policy Apple has macOS doesn\u2019t allow the user to control end devices connected through HDMI.<\/p>"},{"title":"MacOS on debian QEMU KVM","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/13-11-macos-kvm\/","pubDate":"Thu, 13 Nov 2025 00:00:00 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/13-11-macos-kvm\/","description":"<h1 id=\"from-frustration-to-breakthrough-running-macos-on-kvm\">From Frustration to Breakthrough: Running macOS on KVM<\/h1>\n<p>For years, I chased the dream of running <strong>macOS in a virtual machine<\/strong>.<br>\nOn Windows, I tried VMware and VirtualBox countless times with different tutorials and blogs. Each attempt ended in frustration: crashes, unsupported hardware, endless configuration rabbit holes. It felt like a goal always just out of reach. And finally I found <a href=\"https:\/\/github.com\/kholia\/OSX-KVM\">https:\/\/github.com\/kholia\/OSX-KVM<\/a> it has the readme which explains the steps for setting up.<\/p>"},{"title":"Paint, a lightweight image editor for quick edits","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/paint-lightweight-image-editor\/","pubDate":"Wed, 12 Nov 2025 00:00:00 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/paint-lightweight-image-editor\/","description":"<h2 id=\"why-i-built-paint\">Why I built Paint<\/h2>\n<p>Whenever I wanted to make a very small edit on my Debian laptop, crop a screenshot, add a quick arrow, or block out a small area, the system only had GIMP for editing images. Powerful, but heavy and slow for tiny, frequent tasks. I wanted something nimble: quick to open, easy to use, and focused on the common one-off edits people do dozens of times a day.<\/p>"},{"title":"Java imperative vs functional in 2025 - revisiting a 2015 microbenchmark","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/java-imperative-vs-functional-2025\/","pubDate":"Mon, 29 Sep 2025 20:22:00 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/java-imperative-vs-functional-2025\/","description":"<p>Quick numbers (avg; smaller is faster)<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/ozkanpakdil\/ozkanpakdil.github.io\/blob\/ec3bbcee3a1fcd28c673d4bcca8138b878a4a2be\/scripts\/java25-bench\/Benchmark.java#L119\">I (imperative nested)<\/a>: 3.28 \u00b5s<\/li>\n<li>I2 (imperative freq-map): 1.93 \u00b5s<\/li>\n<li>F (streams grouping): 127.37 \u00b5s<\/li>\n<li>FP (parallel streams grouping): 599.28 \u00b5s<\/li>\n<\/ul>\n<p>Winner: <a href=\"https:\/\/github.com\/ozkanpakdil\/ozkanpakdil.github.io\/blob\/ec3bbcee3a1fcd28c673d4bcca8138b878a4a2be\/scripts\/java25-bench\/Benchmark.java#L130\">I2 - imperative freq-map<\/a><\/p>\n<p>Note: These are sample numbers from the run below on my machine; yours will differ. I\/F labels mirror the 2015 post for a simple visual compare.<\/p>\n<p>== 2015-style harness (I:\/F: lines) ==<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-shell\" data-lang=\"shell\"><span style=\"display:flex;\"><span>ozkan@ozkan-debian:~\/projects\/ozkanpakdil.github.io\/scripts\/compare-2015-25$ .\/run.sh\n<\/span><\/span><span style=\"display:flex;\"><span>javac <span style=\"color:#ae81ff\">25<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>I:5372\n<\/span><\/span><span style=\"display:flex;\"><span>F:22032373\n<\/span><\/span><span style=\"display:flex;\"><span>I:5816\n<\/span><\/span><span style=\"display:flex;\"><span>F:186352\n<\/span><\/span><span style=\"display:flex;\"><span>F:144816\n<\/span><\/span><span style=\"display:flex;\"><span>F:134903\n<\/span><\/span><span style=\"display:flex;\"><span>F:107685\n<\/span><\/span><span style=\"display:flex;\"><span>I:4919\n<\/span><\/span><span style=\"display:flex;\"><span>I:4903\n<\/span><\/span><span style=\"display:flex;\"><span>I:4698\n<\/span><\/span><span style=\"display:flex;\"><span>I:4147\n<\/span><\/span><span style=\"display:flex;\"><span>F:104857\n<\/span><\/span><\/code><\/pre><\/div><p>== 2025 benchmark summary (fastest \u2192 slowest) ==<\/p>"},{"title":"The First Production Performance Problem I Faced (and How I Solved It)","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/09-21-first-production-performance-problem\/","pubDate":"Sun, 21 Sep 2025 00:00:00 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/09-21-first-production-performance-problem\/","description":"A real-world example of diagnosing a slow form in a VB.NET\/SQL Server app and fixing it with the right index."},{"title":"GraalVM Native Image Agent - reachability metadata: how to run it, where files go","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/09-16-graalvm-native-image-agent\/","pubDate":"Tue, 16 Sep 2025 00:00:00 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/09-16-graalvm-native-image-agent\/","description":"How to run the agent (generic Java) and where the metadata is used"},{"title":"How to use Testcontainers with PostgreSQL and SSL","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/09-12-testcontainers-postgresql-ssl\/","pubDate":"Fri, 12 Sep 2025 00:00:00 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/09-12-testcontainers-postgresql-ssl\/","description":"Using Testcontainers with PostgreSQL over SSL\/TLS (with client certificates)"},{"title":"How PDF Arranger Made My ILR Passport PDF a Breeze","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/09-09-pdf-arrenger\/","pubDate":"Tue, 09 Sep 2025 00:00:00 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/09-09-pdf-arrenger\/","description":"<p>When it comes to preparing documents for important applications like the UK\u2019s ILR (Indefinite Leave to Remain), efficiency and ease of use are everything. Recently, I needed to create a PDF from my passport pictures, and after some trial and error, I found a workflow that saved me a ton of time and frustration - all thanks to a fantastic open-source tool called <strong>PDF Arranger<\/strong>.<\/p>\n<h2 id=\"the-struggle-with-libreoffice-draw\">The Struggle with LibreOffice Draw<\/h2>\n<p>At first, I tried using LibreOffice Draw to assemble my passport photos into a PDF. Unfortunately, it was painfully slow, and arranging the imported images was a hassle. The interface just wasn\u2019t built for this kind of task, and I quickly realized I needed a better solution.<\/p>"},{"title":"Understanding and Monitoring Index and Table Bloat in PostgreSQL","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/09-08-postgres-bloat-humanized\/","pubDate":"Mon, 08 Sep 2025 00:00:00 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/09-08-postgres-bloat-humanized\/","description":"<p>PostgreSQL \ud83d\udc18 is a robust database, but its MVCC (Multi-Version Concurrency Control) design can sometimes lead to a subtle issue: <strong>table and index bloat<\/strong>. If left unchecked, bloat wastes storage, increases I\/O, and can slow queries down.<\/p>\n<p>In this post, I&rsquo;ll walk through:<\/p>\n<ul>\n<li>What bloat is and why it happens<\/li>\n<li>Different ways to measure it<\/li>\n<li>How to keep an eye on it without killing your database<\/li>\n<li>A few habits to reduce or fix it<\/li>\n<\/ul>\n<h2 id=\"what-is-bloat-\">What is bloat? \ud83e\uddf9<\/h2>\n<ul>\n<li><strong>Table bloat<\/strong>: Every update creates a new row version, and the old one becomes dead. Those dead tuples sit there until vacuum cleans them.<\/li>\n<li><strong>Index bloat<\/strong>: Even when dead tuples are gone from the table, their index entries may stick around until an index vacuum or reindex.<\/li>\n<\/ul>\n<p><strong>Why care?<\/strong><\/p>"},{"title":"Kernel TLS, NIC Offload, and Socket Sharding: What\u2019s New and Who Uses It?","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/09-02-kernel-tls-socket-sharding\/","pubDate":"Tue, 02 Sep 2025 00:00:00 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/09-02-kernel-tls-socket-sharding\/","description":"<p>Modern servers are expected to push <strong>hundreds of gigabits per second<\/strong> while keeping latency low and CPU use manageable. Two kernel-level innovations-<strong>socket sharding<\/strong> and <strong>kernel TLS (kTLS)<\/strong>-help make that possible. When paired with <strong>NIC TLS offload<\/strong>, the gains are even bigger.<\/p>\n<hr>\n<h2 id=\"socket-sharding\">Socket Sharding<\/h2>\n<p>Traditionally, only one process could <code>accept()<\/code> connections from a TCP socket.<br>\nWith Linux <strong>4.5 (2016)<\/strong> and <code>SO_REUSEPORT<\/code> enhancements, multiple processes can share a listening socket. This \u201csocket sharding\u201d lets the kernel distribute connections efficiently across worker processes.<\/p>"},{"title":"How to use Playwright MCP with Junie in Intellij","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/09-01-junie-mcp-playwright\/","pubDate":"Mon, 01 Sep 2025 00:00:00 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/09-01-junie-mcp-playwright\/","description":"A comprehensive guide to show how to use Playwright MCP inside intellij with Junie"},{"title":"Enterprise SSL Certificate Creation for PostgreSQL: From Development to Production","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/ssl-certificate-creation-blog\/","pubDate":"Fri, 15 Aug 2025 00:00:00 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/ssl-certificate-creation-blog\/","description":"A comprehensive guide to SSL certificate creation for PostgreSQL, covering everything from basic OpenSSL commands to enterprise-grade PKI practices used by major financial institutions and media companies."},{"title":"PostgreSQL Distinguished Name (DN) Authentication: Beyond CN-Based Certificate Mapping","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/postgresql-clientname-dn-setup-and-mapping\/","pubDate":"Fri, 15 Aug 2025 00:00:00 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/postgresql-clientname-dn-setup-and-mapping\/","description":"A comprehensive guide to implementing Distinguished Name (DN) based certificate authentication in PostgreSQL using pg_ident.conf for flexible identity mapping when CN doesn&#39;t match the PostgreSQL username."},{"title":"Designing mTLS for PostgreSQL: Getting SAN and Hostname Verification Right","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/postgresql-mtls-san\/","pubDate":"Thu, 14 Aug 2025 00:00:00 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/postgresql-mtls-san\/","description":"A comprehensive guide to implementing secure mTLS authentication for PostgreSQL with proper SAN configuration and hostname verification to prevent common SSL connection failures."},{"title":"The Pagination Pitfall: A React + Spring Boot Cautionary Tale","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/pagination-pitfall-react-springboot\/","pubDate":"Thu, 07 Aug 2025 00:00:00 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/pagination-pitfall-react-springboot\/","description":"Why using client-side pagination for unknown data sizes in a React + Spring Boot app can backfire - and how to fix it with proper server-side pagination."},{"title":"\ud83d\udd0d Ways to Monitor PostgreSQL Queries (Concise Overview)","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/2025-07-15-postgresql-query-monitoring\/","pubDate":"Tue, 15 Jul 2025 00:00:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/2025-07-15-postgresql-query-monitoring\/","description":"<h3 id=\"1-pg_stat_statements\">1. <code>pg_stat_statements<\/code><\/h3>\n<p>Extension that tracks execution statistics for all SQL statements (execution count, total time, etc.). <a href=\"https:\/\/www.postgresql.org\/docs\/current\/pgstatstatements.html\">Here full docs<\/a><\/p>\n<h3 id=\"2-postgresql-logging-postgresqlconf\">2. PostgreSQL Logging (<code>postgresql.conf<\/code>)<\/h3>\n<p>Configure parameters like <a href=\"https:\/\/www.postgresql.org\/docs\/current\/runtime-config-logging.html#GUC-LOG-STATEMENT\">log_statement<\/a>, <code>log_duration<\/code>, or <code>log_min_duration_statement<\/code> to log queries to a file.<\/p>\n<h3 id=\"3-auto_explain\">3. <code>auto_explain<\/code><\/h3>\n<p><a href=\"https:\/\/www.postgresql.org\/docs\/current\/auto-explain.html\">Automatically logs execution plans for slow queries<\/a>, useful for performance tuning.<\/p>\n<h3 id=\"4-pg_stat_activity\">4. <code>pg_stat_activity<\/code><\/h3>\n<p><a href=\"https:\/\/www.postgresql.org\/docs\/current\/monitoring-stats.html#MONITORING-PG-STAT-ACTIVITY-VIEW\">View currently running queries and session info<\/a>:<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-sql\" data-lang=\"sql\"><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">SELECT<\/span> <span style=\"color:#f92672\">*<\/span> <span style=\"color:#66d9ef\">FROM<\/span> pg_stat_activity;\n<\/span><\/span><\/code><\/pre><\/div><h3 id=\"5-pgbadger\">5. pgBadger<\/h3>\n<p>A powerful <a href=\"https:\/\/github.com\/darold\/pgbadger\">log analyzer that generates detailed HTML reports from PostgreSQL logs<\/a>.<\/p>"},{"title":"PostgreSQL Client Certificate Authentication: Complete Setup Guide for CN and one to one connection","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/2025-07-15-postgresql-client-certificate-authentication\/","pubDate":"Tue, 15 Jul 2025 00:00:00 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/2025-07-15-postgresql-client-certificate-authentication\/","description":"<p>Client certificate authentication in PostgreSQL provides a secure, passwordless way to authenticate users. Instead of relying on passwords, clients present valid X.509 certificates to prove their identity.<\/p>\n<h2 id=\"what-to-configure\">What to Configure<\/h2>\n<h3 id=\"server-side-requirements\">Server-Side Requirements<\/h3>\n<ul>\n<li><strong>SSL certificates<\/strong>: Server certificate + client certificates<\/li>\n<li><strong>PostgreSQL SSL settings<\/strong>: Enable SSL and configure certificate paths<\/li>\n<li><strong>Authentication rules<\/strong>: Configure <code>pg_hba.conf<\/code> for certificate-based auth<\/li>\n<li><strong>User mapping<\/strong>: Link certificate Common Names to database users<\/li>\n<\/ul>\n<h3 id=\"client-side-requirements\">Client-Side Requirements<\/h3>\n<ul>\n<li><strong>Client certificate<\/strong>: Valid X.509 certificate for the user<\/li>\n<li><strong>Private key<\/strong>: Matching private key for the certificate<\/li>\n<li><strong>Root certificate<\/strong>: Server&rsquo;s certificate for verification<\/li>\n<li><strong>Connection parameters<\/strong>: Proper SSL mode and certificate paths<\/li>\n<\/ul>\n<h2 id=\"how-to-configure\">How to Configure<\/h2>\n<h3 id=\"1-generate-ssl-certificates\">1. Generate SSL Certificates<\/h3>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-bash\" data-lang=\"bash\"><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Create SSL directory<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>mkdir -p \/var\/lib\/postgresql\/17\/main\/ssl\n<\/span><\/span><span style=\"display:flex;\"><span>cd \/var\/lib\/postgresql\/17\/main\/ssl\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Generate server certificate<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>openssl genrsa -out server.key <span style=\"color:#ae81ff\">4096<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>openssl req -new -key server.key -out server.csr <span style=\"color:#ae81ff\">\\\n<\/span><\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#ae81ff\"><\/span>  -subj <span style=\"color:#e6db74\">&#34;\/C=US\/ST=State\/L=City\/O=Org\/OU=OrgUnit\/CN=localhost&#34;<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>openssl x509 -req -days <span style=\"color:#ae81ff\">365<\/span> -in server.csr -signkey server.key -out server.crt\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Generate client certificate for user &#39;appuser&#39;<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>openssl genrsa -out appuser.key <span style=\"color:#ae81ff\">4096<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>openssl req -new -key appuser.key -out appuser.csr <span style=\"color:#ae81ff\">\\\n<\/span><\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#ae81ff\"><\/span>  -subj <span style=\"color:#e6db74\">&#34;\/C=US\/ST=State\/L=City\/O=Org\/OU=OrgUnit\/CN=appuser&#34;<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>openssl x509 -req -days <span style=\"color:#ae81ff\">365<\/span> -in appuser.csr <span style=\"color:#ae81ff\">\\\n<\/span><\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#ae81ff\"><\/span>  -CA server.crt -CAkey server.key -CAcreateserial -out appuser.crt\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Set permissions<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>chown postgres:postgres *.crt *.key\n<\/span><\/span><span style=\"display:flex;\"><span>chmod <span style=\"color:#ae81ff\">600<\/span> *.key\n<\/span><\/span><span style=\"display:flex;\"><span>chmod <span style=\"color:#ae81ff\">644<\/span> *.crt\n<\/span><\/span><\/code><\/pre><\/div><h3 id=\"2-configure-postgresql-ssl-settings\">2. Configure PostgreSQL SSL Settings<\/h3>\n<p>Add to <code>postgresql.conf<\/code>:<\/p>"},{"title":"PostgreSQL 18 Beta 1 Summary","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/2025-05-27-pg18-beta-1\/","pubDate":"Tue, 27 May 2025 00:00:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/2025-05-27-pg18-beta-1\/","description":"<h1 id=\"postgresql-18-beta-1---new-features-and-breaking-changes\">PostgreSQL 18 Beta 1 - New Features and Breaking Changes<\/h1>\n<p><strong>Source<\/strong>: <a href=\"https:\/\/github.com\/nori-shinoda\/documents\/blob\/main\/postgresql_18_beta1_new_features_en_20250527-1.pdf\">GitHub - PostgreSQL 18 Beta 1 New Features<\/a><\/p>\n<h2 id=\"overview\">Overview<\/h2>\n<p>PostgreSQL 18 introduces over 200 new features and changes. This document summarizes all significant new features, improvements, and breaking changes introduced in the Beta 1 release. Meaning these features can disappear too, this is just a beta.<\/p>\n<hr>\n<h2 id=\"1-highlights-of-major-new-features\">1. Highlights of Major New Features<\/h2>\n<h3 id=\"11-adaptation-to-large-scale-environments\">1.1 Adaptation to Large Scale Environments<\/h3>\n<ul>\n<li><strong>Virtual Columns<\/strong>: Support for virtual (non-stored) columns in tables.<\/li>\n<li><strong>ONLY Clause for VACUUM\/ANALYZE<\/strong>: Now supports partitioned tables to avoid recursive partition scans.<\/li>\n<\/ul>\n<h3 id=\"12-reliability-enhancements\">1.2 Reliability Enhancements<\/h3>\n<ul>\n<li><strong><code>pg_dumpall<\/code> Output Format<\/strong>: Supports formats other than plain text.<\/li>\n<li><strong><code>pg_verifybackup<\/code> Tar Format<\/strong>: Adds support for tar format verification.<\/li>\n<\/ul>\n<h3 id=\"13-maintainability-improvements\">1.3 Maintainability Improvements<\/h3>\n<ul>\n<li><strong>Statistics Migration<\/strong>: <code>pg_dump<\/code> and <code>pg_dumpall<\/code> can now include optimizer statistics.<\/li>\n<li><strong>Functions for Stats Management<\/strong>: Added functions to set or clear optimizer stats per table\/column.\n<ul>\n<li><code>pg_restore_relation_stats<\/code>, <code>pg_clear_relation_stats<\/code>, <code>pg_restore_attribute_stats<\/code>, <code>pg_clear_attribute_stats<\/code><\/li>\n<li>Commits: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commit;h=d32d1463995c036853eeb9ec99cc367ffc7794ae\">d32d146<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3 id=\"14-programming-improvements\">1.4 Programming Improvements<\/h3>\n<ul>\n<li><strong>Access to <code>OLD<\/code> and <code>NEW<\/code> in <code>RETURNING<\/code> clause<\/strong>.<\/li>\n<li><strong>New Function<\/strong>: UUID v7 support.<\/li>\n<\/ul>\n<h3 id=\"15-preparations-for-future-features\">1.5 Preparations for Future Features<\/h3>\n<ul>\n<li><strong>Asynchronous I\/O Infrastructure<\/strong>: Introduced with <code>io_method<\/code> and <code>io_workers<\/code>.\n<ul>\n<li>Commits: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commit;h=da7226993fd4b73d8b40abb7167d124eada97f2e\">da72269<\/a><\/li>\n<\/ul>\n<\/li>\n<li><strong>NUMA Support<\/strong>: Basic infrastructure and views (<code>pg_shmem_allocations_numa<\/code>).\n<ul>\n<li>Commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commit;h=8cc139bec34a2971b0682a04eb52ce7b3f5bb425\">8cc139b<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<hr>\n<h2 id=\"2-breaking-changes--incompatibilities\">2. Breaking Changes &amp; Incompatibilities<\/h2>\n<h3 id=\"21-platform--tool-support\">2.1 Platform &amp; Tool Support<\/h3>\n<ul>\n<li>Dropped support for: PA-RISC, LLVM &lt; 14, OpenSSL &lt; 1.1.1, Python &lt; 3.6.8.<\/li>\n<li>Added support: Tcl 9.<\/li>\n<\/ul>\n<h3 id=\"22-passwords\">2.2 Passwords<\/h3>\n<ul>\n<li><strong>MD5 passwords<\/strong>: Now deprecated; warning shown by default.\n<ul>\n<li>Commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commit;h=db6a4a985bc09d260d5c29848e3c97f080646a53\">db6a4a9<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3 id=\"23-configuration\">2.3 Configuration<\/h3>\n<ul>\n<li>Removed <code>--disable-spin-locks<\/code> and <code>--disable-atomics<\/code>.\n<ul>\n<li>Commits: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commit;h=e25626677f8076eb3ce94586136c5464ee154381\">e256266<\/a><\/li>\n<\/ul>\n<\/li>\n<li><code>initdb<\/code> now enables data checksums by default.\n<ul>\n<li>Commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commit;h=04bec894a04cb0d32533f1522ab81b7016141ff1\">04bec89<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3 id=\"24-sql--ddl-statements\">2.4 SQL &amp; DDL Statements<\/h3>\n<ul>\n<li><strong>COPY FREEZE<\/strong>: Disallowed on foreign tables.\n<ul>\n<li>Commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commit;h=401a6956fa69c9202cbc14c09ba8a9c430b90cac\">401a695<\/a><\/li>\n<\/ul>\n<\/li>\n<li><strong>EXPLAIN<\/strong>: <code>BUFFERS<\/code> enabled by default.\n<ul>\n<li>Commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commit;h=c2a4078ebad71999dd451ae7d4358be3c9290b07\">c2a4078<\/a><\/li>\n<\/ul>\n<\/li>\n<li><strong>CREATE SUBSCRIPTION<\/strong>: Default <code>streaming<\/code> = <code>parallel<\/code>.\n<ul>\n<li>Commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commit;h=1bf1140be87230c71d0e7b29939f7e2b3d073aa1\">1bf1140<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<hr>\n<h2 id=\"3-architecture-changes\">3. Architecture Changes<\/h2>\n<h3 id=\"31-catalog-changes\">3.1 Catalog Changes<\/h3>\n<ul>\n<li><strong>New Views<\/strong>: <code>pg_aios<\/code>, <code>pg_shmem_allocations_numa<\/code><\/li>\n<li><strong>Added Columns<\/strong>: Many views now include additional metadata, such as constraint enforcement flags, VACUUM\/ANALYZE timing, and I\/O stats.<\/li>\n<\/ul>\n<h3 id=\"32-logical-replication\">3.2 Logical Replication<\/h3>\n<ul>\n<li>Logs detailed conflict types like <code>insert_exists<\/code>, <code>update_differ<\/code>, <code>delete_missing<\/code>.\n<ul>\n<li>Commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commit;h=9758174e2e5cd278cf37e0980da76b51890e0011\">9758174<\/a><\/li>\n<\/ul>\n<\/li>\n<li>Propagation of generated columns via <code>publish_generated_columns<\/code>.\n<ul>\n<li>Commit: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commit;h=7054186c4ebe24e63254651e2ae9b36efae90d4e\">7054186<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3 id=\"33-storage-io-enhancements\">3.3 Storage I\/O Enhancements<\/h3>\n<ul>\n<li><strong>Streaming I\/O<\/strong>: Broadened scope to VACUUM, CREATE DATABASE, GiST\/SP-GiST, etc.<\/li>\n<li><strong>Async I\/O<\/strong>: Controlled with <code>io_method<\/code>, can use <code>io_uring<\/code>.<\/li>\n<\/ul>\n<hr>\n<h2 id=\"4-sql-enhancements\">4. SQL Enhancements<\/h2>\n<h3 id=\"41-alter-enhancements\">4.1 ALTER Enhancements<\/h3>\n<ul>\n<li><code>ALTER CONSTRAINT SET INHERIT\/NO INHERIT<\/code><\/li>\n<li><code>ADD CONSTRAINT ... NOT VALID<\/code><\/li>\n<li><code>ALTER TABLE ONLY DROP CONSTRAINT<\/code><\/li>\n<\/ul>\n<h3 id=\"42-analyze-improvements\">4.2 ANALYZE Improvements<\/h3>\n<ul>\n<li><strong>ONLY Clause<\/strong>: Skip partitions.<\/li>\n<li><strong>Verbose Stats<\/strong>: Includes I\/O, WAL, and delay stats.<\/li>\n<\/ul>\n<hr>\n<h2 id=\"5-utilities--tooling\">5. Utilities &amp; Tooling<\/h2>\n<ul>\n<li><code>pg_combinebackup<\/code>, <code>pg_createsubscriber<\/code>: New utilities.<\/li>\n<li><code>pg_stat_io<\/code>: Combines WAL and I\/O metrics.<\/li>\n<li><code>psql \\conninfo<\/code>: More detailed output.<\/li>\n<\/ul>\n<hr>\n<h2 id=\"6-contrib-modules\">6. Contrib Modules<\/h2>\n<p>Highlights:<\/p>"},{"title":"JetBrains Junie: Is It Better Than Other AI Coding Assistants?","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/2025-05-17-junie\/","pubDate":"Sat, 17 May 2025 00:00:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/2025-05-17-junie\/","description":"<h2 id=\"my-journey-with-junie-a-game-changer-for-developers\">My Journey with Junie: A Game-Changer for Developers<\/h2>\n<p>Over the past three weeks, I&rsquo;ve been extensively using JetBrains Junie, and I&rsquo;m genuinely impressed with how it has transformed my development workflow. In this short period, I&rsquo;ve successfully implemented three significant features with remarkable ease. Based on my experience, Junie offers capabilities that go well beyond what GitHub Copilot provides.<\/p>\n<h3 id=\"the-ai-coding-assistant-landscape\">The AI Coding Assistant Landscape<\/h3>\n<p>I&rsquo;ve been using GitHub Copilot in JetBrains Rider for about a year now. It&rsquo;s undeniably a helpful tool - whenever I get stuck, I can ask Copilot for assistance. I&rsquo;ve also experimented with various other LLM models; Sonnet 3.7&rsquo;s thinking mode has been particularly effective at generating quality code.<\/p>"},{"title":"From Istanbul to Wroc\u0142aw: A Journey of Growth, Grit, and Java Logs","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/2025-05-15-credit-suisse\/","pubDate":"Thu, 15 May 2025 00:00:00 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/2025-05-15-credit-suisse\/","description":"<p>In <strong>July 2015<\/strong>, I packed my bags and left Istanbul for a new chapter in <strong>Wroc\u0142aw, Poland<\/strong>, to join <strong>Credit Suisse<\/strong>. It was a hot summer. I couldn\u2019t afford a direct flight, so I flew to Berlin and took a bus to Wroc\u0142aw. I was excited-and nervous. It was my first time living outside of Turkiye, and I was about to work for a bank I had never heard of before.<\/p>"},{"title":"Install debian 12 on old huawei matebook","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/2025-05-10-debian12\/","pubDate":"Sat, 10 May 2025 00:00:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/2025-05-10-debian12\/","description":"<p>I have an old Huawei laptop that was originally running Windows 10. Then moved to 11 With only 8GB of memory, the system was painfully slow, just browsing internet quite frustrating. I initially considered switching to Linux Mate, but then decided to give Debian 12 a try. I used Debian between 2004 to 2015 so I know how good it is.<\/p>\n<p>I downloaded the minimal USB stick image of Debian 12 from <a href=\"https:\/\/www.debian.org\/distrib\/netinst\">here<\/a> and started the installation process. The entire installation took only about 40 minutes, which was surprisingly quick.<\/p>"},{"title":"Exploring Hugo: A Faster Alternative to Jekyll for Static Sites","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/2025-05-10-gohugo\/","pubDate":"Sat, 10 May 2025 00:00:00 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/2025-05-10-gohugo\/","description":"<p>For years, I\u2019ve been using <a href=\"https:\/\/jekyllrb.com\/\">Jekyll<\/a> to power my blog at <a href=\"https:\/\/ozkanpakdil.github.io\/\">ozkanpakdil.github.io<\/a>. It has served me well in production, but setting it up on Windows for local testing has always been a bit of a headache. Even with WSL, the process is sluggish, making experimentation and quick iterations more cumbersome than I\u2019d like.<\/p>\n<p>Recently, I started thinking about creating a PostgreSQL benchmark center website, and given my past challenges with Jekyll, I decided to explore other options. That\u2019s when I discovered <a href=\"https:\/\/gohugo.io\/\">Hugo<\/a>, a static site generator built with Go. I went ahead and created the site under GitHub Pages at <a href=\"https:\/\/pgbench.github.io\/\">pgbench.github.io<\/a>, and the difference in speed was immediately noticeable.<\/p>"},{"title":"A Retrospective on High-Traffic Systems, Garbage Collection Battles, and the Rise of G1","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/2025-05-04-turkcell\/","pubDate":"Sun, 04 May 2025 00:00:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/2025-05-04-turkcell\/","description":"<h2 id=\"prologue-the-era-of-weblogic-and-apache-mod_weblogic\">Prologue: The Era of WebLogic and Apache Mod_WebLogic<\/h2>\n<p>It was 2012. Turkcell, Turkey\u2019s largest mobile operator, had 15 million subscribers, and the pressure was on. As part of the operations team for <a href=\"https:\/\/www.turkcell.com.tr\">www.turkcell.com.tr<\/a>, I managed a labyrinth of infrastructure: 10 strong\nlinux servers which had Weblogic installed humming behind Apache mod_weblogic proxies, serving dynamic requests while Apache handled static content. The e-commerce platform, Turkcell Shop, was my responsibility-where a\nsingle GC pause during peak traffic could mean thousands of failed transactions and angry customers.<\/p>"},{"title":"What is fail2ban why we all should use it if we have a server open to the internet","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/2025-04-13-fail2ban\/","pubDate":"Sun, 13 Apr 2025 00:00:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/2025-04-13-fail2ban\/","description":"<p>I am using Fail2Ban for around 12 years now, maybe more. It started back when ssh brute-forcing script kiddies were everywhere. Who are they? They are people or machines scanning all IPs on the internet, and if they find an open SSH port, they start doing brute force password attacks. They do this for MySQL, PostgreSQL, or basically any open port. If there is a possibility of username\/password login, someone will try to get in.<\/p>"},{"title":"How to check which port are open for connection on remote server","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/2025-03-13-check-ports\/","pubDate":"Thu, 13 Mar 2025 00:00:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/2025-03-13-check-ports\/","description":"<p>Today I needed to check which ports are open on a remote server to ensure that the services I need are running and accessible. Here are a few ways to check which ports are open on a remote server:<\/p>\n<h2 id=\"telnet\">Telnet<\/h2>\n<p>Telnet is a command-line tool that can be used to check if a port is open on a remote server. You can use the following command to check if a port is open:<\/p>"},{"title":"Handling Concurrent API Calls in Spring Boot","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/2025-02-20-handling-concurrent-api-calls-in-spring-boot\/","pubDate":"Thu, 20 Feb 2025 00:00:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/2025-02-20-handling-concurrent-api-calls-in-spring-boot\/","description":"<p>When building Spring Boot applications, handling concurrent API calls efficiently is crucial to ensure optimal performance and scalability. Here are a few approaches to manage concurrent read and write operations:<\/p>\n<h3 id=\"handling-concurrent-read-api-calls\">Handling Concurrent Read API Calls<\/h3>\n<h4 id=\"asynchronous-methods\">Asynchronous Methods<\/h4>\n<p>Using <code>@Async<\/code> at <code>@Service<\/code> annotation and enabling asynchronous processing can help handle multiple API calls concurrently.<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-java\" data-lang=\"java\"><span style=\"display:flex;\"><span><span style=\"color:#a6e22e\">@Async<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">public<\/span> CompletableFuture<span style=\"color:#f92672\">&lt;<\/span>String<span style=\"color:#f92672\">&gt;<\/span> <span style=\"color:#a6e22e\">asyncMethod<\/span>() {\n<\/span><\/span><span style=\"display:flex;\"><span>    <span style=\"color:#75715e\">\/\/ Call external API<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>    <span style=\"color:#66d9ef\">return<\/span> CompletableFuture.<span style=\"color:#a6e22e\">completedFuture<\/span>(<span style=\"color:#e6db74\">&#34;Result&#34;<\/span>);\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><\/code><\/pre><\/div><h4 id=\"webclient-with-reactor\">WebClient with Reactor<\/h4>\n<p>Spring WebFlux&rsquo;s WebClient allows for reactive programming, making it easier to handle multiple API calls.<\/p>"},{"title":"How to fine-tune PostgreSQL fill factor","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/2025-02-18-how-to-fine-tune-postgresql-fill-factor\/","pubDate":"Tue, 18 Feb 2025 00:00:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/2025-02-18-how-to-fine-tune-postgresql-fill-factor\/","description":"<p>Fine tuning and optimizing the fill factor in PostgreSQL can significantly impact the performance of your database. The fill factor is a parameter that determines the percentage of a data page to be filled with rows, leaving space for future updates to minimize page splits and improve performance on frequently updated tables. By adjusting the fill factor, you can optimize storage efficiency and reduce the overhead of page splits.<\/p>\n<p>To fine-tune the fillfactor for tables and indexes, consider the following:<\/p>"},{"title":"What is Fill Factor in PostgreSQL","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/2025-02-18-create-select-postgresql-fill-factor\/","pubDate":"Tue, 18 Feb 2025 00:00:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/2025-02-18-create-select-postgresql-fill-factor\/","description":"<p>Fillfactor in PostgreSQL is a parameter that sets the percentage of a data page to be filled with rows, leaving space for future updates to minimize page splits and improve performance on frequently updated tables. If you are having a table with a lot of updates, you can set the fillfactor to a lower value to leave space for future updates. The default fillfactor is 100, which means that the table is completely packed with rows.<\/p>"},{"title":"What is load balancing and how to do it on client side","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/2025-01-09-client-load-balancing\/","pubDate":"Thu, 09 Jan 2025 00:00:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/2025-01-09-client-load-balancing\/","description":"<p>&ldquo;Load balancing&rdquo; can be explained as maintaining any workload. For example if you have to serve 1000 breakfast in the morning you can divide the work among 2-3 or more caterers to lower the delivery\/preparation time.<\/p>\n<p>In the computer world, same logic applies, if you want to deliver fast, you can divide the work, for example for a website we can have 5-10 webserver, this way website will be delivered faster(especially during high traffic), this is server side.<\/p>"},{"title":"How to find java app hosting(ISP) or How to deploy Spring Boot website to Koyeb","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/2025-01-01-deploy-spring-boot-to-cloud-koyeb\/","pubDate":"Wed, 01 Jan 2025 00:00:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2025\/2025-01-01-deploy-spring-boot-to-cloud-koyeb\/","description":"<p>Spring boot is the most famous java framework, and I have been looking for a simple way to serve a java app on a hosting service(not dedicated which is very expensive not AWS\/Azure which are too complicated), Most shared hosting does not support java apps, they support php or asp or perl <a href=\"https:\/\/archive.ph\/iu7QS\">here<\/a> is the table for godaddy webhosting supported tech.<\/p>\n<p>I will explain how to deploy from dockerhub to Koyeb, or we can deploy from github repository too.<\/p>"},{"title":"How to deploy old php website to koyeb","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2024\/2024-12-25-deploy-php-cloud-koyeb\/","pubDate":"Wed, 25 Dec 2024 00:00:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2024\/2024-12-25-deploy-php-cloud-koyeb\/","description":"<p>I have <a href=\"https:\/\/sifavi.com\/\">this<\/a> side project with me since 2007, it is an one file php website with sqlite db and some pictures and js and css. I am keeping it just to monitor sometime how are the things at php side.<\/p>\n<p>Anyway when I first build up this site I was using shared hosting, and in time I moved to dedicated server and today I decided to move to koyeb.com which is a nice cloud provider.<\/p>"},{"title":"How to containerize a rust warp app","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2024\/2024-12-23-containerize-rust-server\/","pubDate":"Mon, 23 Dec 2024 00:00:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2024\/2024-12-23-containerize-rust-server\/","description":"<p>I wrote this <a href=\"https:\/\/github.com\/ozkanpakdil\/rust-examples\/tree\/main\/arti_whois\">arti warp server<\/a> for running whois via TOR network, <a href=\"https:\/\/docs.rs\/arti\/latest\/arti\/\">Arti<\/a> is CLI tool which has <code>arti_client<\/code> library inside for connecting the network, my main target to dockerize this for easy deploy to koyeb.com<\/p>\n<ol>\n<li>I used <code>docker init<\/code> to create <a href=\"https:\/\/github.com\/ozkanpakdil\/rust-examples\/blob\/main\/arti_whois\/Dockerfile\">Dockerfile<\/a> and others and changed the implementation little bit because of some special dependencies<\/li>\n<\/ol>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-dockerfile\" data-lang=\"dockerfile\"><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">ARG<\/span> RUST_VERSION<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>.82.0<span style=\"color:#960050;background-color:#1e0010\">\n<\/span><\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#960050;background-color:#1e0010\"><\/span><span style=\"color:#66d9ef\">ARG<\/span> APP_NAME<span style=\"color:#f92672\">=<\/span>arti_whois\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">FROM<\/span><span style=\"color:#e6db74\"> rust:${RUST_VERSION}-alpine AS build<\/span><span style=\"color:#960050;background-color:#1e0010\">\n<\/span><\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#960050;background-color:#1e0010\"><\/span><span style=\"color:#66d9ef\">ARG<\/span> APP_NAME<span style=\"color:#960050;background-color:#1e0010\">\n<\/span><\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#960050;background-color:#1e0010\"><\/span><span style=\"color:#66d9ef\">WORKDIR<\/span><span style=\"color:#e6db74\"> \/app<\/span><span style=\"color:#960050;background-color:#1e0010\">\n<\/span><\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#960050;background-color:#1e0010\">\n<\/span><\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#960050;background-color:#1e0010\"><\/span><span style=\"color:#75715e\"># Install host build dependencies.<\/span><span style=\"color:#960050;background-color:#1e0010\">\n<\/span><\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#960050;background-color:#1e0010\"><\/span><span style=\"color:#66d9ef\">RUN<\/span> apk add --no-cache clang lld musl-dev git openssl-dev openssl libssl3 libcrypto3 libgcrypt openssl-libs-static ca-certificates<span style=\"color:#960050;background-color:#1e0010\">\n<\/span><\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#960050;background-color:#1e0010\">\n<\/span><\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#960050;background-color:#1e0010\"><\/span><span style=\"color:#66d9ef\">RUN<\/span> --mount<span style=\"color:#f92672\">=<\/span>type<span style=\"color:#f92672\">=<\/span>bind,source<span style=\"color:#f92672\">=<\/span>src,target<span style=\"color:#f92672\">=<\/span>src <span style=\"color:#ae81ff\">\\\n<\/span><\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#ae81ff\"><\/span>--mount<span style=\"color:#f92672\">=<\/span>type<span style=\"color:#f92672\">=<\/span>bind,source<span style=\"color:#f92672\">=<\/span>Cargo.toml,target<span style=\"color:#f92672\">=<\/span>Cargo.toml <span style=\"color:#ae81ff\">\\\n<\/span><\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#ae81ff\"><\/span>--mount<span style=\"color:#f92672\">=<\/span>type<span style=\"color:#f92672\">=<\/span>bind,source<span style=\"color:#f92672\">=<\/span>Cargo.lock,target<span style=\"color:#f92672\">=<\/span>Cargo.lock <span style=\"color:#ae81ff\">\\\n<\/span><\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#ae81ff\"><\/span>--mount<span style=\"color:#f92672\">=<\/span>type<span style=\"color:#f92672\">=<\/span>cache,target<span style=\"color:#f92672\">=<\/span>\/app\/target\/ <span style=\"color:#ae81ff\">\\\n<\/span><\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#ae81ff\"><\/span>--mount<span style=\"color:#f92672\">=<\/span>type<span style=\"color:#f92672\">=<\/span>cache,target<span style=\"color:#f92672\">=<\/span>\/usr\/local\/cargo\/git\/db <span style=\"color:#ae81ff\">\\\n<\/span><\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#ae81ff\"><\/span>--mount<span style=\"color:#f92672\">=<\/span>type<span style=\"color:#f92672\">=<\/span>cache,target<span style=\"color:#f92672\">=<\/span>\/usr\/local\/cargo\/registry\/ <span style=\"color:#ae81ff\">\\\n<\/span><\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#ae81ff\"><\/span>cargo build --locked --release <span style=\"color:#f92672\">&amp;&amp;<\/span> <span style=\"color:#ae81ff\">\\\n<\/span><\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#ae81ff\"><\/span>cp .\/target\/release\/$APP_NAME \/bin\/server<span style=\"color:#960050;background-color:#1e0010\">\n<\/span><\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#960050;background-color:#1e0010\">\n<\/span><\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#960050;background-color:#1e0010\"><\/span><span style=\"color:#66d9ef\">FROM<\/span><span style=\"color:#e6db74\"> alpine:3.18 AS final<\/span><span style=\"color:#960050;background-color:#1e0010\">\n<\/span><\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#960050;background-color:#1e0010\">\n<\/span><\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#960050;background-color:#1e0010\"><\/span><span style=\"color:#66d9ef\">USER<\/span><span style=\"color:#e6db74\"> root<\/span><span style=\"color:#960050;background-color:#1e0010\">\n<\/span><\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#960050;background-color:#1e0010\"><\/span><span style=\"color:#66d9ef\">COPY<\/span> --from<span style=\"color:#f92672\">=<\/span>build \/bin\/server \/bin\/<span style=\"color:#960050;background-color:#1e0010\">\n<\/span><\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#960050;background-color:#1e0010\">\n<\/span><\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#960050;background-color:#1e0010\"><\/span><span style=\"color:#66d9ef\">EXPOSE<\/span><span style=\"color:#e6db74\"> 8016<\/span><span style=\"color:#960050;background-color:#1e0010\">\n<\/span><\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#960050;background-color:#1e0010\">\n<\/span><\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#960050;background-color:#1e0010\"><\/span><span style=\"color:#66d9ef\">ENV<\/span> RUST_BACKTRACE<span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">1<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">ENV<\/span> RUST_LOG<span style=\"color:#f92672\">=<\/span>debug\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">CMD<\/span> [<span style=\"color:#e6db74\">&#34;\/bin\/server&#34;<\/span>]<span style=\"color:#960050;background-color:#1e0010\">\n<\/span><\/span><\/span><\/code><\/pre><\/div><p><code>apk add<\/code> part took a while to figure out because on every run, compile was failing with different error, I needed to install all the dev lib dependencies to the alpine linux\n2. Test with <code>docker compose up --build<\/code> until everything is fine. I was using curl for testing the app <code>curl &quot;localhost:8016\/whois?ip=1.1.1.1&quot; -v<\/code>\n3. Than <code>docker push ozkanpakdil\/arti_whois<\/code> to push it to docker repository<\/p>"},{"title":"JetBrains developer stats of 2024","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2024\/2024-12-23-jetbrains-developer-startistics\/","pubDate":"Mon, 23 Dec 2024 00:00:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2024\/2024-12-23-jetbrains-developer-startistics\/","description":"<p>Here is a summary of JetBrains <a href=\"https:\/\/www.jetbrains.com\/lp\/devecosystem-2024\/\">developer stats of 2024<\/a>.<\/p>\n<p>Java and Javascript are going down and Typescript and Rust are going up<\/p>\n<p><img alt=\"Which programming languages have you used in the last 12 months?\" loading=\"lazy\" src=\"https:\/\/github.com\/user-attachments\/assets\/9adbe5e3-ccee-4a99-b29e-a72f002d7751\"><\/p>\n<p>most used lang %61 javascript<\/p>\n<p><img alt=\"image\" loading=\"lazy\" src=\"https:\/\/github.com\/user-attachments\/assets\/1feca465-9a94-48cb-8bf4-f6717565f488\"><\/p>\n<p>Unexpectedly WebAssembly is growing strong<\/p>\n<p><img alt=\"On which platforms is your code executed?\" loading=\"lazy\" src=\"https:\/\/github.com\/user-attachments\/assets\/c6b3f736-d63f-4284-bca1-e29694c1e0f3\"><\/p>\n<p>Most popular db is MySql and second PostgresSQL \ud83e\udd73<\/p>\n<p><img alt=\"Which databases have you used in the last 12 months, if any?\" loading=\"lazy\" src=\"https:\/\/github.com\/user-attachments\/assets\/0d6be1b7-4fc1-47e9-999b-f15528ee3053\"><\/p>"},{"title":"How to generate a Aurora Postgresql cluster with all auto explain enabled","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2024\/2024-12-11-aurora-autoexplain-postgresql\/","pubDate":"Wed, 11 Dec 2024 00:00:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2024\/2024-12-11-aurora-autoexplain-postgresql\/","description":"<p>PostgreSQL has query execution plans configured as extension, meaning they do not come out of the box we need to configure it, For on-prem or owning server you can check this <a href=\"https:\/\/archive.ph\/wip\/508Hn\">link<\/a> which tells how to configure it. Problem is there are so many steps. And it is confusing for AWS Aurora<\/p>\n<p>I wrote a small bash script <a href=\"https:\/\/gist.github.com\/ozkanpakdil\/63e961c40a10be5bf448a2baa21d625a\">Here<\/a> just to make this work automatic. <a href=\"https:\/\/gist.github.com\/ozkanpakdil\/af65c5af6b4d60126d041462374ba355\">Here<\/a> is powershell version<\/p>\n<ul>\n<li>SubnetGroupName -&gt; AWS subnet name for connecting which has all the configuration ready<\/li>\n<li>$psqlPath = &ldquo;C:\\tools\\postgresql-16.6-2\\pgsql\\bin\\psql.exe&rdquo; -&gt; user should have psql in the machine and change the path accordingly<\/li>\n<li>Before starting it, user should have aws secret and keys defined in their env variables, explained <a href=\"https:\/\/docs.aws.amazon.com\/cli\/latest\/userguide\/cli-configure-envvars.html?icmpid=docs_sso_user_portal\">here<\/a><\/li>\n<\/ul>\n<script src=\"https:\/\/gist.github.com\/ozkanpakdil\/63e961c40a10be5bf448a2baa21d625a.js\"><\/script>\n<p>After successful execution you should see the test cluster like below, and you can check logs to see how execution plans are created.<\/p>"},{"title":"HashMap collisions and how JDK handles it","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2024\/2024-11-27-java-hashmap-collisions\/","pubDate":"Wed, 27 Nov 2024 00:00:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2024\/2024-11-27-java-hashmap-collisions\/","description":"<p>I was thinking on this question <code>How does HashMap handle collisions internally? What changes were introduced in Java 8 for its implementation?<\/code>\nand reading <a href=\"https:\/\/www.baeldung.com\/java-hashmap-advanced\">this blog<\/a> says<\/p>\n<blockquote>\n<p>On a final note, from Java 8, the linked lists are dynamically replaced with balanced binary search trees in collision resolution after the number of collisions in a given bucket location exceed a certain threshold.<\/p><\/blockquote>\n<p>Than I wonder how it works and went and found the <a href=\"https:\/\/github.com\/openjdk\/jdk\/blob\/9527586923d1e7d47d06456ed100a3d123e7a6d2\/src\/java.base\/share\/classes\/java\/util\/HashMap.java#L139\">source code of hash map<\/a> in openjdk. It is a very long class, almost 2600 lines, but so many comments \ud83e\udd13 it is not very common to see this much comment in a java code, anyway then I start reading it and wanted to note down how it behaves on collusion<\/p>"},{"title":"FFM (Foreign Function and Memory) Stdlib Example","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2024\/2024-11-11-java-ffm-stdlib\/","pubDate":"Mon, 11 Nov 2024 00:00:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2024\/2024-11-11-java-ffm-stdlib\/","description":"<p>FFM is the new API trying to replace JNI and jep is <a href=\"https:\/\/openjdk.org\/jeps\/434\">here<\/a> It is basically calling functions outside of JVM or accessing memory not managed by JVM. I wanted to test can FFM beat regular Java API, below you can find a simple test doing math sin with FFM and with regular <code>Math.sin<\/code><\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-java\" data-lang=\"java\"><span style=\"display:flex;\"><span><span style=\"color:#f92672\">import<\/span> java.lang.foreign.FunctionDescriptor;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#f92672\">import<\/span> java.lang.foreign.Linker;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#f92672\">import<\/span> java.lang.foreign.MemorySegment;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#f92672\">import<\/span> java.lang.foreign.SymbolLookup;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#f92672\">import<\/span> java.lang.foreign.ValueLayout;\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">public<\/span> <span style=\"color:#66d9ef\">class<\/span> <span style=\"color:#a6e22e\">FFMSinTest<\/span> {\n<\/span><\/span><span style=\"display:flex;\"><span>    <span style=\"color:#66d9ef\">public<\/span> <span style=\"color:#66d9ef\">static<\/span> <span style=\"color:#66d9ef\">void<\/span> <span style=\"color:#a6e22e\">main<\/span>(String<span style=\"color:#f92672\">[]<\/span> args) <span style=\"color:#66d9ef\">throws<\/span> Throwable {\n<\/span><\/span><span style=\"display:flex;\"><span>        Linker linker <span style=\"color:#f92672\">=<\/span> Linker.<span style=\"color:#a6e22e\">nativeLinker<\/span>();\n<\/span><\/span><span style=\"display:flex;\"><span>        SymbolLookup stdlib <span style=\"color:#f92672\">=<\/span> linker.<span style=\"color:#a6e22e\">defaultLookup<\/span>();\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>        <span style=\"color:#75715e\">\/\/ Locate the &#34;sin&#34; function in the C math library<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>        MemorySegment sinAddress <span style=\"color:#f92672\">=<\/span> stdlib.<span style=\"color:#a6e22e\">find<\/span>(<span style=\"color:#e6db74\">&#34;sin&#34;<\/span>).<span style=\"color:#a6e22e\">orElseThrow<\/span>();\n<\/span><\/span><span style=\"display:flex;\"><span>        FunctionDescriptor descriptor <span style=\"color:#f92672\">=<\/span> FunctionDescriptor.<span style=\"color:#a6e22e\">of<\/span>(ValueLayout.<span style=\"color:#a6e22e\">JAVA_DOUBLE<\/span>, ValueLayout.<span style=\"color:#a6e22e\">JAVA_DOUBLE<\/span>);\n<\/span><\/span><span style=\"display:flex;\"><span>        <span style=\"color:#66d9ef\">var<\/span> sinHandle <span style=\"color:#f92672\">=<\/span> linker.<span style=\"color:#a6e22e\">downcallHandle<\/span>(sinAddress, descriptor);\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>        <span style=\"color:#66d9ef\">double<\/span> angle <span style=\"color:#f92672\">=<\/span> Math.<span style=\"color:#a6e22e\">PI<\/span> <span style=\"color:#f92672\">\/<\/span> 4;  <span style=\"color:#75715e\">\/\/ 45 degrees in radians<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>        <span style=\"color:#75715e\">\/\/ Timing Java&#39;s Math.sin()<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>        <span style=\"color:#66d9ef\">long<\/span> javaStartTime <span style=\"color:#f92672\">=<\/span> System.<span style=\"color:#a6e22e\">nanoTime<\/span>();\n<\/span><\/span><span style=\"display:flex;\"><span>        <span style=\"color:#66d9ef\">for<\/span> (<span style=\"color:#66d9ef\">int<\/span> i <span style=\"color:#f92672\">=<\/span> 0; i <span style=\"color:#f92672\">&lt;<\/span> 1_000_000; i<span style=\"color:#f92672\">++<\/span>) {\n<\/span><\/span><span style=\"display:flex;\"><span>            <span style=\"color:#66d9ef\">double<\/span> result <span style=\"color:#f92672\">=<\/span> Math.<span style=\"color:#a6e22e\">sin<\/span>(angle);\n<\/span><\/span><span style=\"display:flex;\"><span>        }\n<\/span><\/span><span style=\"display:flex;\"><span>        <span style=\"color:#66d9ef\">long<\/span> javaEndTime <span style=\"color:#f92672\">=<\/span> System.<span style=\"color:#a6e22e\">nanoTime<\/span>();\n<\/span><\/span><span style=\"display:flex;\"><span>        <span style=\"color:#66d9ef\">long<\/span> javaDuration <span style=\"color:#f92672\">=<\/span> javaEndTime <span style=\"color:#f92672\">-<\/span> javaStartTime;\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>        <span style=\"color:#75715e\">\/\/ Timing C sin via FFM<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>        <span style=\"color:#66d9ef\">long<\/span> ffmStartTime <span style=\"color:#f92672\">=<\/span> System.<span style=\"color:#a6e22e\">nanoTime<\/span>();\n<\/span><\/span><span style=\"display:flex;\"><span>        <span style=\"color:#66d9ef\">for<\/span> (<span style=\"color:#66d9ef\">int<\/span> i <span style=\"color:#f92672\">=<\/span> 0; i <span style=\"color:#f92672\">&lt;<\/span> 1_000_000; i<span style=\"color:#f92672\">++<\/span>) {\n<\/span><\/span><span style=\"display:flex;\"><span>            <span style=\"color:#66d9ef\">double<\/span> result <span style=\"color:#f92672\">=<\/span> (<span style=\"color:#66d9ef\">double<\/span>) sinHandle.<span style=\"color:#a6e22e\">invoke<\/span>(angle);\n<\/span><\/span><span style=\"display:flex;\"><span>        }\n<\/span><\/span><span style=\"display:flex;\"><span>        <span style=\"color:#66d9ef\">long<\/span> ffmEndTime <span style=\"color:#f92672\">=<\/span> System.<span style=\"color:#a6e22e\">nanoTime<\/span>();\n<\/span><\/span><span style=\"display:flex;\"><span>        <span style=\"color:#66d9ef\">long<\/span> ffmDuration <span style=\"color:#f92672\">=<\/span> ffmEndTime <span style=\"color:#f92672\">-<\/span> ffmStartTime;\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>        System.<span style=\"color:#a6e22e\">out<\/span>.<span style=\"color:#a6e22e\">println<\/span>(<span style=\"color:#e6db74\">&#34;Java Math.sin() took: &#34;<\/span> <span style=\"color:#f92672\">+<\/span> javaDuration <span style=\"color:#f92672\">\/<\/span> 1_000_000.<span style=\"color:#a6e22e\">0<\/span> <span style=\"color:#f92672\">+<\/span> <span style=\"color:#e6db74\">&#34; ms&#34;<\/span>);\n<\/span><\/span><span style=\"display:flex;\"><span>        System.<span style=\"color:#a6e22e\">out<\/span>.<span style=\"color:#a6e22e\">println<\/span>(<span style=\"color:#e6db74\">&#34;C sin (FFM) took: &#34;<\/span> <span style=\"color:#f92672\">+<\/span> ffmDuration <span style=\"color:#f92672\">\/<\/span> 1_000_000.<span style=\"color:#a6e22e\">0<\/span> <span style=\"color:#f92672\">+<\/span> <span style=\"color:#e6db74\">&#34; ms&#34;<\/span>);\n<\/span><\/span><span style=\"display:flex;\"><span>    }\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><\/code><\/pre><\/div><p>And result is<\/p>"},{"title":"How to disable win11 startmenu internet search","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2024\/2024-11-07-disable-win11-startmenu-internet-search\/","pubDate":"Thu, 07 Nov 2024 00:00:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2024\/2024-11-07-disable-win11-startmenu-internet-search\/","description":"<p>Whenever I search anything on the start menu it triggers an internet search at the back and brings some results and suggestions from web, I use browser to do internet things, when we start mixing that to regular windows programs that slows down the computer, and I do not like slow windows. Below you can find a way to disable that online search.<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-shell\" data-lang=\"shell\"><span style=\"display:flex;\"><span>@echo off\n<\/span><\/span><span style=\"display:flex;\"><span>:: Check <span style=\"color:#66d9ef\">if<\/span> running as administrator\n<\/span><\/span><span style=\"display:flex;\"><span>net session &gt;nul 2&gt;&amp;<span style=\"color:#ae81ff\">1<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">if<\/span> %errorLevel% NEQ <span style=\"color:#ae81ff\">0<\/span> <span style=\"color:#f92672\">(<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>    echo Requesting administrator privileges...\n<\/span><\/span><span style=\"display:flex;\"><span>    powershell -Command <span style=\"color:#e6db74\">&#34;Start-Process &#39;%0&#39; -Verb RunAs&#34;<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>    exit \/b\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#f92672\">)<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>REM Disable Search the Web in Windows <span style=\"color:#ae81ff\">11<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>REM Create the registry key <span style=\"color:#66d9ef\">if<\/span> it doesn<span style=\"color:#960050;background-color:#1e0010\">&#39;<\/span>t exist\n<\/span><\/span><span style=\"display:flex;\"><span>reg add <span style=\"color:#e6db74\">&#34;HKCU\\Software\\Policies\\Microsoft\\Windows\\Explorer&#34;<\/span> \/f\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>REM Set DisableSearchBoxSuggestions to <span style=\"color:#ae81ff\">1<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>reg add <span style=\"color:#e6db74\">&#34;HKCU\\Software\\Policies\\Microsoft\\Windows\\Explorer&#34;<\/span> \/v DisableSearchBoxSuggestions \/t REG_DWORD \/d <span style=\"color:#ae81ff\">1<\/span> \/f\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>echo <span style=\"color:#e6db74\">&#34;Search the Web in Windows 11 has been disabled. Please sign out and sign back in to apply changes.&#34;<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>pause\n<\/span><\/span><\/code><\/pre><\/div><p>Put this script into any .bat file and run it in windows11 and logoff login or restart your machine and start menu works faster after that. It still search in the computer that maybe disabled too but that is for another blog post.<\/p>"},{"title":"How to Use Lunr.js for Searching in a Jekyll Blog","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2024\/2024-11-05-jekyll-search\/","pubDate":"Tue, 05 Nov 2024 00:00:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2024\/2024-11-05-jekyll-search\/","description":"<p>I have been using <a href=\"https:\/\/programmablesearchengine.google.com\/controlpanel\/all\">Google Programmable Search Engine<\/a> on my blog, but I found that it doesn\u2019t work quite as I expected. First, I tried Bing and DuckDuckGo as alternatives, but none of them performed as desired. DuckDuckGo\u2019s API is nice, but it lacks a &lsquo;site:&rsquo; filter, which prevented it from working as needed.<\/p>\n<p>Here are the steps to set up a Jekyll search system using Lunr.js for GitHub Pages(github.io):<\/p>\n<ol>\n<li>Create <code>js\/search.js<\/code> and add <a href=\"https:\/\/github.com\/ozkanpakdil\/ozkanpakdil.github.io\/blob\/master\/js\/search.js\">this code<\/a><\/li>\n<li>Add <a href=\"https:\/\/raw.githubusercontent.com\/ozkanpakdil\/ozkanpakdil.github.io\/refs\/heads\/master\/search.md\">search.md<\/a> to the root of your project.<\/li>\n<li>Add an HTML form where you like<\/li>\n<\/ol>\n<pre tabindex=\"0\"><code>&lt;li class=&#34;nav-item my-auto&#34;&gt;\n\t&lt;div class=&#34;header-search&#34;&gt;\n\t\t&lt;form class=&#34;header-search-form&#34; action=&#34;\/search.html&#34; method=&#34;get&#34;&gt;\n\t\t\t&lt;input type=&#34;text&#34; id=&#34;search-box&#34; name=&#34;query&#34;&gt;\n\t\t\t&lt;input type=&#34;submit&#34; value=&#34;search&#34;&gt;\n\t\t&lt;\/form&gt;\n\t&lt;\/div&gt;\n&lt;\/li&gt;\n<\/code><\/pre><p>Check <a href=\"https:\/\/github.com\/ozkanpakdil\/ozkanpakdil.github.io\/blob\/16333654f46cb1c6fe651cbf67e49cc699ecc210\/_includes\/header.html#L44\">here<\/a> for example.<\/p>"},{"title":"Graalvm to run wasm from spring boot","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2024\/2024-11-04-graalvm-wasm\/","pubDate":"Mon, 04 Nov 2024 00:00:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2024\/2024-11-04-graalvm-wasm\/","description":"<p><a href=\"https:\/\/www.graalvm.org\/\">Graalvm<\/a> is AOT compilation advanced JDK, I am following the project since 2019, Project&rsquo;s first target was AOT now lately I start seeing more about multi language support. It supports Python, JS, Ruby, Wasm more details <a href=\"https:\/\/www.graalvm.org\/latest\/reference-manual\/languages\/\">here<\/a><\/p>\n<p>And WASM is getting popular day by day, WASM is a new binary file for web. There are many cool examples of WASM<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/stepstone-tech\/doom-graalvm\">Doom game in the browser with graalvm<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/electric-sql\/pglite\">Postgres database in the browser<\/a><\/li>\n<\/ul>\n<p>I was wondering how to run WASM code in simple spring boot application,<\/p>"},{"title":"Claude ai computer use","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2024\/2024-10-29-claudeai-computeruse\/","pubDate":"Tue, 29 Oct 2024 00:00:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2024\/2024-10-29-claudeai-computeruse\/","description":"<p>Latest AI news are making GPT and others very popular, and this is AI bubble, probably it will settle down in 2-3 years and we will have stable AI.<\/p>\n<p>Right now people are scared they will lose their job, some are very excited to try new things and test the fringe.<\/p>\n<p>Anyway couple of days ago I heard about claude ai published that <code>computer use<\/code> feature, basically AI will use our computer to do our prompts. What is that mean ? it means from simple stuff like copy this file from folder 1 to 2 or go research about cats and find me whales in google and categorically create folders of whales for me to look at that in the evening. So AI will do all and wait for you to check.<\/p>"},{"title":"JTE new template engine in spring boot starter site","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2024\/2024-10-13-jte-new-template-engine\/","pubDate":"Sun, 13 Oct 2024 00:00:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2024\/2024-10-13-jte-new-template-engine\/","description":"<p>Last week I saw that there is new template engine in spring boot starter site<\/p>\n<p><img alt=\"image\" loading=\"lazy\" src=\"https:\/\/github.com\/user-attachments\/assets\/870dc911-83a4-4f72-b114-60dee027238b\"><\/p>\n<p>Then I remembered that I have spring template engine comparison benchmark <a href=\"https:\/\/ozkanpakdil.github.io\/spring-comparing-template-engines\/\">here<\/a> and I wonder how is JTE performance compared to thymeleaf or freemarker.\nbelow is the latest numbers from <a href=\"https:\/\/github.com\/ozkanpakdil\/spring-comparing-template-engines\/blob\/master\/result-23.txt\">java 23 build<\/a><\/p>\n<table>\n  <thead>\n      <tr>\n          <th>Engine Name<\/th>\n          <th>Seconds<\/th>\n      <\/tr>\n  <\/thead>\n  <tbody>\n      <tr>\n          <td>jsp<\/td>\n          <td>6.652<\/td>\n      <\/tr>\n      <tr>\n          <td>velocity<\/td>\n          <td>3.728<\/td>\n      <\/tr>\n      <tr>\n          <td>freemarker<\/td>\n          <td>2.616<\/td>\n      <\/tr>\n      <tr>\n          <td>thymeleaf<\/td>\n          <td>6.932<\/td>\n      <\/tr>\n      <tr>\n          <td>mustache<\/td>\n          <td>3.100<\/td>\n      <\/tr>\n      <tr>\n          <td>jade<\/td>\n          <td>3.503<\/td>\n      <\/tr>\n      <tr>\n          <td>pebble<\/td>\n          <td>3.519<\/td>\n      <\/tr>\n      <tr>\n          <td>handlebars<\/td>\n          <td>13.405<\/td>\n      <\/tr>\n      <tr>\n          <td>scalate<\/td>\n          <td>3.987<\/td>\n      <\/tr>\n      <tr>\n          <td>httl<\/td>\n          <td>3.430<\/td>\n      <\/tr>\n      <tr>\n          <td>chunk<\/td>\n          <td>4.430<\/td>\n      <\/tr>\n      <tr>\n          <td>htmlFlow<\/td>\n          <td>1.670<\/td>\n      <\/tr>\n      <tr>\n          <td>trimou<\/td>\n          <td>2.059<\/td>\n      <\/tr>\n      <tr>\n          <td>rocker<\/td>\n          <td>1.957<\/td>\n      <\/tr>\n      <tr>\n          <td>ickenham<\/td>\n          <td>4.342<\/td>\n      <\/tr>\n      <tr>\n          <td>rythm<\/td>\n          <td>3.411<\/td>\n      <\/tr>\n      <tr>\n          <td>groovy<\/td>\n          <td>751.200<\/td>\n      <\/tr>\n      <tr>\n          <td>kotlinx<\/td>\n          <td>2.422<\/td>\n      <\/tr>\n      <tr>\n          <td>jte<\/td>\n          <td>2.940<\/td>\n      <\/tr>\n  <\/tbody>\n<\/table>\n<p>JTE(2.9) is still slower then freemarker(2.6), it is still faster then jsp and mustache and thymeleaf. Also <a href=\"https:\/\/github.com\/ozkanpakdil\/spring-comparing-template-engines\/blob\/master\/result-21.txt\">here<\/a> you can see\nolder test results.<\/p>"},{"title":"How to add intellij community edition to right click menu on win 11","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2024\/2024-10-11-how-to-add-intellij-to-context-menu\/","pubDate":"Fri, 11 Oct 2024 00:00:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2024\/2024-10-11-how-to-add-intellij-to-context-menu\/","description":"<p>How can one add intellij cpmmunity edition to right click menu on win 11?<\/p>\n<p>Copy below code to a bat file and run it in CMD as administrator, before running this command just test from win+r shortcode and paste <code>%USERPROFILE%\\AppData\\Local\\Programs\\IntelliJ IDEA Community Edition\\bin\\idea64.exe<\/code>and see if this runs the intellj<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-shell\" data-lang=\"shell\"><span style=\"display:flex;\"><span> @echo off\n<\/span><\/span><span style=\"display:flex;\"><span>setlocal enabledelayedexpansion\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>:: Set the path to your IntelliJ executable using %USERPROFILE%\n<\/span><\/span><span style=\"display:flex;\"><span>set <span style=\"color:#e6db74\">&#34;INTELLIJ_PATH=%USERPROFILE%\\AppData\\Local\\Programs\\IntelliJ IDEA Community Edition\\bin\\idea64.exe&#34;<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>:: Check <span style=\"color:#66d9ef\">if<\/span> running with admin privileges\n<\/span><\/span><span style=\"display:flex;\"><span>net session &gt;nul 2&gt;&amp;<span style=\"color:#ae81ff\">1<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">if<\/span> %errorLevel% neq <span style=\"color:#ae81ff\">0<\/span> <span style=\"color:#f92672\">(<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>    echo This script requires administrator privileges.\n<\/span><\/span><span style=\"display:flex;\"><span>    echo Please run it as an administrator.\n<\/span><\/span><span style=\"display:flex;\"><span>    pause\n<\/span><\/span><span style=\"display:flex;\"><span>    exit \/b <span style=\"color:#ae81ff\">1<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#f92672\">)<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>:: Add IntelliJ to context menu\n<\/span><\/span><span style=\"display:flex;\"><span>reg add <span style=\"color:#e6db74\">&#34;HKEY_CLASSES_ROOT\\Directory\\Background\\shell\\IntelliJ&#34;<\/span> \/ve \/d <span style=\"color:#e6db74\">&#34;Open with IntelliJ&#34;<\/span> \/f\n<\/span><\/span><span style=\"display:flex;\"><span>reg add <span style=\"color:#e6db74\">&#34;HKEY_CLASSES_ROOT\\Directory\\Background\\shell\\IntelliJ\\command&#34;<\/span> \/ve \/d <span style=\"color:#e6db74\">&#34;\\&#34;%INTELLIJ_PATH%\\&#34; \\&#34;%%V\\&#34;&#34;<\/span> \/f\n<\/span><\/span><span style=\"display:flex;\"><span>reg add <span style=\"color:#e6db74\">&#34;HKEY_CLASSES_ROOT\\Directory\\Background\\shell\\IntelliJ&#34;<\/span> \/v <span style=\"color:#e6db74\">&#34;Icon&#34;<\/span> \/d <span style=\"color:#e6db74\">&#34;%INTELLIJ_PATH%&#34;<\/span> \/f\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>echo IntelliJ has been added to the context menu.\n<\/span><\/span><span style=\"display:flex;\"><span>echo Please restart File Explorer or your PC <span style=\"color:#66d9ef\">for<\/span> changes to take effect.\n<\/span><\/span><span style=\"display:flex;\"><span>pause\n<\/span><\/span><\/code><\/pre><\/div>"},{"title":"How to publish JetBrains Rider plugin for opentelemetry\/honeycomb","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2024\/2024-10-06-how-to-publish-jetbrains-plugin\/","pubDate":"Sun, 06 Oct 2024 00:00:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2024\/2024-10-06-how-to-publish-jetbrains-plugin\/","description":"<p>I had the chance to work with honeycomb.io 2 weeks ago, mainly I was changing the code which sends data too appinsights azre now needed to send data to honeycomb too. It was not too complex but it is hard to catch those\nlog lines and make sure if we called the endpoint correctly and what data we sent. There is wonderful plugin for that for appinsights <a href=\"https:\/\/github.com\/Socolin\/ApplicationInsightsRiderPlugin\">https:\/\/github.com\/Socolin\/ApplicationInsightsRiderPlugin<\/a> but there was no plugin whcih can show opentelemetry calls, yes honeycomb.io uses OTEL protocol meaning opentelemetry which is kind of industry standard now for observability.<\/p>"},{"title":"How to collect dmp files in dotnet","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2024\/2024-09-12-how-collect-dmp-files\/","pubDate":"Thu, 12 Sep 2024 00:00:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2024\/2024-09-12-how-collect-dmp-files\/","description":"<p>I was reading a DMP file to investigate customer issue where they have been having high CPU issues after latest upgrade. I read the dmp with <a href=\"https:\/\/learn.microsoft.com\/en-us\/windows-hardware\/drivers\/debugger\/\">windbg<\/a> then vs.net analyze and both times I saw CLR GC(garbage collection and BGC) was eating up all the CPU and I must say VS.NET analyze is really nice, it shows who is eating up the CPU very easily, only problem it may crash sometimes, the dmp file size was around 9GB that maybe the reason I do not know.<\/p>"},{"title":"How to build spring boot native binary","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2024\/2024-09-01-spring-boot-native-build\/","pubDate":"Sun, 01 Sep 2024 00:00:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2024\/2024-09-01-spring-boot-native-build\/","description":"<p>In short I am explaining why we should use <code>.\/mvnw -Pnative native:compile<\/code> and what error comes otherwise and why.<\/p>\n<p>I was preparing <a href=\"https:\/\/stackoverflow.com\/questions\/77503386\/migrating-springboot-3-app-to-graalvm-and-providing-properties-at-runtime\/78937171#78937171\">this<\/a> answer. And I was having problem with the class not found errors while building because I was using this command<\/p>\n<pre tabindex=\"0\"><code>.\/mvnw native:compile\n...\nError: Please specify class (or &lt;module&gt;\/&lt;mainclass&gt;) containing the main entry point method. (see --help)\n[INFO] ------------------------------------------------------------------------\n[INFO] BUILD FAILURE\n[INFO] ------------------------------------------------------------------------\n[INFO] Total time:  3.448 s\n[INFO] Finished at: 2024-09-01T21:24:32+01:00\n[INFO] ------------------------------------------------------------------------\n[ERROR] Failed to execute goal org.graalvm.buildtools:native-maven-plugin:0.10.2:compile (default-cli) on project env-variables: Execution of C:\\sdkman\\candidates\\java\\21.0.2-graal\\bin\\native-image.cmd @target\\tmp\\native-image-2373453772169200185.args returned non-zero result -&gt; [Help 1]\n[ERROR]\n<\/code><\/pre><p>Then remembered the profile thing and finally get rid of this error, used below command<\/p>"},{"title":"Rider Testimonial","link":"https:\/\/ozkanpakdil.github.io\/ridertestimonial\/","pubDate":"Wed, 31 Jul 2024 00:00:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/ridertestimonial\/","description":"<p>I used eclipse 10 years and moved to IntelliJ in 2017 since then no turning back, a true Java IDE, perfect refactoring also any editing capabilities, and in 2024 I moved to Redgate Monitor and C# after 18 years of Java I was scared but thanks to JetBrains Rider, when I open the Rider it asked me what shortcut set do I choose, and there was IntelliJ option, I chose it and jumped into the code and adoption time was incredible, in days I understand how is the structure (over 180 projects under multiple solution and thousands of classes\/files) and started contributing the project.<\/p>"},{"title":"Add Jetbrains Fleet to right click context menu in windows 11","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2024\/2024-07-15-fleet-add-to-windows11-context-menu\/","pubDate":"Mon, 15 Jul 2024 00:00:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2024\/2024-07-15-fleet-add-to-windows11-context-menu\/","description":"<p>Jetbrains fleet is a new editor, it is kind of vscode competitor, and little bit faster then other IDEA and VScode so I wanted to ahve it in the context menu.<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-shell\" data-lang=\"shell\"><span style=\"display:flex;\"><span>@echo off\n<\/span><\/span><span style=\"display:flex;\"><span>setlocal enabledelayedexpansion\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>:: Set the path to your Fleet executable using %USERPROFILE%\n<\/span><\/span><span style=\"display:flex;\"><span>set <span style=\"color:#e6db74\">&#34;FLEET_PATH=%USERPROFILE%\\AppData\\Local\\Programs\\Fleet\\Fleet.exe&#34;<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>:: Check <span style=\"color:#66d9ef\">if<\/span> running with admin privileges\n<\/span><\/span><span style=\"display:flex;\"><span>net session &gt;nul 2&gt;&amp;<span style=\"color:#ae81ff\">1<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">if<\/span> %errorLevel% neq <span style=\"color:#ae81ff\">0<\/span> <span style=\"color:#f92672\">(<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>    echo This script requires administrator privileges.\n<\/span><\/span><span style=\"display:flex;\"><span>    echo Please run it as an administrator.\n<\/span><\/span><span style=\"display:flex;\"><span>    pause\n<\/span><\/span><span style=\"display:flex;\"><span>    exit \/b <span style=\"color:#ae81ff\">1<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#f92672\">)<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>:: Add Fleet to context menu\n<\/span><\/span><span style=\"display:flex;\"><span>reg add <span style=\"color:#e6db74\">&#34;HKEY_CLASSES_ROOT\\Directory\\Background\\shell\\Fleet&#34;<\/span> \/ve \/d <span style=\"color:#e6db74\">&#34;Open with Fleet&#34;<\/span> \/f\n<\/span><\/span><span style=\"display:flex;\"><span>reg add <span style=\"color:#e6db74\">&#34;HKEY_CLASSES_ROOT\\Directory\\Background\\shell\\Fleet\\command&#34;<\/span> \/ve \/d <span style=\"color:#e6db74\">&#34;\\&#34;%FLEET_PATH%\\&#34; \\&#34;%%V\\&#34;&#34;<\/span> \/f\n<\/span><\/span><span style=\"display:flex;\"><span>reg add <span style=\"color:#e6db74\">&#34;HKEY_CLASSES_ROOT\\Directory\\Background\\shell\\Fleet&#34;<\/span> \/v <span style=\"color:#e6db74\">&#34;Icon&#34;<\/span> \/d <span style=\"color:#e6db74\">&#34;%FLEET_PATH%&#34;<\/span> \/f\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>echo Fleet has been added to the context menu.\n<\/span><\/span><span style=\"display:flex;\"><span>echo Please restart File Explorer or your PC <span style=\"color:#66d9ef\">for<\/span> changes to take effect.\n<\/span><\/span><span style=\"display:flex;\"><span>pause\n<\/span><\/span><\/code><\/pre><\/div><p>looks like below\n<img alt=\"context menu has open with fleet\" loading=\"lazy\" src=\"https:\/\/github.com\/user-attachments\/assets\/b2c02d5a-2a5d-4dd3-93fd-54ce9667cd64\"><\/p>"},{"title":"Creating Installers for Java Applications with jpackage","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2024\/2024-06-29-jpackager\/","pubDate":"Sat, 29 Jun 2024 00:00:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2024\/2024-06-29-jpackager\/","description":"<p>Jpackage, a powerful tool introduced in Java 14. In this blog post, I&rsquo;ll explore how to use jpackage to create installers for different operating systems, with a focus on creating an MSI installer for Windows.<\/p>\n<h2 id=\"what-is-jpackage\">What is jpackage?<\/h2>\n<p><a href=\"https:\/\/docs.oracle.com\/en\/java\/javase\/22\/jpackage\/packaging-overview.html\">jpackage<\/a> is a packaging tool that comes bundled with the Java Development Kit (JDK) since version 14. It allows developers to package Java applications into platform-specific packages that can be easily distributed and installed. It contains the JRE in the generated package and one trigger executable for specified platform. jpackage supports creating various types of installers, including:<\/p>"},{"title":"Spring boot 3 RestClient and RestTemplate logging http requests and response","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2024\/2024-05-18-http-logging\/","pubDate":"Sat, 18 May 2024 00:00:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2024\/2024-05-18-http-logging\/","description":"<p>In Spring boot(SB) 2 the configuration was different, now in SB3 we need to configure the rest client differently. Before SB3 there was RestTemplate now there is new Rest api coming in spring world. Find more details <a href=\"https:\/\/spring.io\/blog\/2023\/07\/13\/new-in-spring-6-1-restclient\">here<\/a>.<\/p>\n<p>Adding the required dependency which will do the real http logging here.<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-gradle\" data-lang=\"gradle\"><span style=\"display:flex;\"><span>    implementation <span style=\"color:#e6db74\">&#39;org.apache.httpcomponents.client5:httpclient5:5.3.1&#39;<\/span>\n<\/span><\/span><\/code><\/pre><\/div><p>The big difference is properties configuration, it is changed and not documented on spring site<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-properties\" data-lang=\"properties\"><span style=\"display:flex;\"><span><span style=\"color:#a6e22e\">logging.level.org.apache.hc.client5.http.wire<\/span><span style=\"color:#f92672\">=<\/span><span style=\"color:#e6db74\">DEBUG<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#a6e22e\">logging.level.org.apache.hc.client5.http<\/span><span style=\"color:#f92672\">=<\/span><span style=\"color:#e6db74\">DEBUG<\/span>\n<\/span><\/span><\/code><\/pre><\/div><p>Using only &ldquo;wire&rdquo; will give request\/response dump. And that extra http=DEBUG will give connection and more debug log, find it at the end of the page.<\/p>"},{"title":"How to use resources(file and memory) in try","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2024\/2024-04-18-use-resources-in-try\/","pubDate":"Thu, 18 Apr 2024 00:00:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2024\/2024-04-18-use-resources-in-try\/","description":"<p>I wrote a small piece of code to do some pdf encryption with openpdf, and intellij`s sonarlint was complaining about &ldquo;Resources should be closed&rdquo; more details <a href=\"https:\/\/docs.oracle.com\/javase\/tutorial\/essential\/exceptions\/tryResourceClose.html\">here<\/a><\/p>\n<h1 id=\"non-compliant\">non compliant<\/h1>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-java\" data-lang=\"java\"><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">public<\/span> <span style=\"color:#66d9ef\">class<\/span> <span style=\"color:#a6e22e\">PasswordProtectedPDF<\/span> {\n<\/span><\/span><span style=\"display:flex;\"><span>    <span style=\"color:#66d9ef\">private<\/span> <span style=\"color:#66d9ef\">static<\/span> <span style=\"color:#66d9ef\">final<\/span> Logger logger <span style=\"color:#f92672\">=<\/span> Logger.<span style=\"color:#a6e22e\">getLogger<\/span>(PasswordProtectedPDF.<span style=\"color:#a6e22e\">class<\/span>.<span style=\"color:#a6e22e\">getName<\/span>());\n<\/span><\/span><span style=\"display:flex;\"><span>    <span style=\"color:#66d9ef\">static<\/span> <span style=\"color:#66d9ef\">final<\/span> String USER_PASSWORD <span style=\"color:#f92672\">=<\/span> <span style=\"color:#e6db74\">&#34;111&#34;<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span>    <span style=\"color:#66d9ef\">static<\/span> <span style=\"color:#66d9ef\">final<\/span> String OWNER_PASSWORD <span style=\"color:#f92672\">=<\/span> <span style=\"color:#e6db74\">&#34;111&#34;<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>    <span style=\"color:#66d9ef\">public<\/span> <span style=\"color:#66d9ef\">static<\/span> <span style=\"color:#66d9ef\">void<\/span> <span style=\"color:#a6e22e\">main<\/span>(String<span style=\"color:#f92672\">[]<\/span> args) {\n<\/span><\/span><span style=\"display:flex;\"><span>        <span style=\"color:#66d9ef\">try<\/span> {\n<\/span><\/span><span style=\"display:flex;\"><span>            File f <span style=\"color:#f92672\">=<\/span> <span style=\"color:#66d9ef\">new<\/span> File(<span style=\"color:#e6db74\">&#34;1_protected.pdf&#34;<\/span>);\n<\/span><\/span><span style=\"display:flex;\"><span>            FileOutputStream out <span style=\"color:#f92672\">=<\/span> <span style=\"color:#66d9ef\">new<\/span> FileOutputStream(f);\n<\/span><\/span><span style=\"display:flex;\"><span>            File pdfFile <span style=\"color:#f92672\">=<\/span> <span style=\"color:#66d9ef\">new<\/span> File(<span style=\"color:#e6db74\">&#34;1.pdf&#34;<\/span>);\n<\/span><\/span><span style=\"display:flex;\"><span>            PdfReader reader <span style=\"color:#f92672\">=<\/span> <span style=\"color:#66d9ef\">new<\/span> PdfReader(pdfFile.<span style=\"color:#a6e22e\">getPath<\/span>());\n<\/span><\/span><span style=\"display:flex;\"><span>            PdfStamper stamper <span style=\"color:#f92672\">=<\/span> <span style=\"color:#66d9ef\">new<\/span> PdfStamper(reader, out);\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>            HashMap<span style=\"color:#f92672\">&lt;<\/span>String, String<span style=\"color:#f92672\">&gt;<\/span> info <span style=\"color:#f92672\">=<\/span> <span style=\"color:#66d9ef\">new<\/span> HashMap<span style=\"color:#f92672\">&lt;&gt;<\/span>();\n<\/span><\/span><span style=\"display:flex;\"><span>            info.<span style=\"color:#a6e22e\">put<\/span>(<span style=\"color:#e6db74\">&#34;Producer&#34;<\/span>, <span style=\"color:#e6db74\">&#34;&#34;<\/span>);\n<\/span><\/span><span style=\"display:flex;\"><span>            reader.<span style=\"color:#a6e22e\">getInfo<\/span>().<span style=\"color:#a6e22e\">forEach<\/span>((key, value) <span style=\"color:#f92672\">-&gt;<\/span> {\n<\/span><\/span><span style=\"display:flex;\"><span>                logger.<span style=\"color:#a6e22e\">info<\/span>(<span style=\"color:#e6db74\">&#34;Key: &#34;<\/span> <span style=\"color:#f92672\">+<\/span> key <span style=\"color:#f92672\">+<\/span> <span style=\"color:#e6db74\">&#34;, Value: &#34;<\/span> <span style=\"color:#f92672\">+<\/span> value);\n<\/span><\/span><span style=\"display:flex;\"><span>            });\n<\/span><\/span><span style=\"display:flex;\"><span>            stamper.<span style=\"color:#a6e22e\">setInfoDictionary<\/span>(info);\n<\/span><\/span><span style=\"display:flex;\"><span>            stamper.<span style=\"color:#a6e22e\">setEncryption<\/span>(USER_PASSWORD.<span style=\"color:#a6e22e\">getBytes<\/span>(), OWNER_PASSWORD.<span style=\"color:#a6e22e\">getBytes<\/span>(), PdfWriter.<span style=\"color:#a6e22e\">ALLOW_PRINTING<\/span>, PdfWriter.<span style=\"color:#a6e22e\">ENCRYPTION_AES_128<\/span>);\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>            stamper.<span style=\"color:#a6e22e\">close<\/span>();\n<\/span><\/span><span style=\"display:flex;\"><span>            logger.<span style=\"color:#a6e22e\">info<\/span>(<span style=\"color:#e6db74\">&#34;Password protected PDF created successfully.&#34;<\/span>);\n<\/span><\/span><span style=\"display:flex;\"><span>        } <span style=\"color:#66d9ef\">catch<\/span> (IOException e) {\n<\/span><\/span><span style=\"display:flex;\"><span>            logger.<span style=\"color:#a6e22e\">severe<\/span>(<span style=\"color:#e6db74\">&#34;Error creating password protected PDF: &#34;<\/span> <span style=\"color:#f92672\">+<\/span> e.<span style=\"color:#a6e22e\">getMessage<\/span>());\n<\/span><\/span><span style=\"display:flex;\"><span>        }\n<\/span><\/span><span style=\"display:flex;\"><span>    }\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><\/code><\/pre><\/div><h1 id=\"compliant\">Compliant<\/h1>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-java\" data-lang=\"java\"><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">public<\/span> <span style=\"color:#66d9ef\">class<\/span> <span style=\"color:#a6e22e\">PasswordProtectedPDF<\/span> {\n<\/span><\/span><span style=\"display:flex;\"><span>    <span style=\"color:#66d9ef\">private<\/span> <span style=\"color:#66d9ef\">static<\/span> <span style=\"color:#66d9ef\">final<\/span> Logger logger <span style=\"color:#f92672\">=<\/span> Logger.<span style=\"color:#a6e22e\">getLogger<\/span>(PasswordProtectedPDF.<span style=\"color:#a6e22e\">class<\/span>.<span style=\"color:#a6e22e\">getName<\/span>());\n<\/span><\/span><span style=\"display:flex;\"><span>    <span style=\"color:#66d9ef\">static<\/span> <span style=\"color:#66d9ef\">final<\/span> String USER_PASSWORD <span style=\"color:#f92672\">=<\/span> <span style=\"color:#e6db74\">&#34;111&#34;<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span>    <span style=\"color:#66d9ef\">static<\/span> <span style=\"color:#66d9ef\">final<\/span> String OWNER_PASSWORD <span style=\"color:#f92672\">=<\/span> <span style=\"color:#e6db74\">&#34;111&#34;<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>    <span style=\"color:#66d9ef\">public<\/span> <span style=\"color:#66d9ef\">static<\/span> <span style=\"color:#66d9ef\">void<\/span> <span style=\"color:#a6e22e\">main<\/span>(String<span style=\"color:#f92672\">[]<\/span> args) {\n<\/span><\/span><span style=\"display:flex;\"><span>        <span style=\"color:#66d9ef\">try<\/span> (\n<\/span><\/span><span style=\"display:flex;\"><span>                FileOutputStream out <span style=\"color:#f92672\">=<\/span> <span style=\"color:#66d9ef\">new<\/span> FileOutputStream(<span style=\"color:#66d9ef\">new<\/span> File(<span style=\"color:#e6db74\">&#34;1_protected.pdf&#34;<\/span>));\n<\/span><\/span><span style=\"display:flex;\"><span>                PdfReader reader <span style=\"color:#f92672\">=<\/span> <span style=\"color:#66d9ef\">new<\/span> PdfReader(<span style=\"color:#66d9ef\">new<\/span> File(<span style=\"color:#e6db74\">&#34;1.pdf&#34;<\/span>).<span style=\"color:#a6e22e\">getPath<\/span>())\n<\/span><\/span><span style=\"display:flex;\"><span>        ) {\n<\/span><\/span><span style=\"display:flex;\"><span>            PdfStamper stamper <span style=\"color:#f92672\">=<\/span> <span style=\"color:#66d9ef\">new<\/span> PdfStamper(reader, out);\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>            HashMap<span style=\"color:#f92672\">&lt;<\/span>String, String<span style=\"color:#f92672\">&gt;<\/span> info <span style=\"color:#f92672\">=<\/span> <span style=\"color:#66d9ef\">new<\/span> HashMap<span style=\"color:#f92672\">&lt;&gt;<\/span>();\n<\/span><\/span><span style=\"display:flex;\"><span>            info.<span style=\"color:#a6e22e\">put<\/span>(<span style=\"color:#e6db74\">&#34;Producer&#34;<\/span>, <span style=\"color:#e6db74\">&#34;&#34;<\/span>);\n<\/span><\/span><span style=\"display:flex;\"><span>            reader.<span style=\"color:#a6e22e\">getInfo<\/span>().<span style=\"color:#a6e22e\">forEach<\/span>((key, value) <span style=\"color:#f92672\">-&gt;<\/span> {\n<\/span><\/span><span style=\"display:flex;\"><span>                logger.<span style=\"color:#a6e22e\">info<\/span>(<span style=\"color:#e6db74\">&#34;Key: &#34;<\/span> <span style=\"color:#f92672\">+<\/span> key <span style=\"color:#f92672\">+<\/span> <span style=\"color:#e6db74\">&#34;, Value: &#34;<\/span> <span style=\"color:#f92672\">+<\/span> value);\n<\/span><\/span><span style=\"display:flex;\"><span>            });\n<\/span><\/span><span style=\"display:flex;\"><span>            stamper.<span style=\"color:#a6e22e\">setInfoDictionary<\/span>(info);\n<\/span><\/span><span style=\"display:flex;\"><span>            stamper.<span style=\"color:#a6e22e\">setEncryption<\/span>(USER_PASSWORD.<span style=\"color:#a6e22e\">getBytes<\/span>(), OWNER_PASSWORD.<span style=\"color:#a6e22e\">getBytes<\/span>(), PdfWriter.<span style=\"color:#a6e22e\">ALLOW_PRINTING<\/span>, PdfWriter.<span style=\"color:#a6e22e\">ENCRYPTION_AES_128<\/span>);\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>            stamper.<span style=\"color:#a6e22e\">close<\/span>();\n<\/span><\/span><span style=\"display:flex;\"><span>            logger.<span style=\"color:#a6e22e\">info<\/span>(<span style=\"color:#e6db74\">&#34;Password protected PDF created successfully.&#34;<\/span>);\n<\/span><\/span><span style=\"display:flex;\"><span>        } <span style=\"color:#66d9ef\">catch<\/span> (IOException e) {\n<\/span><\/span><span style=\"display:flex;\"><span>            logger.<span style=\"color:#a6e22e\">severe<\/span>(<span style=\"color:#e6db74\">&#34;Error creating password protected PDF: &#34;<\/span> <span style=\"color:#f92672\">+<\/span> e.<span style=\"color:#a6e22e\">getMessage<\/span>());\n<\/span><\/span><span style=\"display:flex;\"><span>        }\n<\/span><\/span><span style=\"display:flex;\"><span>    }\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><\/code><\/pre><\/div><p>just a reminder we can define multiple resources in try block<\/p>"},{"title":"How to deploy to maven central repo","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2024\/2024-03-10-publish-central-maven\/","pubDate":"Sun, 10 Mar 2024 00:00:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2024\/2024-03-10-publish-central-maven\/","description":"<p>Yesterday I found <a href=\"https:\/\/github.com\/RobertBColton\/DockFX\">dockFX<\/a> library, when I first try it did not work. Today I manage to upgrade the <a href=\"https:\/\/github.com\/ozkanpakdil\/DockFX\">code to java17<\/a> and working with latest javafx21, then I wonder how to deploy this to maven central repository. Took around 3 hours, better to write this down for others.<\/p>\n<ol>\n<li>\n<p>Go login to <a href=\"https:\/\/central.sonatype.com\/account\">https:\/\/central.sonatype.com\/account<\/a> I used my gmail login and I was in.<\/p>\n<\/li>\n<li>\n<p>Go to <a href=\"https:\/\/central.sonatype.com\/publishing\/namespaces\">https:\/\/central.sonatype.com\/publishing\/namespaces<\/a> to create namespace, you need to create a verification repository on github if you want to use io.github.yourusername <a href=\"https:\/\/central.sonatype.org\/register\/central-portal\/#for-code-hosting-services-with-personal-groupid\">as explained here<\/a><\/p>"},{"title":"How to assign shortcut to a button in fxml","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2024\/2024-01-02-javafx-fxml-assign-shortcut\/","pubDate":"Tue, 02 Jan 2024 00:00:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2024\/2024-01-02-javafx-fxml-assign-shortcut\/","description":"<p>I wanted to assign a button in fxml a keyboard shortcut. below is the example how to do that.<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-xml\" data-lang=\"xml\"><span style=\"display:flex;\"><span><span style=\"color:#f92672\">&lt;Button<\/span> <span style=\"color:#a6e22e\">mnemonicParsing=<\/span><span style=\"color:#e6db74\">&#34;true&#34;<\/span> <span style=\"color:#a6e22e\">text=<\/span><span style=\"color:#e6db74\">&#34;_Click Me&#34;<\/span><span style=\"color:#f92672\">&gt;<\/span>\n<\/span><\/span><\/code><\/pre><\/div><p>Now that button will have underscore on that &ldquo;C&rdquo; and user can call it automatically with key combination of ALT+C, The UI form\/window that button should have the focus.<\/p>"},{"title":"Character isEmoji and some others added to java 21","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2023\/2023-11-20-java-21-emojis\/","pubDate":"Mon, 20 Nov 2023 00:00:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2023\/2023-11-20-java-21-emojis\/","description":"<p>In java 21 we get new API for emojis like below<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-java\" data-lang=\"java\"><span style=\"display:flex;\"><span>    isEmoji(<span style=\"color:#66d9ef\">int<\/span> codePoint)\n<\/span><\/span><span style=\"display:flex;\"><span>    isEmojiComponent(<span style=\"color:#66d9ef\">int<\/span> codePoint)\n<\/span><\/span><span style=\"display:flex;\"><span>    isEmojiModifier(<span style=\"color:#66d9ef\">int<\/span> codePoint)\n<\/span><\/span><span style=\"display:flex;\"><span>    isEmojiModifierBase(<span style=\"color:#66d9ef\">int<\/span> codePoint)\n<\/span><\/span><span style=\"display:flex;\"><span>    isEmojiPresentation(<span style=\"color:#66d9ef\">int<\/span> codePoint)\n<\/span><\/span><span style=\"display:flex;\"><span>    isExtendedPictographic(<span style=\"color:#66d9ef\">int<\/span> codePoint)\n<\/span><\/span><\/code><\/pre><\/div><p>here is a working example<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-java\" data-lang=\"java\"><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">public<\/span> <span style=\"color:#66d9ef\">static<\/span> <span style=\"color:#66d9ef\">void<\/span> <span style=\"color:#a6e22e\">main<\/span>(String<span style=\"color:#f92672\">[]<\/span> args) {\n<\/span><\/span><span style=\"display:flex;\"><span>    StringBuilder sb <span style=\"color:#f92672\">=<\/span> <span style=\"color:#66d9ef\">new<\/span> StringBuilder();\n<\/span><\/span><span style=\"display:flex;\"><span>    sb.<span style=\"color:#a6e22e\">appendCodePoint<\/span>(0x1F600); <span style=\"color:#75715e\">\/\/ Grinning face<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>    sb.<span style=\"color:#a6e22e\">appendCodePoint<\/span>(0x1F601); <span style=\"color:#75715e\">\/\/ Grinning face with big eyes<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>    sb.<span style=\"color:#a6e22e\">appendCodePoint<\/span>(0x1F602); <span style=\"color:#75715e\">\/\/ Grinning face with tears<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>    sb.<span style=\"color:#a6e22e\">appendCodePoint<\/span>(0x1F923); <span style=\"color:#75715e\">\/\/ Rolling on the floor laughing<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>    sb.<span style=\"color:#a6e22e\">appendCodePoint<\/span>(0x1F970); <span style=\"color:#75715e\">\/\/ Smiling face with hearts<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>    sb.<span style=\"color:#a6e22e\">appendCodePoint<\/span>(0x1F60D); <span style=\"color:#75715e\">\/\/ Smiling face with heart-eyes<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>    sb.<span style=\"color:#a6e22e\">appendCodePoint<\/span>(0x1F929); <span style=\"color:#75715e\">\/\/ Star-struck<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>    sb.<span style=\"color:#a6e22e\">appendCodePoint<\/span>(0x1F618); <span style=\"color:#75715e\">\/\/ Face blowing a kiss<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>    sb.<span style=\"color:#a6e22e\">appendCodePoint<\/span>(0x1F617); <span style=\"color:#75715e\">\/\/ Kissing face<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>    sb.<span style=\"color:#a6e22e\">appendCodePoint<\/span>(0x263A); <span style=\"color:#75715e\">\/\/ Smiling face<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>    System.<span style=\"color:#a6e22e\">out<\/span>.<span style=\"color:#a6e22e\">println<\/span>(sb);\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>    <span style=\"color:#66d9ef\">var<\/span> codePoint <span style=\"color:#f92672\">=<\/span> Character.<span style=\"color:#a6e22e\">codePointAt<\/span>(<span style=\"color:#e6db74\">&#34;\ud83d\ude03&#34;<\/span>, 0);\n<\/span><\/span><span style=\"display:flex;\"><span>    <span style=\"color:#66d9ef\">var<\/span> isEmoji <span style=\"color:#f92672\">=<\/span> Character.<span style=\"color:#a6e22e\">isEmoji<\/span>(codePoint);\n<\/span><\/span><span style=\"display:flex;\"><span>    System.<span style=\"color:#a6e22e\">out<\/span>.<span style=\"color:#a6e22e\">println<\/span>(<span style=\"color:#e6db74\">&#34;\ud83d\ude03 is an emoji: &#34;<\/span> <span style=\"color:#f92672\">+<\/span> isEmoji);\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>    <span style=\"color:#66d9ef\">int<\/span><span style=\"color:#f92672\">[]<\/span> surrogates <span style=\"color:#f92672\">=<\/span> { 0xD83D, 0xDC7D };\n<\/span><\/span><span style=\"display:flex;\"><span>    String alienEmojiString <span style=\"color:#f92672\">=<\/span> <span style=\"color:#66d9ef\">new<\/span> String(surrogates, 0, surrogates.<span style=\"color:#a6e22e\">length<\/span>);\n<\/span><\/span><span style=\"display:flex;\"><span>    System.<span style=\"color:#a6e22e\">out<\/span>.<span style=\"color:#a6e22e\">println<\/span>(alienEmojiString);\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><\/code><\/pre><\/div><p>seeing these emojis in vscode <img alt=\"vscode\" loading=\"lazy\" src=\"https:\/\/github.com\/ozkanpakdil\/ozkanpakdil.github.io\/assets\/604405\/b5d670e7-3e08-4dcc-8aed-5d57fa5edc86\"><\/p>"},{"title":"Using sqlite with h2 console","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2023\/2023-10-10-sqlite-flyway-h2console\/","pubDate":"Tue, 10 Oct 2023 00:00:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2023\/2023-10-10-sqlite-flyway-h2console\/","description":"<p>Sometimes we(developers\/programmers) may need to see database tables in tree and run some select, insert quickly on the db, H2 console is the best tool in spring boot to reach database on dev environment.<\/p>\n<p>And I saw a question about &ldquo;Using Flyway with SQLite database in spring boot&rdquo;, I have been using liquibase around 5 years but I have not tried flyway before, <strong>learning opportunity<\/strong>.<\/p>\n<p>So I preapred an example with gradle spring boot, sqlite and h2 console and answered the <a href=\"https:\/\/stackoverflow.com\/a\/76917474\/175554\">question<\/a>.<\/p>"},{"title":"Java find how many character repeating in a string","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2023\/2023-10-07-find-amount-of-characters\/","pubDate":"Sat, 07 Oct 2023 00:00:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2023\/2023-10-07-find-amount-of-characters\/","description":"<h1 id=\"how-to-find-how-many-characters-are-repeating-in-a-string\">How to find how many characters are repeating in a string.<\/h1>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-java\" data-lang=\"java\"><span style=\"display:flex;\"><span><span style=\"color:#a6e22e\">@Test<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">void<\/span> <span style=\"color:#a6e22e\">anotherQ<\/span>() {\n<\/span><\/span><span style=\"display:flex;\"><span>    <span style=\"color:#75715e\">\/\/ Q1 -- given a String like aaabbbcccaa need to return output like a3b3c3a2.<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>    String input <span style=\"color:#f92672\">=<\/span> <span style=\"color:#e6db74\">&#34;aaabbbcccazzdddxx&#34;<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span>    <span style=\"color:#66d9ef\">char<\/span><span style=\"color:#f92672\">[]<\/span> arr <span style=\"color:#f92672\">=<\/span> input.<span style=\"color:#a6e22e\">toCharArray<\/span>();\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>    <span style=\"color:#66d9ef\">for<\/span> (<span style=\"color:#66d9ef\">int<\/span> i <span style=\"color:#f92672\">=<\/span> 0; i <span style=\"color:#f92672\">&lt;<\/span> arr.<span style=\"color:#a6e22e\">length<\/span>; i<span style=\"color:#f92672\">++<\/span>) {\n<\/span><\/span><span style=\"display:flex;\"><span>        <span style=\"color:#66d9ef\">char<\/span> c <span style=\"color:#f92672\">=<\/span> arr<span style=\"color:#f92672\">[<\/span>i<span style=\"color:#f92672\">]<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span>        <span style=\"color:#66d9ef\">int<\/span> charCounter <span style=\"color:#f92672\">=<\/span> 1;\n<\/span><\/span><span style=\"display:flex;\"><span>        System.<span style=\"color:#a6e22e\">out<\/span>.<span style=\"color:#a6e22e\">print<\/span>(c);\n<\/span><\/span><span style=\"display:flex;\"><span>        <span style=\"color:#66d9ef\">while<\/span> (i <span style=\"color:#f92672\">+<\/span> 1 <span style=\"color:#f92672\">&lt;<\/span> arr.<span style=\"color:#a6e22e\">length<\/span> <span style=\"color:#f92672\">&amp;&amp;<\/span> c <span style=\"color:#f92672\">==<\/span> arr<span style=\"color:#f92672\">[<\/span>i <span style=\"color:#f92672\">+<\/span> 1<span style=\"color:#f92672\">]<\/span>) {\n<\/span><\/span><span style=\"display:flex;\"><span>            charCounter<span style=\"color:#f92672\">++<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span>            i<span style=\"color:#f92672\">++<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span>        }\n<\/span><\/span><span style=\"display:flex;\"><span>        System.<span style=\"color:#a6e22e\">out<\/span>.<span style=\"color:#a6e22e\">print<\/span>(charCounter);\n<\/span><\/span><span style=\"display:flex;\"><span>    }\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>    System.<span style=\"color:#a6e22e\">out<\/span>.<span style=\"color:#a6e22e\">println<\/span>(<span style=\"color:#e6db74\">&#34;\\n&#34;<\/span> <span style=\"color:#f92672\">+<\/span> transformString(input));\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">public<\/span> <span style=\"color:#66d9ef\">static<\/span> String <span style=\"color:#a6e22e\">transformString<\/span>(String input) {\n<\/span><\/span><span style=\"display:flex;\"><span>    <span style=\"color:#66d9ef\">if<\/span> (input <span style=\"color:#f92672\">==<\/span> <span style=\"color:#66d9ef\">null<\/span> <span style=\"color:#f92672\">||<\/span> input.<span style=\"color:#a6e22e\">isEmpty<\/span>()) {\n<\/span><\/span><span style=\"display:flex;\"><span>        <span style=\"color:#66d9ef\">return<\/span> input;\n<\/span><\/span><span style=\"display:flex;\"><span>    }\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>    StringBuilder result <span style=\"color:#f92672\">=<\/span> <span style=\"color:#66d9ef\">new<\/span> StringBuilder();\n<\/span><\/span><span style=\"display:flex;\"><span>    <span style=\"color:#66d9ef\">int<\/span> count <span style=\"color:#f92672\">=<\/span> 1;\n<\/span><\/span><span style=\"display:flex;\"><span>    <span style=\"color:#66d9ef\">char<\/span> currentChar <span style=\"color:#f92672\">=<\/span> input.<span style=\"color:#a6e22e\">charAt<\/span>(0);\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>    <span style=\"color:#66d9ef\">for<\/span> (<span style=\"color:#66d9ef\">int<\/span> i <span style=\"color:#f92672\">=<\/span> 1; i <span style=\"color:#f92672\">&lt;<\/span> input.<span style=\"color:#a6e22e\">length<\/span>(); i<span style=\"color:#f92672\">++<\/span>) {\n<\/span><\/span><span style=\"display:flex;\"><span>        <span style=\"color:#66d9ef\">char<\/span> c <span style=\"color:#f92672\">=<\/span> input.<span style=\"color:#a6e22e\">charAt<\/span>(i);\n<\/span><\/span><span style=\"display:flex;\"><span>        <span style=\"color:#66d9ef\">if<\/span> (c <span style=\"color:#f92672\">==<\/span> currentChar) {\n<\/span><\/span><span style=\"display:flex;\"><span>            count<span style=\"color:#f92672\">++<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span>        } <span style=\"color:#66d9ef\">else<\/span> {\n<\/span><\/span><span style=\"display:flex;\"><span>            result.<span style=\"color:#a6e22e\">append<\/span>(currentChar).<span style=\"color:#a6e22e\">append<\/span>(count);\n<\/span><\/span><span style=\"display:flex;\"><span>            count <span style=\"color:#f92672\">=<\/span> 1;\n<\/span><\/span><span style=\"display:flex;\"><span>            currentChar <span style=\"color:#f92672\">=<\/span> c;\n<\/span><\/span><span style=\"display:flex;\"><span>        }\n<\/span><\/span><span style=\"display:flex;\"><span>    }\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>    result.<span style=\"color:#a6e22e\">append<\/span>(currentChar).<span style=\"color:#a6e22e\">append<\/span>(count);\n<\/span><\/span><span style=\"display:flex;\"><span>    <span style=\"color:#66d9ef\">return<\/span> result.<span style=\"color:#a6e22e\">toString<\/span>();\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><\/code><\/pre><\/div><p>The output is \u201ca3b3c3a1z2d3x2\u201d find the working code <a href=\"https:\/\/github.com\/ozkanpakdil\/swaggerific\/blob\/158d039812a74d5cdf3f872ce29b3686253c82dc\/src\/test\/java\/io\/github\/ozkanpakdil\/swaggerific\/algorithms\/FindhighestAverage.java#L39\">here<\/a> for full working example.<\/p>"},{"title":"Add `open with fleet` into context menu in linux mint","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2023\/2023-10-03-fleet-in-context-menu\/","pubDate":"Tue, 03 Oct 2023 00:00:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2023\/2023-10-03-fleet-in-context-menu\/","description":"<p>If you install the Fleet from <strong>JetBrains Toolbox<\/strong> you can use the config below.\nAdd code below to ~\/.local\/share\/nemo\/actions\/fleet.nemo_action<\/p>\n<pre tabindex=\"0\"><code>[Nemo Action]\nName=Open in Fleet\nComment=Open in Fleet\nExec=\/home\/USERHOME\/.local\/share\/JetBrains\/Toolbox\/apps\/fleet\/bin\/Fleet &#34;%F&#34;\nIcon-Name=Fleet\nSelection=Any\nExtensions=dir;\n<\/code><\/pre><p>Do not forget to change the USERHOME to your user home path. Then in files go to folder you want to open with intellij then right click and choose open in intellij.<\/p>"},{"title":"Postgresql group by day, week and month examples ","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2023\/2023-09-30-postgresql\/","pubDate":"Sat, 30 Sep 2023 00:00:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2023\/2023-09-30-postgresql\/","description":"<p>at the end of any product there will be a reporting interfaces for counts. let say you build a advertisement site which gives people to publish their products on the site. they will want to see how many people visited their product in daily basis or weekly.<\/p>\n<p>I used to do this in mysql like this<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-sql\" data-lang=\"sql\"><span style=\"display:flex;\"><span>    <span style=\"color:#66d9ef\">SELECT<\/span> create_time <span style=\"color:#66d9ef\">as<\/span> Date, <span style=\"color:#66d9ef\">count<\/span>(id) <span style=\"color:#66d9ef\">as<\/span> <span style=\"color:#e6db74\">&#39;Count&#39;<\/span>, <span style=\"color:#66d9ef\">FROM<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>    views_of_product\n<\/span><\/span><span style=\"display:flex;\"><span>    <span style=\"color:#66d9ef\">group<\/span> <span style=\"color:#66d9ef\">by<\/span> date_format(create_time, <span style=\"color:#e6db74\">&#39;%d %m %Y&#39;<\/span>)\n<\/span><\/span><span style=\"display:flex;\"><span>    <span style=\"color:#66d9ef\">order<\/span> <span style=\"color:#66d9ef\">by<\/span> date_format(create_time, <span style=\"color:#e6db74\">&#39;%Y-%m-%d&#39;<\/span>) <span style=\"color:#66d9ef\">desc<\/span> <span style=\"color:#66d9ef\">limit<\/span> <span style=\"color:#ae81ff\">7<\/span>\n<\/span><\/span><\/code><\/pre><\/div><p>this will nicely show last seven days views. but I needed to do same thing in postgresql. and like other days its not easily to find. I should check other report codes from project but no I allways research on google :) anyway here is my code:<\/p>"},{"title":"Turning an array clockwise or counterclockwise","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2023\/2023-09-28-turn-array-clockwise-or-reverse-java\/","pubDate":"Thu, 28 Sep 2023 00:00:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2023\/2023-09-28-turn-array-clockwise-or-reverse-java\/","description":"<p>Turn an array clockwise therefore the last element comes to first and all hops to right.\nAnd counterclockwise meaning last element comes to first and others hops to their left.<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-java\" data-lang=\"java\"><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#f92672\">import<\/span> java.io.IOException;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#f92672\">import<\/span> java.util.ArrayList;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#f92672\">import<\/span> java.util.Arrays;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#f92672\">import<\/span> java.util.Collections;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#f92672\">import<\/span> java.util.List;\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">public<\/span> <span style=\"color:#66d9ef\">class<\/span> <span style=\"color:#a6e22e\">Solution<\/span> {\n<\/span><\/span><span style=\"display:flex;\"><span>    <span style=\"color:#66d9ef\">public<\/span> <span style=\"color:#66d9ef\">static<\/span> <span style=\"color:#66d9ef\">void<\/span> <span style=\"color:#a6e22e\">main<\/span>(String<span style=\"color:#f92672\">[]<\/span> args) <span style=\"color:#66d9ef\">throws<\/span> IOException {\n<\/span><\/span><span style=\"display:flex;\"><span>        <span style=\"color:#66d9ef\">int<\/span><span style=\"color:#f92672\">[]<\/span> arr <span style=\"color:#f92672\">=<\/span> <span style=\"color:#66d9ef\">new<\/span> <span style=\"color:#66d9ef\">int<\/span><span style=\"color:#f92672\">[]<\/span>{1, 3, 5, 7, 9};\n<\/span><\/span><span style=\"display:flex;\"><span>        <span style=\"color:#66d9ef\">int<\/span> K <span style=\"color:#f92672\">=<\/span> 3;\n<\/span><\/span><span style=\"display:flex;\"><span>        turnTheArrayToRight(arr, K);\n<\/span><\/span><span style=\"display:flex;\"><span>        System.<span style=\"color:#a6e22e\">out<\/span>.<span style=\"color:#a6e22e\">println<\/span>(<span style=\"color:#e6db74\">&#34;-----------&#34;<\/span>);\n<\/span><\/span><span style=\"display:flex;\"><span>        turnTheArrayToLeft(arr, K);\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>        System.<span style=\"color:#a6e22e\">out<\/span>.<span style=\"color:#a6e22e\">println<\/span>(<span style=\"color:#e6db74\">&#34;-----------&#34;<\/span>);\n<\/span><\/span><span style=\"display:flex;\"><span>        <span style=\"color:#75715e\">\/\/ no need to reinvent the wheel.<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>        List l <span style=\"color:#f92672\">=<\/span> <span style=\"color:#66d9ef\">new<\/span> ArrayList<span style=\"color:#f92672\">&lt;&gt;<\/span>();\n<\/span><\/span><span style=\"display:flex;\"><span>        Arrays.<span style=\"color:#a6e22e\">stream<\/span>(arr).<span style=\"color:#a6e22e\">forEach<\/span>(i<span style=\"color:#f92672\">-&gt;<\/span>l.<span style=\"color:#a6e22e\">add<\/span>(i));\n<\/span><\/span><span style=\"display:flex;\"><span>        Collections.<span style=\"color:#a6e22e\">rotate<\/span>(l, K); <span style=\"color:#75715e\">\/\/ rotate right<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>        System.<span style=\"color:#a6e22e\">out<\/span>.<span style=\"color:#a6e22e\">println<\/span>(Arrays.<span style=\"color:#a6e22e\">toString<\/span>(l.<span style=\"color:#a6e22e\">toArray<\/span>()));\n<\/span><\/span><span style=\"display:flex;\"><span>        Collections.<span style=\"color:#a6e22e\">rotate<\/span>(l, <span style=\"color:#f92672\">-<\/span>1 <span style=\"color:#f92672\">*<\/span> K); <span style=\"color:#75715e\">\/\/ rotate left<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>        System.<span style=\"color:#a6e22e\">out<\/span>.<span style=\"color:#a6e22e\">println<\/span>(Arrays.<span style=\"color:#a6e22e\">toString<\/span>(l.<span style=\"color:#a6e22e\">toArray<\/span>()));\n<\/span><\/span><span style=\"display:flex;\"><span>    }\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>    <span style=\"color:#66d9ef\">private<\/span> <span style=\"color:#66d9ef\">static<\/span> <span style=\"color:#66d9ef\">int<\/span><span style=\"color:#f92672\">[]<\/span> <span style=\"color:#a6e22e\">turnTheArrayToRight<\/span>(<span style=\"color:#66d9ef\">int<\/span><span style=\"color:#f92672\">[]<\/span> nums, <span style=\"color:#66d9ef\">int<\/span> k) {\n<\/span><\/span><span style=\"display:flex;\"><span>        <span style=\"color:#66d9ef\">for<\/span> (<span style=\"color:#66d9ef\">int<\/span> j <span style=\"color:#f92672\">=<\/span> 0; j <span style=\"color:#f92672\">&lt;<\/span> k; j<span style=\"color:#f92672\">++<\/span>) {\n<\/span><\/span><span style=\"display:flex;\"><span>            <span style=\"color:#66d9ef\">for<\/span> (<span style=\"color:#66d9ef\">int<\/span> i <span style=\"color:#f92672\">=<\/span> nums.<span style=\"color:#a6e22e\">length<\/span> <span style=\"color:#f92672\">-<\/span> 1; 0 <span style=\"color:#f92672\">&lt;<\/span> i; i<span style=\"color:#f92672\">--<\/span>) {\n<\/span><\/span><span style=\"display:flex;\"><span>                <span style=\"color:#66d9ef\">int<\/span> temp <span style=\"color:#f92672\">=<\/span> nums<span style=\"color:#f92672\">[<\/span>i <span style=\"color:#f92672\">-<\/span> 1<span style=\"color:#f92672\">]<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span>                nums<span style=\"color:#f92672\">[<\/span>i <span style=\"color:#f92672\">-<\/span> 1<span style=\"color:#f92672\">]<\/span> <span style=\"color:#f92672\">=<\/span> nums<span style=\"color:#f92672\">[<\/span>i<span style=\"color:#f92672\">]<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span>                nums<span style=\"color:#f92672\">[<\/span>i<span style=\"color:#f92672\">]<\/span> <span style=\"color:#f92672\">=<\/span> temp;\n<\/span><\/span><span style=\"display:flex;\"><span>            }\n<\/span><\/span><span style=\"display:flex;\"><span>            System.<span style=\"color:#a6e22e\">out<\/span>.<span style=\"color:#a6e22e\">println<\/span>(Arrays.<span style=\"color:#a6e22e\">toString<\/span>(nums));\n<\/span><\/span><span style=\"display:flex;\"><span>        }\n<\/span><\/span><span style=\"display:flex;\"><span>        <span style=\"color:#66d9ef\">return<\/span> nums;\n<\/span><\/span><span style=\"display:flex;\"><span>    }\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>    <span style=\"color:#66d9ef\">private<\/span> <span style=\"color:#66d9ef\">static<\/span> <span style=\"color:#66d9ef\">int<\/span><span style=\"color:#f92672\">[]<\/span> <span style=\"color:#a6e22e\">turnTheArrayToLeft<\/span>(<span style=\"color:#66d9ef\">int<\/span><span style=\"color:#f92672\">[]<\/span> nums, <span style=\"color:#66d9ef\">int<\/span> k) {\n<\/span><\/span><span style=\"display:flex;\"><span>        <span style=\"color:#66d9ef\">for<\/span> (<span style=\"color:#66d9ef\">int<\/span> j <span style=\"color:#f92672\">=<\/span> 0; j <span style=\"color:#f92672\">&lt;<\/span> k; j<span style=\"color:#f92672\">++<\/span>) {\n<\/span><\/span><span style=\"display:flex;\"><span>            <span style=\"color:#66d9ef\">for<\/span> (<span style=\"color:#66d9ef\">int<\/span> i <span style=\"color:#f92672\">=<\/span> 0; i <span style=\"color:#f92672\">&lt;<\/span> nums.<span style=\"color:#a6e22e\">length<\/span> <span style=\"color:#f92672\">-<\/span> 1; i<span style=\"color:#f92672\">++<\/span>) {\n<\/span><\/span><span style=\"display:flex;\"><span>                <span style=\"color:#66d9ef\">int<\/span> temp <span style=\"color:#f92672\">=<\/span> nums<span style=\"color:#f92672\">[<\/span>i<span style=\"color:#f92672\">]<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span>                nums<span style=\"color:#f92672\">[<\/span>i<span style=\"color:#f92672\">]<\/span> <span style=\"color:#f92672\">=<\/span> nums<span style=\"color:#f92672\">[<\/span>i <span style=\"color:#f92672\">+<\/span> 1<span style=\"color:#f92672\">]<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span>                nums<span style=\"color:#f92672\">[<\/span>i <span style=\"color:#f92672\">+<\/span> 1<span style=\"color:#f92672\">]<\/span> <span style=\"color:#f92672\">=<\/span> temp;\n<\/span><\/span><span style=\"display:flex;\"><span>            }\n<\/span><\/span><span style=\"display:flex;\"><span>            System.<span style=\"color:#a6e22e\">out<\/span>.<span style=\"color:#a6e22e\">println<\/span>(Arrays.<span style=\"color:#a6e22e\">toString<\/span>(nums));\n<\/span><\/span><span style=\"display:flex;\"><span>        }\n<\/span><\/span><span style=\"display:flex;\"><span>        <span style=\"color:#66d9ef\">return<\/span> nums;\n<\/span><\/span><span style=\"display:flex;\"><span>    }\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><\/code><\/pre><\/div><p>Output<\/p>"},{"title":"Table Rollback Problem","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2023\/2023-09-20-table-rollback-problem-with-java\/","pubDate":"Wed, 20 Sep 2023 00:00:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2023\/2023-09-20-table-rollback-problem-with-java\/","description":"<p>Create a class that populates a table represented in the following way. You can think of this as a nested hash\/map\/dictionary structure.<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-json\" data-lang=\"json\"><span style=\"display:flex;\"><span>{\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#f92672\">&#34;row1&#34;<\/span>: { <span style=\"color:#f92672\">&#34;col1&#34;<\/span>:<span style=\"color:#e6db74\">&#34;foo&#34;<\/span>, <span style=\"color:#f92672\">&#34;col2&#34;<\/span>:<span style=\"color:#e6db74\">&#34;bar&#34;<\/span> },\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#f92672\">&#34;row2&#34;<\/span>: { <span style=\"color:#f92672\">&#34;col1&#34;<\/span>:<span style=\"color:#e6db74\">&#34;baz&#34;<\/span> }\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><\/code><\/pre><\/div><p>The class should support the following methods:<\/p>\n<ul>\n<li><strong>createRow(rowName)<\/strong>: Creates a new empty row of the givenname. Do nothing if a row with that name already exists<\/li>\n<li><strong>deleteRow(rowName)<\/strong>: Deletes a row with the given name. Donothing if a row with that name doesn&rsquo;t exist<\/li>\n<li><strong>updateCell(rowName, columnName, newVal)<\/strong>: Sets the value ofthe cell at the given row\/column coordinate to the new value. If the row doesnot exist, do nothing. These actions are grouped together in transactions. Theactions above can only be performed as part of a transaction.<\/li>\n<\/ul>\n<p>The class should also support the following methods:<\/p>"},{"title":"Solving the Remote Keyboard Traversal Problem: Navigating the Grid Efficiently","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2023\/2023-09-01-remote-keybpard-traversal-problem\/","pubDate":"Fri, 01 Sep 2023 00:00:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2023\/2023-09-01-remote-keybpard-traversal-problem\/","description":"<h1 id=\"the-problem\">The Problem<\/h1>\n<pre>\n  Write a program to search a movie title using screen keyboard with minimal traversal\n(e.g. Searching for a title Using ROKU\/Apple TV remote on Netflix).\nInput keyboard can have all the characters in any order.\n\nGiven : Movie title and initial position of remote selection\n\nWe have five buttons in remote: UP, DOWN, LEFT, RIGHT, OK\n\nKeyboard: Input remote could be like this (as it buttons could be in any order)\nA B C D E\nF G H I J\nK L M N O\nP Q R S T\nU V W X Y Z\n\nFor Example:\nInitial position of remote: A\nMovie title: BHE\n\nResult: RIGHT, OK, RIGHT, DOWN, OK, RIGHT, RIGTH, UP, OK (Right answer)\n\nResult: RIGHT, RIGHT, LEFT, OK, RIGHT, DOWN, OK, RIGHT, RIGTH, UP, OK (incorrect, not the shortest one)\n<\/pre>\n<p>this problem can be categorized as a grid navigation or grid traversal problem<\/p>"},{"title":"Add `open with intellij` into context menu in linux mint","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2023\/2023-06-11-intellij-in-context-menu\/","pubDate":"Sun, 11 Jun 2023 00:00:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2023\/2023-06-11-intellij-in-context-menu\/","description":"<p>Add code below to ~\/.local\/share\/nemo\/actions\/intellij.nemo_action<\/p>\n<pre tabindex=\"0\"><code>[Nemo Action]\nName=Open in Intellij\nComment=Open in Intellij\nExec=sh -c &#39;&#34;$HOME\/.local\/share\/JetBrains\/Toolbox\/apps\/intellij-idea-community-edition\/bin\/idea&#34; &#34;%F&#34;&#39;\nIcon-Name=intellij\nSelection=Any\nExtensions=dir;\n<\/code><\/pre><p>Then in files go to folder you want to open with intellij then right click and choose open in intellij.<\/p>"},{"title":"Add `open with vscode` into context menu in linux mint","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2023\/2023-05-06-vscode-in-context-menu\/","pubDate":"Sat, 06 May 2023 00:00:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2023\/2023-05-06-vscode-in-context-menu\/","description":"<p>Add code below to ~\/.local\/share\/nemo\/actions\/vscode.nemo_action<\/p>\n<pre tabindex=\"0\"><code>[Nemo Action]\nName=Open in VS Code\nComment=Open in VS Code\nExec=code &#34;%F&#34;\nIcon-Name=visual-studio-code\nSelection=Any\nExtensions=dir;\n<\/code><\/pre><p>Then in files go to folder you want to open with VScode then right click and choose open in VS Code.<\/p>"},{"title":"Printing running sqls in logs with spring boot 3 and hibernate 6","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2023\/2023-04-08-springboot-3-hibernate-6-print-sql\/","pubDate":"Sat, 08 Apr 2023 11:42:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2023\/2023-04-08-springboot-3-hibernate-6-print-sql\/","description":"<p>In application.properties<\/p>\n<pre tabindex=\"0\"><code>logging.level.org.hibernate=info\nlogging.level.org.hibernate.SQL=debug\nlogging.level.org.hibernate.orm.jdbc.bind=trace\nlogging.level.org.hibernate.stat=debug\nlogging.level.org.hibernate.SQL_SLOW=info\nlogging.level.org.hibernate.cache=debug\n<\/code><\/pre><p>will make print all sqls and bindings with it like below<\/p>\n<pre tabindex=\"0\"><code>2023-04-08T09:31:54.232+01:00 DEBUG 164224 --- [           main] org.hibernate.SQL                        : insert into &#34;address&#34; (&#34;city&#34;, &#34;line1&#34;, &#34;post_code&#34;, &#34;id&#34;) values (?, ?, ?, ?)\n2023-04-08T09:31:54.232+01:00 TRACE 164224 --- [           main] org.hibernate.orm.jdbc.bind              : binding parameter [1] as [VARCHAR] - [Glasgow]\n2023-04-08T09:31:54.232+01:00 TRACE 164224 --- [           main] org.hibernate.orm.jdbc.bind              : binding parameter [2] as [VARCHAR] - [apt:0]\n2023-04-08T09:31:54.232+01:00 TRACE 164224 --- [           main] org.hibernate.orm.jdbc.bind              : binding parameter [3] as [VARCHAR] - [G0]\n2023-04-08T09:31:54.232+01:00 TRACE 164224 --- [           main] org.hibernate.orm.jdbc.bind              : binding parameter [4] as [BIGINT] - [28]\n<\/code><\/pre>"},{"title":"Printing running sqls with P6spy in spring boot 3 and hibernate 6","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2023\/2023-04-08-springboot-3-hibernate-6-print-sql-with-p6spy\/","pubDate":"Sat, 08 Apr 2023 00:00:00 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2023\/2023-04-08-springboot-3-hibernate-6-print-sql-with-p6spy\/","description":"<p>in build.gradle<\/p>\n<pre tabindex=\"0\"><code>implementation &#39;p6spy:p6spy:3.9.1&#39;\n<\/code><\/pre><p>In application.properties<\/p>\n<pre tabindex=\"0\"><code>spring.datasource.url=jdbc:p6spy:h2:mem:testdb\nspring.datasource.driverClassName=com.p6spy.engine.spy.P6SpyDriver\n<\/code><\/pre><p>and in spy.properties<\/p>\n<pre tabindex=\"0\"><code>driverlist=org.h2.Driver\nappender=com.p6spy.engine.spy.appender.StdoutLogger\nlogMessageFormat=com.p6spy.engine.spy.appender.CustomLineFormat\ncustomLogMessageFormat=%(currentTime)|%(executionTime)|%(sqlSingleLine)\n<\/code><\/pre><p>With this configuration application logs will appear in console. like below<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-SQL\" data-lang=\"SQL\"><span style=\"display:flex;\"><span><span style=\"color:#ae81ff\">2023<\/span><span style=\"color:#f92672\">-<\/span><span style=\"color:#ae81ff\">04<\/span><span style=\"color:#f92672\">-<\/span><span style=\"color:#ae81ff\">08<\/span>T12:<span style=\"color:#ae81ff\">14<\/span>:<span style=\"color:#ae81ff\">54<\/span>.<span style=\"color:#ae81ff\">237<\/span><span style=\"color:#f92672\">+<\/span><span style=\"color:#ae81ff\">01<\/span>:<span style=\"color:#ae81ff\">00<\/span> DEBUG <span style=\"color:#ae81ff\">178209<\/span> <span style=\"color:#75715e\">--- [nio-8080-exec-4] o.s.w.f.CommonsRequestLoggingFilter      : Before request [GET \/byname\/name1]\n<\/span><\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"><\/span><span style=\"color:#ae81ff\">1680952494240<\/span><span style=\"color:#f92672\">|<\/span><span style=\"color:#ae81ff\">0<\/span><span style=\"color:#f92672\">|<\/span><span style=\"color:#66d9ef\">select<\/span> c1_0.<span style=\"color:#e6db74\">&#34;id&#34;<\/span>,c1_0.<span style=\"color:#e6db74\">&#34;last_name&#34;<\/span>,c1_0.<span style=\"color:#e6db74\">&#34;name&#34;<\/span> <span style=\"color:#66d9ef\">from<\/span> <span style=\"color:#e6db74\">&#34;customer&#34;<\/span> c1_0 <span style=\"color:#66d9ef\">where<\/span> c1_0.<span style=\"color:#e6db74\">&#34;name&#34;<\/span><span style=\"color:#f92672\">=<\/span><span style=\"color:#e6db74\">&#39;name1&#39;<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#ae81ff\">1680952494242<\/span><span style=\"color:#f92672\">|<\/span><span style=\"color:#ae81ff\">0<\/span><span style=\"color:#f92672\">|<\/span><span style=\"color:#66d9ef\">select<\/span> a1_0.<span style=\"color:#e6db74\">&#34;customer_id&#34;<\/span>,a1_1.<span style=\"color:#e6db74\">&#34;id&#34;<\/span>,a1_1.<span style=\"color:#e6db74\">&#34;city&#34;<\/span>,a1_1.<span style=\"color:#e6db74\">&#34;line1&#34;<\/span>,a1_1.<span style=\"color:#e6db74\">&#34;post_code&#34;<\/span> <span style=\"color:#66d9ef\">from<\/span> <span style=\"color:#e6db74\">&#34;customer_addresses&#34;<\/span> a1_0 <span style=\"color:#66d9ef\">join<\/span> <span style=\"color:#e6db74\">&#34;address&#34;<\/span> a1_1 <span style=\"color:#66d9ef\">on<\/span> a1_1.<span style=\"color:#e6db74\">&#34;id&#34;<\/span><span style=\"color:#f92672\">=<\/span>a1_0.<span style=\"color:#e6db74\">&#34;addresses_id&#34;<\/span> <span style=\"color:#66d9ef\">where<\/span> a1_0.<span style=\"color:#e6db74\">&#34;customer_id&#34;<\/span><span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">2<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#ae81ff\">1680952494244<\/span><span style=\"color:#f92672\">|<\/span><span style=\"color:#ae81ff\">0<\/span><span style=\"color:#f92672\">|<\/span><span style=\"color:#66d9ef\">select<\/span> o1_0.<span style=\"color:#e6db74\">&#34;customer_id&#34;<\/span>,o1_1.<span style=\"color:#e6db74\">&#34;id&#34;<\/span>,o1_1.<span style=\"color:#e6db74\">&#34;create_time&#34;<\/span>,o1_1.<span style=\"color:#e6db74\">&#34;full_price&#34;<\/span>,o1_1.<span style=\"color:#e6db74\">&#34;items&#34;<\/span>,o1_1.<span style=\"color:#e6db74\">&#34;update_time&#34;<\/span>,o1_1.<span style=\"color:#e6db74\">&#34;version&#34;<\/span> <span style=\"color:#66d9ef\">from<\/span> <span style=\"color:#e6db74\">&#34;customer_orders&#34;<\/span> o1_0 <span style=\"color:#66d9ef\">join<\/span> <span style=\"color:#e6db74\">&#34;order&#34;<\/span> o1_1 <span style=\"color:#66d9ef\">on<\/span> o1_1.<span style=\"color:#e6db74\">&#34;id&#34;<\/span><span style=\"color:#f92672\">=<\/span>o1_0.<span style=\"color:#e6db74\">&#34;orders_id&#34;<\/span> <span style=\"color:#66d9ef\">where<\/span> o1_0.<span style=\"color:#e6db74\">&#34;customer_id&#34;<\/span><span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">2<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#ae81ff\">1680952494246<\/span><span style=\"color:#f92672\">|<\/span><span style=\"color:#ae81ff\">0<\/span><span style=\"color:#f92672\">|<\/span><span style=\"color:#66d9ef\">select<\/span> b1_0.<span style=\"color:#e6db74\">&#34;customer_id&#34;<\/span>,b1_1.<span style=\"color:#e6db74\">&#34;id&#34;<\/span>,b1_1.<span style=\"color:#e6db74\">&#34;create_time&#34;<\/span>,b1_1.<span style=\"color:#e6db74\">&#34;items&#34;<\/span>,b1_1.<span style=\"color:#e6db74\">&#34;update_time&#34;<\/span>,b1_1.<span style=\"color:#e6db74\">&#34;version&#34;<\/span> <span style=\"color:#66d9ef\">from<\/span> <span style=\"color:#e6db74\">&#34;customer_baskets&#34;<\/span> b1_0 <span style=\"color:#66d9ef\">join<\/span> <span style=\"color:#e6db74\">&#34;basket&#34;<\/span> b1_1 <span style=\"color:#66d9ef\">on<\/span> b1_1.<span style=\"color:#e6db74\">&#34;id&#34;<\/span><span style=\"color:#f92672\">=<\/span>b1_0.<span style=\"color:#e6db74\">&#34;baskets_id&#34;<\/span> <span style=\"color:#66d9ef\">where<\/span> b1_0.<span style=\"color:#e6db74\">&#34;customer_id&#34;<\/span><span style=\"color:#f92672\">=<\/span><span style=\"color:#ae81ff\">2<\/span>\n<\/span><\/span><\/code><\/pre><\/div><p>If required user can change the log format like described <a href=\"https:\/\/github.com\/p6spy\/p6spy\/blob\/master\/src\/main\/assembly\/individualFiles\/spy.properties#L101\">here<\/a>, <a href=\"https:\/\/github.com\/ozkanpakdil\/spring-examples\/tree\/master\/h2-spring-transactions-p6spy\">here<\/a> is working example project.<\/p>\n<p>P6spy is good for development but should not be used in production, for production every database has their own monitoring logging solution which will show what sql is running from which user.<\/p>"},{"title":"Using arti to Connect to TOR Network and query WHOIS information in Rust","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2023\/2023-01-14-tor-whois-arti\/","pubDate":"Sat, 14 Jan 2023 11:42:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2023\/2023-01-14-tor-whois-arti\/","description":"<p><a href=\"https:\/\/github.com\/ozkanpakdil\/rust-examples\/tree\/main\/arti_whois\">This code<\/a> is a web application that allows querying WHOIS information over the TOR network. It uses the arti library to create and manage the tor connection and tor-rtcompat to define the runtime for the tor connection.<\/p>\n<p><a href=\"https:\/\/gitlab.torproject.org\/tpo\/core\/arti\">The arti library<\/a> provides a simple way to connect to the TOR network and make requests through it. It also allows to define the behavior of the tor connection, like in this case OnDemand, which only establishes the connection when it is needed.<\/p>"},{"title":"Getting REST version from request mapping of controller for mockmvc","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2022\/2022-12-12-spring-controller-annotations-get-from-test\/","pubDate":"Mon, 12 Dec 2022 11:42:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2022\/2022-12-12-spring-controller-annotations-get-from-test\/","description":"<p>When we write a spring rest controller we give version url and start writing different functions as endpoints like below<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-java\" data-lang=\"java\"><span style=\"display:flex;\"><span><span style=\"color:#a6e22e\">@RestController<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#a6e22e\">@RequestMapping<\/span>(<span style=\"color:#e6db74\">&#34;\/api\/v1&#34;<\/span>)\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">public<\/span> <span style=\"color:#66d9ef\">class<\/span> <span style=\"color:#a6e22e\">ControllerApi<\/span> {\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>    <span style=\"color:#66d9ef\">final<\/span> LoginSender loginSender;\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>    <span style=\"color:#66d9ef\">public<\/span> <span style=\"color:#a6e22e\">ControllerApi<\/span>(LoginSender loginSender) {\n<\/span><\/span><span style=\"display:flex;\"><span>        <span style=\"color:#66d9ef\">this<\/span>.<span style=\"color:#a6e22e\">loginSender<\/span> <span style=\"color:#f92672\">=<\/span> loginSender;\n<\/span><\/span><span style=\"display:flex;\"><span>    }\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>    <span style=\"color:#a6e22e\">@PostMapping<\/span>(<span style=\"color:#e6db74\">&#34;\/login&#34;<\/span>)\n<\/span><\/span><span style=\"display:flex;\"><span>    <span style=\"color:#66d9ef\">boolean<\/span> <span style=\"color:#a6e22e\">login<\/span>(<span style=\"color:#a6e22e\">@RequestBody<\/span> LoginParams params) {\n<\/span><\/span><span style=\"display:flex;\"><span>        <span style=\"color:#66d9ef\">return<\/span> loginSender.<span style=\"color:#a6e22e\">login<\/span>(params.<span style=\"color:#a6e22e\">server<\/span>(), params.<span style=\"color:#a6e22e\">login<\/span>(), params.<span style=\"color:#a6e22e\">password<\/span>(), params.<span style=\"color:#a6e22e\">build<\/span>(), params.<span style=\"color:#a6e22e\">webManager<\/span>());\n<\/span><\/span><span style=\"display:flex;\"><span>    }\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>    <span style=\"color:#a6e22e\">@GetMapping<\/span>(<span style=\"color:#e6db74\">&#34;\/get1&#34;<\/span>)\n<\/span><\/span><span style=\"display:flex;\"><span>    LoginParams <span style=\"color:#a6e22e\">get1<\/span>(<span style=\"color:#a6e22e\">@RequestParam<\/span> String login, <span style=\"color:#a6e22e\">@RequestParam<\/span>(required <span style=\"color:#f92672\">=<\/span> <span style=\"color:#66d9ef\">false<\/span>) String webMan,\n<\/span><\/span><span style=\"display:flex;\"><span>                     <span style=\"color:#a6e22e\">@RequestParam<\/span>(required <span style=\"color:#f92672\">=<\/span> <span style=\"color:#66d9ef\">false<\/span>) String server, <span style=\"color:#a6e22e\">@RequestParam<\/span>(required <span style=\"color:#f92672\">=<\/span> <span style=\"color:#66d9ef\">false<\/span>) String pass,\n<\/span><\/span><span style=\"display:flex;\"><span>                     <span style=\"color:#a6e22e\">@RequestParam<\/span>(required <span style=\"color:#f92672\">=<\/span> <span style=\"color:#66d9ef\">false<\/span>) String build) {\n<\/span><\/span><span style=\"display:flex;\"><span>        <span style=\"color:#66d9ef\">return<\/span> LoginParams.<span style=\"color:#a6e22e\">builder<\/span>()\n<\/span><\/span><span style=\"display:flex;\"><span>                .<span style=\"color:#a6e22e\">webManager<\/span>(webMan)\n<\/span><\/span><span style=\"display:flex;\"><span>                .<span style=\"color:#a6e22e\">server<\/span>(server)\n<\/span><\/span><span style=\"display:flex;\"><span>                .<span style=\"color:#a6e22e\">password<\/span>(pass)\n<\/span><\/span><span style=\"display:flex;\"><span>                .<span style=\"color:#a6e22e\">login<\/span>(login)\n<\/span><\/span><span style=\"display:flex;\"><span>                .<span style=\"color:#a6e22e\">build<\/span>(build)\n<\/span><\/span><span style=\"display:flex;\"><span>                .<span style=\"color:#a6e22e\">build<\/span>();\n<\/span><\/span><span style=\"display:flex;\"><span>    }\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><\/code><\/pre><\/div><p>ib the future this controller will have different version number from v1 to v2 or in the future someone will change login endpoint from &ldquo;\/login&rdquo; to &ldquo;\/loginJwt&rdquo; but function order probably will not change. So in order to prevent your tests to fail we can collect these data from controller class like the code below.<\/p>"},{"title":"How to setup gatling test scenario","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2022\/2022-12-12-gatling-setup\/","pubDate":"Mon, 12 Dec 2022 11:42:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2022\/2022-12-12-gatling-setup\/","description":"<p>In a Gatling test, the setUp method is used to specify the scenario that will be run during the test. In the code below, the scenario is specified using the scn variable, which presumably refers to a scenario that has been defined elsewhere in the code.<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-scala\" data-lang=\"scala\"><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">val<\/span> nbUsers <span style=\"color:#66d9ef\">=<\/span> <span style=\"color:#a6e22e\">Integer<\/span><span style=\"color:#f92672\">.<\/span>getInteger<span style=\"color:#f92672\">(<\/span><span style=\"color:#e6db74\">&#34;users&#34;<\/span><span style=\"color:#f92672\">,<\/span> <span style=\"color:#ae81ff\">1000<\/span><span style=\"color:#f92672\">)<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">val<\/span> myRepeat <span style=\"color:#66d9ef\">=<\/span> java<span style=\"color:#f92672\">.<\/span>lang<span style=\"color:#f92672\">.<\/span><span style=\"color:#a6e22e\">Long<\/span><span style=\"color:#f92672\">.<\/span>getLong<span style=\"color:#f92672\">(<\/span><span style=\"color:#e6db74\">&#34;repeat&#34;<\/span><span style=\"color:#f92672\">,<\/span> <span style=\"color:#ae81ff\">2<\/span><span style=\"color:#f92672\">)<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">val<\/span> httpProtocol <span style=\"color:#66d9ef\">=<\/span> http<span style=\"color:#f92672\">.<\/span>baseUrl<span style=\"color:#f92672\">(<\/span><span style=\"color:#e6db74\">&#34;http:\/\/localhost:8080&#34;<\/span><span style=\"color:#f92672\">)<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">val<\/span> scn <span style=\"color:#66d9ef\">=<\/span> scenario<span style=\"color:#f92672\">(<\/span><span style=\"color:#e6db74\">&#34;hello&#34;<\/span><span style=\"color:#f92672\">).<\/span>repeat<span style=\"color:#f92672\">(<\/span>myRepeat<span style=\"color:#f92672\">.<\/span>toInt<span style=\"color:#f92672\">)<\/span> <span style=\"color:#f92672\">{<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\texec<span style=\"color:#f92672\">(<\/span>http<span style=\"color:#f92672\">(<\/span><span style=\"color:#e6db74\">&#34;GetApplicationInfo&#34;<\/span><span style=\"color:#f92672\">)<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t<span style=\"color:#f92672\">.<\/span>get<span style=\"color:#f92672\">(<\/span><span style=\"color:#e6db74\">&#34;\/hello&#34;<\/span><span style=\"color:#f92672\">)<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t<span style=\"color:#f92672\">.<\/span>check<span style=\"color:#f92672\">(<\/span>status<span style=\"color:#f92672\">.<\/span>is<span style=\"color:#f92672\">(<\/span><span style=\"color:#ae81ff\">200<\/span><span style=\"color:#f92672\">))<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t<span style=\"color:#f92672\">.<\/span>check<span style=\"color:#f92672\">(<\/span>jsonPath<span style=\"color:#f92672\">(<\/span><span style=\"color:#e6db74\">&#34;$.name&#34;<\/span><span style=\"color:#f92672\">)))<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#f92672\">}<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>setUp<span style=\"color:#f92672\">(<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\tscn<span style=\"color:#f92672\">.<\/span>inject<span style=\"color:#f92672\">(<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\t\trampUsers<span style=\"color:#f92672\">(<\/span>nbUsers<span style=\"color:#f92672\">)<\/span> during <span style=\"color:#f92672\">(<\/span><span style=\"color:#ae81ff\">5<\/span> seconds<span style=\"color:#f92672\">)<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\t<span style=\"color:#f92672\">).<\/span>protocols<span style=\"color:#f92672\">(<\/span>httpProtocol<span style=\"color:#f92672\">)<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#f92672\">)<\/span>\n<\/span><\/span><\/code><\/pre><\/div><p>The inject method is used to specify how the users will be introduced into the system under test. In this case, the rampUsers method is used to gradually increase the number of users over a period of 5 seconds. This is known as a ramp-up. The total number of users to be injected is specified by the nbUsers variable.<\/p>"},{"title":"Ktor build with graalvm","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2022\/2022-11-13-ktor-graal\/","pubDate":"Sun, 13 Nov 2022 11:42:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2022\/2022-11-13-ktor-graal\/","description":"<p>I wanted to test ktor.io with graalvm build, main problem is all code I found using gradle and my project is using mvn here is the <a href=\"https:\/\/github.com\/ozkanpakdil\/test-microservice-frameworks\/tree\/main\/ktor-demo\">code<\/a>. like other modules I needed to create reflect config json, otherwise ktor serialize is not working properly with graal and when I send a request to &ldquo;\/hello&rdquo; endpoint I got empty response. I tried to write myself but did not work and at the end I used command below<\/p>"},{"title":"My first eclipse plugin","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2022\/2022-10-10-my-first-eclipse-plugin\/","pubDate":"Mon, 10 Oct 2022 11:42:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2022\/2022-10-10-my-first-eclipse-plugin\/","description":"<p>I used Eclipse between 2008-2018. After 2018 I saw everyone was using Intellij I moved too. Then today I was trying to write some aspectj code and created an .aj file. I realized intellij community edition does not really support aj files. I checked vscode it also did not support it, then the old friend eclipse came. It caused some issues because of the old plugin version, but after installation of the new version ajdt plugin it worked.<\/p>"},{"title":"Oracle XE database install on Linux Mint","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2022\/2022-10-04-linux-mint-oracle-xe-database-install\/","pubDate":"Tue, 04 Oct 2022 11:42:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2022\/2022-10-04-linux-mint-oracle-xe-database-install\/","description":"<p>Fallowed this <a href=\"https:\/\/stackoverflow.com\/a\/67945200\/175554\">answer<\/a> looked like it would work.<\/p>\n<details class=\"faq box\" markdown=\"1\"><summary>Show bash output<\/summary>\n  installation steps below\n  <br \/>\n```bash\nmintozzy@mintozzy-MACH-WX9:~\/Downloads$ sudo apt install alien libaio1 unixodbc\n[sudo] password for mintozzy:       \nReading package lists... Done\nBuilding dependency tree       \nReading state information... Done\nlibaio1 is already the newest version (0.3.112-5).\nThe following additional packages will be installed:\n  autoconf automake autopoint autotools-dev debhelper debugedit dh-autoreconf dh-strip-nondeterminism dwz libarchive-cpio-perl libdebhelper-perl libfile-stripnondeterminism-perl libltdl-dev libmail-sendmail-perl libodbc1 librpm8\n  librpmbuild8 librpmio8 librpmsign8 libsub-override-perl libsys-hostname-long-perl libtool odbcinst odbcinst1debian2 po-debconf rpm rpm-common rpm2cpio\nSuggested packages:\n  autoconf-archive gnu-standards autoconf-doc dh-make rpm-i18n libtool-doc libmyodbc odbc-postgresql tdsodbc unixodbc-bin gfortran | fortran95-compiler gcj-jdk libmail-box-perl python elfutils rpmlint rpm2html\nThe following NEW packages will be installed\n  alien autoconf automake autopoint autotools-dev debhelper debugedit dh-autoreconf dh-strip-nondeterminism dwz libarchive-cpio-perl libdebhelper-perl libfile-stripnondeterminism-perl libltdl-dev libmail-sendmail-perl libodbc1 librpm8\n  librpmbuild8 librpmio8 librpmsign8 libsub-override-perl libsys-hostname-long-perl libtool odbcinst odbcinst1debian2 po-debconf rpm rpm-common rpm2cpio unixodbc\n0 to upgrade, 30 to newly install, 0 to remove and 5 not to upgrade.\nNeed to get 3,860 kB of archives.\nAfter this operation, 12.8 MB of additional disk space will be used.\nDo you want to continue? [Y\/n] \nGet:1 http:\/\/archive.ubuntu.com\/ubuntu focal\/main amd64 autotools-dev all 20180224.1 [39.6 kB]\nGet:2 http:\/\/archive.ubuntu.com\/ubuntu focal\/main amd64 autoconf all 2.69-11.1 [321 kB]\nGet:3 http:\/\/archive.ubuntu.com\/ubuntu focal\/main amd64 automake all 1:1.16.1-4ubuntu6 [522 kB]\nGet:4 http:\/\/archive.ubuntu.com\/ubuntu focal\/main amd64 autopoint all 0.19.8.1-10build1 [412 kB]\nGet:5 http:\/\/archive.ubuntu.com\/ubuntu focal\/main amd64 libtool all 2.4.6-14 [161 kB]\nGet:6 http:\/\/archive.ubuntu.com\/ubuntu focal\/main amd64 dh-autoreconf all 19 [16.1 kB]\nGet:7 http:\/\/archive.ubuntu.com\/ubuntu focal\/main amd64 libdebhelper-perl all 12.10ubuntu1 [62.1 kB]\nGet:8 http:\/\/archive.ubuntu.com\/ubuntu focal\/main amd64 libsub-override-perl all 0.09-2 [9,532 B]\nGet:9 http:\/\/archive.ubuntu.com\/ubuntu focal\/main amd64 libfile-stripnondeterminism-perl all 1.7.0-1 [15.9 kB]\nGet:10 http:\/\/archive.ubuntu.com\/ubuntu focal\/main amd64 dh-strip-nondeterminism all 1.7.0-1 [5,228 B]\nGet:11 http:\/\/archive.ubuntu.com\/ubuntu focal\/main amd64 dwz amd64 0.13-5 [151 kB]\nGet:12 http:\/\/archive.ubuntu.com\/ubuntu focal\/main amd64 po-debconf all 1.0.21 [233 kB]\nGet:13 http:\/\/archive.ubuntu.com\/ubuntu focal\/main amd64 debhelper all 12.10ubuntu1 [877 kB]\nGet:14 http:\/\/archive.ubuntu.com\/ubuntu focal\/universe amd64 librpmio8 amd64 4.14.2.1+dfsg1-1build2 [75.2 kB]\nGet:15 http:\/\/archive.ubuntu.com\/ubuntu focal\/universe amd64 librpm8 amd64 4.14.2.1+dfsg1-1build2 [174 kB]\nGet:16 http:\/\/archive.ubuntu.com\/ubuntu focal\/universe amd64 librpmbuild8 amd64 4.14.2.1+dfsg1-1build2 [70.9 kB]\nGet:17 http:\/\/archive.ubuntu.com\/ubuntu focal\/universe amd64 librpmsign8 amd64 4.14.2.1+dfsg1-1build2 [8,280 B]\nGet:18 http:\/\/archive.ubuntu.com\/ubuntu focal\/universe amd64 rpm-common amd64 4.14.2.1+dfsg1-1build2 [28.8 kB]\nGet:19 http:\/\/archive.ubuntu.com\/ubuntu focal\/universe amd64 rpm2cpio amd64 4.14.2.1+dfsg1-1build2 [8,096 B]\nGet:20 http:\/\/archive.ubuntu.com\/ubuntu focal\/universe amd64 debugedit amd64 4.14.2.1+dfsg1-1build2 [19.5 kB]\nGet:21 http:\/\/archive.ubuntu.com\/ubuntu focal\/universe amd64 rpm amd64 4.14.2.1+dfsg1-1build2 [119 kB]\nGet:22 http:\/\/archive.ubuntu.com\/ubuntu focal\/universe amd64 alien all 8.95 [54.5 kB]\nGet:23 http:\/\/archive.ubuntu.com\/ubuntu focal\/main amd64 libarchive-cpio-perl all 0.10-1 [9,644 B]\nGet:24 http:\/\/archive.ubuntu.com\/ubuntu focal\/main amd64 libltdl-dev amd64 2.4.6-14 [162 kB]\nGet:25 http:\/\/archive.ubuntu.com\/ubuntu focal\/main amd64 libsys-hostname-long-perl all 1.5-1 [11.7 kB]\nGet:26 http:\/\/archive.ubuntu.com\/ubuntu focal\/main amd64 libmail-sendmail-perl all 0.80-1 [22.6 kB]\nGet:27 http:\/\/archive.ubuntu.com\/ubuntu focal\/main amd64 libodbc1 amd64 2.3.6-0.1build1 [189 kB]\nGet:28 http:\/\/archive.ubuntu.com\/ubuntu focal\/main amd64 odbcinst1debian2 amd64 2.3.6-0.1build1 [41.1 kB]\nGet:29 http:\/\/archive.ubuntu.com\/ubuntu focal\/main amd64 odbcinst amd64 2.3.6-0.1build1 [14.8 kB]\nGet:30 http:\/\/archive.ubuntu.com\/ubuntu focal\/universe amd64 unixodbc amd64 2.3.6-0.1build1 [24.6 kB]\nFetched 3,860 kB in 1s (7,011 kB\/s)  \nSelecting previously unselected package autotools-dev.\n(Reading database ... 363531 files and directories currently installed.)\nPreparing to unpack ...\/00-autotools-dev_20180224.1_all.deb ...\nUnpacking autotools-dev (20180224.1) ...\nSelecting previously unselected package autoconf.\nPreparing to unpack ...\/01-autoconf_2.69-11.1_all.deb ...\nUnpacking autoconf (2.69-11.1) ...\nSelecting previously unselected package automake.\nPreparing to unpack ...\/02-automake_1%3a1.16.1-4ubuntu6_all.deb ...\nUnpacking automake (1:1.16.1-4ubuntu6) ...\nSelecting previously unselected package autopoint.\nPreparing to unpack ...\/03-autopoint_0.19.8.1-10build1_all.deb ...\nUnpacking autopoint (0.19.8.1-10build1) ...\nSelecting previously unselected package libtool.\nPreparing to unpack ...\/04-libtool_2.4.6-14_all.deb ...\nUnpacking libtool (2.4.6-14) ...\nSelecting previously unselected package dh-autoreconf.\nPreparing to unpack ...\/05-dh-autoreconf_19_all.deb ...\nUnpacking dh-autoreconf (19) ...\nSelecting previously unselected package libdebhelper-perl.\nPreparing to unpack ...\/06-libdebhelper-perl_12.10ubuntu1_all.deb ...\nUnpacking libdebhelper-perl (12.10ubuntu1) ...\nSelecting previously unselected package libsub-override-perl.\nPreparing to unpack ...\/07-libsub-override-perl_0.09-2_all.deb ...\nUnpacking libsub-override-perl (0.09-2) ...\nSelecting previously unselected package libfile-stripnondeterminism-perl.\nPreparing to unpack ...\/08-libfile-stripnondeterminism-perl_1.7.0-1_all.deb ...\nUnpacking libfile-stripnondeterminism-perl (1.7.0-1) ...\nSelecting previously unselected package dh-strip-nondeterminism.\nPreparing to unpack ...\/09-dh-strip-nondeterminism_1.7.0-1_all.deb ...\nUnpacking dh-strip-nondeterminism (1.7.0-1) ...\nSelecting previously unselected package dwz.\nPreparing to unpack ...\/10-dwz_0.13-5_amd64.deb ...\nUnpacking dwz (0.13-5) ...\nSelecting previously unselected package po-debconf.\nPreparing to unpack ...\/11-po-debconf_1.0.21_all.deb ...\nUnpacking po-debconf (1.0.21) ...\nSelecting previously unselected package debhelper.\nPreparing to unpack ...\/12-debhelper_12.10ubuntu1_all.deb ...\nUnpacking debhelper (12.10ubuntu1) ...\nSelecting previously unselected package librpmio8.\nPreparing to unpack ...\/13-librpmio8_4.14.2.1+dfsg1-1build2_amd64.deb ...\nUnpacking librpmio8 (4.14.2.1+dfsg1-1build2) ...\nSelecting previously unselected package librpm8.\nPreparing to unpack ...\/14-librpm8_4.14.2.1+dfsg1-1build2_amd64.deb ...\nUnpacking librpm8 (4.14.2.1+dfsg1-1build2) ...\nSelecting previously unselected package librpmbuild8.\nPreparing to unpack ...\/15-librpmbuild8_4.14.2.1+dfsg1-1build2_amd64.deb ...\nUnpacking librpmbuild8 (4.14.2.1+dfsg1-1build2) ...\nSelecting previously unselected package librpmsign8.\nPreparing to unpack ...\/16-librpmsign8_4.14.2.1+dfsg1-1build2_amd64.deb ...\nUnpacking librpmsign8 (4.14.2.1+dfsg1-1build2) ...\nSelecting previously unselected package rpm-common.\nPreparing to unpack ...\/17-rpm-common_4.14.2.1+dfsg1-1build2_amd64.deb ...\nUnpacking rpm-common (4.14.2.1+dfsg1-1build2) ...\nSelecting previously unselected package rpm2cpio.\nPreparing to unpack ...\/18-rpm2cpio_4.14.2.1+dfsg1-1build2_amd64.deb ...\nUnpacking rpm2cpio (4.14.2.1+dfsg1-1build2) ...\nSelecting previously unselected package debugedit.\nPreparing to unpack ...\/19-debugedit_4.14.2.1+dfsg1-1build2_amd64.deb ...\nUnpacking debugedit (4.14.2.1+dfsg1-1build2) ...\nSelecting previously unselected package rpm.\nPreparing to unpack ...\/20-rpm_4.14.2.1+dfsg1-1build2_amd64.deb ...\nUnpacking rpm (4.14.2.1+dfsg1-1build2) ...\nSelecting previously unselected package alien.\nPreparing to unpack ...\/21-alien_8.95_all.deb ...\nUnpacking alien (8.95) ...\nSelecting previously unselected package libarchive-cpio-perl.\nPreparing to unpack ...\/22-libarchive-cpio-perl_0.10-1_all.deb ...\nUnpacking libarchive-cpio-perl (0.10-1) ...\nSelecting previously unselected package libltdl-dev:amd64.\nPreparing to unpack ...\/23-libltdl-dev_2.4.6-14_amd64.deb ...\nUnpacking libltdl-dev:amd64 (2.4.6-14) ...\nSelecting previously unselected package libsys-hostname-long-perl.\nPreparing to unpack ...\/24-libsys-hostname-long-perl_1.5-1_all.deb ...\nUnpacking libsys-hostname-long-perl (1.5-1) ...\nSelecting previously unselected package libmail-sendmail-perl.\nPreparing to unpack ...\/25-libmail-sendmail-perl_0.80-1_all.deb ...\nUnpacking libmail-sendmail-perl (0.80-1) ...\nSelecting previously unselected package libodbc1:amd64.\nPreparing to unpack ...\/26-libodbc1_2.3.6-0.1build1_amd64.deb ...\nUnpacking libodbc1:amd64 (2.3.6-0.1build1) ...\nSelecting previously unselected package odbcinst1debian2:amd64.\nPreparing to unpack ...\/27-odbcinst1debian2_2.3.6-0.1build1_amd64.deb ...\nUnpacking odbcinst1debian2:amd64 (2.3.6-0.1build1) ...\nSelecting previously unselected package odbcinst.\nPreparing to unpack ...\/28-odbcinst_2.3.6-0.1build1_amd64.deb ...\nUnpacking odbcinst (2.3.6-0.1build1) ...\nSelecting previously unselected package unixodbc.\nPreparing to unpack ...\/29-unixodbc_2.3.6-0.1build1_amd64.deb ...\nUnpacking unixodbc (2.3.6-0.1build1) ...\nSetting up librpmio8 (4.14.2.1+dfsg1-1build2) ...\nSetting up librpm8 (4.14.2.1+dfsg1-1build2) ...\nSetting up po-debconf (1.0.21) ...\nSetting up libdebhelper-perl (12.10ubuntu1) ...\nSetting up rpm-common (4.14.2.1+dfsg1-1build2) ...\nSetting up autotools-dev (20180224.1) ...\nSetting up librpmbuild8 (4.14.2.1+dfsg1-1build2) ...\nSetting up autopoint (0.19.8.1-10build1) ...\nSetting up libodbc1:amd64 (2.3.6-0.1build1) ...\nSetting up autoconf (2.69-11.1) ...\nSetting up librpmsign8 (4.14.2.1+dfsg1-1build2) ...\nSetting up dwz (0.13-5) ...\nSetting up libarchive-cpio-perl (0.10-1) ...\nSetting up debugedit (4.14.2.1+dfsg1-1build2) ...\nSetting up libsub-override-perl (0.09-2) ...\nSetting up libsys-hostname-long-perl (1.5-1) ...\nSetting up automake (1:1.16.1-4ubuntu6) ...\nupdate-alternatives: using \/usr\/bin\/automake-1.16 to provide \/usr\/bin\/automake (automake) in auto mode\nSetting up libfile-stripnondeterminism-perl (1.7.0-1) ...\nSetting up libtool (2.4.6-14) ...\nSetting up rpm2cpio (4.14.2.1+dfsg1-1build2) ...\nSetting up rpm (4.14.2.1+dfsg1-1build2) ...\nSetting up libmail-sendmail-perl (0.80-1) ...\nSetting up libltdl-dev:amd64 (2.4.6-14) ...\nSetting up dh-strip-nondeterminism (1.7.0-1) ...\nSetting up dh-autoreconf (19) ...\nSetting up odbcinst (2.3.6-0.1build1) ...\nSetting up debhelper (12.10ubuntu1) ...\nSetting up alien (8.95) ...\nSetting up odbcinst1debian2:amd64 (2.3.6-0.1build1) ...\nSetting up unixodbc (2.3.6-0.1build1) ...\nProcessing triggers for doc-base (0.10.9) ...\nProcessing 2 added doc-base files...\nProcessing triggers for libc-bin (2.31-0ubuntu9.9) ...\nProcessing triggers for man-db (2.9.1-1) ...\nProcessing triggers for install-info (6.7.0.dfsg.2-5) ...\nmintozzy@mintozzy-MACH-WX9:~\/Downloads$ sudo alien --script oracle-database-xe-21c-1.0-1.ol8.x86_64.rpm \nwarning: oracle-database-xe-21c-1.0-1.ol8.x86_64.rpm: Header V3 RSA\/SHA256 Signature, key ID ad986da3: NOKEY\nwarning: oracle-database-xe-21c-1.0-1.ol8.x86_64.rpm: Header V3 RSA\/SHA256 Signature, key ID ad986da3: NOKEY\nwarning: oracle-database-xe-21c-1.0-1.ol8.x86_64.rpm: Header V3 RSA\/SHA256 Signature, key ID ad986da3: NOKEY\nwarning: oracle-database-xe-21c-1.0-1.ol8.x86_64.rpm: Header V3 RSA\/SHA256 Signature, key ID ad986da3: NOKEY\nwarning: oracle-database-xe-21c-1.0-1.ol8.x86_64.rpm: Header V3 RSA\/SHA256 Signature, key ID ad986da3: NOKEY\nwarning: oracle-database-xe-21c-1.0-1.ol8.x86_64.rpm: Header V3 RSA\/SHA256 Signature, key ID ad986da3: NOKEY\nwarning: oracle-database-xe-21c-1.0-1.ol8.x86_64.rpm: Header V3 RSA\/SHA256 Signature, key ID ad986da3: NOKEY\nwarning: oracle-database-xe-21c-1.0-1.ol8.x86_64.rpm: Header V3 RSA\/SHA256 Signature, key ID ad986da3: NOKEY\nwarning: oracle-database-xe-21c-1.0-1.ol8.x86_64.rpm: Header V3 RSA\/SHA256 Signature, key ID ad986da3: NOKEY\nwarning: oracle-database-xe-21c-1.0-1.ol8.x86_64.rpm: Header V3 RSA\/SHA256 Signature, key ID ad986da3: NOKEY\nwarning: oracle-database-xe-21c-1.0-1.ol8.x86_64.rpm: Header V3 RSA\/SHA256 Signature, key ID ad986da3: NOKEY\nwarning: oracle-database-xe-21c-1.0-1.ol8.x86_64.rpm: Header V3 RSA\/SHA256 Signature, key ID ad986da3: NOKEY\nwarning: oracle-database-xe-21c-1.0-1.ol8.x86_64.rpm: Header V3 RSA\/SHA256 Signature, key ID ad986da3: NOKEY\nwarning: oracle-database-xe-21c-1.0-1.ol8.x86_64.rpm: Header V3 RSA\/SHA256 Signature, key ID ad986da3: NOKEY\nwarning: oracle-database-xe-21c-1.0-1.ol8.x86_64.rpm: Header V3 RSA\/SHA256 Signature, key ID ad986da3: NOKEY\nwarning: oracle-database-xe-21c-1.0-1.ol8.x86_64.rpm: Header V3 RSA\/SHA256 Signature, key ID ad986da3: NOKEY\nwarning: oracle-database-xe-21c-1.0-1.ol8.x86_64.rpm: Header V3 RSA\/SHA256 Signature, key ID ad986da3: NOKEY\noracle-database-xe-21c_1.0-2_amd64.deb generated\nmintozzy@mintozzy-MACH-WX9:~\/Downloads$ sudo dpkg -i oracle-database-xe-21c_1.0-2_amd64.deb \n[sudo] password for mintozzy:       \nSelecting previously unselected package oracle-database-xe-21c.\n(Reading database ... 364811 files and directories currently installed.)\nPreparing to unpack oracle-database-xe-21c_1.0-2_amd64.deb ...\nln: failed to create symbolic link '\/bin\/awk': File exists\nUnpacking oracle-database-xe-21c (1.0-2) ...\nSetting up oracle-database-xe-21c (1.0-2) ...\n[INFO] Executing post installation scripts...\n[INFO] Oracle home installed successfully and ready to be configured.\nTo configure Oracle Database XE, optionally modify the parameters in '\/etc\/sysconfig\/oracle-xe-21c.conf' and then execute '\/etc\/init.d\/oracle-xe-21c configure' as root.\nProcessing triggers for libc-bin (2.31-0ubuntu9.9) ...\nProcessing triggers for systemd (245.4-4ubuntu3.18) ...\nmintozzy@mintozzy-MACH-WX9:~\/Downloads$ \n```\n <\/details>\nthen when I tried to run that configure command first got error related to machine ip and in second try I got rpm related error :) running oracle on mint is hard, below you can see the error\n```bash\nmintozzy@mintozzy-MACH-WX9:~\/Downloads$ sudo \/etc\/init.d\/oracle-xe-21c configure\nSpecify a password to be used for database accounts. Oracle recommends that the password entered should be at least 8 characters in length, contain at least 1 uppercase character, 1 lower case character and 1 digit [0-9]. Note that the same password will be used for SYS, SYSTEM and PDBADMIN accounts:\nConfirm the password:\nConfiguring Oracle Listener.\nListener configuration failed. Check log '\/opt\/oracle\/cfgtoollogs\/netca\/netca_configure_out.log' for more details.\nmintozzy@mintozzy-MACH-WX9:~\/Downloads$ sudo \/etc\/init.d\/oracle-xe-21c configure\nSpecify a password to be used for database accounts. Oracle recommends that the password entered should be at least 8 characters in length, contain at least 1 uppercase character, 1 lower case character and 1 digit [0-9]. Note that the same password will be used for SYS, SYSTEM and PDBADMIN accounts:\nConfirm the password:\nConfiguring Oracle Listener.\nListener configuration succeeded.\nConfiguring Oracle Database XE.\n[FATAL] [DBT-50000] Unable to check available system memory.\n   CAUSE: An exception occured while checking kernel parameter.\n*ADDITIONAL INFORMATION:*\nException details\n - PRVG-13702 : RPM Package Manager database files are corrupt on nodes \"laptop\". PRVG-2043 : Command \"\/bin\/rpm --quiet -qa \" failed on node \"laptop\" and produced the following output: error: cannot open Packages database in \/home\/oracle\/.rpmdb error: cannot open Packages database in \/home\/oracle\/.rpmdb\n<p>Database configuration failed. Check logs under &lsquo;\/opt\/oracle\/cfgtoollogs\/dbca&rsquo;.<\/p>"},{"title":"Disable Spring Boot Hikari Datasource with aspectj","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2022\/2022-08-04-spring-boot-disable-datasource-hikaripool\/","pubDate":"Thu, 04 Aug 2022 11:42:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2022\/2022-08-04-spring-boot-disable-datasource-hikaripool\/","description":"<p>There is database which will shutdown in uncertain future and application wants to be restarted and still working after that. In spring boot every datasource bean depends to some other bean, if we use <strong>@ConditionalOnProperty<\/strong> which actually not creates the bean after that other beans fails to initialize and app stop booting.<\/p>\n<p>If need to disable a datasource without deleting all the spring beans or without using <a href=\"https:\/\/docs.spring.io\/spring-boot\/docs\/current\/reference\/html\/features.html#features.developing-auto-configuration.condition-annotations.property-conditions\">@ConditionalOnProperty<\/a><\/p>\n<p>When @ConditionalOnProperty comes to scene it is like deleting or changing all other spring beans which is not really required if you just want to disable a datasource.<\/p>"},{"title":"Gatling parameterize","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2022\/2022-03-12-parameterize-gatling-test\/","pubDate":"Sat, 12 Mar 2022 11:42:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2022\/2022-03-12-parameterize-gatling-test\/","description":"<p>In order to send testing parameters from command line like below<\/p>\n<pre tabindex=\"0\"><code>mvn -ntp -f $retDir\/gatling\/pom.xml gatling:test -Dusers=2000 -Drepeat=3\n<\/code><\/pre><p>these users and repeat can be used from load scala like below<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-scala\" data-lang=\"scala\"><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">class<\/span> <span style=\"color:#a6e22e\">LoadTest<\/span> <span style=\"color:#66d9ef\">extends<\/span> <span style=\"color:#a6e22e\">Simulation<\/span> <span style=\"color:#f92672\">{<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>\t<span style=\"color:#66d9ef\">val<\/span> nbUsers <span style=\"color:#66d9ef\">=<\/span> <span style=\"color:#a6e22e\">Integer<\/span><span style=\"color:#f92672\">.<\/span>getInteger<span style=\"color:#f92672\">(<\/span><span style=\"color:#e6db74\">&#34;users&#34;<\/span><span style=\"color:#f92672\">,<\/span> <span style=\"color:#ae81ff\">1000<\/span><span style=\"color:#f92672\">)<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\t<span style=\"color:#66d9ef\">val<\/span> myRepeat <span style=\"color:#66d9ef\">=<\/span> java<span style=\"color:#f92672\">.<\/span>lang<span style=\"color:#f92672\">.<\/span><span style=\"color:#a6e22e\">Long<\/span><span style=\"color:#f92672\">.<\/span>getLong<span style=\"color:#f92672\">(<\/span><span style=\"color:#e6db74\">&#34;repeat&#34;<\/span><span style=\"color:#f92672\">,<\/span> <span style=\"color:#ae81ff\">2<\/span><span style=\"color:#f92672\">)<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>\t<span style=\"color:#66d9ef\">val<\/span> httpProtocol <span style=\"color:#66d9ef\">=<\/span> http<span style=\"color:#f92672\">.<\/span>baseUrl<span style=\"color:#f92672\">(<\/span><span style=\"color:#e6db74\">&#34;http:\/\/localhost:8080&#34;<\/span><span style=\"color:#f92672\">)<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>\t<span style=\"color:#66d9ef\">val<\/span> scn <span style=\"color:#66d9ef\">=<\/span> scenario<span style=\"color:#f92672\">(<\/span><span style=\"color:#e6db74\">&#34;hello&#34;<\/span><span style=\"color:#f92672\">).<\/span>repeat<span style=\"color:#f92672\">(<\/span>myRepeat<span style=\"color:#f92672\">.<\/span>toInt<span style=\"color:#f92672\">)<\/span> <span style=\"color:#f92672\">{<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\t\texec<span style=\"color:#f92672\">(<\/span>http<span style=\"color:#f92672\">(<\/span><span style=\"color:#e6db74\">&#34;GetApplicationInfo&#34;<\/span><span style=\"color:#f92672\">)<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\t<span style=\"color:#f92672\">.<\/span>get<span style=\"color:#f92672\">(<\/span><span style=\"color:#e6db74\">&#34;\/hello&#34;<\/span><span style=\"color:#f92672\">)<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\t<span style=\"color:#f92672\">.<\/span>check<span style=\"color:#f92672\">(<\/span>status<span style=\"color:#f92672\">.<\/span>is<span style=\"color:#f92672\">(<\/span><span style=\"color:#ae81ff\">200<\/span><span style=\"color:#f92672\">))<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\t<span style=\"color:#f92672\">.<\/span>check<span style=\"color:#f92672\">(<\/span>jsonPath<span style=\"color:#f92672\">(<\/span><span style=\"color:#e6db74\">&#34;$.name&#34;<\/span><span style=\"color:#f92672\">)))<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\t<span style=\"color:#f92672\">}<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>\tsetUp<span style=\"color:#f92672\">(<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\t\tscn<span style=\"color:#f92672\">.<\/span>inject<span style=\"color:#f92672\">(<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\trampUsers<span style=\"color:#f92672\">(<\/span>nbUsers<span style=\"color:#f92672\">)<\/span> during <span style=\"color:#f92672\">(<\/span><span style=\"color:#ae81ff\">5<\/span> seconds<span style=\"color:#f92672\">)<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t<span style=\"color:#f92672\">).<\/span>protocols<span style=\"color:#f92672\">(<\/span>httpProtocol<span style=\"color:#f92672\">)<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\t<span style=\"color:#f92672\">)<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#f92672\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/div><p>that test will send <code>nbUsers<\/code> of request to localhost:8080\/hello <code>myRepeat<\/code> times, For full file <a href=\"https:\/\/github.com\/ozkanpakdil\/test-microservice-frameworks\/blob\/main\/gatling\/src\/test\/scala\/load-test.scala\">check<\/a> and how to call it from <a href=\"https:\/\/github.com\/ozkanpakdil\/test-microservice-frameworks\/blob\/6fb081cf3262d4a56dfab3676e3f6e12c2fa4f3f\/runGatling.sh#L103\">here<\/a><\/p>"},{"title":"Get github action url from bash script","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2022\/2022-03-11-get-githubaction-url-from-bash\/","pubDate":"Fri, 11 Mar 2022 18:05:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2022\/2022-03-11-get-githubaction-url-from-bash\/","description":"<h2 id=\"getting-the-github-action-job-url-from-bash\">Getting the github action job url from bash<\/h2>\n<p>I have been trying to link rest testing framework pages to the connect github action job<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-bash\" data-lang=\"bash\"><span style=\"display:flex;\"><span>BUILD_URL<span style=\"color:#f92672\">=<\/span><span style=\"color:#e6db74\">&#34;<\/span><span style=\"color:#e6db74\">${<\/span>GITHUB_SERVER_URL<span style=\"color:#e6db74\">}<\/span><span style=\"color:#e6db74\">\/<\/span><span style=\"color:#e6db74\">${<\/span>GITHUB_REPOSITORY<span style=\"color:#e6db74\">}<\/span><span style=\"color:#e6db74\">\/actions\/runs\/<\/span><span style=\"color:#e6db74\">${<\/span>GITHUB_RUN_ID<span style=\"color:#e6db74\">}<\/span><span style=\"color:#e6db74\">&#34;<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>printf <span style=\"color:#e6db74\">&#34;[github action](<\/span>$BUILD_URL<span style=\"color:#e6db74\">)  :point_left: \\n&#34;<\/span> &gt;&gt; test-result.md\n<\/span><\/span><\/code><\/pre><\/div><p>here is the example result <a href=\"https:\/\/ozkanpakdil.github.io\/microservicetests\/2022-03-11-microservice-framework-test-11.html\">page<\/a> check the footer area. like image below\n<img alt=\"footer area\" loading=\"lazy\" src=\"https:\/\/user-images.githubusercontent.com\/604405\/157956307-336b2d30-5d4a-4399-b44a-b6619eb34cb1.png\"><\/p>\n<p><a href=\"https:\/\/github.com\/ozkanpakdil\/test-microservice-frameworks\/blob\/6fb081cf3262d4a56dfab3676e3f6e12c2fa4f3f\/runGatling.sh#L132\">full bash script<\/a>,\nin case you want to generate the url from yml<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-yml\" data-lang=\"yml\"><span style=\"display:flex;\"><span><span style=\"color:#ae81ff\">${{ github.server_url }}\/${{ github.repository }}\/actions\/runs\/${{ github.run_id }}<\/span>\n<\/span><\/span><\/code><\/pre><\/div><p><a href=\"https:\/\/github.community\/t\/get-runs-url\/16921\">further details<\/a><\/p>"},{"title":"Kubernetes Notes","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2021\/2021-12-10-kubernetes-notes\/","pubDate":"Fri, 10 Dec 2021 18:05:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2021\/2021-12-10-kubernetes-notes\/","description":"<h2 id=\"providers\">Providers<\/h2>\n<p>I have been studying kubernetes lately. I still wonder if will it be useful for personal usage for all peaople. Right now it is kind of expensive and used by big companies as customer to EKS(Amazon) or GKE(Google) or AKS(Azure\/Microsoft), Another big player is <a href=\"https:\/\/community.hetzner.com\/tutorials\/install-kubernetes-cluster\">Hetzner<\/a><\/p>\n<p>I have not heard before there is big blue also in this market <a href=\"https:\/\/www.ibm.com\/uk-en\/cloud\/kubernetes-service\/pricing\">IBM<\/a>, I think they come in after they bought RedHat, because Redhat have openshift. Openshift is in-between product, Redhat provides it in cloud providers with managed option, check <a href=\"https:\/\/www.redhat.com\/en\/technologies\/cloud-computing\/openshift#product-grid\">prices<\/a> and there is &ldquo;self managed&rdquo; below table.<\/p>"},{"title":"Building native image in windows with quarkus","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2021\/2021-11-03-quarkus-build-native-windows\/","pubDate":"Wed, 03 Nov 2021 08:05:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2021\/2021-11-03-quarkus-build-native-windows\/","description":"<p>&ldquo;mvn package -Pnative&rdquo; builds the native image from quarkus project. Important step is we have to run that mvn command from &ldquo;native tools commnad&rdquo; of visual studio. If you run the command from regular command prompt you get the error below<\/p>\n<pre tabindex=\"0\"><code>[INFO] [io.quarkus.deployment.pkg.steps.NativeImageBuildRunner] C:\\Program Files\\GraalVM\\graalvm-ce-java17-21.3.0\\bin\\native-image.cmd -J-Djava.util.logging.manager=org.jboss.logmanager.LogManager -J-Dsun.nio.ch.maxUpdateArraySize=100 -J-Dvertx.logger-delegate-factory-class-name=io.quarkus.vertx.core.runtime.VertxLogDelegateFactory -J-Dvertx.disableDnsResolver=true -J-Dio.netty.leakDetection.level=DISABLED -J-Dio.netty.allocator.maxOrder=3 -J-Duser.language=en -J-Duser.country=US -J-Dfile.encoding=UTF-8 -H:InitialCollectionPolicy=com.oracle.svm.core.genscavenge.CollectionPolicy\\$BySpaceAndTime -H:+JNI -H:+AllowFoldMethods -H:FallbackThreshold=0 -H:+ReportExceptionStackTraces -H:-AddAllCharsets -H:EnableURLProtocols=http -H:-UseServiceLoaderFeature -H:+StackTrace chinese-lang-1.0.0-SNAPSHOT-runner -jar chinese-lang-1.0.0-SNAPSHOT-runner.jar\n[chinese-lang-1.0.0-SNAPSHOT-runner:6432]    classlist:   5,366.54 ms,  0.96 GB\n[chinese-lang-1.0.0-SNAPSHOT-runner:6432]        setup:     943.11 ms,  0.96 GB\nError: Default native-compiler executable &#39;cl.exe&#39; not found via environment variable PATH\nError: To prevent native-toolchain checking provide command-line option -H:-CheckToolchain\ncom.oracle.svm.core.util.UserError$UserException: Default native-compiler executable &#39;cl.exe&#39; not found via environment variable PATH\nTo prevent native-toolchain checking provide command-line option -H:-CheckToolchain\n        at com.oracle.svm.core.util.UserError.abort(UserError.java:144)\n        at com.oracle.svm.hosted.c.codegen.CCompilerInvoker.addSkipCheckingInfo(CCompilerInvoker.java:104)\n        at com.oracle.svm.hosted.c.codegen.CCompilerInvoker.&lt;init&gt;(CCompilerInvoker.java:72)\n        at com.oracle.svm.hosted.c.codegen.CCompilerInvoker$WindowsCCompilerInvoker.&lt;init&gt;(CCompilerInvoker.java:110)\n        at com.oracle.svm.hosted.c.codegen.CCompilerInvoker.create(CCompilerInvoker.java:84)\n        at com.oracle.svm.hosted.NativeImageGenerator.setupNativeImage(NativeImageGenerator.java:864)\n        at com.oracle.svm.hosted.NativeImageGenerator.doRun(NativeImageGenerator.java:527)\n        at com.oracle.svm.hosted.NativeImageGenerator.run(NativeImageGenerator.java:488)\n        at com.oracle.svm.hosted.NativeImageGeneratorRunner.buildImage(NativeImageGeneratorRunner.java:403)\n        at com.oracle.svm.hosted.NativeImageGeneratorRunner.build(NativeImageGeneratorRunner.java:569)\n        at com.oracle.svm.hosted.NativeImageGeneratorRunner.main(NativeImageGeneratorRunner.java:122)\n        at com.oracle.svm.hosted.NativeImageGeneratorRunner$JDK9Plus.main(NativeImageGeneratorRunner.java:599)\n[chinese-lang-1.0.0-SNAPSHOT-runner:6432]      [total]:   6,384.40 ms,  0.96 GB\n# Printing build artifacts to: C:\\Users\\ozkan\\projects\\chinese-lang\\target\\chinese-lang-1.0.0-SNAPSHOT-native-image-source-jar\\chinese-lang-1.0.0-SNAPSHOT-runner.build_artifacts.txt\nError: Image build request failed with exit status 1\n[INFO] ------------------------------------------------------------------------\n[INFO] BUILD FAILURE\n[INFO] ------------------------------------------------------------------------\n[INFO] Total time:  22.552 s\n[INFO] Finished at: 2021-11-03T21:07:37Z\n[INFO] ------------------------------------------------------------------------\n[ERROR] Failed to execute goal io.quarkus.platform:quarkus-maven-plugin:2.4.1.Final:build (default) on project chinese-lang: Failed to build quarkus application: io.quarkus.builder.BuildException: Build failure: Build failed due to errors\n[ERROR]         [error]: Build step io.quarkus.deployment.pkg.steps.NativeImageBuildStep#build threw an exception: java.lang.RuntimeException: Failed \nto build native image\n[ERROR]         at io.quarkus.deployment.pkg.steps.NativeImageBuildStep.build(NativeImageBuildStep.java:233)\n[ERROR]         at java.base\/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n[ERROR]         at java.base\/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)\n[ERROR]         at java.base\/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n[ERROR]         at java.base\/java.lang.reflect.Method.invoke(Method.java:568)\n[ERROR]         at io.quarkus.deployment.ExtensionLoader$2.execute(ExtensionLoader.java:821)\n[ERROR]         at io.quarkus.builder.BuildContext.run(BuildContext.java:277)\n[ERROR]         at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)\n[ERROR]         at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2449)\n[ERROR]         at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1478)\n[ERROR]         at java.base\/java.lang.Thread.run(Thread.java:833)\n[ERROR]         at org.jboss.threads.JBossThread.run(JBossThread.java:501)\n[ERROR] Caused by: java.lang.RuntimeException: Image generation failed. Exit code: 1\n[ERROR]         at io.quarkus.deployment.pkg.steps.NativeImageBuildStep.imageGenerationFailed(NativeImageBuildStep.java:369)\n[ERROR]         at io.quarkus.deployment.pkg.steps.NativeImageBuildStep.build(NativeImageBuildStep.java:213)\n[ERROR]         ... 11 more\n[ERROR] -&gt; [Help 1]\n[ERROR]\n[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.\n[ERROR] Re-run Maven using the -X switch to enable full debug logging.\n<\/code><\/pre><p>If you run the command from native tools result is below<\/p>"},{"title":"How to delete all files except one in bash","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2021\/2021-10-10-delete-all-files-except-one\/","pubDate":"Sun, 10 Oct 2021 08:05:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2021\/2021-10-10-delete-all-files-except-one\/","description":"<p>I have been testing <a href=\"https:\/\/www.jhipster.tech\/\">jhipster<\/a> and its <a href=\"https:\/\/www.jhipster.tech\/jdl\/intro\">jdl<\/a>, nice thing you can prepare a jdl file and it will generate all dao and pojos and admin panels.<\/p>\n<p>jhipster is generating a lot of files and I wanted to delete them all except the jdl file itself, here is how<\/p>\n<pre tabindex=\"0\"><code>ls -a | grep -v test.jdl | xargs rm -rf\n<\/code><\/pre>"},{"title":"How to auto merge dependabot or Finally dependabot merges automatically","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2021\/2021-08-05-dependabot-auto-merge\/","pubDate":"Thu, 05 Aug 2021 08:05:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2021\/2021-08-05-dependabot-auto-merge\/","description":"<p>It has been long time there is a very nice and sweet bot around, it is called <a href=\"https:\/\/dependabot.com\/\">dependabot<\/a> or <a href=\"https:\/\/docs.github.com\/en\/code-security\/supply-chain-security\/keeping-your-dependencies-updated-automatically\/about-dependabot-version-updates\">check<\/a><\/p>\n<p>Dependabot is dependency upgrader for all projects. if you have nodejs project it updates those dependencies to latest, if you have maven same. And I have a small test framework which does spring template tests and release results, very good project for dependabot, it can fail anytime, not that important. and I have been trying to make dependabot PRs automerged.<\/p>"},{"title":"Google App Engine is it expensive for me","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2021\/2021-06-27-google-app-engine\/","pubDate":"Sun, 27 Jun 2021 18:05:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2021\/2021-06-27-google-app-engine\/","description":"<p>I have been using a dedicated server for a very long time. I tried a cloud solution around 6 years ago. It was very expensive, and this year I decided to test cloud again. I have a spring boot application which needs 2gb ram and very small cpu usage, not much IO. I pay 30 euro(25.76 Pound sterling) for monthly dedicated server from hetzner server auction <a href=\"https:\/\/www.hetzner.com\/sb\">https:\/\/www.hetzner.com\/sb<\/a><\/p>\n<p>And I registered for Google Cloud and used AppEngine <a href=\"https:\/\/cloud.google.com\/appengine\">https:\/\/cloud.google.com\/appengine<\/a> took me couple of hours to test and start my app, and I have 200 pounds(gift) from google cloud for the new user<\/p>"},{"title":"Spring-boot VS Quarkus VS Golang","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2020\/12-17-quarkus-vs-springboot-vs-golang\/","pubDate":"Thu, 17 Dec 2020 00:00:00 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2020\/12-17-quarkus-vs-springboot-vs-golang\/","description":"Springboot VS Quarkus VS Golang"},{"title":"Availability in numbers","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2020\/2020-12-01-availability-in-numbers\/","pubDate":"Tue, 01 Dec 2020 18:05:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2020\/2020-12-01-availability-in-numbers\/","description":"<p>This is worth to note.<\/p>\n<h3 id=\"availability-in-numbers\">Availability in numbers<\/h3>\n<p>Availability is often quantified by uptime (or downtime) as a percentage of time the service is available.  Availability is generally measured in number of 9s&ndash;a service with 99.99% availability is described as having four 9s.<\/p>\n<h4 id=\"999-availability---three-9s\">99.9% availability - three 9s<\/h4>\n<table>\n  <thead>\n      <tr>\n          <th>Duration<\/th>\n          <th>Acceptable downtime<\/th>\n      <\/tr>\n  <\/thead>\n  <tbody>\n      <tr>\n          <td>Downtime per year<\/td>\n          <td>8h 45min 57s<\/td>\n      <\/tr>\n      <tr>\n          <td>Downtime per month<\/td>\n          <td>43m 49.7s<\/td>\n      <\/tr>\n      <tr>\n          <td>Downtime per week<\/td>\n          <td>10m 4.8s<\/td>\n      <\/tr>\n      <tr>\n          <td>Downtime per day<\/td>\n          <td>1m 26.4s<\/td>\n      <\/tr>\n  <\/tbody>\n<\/table>\n<h4 id=\"9999-availability---four-9s\">99.99% availability - four 9s<\/h4>\n<table>\n  <thead>\n      <tr>\n          <th>Duration<\/th>\n          <th>Acceptable downtime<\/th>\n      <\/tr>\n  <\/thead>\n  <tbody>\n      <tr>\n          <td>Downtime per year<\/td>\n          <td>52min 35.7s<\/td>\n      <\/tr>\n      <tr>\n          <td>Downtime per month<\/td>\n          <td>4m 23s<\/td>\n      <\/tr>\n      <tr>\n          <td>Downtime per week<\/td>\n          <td>1m 5s<\/td>\n      <\/tr>\n      <tr>\n          <td>Downtime per day<\/td>\n          <td>8.6s<\/td>\n      <\/tr>\n  <\/tbody>\n<\/table>\n<p>For more you can check <a href=\"https:\/\/github.com\/donnemartin\/system-design-primer\">https:\/\/github.com\/donnemartin\/system-design-primer<\/a><\/p>"},{"title":"I have been procrastinating this upgrade for a long","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2020\/2020-11-26-huawei-matebook-x-pro-upgrade-drivers\/","pubDate":"Thu, 26 Nov 2020 18:05:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2020\/2020-11-26-huawei-matebook-x-pro-upgrade-drivers\/","description":"<p>I bought Huawei matebook x pro around 2 years ago<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-bash\" data-lang=\"bash\"><span style=\"display:flex;\"><span>Matebook X Pro i5 8GB+256GB <span style=\"color:#f92672\">(<\/span>MACH-W19<span style=\"color:#f92672\">)<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>SN: SNLBB18903000150\n<\/span><\/span><span style=\"display:flex;\"><span>Applicable scope: Austria, Belgium, Bulgaria, Switzerland, Cyprus, Czech Republic, Germany, Denmark, Estonia, Spain, Finland, France, United Kingdom, Greece, Croatia, Hungary, Ireland, Iceland, Italy, Lithuania, Luxembourg, Latvia, Malta, Netherlands, Norway, Poland, Portugal, Romania, Sweden, Slovenia, Slovakia\n<\/span><\/span><\/code><\/pre><\/div><p>and I just check warranty<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-bash\" data-lang=\"bash\"><span style=\"display:flex;\"><span>Warranty period\n<\/span><\/span><span style=\"display:flex;\"><span>Out of warranty\n<\/span><\/span><span style=\"display:flex;\"><span>Expected warranty expiration date:\n<\/span><\/span><span style=\"display:flex;\"><span>2020\/9\/23\n<\/span><\/span><\/code><\/pre><\/div><p>First of all I am very happy with the performance and stability. This is my first personal windows 10 usage it needed 2 times resetting(we used to call it format but it changed obviously) after windows updates, Windows is not very famous about it`s stability, so I learn how to backup and make sure everything is okay in case of system failure.<\/p>"},{"title":"Getting com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2020\/2020-08-19-fasterxml-no-serializer-found-for-class\/","pubDate":"Wed, 19 Aug 2020 19:05:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2020\/2020-08-19-fasterxml-no-serializer-found-for-class\/","description":"<p>I am trying to write small microservice benchmark for java, lately java microservice framework are popping up from every corner \ud83d\ude0a actually it is becoming little bit annoying, java world becoming js world.<\/p>\n<p>Anyway while writing some test I start getting the error below<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-bash\" data-lang=\"bash\"><span style=\"display:flex;\"><span>Internal Server Error\n<\/span><\/span><span style=\"display:flex;\"><span>Error handling d1e23f6f-3947-497a-be41-27ba9f7f4791-1, org.jboss.resteasy.spi.UnhandledException: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found <span style=\"color:#66d9ef\">for<\/span> class com.mascix.ApplicationInfo and no properties discovered to create BeanSerializer <span style=\"color:#f92672\">(<\/span>to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS<span style=\"color:#f92672\">)<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>The stacktrace below has been reversed to show the root cause first. Click Here to see the original stacktrace\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found <span style=\"color:#66d9ef\">for<\/span> class com.mascix.ApplicationInfo and no properties discovered to create BeanSerializer <span style=\"color:#f92672\">(<\/span>to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS<span style=\"color:#f92672\">)<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\tat com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from<span style=\"color:#f92672\">(<\/span>InvalidDefinitionException.java:77<span style=\"color:#f92672\">)<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\tat com.fasterxml.jackson.databind.SerializerProvider.reportBadDefinition<span style=\"color:#f92672\">(<\/span>SerializerProvider.java:1277<span style=\"color:#f92672\">)<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\tat com.fasterxml.jackson.databind.DatabindContext.reportBadDefinition<span style=\"color:#f92672\">(<\/span>DatabindContext.java:400<span style=\"color:#f92672\">)<\/span>\n<\/span><\/span><\/code><\/pre><\/div><p>This was coming from quarkus example. I got same error in spring boot and micronaut, my first approach was configure the bean or singleton and give<\/p>"},{"title":"How to build eclipse on locally in windows 10","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2020\/2020-08-15-build-eclipseon-windows\/","pubDate":"Sat, 15 Aug 2020 20:05:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2020\/2020-08-15-build-eclipseon-windows\/","description":"<p>Best document I found is <a href=\"https:\/\/wiki.eclipse.org\/Platform-releng\/Platform_Build#Windows\">here<\/a>, main problem about the documentation is google :) whenever I search different versions of &ldquo;building eclipse in windows&rdquo; all results were related to how to build a project(java or anything else) in eclipse. And I decided to write this note blog just for future refference.<\/p>\n<p>I had some issues on the way<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-bash\" data-lang=\"bash\"><span style=\"display:flex;\"><span>fatal: cannot create directory at <span style=\"color:#e6db74\">&#39;bundles\/org.eclipse.equinox.p2.tests\/testData\/previousConfigurationFinder\/testSuccedingVersion\/matchFromSuccedingAndPreccedingWithDifferentPlatfrom\/org.eclipse.platform_3.8.0_11111111_linux-gtk-x86_64&#39;<\/span>: Filename too long\n<\/span><\/span><\/code><\/pre><\/div><p>and<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-bash\" data-lang=\"bash\"><span style=\"display:flex;\"><span>constituent<span style=\"color:#f92672\">[<\/span>40<span style=\"color:#f92672\">]<\/span>: file:\/C:\/ProgramData\/chocolatey\/lib\/maven\/apache-maven-3.6.3\/lib\/wagon-file-3.3.4.jar\n<\/span><\/span><span style=\"display:flex;\"><span>constituent<span style=\"color:#f92672\">[<\/span>41<span style=\"color:#f92672\">]<\/span>: file:\/C:\/ProgramData\/chocolatey\/lib\/maven\/apache-maven-3.6.3\/lib\/wagon-http-3.3.4-shaded.jar\n<\/span><\/span><span style=\"display:flex;\"><span>constituent<span style=\"color:#f92672\">[<\/span>42<span style=\"color:#f92672\">]<\/span>: file:\/C:\/ProgramData\/chocolatey\/lib\/maven\/apache-maven-3.6.3\/lib\/wagon-provider-api-3.3.4.jar\n<\/span><\/span><span style=\"display:flex;\"><span>---------------------------------------------------\n<\/span><\/span><span style=\"display:flex;\"><span>Exception in thread <span style=\"color:#e6db74\">&#34;main&#34;<\/span> java.lang.AssertionError: pom file must not be null from PolyglotModelManager as per API\n<\/span><\/span><span style=\"display:flex;\"><span>        at org.sonatype.maven.polyglot.TeslaModelProcessor.locatePom<span style=\"color:#f92672\">(<\/span>TeslaModelProcessor.java:64<span style=\"color:#f92672\">)<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>        at org.apache.maven.project.DefaultProjectBuilder.build<span style=\"color:#f92672\">(<\/span>DefaultProjectBuilder.java:500<span style=\"color:#f92672\">)<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>        at org.apache.maven.project.DefaultProjectBuilder.build<span style=\"color:#f92672\">(<\/span>DefaultProjectBuilder.java:414<span style=\"color:#f92672\">)<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>        at org.apache.maven.project.DefaultProjectBuilder.build<span style=\"color:#f92672\">(<\/span>DefaultProjectBuilder.java:377<span style=\"color:#f92672\">)<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>        at org.apache.maven.graph.DefaultGraphBuilder.collectProjects<span style=\"color:#f92672\">(<\/span>DefaultGraphBuilder.java:414<span style=\"color:#f92672\">)<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>        at org.apache.maven.graph.DefaultGraphBuilder.getProjectsForMavenReactor<span style=\"color:#f92672\">(<\/span>DefaultGraphBuilder.java:405<span style=\"color:#f92672\">)<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>        at org.apache.maven.graph.DefaultGraphBuilder.build<span style=\"color:#f92672\">(<\/span>DefaultGraphBuilder.java:82<span style=\"color:#f92672\">)<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>        at org.apache.maven.DefaultMaven.buildGraph<span style=\"color:#f92672\">(<\/span>DefaultMaven.java:507<span style=\"color:#f92672\">)<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>        at org.apache.maven.DefaultMaven.doExecute<span style=\"color:#f92672\">(<\/span>DefaultMaven.java:219<span style=\"color:#f92672\">)<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>        at org.apache.maven.DefaultMaven.doExecute<span style=\"color:#f92672\">(<\/span>DefaultMaven.java:192<span style=\"color:#f92672\">)<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>        at org.apache.maven.DefaultMaven.execute<span style=\"color:#f92672\">(<\/span>DefaultMaven.java:105<span style=\"color:#f92672\">)<\/span>\n<\/span><\/span><\/code><\/pre><\/div><p>or some git clone problems, you need to make sure there is no problem in git clone.<\/p>"},{"title":"Running multiple jdk in github action","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2020\/2020-07-29-multiple-jdk-on-github\/","pubDate":"Wed, 29 Jul 2020 20:05:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2020\/2020-07-29-multiple-jdk-on-github\/","description":"<p><a href=\"https:\/\/github.com\/ozkanpakdil\/eclipse-collections-benchmark\/blob\/master\/.github\/workflows\/main.yml\">Here<\/a> is an example to show how multiple jdk run in one github action. And generate artifacts as test results<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-yaml\" data-lang=\"yaml\"><span style=\"display:flex;\"><span><span style=\"color:#f92672\">jobs<\/span>:\n<\/span><\/span><span style=\"display:flex;\"><span>  <span style=\"color:#f92672\">build<\/span>:\n<\/span><\/span><span style=\"display:flex;\"><span>    <span style=\"color:#f92672\">runs-on<\/span>: <span style=\"color:#ae81ff\">ubuntu-latest<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>    <span style=\"color:#f92672\">strategy<\/span>:\n<\/span><\/span><span style=\"display:flex;\"><span>      <span style=\"color:#f92672\">matrix<\/span>:\n<\/span><\/span><span style=\"display:flex;\"><span>        <span style=\"color:#f92672\">java<\/span>: [<span style=\"color:#e6db74\">&#34;8&#34;<\/span>, <span style=\"color:#e6db74\">&#34;11&#34;<\/span>, <span style=\"color:#e6db74\">&#34;13&#34;<\/span>, <span style=\"color:#e6db74\">&#34;14&#34;<\/span>]\n<\/span><\/span><span style=\"display:flex;\"><span>    <span style=\"color:#f92672\">name<\/span>: <span style=\"color:#ae81ff\">Java ${{ matrix.java }} sample<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>    <span style=\"color:#f92672\">steps<\/span>:\n<\/span><\/span><\/code><\/pre><\/div><p>And to see how it looks in build, check any build in <a href=\"https:\/\/github.com\/ozkanpakdil\/eclipse-collections-benchmark\/actions\">https:\/\/github.com\/ozkanpakdil\/eclipse-collections-benchmark\/actions<\/a><\/p>"},{"title":"Eclipse collections benchmark in jdk 14 at home","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2020\/2020-07-25-eclipse-collections-jdk-14-benchmark\/","pubDate":"Sat, 25 Jul 2020 08:05:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2020\/2020-07-25-eclipse-collections-jdk-14-benchmark\/","description":"<p>I was reading <a href=\"https:\/\/www.baeldung.com\/jdk-collections-vs-eclipse-collections\">eclipse collections benchmark doc<\/a> and realized that its little bit old and it was using jdk 11, in my local I have jdk 14 I wanted to run in my local and see the result. You can find eclipse collections <a href=\"https:\/\/github.com\/eclipse\/eclipse-collections\">here<\/a><\/p>\n<p>Below from my local<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-bash\" data-lang=\"bash\"><span style=\"display:flex;\"><span>D:<span style=\"color:#ae81ff\">\\t<\/span>mp<span style=\"color:#ae81ff\">\\b<\/span>enchmark-eclipse-collections&gt;java -jar target\/benchmarks.jar IntegerListFilter -rf json \n<\/span><\/span><span style=\"display:flex;\"><span>WARNING: An illegal reflective access operation has occurred\n<\/span><\/span><span style=\"display:flex;\"><span>WARNING: Illegal reflective access by org.openjdk.jmh.util.Utils <span style=\"color:#f92672\">(<\/span>file:\/D:\/tmp\/benchmark-eclipse-collections\/target\/benchmarks.jar<span style=\"color:#f92672\">)<\/span> to field java.io.PrintStream.charOut\n<\/span><\/span><span style=\"display:flex;\"><span>WARNING: Please consider reporting this to the maintainers of org.openjdk.jmh.util.Utils\n<\/span><\/span><span style=\"display:flex;\"><span>WARNING: Use --illegal-access<span style=\"color:#f92672\">=<\/span>warn to enable warnings of further illegal reflective access operations\n<\/span><\/span><span style=\"display:flex;\"><span>WARNING: All illegal access operations will be denied in a future release\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># JMH version: 1.23<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># VM version: JDK 14.0.2, OpenJDK 64-Bit Server VM, 14.0.2+12-46<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># VM invoker: C:\\Program Files\\OpenJDK\\jdk-14.0.2\\bin\\java.exe<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># VM options: &lt;none&gt;<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup: 5 iterations, 10 s each<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Measurement: 5 iterations, 10 s each<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Timeout: 10 min per iteration<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Threads: 1 thread, will synchronize iterations<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Benchmark mode: Throughput, ops\/time<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Benchmark: com.mascix.IntegerListFilter.ecMutableList<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Run progress: 0.00% complete, ETA 00:20:00<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Fork: 1 of 2<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   1: 123.880 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   2: 126.319 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   3: 123.222 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   4: 119.543 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   5: 118.171 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   1: 117.436 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   2: 119.494 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   3: 119.941 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   4: 117.819 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   5: 117.032 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Run progress: 8.33% complete, ETA 00:18:27<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Fork: 2 of 2<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   1: 113.457 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   2: 114.845 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   3: 116.863 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   4: 114.875 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   5: 114.185 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   1: 112.681 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   2: 113.452 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   3: 98.820 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   4: 99.360 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   5: 94.155 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>Result <span style=\"color:#e6db74\">&#34;com.mascix.IntegerListFilter.ecMutableList&#34;<\/span>:\n<\/span><\/span><span style=\"display:flex;\"><span>  111.019 \u00b1<span style=\"color:#f92672\">(<\/span>99.9%<span style=\"color:#f92672\">)<\/span> 14.717 ops\/s <span style=\"color:#f92672\">[<\/span>Average<span style=\"color:#f92672\">]<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>  <span style=\"color:#f92672\">(<\/span>min, avg, max<span style=\"color:#f92672\">)<\/span> <span style=\"color:#f92672\">=<\/span> <span style=\"color:#f92672\">(<\/span>94.155, 111.019, 119.941<span style=\"color:#f92672\">)<\/span>, stdev <span style=\"color:#f92672\">=<\/span> 9.734\n<\/span><\/span><span style=\"display:flex;\"><span>  CI <span style=\"color:#f92672\">(<\/span>99.9%<span style=\"color:#f92672\">)<\/span>: <span style=\"color:#f92672\">[<\/span>96.302, 125.736<span style=\"color:#f92672\">]<\/span> <span style=\"color:#f92672\">(<\/span>assumes normal distribution<span style=\"color:#f92672\">)<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># JMH version: 1.23<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># VM version: JDK 14.0.2, OpenJDK 64-Bit Server VM, 14.0.2+12-46<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># VM invoker: C:\\Program Files\\OpenJDK\\jdk-14.0.2\\bin\\java.exe<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># VM options: &lt;none&gt;<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup: 5 iterations, 10 s each<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Measurement: 5 iterations, 10 s each<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Timeout: 10 min per iteration<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Threads: 1 thread, will synchronize iterations<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Benchmark mode: Throughput, ops\/time<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Benchmark: com.mascix.IntegerListFilter.ecMutableListParallel<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Run progress: 16.67% complete, ETA 00:16:47<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Fork: 1 of 2<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   1: 407.722 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   2: 428.903 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   3: 429.079 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   4: 425.613 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   5: 424.238 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   1: 417.053 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   2: 398.756 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   3: 426.630 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   4: 424.554 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   5: 425.892 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Run progress: 25.00% complete, ETA 00:15:06<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Fork: 2 of 2<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   1: 397.275 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   2: 413.248 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   3: 418.206 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   4: 418.641 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   5: 418.441 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   1: 416.863 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   2: 404.348 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   3: 415.095 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   4: 419.154 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   5: 417.764 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>Result <span style=\"color:#e6db74\">&#34;com.mascix.IntegerListFilter.ecMutableListParallel&#34;<\/span>:\n<\/span><\/span><span style=\"display:flex;\"><span>  416.611 \u00b1<span style=\"color:#f92672\">(<\/span>99.9%<span style=\"color:#f92672\">)<\/span> 13.608 ops\/s <span style=\"color:#f92672\">[<\/span>Average<span style=\"color:#f92672\">]<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>  <span style=\"color:#f92672\">(<\/span>min, avg, max<span style=\"color:#f92672\">)<\/span> <span style=\"color:#f92672\">=<\/span> <span style=\"color:#f92672\">(<\/span>398.756, 416.611, 426.630<span style=\"color:#f92672\">)<\/span>, stdev <span style=\"color:#f92672\">=<\/span> 9.001\n<\/span><\/span><span style=\"display:flex;\"><span>  CI <span style=\"color:#f92672\">(<\/span>99.9%<span style=\"color:#f92672\">)<\/span>: <span style=\"color:#f92672\">[<\/span>403.003, 430.219<span style=\"color:#f92672\">]<\/span> <span style=\"color:#f92672\">(<\/span>assumes normal distribution<span style=\"color:#f92672\">)<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># JMH version: 1.23<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># VM version: JDK 14.0.2, OpenJDK 64-Bit Server VM, 14.0.2+12-46<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># VM invoker: C:\\Program Files\\OpenJDK\\jdk-14.0.2\\bin\\java.exe<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># VM options: &lt;none&gt;<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup: 5 iterations, 10 s each<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Measurement: 5 iterations, 10 s each<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Timeout: 10 min per iteration<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Threads: 1 thread, will synchronize iterations<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Benchmark mode: Throughput, ops\/time<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Benchmark: com.mascix.IntegerListFilter.ecPrimitive<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Run progress: 33.33% complete, ETA 00:13:25<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Fork: 1 of 2<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   1: 204.407 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   2: 204.898 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   3: 194.960 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   4: 178.705 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   5: 178.812 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   1: 180.376 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   2: 180.147 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   3: 180.086 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   4: 180.746 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   5: 178.752 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Run progress: 41.67% complete, ETA 00:11:44<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Fork: 2 of 2<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   1: 204.929 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   2: 208.244 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   3: 196.546 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   4: 179.767 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   5: 179.485 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   1: 177.174 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   2: 179.544 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   3: 179.982 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   4: 179.820 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   5: 180.402 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>Result <span style=\"color:#e6db74\">&#34;com.mascix.IntegerListFilter.ecPrimitive&#34;<\/span>:\n<\/span><\/span><span style=\"display:flex;\"><span>  179.703 \u00b1<span style=\"color:#f92672\">(<\/span>99.9%<span style=\"color:#f92672\">)<\/span> 1.577 ops\/s <span style=\"color:#f92672\">[<\/span>Average<span style=\"color:#f92672\">]<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>  <span style=\"color:#f92672\">(<\/span>min, avg, max<span style=\"color:#f92672\">)<\/span> <span style=\"color:#f92672\">=<\/span> <span style=\"color:#f92672\">(<\/span>177.174, 179.703, 180.746<span style=\"color:#f92672\">)<\/span>, stdev <span style=\"color:#f92672\">=<\/span> 1.043\n<\/span><\/span><span style=\"display:flex;\"><span>  CI <span style=\"color:#f92672\">(<\/span>99.9%<span style=\"color:#f92672\">)<\/span>: <span style=\"color:#f92672\">[<\/span>178.126, 181.280<span style=\"color:#f92672\">]<\/span> <span style=\"color:#f92672\">(<\/span>assumes normal distribution<span style=\"color:#f92672\">)<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># JMH version: 1.23<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># VM version: JDK 14.0.2, OpenJDK 64-Bit Server VM, 14.0.2+12-46<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># VM invoker: C:\\Program Files\\OpenJDK\\jdk-14.0.2\\bin\\java.exe<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># VM options: &lt;none&gt;<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup: 5 iterations, 10 s each<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Measurement: 5 iterations, 10 s each<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Timeout: 10 min per iteration<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Threads: 1 thread, will synchronize iterations<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Benchmark mode: Throughput, ops\/time<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Benchmark: com.mascix.IntegerListFilter.ecPrimitiveParallel<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Run progress: 50.00% complete, ETA 00:10:03<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Fork: 1 of 2<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   1: 642.962 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   2: 672.796 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   3: 674.110 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   4: 676.845 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   5: 671.605 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   1: 673.029 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   2: 673.294 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   3: 673.807 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   4: 673.549 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   5: 669.523 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Run progress: 58.33% complete, ETA 00:08:23<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Fork: 2 of 2<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   1: 651.860 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   2: 662.825 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   3: 649.972 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   4: 664.449 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   5: 672.883 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   1: 670.101 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   2: 668.074 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   3: 663.229 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   4: 661.291 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   5: 673.637 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>Result <span style=\"color:#e6db74\">&#34;com.mascix.IntegerListFilter.ecPrimitiveParallel&#34;<\/span>:\n<\/span><\/span><span style=\"display:flex;\"><span>  669.953 \u00b1<span style=\"color:#f92672\">(<\/span>99.9%<span style=\"color:#f92672\">)<\/span> 6.872 ops\/s <span style=\"color:#f92672\">[<\/span>Average<span style=\"color:#f92672\">]<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>  <span style=\"color:#f92672\">(<\/span>min, avg, max<span style=\"color:#f92672\">)<\/span> <span style=\"color:#f92672\">=<\/span> <span style=\"color:#f92672\">(<\/span>661.291, 669.953, 673.807<span style=\"color:#f92672\">)<\/span>, stdev <span style=\"color:#f92672\">=<\/span> 4.545\n<\/span><\/span><span style=\"display:flex;\"><span>  CI <span style=\"color:#f92672\">(<\/span>99.9%<span style=\"color:#f92672\">)<\/span>: <span style=\"color:#f92672\">[<\/span>663.081, 676.825<span style=\"color:#f92672\">]<\/span> <span style=\"color:#f92672\">(<\/span>assumes normal distribution<span style=\"color:#f92672\">)<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># JMH version: 1.23<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># VM version: JDK 14.0.2, OpenJDK 64-Bit Server VM, 14.0.2+12-46<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># VM invoker: C:\\Program Files\\OpenJDK\\jdk-14.0.2\\bin\\java.exe<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># VM options: &lt;none&gt;<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup: 5 iterations, 10 s each<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Measurement: 5 iterations, 10 s each<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Timeout: 10 min per iteration<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Threads: 1 thread, will synchronize iterations<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Benchmark mode: Throughput, ops\/time<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Benchmark: com.mascix.IntegerListFilter.jdkList<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Run progress: 66.67% complete, ETA 00:06:42<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Fork: 1 of 2<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   1: 131.019 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   2: 124.043 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   3: 126.349 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   4: 124.911 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   5: 122.685 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   1: 111.307 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   2: 124.077 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   3: 127.157 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   4: 125.571 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   5: 124.025 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Run progress: 75.00% complete, ETA 00:05:01<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Fork: 2 of 2<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   1: 129.972 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   2: 125.094 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   3: 124.477 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   4: 126.937 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   5: 119.262 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   1: 101.889 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   2: 103.344 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   3: 103.035 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   4: 104.170 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   5: 103.849 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>Result <span style=\"color:#e6db74\">&#34;com.mascix.IntegerListFilter.jdkList&#34;<\/span>:\n<\/span><\/span><span style=\"display:flex;\"><span>  112.842 \u00b1<span style=\"color:#f92672\">(<\/span>99.9%<span style=\"color:#f92672\">)<\/span> 16.585 ops\/s <span style=\"color:#f92672\">[<\/span>Average<span style=\"color:#f92672\">]<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>  <span style=\"color:#f92672\">(<\/span>min, avg, max<span style=\"color:#f92672\">)<\/span> <span style=\"color:#f92672\">=<\/span> <span style=\"color:#f92672\">(<\/span>101.889, 112.842, 127.157<span style=\"color:#f92672\">)<\/span>, stdev <span style=\"color:#f92672\">=<\/span> 10.970\n<\/span><\/span><span style=\"display:flex;\"><span>  CI <span style=\"color:#f92672\">(<\/span>99.9%<span style=\"color:#f92672\">)<\/span>: <span style=\"color:#f92672\">[<\/span>96.258, 129.427<span style=\"color:#f92672\">]<\/span> <span style=\"color:#f92672\">(<\/span>assumes normal distribution<span style=\"color:#f92672\">)<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># JMH version: 1.23<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># VM version: JDK 14.0.2, OpenJDK 64-Bit Server VM, 14.0.2+12-46<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># VM invoker: C:\\Program Files\\OpenJDK\\jdk-14.0.2\\bin\\java.exe<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># VM options: &lt;none&gt;<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup: 5 iterations, 10 s each<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Measurement: 5 iterations, 10 s each<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Timeout: 10 min per iteration<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Threads: 1 thread, will synchronize iterations<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Benchmark mode: Throughput, ops\/time<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Benchmark: com.mascix.IntegerListFilter.jdkListParallel<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Run progress: 83.33% complete, ETA 00:03:21<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Fork: 1 of 2<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   1: 335.071 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   2: 348.010 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   3: 349.900 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   4: 352.848 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   5: 354.569 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   1: 353.534 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   2: 353.295 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   3: 352.056 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   4: 349.989 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   5: 341.271 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Run progress: 91.67% complete, ETA 00:01:40<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Fork: 2 of 2<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   1: 334.725 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   2: 344.641 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   3: 348.182 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   4: 345.859 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Warmup Iteration   5: 345.038 ops\/s<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   1: 333.103 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   2: 321.674 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   3: 336.749 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   4: 341.546 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>Iteration   5: 322.156 ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>Result <span style=\"color:#e6db74\">&#34;com.mascix.IntegerListFilter.jdkListParallel&#34;<\/span>:\n<\/span><\/span><span style=\"display:flex;\"><span>  340.537 \u00b1<span style=\"color:#f92672\">(<\/span>99.9%<span style=\"color:#f92672\">)<\/span> 18.300 ops\/s <span style=\"color:#f92672\">[<\/span>Average<span style=\"color:#f92672\">]<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>  <span style=\"color:#f92672\">(<\/span>min, avg, max<span style=\"color:#f92672\">)<\/span> <span style=\"color:#f92672\">=<\/span> <span style=\"color:#f92672\">(<\/span>321.674, 340.537, 353.534<span style=\"color:#f92672\">)<\/span>, stdev <span style=\"color:#f92672\">=<\/span> 12.104\n<\/span><\/span><span style=\"display:flex;\"><span>  CI <span style=\"color:#f92672\">(<\/span>99.9%<span style=\"color:#f92672\">)<\/span>: <span style=\"color:#f92672\">[<\/span>322.238, 358.837<span style=\"color:#f92672\">]<\/span> <span style=\"color:#f92672\">(<\/span>assumes normal distribution<span style=\"color:#f92672\">)<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Run complete. Total time: 00:20:07<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>REMEMBER: The numbers below are just data. To gain reusable insights, you need to follow up on\n<\/span><\/span><span style=\"display:flex;\"><span>why the numbers are the way they are. Use profilers <span style=\"color:#f92672\">(<\/span>see -prof, -lprof<span style=\"color:#f92672\">)<\/span>, design factorial\n<\/span><\/span><span style=\"display:flex;\"><span>experiments, perform baseline and negative tests that provide experimental control, make sure\n<\/span><\/span><span style=\"display:flex;\"><span>the benchmarking environment is safe on JVM\/OS\/HW level, ask <span style=\"color:#66d9ef\">for<\/span> reviews from the domain experts.\n<\/span><\/span><span style=\"display:flex;\"><span>Do not assume the numbers tell you what you want them to tell.\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>Benchmark                                 Mode  Cnt    Score    Error  Units\n<\/span><\/span><span style=\"display:flex;\"><span>IntegerListFilter.ecMutableList          thrpt   <span style=\"color:#ae81ff\">10<\/span>  111.019 \u00b1 14.717  ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>IntegerListFilter.ecMutableListParallel  thrpt   <span style=\"color:#ae81ff\">10<\/span>  416.611 \u00b1 13.608  ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>IntegerListFilter.ecPrimitive            thrpt   <span style=\"color:#ae81ff\">10<\/span>  179.703 \u00b1  1.577  ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>IntegerListFilter.ecPrimitiveParallel    thrpt   <span style=\"color:#ae81ff\">10<\/span>  669.953 \u00b1  6.872  ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>IntegerListFilter.jdkList                thrpt   <span style=\"color:#ae81ff\">10<\/span>  112.842 \u00b1 16.585  ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>IntegerListFilter.jdkListParallel        thrpt   <span style=\"color:#ae81ff\">10<\/span>  340.537 \u00b1 18.300  ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>Benchmark result is saved to jmh-result.json\n<\/span><\/span><\/code><\/pre><\/div><div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-bash\" data-lang=\"bash\"><span style=\"display:flex;\"><span>Result <span style=\"color:#e6db74\">&#34;com.mascix.IntegerListSum.jdkListParallel&#34;<\/span>:\n<\/span><\/span><span style=\"display:flex;\"><span>  1130.600 \u00b1<span style=\"color:#f92672\">(<\/span>99.9%<span style=\"color:#f92672\">)<\/span> 7.078 ops\/s <span style=\"color:#f92672\">[<\/span>Average<span style=\"color:#f92672\">]<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>  <span style=\"color:#f92672\">(<\/span>min, avg, max<span style=\"color:#f92672\">)<\/span> <span style=\"color:#f92672\">=<\/span> <span style=\"color:#f92672\">(<\/span>1119.181, 1130.600, 1135.694<span style=\"color:#f92672\">)<\/span>, stdev <span style=\"color:#f92672\">=<\/span> 4.682\n<\/span><\/span><span style=\"display:flex;\"><span>  CI <span style=\"color:#f92672\">(<\/span>99.9%<span style=\"color:#f92672\">)<\/span>: <span style=\"color:#f92672\">[<\/span>1123.522, 1137.678<span style=\"color:#f92672\">]<\/span> <span style=\"color:#f92672\">(<\/span>assumes normal distribution<span style=\"color:#f92672\">)<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"># Run complete. Total time: 00:20:06<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>REMEMBER: The numbers below are just data. To gain reusable insights, you need to follow up on\n<\/span><\/span><span style=\"display:flex;\"><span>why the numbers are the way they are. Use profilers <span style=\"color:#f92672\">(<\/span>see -prof, -lprof<span style=\"color:#f92672\">)<\/span>, design factorial\n<\/span><\/span><span style=\"display:flex;\"><span>experiments, perform baseline and negative tests that provide experimental control, make sure\n<\/span><\/span><span style=\"display:flex;\"><span>the benchmarking environment is safe on JVM\/OS\/HW level, ask <span style=\"color:#66d9ef\">for<\/span> reviews from the domain experts.\n<\/span><\/span><span style=\"display:flex;\"><span>Do not assume the numbers tell you what you want them to tell.\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>Benchmark                              Mode  Cnt     Score     Error  Units\n<\/span><\/span><span style=\"display:flex;\"><span>IntegerListSum.ecMutableList          thrpt   <span style=\"color:#ae81ff\">10<\/span>   574.542 \u00b1  25.928  ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>IntegerListSum.ecMutableListParallel  thrpt   <span style=\"color:#ae81ff\">10<\/span>  1138.850 \u00b1  21.732  ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>IntegerListSum.ecPrimitive            thrpt   <span style=\"color:#ae81ff\">10<\/span>  3315.567 \u00b1   3.718  ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>IntegerListSum.ecPrimitiveParallel    thrpt   <span style=\"color:#ae81ff\">10<\/span>  8070.602 \u00b1 436.183  ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>IntegerListSum.jdkList                thrpt   <span style=\"color:#ae81ff\">10<\/span>   543.355 \u00b1  22.079  ops\/s\n<\/span><\/span><span style=\"display:flex;\"><span>IntegerListSum.jdkListParallel        thrpt   <span style=\"color:#ae81ff\">10<\/span>  1130.600 \u00b1   7.078  ops\/s\n<\/span><\/span><\/code><\/pre><\/div><p>You can find more results in jdk matrix from <a href=\"https:\/\/github.com\/ozkanpakdil\/eclipse-collections-benchmark\/actions\">eclipse collections benchmark<\/a><\/p>"},{"title":"Could not find MessageBodyWriter for response object of type: io.vertx.reactivex.core.buffer.Buffer of media type: text\/html;charset=UTF-8","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2020\/2020-06-02-quarkus-vertx-streamwriter-problem\/","pubDate":"Tue, 02 Jun 2020 08:05:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2020\/2020-06-02-quarkus-vertx-streamwriter-problem\/","description":"<p>I was trying to use freemarker with quarkus and vertx. I start getting this error<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-bash\" data-lang=\"bash\"><span style=\"display:flex;\"><span>Could not find MessageBodyWriter <span style=\"color:#66d9ef\">for<\/span> response object of type: io.vertx.reactivex.core.buffer.Buffer of media type: text\/html;charset<span style=\"color:#f92672\">=<\/span>UTF-8\n<\/span><\/span><\/code><\/pre><\/div><p>And code look like below. I was trying to use reactive approach.<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-java\" data-lang=\"java\"><span style=\"display:flex;\"><span>    <span style=\"color:#a6e22e\">@GET<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>    <span style=\"color:#a6e22e\">@Produces<\/span>(MediaType.<span style=\"color:#a6e22e\">TEXT_HTML<\/span>)\n<\/span><\/span><span style=\"display:flex;\"><span>    <span style=\"color:#66d9ef\">public<\/span> Uni<span style=\"color:#f92672\">&lt;<\/span>Object<span style=\"color:#f92672\">&gt;<\/span> <span style=\"color:#a6e22e\">doSomethingAsync<\/span>() <span style=\"color:#66d9ef\">throws<\/span> Exception {\n<\/span><\/span><span style=\"display:flex;\"><span>        io.<span style=\"color:#a6e22e\">vertx<\/span>.<span style=\"color:#a6e22e\">core<\/span>.<span style=\"color:#a6e22e\">Vertx<\/span> params <span style=\"color:#f92672\">=<\/span> vertx.<span style=\"color:#a6e22e\">getDelegate<\/span>();\n<\/span><\/span><span style=\"display:flex;\"><span>        io.<span style=\"color:#a6e22e\">vertx<\/span>.<span style=\"color:#a6e22e\">reactivex<\/span>.<span style=\"color:#a6e22e\">core<\/span>.<span style=\"color:#a6e22e\">Vertx<\/span> args <span style=\"color:#f92672\">=<\/span> <span style=\"color:#66d9ef\">new<\/span> io.<span style=\"color:#a6e22e\">vertx<\/span>.<span style=\"color:#a6e22e\">reactivex<\/span>.<span style=\"color:#a6e22e\">core<\/span>.<span style=\"color:#a6e22e\">Vertx<\/span>(params);\n<\/span><\/span><span style=\"display:flex;\"><span>        FreeMarkerTemplateEngine engine <span style=\"color:#f92672\">=<\/span> FreeMarkerTemplateEngine.<span style=\"color:#a6e22e\">create<\/span>(args);\n<\/span><\/span><span style=\"display:flex;\"><span>        List<span style=\"color:#f92672\">&lt;<\/span>ExampleObject<span style=\"color:#f92672\">&gt;<\/span> exs <span style=\"color:#f92672\">=<\/span> <span style=\"color:#66d9ef\">new<\/span> ArrayList<span style=\"color:#f92672\">&lt;&gt;<\/span>();\n<\/span><\/span><span style=\"display:flex;\"><span>        <span style=\"color:#66d9ef\">for<\/span> (<span style=\"color:#66d9ef\">int<\/span> i <span style=\"color:#f92672\">=<\/span> 0; i <span style=\"color:#f92672\">&lt;<\/span> 10; i<span style=\"color:#f92672\">++<\/span>) {\n<\/span><\/span><span style=\"display:flex;\"><span>            exs.<span style=\"color:#a6e22e\">add<\/span>(<span style=\"color:#66d9ef\">new<\/span> ExampleObject(<span style=\"color:#e6db74\">&#34;name:&#34;<\/span> <span style=\"color:#f92672\">+<\/span> i, <span style=\"color:#e6db74\">&#34;dev:&#34;<\/span> <span style=\"color:#f92672\">+<\/span> i));\n<\/span><\/span><span style=\"display:flex;\"><span>        }\n<\/span><\/span><span style=\"display:flex;\"><span>        HashMap data <span style=\"color:#f92672\">=<\/span> <span style=\"color:#66d9ef\">new<\/span> HashMap<span style=\"color:#f92672\">&lt;&gt;<\/span>();\n<\/span><\/span><span style=\"display:flex;\"><span>        data.<span style=\"color:#a6e22e\">put<\/span>(<span style=\"color:#e6db74\">&#34;title&#34;<\/span>, <span style=\"color:#e6db74\">&#34;Vert.x Web&#34;<\/span>);\n<\/span><\/span><span style=\"display:flex;\"><span>        data.<span style=\"color:#a6e22e\">put<\/span>(<span style=\"color:#e6db74\">&#34;exampleObject&#34;<\/span>, <span style=\"color:#66d9ef\">new<\/span> ExampleObject(<span style=\"color:#e6db74\">&#34;name&#34;<\/span>, <span style=\"color:#e6db74\">&#34;dev&#34;<\/span>));\n<\/span><\/span><span style=\"display:flex;\"><span>        data.<span style=\"color:#a6e22e\">put<\/span>(<span style=\"color:#e6db74\">&#34;systems&#34;<\/span>, exs);\n<\/span><\/span><span style=\"display:flex;\"><span>        Single<span style=\"color:#f92672\">&lt;<\/span>Buffer<span style=\"color:#f92672\">&gt;<\/span> rxRender <span style=\"color:#f92672\">=<\/span> engine.<span style=\"color:#a6e22e\">rxRender<\/span>(data, <span style=\"color:#e6db74\">&#34;\/templates\/index.htm&#34;<\/span>);\n<\/span><\/span><span style=\"display:flex;\"><span>        Buffer page <span style=\"color:#f92672\">=<\/span> <span style=\"color:#66d9ef\">null<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span>        <span style=\"color:#66d9ef\">try<\/span> {\n<\/span><\/span><span style=\"display:flex;\"><span>            page <span style=\"color:#f92672\">=<\/span> rxRender.<span style=\"color:#a6e22e\">toFuture<\/span>().<span style=\"color:#a6e22e\">get<\/span>();\n<\/span><\/span><span style=\"display:flex;\"><span>        } <span style=\"color:#66d9ef\">catch<\/span> (Exception ex) {\n<\/span><\/span><span style=\"display:flex;\"><span>            ex.<span style=\"color:#a6e22e\">printStackTrace<\/span>();\n<\/span><\/span><span style=\"display:flex;\"><span>            <span style=\"color:#75715e\">\/\/ e.printStacktrace();<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>        }\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>        <span style=\"color:#66d9ef\">return<\/span> Uni.<span style=\"color:#a6e22e\">createFrom<\/span>().<span style=\"color:#a6e22e\">item<\/span>(page);\n<\/span><\/span><span style=\"display:flex;\"><span>    }\n<\/span><\/span><\/code><\/pre><\/div><p>I check and could not find a proper solution here is how I solved it.<\/p>"},{"title":"LineageOS installation on my old lg g2","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2020\/2020-03-13-lg-g2-installing-lineageos\/","pubDate":"Fri, 13 Mar 2020 08:05:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2020\/2020-03-13-lg-g2-installing-lineageos\/","description":"<p>My old lg g2 had lineageOS 14 installed already. But it was showing the info about new version and I should upgrade it. My first attempt failed miserably. And I brick my phone.<\/p>\n<p>When I started my phone it was showing only LG logo and it was in boot loop. They call it boot loop but actually it was not really booting up. Anyway yesterday I found <a href=\"https:\/\/forum.xda-developers.com\/showthread.php?t=2797190\">https:\/\/forum.xda-developers.com\/showthread.php?t=2797190<\/a> and finally installed the old LG android and it started working again. you can find the kdz here <a href=\"https:\/\/forum.xda-developers.com\/showthread.php?t=2432476\">https:\/\/forum.xda-developers.com\/showthread.php?t=2432476<\/a><\/p>"},{"title":"Terrible android error","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2020\/2020-01-26-android-problem\/","pubDate":"Sun, 26 Jan 2020 08:05:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2020\/2020-01-26-android-problem\/","description":"<p>While developing a small android application. I was thinking to use IntentService which is kind of a background worker for android platform. Then I found the need code and documentation and implemented yesterday. and code is compiling so today I wanted to see it in a real phone and started<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-bash\" data-lang=\"bash\"><span style=\"display:flex;\"><span> Caused by: android.content.ActivityNotFoundException: Unable to find explicit activity class <span style=\"color:#f92672\">{<\/span>com.mascix.fitinsta\/com.mascix.fitinsta.ServiceLayer<span style=\"color:#f92672\">}<\/span>; have you declared this activity in your AndroidManifest.xml?\n<\/span><\/span><\/code><\/pre><\/div><p>From this exception I understand that I am having a problem in androidmanifest.xml and since morning I was trying to fix it. And the result is it was code problem :)<\/p>"},{"title":"Spring-boot vs Quarkus","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2019\/12-26-quarkus-vs-springboot\/","pubDate":"Thu, 26 Dec 2019 00:00:00 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2019\/12-26-quarkus-vs-springboot\/","description":"Springboot VS Quarkus"},{"title":"How to call Atlassian Cloud Jira Rest API","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2018\/2019-09-04-call-atlassian-cloud-jira-rest\/","pubDate":"Wed, 04 Sep 2019 08:05:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2018\/2019-09-04-call-atlassian-cloud-jira-rest\/","description":"<p>I needed to call atlassian jira custom fields rest service and show them as good as possible. I know jira admin panel has a page for it. I am just trying to list them in a seperate page. First of al for easy development we can get json with this shell script.<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-bash\" data-lang=\"bash\"><span style=\"display:flex;\"><span><span style=\"color:#75715e\">#!\/bin\/bash\n<\/span><\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#75715e\"><\/span>USER<span style=\"color:#f92672\">=<\/span><span style=\"color:#e6db74\">&#39;YOUREMAIL:TOKEN&#39;<\/span> <span style=\"color:#75715e\"># get it from https:\/\/id.atlassian.com\/manage\/api-tokens<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>URL<span style=\"color:#f92672\">=<\/span><span style=\"color:#e6db74\">&#39;https:\/\/test1q2w.atlassian.net\/rest\/api\/3\/field&#39;<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>curl --request GET   --url $URL  --user  $USER  --header <span style=\"color:#e6db74\">&#39;Accept: application\/json&#39;<\/span> &gt; test.json\n<\/span><\/span><\/code><\/pre><\/div><p>Now we have test.json to load and show. also it needs a little bit extra. therefore we just write var data= in to the file and load it like<\/p>"},{"title":"How to solve ripe.net access denied","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2018\/2018-05-23-solve-ripe-access-denied\/","pubDate":"Wed, 23 May 2018 08:05:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2018\/2018-05-23-solve-ripe-access-denied\/","description":"<p>I have been using whois for a long time(around 10 years). and if you are sending this whois queries from same ip and higher then expected. you will start seeing ripe.net access denied results. one solution is restart your adsl modem. or start using another ip. and my solution is TOR :)<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-bash\" data-lang=\"bash\"><span style=\"display:flex;\"><span>sudo apt install tor torsocks\n<\/span><\/span><\/code><\/pre><\/div><p>you will need to configure torify check <a href=\"https:\/\/www.linux.com\/blog\/beginners-guide-tor-ubuntu\">https:\/\/www.linux.com\/blog\/beginners-guide-tor-ubuntu<\/a><\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-bash\" data-lang=\"bash\"><span style=\"display:flex;\"><span>torify whois 25.166.194.172\n<\/span><\/span><\/code><\/pre><\/div><p>and I did not wanted to run in my server. therefore amazon free instance and a micro service <a href=\"https:\/\/github.com\/ozkanpakdil\/CommandRunner\">https:\/\/github.com\/ozkanpakdil\/CommandRunner<\/a> did the trick.<\/p>"},{"title":"Delete files in linux best way","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2018\/2018-01-13-delete-files-in-linux-in-best-way\/","pubDate":"Sat, 13 Jan 2018 08:05:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2018\/2018-01-13-delete-files-in-linux-in-best-way\/","description":"<p>Let say you have bunch(5 millions) of small files in your linux in some folder. when you try to delete them can be very tricky.<\/p>\n<p>Everybody knows rm -rf \/tmp\/somefolder but if you run this on a server which already has internet load it may freeze it. and make it stop serving pages.<\/p>\n<p>So what are the options. first and easiest way<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-bash\" data-lang=\"bash\"><span style=\"display:flex;\"><span>find \/tmp\/somefolder\/ -type f -mtime +30  | xargs rm -f\n<\/span><\/span><\/code><\/pre><\/div><p>this also can freeze or eat a lot of resources to run.<\/p>"},{"title":"What is this Privacy Policy","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2017\/2017-07-31-what-is-this-privacy-policy\/","pubDate":"Mon, 31 Jul 2017 10:05:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2017\/2017-07-31-what-is-this-privacy-policy\/","description":"<div id=\"privacy_content\"><h2>Privacy Policy<\/h2> <p>What Is This app as an Ad Supported app. This SERVICE is provided by  at no cost and is intended for use as is.\n                  <\/p> <p>This page is used to inform website visitors regarding my policies with the collection, use, and\n                    disclosure of Personal Information if anyone decided to use my Service.\n                  <\/p> <p>If you choose to use my Service, then you agree to the collection and use of information in relation\n                    to this policy. The Personal Information that I collect is used for providing and improving the\n                    Service. I will not use or share your information with anyone except as described\n                    in this Privacy Policy.\n<pre><code>              &lt;\/p&gt; &lt;p&gt;&lt;strong&gt;Information Collection and Use&lt;\/strong&gt;&lt;\/p&gt; &lt;p&gt;For a better experience, while using our Service, I may require you to provide us with certain\n                personally identifiable information, including but not limited to nothing. The information that I request is retained on your device and is not collected by me in any way\n              &lt;\/p&gt; &lt;p&gt;The app does use third party services that may collect information used to identify you.&lt;\/p&gt; &lt;div&gt;&lt;p&gt;Link to privacy policy of third party service providers used by the app &lt;\/p&gt; &lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https:\/\/www.google.com\/policies\/privacy\/&quot; target=&quot;_blank&quot;&gt;Google Play Services&lt;\/a&gt;&lt;\/li&gt; &lt;!----&gt; &lt;!----&gt; &lt;!----&gt;&lt;\/ul&gt;&lt;\/div&gt; &lt;p&gt;&lt;strong&gt;Log Data&lt;\/strong&gt;&lt;\/p&gt; &lt;p&gt; I want to inform you that whenever you use my Service, in a case of an\n                error in the app I collect data and information (through third party products) on your phone\n                called Log Data. This Log Data may include information such as your device Internet Protocol (\u201cIP\u201d) address,\n                device name, operating system version, the configuration of the app when utilizing my Service,\n                the time and date of your use of the Service, and other statistics.\n              &lt;\/p&gt; &lt;p&gt;&lt;strong&gt;Cookies&lt;\/strong&gt;&lt;\/p&gt; &lt;p&gt;Cookies are files with small amount of data that is commonly used an anonymous unique identifier. These\n                are sent to your browser from the website that you visit and are stored on your device internal memory.\n              &lt;\/p&gt; &lt;p&gt;This Service does not use these \u201ccookies\u201d explicitly. However, the app may use third party code and libraries\n                that use \u201ccookies\u201d to collection information and to improve their services. You have the option to either\n                accept or refuse these cookies and know when a cookie is being sent to your device. If you choose to\n                refuse our cookies, you may not be able to use some portions of this Service.\n              &lt;\/p&gt; &lt;p&gt;&lt;strong&gt;Service Providers&lt;\/strong&gt;&lt;\/p&gt; &lt;p&gt; I may employ third-party companies and individuals due to the following reasons:&lt;\/p&gt; &lt;ul&gt;&lt;li&gt;To facilitate our Service;&lt;\/li&gt; &lt;li&gt;To provide the Service on our behalf;&lt;\/li&gt; &lt;li&gt;To perform Service-related services; or&lt;\/li&gt; &lt;li&gt;To assist us in analyzing how our Service is used.&lt;\/li&gt;&lt;\/ul&gt; &lt;p&gt; I want to inform users of this Service that these third parties have access to your\n                Personal Information. The reason is to perform the tasks assigned to them on our behalf. However, they\n                are obligated not to disclose or use the information for any other purpose.\n              &lt;\/p&gt; &lt;p&gt;&lt;strong&gt;Security&lt;\/strong&gt;&lt;\/p&gt; &lt;p&gt; I value your trust in providing us your Personal Information, thus we are striving\n                to use commercially acceptable means of protecting it. But remember that no method of transmission over\n                the internet, or method of electronic storage is 100% secure and reliable, and I cannot guarantee\n                its absolute security.\n              &lt;\/p&gt; &lt;p&gt;&lt;strong&gt;Links to Other Sites&lt;\/strong&gt;&lt;\/p&gt; &lt;p&gt;This Service may contain links to other sites. If you click on a third-party link, you will be directed\n                to that site. Note that these external sites are not operated by me. Therefore, I strongly\n                advise you to review the Privacy Policy of these websites. I have no control over\n                and assume no responsibility for the content, privacy policies, or practices of any third-party sites\n                or services.\n              &lt;\/p&gt; &lt;p&gt;&lt;strong&gt;Children\u2019s Privacy&lt;\/strong&gt;&lt;\/p&gt; &lt;p&gt;These Services do not address anyone under the age of 13. I do not knowingly collect\n                personally identifiable information from children under 13. In the case I discover that a child\n                under 13 has provided me with personal information, I immediately delete this from\n                our servers. If you are a parent or guardian and you are aware that your child has provided us with personal\n                information, please contact me so that I will be able to do necessary actions.\n              &lt;\/p&gt; &lt;p&gt;&lt;strong&gt;Changes to This Privacy Policy&lt;\/strong&gt;&lt;\/p&gt; &lt;p&gt; I may update our Privacy Policy from time to time. Thus, you are advised to review\n                this page periodically for any changes. I will notify you of any changes by posting\n                the new Privacy Policy on this page. These changes are effective immediately after they are posted on\n                this page.\n              &lt;\/p&gt; &lt;p&gt;&lt;strong&gt;Contact Us&lt;\/strong&gt;&lt;\/p&gt; &lt;p&gt;If you have any questions or suggestions about my Privacy Policy, do not hesitate to contact\n                me.\n              &lt;\/p&gt; &lt;p&gt;This privacy policy page was created at &lt;a href=&quot;https:\/\/privacypolicytemplate.net&quot; target=&quot;_blank&quot;&gt;privacypolicytemplate.net&lt;\/a&gt;                    and modified\/generated by &lt;a href=&quot;https:\/\/app-privacy-policy-generator.firebaseapp.com\/&quot; target=&quot;_blank&quot;&gt;App Privacy Policy Generator&lt;\/a&gt;&lt;\/p&gt;&lt;\/div&gt;\n<\/code><\/pre>"},{"title":"What is this FAQ","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2017\/2017-07-29-what-is-this-faq\/","pubDate":"Sat, 29 Jul 2017 11:30:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2017\/2017-07-29-what-is-this-faq\/","description":"<p>&ldquo;<a href=\"https:\/\/play.google.com\/store\/apps\/details?id=com.mascix.whatisthis\">What is this<\/a>&rdquo; is an application uses amazon rekognition service to find out what are the picture contents.<\/p>"},{"title":"How to get TeamCity parameters dynamically","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2016\/2016-07-29-how-get-teamcity-parameters-dynamically\/","pubDate":"Fri, 29 Jul 2016 11:30:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2016\/2016-07-29-how-get-teamcity-parameters-dynamically\/","description":"<p>I have been searching about this hours. If you want to query parameters from build template. You can use REST api<\/p>\n<p>curl -s -u %system.REST% http:\/\/servername:port\/httpAuth\/app\/rest\/buildTypes\/template_name\/parameters\/parameter.%selectedOpTeam%.svnpath<\/p>\n<p>this rest call brings some svnpath from tc parameters. But when I wanted to get password it becomes tricky. Because I used to save password in tc as password type.<\/p>\n<p>%secure:teamcity.password.team.4.svnpass%<\/p>\n<p>This is the value when you do rest call. So how can we get passwords from team city. You need to add password parameters to system properties. Then actually teamcity gives you those parameters in file<\/p>"},{"title":"Oracle weblogic installation from console","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2016\/2016-07-01-oracle-weblogic-installation-from-console\/","pubDate":"Fri, 01 Jul 2016 11:30:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2016\/2016-07-01-oracle-weblogic-installation-from-console\/","description":"<p>the -silent mode is actually console installation without gui.<\/p>\n<p>Create 2 files 1<\/p>\n<p>responseFile.properties<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-bash\" data-lang=\"bash\"><span style=\"display:flex;\"><span><span style=\"color:#f92672\">[<\/span>ENGINE<span style=\"color:#f92672\">]<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>Response File Version<span style=\"color:#f92672\">=<\/span>1.0.0.0.0\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#f92672\">[<\/span>GENERIC<span style=\"color:#f92672\">]<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>ORACLE_HOME<span style=\"color:#f92672\">=<\/span>\/path-to-install-to\n<\/span><\/span><span style=\"display:flex;\"><span>INSTALL_TYPE<span style=\"color:#f92672\">=<\/span>WebLogic Server\n<\/span><\/span><span style=\"display:flex;\"><span>MYORACLESUPPORT_USERNAME<span style=\"color:#f92672\">=<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>MYORACLESUPPORT_PASSWORD<span style=\"color:#f92672\">=<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>DECLINE_SECURITY_UPDATES<span style=\"color:#f92672\">=<\/span>true\n<\/span><\/span><span style=\"display:flex;\"><span>SECURITY_UPDATES_VIA_MYORACLESUPPORT<span style=\"color:#f92672\">=<\/span>false\n<\/span><\/span><span style=\"display:flex;\"><span>PROXY_HOST<span style=\"color:#f92672\">=<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>PROXY_PORT<span style=\"color:#f92672\">=<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>PROXY_USER<span style=\"color:#f92672\">=<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>PROXY_PWD<span style=\"color:#f92672\">=<\/span>&lt;SECURE VALUE&gt;\n<\/span><\/span><span style=\"display:flex;\"><span>COLLECTOR_SUPPORTHUB_URL<span style=\"color:#f92672\">=<\/span>\n<\/span><\/span><\/code><\/pre><\/div><p>oraInst.loc<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-bash\" data-lang=\"bash\"><span style=\"display:flex;\"><span>inventory_loc<span style=\"color:#f92672\">=<\/span>\/inventory\/\n<\/span><\/span><span style=\"display:flex;\"><span>inst_group<span style=\"color:#f92672\">=<\/span>users\n<\/span><\/span><\/code><\/pre><\/div><p>Run this command in  shell<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-bash\" data-lang=\"bash\"><span style=\"display:flex;\"><span>java -jar fmw_12.2.1.1.0_wls.jar -silent -invPtrLoc \/fullpath\/oraInst.loc -responseFile \/fullpath\/responseFile.properties\n<\/span><\/span><\/code><\/pre><\/div><p>for windows<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-bash\" data-lang=\"bash\"><span style=\"display:flex;\"><span>java -jar fmw_12.2.1.1.0_wls.jar -silent -invPtrLoc c:<span style=\"color:#ae81ff\">\\o<\/span>racle<span style=\"color:#ae81ff\">\\o<\/span>raInst.loc -responseFile c:<span style=\"color:#ae81ff\">\\o<\/span>racle<span style=\"color:#ae81ff\">\\r<\/span>esponseFile.properties\n<\/span><\/span><\/code><\/pre><\/div><p>in responseFile.properties change<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-bash\" data-lang=\"bash\"><span style=\"display:flex;\"><span>ORACLE_HOME<span style=\"color:#f92672\">=<\/span>c:<span style=\"color:#ae81ff\">\\\\<\/span>some-path-to-install\n<\/span><\/span><\/code><\/pre><\/div>"},{"title":"different loops in two dimensional array","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2016\/2016-02-11-loop-two-dimension-array\/","pubDate":"Thu, 11 Feb 2016 11:30:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2016\/2016-02-11-loop-two-dimension-array\/","description":"<p>I was trying to solve hackerrank questions. it has been long time I write anything directly related to arrays. mostly coding after some point is db related and mostly used lists there. anyway here is how you can solve <a href=\"https:\/\/www.hackerrank.com\/challenges\/diagonal-difference\">https:\/\/www.hackerrank.com\/challenges\/diagonal-difference<\/a> this question in O(n square) and O(n).<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-java\" data-lang=\"java\"><span style=\"display:flex;\"><span><span style=\"color:#f92672\">import<\/span> java.io.*;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#f92672\">import<\/span> java.util.*;\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">public<\/span> <span style=\"color:#66d9ef\">class<\/span> <span style=\"color:#a6e22e\">Solution<\/span> {\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>\t<span style=\"color:#66d9ef\">public<\/span> <span style=\"color:#66d9ef\">static<\/span> <span style=\"color:#66d9ef\">void<\/span> <span style=\"color:#a6e22e\">main<\/span>(String<span style=\"color:#f92672\">[]<\/span> args) {\n<\/span><\/span><span style=\"display:flex;\"><span>\t\tScanner stdin <span style=\"color:#f92672\">=<\/span> <span style=\"color:#66d9ef\">new<\/span> Scanner(System.<span style=\"color:#a6e22e\">in<\/span>);\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t<span style=\"color:#66d9ef\">final<\/span> <span style=\"color:#66d9ef\">int<\/span> n <span style=\"color:#f92672\">=<\/span> stdin.<span style=\"color:#a6e22e\">nextInt<\/span>();\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t<span style=\"color:#66d9ef\">long<\/span> sum <span style=\"color:#f92672\">=<\/span> 0;\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t<span style=\"color:#66d9ef\">long<\/span> sum1 <span style=\"color:#f92672\">=<\/span> 0;\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t<span style=\"color:#66d9ef\">long<\/span><span style=\"color:#f92672\">[][]<\/span> matris <span style=\"color:#f92672\">=<\/span> <span style=\"color:#66d9ef\">new<\/span> <span style=\"color:#66d9ef\">long<\/span><span style=\"color:#f92672\">[<\/span>n<span style=\"color:#f92672\">][<\/span>n<span style=\"color:#f92672\">]<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t<span style=\"color:#66d9ef\">for<\/span> (<span style=\"color:#66d9ef\">int<\/span> i <span style=\"color:#f92672\">=<\/span> 0; i <span style=\"color:#f92672\">&lt;<\/span> n; i<span style=\"color:#f92672\">++<\/span>) {\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\t<span style=\"color:#66d9ef\">for<\/span> (<span style=\"color:#66d9ef\">int<\/span> j <span style=\"color:#f92672\">=<\/span> 0; j <span style=\"color:#f92672\">&lt;<\/span> n; j<span style=\"color:#f92672\">++<\/span>) {\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\t\tmatris<span style=\"color:#f92672\">[<\/span>i<span style=\"color:#f92672\">][<\/span>j<span style=\"color:#f92672\">]<\/span> <span style=\"color:#f92672\">=<\/span> stdin.<span style=\"color:#a6e22e\">nextLong<\/span>();\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\t}\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t}\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t<span style=\"color:#66d9ef\">for<\/span> (<span style=\"color:#66d9ef\">int<\/span> i <span style=\"color:#f92672\">=<\/span> 0; i <span style=\"color:#f92672\">&lt;<\/span> n; i<span style=\"color:#f92672\">++<\/span>) {\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\t<span style=\"color:#75715e\">\/\/ System.out.println(matris[i][i]);<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\tsum <span style=\"color:#f92672\">+=<\/span> matris<span style=\"color:#f92672\">[<\/span>i<span style=\"color:#f92672\">][<\/span>i<span style=\"color:#f92672\">]<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t}\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t<span style=\"color:#66d9ef\">for<\/span> (<span style=\"color:#66d9ef\">int<\/span> i <span style=\"color:#f92672\">=<\/span> 0; i <span style=\"color:#f92672\">&lt;<\/span> n; i<span style=\"color:#f92672\">++<\/span>) {\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\t<span style=\"color:#66d9ef\">for<\/span> (<span style=\"color:#66d9ef\">int<\/span> j <span style=\"color:#f92672\">=<\/span> 0; j <span style=\"color:#f92672\">&lt;<\/span> n; j<span style=\"color:#f92672\">++<\/span>) {\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\t\t<span style=\"color:#66d9ef\">if<\/span> (i <span style=\"color:#f92672\">+<\/span> j <span style=\"color:#f92672\">==<\/span> n <span style=\"color:#f92672\">-<\/span> 1) {\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\t\t\t<span style=\"color:#75715e\">\/\/ System.out.println(matris[i][j]);<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\t\t\tsum1 <span style=\"color:#f92672\">+=<\/span> matris<span style=\"color:#f92672\">[<\/span>i<span style=\"color:#f92672\">][<\/span>j<span style=\"color:#f92672\">]<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\t\t}\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\t}\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t}\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t<span style=\"color:#66d9ef\">for<\/span> (<span style=\"color:#66d9ef\">int<\/span> i <span style=\"color:#f92672\">=<\/span> n <span style=\"color:#f92672\">-<\/span> 1; i <span style=\"color:#f92672\">&gt;=<\/span> 0; i<span style=\"color:#f92672\">--<\/span>) {\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\tSystem.<span style=\"color:#a6e22e\">out<\/span>.<span style=\"color:#a6e22e\">println<\/span>(matris<span style=\"color:#f92672\">[<\/span>i<span style=\"color:#f92672\">][<\/span>n <span style=\"color:#f92672\">-<\/span> 1 <span style=\"color:#f92672\">-<\/span> i<span style=\"color:#f92672\">]<\/span>);\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t}\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>\t\tSystem.<span style=\"color:#a6e22e\">out<\/span>.<span style=\"color:#a6e22e\">println<\/span>(Math.<span style=\"color:#a6e22e\">abs<\/span>(sum <span style=\"color:#f92672\">-<\/span> sum1));\n<\/span><\/span><span style=\"display:flex;\"><span>\t}\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><\/code><\/pre><\/div>"},{"title":"How to use opatch in windows","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2016\/2016-02-02-weblogic-opatch-windows\/","pubDate":"Tue, 02 Feb 2016 11:30:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2016\/2016-02-02-weblogic-opatch-windows\/","description":"<p>Oracle has opatch utility for applying weblogic patches. you just need to unzip the patch package and run the command like this<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-powershell\" data-lang=\"powershell\"><span style=\"display:flex;\"><span>C:\\Oracle\\wls12.1.<span style=\"color:#ae81ff\">3<\/span>\\OPatch&gt;opatch apply C:\\Oracle\\wls12.1.<span style=\"color:#ae81ff\">3<\/span>\\OPatch\\utils\\patches\\<span style=\"color:#ae81ff\">20741228<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>Oracle Interim Patch Installer version <span style=\"color:#ae81ff\">13.2<\/span>.0.0.0\n<\/span><\/span><span style=\"display:flex;\"><span>Copyright (c) <span style=\"color:#ae81ff\">2014<\/span>, Oracle Corporation.  All rights reserved.\n<\/span><\/span><span style=\"display:flex;\"><span> \n<\/span><\/span><span style=\"display:flex;\"><span> \n<\/span><\/span><span style=\"display:flex;\"><span>Oracle Home       <span style=\"color:#960050;background-color:#1e0010\">:<\/span> C:\\Oracle\\WLS121~<span style=\"color:#ae81ff\">1.3<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>Central Inventory <span style=\"color:#960050;background-color:#1e0010\">:<\/span> C:\\Program Files\\Oracle\\Inventory\n<\/span><\/span><span style=\"display:flex;\"><span>   from           <span style=\"color:#960050;background-color:#1e0010\">:<\/span> n\/a\n<\/span><\/span><span style=\"display:flex;\"><span>OPatch version    <span style=\"color:#960050;background-color:#1e0010\">:<\/span> <span style=\"color:#ae81ff\">13.2<\/span>.0.0.0\n<\/span><\/span><span style=\"display:flex;\"><span>OUI version       <span style=\"color:#960050;background-color:#1e0010\">:<\/span> <span style=\"color:#ae81ff\">13.2<\/span>.0.0.0\n<\/span><\/span><span style=\"display:flex;\"><span>Log file location <span style=\"color:#960050;background-color:#1e0010\">:<\/span> C:\\Oracle\\WLS121~<span style=\"color:#ae81ff\">1.3<\/span>\\cfgtoollogs\\opatch\\20741228_Feb_01_2016_10_10_23\\appl\n<\/span><\/span><span style=\"display:flex;\"><span> \n<\/span><\/span><span style=\"display:flex;\"><span> \n<\/span><\/span><span style=\"display:flex;\"><span>OPatch detects the Middleware Home as <span style=\"color:#e6db74\">&#34;C:\\Oracle\\wls12.1.3&#34;<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span> \n<\/span><\/span><span style=\"display:flex;\"><span>Feb <span style=\"color:#ae81ff\">01<\/span>, <span style=\"color:#ae81ff\">2016<\/span> <span style=\"color:#ae81ff\">10<\/span><span style=\"color:#960050;background-color:#1e0010\">:<\/span><span style=\"color:#ae81ff\">10<\/span><span style=\"color:#960050;background-color:#1e0010\">:<\/span><span style=\"color:#ae81ff\">24<\/span> AM oracle.sysman.oii.oiii.OiiiInstallAreaControl initAreaControl\n<\/span><\/span><span style=\"display:flex;\"><span>INFO<span style=\"color:#960050;background-color:#1e0010\">:<\/span> Install area Control created with access level  <span style=\"color:#ae81ff\">0<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>Applying interim patch <span style=\"color:#e6db74\">&#39;20741228&#39;<\/span> to OH <span style=\"color:#e6db74\">&#39;C:\\Oracle\\WLS121~1.3&#39;<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>Verifying environment and performing prerequisite checks...\n<\/span><\/span><span style=\"display:flex;\"><span>All checks passed.\n<\/span><\/span><span style=\"display:flex;\"><span> \n<\/span><\/span><span style=\"display:flex;\"><span>Please shutdown Oracle instances running out of this ORACLE_HOME on the local system.\n<\/span><\/span><span style=\"display:flex;\"><span>(Oracle Home = <span style=\"color:#e6db74\">&#39;C:\\Oracle\\WLS121~1.3&#39;<\/span>)\n<\/span><\/span><span style=\"display:flex;\"><span> \n<\/span><\/span><span style=\"display:flex;\"><span> \n<\/span><\/span><span style=\"display:flex;\"><span>Is the local system ready <span style=\"color:#66d9ef\">for<\/span> patching? [y|n]\n<\/span><\/span><span style=\"display:flex;\"><span>y\n<\/span><\/span><span style=\"display:flex;\"><span>User Responded with<span style=\"color:#960050;background-color:#1e0010\">:<\/span> Y\n<\/span><\/span><span style=\"display:flex;\"><span>Backing up files...\n<\/span><\/span><span style=\"display:flex;\"><span> \n<\/span><\/span><span style=\"display:flex;\"><span>Patching component oracle.javavm.jrf, <span style=\"color:#ae81ff\">12.1<\/span>.0.2.0...\n<\/span><\/span><span style=\"display:flex;\"><span> \n<\/span><\/span><span style=\"display:flex;\"><span>Verifying the update...\n<\/span><\/span><span style=\"display:flex;\"><span>Patch <span style=\"color:#ae81ff\">20741228<\/span> successfully applied\n<\/span><\/span><span style=\"display:flex;\"><span>Log file location<span style=\"color:#960050;background-color:#1e0010\">:<\/span> C:\\Oracle\\WLS121~<span style=\"color:#ae81ff\">1.3<\/span>\\cfgtoollogs\\opatch\\20741228_Feb_01_2016_10_10_23\\apply\n<\/span><\/span><span style=\"display:flex;\"><span> \n<\/span><\/span><span style=\"display:flex;\"><span>OPatch succeeded.\n<\/span><\/span><\/code><\/pre><\/div><p>for listing patches already applid in the system<\/p>"},{"title":"How to find which process uses some port in windows","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2016\/2016-01-09-how-to-find-which-process\/","pubDate":"Sat, 09 Jan 2016 11:30:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2016\/2016-01-09-how-to-find-which-process\/","description":"<p>How to find which process uses some port in windows<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-bash\" data-lang=\"bash\"><span style=\"display:flex;\"><span>netstat -ano | find <span style=\"color:#e6db74\">&#34;:8080&#34;<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>  TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING       <span style=\"color:#ae81ff\">26924<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>  TCP    <span style=\"color:#f92672\">[<\/span>::<span style=\"color:#f92672\">]<\/span>:8080              <span style=\"color:#f92672\">[<\/span>::<span style=\"color:#f92672\">]<\/span>:0                 LISTENING       <span style=\"color:#ae81ff\">26924<\/span>\n<\/span><\/span><\/code><\/pre><\/div><p>At right column you can see the process ID.<\/p>"},{"title":"jms jsp xa and non xa examples","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2016\/2016-01-05-jms-jsp-examples\/","pubDate":"Tue, 05 Jan 2016 11:30:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2016\/2016-01-05-jms-jsp-examples\/","description":"<p>sometime you may need to configure jms messaging queue and when you need that you will configure jndi too.<\/p>\n<p>writing a jsp to test them is a good idea. or you may just got find a huge ear project like 200mbs and you need to see if this jndi and jms still works there. you can use these jsps for those.<\/p>\n<p>in weblogic there is XA enabled jms. which uses JTA user-transactions. and in my case I needed to test both nonXA and XA enabled jmsses.<\/p>"},{"title":"how to move iis from one windows to another","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2015\/2015-11-30-move-iis\/","pubDate":"Mon, 30 Nov 2015 17:30:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2015\/2015-11-30-move-iis\/","description":"<p>Last weekend I needed to move from one windows 2012 to another one. And I have a large website runs in IIS.<\/p>\n<p>Normally in IIS manager you can export with web deploy tool. But I hit the 4gb max size limit.  And the dialog was saying use archivedir.<\/p>\n<p>Here is how you can do it. For backing up whole sites from your IIS<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-bash\" data-lang=\"bash\"><span style=\"display:flex;\"><span>msdeploy -verb:sync -dest:archivedir<span style=\"color:#f92672\">=<\/span>c:<span style=\"color:#ae81ff\">\\s<\/span>ite1archive,encryptPassword<span style=\"color:#f92672\">=<\/span>password -source<span style=\"color:#f92672\">=<\/span>webserver\n<\/span><\/span><\/code><\/pre><\/div><p>The sitearchive1 directory should have been created before and you can change the password.<\/p>"},{"title":"install macos in virtualbox in ubuntu","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2015\/2015-11-22-install-mac\/","pubDate":"Sun, 22 Nov 2015 17:30:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2015\/2015-11-22-install-mac\/","description":"<p>I am not a fan of apple products but I wanted to try qt in mac. so I look for how can I install the macos in ubuntu virtualbox. there are some info in hackintosh site and some videos and documents. first of all I tried yosemite but it did not start properly in virtualbox then I look for which one is the latest macos version and it is el capitain.<\/p>"},{"title":"adding jars to maven pom","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2015\/2015-11-01-add-jar-from-path\/","pubDate":"Sun, 01 Nov 2015 17:30:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2015\/2015-11-01-add-jar-from-path\/","description":"<p>normally you dont need this but sometime you may need to work with some special products like weblogic. and you may just need to add a dependincy from already installed weblogic.<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-xml\" data-lang=\"xml\"><span style=\"display:flex;\"><span><span style=\"color:#f92672\">&lt;dependency&gt;<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>                <span style=\"color:#f92672\">&lt;groupId&gt;<\/span>weblogic<span style=\"color:#f92672\">&lt;\/groupId&gt;<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>                <span style=\"color:#f92672\">&lt;artifactId&gt;<\/span>weblogic<span style=\"color:#f92672\">&lt;\/artifactId&gt;<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>                <span style=\"color:#f92672\">&lt;version&gt;<\/span>1<span style=\"color:#f92672\">&lt;\/version&gt;<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>                <span style=\"color:#f92672\">&lt;scope&gt;<\/span>system<span style=\"color:#f92672\">&lt;\/scope&gt;<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>                <span style=\"color:#f92672\">&lt;systemPath&gt;<\/span>C:\\wl12\\wlserver\\modules\\features\\weblogic.server.merged.jar<span style=\"color:#f92672\">&lt;\/systemPath&gt;<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#f92672\">&lt;\/dependency&gt;<\/span>\n<\/span><\/span><\/code><\/pre><\/div><p>this is working in windows as you guess :)<\/p>"},{"title":"nginx vs varnish","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2015\/2015-10-23-nginx-vs-varnish\/","pubDate":"Fri, 23 Oct 2015 20:30:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2015\/2015-10-23-nginx-vs-varnish\/","description":"<p>it has been a long time I am using varnish + apache. and I was reading nginx is really fast. 2 days ago I installed nginx and configure one php page works with it. here are the ab outputs<\/p>\n<p>this is varnish<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-bash\" data-lang=\"bash\"><span style=\"display:flex;\"><span>mascix@mascix-HP-Pavilion-dv7-Notebook-PC:~\/tmp\/akka\/example-akka-http$ ab -n <span style=\"color:#ae81ff\">100<\/span> -c <span style=\"color:#ae81ff\">10<\/span> http:\/\/sifavi.com\/\n<\/span><\/span><span style=\"display:flex;\"><span>This is ApacheBench, Version 2.3 &lt;$Revision: <span style=\"color:#ae81ff\">1528965<\/span> $&gt;\n<\/span><\/span><span style=\"display:flex;\"><span>Copyright <span style=\"color:#ae81ff\">1996<\/span> Adam Twiss, Zeus Technology Ltd, http:\/\/www.zeustech.net\/\n<\/span><\/span><span style=\"display:flex;\"><span>Licensed to The Apache Software Foundation, http:\/\/www.apache.org\/\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>Benchmarking sifavi.com <span style=\"color:#f92672\">(<\/span>be patient<span style=\"color:#f92672\">)<\/span>.....done\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>Server Software:        Apache\n<\/span><\/span><span style=\"display:flex;\"><span>Server Hostname:        sifavi.com\n<\/span><\/span><span style=\"display:flex;\"><span>Server Port:            <span style=\"color:#ae81ff\">80<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>Document Path:          \/\n<\/span><\/span><span style=\"display:flex;\"><span>Document Length:        <span style=\"color:#ae81ff\">230<\/span> bytes\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>Concurrency Level:      <span style=\"color:#ae81ff\">10<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>Time taken <span style=\"color:#66d9ef\">for<\/span> tests:   0.937 seconds\n<\/span><\/span><span style=\"display:flex;\"><span>Complete requests:      <span style=\"color:#ae81ff\">100<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>Failed requests:        <span style=\"color:#ae81ff\">0<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>Non-2xx responses:      <span style=\"color:#ae81ff\">100<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>Total transferred:      <span style=\"color:#ae81ff\">57784<\/span> bytes\n<\/span><\/span><span style=\"display:flex;\"><span>HTML transferred:       <span style=\"color:#ae81ff\">23000<\/span> bytes\n<\/span><\/span><span style=\"display:flex;\"><span>Requests per second:    106.73 <span style=\"color:#f92672\">[<\/span><span style=\"color:#75715e\">#\/sec] (mean)<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>Time per request:       93.696 <span style=\"color:#f92672\">[<\/span>ms<span style=\"color:#f92672\">]<\/span> <span style=\"color:#f92672\">(<\/span>mean<span style=\"color:#f92672\">)<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>Time per request:       9.370 <span style=\"color:#f92672\">[<\/span>ms<span style=\"color:#f92672\">]<\/span> <span style=\"color:#f92672\">(<\/span>mean, across all concurrent requests<span style=\"color:#f92672\">)<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>Transfer rate:          60.23 <span style=\"color:#f92672\">[<\/span>Kbytes\/sec<span style=\"color:#f92672\">]<\/span> received\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>Connection Times <span style=\"color:#f92672\">(<\/span>ms<span style=\"color:#f92672\">)<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>              min  mean<span style=\"color:#f92672\">[<\/span>+\/-sd<span style=\"color:#f92672\">]<\/span> median   max\n<\/span><\/span><span style=\"display:flex;\"><span>Connect:       <span style=\"color:#ae81ff\">42<\/span>   <span style=\"color:#ae81ff\">45<\/span>   3.3     <span style=\"color:#ae81ff\">44<\/span>      <span style=\"color:#ae81ff\">56<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>Processing:    <span style=\"color:#ae81ff\">43<\/span>   <span style=\"color:#ae81ff\">47<\/span>   3.6     <span style=\"color:#ae81ff\">45<\/span>      <span style=\"color:#ae81ff\">64<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>Waiting:       <span style=\"color:#ae81ff\">43<\/span>   <span style=\"color:#ae81ff\">47<\/span>   3.5     <span style=\"color:#ae81ff\">45<\/span>      <span style=\"color:#ae81ff\">64<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>Total:         <span style=\"color:#ae81ff\">86<\/span>   <span style=\"color:#ae81ff\">92<\/span>   5.4     <span style=\"color:#ae81ff\">90<\/span>     <span style=\"color:#ae81ff\">113<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>Percentage of the requests served within a certain time <span style=\"color:#f92672\">(<\/span>ms<span style=\"color:#f92672\">)<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>  50%     <span style=\"color:#ae81ff\">90<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>  66%     <span style=\"color:#ae81ff\">92<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>  75%     <span style=\"color:#ae81ff\">96<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>  80%     <span style=\"color:#ae81ff\">97<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>  90%    <span style=\"color:#ae81ff\">101<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>  95%    <span style=\"color:#ae81ff\">102<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>  98%    <span style=\"color:#ae81ff\">110<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>  99%    <span style=\"color:#ae81ff\">113<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span> 100%    <span style=\"color:#ae81ff\">113<\/span> <span style=\"color:#f92672\">(<\/span>longest request<span style=\"color:#f92672\">)<\/span>\n<\/span><\/span><\/code><\/pre><\/div><p>this is nginx<\/p>"},{"title":"first jni example","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2015\/2015-10-10-first-jni-example\/","pubDate":"Sat, 10 Oct 2015 20:30:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2015\/2015-10-10-first-jni-example\/","description":"<p>I never tried JNI(Java Native Interface) before. jni is an api for to call native C code from inside a java code. for a principle I dont like this kind of mixed things. calling java inside c# or calling C# code from C++ is always makes hard codes to understand. anyway I was wondering about the performance of printf between java and jni.<\/p>\n<p>basically there are 2 codes. one is written in java one is written in C. here is our C code<\/p>"},{"title":"mvn disable checkstyle","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2015\/2015-10-08-mvn-disable-checkstyle\/","pubDate":"Thu, 08 Oct 2015 01:24:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2015\/2015-10-08-mvn-disable-checkstyle\/","description":"<p>Let say you are using windows I know most of developers does that. Especially in the company they work for.<\/p>\n<p>Anyway I am trying to build some REST client in standalone jdk. And I have not used it before so I am trying to read examples <a href=\"https:\/\/maven.java.net\/content\/repositories\/releases\/org\/glassfish\/jersey\/bundles\/jersey-examples\/2.22\/\">https:\/\/maven.java.net\/content\/repositories\/releases\/org\/glassfish\/jersey\/bundles\/jersey-examples\/2.22\/<\/a>\nrun them, try to understand.<\/p>\n<p>But in windows I am getting this error<\/p>\n<pre tabindex=\"0\"><code>[ERROR] Failed to execute goal org.apache.maven.plugins:maven-checkstyle-plugin:2.16:check (verify) on project helloworld-webapp: Failed during checkstyle execution: Unable to find suppressions file at location: etc\/config\/checkstyle-suppressions.xml: Could not find resource &#39;etc\/config\/checkstyle-suppressions.xml&#39;. -&gt; [Help 1]\n<\/code><\/pre><p>First I check pom xmls but could not find the exact point to disable this maven-checkstyle-plugin. I don\u2019t know which super clever engineer enable this in examples and have not tried it under windows. But this kind of errors actually make people to stop learning java. The java language is easy but this environmental problems very frustrating.<\/p>"},{"title":"Java imperative and functional approach performance test 2","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2015\/2015-09-20-java-imperative-performance-test2\/","pubDate":"Sun, 20 Sep 2015 16:03:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2015\/2015-09-20-java-imperative-performance-test2\/","description":"<p>another test for imperative code<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-java\" data-lang=\"java\"><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#f92672\">package<\/span> testarea;\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#f92672\">import<\/span> java.util.ArrayList;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#f92672\">import<\/span> java.util.List;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#f92672\">import<\/span> java.util.OptionalDouble;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#f92672\">import<\/span> java.util.stream.Collectors;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#f92672\">import<\/span> java.util.stream.IntStream;\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">public<\/span> <span style=\"color:#66d9ef\">class<\/span> <span style=\"color:#a6e22e\">Test<\/span> {\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>\t<span style=\"color:#66d9ef\">static<\/span> <span style=\"color:#66d9ef\">int<\/span><span style=\"color:#f92672\">[]<\/span> array <span style=\"color:#f92672\">=<\/span> <span style=\"color:#66d9ef\">new<\/span> <span style=\"color:#66d9ef\">int<\/span><span style=\"color:#f92672\">[]<\/span> { 1, 2, 3, 4, 5, 6, 7, 8, 8, 8, 9, 10 };\n<\/span><\/span><span style=\"display:flex;\"><span>\t<span style=\"color:#66d9ef\">private<\/span> <span style=\"color:#66d9ef\">static<\/span> List<span style=\"color:#f92672\">&lt;<\/span>Double<span style=\"color:#f92672\">&gt;<\/span> NUMBERS_FOR_AVERAGE <span style=\"color:#f92672\">=<\/span> <span style=\"color:#66d9ef\">new<\/span> ArrayList<span style=\"color:#f92672\">&lt;<\/span>Double<span style=\"color:#f92672\">&gt;<\/span>();\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>\t<span style=\"color:#66d9ef\">static<\/span> <span style=\"color:#66d9ef\">long<\/span> startTime, stopTime;\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>\t<span style=\"color:#66d9ef\">public<\/span> <span style=\"color:#66d9ef\">static<\/span> <span style=\"color:#66d9ef\">void<\/span> <span style=\"color:#a6e22e\">main<\/span>(String<span style=\"color:#f92672\">[]<\/span> args) {\n<\/span><\/span><span style=\"display:flex;\"><span>\t\tNUMBERS_FOR_AVERAGE.<span style=\"color:#a6e22e\">add<\/span>(<span style=\"color:#66d9ef\">new<\/span> Double(10));\n<\/span><\/span><span style=\"display:flex;\"><span>\t    NUMBERS_FOR_AVERAGE.<span style=\"color:#a6e22e\">add<\/span>(<span style=\"color:#66d9ef\">new<\/span> Double(10));\n<\/span><\/span><span style=\"display:flex;\"><span>\t    NUMBERS_FOR_AVERAGE.<span style=\"color:#a6e22e\">add<\/span>(<span style=\"color:#66d9ef\">new<\/span> Double(10));\n<\/span><\/span><span style=\"display:flex;\"><span>\t    NUMBERS_FOR_AVERAGE.<span style=\"color:#a6e22e\">add<\/span>(<span style=\"color:#66d9ef\">new<\/span> Double(10));\n<\/span><\/span><span style=\"display:flex;\"><span>\t    NUMBERS_FOR_AVERAGE.<span style=\"color:#a6e22e\">add<\/span>(<span style=\"color:#66d9ef\">new<\/span> Double(10));\n<\/span><\/span><span style=\"display:flex;\"><span>\t    NUMBERS_FOR_AVERAGE.<span style=\"color:#a6e22e\">add<\/span>(<span style=\"color:#66d9ef\">new<\/span> Double(10));\n<\/span><\/span><span style=\"display:flex;\"><span>\t    NUMBERS_FOR_AVERAGE.<span style=\"color:#a6e22e\">add<\/span>(<span style=\"color:#66d9ef\">new<\/span> Double(10));\n<\/span><\/span><span style=\"display:flex;\"><span>\t    NUMBERS_FOR_AVERAGE.<span style=\"color:#a6e22e\">add<\/span>(<span style=\"color:#66d9ef\">new<\/span> Double(10));\n<\/span><\/span><span style=\"display:flex;\"><span>\t    NUMBERS_FOR_AVERAGE.<span style=\"color:#a6e22e\">add<\/span>(<span style=\"color:#66d9ef\">new<\/span> Double(10));\n<\/span><\/span><span style=\"display:flex;\"><span>\t    NUMBERS_FOR_AVERAGE.<span style=\"color:#a6e22e\">add<\/span>(<span style=\"color:#66d9ef\">new<\/span> Double(10));\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\n<\/span><\/span><span style=\"display:flex;\"><span>\t\trunImperative();\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>\t\trunFunctional();\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>\t\trunImperative();\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\n<\/span><\/span><span style=\"display:flex;\"><span>\t\trunFunctional();runFunctional();runFunctional();runFunctional();\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\n<\/span><\/span><span style=\"display:flex;\"><span>\t\trunImperative();runImperative();runImperative();runImperative();\n<\/span><\/span><span style=\"display:flex;\"><span>\t\trunFunctional();\n<\/span><\/span><span style=\"display:flex;\"><span>\t}\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>\t<span style=\"color:#66d9ef\">private<\/span> <span style=\"color:#66d9ef\">static<\/span> <span style=\"color:#66d9ef\">void<\/span> <span style=\"color:#a6e22e\">runFunctional<\/span>() {\n<\/span><\/span><span style=\"display:flex;\"><span>\t\tstartTime <span style=\"color:#f92672\">=<\/span> System.<span style=\"color:#a6e22e\">nanoTime<\/span>();\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>\t\tfunctionalApproach();\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>\t\tstopTime <span style=\"color:#f92672\">=<\/span> System.<span style=\"color:#a6e22e\">nanoTime<\/span>();\n<\/span><\/span><span style=\"display:flex;\"><span>\t\tSystem.<span style=\"color:#a6e22e\">out<\/span>.<span style=\"color:#a6e22e\">println<\/span>(<span style=\"color:#e6db74\">&#34;F:&#34;<\/span><span style=\"color:#f92672\">+<\/span>(stopTime <span style=\"color:#f92672\">-<\/span> startTime));\n<\/span><\/span><span style=\"display:flex;\"><span>\t}\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>\t<span style=\"color:#66d9ef\">private<\/span> <span style=\"color:#66d9ef\">static<\/span> <span style=\"color:#66d9ef\">void<\/span> <span style=\"color:#a6e22e\">runImperative<\/span>() {\n<\/span><\/span><span style=\"display:flex;\"><span>\t\tstartTime <span style=\"color:#f92672\">=<\/span> System.<span style=\"color:#a6e22e\">nanoTime<\/span>();\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>\t\timperativeApproach();\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>\t\tstopTime <span style=\"color:#f92672\">=<\/span> System.<span style=\"color:#a6e22e\">nanoTime<\/span>();\n<\/span><\/span><span style=\"display:flex;\"><span>\t\tSystem.<span style=\"color:#a6e22e\">out<\/span>.<span style=\"color:#a6e22e\">println<\/span>(<span style=\"color:#e6db74\">&#34;I:&#34;<\/span><span style=\"color:#f92672\">+<\/span>(stopTime <span style=\"color:#f92672\">-<\/span> startTime));\n<\/span><\/span><span style=\"display:flex;\"><span>\t}\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>\t<span style=\"color:#66d9ef\">private<\/span> <span style=\"color:#66d9ef\">static<\/span> <span style=\"color:#66d9ef\">void<\/span> <span style=\"color:#a6e22e\">imperativeApproach<\/span>() {\n<\/span><\/span><span style=\"display:flex;\"><span>\t\tDouble sum <span style=\"color:#f92672\">=<\/span> 0d;\n<\/span><\/span><span style=\"display:flex;\"><span>\t    <span style=\"color:#66d9ef\">for<\/span> (Double vals : NUMBERS_FOR_AVERAGE) {\n<\/span><\/span><span style=\"display:flex;\"><span>\t        sum <span style=\"color:#f92672\">+=<\/span> vals;\n<\/span><\/span><span style=\"display:flex;\"><span>\t    }\n<\/span><\/span><span style=\"display:flex;\"><span>\t        \n<\/span><\/span><span style=\"display:flex;\"><span>\t    sum <span style=\"color:#f92672\">=<\/span>  sum <span style=\"color:#f92672\">\/<\/span> NUMBERS_FOR_AVERAGE.<span style=\"color:#a6e22e\">size<\/span>();\n<\/span><\/span><span style=\"display:flex;\"><span>\t}\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>\t<span style=\"color:#66d9ef\">private<\/span> <span style=\"color:#66d9ef\">static<\/span> <span style=\"color:#66d9ef\">void<\/span> <span style=\"color:#a6e22e\">functionalApproach<\/span>() {\n<\/span><\/span><span style=\"display:flex;\"><span>\t\tOptionalDouble average <span style=\"color:#f92672\">=<\/span> NUMBERS_FOR_AVERAGE\n<\/span><\/span><span style=\"display:flex;\"><span>\t            .<span style=\"color:#a6e22e\">stream<\/span>()\n<\/span><\/span><span style=\"display:flex;\"><span>\t            .<span style=\"color:#a6e22e\">mapToDouble<\/span>(a <span style=\"color:#f92672\">-&gt;<\/span> a)\n<\/span><\/span><span style=\"display:flex;\"><span>\t            .<span style=\"color:#a6e22e\">average<\/span>();\n<\/span><\/span><span style=\"display:flex;\"><span>\t}\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><\/code><\/pre><\/div><p>here is my output<\/p>"},{"title":"Java imperative and functional approach performance test","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2015\/2015-09-19-java-imperative-vs-functional\/","pubDate":"Sat, 19 Sep 2015 18:30:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2015\/2015-09-19-java-imperative-vs-functional\/","description":"<p>I love performance tests. generally I test everything myself if there is no source in the internet I must do it :)<\/p>\n<p>today I was reading imperative coding vs functional coding <a href=\"http:\/\/www.javacodegeeks.com\/2015\/09\/comparing-imperative-and-functional-algorithms-in-java-8.html\" rel=\"nofollow\">here<\/a>. it stuck my mind this sentence.<\/p>\n<blockquote>they\u2019re probably equally fast and reasonable<\/blockquote>\n<p>then I have to try which one is faster. here is the code<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-java\" data-lang=\"java\"><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#f92672\">package<\/span> testarea;\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#f92672\">import<\/span> java.util.stream.Collectors;\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#f92672\">import<\/span> java.util.stream.IntStream;\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">public<\/span> <span style=\"color:#66d9ef\">class<\/span> <span style=\"color:#a6e22e\">Test<\/span> {\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>\t<span style=\"color:#66d9ef\">static<\/span> <span style=\"color:#66d9ef\">int<\/span><span style=\"color:#f92672\">[]<\/span> array <span style=\"color:#f92672\">=<\/span> <span style=\"color:#66d9ef\">new<\/span> <span style=\"color:#66d9ef\">int<\/span><span style=\"color:#f92672\">[]<\/span> { 1, 2, 3, 4, 5, 6, 7, 8, 8, 8, 9, 10 };\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>\t<span style=\"color:#66d9ef\">static<\/span> <span style=\"color:#66d9ef\">long<\/span> startTime, stopTime;\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>\t<span style=\"color:#66d9ef\">public<\/span> <span style=\"color:#66d9ef\">static<\/span> <span style=\"color:#66d9ef\">void<\/span> <span style=\"color:#a6e22e\">main<\/span>(String<span style=\"color:#f92672\">[]<\/span> args) {\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\n<\/span><\/span><span style=\"display:flex;\"><span>\t\trunImperative();\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>\t\trunFunctional();\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>\t\trunImperative();\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\n<\/span><\/span><span style=\"display:flex;\"><span>\t\trunFunctional();runFunctional();runFunctional();runFunctional();\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\n<\/span><\/span><span style=\"display:flex;\"><span>\t\trunImperative();runImperative();runImperative();runImperative();\n<\/span><\/span><span style=\"display:flex;\"><span>\t\trunFunctional();\n<\/span><\/span><span style=\"display:flex;\"><span>\t}\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>\t<span style=\"color:#66d9ef\">private<\/span> <span style=\"color:#66d9ef\">static<\/span> <span style=\"color:#66d9ef\">void<\/span> <span style=\"color:#a6e22e\">runFunctional<\/span>() {\n<\/span><\/span><span style=\"display:flex;\"><span>\t\tstartTime <span style=\"color:#f92672\">=<\/span> System.<span style=\"color:#a6e22e\">nanoTime<\/span>();\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>\t\tfunctionalApproach();\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>\t\tstopTime <span style=\"color:#f92672\">=<\/span> System.<span style=\"color:#a6e22e\">nanoTime<\/span>();\n<\/span><\/span><span style=\"display:flex;\"><span>\t\tSystem.<span style=\"color:#a6e22e\">out<\/span>.<span style=\"color:#a6e22e\">println<\/span>(<span style=\"color:#e6db74\">&#34;F:&#34;<\/span><span style=\"color:#f92672\">+<\/span>(stopTime <span style=\"color:#f92672\">-<\/span> startTime));\n<\/span><\/span><span style=\"display:flex;\"><span>\t}\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>\t<span style=\"color:#66d9ef\">private<\/span> <span style=\"color:#66d9ef\">static<\/span> <span style=\"color:#66d9ef\">void<\/span> <span style=\"color:#a6e22e\">runImperative<\/span>() {\n<\/span><\/span><span style=\"display:flex;\"><span>\t\tstartTime <span style=\"color:#f92672\">=<\/span> System.<span style=\"color:#a6e22e\">nanoTime<\/span>();\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>\t\timperativeApproach();\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>\t\tstopTime <span style=\"color:#f92672\">=<\/span> System.<span style=\"color:#a6e22e\">nanoTime<\/span>();\n<\/span><\/span><span style=\"display:flex;\"><span>\t\tSystem.<span style=\"color:#a6e22e\">out<\/span>.<span style=\"color:#a6e22e\">println<\/span>(<span style=\"color:#e6db74\">&#34;I:&#34;<\/span><span style=\"color:#f92672\">+<\/span>(stopTime <span style=\"color:#f92672\">-<\/span> startTime));\n<\/span><\/span><span style=\"display:flex;\"><span>\t}\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>\t<span style=\"color:#66d9ef\">private<\/span> <span style=\"color:#66d9ef\">static<\/span> <span style=\"color:#66d9ef\">void<\/span> <span style=\"color:#a6e22e\">imperativeApproach<\/span>() {\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t<span style=\"color:#66d9ef\">int<\/span> sum <span style=\"color:#f92672\">=<\/span> 0;\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t<span style=\"color:#66d9ef\">for<\/span> (<span style=\"color:#66d9ef\">int<\/span> j <span style=\"color:#f92672\">=<\/span> 0; j <span style=\"color:#f92672\">&lt;<\/span> array.<span style=\"color:#a6e22e\">length<\/span>; j<span style=\"color:#f92672\">++<\/span>) {\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\t<span style=\"color:#66d9ef\">for<\/span> (<span style=\"color:#66d9ef\">int<\/span> k <span style=\"color:#f92672\">=<\/span> j <span style=\"color:#f92672\">+<\/span> 1; k <span style=\"color:#f92672\">&lt;<\/span> array.<span style=\"color:#a6e22e\">length<\/span>; k<span style=\"color:#f92672\">++<\/span>) {\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\t\t<span style=\"color:#66d9ef\">if<\/span> (k <span style=\"color:#f92672\">!=<\/span> j <span style=\"color:#f92672\">&amp;&amp;<\/span> array<span style=\"color:#f92672\">[<\/span>k<span style=\"color:#f92672\">]<\/span> <span style=\"color:#f92672\">==<\/span> array<span style=\"color:#f92672\">[<\/span>j<span style=\"color:#f92672\">]<\/span>) {\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\t\t\tsum <span style=\"color:#f92672\">=<\/span> sum <span style=\"color:#f92672\">+<\/span> array<span style=\"color:#f92672\">[<\/span>k<span style=\"color:#f92672\">]<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\t\t}\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\t}\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t}\n<\/span><\/span><span style=\"display:flex;\"><span>\t}\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>\t<span style=\"color:#66d9ef\">private<\/span> <span style=\"color:#66d9ef\">static<\/span> <span style=\"color:#66d9ef\">void<\/span> <span style=\"color:#a6e22e\">functionalApproach<\/span>() {\n<\/span><\/span><span style=\"display:flex;\"><span>\t\tIntStream.<span style=\"color:#a6e22e\">of<\/span>(array).<span style=\"color:#a6e22e\">boxed<\/span>().<span style=\"color:#a6e22e\">collect<\/span>(Collectors.<span style=\"color:#a6e22e\">groupingBy<\/span>(i <span style=\"color:#f92672\">-&gt;<\/span> i)).<span style=\"color:#a6e22e\">entrySet<\/span>().<span style=\"color:#a6e22e\">stream<\/span>()\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\t\t.<span style=\"color:#a6e22e\">filter<\/span>(e <span style=\"color:#f92672\">-&gt;<\/span> e.<span style=\"color:#a6e22e\">getValue<\/span>().<span style=\"color:#a6e22e\">size<\/span>() <span style=\"color:#f92672\">&gt;<\/span> 1).<span style=\"color:#a6e22e\">forEach<\/span>(e <span style=\"color:#f92672\">-&gt;<\/span> {\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\t\t\t e.<span style=\"color:#a6e22e\">getValue<\/span>().<span style=\"color:#a6e22e\">stream<\/span>().<span style=\"color:#a6e22e\">collect<\/span>(Collectors.<span style=\"color:#a6e22e\">summingInt<\/span>(i <span style=\"color:#f92672\">-&gt;<\/span> i));\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t\t\t});\n<\/span><\/span><span style=\"display:flex;\"><span>\t}\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><\/code><\/pre><\/div><p>here is my output<\/p>"},{"title":"I moved to lxde","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2015\/2015-09-16-lxde-rocks\/","pubDate":"Wed, 16 Sep 2015 18:30:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2015\/2015-09-16-lxde-rocks\/","description":"<p>I installed linux into this computer around 3 months ago. and I am loving it. as long as debian in my pc I am happy :) the other day I <a href=\"https:\/\/ozkanpakdil.github.io\/laptop\/2015\/09\/15\/HP%20pavilion%20dv7%20f%20keys.html\">disabled fn key from BIOS<\/a> and suspend started working also. I am not sure which one solved the problem. turning to lxde or that bios thing but still I am happy about this.<\/p>\n<p>because closing the lid and opening it and not finding X was frustrating. and I had a lot of restarts because of that. now it is working like it suppose to.<\/p>"},{"title":"HP pavilion dv7 f keys","link":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2015\/2015-09-15-hp-pavilion-dv7-f-keys\/","pubDate":"Tue, 15 Sep 2015 18:30:30 +0000","guid":"https:\/\/ozkanpakdil.github.io\/posts\/my_collections\/2015\/2015-09-15-hp-pavilion-dv7-f-keys\/","description":"<p>I bought this laptop about 2 months ago. and I directly installed xubuntu. I was not aware but F keys stop working. one day I was looking a site and wanted to see the html dom details and hit the F12. and my wireless stop working. then I realized my function key is like pressed and my F keys was not working.<\/p>\n<p>I researched a lot but could not find anyway to fix this until roday :) you just need to disable it like this <a rel=\"nofollow\"  href=\"http:\/\/h30434.www3.hp.com\/t5\/Other-Notebook-PC-Questions\/How-to-unlock-the-fn-function-key\/td-p\/1050665\">link<\/a>\nsays<\/p>"},{"title":"About","link":"https:\/\/ozkanpakdil.github.io\/about\/","pubDate":"Mon, 01 Jan 0001 00:00:00 +0000","guid":"https:\/\/ozkanpakdil.github.io\/about\/","description":"Learn more about \u00d6zkan Pakdil, a software engineer with expertise in Java, C#, and Linux, sharing technology insights since 2004."},{"title":"Contact Us","link":"https:\/\/ozkanpakdil.github.io\/contact\/","pubDate":"Mon, 01 Jan 0001 00:00:00 +0000","guid":"https:\/\/ozkanpakdil.github.io\/contact\/","description":"Contact \u00d6zkan Pakdil"},{"title":"Disclaimer","link":"https:\/\/ozkanpakdil.github.io\/disclaimer\/","pubDate":"Mon, 01 Jan 0001 00:00:00 +0000","guid":"https:\/\/ozkanpakdil.github.io\/disclaimer\/","description":"Disclaimer for \u00d6zkan Pakdil&rsquo;s Blog"},{"title":"Privacy Policy","link":"https:\/\/ozkanpakdil.github.io\/privacy\/","pubDate":"Mon, 01 Jan 0001 00:00:00 +0000","guid":"https:\/\/ozkanpakdil.github.io\/privacy\/","description":"Privacy Policy for \u00d6zkan Pakdil&rsquo;s Blog"},{"title":"Terms and Conditions","link":"https:\/\/ozkanpakdil.github.io\/terms\/","pubDate":"Mon, 01 Jan 0001 00:00:00 +0000","guid":"https:\/\/ozkanpakdil.github.io\/terms\/","description":"Terms and Conditions for \u00d6zkan Pakdil&rsquo;s Blog"}]}}