Posts
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 */
/** 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 */
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í:
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:
¿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:
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
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:
- La primera petición. Todo lo que se ha metido en un formulario es serializado en una variable oculta.
- 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:
- El navegador realiza la petición
- 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.
- 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.
- 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.
- 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:
- Inmediatos: los generados por botones de submit o cualquier control que haga postBack().
- 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.
- PreRender: esta es la fase previa antes de enviar la respuesta al servidor. Aquà se suele aprovechar para asociar datos a controles.
- EnvÃo de respuesta al navegador.
- 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().
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.
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.exeQue 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
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.
- 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
- 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
subscribe via RSS