The Complexity We Choose
AI can help us write more software, but our real opportunity is to make software simpler to understand, verify, and own.
Frazik blog
Exploring the world through technology.
AI can help us write more software, but our real opportunity is to make software simpler to understand, verify, and own.
A concise comparison of Microsoft Amplifier and Anthropic's Claude Code, and how Microsoft's new Agent Framework complements both for production agent development.
An introduction to key techniques for optimizing Large Language Models (LLMs), including Retrieval-Augmented Generation (RAG), Chaining Transformers, Prompt Engineering, and Transfer Learning and Fine-tuning.
A guide on how to set up access to Amazon OpenSearch Service Kibana using an Nginx reverse proxy, provisioned with Ansible. This includes defining inventory, creating a main playbook, and configuring Nginx for basic proxying.
A Terraform example demonstrating how to create a serverless React application using AWS API Gateway to invoke an AWS Lambda function, including CORS configuration.
This post explains how to leverage a single AWS Application Load Balancer for multiple Amazon ECS services using a combination of host- and path-based routing rules, enhancing efficiency and reducing costs.
A guide on exporting React.js components to PDF using html2canvas to create canvas objects and pdfMake to generate the PDF document.
An analysis using web crawling and NLP techniques on Slovak job ads to determine the most in-demand and highest-paying programming languages in the local job market.
An overview of Serverless Architectures, a modern approach to application design. This post covers what serverless is, its key characteristics, and a balanced look at its upsides and downsides.
Common errors encountered when executing contract functions from Truffle scripts and how to resolve them.
A guide to troubleshoot and resolve common TypeError issues, specifically 'Cannot read property 'apply' of undefined', when executing external scripts with Truffle.
An introduction to smart contracts, their history, how they work, and their execution on the Ethereum blockchain using Solidity and Web3.
This post delves into Java memory management, common types of OutOfMemoryError, and demonstrates how to create various memory leaks like byte, list, map key, and class leaks with practical examples.
An overview of the Java 8 Stream API, covering its definition, core characteristics like pipelining and internal iteration, and the distinction between intermediate and terminal operations, alongside its benefits for collection processing.
An introduction to JavaScript Promises, explaining their purpose in handling asynchronous operations, addressing callback hell, and demonstrating a basic implementation.
An introduction to the SOLID principles of object-oriented design, outlining what the acronym stands for and common pitfalls to avoid.
An introduction to Java profiling, covering common performance issues and essential built-in JDK tools like jmap, jstack, jconsole, and VisualVM, along with mentions of specialized profilers.
This post explores refactoring complex conditional statements (like switch or if-else ladders) into a more maintainable and object-oriented polymorphic design, demonstrating how it enhances code readability and extensibility.
An in-depth look at how Java implements generics through type erasure, including the steps involved, its compile-time nature, and the role of synthetic bridge methods in preserving polymorphism, illustrated with code examples.
An explanation and example of Groovy's memoize() method for caching closure results to improve performance, particularly in computationally intensive or recursive scenarios.
A quick tip demonstrating how to use the Grails `dataBind` command outside of a Grails controller, for instance, in a service layer.
A guide to implementing a basic remote logger for Android applications, allowing logs to be sent from the device to a backend server for centralized monitoring.
Learn how to store and access your Android application context globally using a static field in your custom Application class, reducing the need to pass it around.
Learn how to integrate Google Analytics into your Android application more cleanly using ActivityLifecycleCallbacks instead of manual onStart and onStop calls in every Activity.
Explore a custom implementation of a blocking queue in Java, complete with worker threads and the 'poison pill' termination technique. This article demonstrates fundamental concurrency concepts and serves as a learning exercise compared to using Java's built-in `BlockingQueue`.
A guide on how to pass array instances directly to methods in Java, and a technique using anonymous inner classes with instance initialization for collections.
Explore two common methods for creating new threads in Java: implementing the Runnable interface or extending the Thread class and overriding its run() method.
A recommendation for the book 'Refactoring: Improving the Design of Existing Code', highlighting its value for developers looking to enhance their coding skills.
Insights from computing pioneers Ward Cunningham on Agile and knowledge sharing, and Barbara Liskov on the Liskov substitution principle and distributed systems, through their QCon interviews.
Explore the Builder Pattern as an elegant solution for handling a large number of optional parameters in constructors, addressing limitations of telescopic constructors and JavaBeans.
An explanation of the Visitor design pattern, demonstrating how to define new operations on objects without modifying their classes, using a Java example with vehicle fuel efficiency calculations.
An explanation of Google App Engine's push technology using long polling, detailing client-server communication channels, an example application, and code snippets for client-side JavaScript and server-side Java implementation.
An explanation of the Facade Pattern, a structural design pattern that simplifies complexity and decouples code, along with a detailed look at the Session Facade, which encapsulates client-server interactions.
Explore the concept of ThreadLocal in Java, its unique scope, global access within a thread, and common use cases in web applications and as an alternative to object pools.
An overview of different reference types in Java, including strong, weak, and soft references, explaining their behavior with the garbage collector and common use cases like caching.
An introduction to the Command pattern, including its definition, use cases, and an example demonstrating complete decoupling between sender and receiver.
Learn how to revert a Subversion (SVN) repository to a previous revision or undo specific changes using the reverse merge command.
A quick guide on how to use the ROME library in Java to easily fetch and parse RSS feeds, including a practical code example.
An exploration of Douglas Crockford's influence on the JavaScript community, the language's unexpected rise beyond browser confines, and his insights on functional programming and avoiding classical methodologies.
An exploration of the Koch snowflake fractal, demonstrating its recursive implementation through an animation using HTML5 Canvas and JavaScript.
Exploring various concurrent programming strategies in Java, including single-threaded, simple multi-threaded, thread pooling, and the Future and Callable mechanisms, along with a performance comparison.
A quick guide to finding a useful tutorial on integrating Apache Solr with Apache Nutch, pointing to the official Nutch wiki.
An alpha version of a JDeveloper extension that automatically generates the view part of an ADF Fusion Web Application from its model, including installation instructions and usage examples.
This post details how to perform unit testing for controllers in Grails using ControllerUnitTestCase, including examples for mocking services.
A reflection on the importance of clean code, inspired by 'Clean Code - A Handbook of Agile Software Craftsmanship', emphasizing clarity and professionalism in programming.
This post explores key differences between Groovy and Java, focusing on Groovy's closures and its dynamic programming capabilities, with practical code examples.
A working snippet for uploading files in Grails, including controller logic and GSP form example.
An introduction to the Groovy programming language, covering its core concepts, fundamental differences from Java, productivity features, operators, data types, collections, and regular expression support.
An introduction to Scheme, highlighting its benefits for understanding JavaScript, its core functional programming concepts, and basic syntax with illustrative examples.
Learn how to pass structured data, including multiple rows and columns, from Java to Oracle PL/SQL stored procedures using Oracle-specific ARRAY and STRUCT objects.
An explanation of the Decorator design pattern in Java, including its definition, implementation examples, and a demonstration of how it adds functionality to objects dynamically.
An introduction to a JDeveloper plugin for generating Oracle ADF view controller projects from a model project, emphasizing its benefits for prototyping and customization over existing tools like Oracle HeadStart.
A tutorial on developing a 2D Android game similar to Hexxagon, covering game rules, class design, UI, and animation using Java 2D interfaces.
A guide to using XPath for XML document parsing and querying in Java, with practical code examples.
A simple and descriptive example of performing Saxon XSLT transformations using Java, including a code snippet and setup instructions.
Tips to improve JDeveloper performance, focusing on memory management, component binding, and page complexity.
An introduction to PL/SQL cursors, differentiating between implicit and explicit cursors, their usage, and best practices with code examples.
PL/SQL packages for automating Excel and Word document creation and manipulation within Oracle Forms 10g applications using WEBUTIL and OLE2.
An in-depth look at the Model-View-Controller (MVC) architectural pattern, its core components, application in web development, particularly with JSP and Servlets, and a discussion on related frameworks.
This post explores how to integrate the jQuery JavaScript library with Oracle ADF Faces applications, providing steps for including jQuery globally or on specific pages, and tips for locating ADF components.
This tutorial covers jQuery animation methods, from basic show/hide effects to complex custom animations using the animate() method, including practical examples and code snippets.
This article provides a simple guide for writing jQuery plugins, covering best practices such as naming conventions, handling the $ alias, complex parameter lists, and wrapper methods.
An introduction to XSLT for XML document transformation, covering core concepts, functional programming influences, and a practical example of transforming weather XML into HTML.
A guide to using recursion in XSLT for XML document processing, covering templates, XPath, and an example of transforming F1 season data.
A comprehensive guide to AJAX, comparing plain JavaScript with jQuery, and demonstrating how to use jQuery's powerful load() method for dynamic content updates. Includes cross-browser XMLHttpRequest handling, jQuery load() examples, and best practices for GET vs. POST requests.
This post explains how to convert Java Collections to typed arrays using the Collection.toArray(T[] a) method, avoiding explicit casting.
Learn how to dynamically load JavaScript files using jQuery's $.getScript() function, including practical examples.
Learn how to track and monitor SQL queries executed by View Objects in ADF applications by overriding the executeQueryForCollection method and extracting parameter values.
Exploring Niklaus Wirth's profound insights on programming languages, the hardware-software gap, program verification, and his critiques of modern software development practices.
An introduction to creational design patterns, focusing on the Factory Method and Abstract Factory patterns, with Java examples and a comparison of their usage.
An introduction to the core concepts of the Spring framework, focusing on how to wire and instantiate Java POJO (Plain Old Java Object) beans using XML configuration, demonstrated with a practical Employee-Department system example.
This post describes how to dynamically modify the SQL WHERE clause in an ADF View Object by overriding the `buildWhereClause` method, which is particularly useful for optimizing queries without creating new database indexes.
This post demonstrates how to create a custom read-only view object in Oracle ADF JDeveloper, leveraging an Oracle REF CURSOR as an alternative data source. It covers initial JDeveloper setup, database package creation, and customizing the View Object implementation class.
An introduction to XPath, explaining how to navigate and query XML documents using path expressions, predicates, and relative node selections.
An introduction to the Template Method design pattern in Java, illustrating its use for controlling algorithm flow with abstract superclasses and concrete subclasses, including an example for JSON and XML object creation.
An introduction to the Template Method design pattern in Java, illustrating its use for controlling algorithm flow with abstract superclasses and concrete subclasses, including an example for JSON and XML object creation.
A comparison of the Strategy pattern with the Template Method pattern in Java, showing differences and providing a code example.
Learn how to create and use custom events in jQuery to simulate the observer pattern and build dynamic web applications.
Exploring PL/SQL's ANY types for handling data of unknown type at runtime.
Learn how to use PL/SQL collections to combine master and detail tables in a single SELECT statement, reducing database round trips and improving performance.
Understanding closures in JavaScript, a powerful concept for handling asynchronous callbacks.
A deep dive into JavaScript callbacks and function context, exploring how `this` works and how to manage function contexts using `call()`
Demonstrates how to store collections in database columns using Oracle's VARRAY.
Exploring the deeper concepts of JavaScript functions, including their object nature and first-class status.
An introduction to objects in JavaScript, including object creation, properties, JSON notation, and the window object.
A detailed explanation of associative arrays, nested tables, and VARRAYs in PL/SQL, including examples and best practices.
Optimize PL/SQL performance by caching static data in a collection stored in the session's PGA.