Ir al contenido principal

Metaprogramming

Create a program that writes programs, an interesting tool for optimizing time, generating automated code. I didn’t exactly know what metaprogramming was until today, while reading the article I remembered a program I wrote a while ago, called WAV shifter (https://github.com/k3ll3x/WAV-shifter/), the purpose of this code is to generate algorithmic music using the C language, an endless iterator, and bitwise operators. By looking at the code I see that there exists 3 source codes, play.sh, wavsh.c, wavsh.py; play.sh is a bash script that executes the compiled c file with an input audio file(that in a way is going to be modified), after that a wav file will be generated, and this is played by the aplay command. Note, this code only works in Unix systems, with pulseaudio installed. The Python file, wavsh.py, takes the source file wavsh.c and replaces a specific space on the source code, changing that with the input string given at the python program, that string could be a variable t modified with bitwise operators, such as t>>1; t<<&t; t|t; t^t; and so on. After that it takes the new generated code and compiles that with the GCC Compiler. Now the output audio file can be played.

The python script looks like this:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/usr/bin/env python
import subprocess
import signal
import sys

def signal_handler(sig, frame):
        print('You pressed Ctrl+C!')
        sys.exit(0)

def main():
 with open('wavsh.c', 'r') as myfile:
  data=myfile.read()#.replace('\n', '')
 input = raw_input('ncmd: ');
 ndata = data.replace("$",input)
 text_file = open("wwavsh.c", "w")
 text_file.write("%s" % ndata)
 text_file.close()
 ncmd = 'gcc wwavsh.c -lm'.split()
 rc = subprocess.call(ncmd);
 ncmd = 'rm wwavsh.c'.split()
 rc = subprocess.call(ncmd);
 ncmd = './play.sh'
 signal.signal(signal.SIGINT, signal_handler)
 rc = subprocess.call(ncmd.split());
 signal.pause()

 print('Press Ctrl+C')

main()

This application (WAV Shifter) is a very simple program, and very easy to use, the utilization from other programming languages in order to generate code (other programming language) is made, it is interesting this kind of used metaprogramming although I didn’t actually know it was that. Of course this is a simple example and is just a test project, but metaprogramming is very powerful and very useful.

References:

http://34.212.143.74/s201911/tc3049/metaprogramming.html
http://hilite.me/

Comentarios

Entradas más populares de este blog

The Elephant and the Blind Programmers + 4.6 SEM: 4+1 view into software architeture + Six Blind Men

4+1 view, displays the use-case view scenarios for a whole project, it is segmented in 4 counterparts: Logical View, Development View, Process View, and Physical View; with all this view it is possible to view the relations between each stage of the software development, and how it goes the requirements and data through each one of the process for developing software. Performing an analytical architecture. With this structure is possible to actually know what the software is doing. The point of view determine the abstraction of what is observed, defines with certain knowledge what the observed is. The creation of simple models and techniques allows the comprehension of some topics to be easier, and manages to avoid misunderstanding and have a vast scope and complete vision of the whole entity. In the programming criteria perception is an important key factor that creates interpretation by understanding what is observable. Without any resources to analyze the observed is imposs...

Hello

Hello What I expect from my Design and Architecture course is to learn all the concepts shown and understand them fully, and I'm very excited to learn the programming language, Ruby. I have different hobbies such as sports like climbing and boulder, riding bicycle, basketball. Also I love nature, I really like to go camping, grow plants, and I like animals. Other hobbies I really like is electronics, like building and learning about music synths, MIDI Controllers, and other stuff related. Music and art have been a very important part of my life, i play the guitar and other instruments, I like to paint. Here is a following list of the books that I really like: The teachings of Don Juan - Carlos Castaneda Siddharta - Herman Hesse Demian - Herman Hesse Brave New World - Aldous Huxley Batallas en el desierto - José Emilio Pacheco Dos Crímenes - Jorge Ibarguengoitia Aura - Carlos Fuentes 1984 - George Orwell Animal Farm - George Orwell Pulp - Charles Bukowski Hol...

Who needs an Architect?

“We have met the enemy, and he is us.” Human beings are symbolic animals, we give an interpretation of our observation, recognizing everything as a symbol, creating concepts in order to give meaning to our existence. At first creating certain laws that rule our reality because each concept and law we created makes sense in our own interpretation, from that we continued creating more and more concepts and laws which are based in our preview interpretation, being the architecture of our whole understanding. Society has become the architect of every brick that constructs reality, and the architect is the one who makes the important decisions in order to continue the construction. With one building which has an established basis, and with the expansion during the course of time, it is difficult or even impossible to make changes into the functionality and shape, it could have slightly modifications but it will never change the structure at its roots, the complexity of this system is ...