Posts

Un elemento simpático del mundillo unix era cuando te logeabas en el sistema y te salía una frase ingeniosa aleatoria, cosa que se puede hacer con el juego fortune. Fortune es un programa que simplemente muestra una frase sacada de un fichero cargado de frases y proverbios. Puede ocurrir que al instalarlo no funcione, por ejemplo en un debian. Es un problema de PATH, ya que el programa fortune se guarda en el clasico directorio /usr/games Podemos añadirlo al path o usar la ruta completa para ejecutarlo. En cuanto al contenido de las fortunes, a veces te puedes encontrar guiños de un frikismo profundo:
pello~$ /usr/games/fortune
Klatu barada nikto.
pello~$
Además de otros refranes, proverbios y frases lapidarias:
pello~$ /usr/games/fortune
Eres más falso que Windows 95 a prueba de fallos.
                -- Yo.
pello~$

Bueno, vamos a ver si en 21 dias se va creando codigo c++ y se puede aprender este lenguaje de forma ordenada. Se esta probando este codigo con gcc.

Ejemplo de listas enlazadas usando punteros.

 

/**
* lista.c
* Muestra el uso de estructuras
* Compilacion: gcc -o lista lista.c
* curso de C
*/


    

Supongamos que nos hace falta una máquina linux virtual dentro del propio linux. Podemos descargarnos alguna imagen que ya este hecha o hacerla nosotros mismos. Lo primero de todo, debemos crear un disco duro para la máquina virtual, y para eso se crea un fichero especial con un tamaño determinado:
qemu-img create -f qcow midisco.img 0.5G
Con eso creamos un disco de 500 megas. Se supone que podemos poner 500M.

3.1 Themes

Los themes son necesarios porque para personalizar algunos controles de .NET no basta con las hojas de estilos.

Para guardar el theme debe crearse una carpeta llamada App_Theme y dentro de ella otra carpeta por cada theme. Dentro de los themes podemos tener tantos archivos skin como queramos.

Los ficheros de skin contienen listas de controles web personalizados: por ejemplo, cajas de texto de determinado color.

Aplicación de themes
Para aplicarlos hay distintas maneras. Para aplicar un theme por página debemos meter en la directiva <%@ Page el atributo Theme:
<%@ Page Language=... Theme="SuperTheme" %>

Para establecer el theme en toda la web a través del web.config:
...
<system.web>
<pages theme="SuperTheme" />
</system.web>
...

En la programación también podemos cambiar el theme al vuelo, pero hay que hacerlo en la fase Page_PreInit:

protected void Page_PreInit (object sender, EvenArgs e)
{
// Vamos a suponer que establecemos un theme a través de una variable de sesión
if (Session["Theme"] == null)
{
// no hay theme, o dejamos en blanco o ponemos uno por defecto
Page.Theme = "";
}
else
{
Page.Theme = (String)Session["MiTema"];
}
}

Estilos
Se pueden incluir ficheros css para que los themes tengan estilos. Los ficheros deben meterse en la carpeta del theme y luego hay que hacer un pequeño cambio en la página para que incluya el css: convertir el head en un control de servidor poniéndole en runat.
...
<head runat="server">
</head>
...
En caso de conflicto entre las propiedades de un control y el theme, el theme gana.

3.2 Master Pages

Las master pages son páginas asp.net que sirven como plantilla a una web. La master page debe crearse como un nuevo elemento o a partir de una página ya hecha. Está página se personaliza y se pone a punto por un lado y por otro se establecen los placeholders, es decir lugares de la página donde meteremos contenido cambiante. Para agregar una masterpage, entre todas las opciones debemos seleccionar la de "página principal".

Para personalizar la página podemos meter diseño de bloques, hojas de estilo y todo lo habitual. Aquí tenemos parte de una masterpage. Podemos ver que cambia la declaración y que se meten placeholders como el del title:
<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title> <asp:ContentPlaceHolder id="head" runat="server">
</asp:ContentPlaceHolder>
</title>

<link href="StyleSheet.css" rel="stylesheet" type="text/css" />
</head>
<body>
...

Lo siguiente es crear páginas de contenido. Se pueden crear a mano y luego personalizar (hay que quitar etiquetas <body> etc...), pero a través de visual studio lo hace automático y creando todos las etiquetas necesarias.

Para eso agregamos una nueva página y seleccionamos el checkbox de página principal. Ahí seleccionamos una master page y el visual nos crea una página con etiquetas Content. Esas Content se corresponden con los placeholders de la master:
<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Inicio.aspx.cs" Inherits="Inicio" Title="Página sin título" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
Este es el inicio
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<h1>Inicio</h1>
Este es el inicio
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="pie" Runat="Server">
Página generada superRápido
</asp:Content>

Si desde código quisieramos alterar partes de la página master, en la clase de la master tendríamos que meter métodos set/get para hacerlos accesibles.

Puede cambiarse la master page al vuelo desde código usando la propiedad: Page.Master
Tambien en el web.config se puede establecer la página master:
...
<system.web>
<pages masterPageFile="SuperMaster.master" />
</system.web>
...


Imaginemos que tenemos un servidor de correo con sendmail y
multiples dominios. Para distinguir las cuentas con mismo nombre y distinto dominio hemos creado las cuentas asi:
info@dominio.com -> cuenta unix: infor.dominio.com
info@otrodominio.com -> cuenta unix: info.otrodominio.com
Dentro de sendmail usamos el mecanismo virtusertable para mapear las direcciones de email con las cuentas reales

El tipico ejemplo de paso de parametros por referencia en c suele ser un intercambio
entre enteros, al que se podria añadir un ejemplo con cadenas de
texto que ademas son punteros.
/**
* $Id$
* ejemplo de swap en c
* Pello Xabier Altadill Izura
*/


    

Sistema de ficheros en unix/linux se ejecuta "ls /" para ver desde la raiz. Hay directorios que pueden cambiar segun la distribucion que sea. Las de linux se parecen bastante, pero en general tienen lo mismo.
  
/
+-/bin : los binarios MAS basicos como: ls, cd, pwd, cp, rm
+-/boot : archivos de arranque, imagen de kernel.
+-/cdrom : punto de montaje del cdrom
+-/etc : configuracion. Todas las configuraciones (red,scripts de inicio,firewall,usuarios)
+-----/mail/ : configuracion de sendmail
+-----/rc.d/ : ficheros con scripts de inicio de sistema
+-----/sysconfig/ : configuracion de sistema (red,rutas,interfaces)
+-/dev : todos los dispositivos de sistema (pantalla,raton,impresora,disco duro) representados por un fichero
+-/home : directorios particulares de los usuarios
+-/lib : librerias de sistema, modulos de kernel
+-/lost+found : directorio en el que se guarda contenido perdido tras un chequeo de disco
+-/mnt : punto de montaje (opcional) para particiones locales, remotas (nfs),..
+-/proc : sistema de ficheros que refleja el estado y configuracion del sistema
+-/sbin : binarios basicos que influyen en configuraciones (firewall, rutas,) de kernel
+-/usr : binarios de servidores, programas, manuales, documentos, etc (este ocupa el que mas)
+-/opt : binarios opcionales o programas que no se instalan desde el principio.
+-/root : directorio home de superusuario.
+-/tmp : directorio temporal, utilizado para guardar sesiones, sockets, etc..
+-/var : directorio en el que se guarda informacion variable: logs, BBDD (postgres, mysql)
+-----/log/ : todos los logs de sistema y servidores
+-----/lib/pgsql/ : postgres
+-----/lib/mysql/ : mysql
+-----/spool/mqueue/ : cola de correo del servidor (entregas sendmail)
+-----/spool/mail/ : buzones de correo
  

Bueno, pese a que este no es el tema que más interesa hay que verlo: el de las aplicaciones para entornos de ventanas. Hay que tener cuidado a la hora de compilar. Este tema se maneja en entornos Case o IDEs como Visual Studio. Veamos el ejemplo mínimo: /** * Formularios.cs * Ejemplo de uso de formularios windows. * A la hora de compilar, para ejecutar como aplicación de windows * y para que no salga una ventana de DOS, hay que usar estas opciones * csc /t:winexe Formularios.cs o en su defecto * csc /r:System.Windows.Forms.dll /t:winexe Formularios.cs * */

Vamos a conocer algunas clases útiles de C#, presentes en cualquier otro lenguaje. Veamos el práctico temporizador con Timer

/**
* Temporizador.cs
* Muestra el uso de la clase Timer para crear temporizadores.
* Se puede asociar un evento a un temporizador para que el programa
* reaccione al cabo de x tiempo.
* Info sobre el standar http://msdn.microsoft.com/net/ecma
*/


    

subscribe via RSS