Hello, I use this site to post about things I find interesting, with a focus on original content not just memes. If for, some reason, you want to be notified when I post new things, use the RSS feed.

Alternatively, just pick a post and start reading.

Recent posts:

The physics of (airplane) flight

A common misconception about wings is that they need to have the classic airfoil shape to work. In reality, just about any surface can create lift and function as a wing. You can see this your by swinging a square of cardboard, foam sheet or any other light, large and flat object through the air. If the surface is angled upwards a few degrees relative to the incoming air, it pushes the air down, and itself up.

Long range links with tiny radio modules

WiFi and Bluetooth capable microcontrollers are very popular for hobby projects, but at the best of times offer a range of around a hundred meters. Indoors, with with walls and other obstacles, the usable range is often less then 20 meters. A radio using a much lower data rate and frequency can achieve many kilometers of range1. The low data rate allows even a very weak signal to be received, and lower frequencies are much better at going through walls, trees and other objects. (Wireless communication and power) (Computer programming)

Generating a spectrum from the PIN diode X-ray detector.

The pulse shaping amplifier outputs short pulses with around 10 mV/keV: .2 ms/50 mV per division These pulses have a similar amplitude to audio from a microphone preamp, so they can be digitized by feeding them into a computer’s soundcard. If the computer has dedicated audio input, connect the circuit as the headset microphone using a TRRS plug. Generally, the sleeve is ground, and the ring next to it is the microphone signal. (Electronics) (Ionizing radiation)

Cleaning up the signal from the PIN X-ray detector

Yesterday, we demonstrated detecting soft X-rays using a BPW-34 PIN photodiode, and a charge sensitive preamplifier. Unlike a conventional G-M tube, the photodiode can measure the energy/wavelength of X-ray photons, which is characteristic of the source. However, the raw output from the preamplifier is not very usable; It is very weak, noisy and the pulses have long tails: 10 keV X-ray. 1 mV/1 ms per division. (It’s hidden by an aggressive bandwith limit, but there is 2 mV RMS noise here. (Electronics) (Ionizing radiation)

(Ab)using PIN photodiodes as soft X-ray detectors

PIN photodiodes are diodes with a thick undopped/intrinsic layer between the P and N-type regions. This layer is typically around .1 mm, creating a similarly thick depletion layer. When light shines into the depletion layer it liberates electron-hole pairs, which, if reverse biased drift into the dopped regions, allowing a small current to flow. X-rays: An X-ray photon1 can also knock an electron free, but the excess energy causes it fly trough the semiconductor, knocking more electrons free: (Electronics) (Ionizing radiation)

Counting with neon

Neon lamps have a unusual property; When the striking voltage, typically around 90 volts, is applied, the neon inside ionizes and begins to conduct, creating a nice orange glow. Once ionized, a lower voltage is required to keep the neon glowing, typically around 60% of the striking voltage, the maintaining voltage. This is why they always need a series resistor, to prevent them from drawing a huge amount of current once they light. (Electronics)

How semiconductors actually work.

In an atom, most electrons sit deep inside, but some, the valence electrons (up to 18) are on the outermost shell and able to interact with the world. These are the electrons that form bonds with other atoms, interact with light and do other intresting things. However, in most materials, these electrons are still bound to their respective atoms and molecules. While it is possible to get these electrons moving, this requires so much force it often destroys the material (and starts a fire). (Electronics)

The Principle of Error Correction

This article is not about any particular method of error correction, but about the general and rather simple principle that underlies all of them. The goal of error correction is to convey information as reliably as possible over a noisy communication channel using fixed power and time. To make this more concrete, I will try to send a 10 bit message over a (simulated) pair of wires. The simplest scheme is to send 1 bit per second, a one as 1 volt, and a zero as -1 volts. (Wireless communication and power)

The (Cooley–Tukey) Fast Fourier Transform

The discrete Fourier transform breaks down a signal represented as a list of samples into its constituent frequencies. That is, it converts the signal to a sum of sine and cosine waves. It helps to use complex numbers, which for this purpose are just points in 2d space. Multiplying one complex number by another is the same as rotating one point the angle of another. For this, Euler’s formula, e**(i*θ) = cos(θ) + i*sin(θ), comes in handy as an easy way to create complex numbers along a unit circle at a given angle. (Computer programming)

Testing PCB ground plane myths

Basically everyone agrees that a ground plane provides a low inductance and low resistance return path for current, and prevents crosstalk/coupling between traces. A ground plane does this by providing a return path1 for current that is physically close to the trace. Inductance and inductive coupling depend of the area of the loop formed, which minimized by a ground plane. With capacitive coupling, the ground plane “shorts” the electric field between traces, minimizing mutual capacitance. (Electronics)

Magically slowing down signals with sampling.

Mixers are the classic way to convert a signal to a lower frequency so it can be processed or measured easier. But mixing only works on narrowband signals, ones that are very nearly a sine wave. Sampling can slow down any repeating signal, including square waves and narrow pulses. The trick is to measure the voltage at a slightly lower frequency then the signal’s repetition rate, and hold that voltage until the next measurement. (Electronics)

Making logic gates with "transformers"

The normal way to get an LC tank circuit to oscillate is by using an amplifier to apply positive feedback. However, it can also oscillate if the inductance or capacitance is changed at twice the resonant frequency (parametric oscillation). 1 (This is going somewhere, I promise) The capacitance can be changed using a varactor diode, but, more exotically the inductance can be changed by driving the core into saturation with another winding: (Electronics)

One bit computer: Improving code density by redesigning JMP

A big problem with the one bit computer architecture is its very low code density. It takes 2 instructions just to copy a bit, copying a byte takes 16, and 2 bytes 32 instructions. At two bytes per instructions, that’s 64 bytes of code to copy 16 bits! If you want to loop to avoid repeating code, the jump destination register (16 bits) has to be set, which itself takes 17 instructions. (One bit computer)

One bit computer: transistor level register design

Previously, I looked at gate level register designs, but now I need a transistor level design: The loop of NOT gates made from transistors looks like this: Adding inputs inputs is easier then with logic gates, simply add another transistor to pull the output of a gate low: To ensure things happen at the right time, the latch needs an enable input. The simplest way to add this is by connecting/disconnecting the ground to the transistors on the input. (One bit computer)

One bit computer: 4 to 16 instruction decoder

The first thing the computer has to with an instruction is to figure out what instruction it is. This is done using a fairly standard decoder (in the red box): A NOR gate only outputs a 1 if all of the inputs, in this case, bits of the instruction are 0. If a bit of the instruction is inverted before the NOR gate, that bit will have to be a 1 for the output to be a 1. (One bit computer)

CDMA, or how to multiplex without multiplexing

There are a lot of cases where multiple devices have to communicate simultaneously over a single radio channel, or wire. Examples include mobile networks, 2 way radios, satellite communications and local area networking. The simplest solution is to have the devices take turns, also known as TDMA (Time Division Multiple Access), but this requires precise synchronization. Another is using a different carrier frequency for the device, effectively splitting the channel into many subchannels. (Wireless communication and power)

One bit computer: Instruction set tweaks

I have decided to make a few small changes to the instruction set, to make things more usable. The first change is to make the SKZ instruction use the data bus, not the accumulator1. This makes it much more versatile, because it can be used in the middle of a computation, without modifying the accumulator. As the accumulator is memory mapped, the old behavior can still be achieved. Another change is with the NOP instruction, becuase it is not used for instruction skipping, it can be used for something else. (One bit computer)

Building logic gates

This is a gate level diagram of the one bit CPU: Not much is new here, it has an ALU, a few registers, a fairly standard decoder and some OR gates to drive the ALU. Together they implement all 16 of the instructions from the first post: Opcode Name Function 0000 0 NOP Does nothing 0001 1 LD Load the bus into the accumulator 0010 2 LDC Load the complement of the bus into the accumulator 0011 3 STO Writes the accumulator on the the bus 0100 4 STOC Writes the complement of the accumulator on the bus 0101 5 OEN Loads the OEN register from the bus 0110 6 ADD Adds the accumulator to the bus, using the carry register to store the carry 0111 7 XNOR XNORs the accumulator with the bus 1000 8 XOR XORs the accumulator with the bus 1001 9 AND ANDs the accumulator with the bus 1010 A OR ORs the accumulator with the bus 1011 B ONE Forces a one into the accumulator and a zero into the carry 1100 C TWO Forces a zero into the accumulator and a one into the carry 1101 D JMP Strobes the jump flag 1110 E SKZ Skips the next instruction of the accumulator is zero 1111 F RET Skips the next instruction and strobes the return flag The diagram is drawn with logic gates, describing abstract logic, like “The output should be true if and only if all of the inputs are true”. (One bit computer)

Block diagram and control logic requirements

One-bit CPU block diagram, does not include program ROM, addressing, memory, or IO: Unlike many other simple computers, the data bus (the thick bidirectional arrow, in reality just a long wire) is only used for interacting with memory and IO. This has the advantage that almost everything can happen at the same time, allowing all instructions to be executed in just one clock cycle, removing the need for microcode or complex sequencing logic. (One bit computer)

One bit computer: designing a register

Two NOT gates wired into a loop have a rather interesting property: They have 2 distinct stable states: This is of limited utility, because there is no way to switch between the two states. This can be fixed by replacing the not gates with NAND1 gates, if an input is high, it behaves like a NOT gate, but if an input is low, the output is forced high: This circuit stores 1 bit of information, it remembers which input was last pulled low. (One bit computer)

One bit computer: Addressing considerations

I handwaved addressing in the first post, but it is very important, and will have a huge impact on how usable the final computer is. Because the opcodes contain no addressing information, addressing must be done with extra bits in the instruction1. The simplest option is direct addressing, where the extra bits directly control the address. For example, a 12 bit instruction can be spit into a 4-bit opcode and a 8-bit address, providing 256 bits (32 bytes) of address space: (One bit computer)

One bit computer: ALU design

The one bit computer’s ALU will have to perform a quite a few different operations: Addition Loading into the accumulator Loading the complement into the accumulator Logical AND Logical OR Logical XOR Logical XNOR Forcing a 1 Forcing a 2. It turns out most of these operations can be implemented using a very simple circuit: A 4 to 1 multiplexer (One can be constructed with just 8 transistors). (One bit computer)

Designing a Discrete Transistor Computer

Computers are ubiquitous, but nearly all computers are literal black boxes: integrated circuits. Sure, in older, larger computers you might be able to see the data being transferred in and out of memory with a few LEDs, but the data still disappears into an black box: the CPU. Even if you decap an old CPU like the Z80 or MOS 6502, all you can see is a static view of the transistors, you can’t see the computer actually computing. (One bit computer)

Modulating and amplifying signals with (electro)magnets.

This is a functional AM modulator (and with the help of a rectifier, an amplifier) built entirely out of transformers and inductors: (It does not look like there is gain here, because of the different impedance’s, but this does actually produce a stronger output signal than the modulating input.) How is this possible without any transistors, vacuum tubes, or even diodes? Ferrite and iron cored inductors and transformers exhibit core saturation, where once a certain amount of magnetic field is flowing through the core, it becomes much harder to pass more through it. (magnetics)

A simple wireless power demonstration circuit

The core principal behind most wireless power systems is electromagnetic induction, where current flowing through a coil generates a magnetic field, and a magnetic field generates current in a coil. Induction can be used to transfer power wirelessly by placing 2 coils next to each other; When alternating current is applied to one coil, it creates an alternating magnetic field, some of which then passes through the other coil, creating an electrical current in the coil: (Electronics) (Wireless communication and power)

How helpful languages create bugs.

A key part of programming is that you will spend more time looking at you code then the compiler. While of course it is important for the computer to be able to figure out what to do, it is equally important for you to be able to tell what the computer is doing. Take this function in C: float foo(float a, float b) { return a+b; } Looking at this, you can immediately know what the computer will do when this function is called: It will add two floating point numbers together and return the result (Computer programming)

Making a 3d renderer from scratch [part 3]

Currently the render works quite nicely, but calling it 3d is a bit of a stretch. While does provide a first person viewpoint, the entire map is a the same height. Games with this limitation were, like Wolfenstein 3D, were released and did quite well, but modern audiences want a bit more 3d in their 3d. The one thing that could really sell this as a 3d renderer would be allowing different wall and ceiling heights, where each room can have different floors and ceiling heights. (Computer programming) (3d)

Making a 3d render from scratch (part 2)

The last renderer worked fine but had 2 major problems, the most apparent is that it can only handle convex geometry, in other works, no walls can overlap on screen. Another problem is performance, it draws every single wall, regardless of if it is visible or not, resulting in a lot of wasted work (overdraw). A simple way to solve both at the same time is using portal rendering. The map is split up into convex sections (I call these rooms), which can be rendered as is, rooms can have also portals that link to another section. (Computer programming) (3d)

Making a 3d render from scratch [part 1]

This series will go over the functioning of a simple Doom style 3d software renderer intended for a first person game. A renderer needs something to actually render, lets start by placing a wall in the game world, representing it as 2 points in 2d space. (don’t worry, it will be 3d soon.) If this is just drawn as a line on screen, the result looks like this: Triple A graphics right? (Computer programming) (3d)

Debug crash that doesn't happen under a debugger

There are many cases where a program crashes in a hard to reproduce way. For example using debugger like gdb can change the layout in memory, or change the timing of a race condition. Under Linux, there is a super simple, but somewhat little known way to debug the program in this case, coredumps. A coredump stores the state of a program at the moment it crashed: memory, registers, everything.

From 1 fps to 500 fps, optimizing the physics engine

The simple physics engine works fine, but is quite slow, only able to handle at most 1000 particles in real time, and enabling compiler optimizations doesn’t do much to improve this. The slowest part of it is collision checking, which is quite slow becuase a check is being run between every pair of particles. This is not only slow, but gets slower very fast as more particles are added, proportional to the amount of particles squared.

Making a super simple physics engine from scratch

It is very easy to create a simple physics engine that works decently well with very little code. I wont be covering rendering, but it is fairly straightforward. (Code snippets will be in C, but this technique will work in any language). The trick is to use Verlet integration, a mathematical trick to integrate (compute a solution to) Newton’s laws of motion. Verlet integration comes down to this equation: $$ x_{n+1} = 2x_{n} - x_{n-1} + a \Delta t^2 $$

A super simple directional microwave antenna

Variations of the “Cantenna” project have been floating around on the internet for a long time (mostly intended for 2.4 GHz WiFi). However, despite the abundance of calculator tools, there is a lot of conflicting information and very little in the way of explanations. I will try to explain how they work, the math for designing one, and provide measurements for 2.4 GHz WiFi 5 GHz WiFi, and a correct calculator tool. (Wireless communication and power)

How not to (securely) delete a file

So, you have a file, that you don’t want anymore. Everyone knows that moving it to the trash won’t permanently delete it, but what about the permanent delete option? While it might seem like the file is gone for good, it still remains on the drive, you just can’t find it (data recovery and forensics tools can however). To test this, first create a small file: DISCLAIMER: These instructions work on linux and possibly other Unix like OS’s like BSD or MacOS.

Using a neon bulb as a light sensor (and other fun configurations)

Neon lamps, small gas discharge tubes used as indicator lights, have fairly interesting electrical properties. Until a certain voltage is reached, the striking voltage (around 90 V for most), the lamp conducts nearly no current. Once the striking voltage is reached, the gas inside the lamp ionizes, allowing current to flow much easier. Current flows so easily, that if maintained at the striking voltage, the lamp would ark over and quickly overheat. (Electronics)

Exploring stable diffusion guidance.

The guidance scale parameter controls how strongly the generation process is guided towards the prompt. A value of 0 is equivalent to no guidance, and the image is completely unrelated to the prompt (it can however, still be an interesting image). Increasing the guidance scale increases how closely the image resembles the prompt, but reduces consistency and tends to lead to an overstaturated and oversharpened image. The noise predictor (unet) excepts a prompt, and it will generate images similar to that prompt (this is known as conditioning). (stable-diffusion)

Detecting text produced by an LLM

LLM’s (large language models) can generate very convincing text, but this text can easily be detected using a not quite so large language model. The easiest way to do this is by looking at the perplexity of the text. This is a number that expresses how good a model (like GPT2) is at predicting a given sample of text. Perplexity is mostly used for measuring how good LLM’s are, but LLM generated texts have a consistently lower perplexity (easier to predict) than text written by a human. (AI, ML and if statements )

Exploring NFC communications with a crystal radio.

NFC smart cards are commonly used for a wide variety of applications including contactless payments, building access control, and 2 factor authentication. These smart cards have no power source, yet are capable of bidirectional communication, storing data, and performing cryptographic operations. In each of these cards is a circuit straight out of the 1900s: The crystal radio. Most of the card is taken up by a flat coil, which can often be seen if the card is held up to a bright light. (nfc) (Wireless communication and power)

Image classification, on the MNIST dataset [ML4]

A common example of a problem that can be solved using ML, but is difficult otherwise is handwriting recognition. But before we can try, we first need to find a dataset, I will be using the MNIST dataset, containing 28x28 images of handwritten digits. The torchvision package provides an easy way to get it, but it must first be installed with pip: pip install torchvision Now MNIST can trivially be downloaded and loaded, but we need to convert it to an torch tensor from a PIL image. (AI, ML and if statements )

Going faster with pytorch [ML part 3]

The last post’s automatic differentiation engine was nice, but very slow, even by python standards. Even without this, python is quite a slow language, and usefully neural networks can get very big. The library pytorch provides a highly optimized (in C) and highly generic library of common tasks for ML. Installing it is very easy. (I would recommend using your system package manager on linux) pip install torch Because iteration in python is slow, torch provides vector (“tensors”) types, that allow working with many values at a time, similar to numpy ndarrays. (AI, ML and if statements )

Exploring step counts in stable diffusion.

TLDR: The step count has very litle effect on image content, and increasing it has rapidly deminishing returns over 20 steps. A lot of people run stable diffusion with very high step counts, like 100 or 200, but is this neccicary to produce good images? No. Here a a bunch of images generated with stable diffusion (K-LMS scheduler), with the same seed and prompt, with different step counts: Prompt 5 steps 10 steps 20 steps 40 steps 80 steps 160 steps A fantasy landscape. (AI, ML and if statements ) (stable-diffusion)

Deep learning, or going beyond linear regression [ML2]

Machine learning using a linear regression model is very simple, but rather underwhelming, as the results are always linear functions. Deep learning allows much more complex models to be created, without adding too much more complexity. This is done by creating a stack of layers, Each one with a series of neurons linearly determined from connected outputs on the previous layer. Each connection has a weight, a coefficient controlling the strength and direction of the connection, and each neuron has a bias value controlling the “default” value for the neuron. (AI, ML and if statements )

What is machine learning anyway? [ML1]

Machine learning (ML) and Artificial intelligence (AI) are some of the most common buzzwords on the internet right now. Almost every day some new company promises seemingly impossible feats of automation using ML, AI and deep learning, and they sometimes deliver. But before diving deeper, we need to define AI and ML. AI vs ML You will often here AI and ML used interchangeably, but they actually mean quite different things. (AI, ML and if statements )

Why does Chat-GPT Lie?

LLM’s (Large Language Models) like Chat-GPT are able to hold extended conversations with humans or generate relatively long runs of text (a few paragraphs), however despite sounding authoritative, they consistently create large amounts of fluent bullshit. The reason for this is that Chat-GPT is not some new magical sentient AI that has access to all the knowledge on the internet. It is simply a language model, tasked predict text: The quick red fox jumped over the [BLANK] It produces a prediction of the most likely words to follow a string of text. (AI, ML and if statements )

Making outlines with Blender

If you want your renderings to look like drawings, the single most important thing is to add outlines. Even on semi-realistic renderings, outlining can improve clarity. The difference outlines can make. (slightly modified blender example) Inverted Hull Hull shading involves rendering a slightly larger version of the object, the hull, inside out, and in a different color (usually black). Because the vertex order is inverted, backface culling causes only the parts of the hull behind the object to be rendered.

Please don't contribute anything of value on web forums

Nothing of value should solely be posted on web forums like Reddit, HN, Facebook, Discord, Slashdot, Instagram or any similar site. Web forums typical have short lifespans, few have lasted longer than 10 years. Popularity is also no guarantee of continued service, hundreds of well known and used services have been shut down by large companies like google, with all data lost. TLDR: Web forums are short lived with no backups or archives available, they have complete control over your content and your readers.

Improved micro FM transmitters

Here are the full schematics for a (slightly improved) FM bug and beacon with a class-C output stage described in the last post. Bug: Beacon: The improvements consist of 2 modified resistor values, the emitter resistor on the oscillator stage (Not much power is needed for the output stage), and the bias resistor for the amplifier. Together these changes allow the device to run 1.5x as long with almost no effect on output power, and run down to 2V with a reduced output. (Wireless communication and power)

Fun with tiny FM transmitters

It is surprisingly easy to make a working FM transmitter with just one transistor and a handful of passive components. This circuit runs best off single 9 volt battery (or another power source with the same voltage), but can function as low as 3v at the cost of output power and range. The coil should be 6 turns of insulated solid core hook up wire wrapped around a 3mm form (Thinner wire works but allows vibrations to effect it), and the antenna is 30-60cm of wire. (Wireless communication and power)

Smooth prompt interpolation with stable diffusion. [SD part 3]

You have probably seen smooth animations made with stable diffusion like this: https://www.youtube.com/watch?v=Bo3VZCjDhGI But how was it done? The answer is very simple, by running multiple prompts on the same image, the noise predictions can be combined to create an intermediate image. Changing the relative weights of the prompts, but keeping the initial latents (seed value) the same, a series of intermediate images can be created. Starting prompt: “A fantasy landscape” end prompt: “A sprawling cityscape”, seed: 42 (AI, ML and if statements ) (stable-diffusion)

Stable diffusion, in code. [SD part 2]

If you have not read the last post, I would highly recommend you read it first. Full disclosure, I will be using pre-trained models from the internet for unet, CLIP TextEncoder, and vae. Environment A cuda comparable (read NVIDIA) GPU will perform best, but a reasonably modern CPU with more than 8 GB of ram should work fine, as long as you are prepared to wait. Here are all the python libraries I used, these can be installed with pip. (AI, ML and if statements ) (stable-diffusion)

Just how does stable diffusion actually work? [SD part 1]

Stable Diffusion is a newish (Dec 20, 2021) image generation model. It can generate quickly generate highly detailed images with a concise text prompt: Prompt: “A photograph of an astronaut riding a horse”: It does this while being much faster and smaller than OpenAI’s DALL-E. Better yet, it it open source, meaning you can not only run it on your own hardware with out restrictions (It even performs decently on a CPU! (AI, ML and if statements ) (stable-diffusion)

ChatGPT and the future of programming.

ChatGPT is a free preview of OpenAI’s large language model, capable of answering questions, writing short programs or essays, and poetry. The model is set up as chatbot, and displays a remarkable ability to hold conversations or answer technical questions. It can even write short programs based on a description of the desired function: This has lead to speculation that similarly AI’s might replace human programmers and writers. However, ChatGPT’s knowledge is replaced by vivid confabulation when it is faced with a question that has not been discussed on the internet: (AI, ML and if statements )

Red fluorescence from chlorophyll

Chlorophyll, the green pigment in plants, strongly florescent under UV light. This effect is not visible under normal conditions while the chlorophyll is in the leaf, but can easily be seen in an extract. Reagents A suitable solvent: Isopropyl alcohol (rubbing alcohol which is 40% water wont work well.), Ethyl alcohol, Acetone. (I used Isopropyl) Plant leaves (any green leaf should work) Tools Mortar and pestle Clear container Funnel and filter paper (optional) Source of UV light. (demonstrations)

How to build a single transistor regenerative receiver

A Crystal radio is a great project, with just a coil of wire, a diode, and a variable capacitor you can build a working AM radio. Unfortunately, getting any kind of sensitivity and volume with a Crystal set requires lots of effort and fine tuning, and even then, the sensitivity leaves a lot to be desired. A simple form of amplified receiver, the regenerative set, requires only a single amplifying element. (Wireless communication and power)

Analyzing Tic Tac Toe, and writing an AI.

Using the min max algorithm to make a Tic Tac Toe AI. (games) (Computer programming) (AI, ML and if statements )

Adding KaTeX (JS based LaTeX rendering to hugo)

Adding math rendering to the hugo static site generator. (hugo) (latex)

New virus (Windows Copypasta)

Have you heard of the new Computer virus? The virus is called Windows, and while not itself new, A new strain is even more dangerous than the last. It installs bloat on your PC that slows down your CPU and uses almost half of your ram, and installs spyware that tracks your every keystroke. But the worst part is that you have to pay 100 to change your desktop background and another 100 to use office programs, and remove ads on startup. (rant) (linux) (windows)

Make presentations in Markdown with pandoc

I have often needed to create a presentation, but a graphical tool like LibreOffice Impress is often overkill and inefficient on screenspace. It turns out, that it is easy to create a presentation in markdown, using tools you likely already have installed. Pandoc Pandoc is a document conversion program, that can covert from many markup formats like markdown,latex,troff… to pdf, html, latex,docx… It turns out pandoc can convert markdown into beamer, a latex based format for presentations. (pandoc)

Why RSS

What is RSS RSS is a simple way for a server to provide a feed. If you have ever seen this logo: , it indicates that the site supports RSS. If you try to open the feed in a browser, you will likely get unrendered XML: RSS has declined in popularity as sites like Facebook and Twitter have discontinued RSS feed integration. (Youtube actually supports RSS, if you open the inspector and search for ‘rss’ on a channel page, you will find a feed link)

Raw html with Hugo

Imbeding raw html into markdown files using a custom shortcode. (hugo)

Open directory search

Find open directories (unconfigured web servers with files) to explore with a search engine. (Computer programming) (tool)

Super simple AVR AM transmitter

Building a crappy AM trasmiter with an avr microcontroler and one trasistor. (Wireless communication and power) (avr) (Computer programming)

AVR build system

A generic makefile for building avr programs. (avr) (Computer programming)

Post Archive

An list of all posts aranged by year