Posts

Bueno, los operadores, nada nuevo bajo el sol.
Veamos los aritméticos:
/**
Operadores.cs
 Una muestra de los operadores de c#
 Para compilar con MS: csc Operadores.cs , ejecucion: Operadores.exe
 Para compilar con Mono: mcs Operadores.cs , ejecucion: mono Operadores.exe
*/


    

Vamos a ver que tipos hay por aquí, buf los de toda la vida:
/**
Numeros.cs
 El ejemplo
 Para compilar con MS: csc Numeros.cs , ejecucion: Numeros.exe
 Para compilar con Mono: mcs Numeros.cs , ejecucion: mono Numeros.exe
*/


    

Auditorias automatizadas con nessus
Nessus es una herramienta para hacer auditorias de seguridad que funciona en modo cliente-servidor. Dentro de linux se inicia como un servicio, y para realizar auditorias debemos conectarnos a el con un programa cliente. Ese programa cliente puede estar en la propia maquina donde se ejecuta nessus o en una maquina remota. Por ejemplo existen clientes nessus para windows que pueden conectarse a servidores remotos.

La instalacion es sencilla. Si lo que queremos es automatizar el proceso de hacer autidorias habra que ejecutar determinados comandos y luego crear una tarea periodica.



Un puntero es una variable que en un lugar de contener un valor
contiene la dirección de una variable. Se pueden crear punteros
a todos los tipos de variables y la
sintaxis de su declaración es casí como la de las
variables normales, salvo que se añade el símbolo *.
Veamos una variable int normal y un puntero llamado p:

int numero;
int *p;

numero = 31337;
p = 666;

Si representamos gráficamente estas variables tipo int
tendríamos algo así:
Puntero

Es decir, así como la variable número es un entero que
contiene un valor concreto (31337), la variable p lo que contiene es un
dirección
de memoria donde reside un valor entero: 666. ¿Podemos hacer
esto?
p = numero;

¡No! pese a que las dos manejan tipos int, son variables
incompatibles: numero es un número entero y p un puntero. Para
asignar el valor de
numero a p debemos hacer lo siguiente:

p = №

Con el símbolo lo que hacemos es asignar la dirección de
memoria de la variable numero, y eso sí es compatible. Pero...
¿qué es lo que ocurre realmente?
¿Se hace una copia de ese valor? No! Con la asignación p
= № estamos haciendo lo siguiente:

puntero

¿Y qué ocurre ahora? Las dos variables hacer referencia a
la misma posición de la memoria, por tanto si hacemos:

*p = 1457;

Ocurrirá que:
puntero

El valor de la variable numero también cambia!
Las posibles operaciones con punteros se pueden resumir en este
pequeño código:

int
numero; /* numero es un entero */

int cifra = 43; /*
cifra es un entero */


numero = 536;

int *p; /* p
no es más que un apuntador a un entero*/


p =
&cifra; /* ahora p apunta al
entero cifra, por tanto p apunta al valor 43 */

numero = *p; /* ahora
numero vale lo que apunta p (a cifra), por tanto numero es 43 */

*p =
3; /*
ahora cifra vale 3 */
++*p;
/* ahora cifra vale 4 */
numero = *p + 5; /* ahora numero vale lo que apunta p
más 5, 9 */
(*p)++;
/* ahora cifra vale 5 */


¿Todavía no te
cuadra? Edita, compila y ejecuta este código, y lo
comprobarás:

#include <stdio.h>

main ()
{
int numero, x;
int *p;

numero = 31337;
p = &x;
*p = 666;

printf("Paso 1: ");
printf("p apunta a: %d, y su valor es: %d ", p, *p);
printf("En que posicion de memoria esta x: %d ", &x);
printf("Valor de numero: %d , y de p: %d

Listas en python Las listas son como arrays, permiten toda clase de tipos, anidación, etc.. el manejo es peculiar. Este es un ejemplo muy simple.

#!/usr/bin/python
# coding=utf-8


    

2. Aplicaciones ASP.NET
Aplicaciones Web y Ciclo de vida de una página.
.NET es un poco peculiar a la hora de procesar las peticiones web. El protocolo HTTP tiene la peculiaridad de no conservar el estado ya que no mantiene una conexión permanente entre cliente y servidor. Por tanto la información de estado debe guardarse de alguna manera. .NET ofrece un mecanismo llamado viewstate. Así, surgen dos tipos de peticiones:
  1. La primera petición. Todo lo que se ha metido en un formulario es serializado en una variable oculta.
  2. El postback. Estas son las peticiones posteriores a la primera. Aquí ya contamos con la variable oculta que antes de nada se deserializa para aplicar cambios en los controles.

Cuando un usuario solicita una página .NET estos son los pasos que se siguen:
  1. El navegador realiza la petición
  2. Inicialización del framework de la página: .NET genera todos los controles de la página .aspx. Aquí es donde .NET dispara el evento page.Init() Si la página ya había sido solicitada deserializa los datos de estado y aplica los cambios pertinentes en campos de texto o selecciones de listas desplegables.
  3. Inicialización del código del usuario: estamos en el evento Page.Load(), aquí es donde se puede personalizar la página o cargar datos en los controles, etc... ¿Cómo puede un programador distinguir si la página se carga por primera vez? con if (!IsPostBack). De todas formas conviene tener inicializados los controles desde sus propiedades para no cargar el viewstate.
  4. Validacion: si hemos incluido controles de validación el formulacio en esta fase se pasarán los datos por ese filtro. Todo de forma automática, aunque si queremos preguntar si la página es válida podemos ver la propiedad Page.IsValid.
  5. Soporte de eventos: una vez la página está cargada y validada en el servidor se da respuesta a los eventos, que pueden ser de dos tipos:
    1. Inmediatos: los generados por botones de submit o cualquier control que haga postBack().
    2. Los eventos de modificación: cuando se modifica el contenido en un control o una se cambia una selección por ejemplo. En caso de tener la propiedad de AutoPostBack a true se ejecutan de inmediato y si no lo hacen al enviar la página.
  6. PreRender: esta es la fase previa antes de enviar la respuesta al servidor. Aquí se suele aprovechar para asociar datos a controles.
  7. Envío de respuesta al navegador.
  8. Limpieza. Tras mandar la respuesta se ejecuta el evento Page.UnLoad(). Aquí podemos hacer limpia de objetos, y lo que no hagamos lo hará el recolector de basura. Finalmente se ejecutará el evento Page.Disposed().
Así como se suele personalizar el método Page_Load también podriamos hacer lo propio con los demás métodos que forma parte de este ciclo:
private void Page_Init(object sender, System.EventArgs e)
{
...
}

private void Page_Load(object sender, System.EventArgs e)
{
...
}

private void Page_PreRender(object sender, System.EventArgs e)
{
...
}

private void Page_UnLoad(object sender, System.EventArgs e)
{
...
}

Generalmente solo se reescribe el método Page_Load.


Supongamos un equipo con dos particiones:
1.- Una con windows 98 o XP
2.- La otra con windows2000 o 2003

Y ahora queremos meterle un linux. Para eso habra que hacer sitio para una particion,
ya sea con el partition magic, o con un liveCD con herramientas tipo parted.

Puede que al instalarte un linux (una debian sarge por ejemplo), el gestor de arranque
grub te detecte todas las particiones pero al intentar arrancar la windows2000 puede que te diga:
El siguiente archivo no se encuentra o esta dañado: system32/ntoskrnl.exe
Que putada, mi brigada!!

Bueno, me ha pasado un par de veces y las dos veces tenia la misma solucion.
Hay que editar el fichero boot.ini de windows (del XP o del 2003). Ese boot.ini es
el equivalente al lilo.conf o al grub.conf o al menu.lst de linux.
Con un win98 y un w2000 puede tener un aspecto asi:
[boot loader]
timeout=30
default=C:
[operating systems]
C:="Microsoft Windows"
multi(0)disk(0)rdisk(0)partition(2)WINNT="Microsoft Windows 2000 Server" /fastdetect

Que pasa si hago una consulta a una BD y quiero mostrar el resultado en una tabla HTML?
Este es un ejemplo en que partiendo de una tabla de 4 columnas
(vale, podria ser mas dinamica), se genera una tabla
tomando los nombres de columna del propio resultado.

LogomendaCuánto tiempo. Pues resulta que haciendo uso del inframework dordoka se ha dado inicio al experimento de crear una web. Se trata de gomenda.net, una web colaborativa de recomendaciones de temas diversos: películas, música, locales, webs, etc... con un sistema de votación muy simple en el que se elige si bien, regular o mal. Ahora mismo es una versión inicial con muuchos fallos. Los pasos seguidos hasta ahora han sido:
  • Tener una idea más o menos vaga
  • Darle vueltas a la idea, pensar un nombre
  • Decidir si empezar de 0 o tirar de algo hecho
  • Asentarse sobre el tambaleante framework propio
  • Poner en marcha la versión pre-alfa
  • Postear en algún sitio: eh! estamos aquí!
  • Avisar a google
Ahora hay que ir metiendo mejoras, el todo-list es interminable. Los pasos a seguir son:
  • Avisar a los amiguetes para que ser objeto de burla, mofa, befa y escarnio
  • Postear de vez en cuando
  • Ir metiendo mejoras
  • Volver a escribir un post

A vueltas con el tema de final de linea, los tokens de un string, y la entrada formateada o funciones scanf-fscanf.

subscribe via RSS