User avatar by pello in November 4, 2005, 10:21 am

Hay muchas aplicaciones viejas que guardan celosamente sus datos en el vetusto formato DBF.

De cara a las migraciones puede resultar interesante pasar esos datos a un GBD relacional. Algunas ya tienen herramientas capaces de leer ficheros DBF, pero si no es asi podemos crear unos CVS para importar los datos facilmente.

Este pequeño programa perl se le indica un directorio donde hay ficheros DBF y los convierte de uno en uno. Tiene distintas opciones como el separador de campos, todo...

Read more...  | 0 comments |  PELMAlink |  2315 reads
User avatar by pello in November 3, 2005, 8:50 am

A estas alturas de la existencia de las aplicaciones web sabido es que la validacion de datos es un requisito fundamental para que un usuario malicioso no nos la meta doblada. Practicamente todos los lenguajes disponen de un sistema de expresiones regulares que facilitan enormemente la validacion de datos entre otras tareas de interes.

En el caso de php no es menos. Dispone del mecanismo regexp tanto en formato Posix como el de Perl, aunque cualquiera que este familiarizado con el uso de regexp le...

Read more...  | 2 comments |  PELMAlink |  2471 reads
User avatar by pello in October 30, 2005, 9:32 am
La informatica ha sido retratada en el cine de manera mas o menos afortunada. Generalmente ha sido desafortunada. En cualquier caso ha tenido apariciones muy destacables incluso en clasicos.
Cabe destacar que una parte de la ingenieria informatica como la Inteligencia Artificial (un area tan grande y vieja como la propia informatica) siempre ha tenido papeles destacados de supervillano.
Esta es una pequeña lista-recordatorio en la que se nombran peliculas en las que la informatica ha tenido...
Read more...  | 2 comments |  PELMAlink |  1259 reads
User avatar by pello in June 15, 2005, 4:46 pm
Tuneles IP_GRE

Con linux se pueden crear VPNS con tuneles de una forma parecida a los CISCO.
Basicamente se trata de unir dos redes locales usando un interfaz de red virtual que vamos a crear.
En cada extremo se crea un interfaz de tunel. Este interfaz es punto a punto, debe especificarse la ip publica remota a la que conectarse y las ips privadas de cada punto. Una vez metidas las interfaces se pueden meter rutas para hacer que distintas redes se vean a traves de estos tuneles.
192.168.100.0/24... 
Read more...  | 4 comments |  PELMAlink |  5676 reads
User avatar by pello in May 23, 2005, 6:05 pm
Como replicar una estructura de directorios unix?
A veces puede ser necesario replicar un arbol de directorios manteniendo permisos y propietarios PERO sin replicar los ficheros (porque ocupan mucho espacio, por ejemplo).
unix te posee
Se supone que se puede hacer en dos pasos comprimiendolos en un tar. 1. ejecutar el comando find para sacar un listado de directorios Imaginemos que queremos replicar...
Read more...  | 1 comments |  PELMAlink |  1441 reads
User avatar by pello in May 20, 2005, 1:11 pm
Al mysql se le pueden variar ciertas variables para que soporte mas conexiones simultaneas, etc.. tal y como se explica aqui. Todo se reduce a modificar los valores de /etc/my.cnf Estan muy bien unos ficheros de ejemplo que trae la propia distribucion. Se puede buscar por nombre: `my-huge.cnf', `my-large.cnf', `my-medium.cnf', y `my-small.cnf'
Ahi...
Read more...  | 0 comments |  PELMAlink |  1371 reads
User avatar by pello in May 18, 2005, 4:17 pm
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.
Read more...  | 4 comments |  PELMAlink |  2325 reads
User avatar by pello in May 1, 2005, 12:46 am
Cuando se programa un script de perl, si le vuelves a echar un ojo al programa cuesta un poco reconocer la paternidad del codigo. Conforme lo haces no te das cuenta pero cuando ves toda la ristra piensas "¿y esto lo he hecho yo???" ¡Pues no es para tanto! bienvenidos a python. May the source be with you.. pilla bien de cafeina, la necesitaras
Lo primero que se puede decir: es un...
Read more...  | 4 comments |  PELMAlink |  1276 reads
User avatar by pello in March 17, 2005, 12:03 pm
Quien no tiene mono de C# ? xD
El ejemplo minimo de c# sobre un linux, en concreto un redhat 9.
Choca un poco encontrarse con un exe en tu sistema linux, en fin
aqui se muestra el ejemplo basico, la compilacion y ejecucion
/**
* Fichero HolaNena.cs
* compilacion: mcs HolaNena.cs
* Ejecucion: mono HolaNena.exe
*/

// importamos la libreria basica de sistema
using System;

// Definimos la clase Saludo
class Saludo
{
   // Funcion Main
   static void Main() {

      // WriteLine escribe... 
Read more...  | 0 comments |  PELMAlink |  1216 reads
User avatar by pello in March 15, 2005, 5:51 pm
En el acceso a discos parece ser que el Kernel usa una configuracion bastante floja y conservadora y se puede mejorar. Gracias al comando hdparm podemos mejorar el rendimiento de manera muy apreciable. Los discos IDE tienen capacidades que se pueden aprovechar como el DMA, las transferencias de 32bits y el acceso a multiples sectores a la vez. Como es el disco? Podemos comprobar las capacidades del disco usando
[root@firewall root]# hdparm -i /dev/hda

/dev/hda:

 Model=ST340014A, FwRev=3.06, SerialNo=3JX8JGSJ
... 
Read more...  | 2 comments |  PELMAlink |  1182 reads
User avatar by pello in March 7, 2005, 8:31 pm
Leer y escribir en un fichero de texto con VB .NET es muy facil.
Las funciones constructoras tienen muchas mas
opciones de las que aqui se ven.
Este es un ejemplo encapsulado en una clase:
Imports System.IO

Public Class Fichero

    'constructor por defecto
    Public Sub New()
        nombrefichero = "fichero.txt"
    End Sub

    'Constructor parametrizado
    Public Sub New(ByVal nombre As String)
        nombrefichero = nombre
    End Sub

    Private nombrefichero As String

    'guardar:... 
Read more...  | 0 comments |  PELMAlink |  2667 reads
User avatar by pello in March 4, 2005, 8:17 pm
Ejemplo simple de transaccion de BD con una
conexion simple de oleDB.
Private Sub modificar()


  Dim conexion As System.Data.OleDb.OleDbConnection
  Dim comando As System.Data.OleDb.OleDbCommand
  Dim datos As System.Data.OleDb.OleDbDataReader
  Dim transaccion As OleDbTransaction

  Dim cont As Integer

  Dim conString As String
  Dim sentencia As String
  Dim contador As Integer
  Dim listaTMP As DropDownList




  cont = 0
  contador = 0

  'String de conexion para una bd access
  conString = "Provider=Microsoft.Jet.OLEDB.4.0;"... 
Read more...  | 0 comments |  PELMAlink |  1277 reads
User avatar by pello in February 28, 2005, 8:02 pm
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.
Private Sub consultaDetalle()
        'Introducir aquí el código de usuario para inicializar la página
        Dim conexion As System.Data.OleDb.OleDbConnection
        Dim comando As System.Data.OleDb.OleDbCommand
... 
Read more...  | 0 comments |  PELMAlink |  1344 reads
User avatar by pello in February 21, 2005, 7:34 pm
Ejemplo basico de consulta a BD desde ASP .NET utilizando OleDB.
Imports System.Data.OleDb


Public Class WebForm1
    Inherits System.Web.UI.Page
    Protected WithEvents ddlEmpleados As System.Web.UI.WebControls.DropDownList
    Protected WithEvents Label1 As System.Web.UI.WebControls.Label

#Region " Código generado por el Diseñador de Web Forms "

    'El Diseñador de Web Forms requiere esta llamada.
    <System.Diagnostics.DebuggerStepThrough()>vate Sub InitializeComponent()

... 
Read more...  | 0 comments |  PELMAlink |  1105 reads
User avatar by pello in February 14, 2005, 8:37 pm
El ejemplo minimalista de una pagina asp.net con su extension aspx
Simplemente tiene un control label y muestra el mensaje standar de iniciacion
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>

	<!-- Este script se ejecutara en el servidor -->
	<script language="VB" runat="server">
		Public Sub Page_Load()
			lblSaludo.Text = "Hola, nena"
		End Sub
	</script>
	<HEAD>
		<title>Hola nena</title>
	</HEAD>
	<body>
		<form... 
Read more...  | 0 comments |  PELMAlink |  1247 reads
User avatar by pello in February 11, 2005, 7:09 pm
Jo, siempre se me olvidan los dos pasos.

    'Metodo añadir estudiantes
    Public Function addEstudiantes(ByVal unEstudiante As Estudiante) As Integer
        If arListaestudiantes Is Nothing Then
            ReDim arListaestudiantes(0)
        Else
            ReDim Preserve arListaestudiantes(UBound(arListaestudiantes) + 1)
        End If
        arListaestudiantes(UBound(arListaestudiantes)) = unEstudiante

    End Function
Read more...  | 4 comments |  PELMAlink |  2595 reads
User avatar by pello in February 4, 2005, 5:50 pm
Este es el tipico acceso a BD desde paginas ASP
El mas cutre: abrir una bd access que se encuentra en el mismo directorio que la pagina ASP.
<!-- ejemplo de acceso a BD -->

<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>Pagina ASP 09 - Acceso a BD access</title>
</head>
<body>
Ejemplo... 
Read more...  | 0 comments |  PELMAlink |  1149 reads
User avatar by pello in February 3, 2005, 9:48 am
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
Pero como se configura squirrelmail para que distinga esto
// pello - dentro de src/compose.php
//... 
Read more...  | 3 comments |  PELMAlink |  1211 reads
User avatar by pello in February 2, 2005, 9:59 am
Ejemplo de formulario por ASP. Se envia a si mismo.
ASP distingue la forma de recibir las variables si son por GET o
POST utilizando distintas funciones.
<!-- ejemplo de formulario -->

<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>Pagina ASP 08 - Ejemplo de formulario POST</title>
</head>
<body>
Ejemplo... 
Read more...  | 4 comments |  PELMAlink |  1511 reads
User avatar by pello in February 1, 2005, 4:35 pm
Un par de ejemplos supersimples de funciones y el uso de librerias.
Ejemplo de ASP con funciones simples:
<!-- ejemplo de libreria -->

<!-- procedimiento para mostrar cabecera -->
<%
Sub cabecera(titulo)
%>
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>Pagina ASP <%=titulo %></title>
</head>
<%
end... 
Read more...  | 1 comments |  PELMAlink |  1244 reads
User avatar by pello in January 31, 2005, 11:41 am
Para cuando te aprendes esto ya estara ipv6 en todas partes. Bueno, de momento solo son 20 bytes

0                                   15 16                                   31
.____________________________________________________________________________.___
| 4-bit  | 4-bit   |      8-bit       |              16-bit                  | |
|version |long.cab.|tipo de serv.(TOS)|  longitud total en bytes             | |
|________|_________|__________________|______________________________________| |
|   ... 
Read more...  | 0 comments |  PELMAlink |  1252 reads
User avatar by pello in January 30, 2005, 7:33 pm
Este es un ejemplo de POO y herencia en Visual Basic .NET
Jerarquia:
Producto
  |     
Limpieza  Alimenticio
           |       
         Carne    Fruta
Esta es la superclase padre: Producto
Public Class Producto

    'constructor
    Sub New()
        dblPrecio = 0.0
        intStock = 0
    End Sub

    'constructor parametrizado
    Sub New(ByVal precio As Double, ByVal stock As Integer)
        dblPrecio = precio
        intStock = stock
    End Sub

    'atributos
    Protected... 
Read more...  | 0 comments |  PELMAlink |  2996 reads
User avatar by pello in January 29, 2005, 12:22 pm
Vamos a ver como se montan las estructuras de control if, while, etc en ASP:
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>Pagina ASP 03 : estructuras de control</title>
</head>

<body>

<%
Dim a, b, c, d, e

a = 2
b = 6
d = 4.56
e = "No por mucho madrugar amanece mas temprano, áéíóú... 
Read more...  | 0 comments |  PELMAlink |  1236 reads
User avatar by pello in January 27, 2005, 5:13 pm
Asp es una jena que te pasas pero en fin, hay que aprender de todo
<!-- asp01.asp -->
<!-- Mi primer ASP, simplemente un saludo por pantalla -->
<html>
<head><title>Mi primera paginas ASP</title>
</head>
<body>
El primer saludo:<br>
<%
'esto es un comentario ASP
Response.write("Hola nena<br>")
%>
</body>
</html>
Otro ejemplo mas completillo:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;... 
Read more...  | 0 comments |  PELMAlink |  1363 reads
User avatar by pello in January 24, 2005, 8:45 pm
Este lenguaje es horrible.
Como se puede concebir un lenguaje de programacion que no cierra las sentencias con punto y coma???
En fin
Public Class Persona

    'constructor por defecto
    Sub New()

    End Sub

    'constructor con parametros
    Sub New(ByVal nombre As String, ByVal apellidos As String, ByVal fecha As Date)
        strNombre = nombre
        strApellidos = apellidos
        strFecha = fecha
    End Sub


    Private strNombre As String
    Private strApellidos As String
 ... 
Read more...  | 1 comments |  PELMAlink |  1512 reads
User avatar by pello in December 2, 2004, 9:53 am
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
*/

// Declaracion de funcion swap -paso de parametros por referencias-
void swap(int * a, int * b);
// swap de cadenas
void swap_cadenas(char ** a, char ** b);

int main (int argc, char *argv[], char *envp[]) {
    int a = 45, b = 89;
    char *cadena_a... 
Read more...  | 2 comments |  PELMAlink |  1837 reads
User avatar by pello in October 29, 2004, 9:51 am
Bueno, por una vez habra que permitirse un off-topic. Ya se sabe que programar y cocinar es muy similar.
Atencion porque se hacen afirmaciones sobre el origen de la tortilla que pueden dar lugar a flames.

Tortilla Howto
/**
$Id$
tortilla.c
Antes que nada:
La tortilla de patata no es tortilla española es mas bien tortilla Vasca o incluso tortilla Navarra.
http://piderdubi.iespana.es/piderubi/tortilla.htm
Si,... 
Read more...  | 3 comments |  PELMAlink |  5640 reads
User avatar by pello in October 15, 2004, 12:40 pm
Probando getline y la maldicion del fin de linea.

/**
* probando getline
* Cual es la forma optima de leer un fichero linea por linea?
* quiza getline es mejor que gets, sobre todo para casos en los que
* cada linea pueda ser muy larga.
* La variable linea es un puntero.
* Guardamos espacio con malloc y por si hay sorpresas el manual de glibc
* nos dice que con getline se okupara mas memoria de forma automatica
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int main... 
Read more...  | 0 comments |  PELMAlink |  1774 reads
User avatar by pello in October 14, 2004, 6:52 pm
Un ejemplo de uso de la libreria de regex de glibc, que trae herramientas basicas para las expresiones regulares.
/**
* regexp.c
* ejemplo ultrabasico de uso libreria de expresiones regulares de glibc
*
* Se debe incluir la cabecera regex.h
* No se comparan dos strings, se debe "crear" un regex_t con la funcion regcomp
* y luego ya comparamos
*
* (c) Pello Xabier Altadill Izura - www.pello.info
*/

#include <stdio.h>
#include <stdlib.h>
#include <regex.h>

// Programa principal.
// acepta... 
Read more...  | 1 comments |  PELMAlink |  1920 reads
User avatar by pello in October 4, 2004, 10:23 am
El grub no es un corredor de fondo marroqui, es un gestor de arranque que esta
sustituyendo a lilo en muchas distribuciones.
Hay veces que grub se desinstala o no esta del todo bien.
En el arranque podemos usar el shell de grub para reinstalar el gestor de arranque.
Se trata de decirle cual es el disco y cual es la imagen concreta de kernel que se quiere arrancar.
Alternativamente se puede usar un diskette de arranque grub para hacer lo mismo, pero
eso si, hay que conocer el fichero...
Read more...  | 0 comments |  PELMAlink |  2616 reads
User avatar by pello in September 30, 2004, 4:39 pm
..o como instalar modulos perl comodamente.
Ya se sabe, esta web se usa para anotar las tipicas cosas que siempre se olvidan. Un de ellas es invocar el shell CPAN. Que es eso del CPAN? no, no es el codigo fuente de una barra de pan.
Se trata del Comprehensive Perl Archive Network, el mega repositorio de modulos perl. Existen modules perl para todo. No es necesario listarlos, se puede contar con que existe todo lo que necesitas.
Muchas veces necesitamos uno de esos modulos y no vienen con la distribucion...
Read more...  | 0 comments |  PELMAlink |  1832 reads
User avatar by pello in September 14, 2004, 7:46 pm
Ejemplo de acceso a mysql desde c
Necesitaremos tener instalado el mysql-devel o libmysql para poder hacer que nuestro codigo C acceda a mysql. Ademas de eso debemos establecer con cuidado las opciones de compilacion:
Si tenemos alguna duda podemos ejecutar mysql_config y este nos dira los parametros que necesitamos. Veamos el "hello_world" del acceso a mysql.
/**
* mysql_basico.c
* ejemplo de uso de libmysqlclient
* Necesitamos tener instalado el libmysqlclient
*
* USO: ./mysql_basico... 
Read more...  | 0 comments |  PELMAlink |  1940 reads
User avatar by pello in September 13, 2004, 10:46 am
Un temilla liante suele ser el del FTP activo y pasivo.
Como se sabe el FTP es un protocolo que establece dos conexiones una de control (puerto 21) y otra de datos (20), las dos son TCP.
NO hay conexiones UDP. Que no!

En el FTP Activo el cliente primero inicia una conexion al puerto 21 del servidor y luego le indica al servidor que puerto va a utilizar para los datos. Entonces el servidor es el que se encarga de abrir la conexion desde su puerto 20 al puerto que le ha indicado el cliente.

(la... 
Read more...  | 4 comments |  PELMAlink |  2981 reads
User avatar by pello in September 7, 2004, 11:25 pm
A vueltas con el tema de final de linea, los tokens de un string, y la entrada formateada o funciones scanf-fscanf.
/**
* tokens.c
* 
* Codigo para probar: 
* 0. pruebas de input formateado: scanf
* 1. lectura de un fichero de properties: 
* ...
*  nombre=valor
*  nombre'=valor'
* ...
*
* 2. el uso de la funcion strtok
* 
*/

#include <stdio.h>
#include <string.h>

int main (int argc, char *argv[]) {
int i;
char prueba[] = "vamos= a ver=si nos = entendemos=o que";
// Inicializamos con null
char... 
Read more...  | 1 comments |  PELMAlink |  1832 reads
User avatar by pello in September 6, 2004, 12:53 pm
Autentificacion de directorio en apache
Tipica tonteria que siempre se olvida.
Para proteger un directorio en apache hay distintas formas y miles de opciones. Si simplemente queremos que un directorio este protegido por usuario y contraseña basta con crear un fichero de usuarios y añadir una directiva en apache.
Hay 345820982 opciones, el tema de allow, deny, ... pero esto es lo simple.

1. Crear el fichero de usuarios y a la vez un usuario:
root@linuz# htpasswd -c... 
Read more...  | 0 comments |  PELMAlink |  2314 reads
User avatar by pello in August 29, 2004, 11:28 am
Quieres recoger opciones de linea de comandos en tu programa de c?
En la libreria glibc de linux se puede usar la funcion getopt para gestionar de forma correcta los argumentos.
Este es un ejemplo con mucho printf para debug.
/**
* getopt.c
* Pequeño ejemplo de codigo que muestra el uso de la funcion getopt
* Es una funcion util para recoger parametros de programas, que va mas
* alla de recorrer el array de argumentos argv[]
*/

// dentro de la libreria unistd encontramos la funcion... 
Read more...  | 0 comments |  PELMAlink |  1725 reads
User avatar by pello in August 29, 2004, 11:27 am
Libreria standard c++
La sintaxis de inclusion de librerias puede variar segun la version y la plataforma del compilador c++.
Puede ser asi:
...
#include <iostream>
using namespace std;
...
O mas simple:
...
#include <iostream.h>
...
A lo que ibamos: al igual que en c, en c++ tenemos una libreria base para desarrollar aplicaciones. Aqui se hecha un rapido vistazo a todas ellas.

#include <iostream>
Libreria basica de entrada/salida....
Read more...  | 0 comments |  PELMAlink |  1955 reads
User avatar by pello in August 28, 2004, 9:07 pm
Capturando excepciones
Las excepciones son un mecanismo de c++ para capturar errores que se producen en tiempo de ejecucion. Un programa puede estar bien hecho pero por causas exogenas pueden producirse errores.
Mediante este sistema hacemos que el codigo sea mucho mas ROBUSTO.
/**
* Excepciones.cpp
* codigo que muestra como capturar excepciones y evitar que el programa
* finalice inesperadamente.
*
* Pello Xabier Altadill Izura
*
*/

#include <iostream.h>
#include <fstream.h>
#include... 
Read more...  | 4 comments |  PELMAlink |  2556 reads
User avatar by pello in August 27, 2004, 11:25 pm
Templates o plantillas c++
Gracias a c++ podemos definir clases-plantilla: son clases PARAMETRIZABLES por lo general entidades abstractas que se pueden concretar en algo mas concreto. El ejemplo mas claro es de las estructuras de datos tradicionales: Pilas, Listas, Colas, etc..
Esas estructuras pueden contener distintos tipos de datos: enteros, strings, objetos,...
Debemos reescribir la logica de cada estructura para cada tio de dato? NO! Podemos definir una clase plantilla para la Lista,...
Read more...  | 1 comments |  PELMAlink |  2222 reads
User avatar by pello in August 26, 2004, 11:50 pm
Programacion orientada a objetos
Es probable que te toque hablar con amiguetes que programan en la lengua de Mordor (visualbasic) o gente que programa en c ofuscado, o lo que es peor, desconocidos que te dicen que "programan" en HTML; estos intercambios de experiencias, esas afirmaciones sobre rendimientos de ejecucion pueden hacer tambalearse los cimientos de tu fe en la POO.
Gracias a estas anotaciones rescatamos del olvido las excelencias de la POO y nos armamos de argumentos ante los herejes...
Read more...  | 4 comments |  PELMAlink |  1803 reads
User avatar by pello in August 25, 2004, 4:33 pm
Matando procesos a mansalva!! En ocasiones nos encontramos con un huevo de procesos que queremos matar, y se puede probar con el comando killall pero no siempre cuela.

Este seria el tipico panorama para matar:
[root@linuz]# ps -axf
  PID TTY      STAT   TIME COMMAND
    1 ?        S      0:25 init [3]
    2 ?        SW     0:01 [keventd]
    3 ?        SW     0:00 [kapmd]
    4 ?        SWN    0:00 [ksoftirqd/0]
    6 ?        SW     0:00 [bdflush]
    5 ?        SW    29:26 [kswapd]
... 
Read more...  | 1 comments |  PELMAlink |  1824 reads
User avatar by pello in August 24, 2004, 8:42 pm
Este script es simple pero util. sirve para poder hacer transferencias de ficheros por ftp desde tareas programadas, ya que es un ftp NO interactivo.
El script se llama ftpartomatico.sh
#!/bin/sh

# FTP artomatico
# Pello Xabier Atadill Izura
# a este script habra que darle permisos de ejecucion: 'chmod 755 ftpartomatico.sh'
# Bastante util para mover un dump de sql o un tar.gz

echo "Ejecutando `basename $0`"

# parametros modificables
USUARIO=gane1warro
PASSWORD=conquewarro
HOSTREMOTO=lanzadera.hacienda.mec.es
SUBIR=bombalogica.tgz
BAJAR=mideclaracion.pdf

#... 
Read more...  | 15 comments |  PELMAlink |  3470 reads
User avatar by pello in August 22, 2004, 1:01 am
el preprocesador
Cuando se compila un programa de c++ previamente se hace un preprocesamiento en el que se revisan determinadas variables de preprocesador. Con ellas lo que se consigue es que el compilador modifique el codigo fuente del programa antes de crear el ejecutable.
Vamos varios usos utiles.
/**
* Preprocesador.cpp
* Programa c++ que muestra el uso del preprocesador. 
*
* Pello Xabier Altadill Izura
* Compilacion: g++ -o Preprocesador Preprocesador.cpp
*
*/

// include se utiliza... 
Read more...  | 0 comments |  PELMAlink |  1240 reads
User avatar by pello in August 21, 2004, 2:56 pm
Entrada y salida
A vueltas con el flujo (cin cout), vamos a ver un uso mas extendido del habitual.
De paso conoceremos algunas de las trampas que nos esperan con los flujos, sobre todo por el tema de buffers.
Veamos este ejemplo comentado
/**
* Flujos.cpp
* Programa para mostrar el uso de flujos
* 
* Pello Xabier Altadill Izura
* Compilacion: g++ -o Flujos Flujos.cpp
*/

#include <iostream.h>

// Disponemos de varios flujos: 
// cin : para la entrada de distintis tipos de datos... 
Read more...  | 0 comments |  PELMAlink |  2730 reads
User avatar by pello in August 20, 2004, 11:50 pm
Clases dentro de Clases
Una clase puede ser el atributo de otra clase.
Veamos como metemos la clase soldado dentro del tanque, esta seria la cabecera:
/**
* Tanque.hpp
* Clase que define el objeto Tanque . El objeto tanque estara lleno
* de Objeto soldados, lo que nos sirve para demostrar el uso de clases
* como atributos, etc..
*
* Pello Xabier Altadill Izura
*
*/

#include <iostream.h>
#include "Soldado.hpp"

class Tanque {
    public:
        // constructores
        Tanque();
... 
Read more...  | 0 comments |  PELMAlink |  1479 reads
User avatar by pello in August 19, 2004, 10:11 pm
Un ejemplo simple de pthread. Un hilo debe ir asociado a una funcion. Una funcion c se puede pasar como un parametro mas.
/**
* hilos.c
* Pello Xabier Altadill Izura
*  un ejemplo simplon de hilos linux
*/
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <pthread.h>

void haz_algo(int *);
void haz_algo_simple(int *);

int h1 = 0, h2 = 0;

extern int
main(void)
{
  pthread_t thread1, thread2;

printf("vamos a ver...
"); 

// creamos el primer
  if (pthread_create(&thread1,... 
Read more...  | 3 comments |  PELMAlink |  2229 reads
User avatar by pello in August 18, 2004, 6:51 pm
Servidor PPTPD unleashed!!

Vamos a la pagina por defecto del servidor pptpd de Linux mas extendido:
http://www.poptop.org/ y descargamos la ultima version en RPM o source.

Este servicio instala un fichero de configuracion:
/etc/pptpd.conf
Aqui interesa especificar la IP local y la remota del tunel:
localip 192.168.10.1 (esta es la IP que se asignara al punto local)
remoteip 192.168.10.2-254 (estas son las IP que se asignaran al punto remoto)

Asi como la IP en la que escucha el servidor. 
listen 200.15.67.78

Atencion:... 
Read more...  | 0 comments |  PELMAlink |  1885 reads
User avatar by pello in August 17, 2004, 11:40 pm
Variables/Funciones estaticas Dentro de las clases podemos definir atributos y metodos estaticos. Tienen de particular que son accesibles sin necesidad de definir una clase y que su valor es EL MISMO en todas los objetos que se vayan creando de una clase. Es como una variable global de una clase.
Con este ejemplo se ve su uso, y de paso se revisa el tema de punteros a funciones.
(si, has leido bien).
/**
* Soldado.hpp
* Clase que define el objeto soldado muestra el uso de variables... 
Read more...  | 0 comments |  PELMAlink |  1489 reads
User avatar by pello in August 16, 2004, 11:01 pm
GDB Bueno venga, ya vale de llenar nuestro codigo de printf("kk") para depurarlo y vamos a usar el gdb. Una herramienta oscura a la par que poderosa. Aqui anoto los cuatro comandos basicos.
Preparando el terreno Primero compilamos el codigo con el flag -g para una mejor compilacion.
Se genera una tabla de simbolos mejorada
linuz# gcc -g pogama.c -o pogama
Aunque si queremos una mayor depuracion podemos usar el flag -ggdb que generara informacion mas especifica de gdb.
linuz#... 
Read more...  | 0 comments |  PELMAlink |  1446 reads
User avatar by pello in August 15, 2004, 2:11 pm
La herencia multiple
Una de las oportunidades que nos ofrece el lenguaje c++ es la posibilidad de que un objeto tenga la herencia de mas de una clase; esta ventaja fue considerada por los desarrolladores de Java como una pega y la quitaron, e incluso hay desarrolladores de c++ que prefieren evitar este tipo de herencia ya que puede complicar mucho la depuracion de programas
Para ilustrar un caso de herencia multiple hemos definido la superclase Habitante; de ella heredan dos clases distintas:...
Read more...  | 0 comments |  PELMAlink |  1589 reads
User avatar by pello in August 14, 2004, 1:50 pm
La herencia
Como bien se sabe la herencia no se reparte: se descuartiza. Bromas aparte, la herencia constituye una de las herramientas mas poderosas de culto OO. Si una clase hereda de la otra, lo que hereda son todos sus atributos y metodos.
Ademas de heredarlos puede sobreescribirlos, tanto los constructores-destructores como los metodos convencionales.
Veremos un ejemplo claro que resume lo que se puede hacer y los efectos de la herencia
Por un lado vemos la clase generica...
Read more...  | 0 comments |  PELMAlink |  1607 reads
User avatar by pello in August 13, 2004, 12:13 pm
Arrays
Se dice arrays o arreglos? en fin.
En c++ podemos definir y usar los arrays casi como en C. Ademas tenemos la ventaja de poder crear arrays de objetos. Veamos un programa en c++ que juega con los arrays:
/**
* ArrayEjemplo.cpp
* Clase que inicializa y maneja algunos arrays
*
* Pello Xabier Altadill Izura
*
* Compilado: g++ ArrayEjemplo.cpp -o ArrayEjemplo
*/


#include <iostream.h>

// Funcion principal
int main () {

// Declaramos dos arrays de enteros de 15 elementos [0..14]
int... 
Read more...  | 0 comments |  PELMAlink |  1325 reads
User avatar by pello in August 12, 2004, 12:42 pm
Sobrecarga y valores por defecto
En un clase se pueden sobrecargar los metodos y los constructores, e incluso se pueden asignar valores por defecto a los parametros (como en php). Veamos el ejemplo del coche un poco mas desarrollado.
/**
* Coche.hpp
* Clase que representa un coche
* 
* Pello Xabier Altadill Izura 
*
*/
#include <iostream.h>


class Coche {
private:
	char *marca;
	int cilindrada;
	int caballos;
	enum marcha { Primera, Segunda, Tercera, Cuarta, Quinta, Pto_Muerto};

public:
	Coche();
	Coche(int... 
Read more...  | 5 comments |  PELMAlink |  1583 reads
User avatar by pello in August 11, 2004, 1:24 pm
Las referencias
Una referencia es otra forma de acceder a un dato, una especie de alias. Cualquier operacion sobre una referencia afectara a ese dato al que hace referencia. Veamos un ejemplo simple:
/**
* Referencias.cpp
* Programa que muestra el uso de referencias
* 
* Pello Xabier Altadill Izura 
*
* Compilado: g++ Referencias.cpp -o Referencias
*/

#include <iostream.h>

int main() {

	// Definimos un dato y su referencia
	int numero;
	int &referenciaNumero = numero; // Ahi se... 
Read more...  | 1 comments |  PELMAlink |  1269 reads
User avatar by pello in August 10, 2004, 10:32 am
Los punteros
Acaso creiais que en c++ no habia punteros? eso solo ocurre en Java. Los punteros no contienen datos, contienen direcciones de memoria. Para cada tipo de dato hay que definir un puntero.
/**
* Puntero.cpp
* 
* Clase que muestra las direcciones de variables
* Pello Xabier Altadill Izura
* Compilar: g++ Puntero.cpp -o Puntero
*/

#include <iostream.h>

int main () {

// Creamos varias variables:
int pruebaInt = 99, prueba2Int;
short pruebaShort = 34;
char carac = 'a';
int... 
Read more...  | 11 comments |  PELMAlink |  3160 reads
User avatar by pello in August 9, 2004, 11:10 am
Iteracion con etiquetas
Es la manera primigenia de implementar iteraciones pero lo cierto es que el uso de etiquetas no se recomienda ya que es dificil de entender un programa con etiquetas. A ser posible hay que evitarlas.
/**
* Loop.cpp
* 
* Programa que muestra como usar iteraciones
* Pello Xabier Altadill Izura
* Compilar: g++ Loop.cpp -o Loop
*/

#include <iostream.h>

// Programa principal
int main () {

	cout << " Hola, vamos a mostrar un loop " << endl;

	//Inicializamos variables
	int... 
Read more...  | 0 comments |  PELMAlink |  1439 reads
User avatar by pello in August 8, 2004, 9:50 pm
Tu primera clase c++ No hay que perder de vista el hecho de que c++ es un lenguaje orientado a objetos.
Sin animos de volver a explicar que es la POO, los beneficios que constituye vamos a limitarnos a resumir. Una clase c++ es la representacion de un objeto. Un objeto es una entidad formada por sus atributos y sus metodos.
Con el afan de hacer las cosas ordenadamente, siempre se separa la definicion de la clase en un fichero de cabedeceras (extension .hpp, similar al .h de lenguaje c) y la implementacion...
Read more...  | 0 comments |  PELMAlink |  1324 reads
User avatar by pello in August 7, 2004, 3:06 pm
El camnio de c++ es largo, pero se sigue avanzando. Veamos las funciones inline, un recurso interesante para mejorar el rendimiento.
/**
* Inline.cpp
* Programa para probar funciones Inline
* Las funciones Inline no se compilan como funciones aparte,
* lo que se hace al compilar es añadir el contenido de la funcion haya
* donde se se invoca. Con lo que es mucho mas rapido de ejecutar
* y ademas nos da la limpieza de separar el codigo.
*
* Pello Xabier Altadill Izura 
*
* Compilado: g++... 
Read more...  | 4 comments |  PELMAlink |  5262 reads
User avatar by pello in August 6, 2004, 10:17 am
Bueno, conociendo los tipos de datos ya podemos empezar a operar con ellos. Dentro de c++ tenemos los tipicos operadores matematicos + - * / y tambien los operadores unarios (++ --) En este primer ejemplo vemos operadores unarios y la asignacion multiple.
/**
* Operadores.cpp
* Programa para probar algunos operadores
* Pello Xabier Altadill Izura 
*
* Compilado: g++ Operadores.cpp -o Operadores
*/

#include <iostream.h>

int main () {

	// Sacamos por salida standar  un mensaje
	cout << "Vamos... 
Read more...  | 4 comments |  PELMAlink |  12197 reads
User avatar by pello in August 5, 2004, 4:40 pm
Con este (mejorable) script se comprueba un determinado servicio. Se comprueba si existe su pid y si su puerto esta abierto. En caso de no estar abierto se ejecuta el comando especificado.
En este ejemplo se ve el caso del servicio proftpd:
#!/bin/bash

# comprobador de proceso

NOMBRE=proftpd
PIDFILE=/usr/local/var/proftpd.pid
PUERTO=21
COMANDO="/etc/rc.d/init.d/proftpd restart"

echo comprobando si $NOMBRE esta OK...


if [ -f ${PIDFILE} ]
then
        echo PID [`cat ${PIDFILE}`]
        netstat... 
Read more...  | 0 comments |  PELMAlink |  1862 reads
User avatar by pello in August 5, 2004, 10:25 am
Los tipos de datos de c++ no varian mucho respecto a c y son bastante evidentes, tal y como se puede apreciar en este codigo.
/**
* Tipos.cpp
* Programa para sacar el tamaño de cada tipo de datos
* Pello Xabier Altadill Izura 
*
* Compilado: g++ Tipos.cpp -o Tipos
*/

#include <iostream.h>

int main () {

	// Sacamos el tamaño de cada tipo	
     cout << "El tamaño del int es:		"    << sizeof(int)    << " bytes.
";
     cout << "El tamaño del short es:	" << sizeof(short)... 
Read more...  | 41 comments |  PELMAlink |  7760 reads
User avatar by pello in August 4, 2004, 10:14 pm
Vamos a ver como se declaran las funciones en c++. No tiene ningun misterio, es igual que en c. Siempre hay que especificar el tipo de retorno.
/**
* Funcion.cpp
* Programa con llamada a una funcion
* 
* Pello Xabier Altadill Izura 
*
* Compilado: g++ Funcion.cpp -o Funcion
*/

#include <iostream.h>

// Funcion: llamada
int llamada (int x, int y) {
	cout << "Estamos en la funcion!!" << endl;
	return (x+y);
}

int main() {

	// Estos comentarios son propios de C++

	cout << "Vamos a llamar a la funcion.."... 
Read more...  | 0 comments |  PELMAlink |  1486 reads
User avatar by pello in August 3, 2004, 9:45 am
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. Hoy es el dia uno e incluyo el código mas simple posible.
/**
* Hello.cpp
* Programa que simplemente saca la palabra hello world por pantalla
* Pello Xabier Altadill Izura 
*
* Compilado: g++ Hello2.cpp -o Hello2
*/

#include 

int main () {

	// Sacamos por salida standar  un mensaje
	cout << "Hello World!
";

	return 0;
}

/**
*... 
Read more...  | 2 comments |  PELMAlink |  1468 reads
User avatar by pello in August 2, 2004, 12:35 pm
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...
Read more...  | 0 comments |  PELMAlink |  1938 reads
User avatar by pello in August 1, 2004, 8:45 pm
Muchas veces puede resultar interesante acceder a un servidor por consola de manera comoda, sin tener que pinchar tarjetas graficas, ni pantallas, ni teclados ni nada. Si se redirigue la salida por el puerto serie podemos acceder a la maquina como si fuera un router. Hay dos formas de redirigir la salida al puerto serie: * Por hardware: En la bios puede haber opciones para establecer que la salida salga por el puerto serie, incluso desde el ARRANQUE. Por otro lado hay que asegurarse de que en la bios...
Read more...  | 0 comments |  PELMAlink |  1744 reads
User avatar by pello in July 31, 2004, 12:37 pm
# Generado por iptables-save # necesita revision, falta el NAT para la LAN *filter :INPUT DROP [0:0] :FORWARD ACCEPT [0:0] :OUTPUT DROP [0:0] -A INPUT -i lo -j ACCEPT -A INPUT -i eth1 -p icmp -j ACCEPT -A INPUT -i eth2 -p icmp -j ACCEPT -A INPUT -i eth0 -s ip-externa-confianza -j ACCEPT -A INPUT -s 192.168.1.0/255.255.255.0 -j ACCEPT -A INPUT -p udp -m udp --sport 161 -j ACCEPT -A INPUT -p tcp -m tcp --sport 80 -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --sport 20:21 -m state --state...
Read more...  | 11 comments |  PELMAlink |  7964 reads
User avatar by pello in July 30, 2004, 9:40 am
¿ Como montamos un equipo linux que reciba logs de otros equipos, tanto unix como windows ? En Unix existe un servicio llamado Syslog que por defecto recoge los eventos del sistema que nosotros le digamos. Por defecto solo guarda mensajes locales, pero syslog es capaz de escuchar en el puerto UDP 514 para recibir logs externos. Para que el syslog acepte conexiones remotas, debemos pasarle estas opciones de ejecucion: Código: SYSLOGD_OPTIONS="-r -x -m0" Donde la opcion r es para que...
Read more...  | 5 comments |  PELMAlink |  2936 reads
User avatar by pello in July 29, 2004, 9:32 am
Ocultar o modificar banners de servidores en linux. Cuando hacemos por ejemplo un "telnet ip 25" podemos ver que servidor de correo esta instalado y su version. Es recomendable ocultar ese banner para que los programas de escaneo de puertos no revelen mas alla de un puerto abierto. Ahora que NMAP tambien saca las versiones de los servidores, habra que ponerse las pilas. Banner de sendmail Dentro de sendmail.cf Código: O SmtpGreetingMessage=$j Sendmail $v/$Z; $b Es la directiva que podemos cambiar...
Read more...  | 0 comments |  PELMAlink |  2474 reads
User avatar by pello in July 28, 2004, 10:05 am
Muchas veces las tablas de mysql se corrompen, es inevitable, el sistema gestor de bd mysql no es muy fiable(carece de integridad referencial, etc.) A veces el error esta en los ficheros MYI que albergan las tablas y basta con ejecutar un myisamchk para arreglarlo. Desde shell: Código: myisamchk mi_tabla.MYI Checking MyISAM file: mi_tabla.MYI Data records: 21991 Deleted blocks: 0 - check file-size - check key delete-chain - check record delete-chain - check index reference - check data record...
Read more...  | 0 comments |  PELMAlink |  2088 reads
User avatar by pello in July 27, 2004, 10:27 am
Cuatro cosillas para poner el postfix funcionando para un dominio y permitir el relay a una red. Bueno que pasa si quiero poner en marcha un postfix para mi dominio (campeon.net) rapido! En redhat podemos poner sendmail o postfix, no pueden convivir juntos. Si ponemos postfix puede que cree tb un binario llamado sendmail , pero es por compatibilidad. Postfix nacio con la idea de sustituir a sendmail y es mucho mas simple que este. Supongamos que tenemos un server en nuestra LAN 192.168.2.0/24 Bueno. Pues vamos...
Read more...  | 0 comments |  PELMAlink |  1581 reads
User avatar by pello in July 26, 2004, 10:05 am
Imaginemos que un gerente malvado quiere controlar a sus empleados y quiere registrar todos los accesos a la web que hacen (menos los suyos 'of course'). Usando un proxy squid o cualquier otro que genere los logs en el mismo formato, podemos hacer que se guarden en un gestor de BD para su posterior analisis. Mediante un script de perl se puede analizar el log del proxy cache SQUID y generar un fichero CSV (texto delimitado por punto y coma) para meterlo en una BD. Luego con un script de shell se crea la...
Read more...  | 7 comments |  PELMAlink |  2137 reads
User avatar by pello in July 26, 2004, 10:00 am
Contexto linux. Puede que nos interese crear un fichero swap en lugar de habilitar una particion de disco unicamente con ese fin (por ejemplo, en equipos con el particionado hecho, podriamos crear un espacio swap sin alterar el disco). Para ello podemos utilizar el comando dd, de la siguiente manera: Vamos a crear un swap de 128 megas en el fichero /var/swap Código: dd if=/dev/zero of=/var/swap bs=1000000 count=128 Con eso hemos creado un fichero de 128 megas en bloques de 1 mega, relleno de...
Read more...  | 3 comments |  PELMAlink |  1592 reads
User avatar by pello in July 24, 2004, 12:36 am

Lynx Theme for webmin

This is very simple theme for webmin based on Lynx appearence. It reduces the presence of images to achieve faster navigation, and tries to simplify webmin look-and-feel to suit Lynx browser users.
...

Read more...  | 7 comments |  PELMAlink |  18297 reads
User avatar by pello in July 23, 2004, 11:58 pm
Si, es una chorrada pero que siempre se olvida. La gestion de usuarios con mysql es un horror de los mas confuso. Primero creamos la BBDD como superusuario Código: #mysqadmin create bbdd_nueva Entramos como superusuario en la BBDD mysql (catalogo o metadatos, donde se almacena informacion de la propia BBDD). Código: #mysql -u root mysql -p Y ejecutando esto creamos un usuario con password que tiene control total de la BBDD: Código: mysql> GRANT ALL ON BBBD_NUEVA.* TO...
Read more...  | 1 comments |  PELMAlink |  1851 reads