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.
http://34.212.143.74/s201911/tc3049/metaprogramming.html
http://hilite.me/
Comentarios
Publicar un comentario