martes, 31 de diciembre de 2013

Año nuevo

Y asi termina el año, sin mucho que decir. Algunas amistades nuevas, gente que ahora me cae mejor que antes, gente que deje de hablar, pero no demasiado.

Es increible pensar cuan corto y vacio puede ser un año. Tan pocos momentos merecedores de recuerdo y tantos tan tristes. Mentiria al decir que tengo esperanzas para el año entrante, pero todo puede pasar. 
  
college year review:
    -aprobada Fisica I (de 1º)
    -aprobada Matematica discreta(de 1º)
    -aprobada Quimica
    -aprobada Sintaxis
    -aprobada Ingles I
    -aprobada Analisis de sistemas
    -regular AMI(de 1º)
    -regular FisicaII
    -libre(?) sistemas operativos
    -libre AMII
    -libre sistemas de representacion

personal year review:
    -fucks: 0
    -gf: 0
    -mood:depressed mostly
    -weight: +10Kg
    -job: 0
    -friends: +3(?)
    -health: -1 (?)
    -wealth: +1 (?)
    -room: messy
    -no end house game: completed
    -moved to Ubuntu
    -

martes, 24 de diciembre de 2013

conectar led, a lo indio

 Como posiblemente ya saben, no soy una persona que se pueda describir como "cuidadoso" asi que aca dejo una pequeña muestra de como meterle un led al arduino, del pin8(+) al gnd(-).
 Es posible que con la resistencia adecuada ande mejor, pero eso lo vere cuando consiga cartonear alguna.

 

lunes, 23 de diciembre de 2013

una suerte de morse

Este es un pequeño codigo que simplemente toma un caracter del serial monitor y apaga (-) o prende (.) el led que el arduino trae built-in.




Al fin!

el arduino, el sensor y un cable que ya tenia
Despues de la espera y bastantes inconvenientes al fin llego mi arduino UNO. 

Creo que con el grupo de la facultad empezamos a planearlo a principio de diciembre y, tal vez porque pasaron muchas cosas, parecio una eternidad.

conectado y andando
La plaquita viene con un cable blanquito y en bolsa (no pude contenerme y la abri antes de sacarle foto). El cable no me gusto mucho asi que lo uso con el cable de una impresora vieja que me parece mucho mas copado. 

Si bien estoy muy contento con el producto me invaden sentimientos encontrados porque no se que hace y tampoco tengo muchos materiales al momento. 

En la foto se ve el aparato ejecutando un codigo que era para prender y apagar el led built-in en una suerte de codigo morse.

comparacion de tamaño
Algo que quiero destacar es que me esperaba una placa mucho mas grande, pero en realidad es mas chica que el pad de la notebook, cosa que es genial. Todavia no tengo los cables necesarios para hacer andar bien el sensor de distancia, pero ya los voy a conseguir. 


Eso es todo, hasta pronto.(si estaba en la cama probandolo porque mi escritorio no esta disponible al momento)
   


miércoles, 18 de diciembre de 2013

delayed pain

Ok yes, i don't actually talk in english, but sometimes -just sometimes- i write my feelings like this. Maybe because it sounds better,  maybe 'coz i've read a lot in english, maybe because i hate myself to much to even like my language.

Anyway what matters is...  nothing actually matters here and now, but whatever...

So, the thing is, the other day (was it Saturday  or Sunday ?) i was invited to a -sort of- concert by one of my best friends ever (witch name i might omit ). I was pretty exatide you know, i've had a crush on her since we finished high school (but never told her).

God ! the concert was not just bad it was shit a crappy chorus of the dumbest people you can get and -worst of all- everybody was clapping. But after the dumbs there came the fucking worst part of it, the rock band in witch my crush's boyfriend was. They were awful, tremendously awful the worst was their rockstar actitude, i hated them all of them.

After this we went to a bar, (yes the two of us) and i was so fucking shocked of how much of a bitch she was i couldn't tell her nothing. I'm starting to doubt the fact that i have  a pair of balls.

the fucking end, till next time.

Una dedicatoria



                         


martes, 17 de diciembre de 2013

Vacaciones!

Si bien no lo queria se me adelantaron las vacaciones una semana por no rendir una materia -sistemas operativos- aunque hice el trabajo practico y posiblemente este regular -o promocionado-, la verdad es que tengo mas cosas en la cabeza de las que me gustaria y el calor no ayuda.

Asi que como siempre pasa a fin de año voy a autoprometerme que en enero voy a:

-estudiar AMI para febrero/marzo
-hacer ejercicio (estoy con 10k de mas y jode)
-terminar (o al menos dejar usable) mi "engine"

ojala que sea posible todo.


bye bye.

viernes, 13 de diciembre de 2013

[the mighty random journal] ~trabajo practico 4 (final)

Despues de tanta lucha llegue al mapa de bits, fue mas que simple resolver los problemas alli planteados, despues de las aventuras en las demas partes del filesystem todo era facil. Al final sin mas, habia terminado. Solo falta esperar la calificacion.  

FIN.

jueves, 5 de diciembre de 2013

[the mighty random journal] ~trabajo practico 4 (pt 4)

(primer capitulo)

Ya en el bloque de inodos todo parecia facil, juntarlos uno por uno no daba ningun esfuerzo,si bien no era el destino final era algo, mas de lo que habia esperado al principio. 

Ahora se acercaba la hora de la verdad. Penetrar en el directorio y obtener los nombres de los archovos.

Envalentonado de mis recientes logros arremeti violentamente contra los datos, trate -sin exito- de tomarlos por la fuerza y una vez mas cai en desesperacion. Que es este maleficio? me pregunte, acaso no estan aqui los datos?. Sin prisa ni pereza pense una forma de ver que habia en ese extraño bloque de datos al que el segundo nodo me habia dirijido. 

Ver los datos limpios era la unica opcion! aunque descabellada para muchos no habia otra manera. Sin dudarlo demasiado lo hice.

Alli estaban, esos nombres, flotando, sin logica aparente, perdidos en el mar de bytes. En ese momento escuche una frase de hace tanto tiempo que es dificil recordar "divide y venceras" decia mi conciencia.

Corte a corte descubri la trampa, maligna y sin sentido, a la vista. Decian las señales y carteles __u16 pero en realidad era __u8 + __u8 pequeña la diferencia para los curiosos, mas caotica a la hora de buscar la verdad. Uno para ayudar, uno para despistar. Un truca tan vil que aun me parece sorprendente haberlos descubiero. 

Ya casi, ya nada puede detenerme. Los nombres deciden corromperse pero eso ya ni parece un problema a mis ojos. Vaciar un buffer, juego de niños, ya venci en esta arena. Es tiempo de pasar a tierras inexploradas, el mapa de bits me espera.

continuara ...


[the mighty random journal] ~trabajo practico 4 (pt 3)

(primer capitulo)

Al fin el superblock, despues de tanta lucha al fin se vio una luz. Pero esto no era mas que la entrada al sistema, el desierto de bytes flotando en la arena. Me apresure a ver que secretos escondia la misteriosa estructura entre a la libreria y, para mis sorpresa, esta vez encontre lo que buscaba, cuantos inodos bloques entre otros datos. Pero como acceder? no habia forma.

Otro camino sin salida, otra vez estar perdido, mas no paso demasiado hasta descubrir el decriptor de grupo. Justo al lado del superbock estaba la respuesta, otra vez a aventurarse dentro del sistema. Esta vez llegando mas lejos todavia, esta vez si, a la tierra prometida, la ciudad de oro, el bloque de i-nodos.

continuara...    

miércoles, 4 de diciembre de 2013

[the mighty random journal] ~trabajo practico 4 (pt. 2)

(primer capitulo)

Otra vez a la batalla me digo, mientras trato de despertar, lentamente me incorporo y despues de unos minutos ya puedo seguir. Cuan abatido habia quedado ya de luchar contra este sistema de archivos!

Trataba de no pensar en ello, pero la fija mirada el ojo azul luminoso de mi computadora me lo recordaba. No podia mas que volver a intentarlo, no fue dificil resumir mi obra todas las ventanas seguian abiertas, quietas, erroneas.

Mientras leia, una revelacion aparecio ante mi! No era la estructura sino el archivo me dije, tan tonto habia sido de no percatarme. Habia habierto el lugar donde estaba montado el sistema y no el sistema en si. 

Me apresuré a correjir el error, aun con miedo de estar equivocado y caer nuevamente en el desamparo de la ignorancia, pero no! en la consola semitranspatente aparecieron los numeros que buscaba donde antes habia no mas que cero.

Por supuesto que este era solo el comienzo, pronto esa sonrisa se borraria de mi rostro...

continuara ...

[the mighty random journal] ~trabajo practico 4

Ayer trate, intente, hize lo posible por resolverlo, pero todos los esfuerzos fueron en vano.

  Devastado, abatido fui en busca de ayuda hasta la facultad, donde habia oido que estaban dando una consulta.

  Sin embargo nunca encontre ni el lugar ni las personas que daban la consulta, tal vez mi error, tal vez por culpa del destino volvi en el colectivo, destruido una vez mas solo para dormir y de una vez por todas dejar de pensar.

continuara ...

martes, 3 de diciembre de 2013

Flojera

Hoy es ese tipico dia que no pasa nada, no se siquiera para que estoy escribiendo, pero no tengo nada mejor que hacer mas que practicar mi mecanografia.

Y es porque ya se termina el año! 

Dentro de poco ya no me voy a tener que preocupar por nada mas!

Aunque viendo el lado negativo (una de mis mas usuales practicas) significa tambien que voy a estar mucho tiempo al pedo y voy a ver menos a muchos de mis compañeros.

Bueno, me tengo que poner las pilas como se dice, queda matar Sistemas Operativos y ya seria libre.
 
Larga vida a la promocion directa de analisis de sistemas (que con suerte aprueve el ultimo parcial) ! Y rendir POO recien en febrero...

Junto con el querido analisis matematico (que hasta hoy le sigo viendo poco sentido).


Para finalizar y como decia el camarada Bugs, eso fue todo amigos !
 




diferencia Cususucu

aca dejo el sript de la diferencia cususucu en scheme , si bien no lo tomaron como correcto capaz sirve para ver como anda scheme y lo facil que es hacer funciones matematicas iterativas.




(define (multi-display L);muestra una lista de manera mas 'linda'
  (if (null?  L )
      (display "")
      (begin  (newline) (display (car L)) (multi-display (cdr L)))
   )
  )

(define (read-em x);lee N elementos del stdin A.K.A. teclado
 
(if (eq? x 0)
   '()
    (append (list(read)) (read-em (- x 1) ))
    )
)

(define (suma1 x); suma de los cuadrados hasta x (posiblemente por esto no anduvo, hubiese sido mejor una recursion por cola)
 (if (eq? x 0)
     0
     (+ (expt x 2) (suma1 (- x 1) ) ))
 )


(define (suma2 x); suma de los x primeros numeros (con la eq de gauss)
 (/(* x (+ x 1) )2)
 )

(define (cusu x); diferencia cususucu para x
  (- (expt (suma2 x) 2) (suma1 x) )
  )

(define (cusu-lim lim beg) ; esta funcion da el numero cuya diferencia cususucu es menor que lim, pero la mas cercana
  (if (> (cusu beg) lim )
      (- beg 1)
      (cusu-lim lim (+ beg 1))
      )
)


        
(define (principal)

 (begin (map (lambda(x)(begin(display (cusu-lim x 0)) (newline))) (read-em (read))) (newline))
)



(principal) ;importante, en scheme si queres que el programa corra de una tenes que poner las funciones que queres que se ejecuten, algo asi como el main de C.

sábado, 30 de noviembre de 2013

Encuesta →

Como a muchos les gusta votar, actualize la encuesta. Que dure hasta 2020 !

Return^

Despues de tanto tiempo llega una nueva actualizacion en el blog, esta vez no para hablar de lenguajes y paradigmas sino para informar que ya voy a volver a postear. 

A mediados del cuatrimestre me vi tremendamente frustrado con un particular lenguaje de programacion que impuso la catedra de paradigmas: Smalltalk . No voy a decir si es bueno o malo, pero si puedo decir que lo odie como a ninguno, empezando por la sintaxis "en el aire" hasta el IDE/maquinaVirtual pero mas que nada el hecho de que habia que navegar de un lado a otro para poder hacer algun cambio (minimo) en el codigo. 

Sin embargo despues de esa pequeña tortura (que vino con un parcial reprobado) llego Scheme/Racket(como mas lo conozcan). Al principio fue tedioso, muy tedioso el hecho de no poder usar los parentesis libremente pero despues de un poco de practica ya estaba todo solucionado. Este si es un lenguaje como la gente, tenes tu codigo, funciones y un IDE bastante decente que incluso te permite cambiar la "variedad" de racket a usar. Fue genial, sobretodo ayer, que junto con mi equipo ganamos una competencia de programacion en ese lenguaje organizada por la facultad.

Bueno, sin mas que querer contar me despido, despues subire los codigos de la competencia y alguna que otra cosita mas.

Hasta pronto!  

viernes, 18 de octubre de 2013

Fork, como un tenedor

El fork es una de las herramientas que nos brinda linux para manejar varios procesos, es tremendamente simple la sintaxis: 

pid_t fork(void);

Lo dificil no es entender como funciona si no que hace, segun el manual de linux: 
    
    - crea un nuevo proceso duplicando el proceso original
    - el proceso hijo tiene su propio pid
    - el ppid() del proceso hijo es el pid del proceso original
    - el hijo no tiene señales pendientes
    - el hijo no hereda el valor de los semaforos

Valor de retorno:
    En el padre: pid del hijo
    en el hijo: 0


Y nada mejor que un ejemplo:

#include ...

int main(){

 int hijo;


printf("soy un solo proceso ! \n");
sleep(1);

hijo=fork();//hacemos un proceso hijo

printf("somos dos procesos!\n");
sleep(1);


if (hijo==0){//vemos si es el hijo

printf("soy el hijo!\n");
sleep(1);
printf("sigo vivo");
}
else{//si no es el padre

printf("soy el padre\n");

}

printf("ya morí ... :S \n");//ambos ejecutan esto

return 0;};
  


espero que sirva para aclarar algo, den +1.


miércoles, 16 de octubre de 2013

Directorios y C

 Por  momentos uno quiere saber donde se encuetra, buscar archivos, ect ...

 Para eso usaremos dirent.h una libreria para manejar directorios.

#include <sys/types>
#include <dirent.h>

int main(){

 DIR *my_dir; // estructura que guarda el directorio
 struct dirent *my_file;
 
 my_dir=opendir("/home/un_dir"); // abrir un directorio

my_file=readdir(my_dir); //leemos el primer nodo del directorio

do{

    printf("%s es un archivo del directorio\n", my_file->name);

 
    my_file=readdir(my_dir); //leemos los otros nodos del directorio

}while(my_file!=NULL)//cuando no hay mas nodos que leer

 rewinddir(my_dir); // rebobinamos el directorio

 closedir(my_dir); //no es necesario, pero es buena practica

return 0;}

hay que tener en cuenta que struct dirent puede variar de distro a distro asi que siempre es recomendable fijarse en el manual.



pd: den +1
pd2: si lo van a compilar cambien el directorio que van a abrir

martes, 15 de octubre de 2013

signal y sigaction, "that won't kill me"

Hay momentos en que a nuestros programas les caen señales, estas en general matan al proceso, para evitar este comportamiento existen las funciones signal y sigaction aunque si bien ambas sirven es recomendable utilizar la segunda.

nota: SIGKILL (9) no puede recivirse, simplemente mata al procesos sin mas.

Ahora a ver signal, la sintaxis es la siguiente:

*handler signal(int signal, *handler)

Signal es el identificador de la signal y handler es el nombre de la funcion que se ejecuta en la llegada de la signal, sin parametros ni parentesis, recibe el numero de señal. 

completar mas tarde.
ayuda #man signal; #man sigaction ;#kill -l 

Iron man III ...why?

No soy un fan de iron man ni mucho menos, pero puedo decir que la pelicula deja mucho que desear.

 Primero los efectos especiales gritan "standard hollywood", sobretodo si uno vio Avengers o Trnasformers III. Si bien parecen tener 10% mas de calidad, la escena final (spoiler) cuando explotan las armaduras se convierten en fuegos artificiales y true-mandarin parece salido de un videojuego barato.

 Si bien todo eso era mas que esperado la historia es tremendamente pobre y mal narrada, empezamos en 1999 en una especie de fiesta politica para (sin mucha explicacion de por medio) pasar a la actualida donde encontramos a un nuevo Tony con ataques de panico. Como si ya no estubiera bastante feo el panorama aquellos que lean el comic les recomiendo un lavado de cerebro antes de ver la pelicula, pues el mandarin es un actor (un actor haciendo de actor que hace a mandarin para ser precisos).

Bueno, espero que disfruten la pelicula, la banda sonora es muy buena. (aunque no tanto como en las anteriores).


domingo, 6 de octubre de 2013

Argumentos, volvieron en forma de tazos

Ahora vamos a empezar con un poco del viejo y querido C, para los que hayan usado linux seguramente vieron como la mayoria de los comandos tienen parametros, anteriormente vimos un modo rudimentrario de obtenerlos "a lo bestia" en bash (por si no recuerdan).

Bueno, como veran no es muy facil pasar muchos argumentos, y mucho menos si los pasamos en desorden !

Para solucionar este problema existe la función getopt en c. Las opciones que reconoce son ademas las standard de linux con "-" al principio.

sintaxis:
 int getopt( int argc, char* argv[], const char* optstring )  

"int argc" y "char* argv[]" son los parametros de main, que para los que aun no estan enterados la funcion main puede escribirse tanto como:

int main()

int main(int argc, char* arnv[])

la segunda forma toma en consideracion que se le pueden pasar lineas de parametros. 

const char* opstring, es una cadena que contiene las opciones validas que se le pueden pasar a nuestro programa, por ejemplo si ponemos "ns" las opciones validas son -s -n -sn -ns cualquiera de esas combinaciones.Si ponemos "a:" significa que a recive un parametro obligatorio, si ponemos "a::" el parametro es opcional.

Pero para entender nada mejor que un ejemplo (que les puede servir de plantilla):

#include <stdio.h>
#include <unistd.h>

int main(int argc, char *argv[]){
                                 
int opt;                         
char *opciones="apl::b:";                       

                                               
while((opt=getopt(argc,argv, opciones)) != -1){
switch(opt){                                   
                                           
    case 'a': printf("\n\nopcion A\n\n");break;    case 'b': printf("\n\nopcion B con argumento %s\n\n", optarg);break;    case 'l': printf("\n\nopcion B con argumento opcional %s\n\n", optarg);break;   
    }
}    
return 0;
}        



pd: a nadie le importa la ortografia, solo a los homos.

martes, 1 de octubre de 2013

GCC, compilando en linux

Una de las razones por las que siempre se escucha que linux es un SO para desrrolladores es el hecho de que en todas las distribuciones viene incluido por default gcc un compilador de C/C++ bastante potente y facil de usar. 

Para empezar a compilar tenemos que movernos a la carpeta en la que estan los sources

# cd /home/Documents/mis-sources

Para una compilacion simplemente ejecutamos

# gcc -o nombre_salida nombre.c

el parametro -o le da un nombre al archivo de salida que sino se llamaria "a.out" por default.

Aveces tambien es necesario incorporar librerias externas, como cuando usamos los threads de linux. No solo basta con incluir el archivo de cabezera sino que tambien hay que linkear el codigo fuente. Para eso solo agregamos al final el nombre de la libreria a agregar. Para estar mas seguros de que escribir nunca esta de mas buscar en el manual de la funcion (man pthread_create)

# gcc -o t_prog prog.c -pthread

Tambien es posible decirle a gcc que no haga linking es decir genera un archivo objeto(usualmente con extencion .o) que no es un ejecutable y que luego puede añadirse a otros programas como una libreria con la opcion -C.

# gcc -C -o cosas.o cosas.c
# gcc -o programa prog.c cosas.o 

Con esto el archivo "programa" va a contener el codigo compilado de prog.c y el de cosas.c, esta funcionalidad es muy util si queremos re utilizar o compartir codigo sin tener que compilar lo mismo una y otra vez.





lunes, 30 de septiembre de 2013

Prolog, lista de backtracks


En prolog listar BACKTRACKS suele ser muy util, esta simple funcion con algunas modificaciones genera una lista A de backtracks, asimismo el segundo argumento (Ax) puede usarse como una lista de variables no deseadas


p(1).
p(2).
p(3).
p(4).
p(5).
p(6).
p(7).
p(8).
p(9).

pes([X|A],Ax):-
    p(X),
    not(member(X,Ax)),
    pes(A,[X|Ax]),!.

pes([],Ax):-!.


-----------(corrida de ejemplo)--------------------
 [debug]  ?- pes(A,[]). 
A = [1, 2, 3, 4, 5, 6, 7, 8, 9]. 

 [debug]  ?- pes(A,[4,5,6,7]).
A = [1, 2, 3, 8, 9].

Hasta la proxima.

martes, 24 de septiembre de 2013

Bash, argumentos

     Muchas veces se necesita modificar el comportamiento de un script para hacerlo mas flexible, la mejor forma de lograrlo es utilizando argumentos. 
 
     Los argumentos se pasan al lado del script cuando se lo llama desde la consola de comando:

./script arg1 arg2 arg3 ... argN

    Para recuperar los valores de estos argumentos simplemente hay que referenciarlos con $1, $2, $N, tambien hay argumentos especiales como $# (num de args), $@ (array que contiene todos los args).

#!/bin/bash

echo "hay"$#"parametros"
echo "estos son: "$@

if [ $1 == yo ]; then
echo "Sorpresa!"
fi

lunes, 23 de septiembre de 2013

Mas Condiciones de BASH

Esto va a ser rapido y potente:

condicional IF+else:

if [ cond ]; then
 #code
 #more code
elif [cond2]; then
 #cond2 code
 #some more code
else
 #code
fi #cerrar condicion

condicional Case:

case $var
        valor_1)
               #code
        valor_2)
               #code
esac #cerrar case 


bucle for:

for i in $array
do
 #code 
 # $i toma el valor de cada posision del array
 # array tambien puede ser el output de un comando
 #code
done   




Y eso hace una introduccion a lo que son los condicionales de Bash, hay otros como while, until y select, pero son menos utiles y si en algun momento los llegan a usar la sintaxis no es my diferente.

Prolog: casos base y el resorte recursivo

El querido Prolog, para este post voy a suponer que se tienen nociones basicas de la sintaxis de prolog. Mas que nada quiero explicar algunas cosas un poco raras que tiene prolog.
 
Los casos base:

    En prolog todo es recursivo, no existen ni for, while, case, nada de eso. En vistas de esta hermosa cualidad definir los casos base gana una importancia mucho mayor a la usual. Pero, como definir un correcto caso base ? En general hay que pensar como queremos iniciar una variable (0 o []), aunque todo depende de como se diseñe el algoritmo.
 
El "resorte recursivo":

    Ese es el nombre que le di a una de las cualidades de la recursion, que es: Cuando se ejecuta una funcion recursiva primero chequea si esta en el caso base, de no ser asi se llama de nuevo a si misma hasta llegar al caso base. 

Definamos una simple funcion para entenderlo mejor:

func([A|B],[A|L]):- func(B,L).
func([],[]).

Ahora si lo ejecutamos con la consulta func([1,2,3],B) haria esto:

func([1,2,3], B)
func([2,3], B)  [quedo 'flotando' el 1]
func([3],B)
func([],[]) [en el caso base y B unifico con [], ahora va a volver por donde vino]
func([3],[3])
func([2,3],[2,3])
func([1,2,3],[1,2,3])

B=[1,2,3]

Claro que nosotros solo vemos el resultado y esta es una version simplificada de lo que veriamos si estuvieramos en modo trace. Pero supongo que es suficiente para entender el punto.
 

Bash y el querido IF

    En programacion (cualquier tipo de programacion) en general se necesita preguntar algo, para eso existe if este sencillo condicional nos ayuda bastante.

    El uso es muy simple, si la condicion que esta entre los corchetes resulta verdadera se ejecuta la secuencia de comandos en el interior del if : 

#!/bin/bash
echo "dame un numero"
read A

if [ $A==0 ]; then
echo "diste un cero"
fi
 
if [ $A==1 ]; then
echo "diste un unp"
fi  

    Este script simplemente nos avisa si ingresamos un 0 o un 1, si ingresamos otro numero no dice nada.

Notas sobre la sintaxis:

    La sintaxis es if [ condicion ]; then comandos fi el fi cierra nuestro condicional, tambien hay que tener muy en cuenta que los corchetes estan separados de la condicion por un espacio!

    Y eso es todo sobre el uso basico, en otra entrada ampliare como usar else

 

domingo, 22 de septiembre de 2013

Un poco de BASH

    En linux uno de los interpretes predeterminados es BASH o simplemente SH, algo asi como el equivalente de batch en windows.

    Para empezar podemos decir que todos los comandos que son accesibles desde la consola pueden utilizarse en BASH, ls, grep, wc, ect...

Un simple script de ejemplo:


 #!/bin/bash

clear
echo "listar los directorios"
ls

echo "presione una tecla para salir"
read
clear

este script simplemente muestra los directorios y luego borra la plantalla.

Ahora, supongamos que lo llamamos "listar.sh" como correrlo?

Hay varias formas, la primera;

Como script:
$ bash ./listar.sh

Como ejecutable:
$ chmod +x listar.sh (le damos los derechos de ejecucion)
$ ./listar.sh

En general es preferible dar derechos de ejecucion para facilitar las cosas, pero podriamos decir que es a gusto del programador.


Linux, por que #! ?

Para los que esten empezando a programar en Linux puede parecerles raro el hecho de que en cada script se use en la primera linea

#!/bin/bash 

 Pero esta simple linea tiene una utilidad, aunque sea un comentario linux lee esta linea para saber que interprete usar. Asi entonces podemos obviar la extencion. 

Otro truco que podemos usar para facilitar la experiencia de programar es crear un directorio llamado /bin en nuestra carpeta de usuario y añadirlo al $PATH. Asi simplemente podremos correr nuestros scripts como si fueran un comando mas desde la consola

$ PATH=$PATH:/home/(username)/bin
$ export PATH

 $ mi_script  arg1 ... argN


 

Hello

Hola, hello or whatever!

Todavia no puedo decidir en que idioma publicar en este blog, tal vez en español sea una mejor idea. 

Bueno, hasta luego.