Mi propia version de clear

27 01 2009

No es gran cosa pero mirando el otro dia descubri como hacer una version de no mas de 29 bytes de clear. No se si funcione para todos los sistemas, pero bueno… Estaba jugando en la linea de comandos (no, juegos no, tipenado cosas sin sentido, etc) cuando se me ocurrio ver que pasaba si ponia
$ clear < file
Por supuesto que nada. Pues el archivo, no existia, lo cree y seguia sin pasar nada, entonces se me ocurrio hacer un
$ clear > file
(Que ocioso soy) y me salio esto: ^[[H^[[2J. Juntandolo junto a echo sale un script para sustituir a clear:

 #!/bin/dash
 echo  -n ^[[H^[[2J

Lo puse en $HOME/bin y todo listo, lo llame c.clear (copy clear) :P





Cronometro en C

24 01 2009

Por fin, hace unos dos dias mientras vagueaba un poco en el canal #ubuntu-es volvi a programar. Todo empezo con un tio que queria saber si habia algun cronometro para ubuntu, estaba resolviendo estos cubos (creo que se llaman rubik) y queria saber cuanto tardaba. Nadie le dio una respuesta satisfactoria y yo me interese en el caso, le dije que no debia ser tan dificil  hacer uno sencillo en C, que me diera un poco de tiempo y yo lo hacia. Bien, tarde unas dos horas porque no tenia ni idea de como hacer para que el tiempo siguiera corriendo mientras se esperaba la respuesta del usuario, despues estaba que el solo tenia que presionar una tecla y el programa tenia que terminar (algo como getch() ). Despues de pasar todo el tiempo del mundo preguntando en #c y leyendo man pages (sudo aptitude install manpages-dev), me salio este codigo:

/*librerias*/
#include <stdio.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
#include <termios.h>
#include <stdlib.h>
int main() {

	struct timeval timeout;

	fd_set rdfs; 

	FD_ZERO(&rdfs);
	FD_SET(0,&rdfs);

	struct termios my_term, old_term;

	my_term.c_lflag &= (~ICANON);
	my_term.c_cc[VTIME] = 0;
	my_term.c_cc[VMIN] = 1;
	tcsetattr(0,TCSANOW,&my_term);
	int total = 0;
	int segundos = 0;
	int minutos = 0;

	while ( total == 0  ) {
		if ( segundos == 60 ) {
			minutos += 1;
			segundos = 0;
			}
		timeout.tv_sec = 1;
		timeout.tv_usec = 0;
		segundos += 1;
		total = select( 1, &rdfs, NULL, NULL, &timeout ) ;
		FD_ZERO(&rdfs);
		FD_SET(0,&rdfs);
		}
	printf("%i seconds and %i minutes!\n",segundos+1, minutos);
	tcsetattr(0,TCSANOW,&old_term);
	return(EXIT_SUCCESS);
	}

No es lo mejor que pude haber hecho, pero es suficiente. Todavia tengo que estudiar un poco sobre termios.h para ver si puedo regresar la terminal a la normalidad despues de cambiar las cosas (old_term parece no funcionar), tambien me han dicho que no es muy portable, ya tendre que solucionar eso tambien. De momento eso es lo que tengo y compilado en mi laptop bajo ubuntu GNU/Linux 8.04 con gcc (GCC) 4.2.4 (Ubuntu 4.2.4-1ubuntu3) funciona bien.





Usando find para encontrar archivos

29 12 2008

Bien, muchos de los que leen seguramente se habran encontrado con comandos en internet que lucen asi:

carlos@carlos-laptop:~$ find Music/ -type f -exec chmod -x '{}' \;

Criptico ? Bien, mas nunca. Hace mas de una semana tengo el libro “La biblia de Unix” de Dave Taylor, muy buen libro la verdad, uno se entera de muchisimas cosas. Una de ellas es como usar find y otra sobre la que probablemente escribire mas tarde es como usar vi. Pero centremonos en find…
Leer el resto de esta entrada »





Pequeno problema con wine

29 12 2008

Bueno amigos, parece que tendre internet de forma mas regular desde ahora, por lo que podre escribir mas seguido en el blog. Antes de empezar a redactar la entrada de hoy os deseo feliz navidad! Bien, ahora…

Hace ya tiempo tenia este problema, cuando instalaba una aplicacion problematica con wine ( Es decir, cuando estaba fastidiado y por joder instalaba trataba de instalar cosas como nod32 ( Si, asi de aburrido estaba ), ya saben, ese tipo de cosas que a lo mas Windows le das a uninstall mil veces y la aplicacion se queda alli (O bien se tira al suelo) riendose de uno, lo que hacia que “por error” borrara completamente $HOME/.wine, para una representacion grafica:

carlos@carlos-laptop (que nombre tan original ;) :~$ rm -rf .wine #Ya te veo .wine
O bien
carlos@carlos-laptop:~$ sudo mv .wine /dev/null #A ver que pasa cuando te vas por ahi
Bueno, entonces iva al menu y me daba cuenta de que el sub-menu wine seguia conteniendo todas las aplicaciones de antes de que lo mandara a un lugar mejor. Claro, corria alacarte y eliminaba el menu, pero pasaba que si se me ocurria instalar la aplicacion nuevamente, esta simplemente no aparecia ( No, no nod32 si no otra que si era util, como project64). El problema lo resolvi asi, primero ejecute un find sobre mi home para que buscara todo lo que tuviera que ver con alguna aplicacion instalada con wine, partiendo del principio de que mi configuracion tiene que estar guardada en $HOME y en ningun lugar mas.

find $HOME -iname "El padrino" #iname para que la busqueda no distinga mayusculas de minusculas

Veo que hay un poco de carpetas, incluida una con nombre bastante revelador: .config/menus/applications-merged/El Padrino Pc.deleted (o algo asi). Me desplazo hasta el directorio y me encuentro con un archivo bastante interesante: applications.menu. Creo recordar que todas las apps alli estaban marcadas como deleted. Igual, procedamos borrando applications-merged y applications.menu:

rm -rf applications.menu applications-merged

Despues notamos que los molestos menus desaparecen abriendole paso a uno peor Other/ que es una mezcla bizarra de todo lo que acabamos de borrar. No se preocupen, ahora nos desplazamos a .local/share/applications/wine/Programs/ y borramos las carpetas de las aplicaciones que queramos borrar:

carlos@carlos-laptop:/home/carlos/.local/share/applications/wine/Programs/$ rm -rf El\ Padrino\ Pc/ Nod32/

Ahora subimos unos directorios y nos vamos a .local/share/desktop-directories/ donde borramos los que tengamos que borrar
carlos@carlos-laptop:/home/carlos/.local/share/desktop-directories/$ rm -rf El\ Padrino\ Pc.* Nod32.*

Eso es todo, los vemos desaparecer rapidamente :0

Por cierto, os recomiendo que leais La tormenta del siglo o Storm of the Century de Stephen King, realmente maravilloso el libro ;)





Secretos en aptitude y en apt

10 09 2008

Para ver un vaca en apt hacemos un
$ apt-get moo
Y para ver una serpiente comiendose a un elefante (como en el principito!) hacemos un
$ aptitude -vvvvv
Aunque es bastante gracioso ir de poco en poco con aptitude, es decir, primero -v despues -vv y asi en adelante