Comment Groups

Date Tags software

Sometimes normal leading comments just aren't enough, instead a visual method of grouping blocks of code together is needed. The following pattern seems to work very well:

<comment-symbol>{-- <group-text> --

Here is an example in C:

/*{-- Some grouped variables. --*/
/* Maintains foo-y stuff. */
int foo = 1;
/* Maintains bar-y stuff. */
int bar = 2;

Here is an example in Python:

#{-- Some cool code here. --
foo = 1
bar = 2

Multi-line example in JavaScript:

//{-- Big long explanation of a …
more ...

Doctrine Goals

This past weekend, I started a side project named Doctrine. It is a desktop application that simplifies viewing the rendered output of an AsciiDoc text file. A quick demo video is shown below:

The motivation behind Doctrine is to streamline the user experience when writing documents in plain text markup. Currently I am only focusing on AsciiDoc but compatibility with other formats (Markdown, ReStructuredText, etc) could be added in the future (integration with Pandoc is …

more ...

Hacking Together HTML With YAML And Mustache

Forewarning, this is a hack and an ugly one too. Without getting into the backstory, the idea was to see if it is possible to render YAML data to HTML using a Mustache template, all locally (i.e. no server, just a single local HTML file). Turns out it is possible... sort of.

Before getting to the code, a few notes:

  • This probably shouldn't be used for anything ever (although it was a fun experiment …
more ...

Thoughts On Script Naming

For a while now, I have had the mindset that any high-level operation related to a software project should be captured as an OS-native script kept either in the repo's root directory or an appropriate subdirectory. For example, the following scripts are located in the root directory of my blog repo:

  • _Build_HTML.bat
  • _Cleanup.bat
  • _Deploy_SSH.bat
  • _Run_Test_Server.bat

A few things worth noting about the filenames alone:

  • The scripts are Windows-native batch files since …
more ...

C Polymorphism

Date Tags c

Polymorphism, when done right, is a powerful method of simplifying software implementation. There are multiple types of polymorphism, here is a simple example of runtime (aka dynamic) polymorphism in C:

#include <stdio.h>
#include <stdlib.h>

typedef struct animal_s {
    void (*speak)(void);
} animal_t;

void speak_like_a_duck(void)

void speak_like_a_dog(void)

animal_t *create_duck(void)
    animal_t *duck = malloc(sizeof(animal_t));
    duck->speak = &speak_like_a_duck;

animal_t *create_dog(void)
    animal_t *dog …
more ...

C Moving Average

Date Tags c

Moving averages are useful since they do not require a buffer of samples to be maintained. Here is a simple implementation in C:

#include <stdio.h>

float ave(float num)
    static float fAve = 0.0f;
    static unsigned int fSmp = 0;
    float weight = 0.0f;

    weight = 1.0f / fSmp;
    fAve = (weight * num) + ((1 - weight) * fAve);


int main(int argc, const char *argv[])
    char str[100] = {0};
    float num = 0;

    /* Run until user enters …
more ...

Python Geometric Mean

Date Tags python

Need to calculate a geometric mean in Python? You could use Numpy or this one-liner:

# NOTE: This import is only needed for Python3.
from functools import reduce

# Geometric mean of list `n`:
geomean = lambda n: reduce(lambda x,y: x*y, n) ** (1.0 / len(n))

# Result: 2.2133638394
more ...

Hi, I am Jeff Rimko!
A computer engineer and software developer in the greater Pittsburgh, Pennsylvania area.