RSSAmplifier

Blog

Fabian Kostadinov

fabian-kostadinov.github.ioRSS feed ↗58 posts

Latest posts

Nowhere Is Not Enough - Fractured Identity and the Proemial Relation as Channel

Nowhere Is Not Enough Fractured Identity and the Proemial Relation as Channel Abstract This paper argues that identity between two logical subjects — two contextures in Gotthard Günther’s sense — is not a binary fact but a dimensional structure, and that the dimensions of identity accessible between any two contextures are determined not by the contextures themselves but by the channel through…

Pointing, Oscillation, and the Fracture of Identity

There is a well-known photograph - or rather, a well-known kind of image - in which Stan Laurel and Oliver Hardy point at each other simultaneously. Each one points at the other. Neither points at himself. The image is funny, and also a little vertiginous, because it is not immediately clear who is accusing whom, or whether the gesture means anything at all when it is perfectly mutual. It is worth…

Macbook Pro for LLMs - Buyer's Guide in January 2024

Given my old Macbook Pro with an Intel i7 is ageing (and quite well, I might say) I was contemplating buying a new Macbook Pro with an M2 or M3 processor. Generally speaking my needs are: software development (e.g. Docker), video recording (e.g. OBS Studio) and light video editing, playing around with LLMs running locally mainly to learn and have fun, for more serious work I’d then switch to e.g.…

Generative AI-Augmented Program Execution

The use of Generative AI allows a completely new programming paradigm. I call this paradigm Generative AI-Augmented Program Execution (GAPE) . In very brief, GAPE is a programming approach that mixes regular software code with output from GenAI models. The idea is best illustrated with an example. Imagine you have a list of animals: [“horse”, “cat”, “whale”, “goldfish”, “bacteria”, “dove”]. You do…

Advanced Prompt Architectures - Querying and processing denormalized structured data

In the past I was focusing mentally a lot on how large language models (LLMs) allow new ways how to interact with text data. Recently, while talking to a colleague, it suddenly dawned on me that large language models actually also enable new ways how to “query” or “process” your structured tabular data. In this article I will compare four different approaches: Querying structured data via APIs.…

How I created a semantic Q&A bot for >13k recorded dreams using OpenAI, Langchain and Elasticsearch

I have been fascinated with dream interpretation for a long time. So, over the weekend I decided to create a database of >13k recorded dreams I scraped from the web. The database allows me to perform semantic searches rather than just plain-text searches, and beyond that it even allows GPT-enabled question answering. For example, I can ask the Q&A bot questions like: “Please search all dreams…

GPT Models as an Operating System / Communication Protocol for Autonomous Agents

While GPT models have been around for a few years, it was only after the arrival of OpenAI’s ChatGPT that they caught the wider attention of the public. Frantically, managers and IT specialists alike are searching for ways how they can make best use of this new technology. As usual, the first ideas will turn out to be not necessarily the most mature, and it will take some time until the full…

How to test Firestore security rules web v9 with Jest for your Angular app

Previously, I wrote why using Karma as a test runner to unit test your Firestore security rules for your Angular app is a bad idea . Let’s see then how you can use Jest in combination with Firebase Firestore emulators . I’ll be using Angular v14 , Firebase web v9 , the node package @firebase/rules-unit-testing v2.0.5 and Jest v29.3 . The setup Jest will be used as our unit testing framework and as…

Do not use Karma & Jasmine for unit testing Firestore Security Rules in your Angular app!

I’m writing an Angular 14 app with Google Firebase Firestore as a database. I assumed that developing the Firestore Security Rules with Firebase web v9 by writing Karma/Jasmine unit tests should be not too hard. After all, Karma is Angular 14’s default test runner, no? Turns out that using Karma to develop or test Firestore Security Rules is a bad idea. You should use Jest (or maybe Mocha)…

How I found and cashed in a bitcoin wallet from 2011

A few days ago I found a Bitcoin wallet.dat on a Macbook from 2011. Here is how I managed to cash in on it. A Bitcoin wallet from 2011… In 2011 my employer sent me and a co-worker to the Netherlands for two weeks to work on a research project. There, for the first time, someone told me about Bitcoin. While I found the ideas fascinating I could not make a lot of sense of it. And certainly there was…

Basics of vector algebra

Understanding vector algebra is a prerequisite to selecting meaningful distance metrics for text embeddings. For the fun of it, let’s recall some of the basics. Basics of vector algebra Let p and q be each a n-dimensional vector in a n-dimensional Euclidean space. Addition and subtraction of vectors Addition and subtraction of vectors of equal length is quite straight forward. Both operations…

Introduction to Lucene 7 OpenNLP - Part 4

I have written three blog posts about how to use Lucene 7 and OpenNLP to index part-of-speech tags and then use phrase queries to search on these tags. What I haven’t shown so far is what’s so cool about having such a capability. Imagine that you are building a search engine containing various articles. You are interested to know what nouns a particular indexed term is typically paired up with.…

Introduction to Lucene 7 OpenNLP - Part 3

Now that we can do searching on indexed part-of-speech tags what’s still missing is a way to introduce an order of search terms. Remember: All POS tags in our query are simply OR ed together. So, how an we achieve this? Fortunately, this time the answer comes easily. We can use PhraseQuery . According to the official docs a PhraseQuery is… A Query that matches documents containing a particular…

Introduction to Lucene 7 OpenNLP - Part 2

In my previous post I promised I’d describe how to perform searches on indexed part-of-speech data with Lucene 7 and OpenNLP. Let’s have a look. (Thanks to Koji on this one!) We have already seen how to create an index and then add some data. Directory index = new RAMDirectory (); OpenNLPAnalyzer analyzer = new OpenNLPAnalyzer (); IndexWriterConfig indexWriterConfig = new IndexWriterConfig (…

Introduction to Lucene 7 OpenNLP - Part 1

I’ve carried the idea to use OpenNLP to do part-of-speech tagging and index the POS tags with Lucene around with me for quite some time. Turns out Lucene 7 comes shipped with support for OpenNLP. Of course I had to try it out. Before starting, I highly recommend carefully reading through this official documentation of the Lucene analysis package:…

Rhizomes as transistors

There is a natural similarity between a rhizome’s relation and how modern transistors work. As it turns out, we could actually build a rhizome (with limitations) using transistors. Have a look at the following example. Every transistor consists of a collector, an emitter and a base. r2 <= (r3, r4): We will call relatum r3 the collector , and relatum r4 the emitter . Another relation’s emitter, r2,…

Yes, but I&#39;m a software engineer...

Being a software engineer is not an excuse to complain about your data science colleagues. You don’t have to become an expert in machine-learning or statistical analysis, but it’s actually a lot of fun to dive a little deeper into some of these topics and learn more about, let’s say, categorisation algorithms. And it even looks sexy in your CV. Just because Java is your first language does not…

Yes, but I&#39;m a data scientist...

Being a data scientist is no excuse for writing sloppy code. Yeah, I know that Java is not your first coding language, but you should really not write spaghetti code. Being a data scientist does not mean you don’t have to check in your code to Git. Oh, and this definitely also includes your iPython notebooks. Yes, that’s considered code too. There is no need to demonstrate your superior Python…

How to implement a text mining engine

There are various text mining libraries, packages and tools available, many of them as freeware. Yet, when it comes to putting it all together in an enterprise environment, there is actually not too much information available on the web. This article is about how I would design a general-purpose text mining engine that is fit for today’s standard Java-stack enterprise environment and the typical…

Reading from and writing to files in Apache Camel

I had assumed that reading from and writing to files in Apache Camel v2.16.1 should be a straight-forward thing to accomplish. Turns out I was wrong. It took me quite a while to figure out the correct syntax of the from and to commands. Reading a single text file Before we can use Apache Camel, we need to import it in our pom.xml Maven file: <dependency> <groupId> org.apache.camel </groupId>…

Temis Luxid 7.0.1 Skill Cartridge Development Cycle

Skill cartridges built with Luxid 7 usually contain a mix of customized and standard software artefacts. These artefacts can be data artefacts such as tailored vocabularies or taxonomies, syntactic or similar rules to extract certain types of entities, or they can be a set of configuration files that parameterize the skill cartridge at hand. For this reason, skill cartridges must be treated as…

Embedding R In A Website

I wanted to know whether/how it is possible to embed R in a website. Looking around the internet I found a few interesting initiatives, each one dedicated to a slightly different purpose: RStudio, Shiny, Jupyter Notebook, RApache, OpenCPU and RAppArmor. RStudio is probably very well known among R programmers. According to its website, RStudio is an integrated development environment. One of the…

Temis Luxid 7.0.1 Webstudio Tutorial

As I was not able to find any tutorials on the web on how to use Temis Luxid 7.0.1 Webstudio, I simply decided to write my own. Luxid Webstudio is a tool that is intended for different use cases. One thing it does very well is to assist a taxonomy expert to build a new taxonomy or enrich an existing one with new terms. Furthermore, once a taxonomy is created it can be “plugged in” to the STF skill…

Implementation of Rhizomes - Part 2

In my last post on the implementation of rhizomes I still suggested using hash maps to store pairings, that is relations. It was just recently that I recognized that there is of course an even simpler and more concise way of storing relations: as a single, long bit string, where a bit is set to 1 if a relation is established. Let us assume for the moment that we use the Cantor pairing function…

Principal Component Analysis in R

I wanted to know a little more on Principal Component Analysis (PCA) in R. For this purpose, I first created my own artificial dataset. I wanted to reuse the same dataset later on for performing also cluster analysis, so I put a little bit of thought in how to create it. This is the R code I used. Classes <- sample ( 1 : 3 , 100 , replace = TRUE ) createData <- function ( class , means1 , sd1 ,…

Four Questions To Ask During A Job Interview

During the last few months, I had several job interviews with different prospective employers. A few weeks ago a working colleague pointed me to four questions that I could ask my prospective employer that would tell me a lot about the working culture I’d join. As my experience with asking these questions was very positive, I thought I publish them here in my blog. To the best of my knowledge, the…

How I Created a Simple DBMS using GitHub, Jekyll, Prose and Heroku

Recently, I created a simple database management system including user rights management relying on GitHub, Jekyll, Prose, Heroku and a few other open source products. The basic idea is to store all data inside a _data directory in a GitHub repository. A user can access this data through a website (Prose) and manipulate it through a HTML form (JSONForm), but she needs to be authorized to do so…

Comparing ADF Test Functions in R

In one of my last posts I was not sure how R’s different ADF test functions worked in detail. So, based on this discussion thread I set up a simple test. I created four time series: flat0 : stationary with mean 0, flat20 : stationary with mean 20, trend0 : trend stationary with “trend mean” crossing through (0, 0) - i.e. without intercept, trend20 : trend stationary with “trend mean” crossing…

Cointegration and Total-Least-Squares Regression

I just stumbled over a very nice article authored by Paul Teetor on the use of total least-squares-regression in contrast to ordinary-least-squares regression for cointegration tests . This blog post also explains the same topic. Let’s quickly recall what we do when trying to find a working pairs trading strategy. First, we use one stock price time series to estimate another stock price time…

How To Find A GitHub Team ID

In an earlier post I explained how to install Jekyll-Auth . In GitHub, every team (and organization and user) receives a six to seven digits integer number as an ID like 1234567 . There are cases where you might need access to this information, for instance during the installation of Jekyll-Auth . Unfortunately, there is no easy way to find out a team’s ID. I could not find it anywhere published…

Evolving Trading Strategies With Genetic Programming - Punishing Complexity

Part 6 One of the most poorly understood and yet at the same time most important concepts of genetic programming (GP) is parsimony pressure . It has long ago been demonstrated that for every type of statistical time series a function can be invented that arbitrarily well matches the observed values in the given time frame if that function is just complex enough. Yet, such a function is effectively…

Reaktion auf die Verschw&ouml;rungstheoretiker im Falle Charlie Hebdos

Und erneut schreiben sie wieder - die Verschwörungstheoretiker. Diesmal im Falle Charlie Hebdos . Gar nicht tot, sei er, der erschossene Polizist. Als “Beweis” wird irgendein obskurer Videomitschnitt gezeigt. Es gibt viele Gründe, sich das nicht näher anzuschauen. Eine Reaktion - aus Empörung, man darf es sagen - hier trotzdem. Der Verschwörungstheoretiker ist eigentlich ein Anti-Aufklärer. An die…

Problems Using Syntax Highlighting with Pygments on Windows

I wanted to turn on code syntax highlighting using rouge for my blog by adding the following line to my _config.yml file. highlighter : rouge Whereas this worked perfectly on my local Windows machine, I ran into problems with Jekyll on GitHub. After searching for some time, I found this article from August 2014 where it stated: __Update: As of August 1, commiting a__ config.yml __that uses__ rouge…

Cointegration and the Role of the Intercept

Yesterday I wanted to find out whether a pair of stocks would be suitable for pair trading. There is a tutorial by Paul Teetor how to test a pair of securities for cointegration . Basically, we use an OLS linear regression model to estimate the absolute prices of one security with the other’s prices. If the residuals, i.e. the spreads, are stationary then we can conclude that both time series are…

Evolving Trading Strategies With Genetic Programming - Fitness Functions

Part 5 At the core of every genetic programming (GP) strategy is the fitness function . The fitness function specifies what the whole evolutionary process is looking for. Every individual is assigned a fitness value , which is computed by the fitness function. Individuals with a high fitness value stand a higher chance to be selected for reproduction and thus to create offspring. Finding a “good”…

Musings on Programming Paradigms

Yesterday I had to fill out a questionnaire on my programming skills as part of a job application procedure. I was asked to name some GoF and JEE patterns I am familiar with, so I pondered on what I had learned for a little while. One thing that somehow struck me as odd was the silent underlying assumption that a “good programmer” nowadays is actually supposed to be familiar with these patterns.…

Factor Analysis

There is a good series of “cowboy-style” youtube videos on factor analysis. Factor Analysis - An Introduction (Part 1): Factor Analysis - Assumptions (Part 2): Factor Analysis - Research Questions (Part 3): Factor Analysis - Using SPSS (Part 4): Factor Analysis - Interpreting the Readout (Part 5): Factor Analysis - Examining Factor Loadings (Part 6): As I am a fan of the R software (or R Studio ,…

Implementing a Fixed-Length FIFO Queue in Java

When working with time series data, one often needs to calculate sums of consecutive numbers for a predetermined time frame. Imagine for example calculating a moving average with a fixed size. Let’s look at a very simply time series. [0 |1 |2 |3 |4 |5 |6 |7 ] Assuming a moving average of length 4 results in the following array: [x |x |x |1.5|2.5|3.5|4.5|5.5] The formula for a moving average of…

Enova International Inc. - A Very Attractive Spin-Off Opportunity

Yesterday, my first article was accepted for publication on SeekingAlpha.com , which - I must admit - made me quite proud. Not only that, but the article even received an Editor’s Pick , which means that the editor(s) specially liked it. The article is about Enova International Inc. which just spun off from its parent Cash America Internatioal Inc. , and which I consider to be a great buy…

Installation of Jekyll-Auth

These are (hopefully) complete installation instructions for Jekyll-Auth. To understand how Jekyll-Auth works, you need a conceptual understanding on how Rack-Jekyll and Rack work. The next figure shows the conceptual workflow of Jekyll-Auth in combination with a repository on GitHub.com. This is how Jekyll-Auth works. On GitHub.com, there exists an organization foo-organization containing a team…

Error Correction Model

Here are two great introductory videos on error correction models. Part 1: Part 2:

Testing Time Series for Cointegration

Cointegration is an important concept when dealing with time series data. Here’s the corresponding definition on Wikipedia : Cointegration is a statistical property of time series variables. Two or more time series are cointegrated if they share a common stochastic drift. In other (rather non-scientific) words, if both time series are non-stationary and they share a trend together (which can be…

Evolving Trading Strategies With Genetic Programming - GP Parameters and Operators

Part 4 Genetic Programming at its core uses a set of operators (selection, mutation, crossover, elitism etc.) and parameters (number of generations, population size etc.). As there is a vast literature on this subject, I will skip the basics and assume that the reader is already familiar with the topic. The first thing to understand about GP parameters and operators is that they essentially make…

Significance Testing of Pearson Correlations in Excel

Yesterday, I wanted to calculate the significance of Pearson correlation coefficients between two series of data. I knew that I could use a Student’s t-test for this purpose, but I did not know how to do this in Excel 2013. And, to be honest, I did not really understand the documentation of Excel’s T.TEST formula. So, here is what I did. Pearson correlation coefficient First, I had to calculate…

Validation in JSONForm

Recently, I had created a user form with JSONForm . However, the form was embedded in another site with its own save button. JSONForm usually adds its own submit button to the site, but you easily can remove it . One of the problems left was how to trigger validation for the form manually once the site’s save button was clicked. Be aware that this implies triggering validation from outside the…

Evolving Trading Strategies With Genetic Programming - Data

Part 3 Genetic programming (GP) heavily relies on existing time series data. In this post I am going to look into different requirements and problems related to data. First, we need to get the data from somewhere. There are different commercial or free data providers. Here is a list of free data providers. Yahoo Finance : Provides historical daily open/high/low/close/volume (OHLCV) quotes for many…

Wordcloud of G. Deleuze&#39;s and F. Guattari&#39;s "A Thousand Plateaus"

This is a wordcloud of G. Deleuze’s and F. Guattari’s A Thousand Plateaus: Capitalism and Schizophrenia created with this nice tool . I removed all words with less than a hundred occurrences, some abbreviations and otherwise not very expressive words such as also , thus , and etc. This is where I borrowed the term rhizome from. Enjoy! By the way, I am definitely not sure if I would recommend the…

This Page Is Intentionally Left Blank

I am always subtly amused when opening a book and one of the first pages encountered states that this page is intentionally left blank . Because, of course, it isn’t. There’s a statement printed on it. The situation reminds me of a first-time meditator deliberately trying to empty his or her mind of all thoughts - because, that’s how meditation is supposed to work, isn’t it. At least according to…

Comparing Rhizomes to Other Technologies

At a first glance, rhizomes may have a lot in common with existing technologies. Yet, when taking a closer look, there are important differences, and it is not possible to simply reduce a rhizome to one or another existing technology. In this post I will quickly compare rhizomes to a variety of different mathematical and computational concepts and data structures. Binary Decision Diagrams Here is…

Storing HTML in a Rhizome

This post demonstrates how it is possible to use rhizomes to store simple HTML. Consider the following HTML. <html> <head></head> <body></body> </html> How could we store this in a rhizome? First of all, it would make sense to treat every HTML tag as an atomic symbol. There are three such symbols in the sample: html , head and body . Let us assume that, unless qualified otherwise, the direction of…