Permutaciones en Scheme

Este programa en Scheme calcula todas las permutaciones de una lista dada.

;; Calcula todas las permutaciiones de una lista

;;Leyenda ->
;;Para el manejo de listas tenemos
;;car -> Lista que resulta al incluir un objero en una lista.
;;cdr -> Lista que resulta al quitarle el primer elemento a una lista
;;pair? -> Si el objeto es de tipo "Par Punteado" devuelve tru, en otro caso, devuelve false.
;;select ->
;;map (Seguido por proc) -> Se le aplica proc a cada elemento de la lista
(define (perm xs)
(if (pair? xs)
(select (car xs) '() (cdr xs))
'(())))

;;Selecciona X como primer elemento de la lista
;;Lo agrega a las permutaaciones de la lista que va quedando representada por la lista de los elementos antes de X.

(define (select x revprefix postfix)
(mapconsapp x (perm (revapp revprefix postfix))
(if (pair? postfix)
(select (car postfix)
(cons x revprefix)
(cdr postfix))
'())))

;; Hace un map de X en la lista de listas xss y concatena el resto.

(define (mapconsapp x xss rest)
(if (pair? xss)
(cons (cons x (car xss)) (mapconsapp x (cdr xss) rest))
rest))

;; Voltea Xs y concatena el resto.
(define (revapp xs rest)
(if (pair? xs)
(revapp (cdr xs) (cons (car xs) rest))
rest))

Para utilizarla simplemente la llamamos desde nuestro interprete de Scheme ( En mi caso DrScheme) de la siguiente manera;

 > (perm ‘(1 2 3 4))
(list
 (list 1 2 3 4)
 (list 1 2 4 3)
 (list 1 3 2 4)
 (list 1 3 4 2)
 (list 1 4 2 3)
 (list 1 4 3 2)
 (list 2 1 3 4)
 (list 2 1 4 3)
 (list 2 3 1 4)
 (list 2 3 4 1)
 (list 2 4 1 3)
 (list 2 4 3 1)
 (list 3 1 2 4)
 (list 3 1 4 2)
 (list 3 2 1 4)
 (list 3 2 4 1)
 (list 3 4 1 2)
 (list 3 4 2 1)
 (list 4 1 2 3)
 (list 4 1 3 2)
 (list 4 2 1 3)
 (list 4 2 3 1)
 (list 4 3 1 2)
 (list 4 3 2 1))

 

Espero que les sirva. A mi me sirvió bastante …. … Read More >Permutaciones en Scheme

Instalación y Configuración – MadWifi

MadWifi es un driver diseñado para tarjetas inalambricas cuyo chip base sea el Atheros. Es el driver mas avanzado que existe para linux.

Antes que todo descargar y compilar el driver de alguna de las siguientes direcciones.

  • Sitio Oficial de MadWifi [1]
  • Sitio de Descargas de Fibonacci [2] (Estable)
  • Sitio de Descargas de Fibonacci [3] (SnapShot)

Ejecutar

  • make en el directorio raíz del madwifi
  • make install en el directorio raíz del madwifi
  • Si dice que estos drivers ya existen, selecciona la opción de remover los antiguos.

Este driver posee varios modos de ejecución. Entre ellos :

  • master (ap)
  • managed (estación)
  • ad-hoc (peer)
  • monitor (sniffer)

Cargar el driver

  • De Manera Manual
    • Para cargar el driver sin ningún modo en particular simplemente ejecutamos (Por default crea el modo “Station”)
modprobe ath_pci
    • En el caso que queramos especificar los modos
modprobe ath_pci autocreate=monitor

Los modos que se pueden especificar son : sta|ap|wds|adhoc|ahdemo|monitor

Si todo sale de manera correcta podemos observar con el comando

iwconfig Algo como ;

 

ath1 IEEE 802.11g ESSID:”” Nickname:””

         Mode:Managed  Frequency:2.437 GHz  Access Point: Not-Associated   
Bit Rate:0 kb/s Tx-Power:18 dBm Sensitivity=1/1
Retry:off RTS thr:off Fragment thr:off
Power Management:off
Link Quality=0/70 Signal level=-96 dBm Noise level=-96 dBm
Rx invalid nwid:3795 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0

Lo anterior corresponde al modo de estación.

Si queremos crear un AP, debemos seguir las siguientes instrucciones.

  • Cargar el modulo sin modo alguno.
modprobe ath_pci autocreate=none
  • Crear el Ap

wlanconfig ath0 create wlandev wifi0 wlanmode ap

  • Ahora especificamos los datos del AP.
sudo iwconfig ath1 essid "naitoath1"
  • Lo que nos da algo como :

wifi0 no wireless extensions.

         ath1      IEEE 802.11g  ESSID:"naitoath1"  Nickname:""
Mode:Master Frequency:2.412 GHz Access Point: 00:17:9A:AF:E4:7D
Bit Rate:0 kb/s Tx-Power:18 dBm Sensitivity=1/1
Retry:off RTS thr:off Fragment thr:off
Power Management:off
Link Quality=0/70 Signal level=-95 dBm Noise level=-95 dBm
Rx invalid nwid:77 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0

Con lo que tenemos el AP creado, con un essid llamado naitoath1.

 


Genéricamente hablando, se puede resumir los pasos para generar una interfaz como:

Si poseemos una interfaz activa, y queremos cambiarla :

  • Primero la Destruimos.
wlanconfig ath1 destroy
  • Luego creamos una nueva con las caracteristicas necesarias.
wlanconfig ath0 create wlandev wifi0 wlanmode monitor
  • Revisamos que haya levantado la interfaz con iwconfig, lo que nos retorna algo como:
         lo        no wireless extensions.
         eth1      no wireless extensions.
         wifi0     no wireless extensions.
         pan0      no wireless extensions.
         ath0      IEEE 802.11g  ESSID:""  Nickname:""
Mode:Monitor Channel:0 Access Point: Not-Associated
Bit Rate:0 kb/s Tx-Power:18 dBm Sensitivity=1/1
Retry:off RTS thr:off Fragment thr:off
Encryption key:off
Power Management:off
Link Quality=0/70 Signal level=-96 dBm Noise level=-96 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0
  • Ahora que la interfaz esta creada, debemos levantarla.
ifconfig ath0 up

En donde;

  • ath1 es la interfaz que queremos destruir.
  • ath0 es la interfaz que deseamos crear. (Si no se especifica un número, este es asignado automáticamente.). Si todo sale bien, retorna el nombre de la nueva interfaz.
  • wifi0 es el dispositivo físico.
  • monitor especifica el modo que deseamos que tenga, en este caso monitor. (master,static,monitor,etc)

 

 

Opciones extra:

    • Desabilitar el CRC Check. (Util para cuando queremos medir las razones del porque llegan mal los paquetes.)

echo ‘1’ > /proc/sys/net/ath0/monitor_crc_errors

 

Read More >Instalación y Configuración – MadWifi

Introducción a SQL

 

 En esta introducción veremos que es SQL, y algunas sentencias que nos sirven para manejar básicamente las bases de datos.

 

¿Que es SQL?

 SQL es un lenguaje de consulta de BdD relacionales estándar. Es un lenguaje declarativo, lo que quiere decir que le pedimos la información que queremos obtener.  A continuación mostraremos las consultas básicas de SQL.

Crear Bases de Datos

La base de datos, es el lugar donde almacenaremos todas nuestras tablas.

create database pruebasCompu;

Crear Tablas

Podemos tener muchas tablas dentro de una base de datos, y cada una con información distinta. Cada una de estas tablas posee campos en los cuales  guardaremos la información.

CREATE TABLE `compu`.`pruebaTabla` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`nombre` VARCHAR( 100 ) NOT NULL ,
`desc` TEXT NOT NULL
);

Seleccionar de las Tablas

Con la selección obbtenemos la información que necesitamos. Ya veremos como hacer consultas un poco mas complejas.

SELECT * FROM `pruebaTabla` ;

Insertar en las Tablas

Para insertar en una tabla, debemos decirle lso campos a los cuales le queremos agregar información, y luego le damos los valores que queremos que tome.

INSERT INTO `compu`.`pruebaTabla` (`nombre` ,`desc`)
VALUES ('este es un nombre', 'Y esta es su descripción');

 

Borrar Información

En general no queremos borrar TODOS los datos de una tabla, asi que usamos una condición para restringir la cantidad de datos a borrar.

DELETE FROM `compu`.`pruebaTabla` WHERE `pruebaTabla`.`id` = 2 LIMIT 1

Borrar una Tabla.

drop table pruebaTabla;

 

 

Read More >Introducción a SQL

Temario Solemne N2

 

Chicos, se nos viene la solemne II y es necesario que tengan en cuenta las siguientes materias:

 

  • Desde lo mas básico …. recuerden las operaciones aritmeticas .
  • Recuerden la diferencia entre herencia e interfaz.
  • Deben ser capaces de poder crear una interfaz y luego implementarla.
  • Deben de ser capaces de crear una clase abstracta de la cual heredar.
  • Y lo mas importante …. DEBEN SER CAPACES, de heredar e implementar al mismo tiempo.
  • Entender las diferencias entre ResultSet y Statemant (JDBC).
  • Conocer lo básico de las sentencias SQL.
  • Saber obtener los datos del resultset,
  • Y recordar como leer de teclado. 

Espero poder subirles un mini manual de java con JDBC para conectar a una base de datos. Saludos!.

 

Como ayuda pueden utilizar :

 

Read More >Temario Solemne N2

Clase del Viernes y Temas presentaciones

 Les cuento, este viernes a la hora B nos juntaremos y haremos una introduccion a sql, y veremso como ocuparlo. Nos pondremos de acuerdo también para las presentaciones.

 

Por ahora lso temas inscritos son (Por orden de llegada) :

 

  • Oliver Schulz -> Figuras geométricas.
  • Paulina Arias -> Vendedor.
  • Alvaro Leon -> Animal. ( No es que sea anima, solo usara la clase animal)
  • Nicolas Vargas -> Jugador / Selección.
  • Cristobal Burgos -> Aviones.
  • Rodrigo Ravanales -> Instrumentos musicales .

Esos son los que no se repiten por mientras, Estaré actualizando este articulo para que sepan los temas  tomados . Saludos.

 

Read More >Clase del Viernes y Temas presentaciones

Call to a member function sess_destroy() – CodeIgniter

En el manejo de sesiones con CodeIgniter podemos obtener problemas, si la sesión no es cargada automáticamente.

 

Tomando en cuenta que cargamos la sesión con :

$this->load->library(‘session’);

 

Tenemos el problema, que esta instancia solo se crea para el controlador en el cual la estamos llamando, entonces para poder utilizar 

$this->session->sess_destroy();

 debemos cargar automáticamente la librería de sesión desde el archivo de configuración “autoload.php”. Para hacerlo encontramos la linea en la cual se define el autoload de las libreríaas, y revisemos que quede de la manera siguiente;

$autoload[‘libraries’] = array(‘session’);

 

Espero que eso los ayude con el problema que pudieron tener. Saludos!

 

 

 

 

 

 

Read More >Call to a member function sess_destroy() – CodeIgniter