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

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

WarGames

How far technology can go? It is an often question everyone ask, including such philosophical questions about we humans and our creations, just like our Frankenstein Monster, our creation could bring chaos to ourselves. We have the power to create and the limit of our creation could be bypass by that same creation. This movie called War Games, bring this topic and it is an actual matter, and now even more because now a days technology had reached tremendous power and capacity that is very impressive, some tasks that we humans cannot do, or maybe as fast, are done by our own creation. Just like the arguments of the Android David in the movies Prometheus and Alien Covenant, David reached a conscious level that defined him to be as he was and committing every action during the movie. It is that self evolution that keeps growing and it hasn’t the same limits as human interpretation has. Another example is this classic movie 2001 A Space Odyssey, from S. Kubrik, HAL 9 000, who has e

Understanding the SOLID Principles

T here exist some principles that make a procedure easier to perform, with this resource, it is viable to create clean products. In programming, exist something called SOLID principles that ensure quality and good performance while developing code, this acronym SOLID are the 5 widely accepted principles: S - S ingle Responsibility Principle A class should have exactly one responsibility. O - O pen/Closed Principle A class or a function should be open for extension but closed for modification. L - L isvok Substitution Principle Keep the relationship between classes and functions. I – I nterface Segregation Principle Avoiding interfaces that overloads classes with responsibilities that this classes don’t actually need. D – D ependency Inversion Principle “ Depend upon abstractions not upon concretions.” By understanding each one of this SOLID Principles, we could manage to create good code, and by good code I mean cleaner code that is maint