lunes, 12 de mayo de 2014

highcharts múltiples series

Este ultimo tiempo he estado trabajando en un proyecto que tiene relación con despliegue de datos de manera gráfica.
Para comenzar el proyecto , no conocíamos librerías js que permitieran la manipulación de dichos datos, comenzamos a probar y encontramos bastantes y buenas, pero ninguna se asemeja al poderío de highcharts.

Highcharts es una librería en javascript que permite realizar infinidad de gráficos,completamente configurables,  y lo mejor de todo liviano (para todo lo que hace). aquí puedes ver algunas demos .

En este caso voy a realizar un ejemplo a modo recordatorio, en el cual utilizaremos  una librería disponible dentro de  de esta que es Highstock.
Quiero dejar un registro ya que he visto bastante info sobre este js , pero no he encontrado aún un ejemplo consistente que te permita enviar los datos desde php a la librería en json  como corresponde, sino, más bien  he visto transformaciones de lo retorna en el controlador (PHP)  en la vista (JS). También he considerado hacer el ejemplos con datos tipo "Datatime"  comúnmente llamado fecha .
Al final del post adjunto el ejemplo funcionando , es ideal que lean los pasos.
Al grano ...

1.- Levantemos nuestra html :

  1. <!DOCTYPE html>
  2. <html>
  3.     <head>
  4.         <title>Ejemplo</title>
  5.         <script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
  6.                 <script src="http://code.highcharts.com/stock/highstock.js"></script>
  7.                 <script src="http://code.highcharts.com/modules/exporting.js"></script>
  8.                
  9.    </head>
  10.   <body>
  11.         <div id="chartContainer" style="width:100%; height: 100%;position: relative;">
  12.         </div>
  13.   </body>
  14. </html>

Utilizaremos  Jquery , es posible encontrar Highcharts para "extjs"   si estás desarrollando en este  FW.
Si prestan atención, verán que hay solo 1 div en el html y que tiene id : chartContainer , este div se utilizará para crear los gráficos.

2.- Creando función :
Seguido agregamos nuestro instancia de Highcharts  dentro de los tags <script></script>  y cuando la el dom este cargada ,lanzaremos nuestro grafico :
    1.           var chart_; // contenedor del retorno de Highcharts
    2.                 $(document).ready(function() {
    3.                 });
    4.                 function CrearGrafico(data){
    5.                 options = {
    6.                         chart : {
    7.                                 renderTo : "chartContainer",
    8.                                 defaultSeriesType : 'column',
    9.                                 plotBackgroundColor : null,
    10.                                 plotBorderWidth : null,
    11.                                 plotShadow : false,
    12.                                 height : 800,
    13.                                 width : 800,
    14.                                 type : 'line',
    15.                         },
    16.                        
    17.                         legend : {
    18.                                 layout : 'vertical',
    19.                                 align : 'right',
    20.                                 verticalAlign : 'middle',
    21.                                 borderWidth : 0
    22.                         },
    23.                         credits : {
    24.                                 enabled : false
    25.                         },
    26.                         scrollbar : {
    27.                                 enabled : true,
    28.                         },
    29.                         navigator : {
    30.                                 enabled : true,
    31.                         },
    32.                         loading: {
    33.                 hideDuration: 1000,
    34.                 showDuration: 1000
    35.                 },
    36.                         rangeSelector : {
    37.                                 enabled : true,
    38.                                 selected : 6,
    39.                         },
    40.                         title : {
    41.                                 text : 'Grafico de <b>Titulo</b>'
    42.                         },
    43.                         subtitle : {
    44.                                 text : 'Grafico de <b><i>Subtitulo</i></b>'
    45.                         },
    46.                         xAxis : {
    47.                                 type : 'datetime',
    48.                                 title : {
    49.                                         enabled : true,
    50.                                         text : ' <b>Periodo</b>',
    51.                                         style : {
    52.                                                 fontWeight : 'normal',
    53.                                         },
    54.                                 showEmpty:true,
    55.                                 },
    56.                         },
    57.                         yAxis : {
    58.                                 title : {
    59.                                         enabled : true,
    60.                                         text : '<i>' + tipoDato + '</i>',
    61.                                         style : {
    62.                                                 fontWeight : 'normal',
    63.                                         },
    64.                                         showEmpty:true,
    65.                                 },
    66.                         },
    67.                         series : data,
    68.                 };
    69.        
    70.                 chart_ = new Highcharts.Chart(options);
    71.                 }
 Deben prestar atención a que he creado una función  que se llama  CrearGrafico(),  esta tiene la configuración del display Highcharts, es bastante intuitiva , de eso solo me voy a referir a que debes siempre declarar un height y width , como en este caso :800x800,para el correcto despliegue.
Esta función recibe un parámetro  "data".
3.- Petición ajax:
 La llamada ajax tiene que retornar valores json , y por el mismo motivo nosotros debemos recibirlos de la misma manera  :
  1. $.getJSON('ajax.php', function(data) {
  2.                                                 CrearGrafico(data);
  3.                         });

 Con esto el html final nos queda de la siguiente manera :

  1. <!DOCTYPE html>
  2. <html>
  3.     <head>
  4.         <title>Ejemplo</title>
  5.         <script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
  6.                 <script src="http://code.highcharts.com/stock/highstock.js"></script>
  7.                 <script src="http://code.highcharts.com/modules/exporting.js"></script>
  8.                 <script>
  9.                         var chart_; // contenedor del retorno de Highcharts
  10.                 $(document).ready(function() {
  11.                         $.getJSON('ajax.php', function(data) {
  12.                                                 CrearGrafico(data);
  13.                         });            
  14.                
  15.                 });
  16.                 function CrearGrafico(data){
  17.                 options = {
  18.                         chart : {
  19.                                 renderTo : "chartContainer",
  20.                                 defaultSeriesType : 'column',
  21.                                 plotBackgroundColor : null,
  22.                                 plotBorderWidth : null,
  23.                                 plotShadow : false,
  24.                                 height : 800,
  25.                                 width : 800,
  26.                                 type : 'line',
  27.                         },
  28.                        
  29.                         legend : {
  30.                                 layout : 'vertical',
  31.                                 align : 'right',
  32.                                 verticalAlign : 'middle',
  33.                                 borderWidth : 0
  34.                         },
  35.                         credits : {
  36.                                 enabled : false
  37.                         },
  38.                         scrollbar : {
  39.                                 enabled : true,
  40.                         },
  41.                         navigator : {
  42.                                 enabled : true,
  43.                         },
  44.                         loading: {
  45.                 hideDuration: 1000,
  46.                 showDuration: 1000
  47.                 },
  48.                         rangeSelector : {
  49.                                 enabled : true,
  50.                                 selected : 6,
  51.                         },
  52.                         title : {
  53.                                 text : 'Grafico de <b>Titulo</b>'
  54.                         },
  55.                         subtitle : {
  56.                                 text : 'Grafico de <b><i>Subtitulo</i></b>'
  57.                         },
  58.                         xAxis : {
  59.                                 type : 'datetime',
  60.                                 title : {
  61.                                         enabled : true,
  62.                                         text : ' <b>Periodo</b>',
  63.                                         style : {
  64.                                                 fontWeight : 'normal',
  65.                                         },
  66.                                 showEmpty:true,
  67.                                 },
  68.                         },
  69.                         yAxis : {
  70.                                 title : {
  71.                                         enabled : true,
  72.                                         text : '<i>Tipo de dato</i>',
  73.                                         style : {
  74.                                                 fontWeight : 'normal',
  75.                                         },
  76.                                         showEmpty:true,
  77.                                 },
  78.                         },
  79.                         series : data,
  80.                 };
  81.                
  82.        
  83.                 chart_ = new Highcharts.Chart(options);
  84.                 }
  85.                 </script>
  86.                
  87.    </head>
  88.   <body>
  89.         <div id="chartContainer" style="width:100%; height: 100%;position: relative;">
  90.         </div>
  91.   </body>
  92. </html>
Deben prestar atención al arreglo series:data , es aquí donde devolvemos el resultado del ajax.

4.- Ahora revisaremos el archivo PHP - Posgresql :
La información que vamos a desplegar va a ser Fecha (x) ,valor(y)   esto va a ser una serie , y cada serie va a tener su propio nombre . con respecto a Y : el valor que retorna la DDBB float y el de Fecha es tu timestamp :
una pequeña muestra :














No entraré en detalles sobre la base de datos , puesto que no se trata de esto el ejemplo.
El código PHP es el siguiente

  1. <?php
  2. $dbconn = pg_connect("host=localhost dbname=base_de_datos user=user password=pass")
  3.     or die('Could not connect: ' . pg_last_error());
  4. function QueryE($query)
  5. {
  6. $result = pg_query($query) or die('Query failed: ' . pg_last_error()); 
  7. return $result;
  8. }
  9. function getSeries($n)
  10. {
  11. $aux;
  12. $aux['name']='Serie:'.$n;
  13. if($n ==1)
  14. $result=QueryE('SELECT medicion_fecha,medicion_valor FROM ws_ejemplo_dinamico2(\'W_073_6_248\',10,\'0\') ws order by ws.medicion_fecha asc');
  15. else if($n==2)
  16. $result=QueryE('SELECT medicion_fecha,medicion_valor FROM ws_ejemplo_dinamico2(\'W_073_15_104\',6,\'0\') ws order by ws.medicion_fecha asc');
  17. else
  18. $result=QueryE('SELECT medicion_fecha,medicion_valor FROM ws_ejemplo_dinamico2(\'W_073_15_294\',6,\'0\') ws order by ws.medicion_fecha asc');
  19. $numrows=pg_numrows($result);
  20.         for($ri = 0; $ri < $numrows; $ri++) {
  21.         $value=pg_fetch_array($result,$ri);
  22.         $fecha=new DateTime($value['medicion_fecha']); //convertimos los datos a tipo DateTime
  23.         $x=(int)$fecha->format('U')*1000; // convertimos los datosUnix Epoch
  24.         $y=round(($value['medicion_valor']),2); //redondeamos el valor
  25.         $aux['data'][]=array($x,$y);
  26.         }
  27.                 return $aux;
  28.         }
  29.        
  30. $result = array();
  31. $rows1=getSeries(1);
  32. $rows2=getSeries(2);
  33. $rows3=getSeries(3);
  34. array_push($result,$rows1);
  35. array_push($result,$rows2);
  36. array_push($result,$rows3);
  37. echo json_encode($result);

Las querys no son relevantes, tener presente que retornan 2 valores (medicion_fecha,medicion_valor) que pueden estar en otro formato o plataforma  : CSV,Excel,Mysql,Sqlserver,etc.
Lo relevante este código es que para que  Highcharts considere los datos como datatime se le debe indicar en la config ,este tipo, del html ( punto 1 linea verde ) y más aún enviar estos datos en tipo "Unix Epoch" (Linea en rojo del archivo PHP)
La magia de enviar los datos en json directamente desde PHP es "array_push"  quien nos permite unir los arrays,   luego de estos  los datos son convertidos a json por la función "json_encode" y son enviados a la vista .

Al final esto nos genera un gráfico :



El ejercicio va a estar disponible en http://molino.twpanel.com/testing/
Adjunto los 2 archivos para mayor comprensión :
https://mega.co.nz/#!bAYBiSBJ!HDVZwLDn8SW0JmjJb1hWy_vvuHWYsO9sveCexU0HkLI








martes, 11 de marzo de 2014

SSH proxy + cpuminer socks

En esta oportunidad  contaré  como SSH nos puede ayudar a saltar restricciones y  levantar servicios.
Como es de conocimiento general, intuyo por eso llegaste acá, SSH nos permite crear túneles cifrados para el envió y recepción de información, aumentando considerablemente la seguridad del medio de transporte de esta, eso es uno de los grandes funciones que posee SSH, pero también es posible realizar  otras acciones ,como lo es un proxy. 

De que  sirve que  SSH pueda crear un proxy ? 

Con un proxy SSH existe la posibilidad saltar las restricciones que tengan impuestas en tu país  o lugar de trabajo, por ejemplo cueando estos bloquean  paginas: Informativas,Políticas y/o  de redes sociales,etc .
En este caso el uso que le daremos al proxy será para el minado de cripto-monedas utilizando la funcionalidad fordwarding,  de ssh (para nosotros proxy)

Objetivo
La idea principal  es poder conectarse desde una LAN que no  tiene acceso a Internet, pero si  tiene conexión hacia otra red la cual  si posee el acceso a  Internet,valga la redundancia . Tomaremos como ejemplo el siguiente diagrama:



Descripción: 
En este caso contamos con dos redes  que se conectan mediante el mismo router,  pero como se puede apreciar , la red Beta no posee acceso a Internet pero si tiene acceso a la red Alfa, puede existir escenarios distintos  o similares ( como la interacción de las redes mediante un solo swich y/o hub desde el router,etc) lo ideal es captar la idea de que : La red Beta no tiene contacto con el exterior, solo a las redes internas o quizás a un solo Servidor y/o Computador.
Detalle:
     Red "Alfa"   rango de IPs son : 1               92.168.1.1 - 192.168.1.255
     Red "Beta" cuyo rango de IPs son : 10.49.2.1     -  10.49.2.1.255
     Server A :192.168.1.2 (Linux)
     Server B  : 10.49.2.7 (Linux)

Comencemos ...
 Primero, verificar que los dos Linux tenga instalado el servidor Openssh, si no lo tienen lo instalamos,  tomaremos como referencia las distros más Conocidas:

 Debian :# aptitude install openssh-server openssh-client
 Centos :# yum -y install openssh-server openssh-clients

En Centos hay que aplicar unas instrucciones extra para su funcionamiento:
# chkconfig sshd on  
# service sshd start

Luego de esto chequeamos que este operativo el servicio con un 
# netstat -tulpn | grep :22

Una vez que  nuestro SSH esta funcionando,  procederemos a crear llaves publicas para que no nos pida la password de acceso cuando nos conectemos de un servidor a otro.
Esto es muy importante , lo explicaré más adelante del porque  es necesario el acceso mediante dichas llaves. A tener presente : El Servidor B es quien no posee Internet y por tanto es el que se va a conectar al Servidor A para obtener dicha conexión , de está manera y para que quede más claro El servidor B es quien necesita acceso al servidor A sin solicitud de password,

Para poder lograr esto :
En el servidor B, en la linea de comandos:

#ssh-keygen -t rsa  

Sigues los pasos te va solicitar una passphrase la cual omitimos presionando enter  de esta forma no nos pide password en el futuro para conectarnos, así sucesivamente ej:



 Esta operación te crea un archivo id_rsa.pub , su ruta está indicada : "Your public key has been saved in /home/xxxx/xx/.xx/id_rsa.pub".

El contenido de este archivo hay que agregarlo al servidor A (si queremos acceso a root) en : /root/.ssh/authorized_keys
puedes ocupar SCP para copiar:

scp /home/xxxx/xx/.xx/id_rsa.pub root@192.168.1.2:.ssh/authorized_keys

Despues de esto ya tenemos acceso sin password desde SSH, verifica :
ssh root@192.168.1.2


Proxy con SSH
Una vez que confirmamos que tenemos levantados los 2 servicios SSH  procedemos a levantar el Tunnel proxy mediante sockets, esto debe ser ejecutado en el Servidor B:

ssh -N -D localhost:1080 root@192.168.1.2 -p 22

Esta instrucción   habré el puerto 1080 de la maquina B que  a su vez apunta a la maquina A (192.168.1.2) , con esto ya tenemos listo nuestro proxy .
Para que lo tengas claro, si quieres ocupar el proxy desde la maquina B, debes indicar siempre que las peticiones pasen por localhost:1080

A minar
Para minar utilizaremos cpuminer , el cual nos permite minar sin utilizar GPU:
Para instalar cpuminer :
$ wget http://sourceforge.net/projects/cpuminer/files/pooler-cpuminer-2.3.2.tar
$ tar -xzf pooler-cpuminer-2.3.2.tar.gz
$ cd cpuminer-2.3.2/
$ ./configure CFLAGS="-O3"
$ make

Esto nos compilara un archivo minerd, el cual es el ejecutable , y para comenzar a minar nos unimos a un pool, yo ocupo  coinotron.com.
y ejecutamos

$ /ruta/al/archivo/minerd -a scrypt --proxy=socks5://localhost:1080 -t 4 -s 6 -o stratum+tcp://coinotron.com:3337 -O tu_usuario.3:x

Con esto ya dejamos minando nuestros LTC,
Saludos.






miércoles, 28 de agosto de 2013

Prestashop supply Orders Details Import (PS 1.5) FIX

Prestashop   es uno de los mejores framework para carro de compras que conozco , apoyado por una gran comunidad.
Hoy les contaré como corregir un error que viene en prestashop para la subida de Detalle de Ordenes además de subir esta carga por referencia:

1.- deben tener una orden creada para la recepción de los productos, esto se encuentra en Existencias->   Pedidos de distribuidores-> añadir nuevo

2.- Una vez creada la orden continuamos con la carga de los productos que encontramos en : Catálogo->Productos Importar, seleccionamos Archivo de muetra de Detalle de Ordenes ;



 vemos que nos arroja un formato :

 nos pide id_producto y id_atributo ; si nosotros trabajamos con referencia esto nos va a complicar un poco; pero para este caso particular genere el siguiente script en python  http://pastebin.com/3jPw2Cfj tienes que instalar MySQLdb(python) si estas en debian el paquete es "python-mysqldb" lo puedes instalar con aptitude install python-mysqldb.
Este script nos permite obtener "product ID" y "Product Attribute" solamente con las referencia de los productos
 2. A
   
      Configuramos el script .
      linea 8 cambiamos los datos que corresponda
  1. self.conex('10.xxx.xxx.xxx','usuario','password','basededatos')

  Luego debemos generar un archivo que contenga las referencia con el precio y stock que se desea subir , (archivoconreferencia.cvs) al que invocaremos más adelante, de las siguientes características (http://pastebin.com/9nwnp3DF):
  referencia,precio,stock

Debes tener en cuenta el separador, en este caso es "," si lo haces con ";" u otro separador, para que el script considere este formato; favor cambia en la linea 16 por el delimitador que estimes conveniente.

 ultimo paso: al final del archivo (linea 87) esta:
  1. st=Stock('Ref_0007','archivoconreferencia.csv')

Debes cambiar "Ref_0007" por la referencia que tu creaste en prestashop en el paso 1, luego  'archivoconreferencia.csv' cambiarlo por el archivo que generamos al principicio en el 2.A

finalmente ejecutas el python
python stock.py  , te generara un archivo formato PS_****.csv
* considera también que todos los archivos estén y quedan en la misma carpeta donde ejecutas el script

3.- Cargar el archivo generado en el paso anterior:


Debería generarnos una salida:














 presionamos en importar datos CSV,
si nos arroja el siguiente error "Producto (x/0) no se puede añadir dos veces (en la línea x)":
cuando en el archivo PS_****.csv generado mediante el script no tiene repetidos, o si   revisaste y sabes que arroja este error independientemente que exista una duplicidad :


Esto lo debemos corregir  en una función de prestashop que esta en admin/controllers/AdminImportController.php , como no queremos estropearnos una actualizacion o para mayor seguridad modificaremos /override/controllers/admin/AdminImportController.php  donde agregamos el siguiente code  dentro de la clase class AdminImportController extends AdminImportControllerCore

luego volvemos al paso 3 .- y probamos nuevamente.

saludos,
Francisco Céspedes A.








viernes, 15 de junio de 2012

Mantis Unable to read /find font

Mantis es  excelente bugtracker ocupado a nivel mundial, el cual permite tener registros de las incidencias que circundan los desarrollo de software.

Esta herramienta permite crear perfiles por proyectos, los cuales se explaya extendidamente donde y que pueden hacer, a su vez genera salida de correos a los participantes de cada proyecto cuando se genera un evento de cualquier tipo.

Una de las facilidades que tiene es la generación de informes los cuales detallan el trabajo realizado por el grupo de trabajo .

Generalmente a instalar esta herramientas no se cuenta con los archivos pertinentes para mostrar los informes y arroja el siguiente error "Unable to read/find font" .


para solucionar este inconveniente para el caso especifico en Linux/Debian Squeeze sedebe instalar las fuentes msttcorefonts:

#aptitude install msttcorefonts

Y se verán los informes.


Saludos.



viernes, 2 de marzo de 2012

Compartir internet con Linux o crear una subred (iptables)

Cuando tenemos la posibilidad de ocupar un linux dentro de nuestras dependencias u oficina, disponemos de  la facilidad de ocupar muchas herramientas y generar alternativas  varias dentro de todas las funciones disponibles de un linux.

Para comprender mas la definicion anterior  mostraré un caso particular, donde tenemos un servidor Linux con 2 tarjetas de red  donde queremos obtener provecho de crear una subred o compartir internet desde un punto de red :

Descripcion: 

interface Eth0 con ip 192.168.237.229, recibe internet desde un router,switch,hub,etc.

Interface Eth1 con ip  192.30.20.10, segunda tarjeta de red donde redireccionaremos el trafico de internet que llega a Eth0.

-Esta subred puede aumentar su volumen agregando una antena wifi y/o mas interfaces Ethernet o conectando un router a la interface eth1, todo depende de lo que quieras hacer.

La configuracion que se debe realizar en el servidor para compartir internet:
    
 
#!/bin/sh
## SCRIPT de IPTABLES - Compartir Internet con ETH1
##
## -Ncw -
#Comaparte internet de eth0 a eth1
#192.30.20.0/24 corresponde a la subred donde se va a compartir el internet
#

echo -n " Aplicando Reglas de Firewall..."
## FLUSH de reglas
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
## Establecemos politica por defecto
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
# El localhost se deja (por ejemplo conexiones locales a mysql)
/sbin/iptables -A INPUT -i lo -j ACCEPT
# Al firewall tenemos acceso desde la red local
iptables -A INPUT -s 192.30.20.0/24 -i eth0 -j ACCEPT
# Al firewall tenemos acceso desde la red local
iptables -A INPUT -s 192.30.20.0/24 -i eth1 -j ACCEPT
#comenzamos a realizar el Puente desde eth0
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
#Direccionamos el Puente a eth0
iptables -A INPUT -s 192.30.20.0/24 -i eth1 -j ACCEPT

#Se ejecuta la Orden
echo 1 > /proc/sys/net/ipv4/ip_forward
echo " OK . Verifique que lo que se aplica con: iptables -L -n"
# Fin del script
  
 
Si lo que deseas es compartir internet mediante una antena wifi solo basta cambiar la interface eth1 por wlan0 (wlan0 generalmente es la interface que se genera al añadir una antena wifi a algún linux, aunque depende de los drivers que  instalemos).

descarga desde aca :aquí

--
Ncw




martes, 25 de octubre de 2011

Debian caído code 4 fsck

el dia de ayer se ha caído mi Debian squezze 64 bits, como tenia modificado el usplash no podía ver el error al iniciar /: estube a punto de formatear; pero no me di por vencido hasta que pude ver el error. pero bueno lo que decía era algo mas o menos que debía iniciar fsck manualmente con code 4:

run fsck MANUALLY

(i.e., without -a or -p option) fsck died with exit status 4 failed (code 4)

file system check failed a log is being saved in /var/log/fsck/checkfs

if thar location is writable, please repair the file system manually.. failer!

a maintence shell will now be started. control D will terminate this shell and resume system boot... (warning) give root password for maintenance (or type control-D to continue)


la verdad me desespere un poco xD y bueno hay mismo salían las indicaciones, pero no me dejeba ocupar la consola. decidí iniciar la consola al inicio agregando init=/bin/bash al grub, intente iniciar en modo recuperativo, y la verdad quede decepcionado porque nada funcaba entonces decidí buscar un poco mas de info sobre el comando fsck.
abrí el disco duro con un backtrack que tengo en un pendriver, y resolví los errores con la siguiente instrucción:

fsck -c -f -v -y /dev/sda1

los argumentos que se expresan son:
-c : chequear disco duro
-f : forzar el chequeo (en resumidas cuentas)
-v : verbose lo abras visto en otros comandos, es para explayar lo que esta haciendo el comando
-y : es para aceptar automáticamente el fix; o reparo;
/dev/sad1 ubicación del disco defectuoso

puedes verificar la ubicacion de tu disco duro fdisk -l

espero ayude.
Saludos



miércoles, 12 de octubre de 2011

Instalar ASP Debian Squezze

He estado jugando con ASP ,que tiene varias similitudes con PHP5, pero solo lo he hecho en servers ajenos, servidores IIS.
Existe una forma de correr ASP en nuestro servidor Debian squezze, a travez de un opensource llamdo mono, este "framework"  o modulo, nos permite ejecutar archivos aspx en linux. para instalarlo sigue  los sguientes pasos:
  1. #paramos apache  
  2.  
  3. /etc/init.d/apache stop
  4.  
  5. #instalamos el modulo mono
  6.  
  7. apt-get install libapache2-mod-mono mono-apache-server
  8.  
  9. # debemos quitar el modulo, para configurar si inicio automatico
  10.  
  11.  
  12. a2dismod mod_mono
  13.  
  14. # añadimos el inicio automatico de mono
  15.  
  16. a2enmod mod_mono_auto
  17.  
  18. # ahora levantamos el server apache
  19.  
  20. /etc/init.d/apache start
  21.  
  22. # podemos instalar fuentes o ejemplos asp o aspx directamente desde los repositorios:
  23.  
  24. apt-get install asp.net-examples
  25.  
  26. #para visualizarlos  debemos crear un enlace:
  27.  
  28. ln -s /usr/share/asp.net-demos/ /var/www/ejemploasp
  29.  
  30. #para ver estos ejemplos, desde el navegador digita:
  31.  
  32. http://localhost/ejemploasp
Saludos --