Showing posts with label LINUX. Show all posts
Showing posts with label LINUX. Show all posts

Wednesday, January 9, 2008

Mover Proyecto Symfony de Ubuntu a Redhat

Actualmente estoy trabajando con PHP Symfony y instalado un proyecto en Redhat que fue generado y construido en Ubuntu por lo que al instalar el symfony usando pear(al igual que ubuntu) la ruta de los archivos de symfony es diferente y al ejecutar cualquier comando de symfony('symfony cc' por ejemplo) ocurren errores al hacer los includes. Ejemplo: jhernandez@POSEIDON-LINUX:~/WebApps/$ symfony cc Warning: include(/usr/share/pear/data/symfony/bin/symfony.php): failed to open stream: No such file or directory in /usr/bin/symfony on line 39 Warning: include(): Failed opening '/usr/share/pear/data/symfony/bin/symfony.php' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in /usr/bin/symfony on line 39 Esto sucede porque el archivo config/config.php apunta a una direccion de los archivos de symfony invalida. En Ubuntu por ejemplo, el archivo config/config.php debe verse similar a este: // symfony directories $sf_symfony_lib_dir = '/usr/share/php/symfony'; $sf_symfony_data_dir = '/usr/share/php/data/symfony'; En Redhat por ejemplo, el archivo config/config.php debe verse similar a este: // symfony directories $sf_symfony_lib_dir = '/usr/share/pear/symfony'; $sf_symfony_data_dir = '/usr/share/pear/data/symfony'; Esto se debe a que el PEAR instala los archivos de php symfony en diferentes rutas de acuerdo a la distribucion. Solo es cuestion de corregirlo para que el problema se solucione.

Wednesday, November 28, 2007

Seminario: "Capacidades de Ubuntu Linux 7.10 Gutsy Gibbon" en Kapacita

Hoy 28 de Noviembre estare dictando un seminario de Ubuntu Linux en Kapacita, un instituto de Tecnologia aqui en la ciudad de Caracas que esta introduciendo excelentes Cursos para Certificacion en Linux y Ubuntu. Pronto estaremos impartiendo otro seminario que puede ser de tu interes, escribeme un comentario o enviame un correo a johan@ubuntu.org.ve o a thepumpkin1979@gmail.com. El 8 de Diciembre tambien estare en la ciudad de Maracaibo para un evento de Ubuntu, pronto les dare mas detalles. Si eres de Maracaibo tambien podras asistir. Saludos.

Sunday, October 14, 2007

Comprobaciòn MD5 de un archivo en Linux

Para obtener el codigo MD5 de un archivo en Linux se usa el comando md5sum, use la siguiente sentencia: md5sum nombreArchivo Es importante tener guardado por otro medio el codigo MD5 Original del archivo para compararlo, si es md5 arrojado por la utilidad md5sum es diferente al original que se le proporciono por otro medio entonces el archivo no se transmitio correctamente o fue violentado.

Monday, September 24, 2007

Instalando Gnome Vala en Ubuntu

La gente de Gnome ha inciado un proyecto interesante llamado Vala en su intento de Agilizar la Velocidad de Desarrollo para las librerias GNOME sin sacrificar Memoria RAM(cosa que critican directamente de Mono y Java). "Vala" hace parsing de una sintaxis muy pero muy similar a C# pero en vez de compilar a Nativo o a IL, compila a language C(.h y .c) "Compiler for the GObject type system" y por supuesto no necesita runtime. En fin, si quieren probarlo ustedes mismos aqui estan los pasos para instalarlo en Ubuntu: 1. Descargar los fuentes de Vala: wget http://download.gnome.org/sources/vala/0.1/vala-0.1.3.tar.bz2 2. Descomprimir: tar -xvf vala-0.1.3.tar.bz2 La descompresion ha creado el directorio vala-0.1.3 cd vala-0.1.3 3. Preparamos la compilacion ./configure 4. Compilamos. make 5. Instalamos. sudo make install Listo. Ahora solo nos queda probar el compilador(valac) y para esto creamos un archivo llamado "main.valac" y colocamos el siguiente contenido: using GLib; public class Sample : Object { public Sample () { } public void run () { stdout.printf ("Hello World from http://johansoft.blogspot.com\n"); } static int main (string[] args) { var sample = new Sample (); sample.run (); return 0; } } Compilamos: valac -o main main.vala Ejecutamos: ./main Listo:) El resultado deberia ser el siguiente: Hello World from http://johansoft.blogspot.com

Friday, September 21, 2007

Solucion: ERROR: language "plpgsql" does not exist

PostgreSQL puede ser programado con muchos lenguages y el mas usado es PL/pgSQL pero no siempre se instala por defecto. Para corregir este problema en Ubuntu Linux se realizan los siguientes pasos: 1. Localizar el archivo plpgsql.so Este archivo es una libreria de funciones que ejecuta el codigo PL/pgSQL, para localizarlo hacemos lo siguiente: $sudo updatedb $locate plpgsql.so Con estas instrucciones Linux localizara el archivo y nos dara la ruta de la libreria, en mi caso para Ubuntu 7.04 y PostgreSQL 8.2 la ruta seria la siguiente: /usr/lib/postgresql/8.2/lib/plpgsql.so 2. Instalar el handler y lenguage. Una vez localizada la ruta de la libreria handler del lenguage(ver paso 1) se procede a crear el handler en PostgreSQL, para esto se necesita una conexion a PosgreSQL que puede hacerse con pgadmin3 o la utilidad de linea de comandos psql. Envie a PostgreSQL los siguientes comandos: CREATE FUNCTION plpgsql_call_handler () RETURNS OPAQUE AS '/usr/lib/postgresql/8.2/lib/plpgsql.so' LANGUAGE 'C'; CREATE LANGUAGE 'plpgsql' HANDLER plpgsql_call_handler LANCOMPILER 'PL/pgSQL'; Listo, con esto ya creo el lenguage PL/pgSQL correctamente. Intente ejecutar nuevamente el script que genero el error original. Nota: la creacion o configuracion de cada lenguage de PostgreSQL se hace por base de datos, no en el servidor o en todas las bases de datos al mismo tiempo. Si necesita crear el leguage en varias bases de datos debe ejecutar el Paso 2 en cada base de datos o ejecutar el Paso 2 en alguna de las plantillas(template0,template1,etc) y despues crear las otras bases de datos futuras basadas en esta plantilla. Consulte tambien Acerca de PL/pgSQL [Actualizacion-28/09/2007] El error tambien puede ocurrir en Windows con el instalador por defecto de PostgreSQL, el handler puede que este creado pero no el lenguage. Para solucionarlo ingrese con el usuario POSTGRES en la base de datos donde necesita el lenguage y ejecute el siguiente script: CREATE TRUSTED PROCEDURAL LANGUAGE 'plpgsql' HANDLER plpgsql_call_handler VALIDATOR plpgsql_validator; Si el handler no existe se debe crear usando el procedimiento mencionado mas arriba para Linux pero aputando al archivo plpgsql.dll(que normalmente se encuentra en "C:\Archivos de programa\PostgreSQL\8.2\lib" si no se cambio la ruta de instalacion por defecto).

Tuesday, September 18, 2007

Feliz Cumpleaños Linux!

Saludos a todos los colaboradores y empresas que apoyan a Linux y el Software Libre. Feliz Cumpleaños Tux!

Monday, September 17, 2007

Configurar Conexion Remota de Usuarios en MySQL5 en Ubuntu/Debian

MySQL 5 al igual que muchas otras bases de datos no permite conexiones remotas en su instalacion por defecto y hay que realizar ciertos pasos para configurarlo: 1. Editar el archivo /etc/mysql/my.cnf: Reemplazar esto: bind-address = 127.0.0.1 Por lo siguiente: bind-address = 0.0.0.0 Luego de guardar el archivo se procede a reiniciar el servidor de bases de datos MySQL, se puede hacer con el siguiente comando: /etc/init.d/mysql-server restart Aunque con estos paso ya hemos configurado a MySQL Server para permita conexion remota los usuarios no necesariamente puedan conectarse. 2. Permitimos al usuario conexion remota: Iniciamos la utilidad "mysql" en un Terminal del servidor donde esta instalado mysql server con el siguiente comando: mysql -u root -p Colocamos nuestra contraseña de root para mysql y procedemos a configurar a los usuarios para acceso remoto: GRANT ALL PRIVILEGES ON *.* TO root@'%'; FLUSH PRIVILEGES; Con la instruccion anterior se permite al usuario "root" conexion remota desde cualquier PC y aunque esta es la solucion mas sencilla no es la mas segura. Se debe asignar conexion remota por IP o Nombre de dominio. Ejemplo, con la siguiente instruccion se le permite conexion remota al usuario root desde la PC con la direccion IP 192.168.0.5: GRANT ALL PRIVILEGES ON *.* TO root@192.168.0.5 FLUSH PRIVILEGES; Nunca olvide hacer FLUSH PRIVILEGES para que los cambios en el sistema authenticacion y autorizacion de MySQL se hagan efectivos al momento. En los ejemplos anteriores se usa *.* para indicar que el usuario tiene acceso a todas las bases de datos con todos sus objetos(tablas, vistas, funciones) pero es buena practica tambien solo dar acceso a las bases de datos especificas. Ejemplo, con la siguiente instruccion vamos a asignar acceso remoto desde la direccion IP 192.168.0.5 al usuario "root" para la base de datos "administracion" GRANT ALL PRIVILEGES ON administracion.* TO root@192.168.0.5 FLUSH PRIVILEGES; Para mas informacion consulte los siguientes temas:

Tuesday, September 11, 2007

Cambiar Contraseña de Usuario 'postgres' en Ubuntu

En un post anterior ya he comentado que el instalador de PostgreSQL para Ubuntu asigna una contraseña aleatoria al usuario 'postgres' y que esta debe ser cambiada manualmente post-instalación. Esto no es un error en el instalador, es una comportamiento de seguridad por defecto del instalador. Cambiano la contraseña Para cambiar la contraseña en una instalación por defecto o porque simplemente se olvido la contraseña y no existen mas usuarios se hace lo siguiente en una terminal: 1) Impersonar al usuario 'postgres'. $sudo su postgres 2) Ejecutar la utilidad psql $psql En este momento se esta conectando a la base de datos usando el usuario 'postgres', con este usuario puede cambiar contraseñas de muchos usuarios incluso del mismo 'postgres'. Ahora vamos a cambiar la contraseña, ejecute sobre la linea de comandos actual la siguiente secuencia donde 'passwd' es la contraseña nueva(debe utilizarse comillas simples): alter user postgres with password 'passwd'; Si el programa response con el mensaje 'ALTER ROLE' la contraseña se ha cambiado correctamente. Para salir se la utilidad escriba: \q para salir del usuario 'postgres' escriba lo siguiente: exit Listo. La contraseña se ha cambiado correctamente. Probando la conexion Para probar la conexion se puede utilizar la misma utilidad 'psql' de la siguiente forma: psql -U postgres -W Presione ENTER e introduzca la nueva contraseña(usted debio haberla cambiado en el ejemplo anterior, si no lo hizo la contraseña es 'passwd').

Instalar PostgreSQL en Ubuntu Linux

Instalacion Instalar Postgresql en Ubuntu es bastante sencillo, yo uso Ubuntu 7.04 e instalo postgresql desde los repositorios oficiales que tienen PostgreSQL 8.2. Para instalar se puede utilizar synaptic e instalando el paquete llamado 'postgresql-8.2' o usando aptitude en una terminal. Para instalar abra un terminal y ejecute el siguiente comando: $sudo aptitude install postgresql-8.2 Escriba 'Y'(si) para descargar e instalar automaticamente y cuando finalice el proceso postgresql estara correctamente instalado pero no se inicia automaticamente, debe iniciarse el servicio manualmente. Iniciando el Servicio PostgreSQL Manualmente Esta tarea puede realizarse usando la interfaz grafica o con una terminal: Iniciar usando Servicios de Ubuntu: Hacer click en el menu System->Administration->Services y marcar el servicio Database Server(postgresql-8.2) como se muestra a continuación: Con esta acción se iniciara la base de datos. Iniciar usando usando Terminal: Abra una terminal y ejecute el siguiente comando: $sudo /etc/init.d/postgresql-8.2 start Listo, ya se ha instalado e iniciadio la Base de Datos. Existe un Pequeño problema que realmente no es un problema, es una caracteristica de Seguridad del Paquete de Instalacion de Ubuntu que no revela cual es la contraseña que se le asigno al usuario 'postgres', sin embargo, he creado la siguiente guia para ayudar a solventarlo: Cambiar la contraseña del usuario 'postgres'

Monday, August 27, 2007

Porque migrar y programar en Linux?: Perspectiva de un Desarrollador

Soy usuario de Windows desde los 9 años, desarrollo aplicaciones para Windows desde los 17 años: ¿Porque usar y programar en Linux? Existen cientos de razones que la comunidad de Linux pero para mi la mas importante es la seguridad: Seguridad La seguridad de Windows es un tema muy extenso, pero puedo resumir el problema en dos factores: Windows esta basado(toma comportamiento) en MS-DOS, un sistema de 1 Usuario y Tarea concurrente que luego fue transformado de version en version en lo que hoy se conoce como Windows. Debido a que Microsoft mantiene todo el Legacy posible con sus versiones anteriores orientadas al usuario final, la seguridad en ambientes Multi-usuario no es prioridad de programacion o configuracion del Sistema Operativo Windows dejando su punto mas debil en su FileSystem(Fat, Fat32 o NTFS) hasta el punto que Windows no se puede operara conectado a internet sin un Antivirus Preinstalado, asi mismo los desarrolladores de sus aplicaciones como Internet Explorer, Outlook, Live Messenger tienen muy baja seguridad. Eso tiene muchas formas de verse: estrategia comercial, despreocupacion por la seguridad o la razon mas aceptada entre desarrolladores de linux: facilidad de uso al usuario final. Economia Microsoft utiliza un modelo de Licenciamiento y Ventas de Servicio de sus productos que le ha dado su exito economico y dado a su facilidad de uso es la primera opcion para grandes empresas con gran poder adquisitivo ya que existen muchos mas desarrolladores que realicen tareas comunes como aplicaciones de mandejo de datos cediendo conocimientos solidos en seguridad de sistemas. Sin embargo para mi ya no es una opcion vivir pagando mas de 3000 $ USD para poder "mantener" estacion de trabajo con la ultima version de Windows, Office, Visual Studio, SQL Server y Antivirus porque en Linux eso me cuesta 0$ con software libre. ¿Como como puedo yo realizar las mismas tareas cotidiandas de Oficina y Programacion de Windows en Linux? La facilidad es relativa y es un completo mito para los programadores de Windows que escuchan hablar de desarrollos en Linux y todo se debe a su desconocimiento, a continuacion presento una tabla comparativa entre los productos de desarrollo que actualmente ofrece Microsoft por unos miles de dolares y que estan disponibles en Linux completamente gratis. Del lado izquierdo presento el producto de Microsoft o alguna empresa que vende software propietario y del lado derecho el software libre: Microsoft Office 2003 -> OpenOffice 2 o Gnome Office Microsoft Visual Studio 2005 y .NET -> MonoDevelop y Mono Microsoft SQL Server 2005 -> PostgreSQL Server 8 Antivirus -> No es necesario. VMWare Workstation -> VirtualBox Nota: Aunque MySQL es la opcion mas famosa de bases de datos, no es tan estable en almacenamiento como PostgreSQL. Si eres como yo, programador en Tecnologia .NET, el proyecto Mono es tu mejor eleccion para implantar aplicaciones en Linux. Apoyado por el IDE MonoDevelop, Mono Framework posee las siguientes tecnologias: XSP: Permite crear y ejecutar aplicaciones ASP.NET 2.0 creadas con o sin Visual Studio sobre Apache Web Server. ADO.NET: Mono tiene una implementacion completa del namespace System.Data permitiendo conectarse con diferences conectores como el de PostgreSQL, MySQL, Microsoft SQL Server, SqlLite y Oracle todos ellos incluidos en los paquetes de instalacion de Mono. GTK#: Permite crear interfaces graficas que se ajustan al aspecto visual del sistema operativo basadas en las librerias multiplataforma GTK, ideal para aplicaciones de Escritorio en entorno Gnome. WindowsForms: Permite ejecutar aplicaciones creadas en las librerias WinForms para Windows sobre Linux. Recuerda que en las listas de correo de MonoHispano y su canal de chat IRC #mono-hispano en el servidor irc.gimp.org estamos muchos usuarios de habla hispana dispuesto a ayudarte y orientarte en la plataforma Mono.

Tuesday, August 21, 2007

Conexion remota PostgreSQL y Firewall iptables

En estos dias tenia un problema con postresql 8.1, no me podia conectar remoto fuera de la red local y la solucion es modificar el postgresql y agregar unas reglas al iptables. Esto fue lo que hice para permitir la conexion remota: Nota: todos las rutas a los archivos de configuracion excepto el comando para modificar las reglas del iptables estan adaptadas a Debian/Ubuntu. 1. Archivo /etc/postgresql/8.1/main/postgresql.conf: La propiedad listen_addresses y port deben estar de la siguiente forma: listen_addresses = '*' port = 5432 2. En el archivo /etc/postgresql/8.1/main/pg_hba.conf quite el comentario(#) a la siguiente linea en la seccion IPv4: host all all 0.0.0.0/0 md5 3. Ejecute los siguientes comandos en la terminal sudo iptables -t filter -A OUTPUT -p tcp --sport 5432 -j ACCEPT sudo iptables -t filter -A INPUT -p tcp --sport 5432 -j ACCEPT 4. Reiniciar el postgresql sudo /etc/init.d/postgresql-8.1 restart Si no existe un DROP en el iptables que contrareste el efecto de la nueva regla aplicada, ya deberias poder conectarte de forma remota.

Saturday, August 18, 2007

Interactive Linux Kernel Map

Asombroso mapa del Kernel de Linux, no dejen de consultarlo. Estoy seguro que Windows no tiene uno ya que Windows no es OpenSource -:) http://www.linuxdriver.co.il/kernel_map

Tuesday, July 10, 2007

X-Chat Mono

I have published x-chat-mono OpenSource API, with this API you can build Managed Plugins compiled with Mono. Featuring:
  • Register and Receive plugin commands
  • Send IRC Commands
  • Send Prin
See the project page for more information: http://code.google.com/p/xchat-mono/ Enjoy!

Wednesday, July 4, 2007

How to Install Moonlight & Desklets Step by Step UPDATED

(Last Update: Agost 2, 2007; moon SVN revision: 83286) This guide describes the common installation process for Moonlight, you can get the original one here. Requirements:
  • Mono 1.2.4
  • ffmpeg Sources
  • Moonlight Sources
  • Olive
  • Mono Libraries
  • Mozilla Development Libraries
  • Beryl or Compiz
Process: 1. Installing Mono 1.2.4: You will need download and Install Mono 1.2.4(Ubuntu 7.04 Users can use Viraptor Packages) Refresh and Install the Updates for the New Mono Packages. 2. Download and Configure ffmpeg from SVN: $svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg $cd ffmpeg $./configure --prefix=/usr/local $sudo make install 4. Install additional packages +and dependencies:
  • libnspr-dev
  • libnss-dev
  • firefox-dev
  • libmono-system-messaging2.0-cil
  • libcairo2-dev
  • libgtk2.0-dev
  • libasound2-dev
  • mono-devel
  • libmono-cairo2.0-cil
Note: Packages names are references to Ubuntu or Debian packages I recommend use aptitude or synaptic 5. Download and Configure Libraries Olive: $svn co svn://anonsvn.mono-project.com/source/trunk/olive olive $cd olive $./configure --prefix=/usr $make $sudo make install If you want to check your Olive configuration you can check this using Mono gacutil tool: $gacutil -l agclr The output should be: The following assemblies are installed into the GAC: agclr, Version=0.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 Number of items = 1 6. Download and Configure Moonlight: $svn co svn://anonsvn.mono-project.com/source/trunk/moon moon $cd moon $./autogen.sh --prefix=/usr $sudo make install 7. Enable Desktop Effects: Go to System->Preferences->Desktop Effects and enable it, beryl or compiz should work too. Now you can test the Moonlight Installation running the following command in a terminal: $mopen Moolight Launcher should run and show the following information: Usage is: mopen [args] [file.xaml|dirname] Arguments are: --fixed Disable window resizing --geometry WxH Overrides the geometry to be W x H pixels --host NAME Specifies that this file should be loaded in host NAME --transparent Transparent toplevel --desklet Remove window decoration for desklets use Even when you can read the message, you need to run a Moonlight Enabled Application to ensure the installation process was successful: Example: runing glassyclock desklet: $cd desklet $make $cd glassyclock $make $mopen --desklet default.xaml If you can see the beautiful clock, Congratulations!, if you see a black an ugly clock then you have no Desktop Effects/Beryl/Compiz Enabled.

Monday, July 2, 2007

MonoDevelop 0.14 Short Demo

He comenzado a crear unos videos demos de MonoDevelop 0.14 y este es el primero. Aun estoy investigando como agregarle mas resolucion a los videos se ven bastante borrosos.

Ejemplo de Evolution#

Para quien necesite agregar un contacto a Evolution con Evolution#, el codigo es el siguiente. using System; using Evolution; namespace myEvolutionAutomation { class MainClass { public static void Main(string[] args) { Evolution.Book b = new Book(); Contact contact = new Contact(); contact.BlogUrl = "http://johansoft.blogspot.com"; contact.FullName = "ThePumpkin"; contact.Title = "Mr"; Console.WriteLine("Can Open Book?= {0}",b.Open(true)); Console.WriteLine("Can Add contact ={0}",b.AddContact(contact)); b.CommitContact(contact); } } }

Saturday, June 30, 2007

Moonlight y Desklets en Ubuntu

(an english version available) Es impresionante lo rapido que va el equipo de Mono con el Proyecto Moonlight, ya lo he instalado y ejecutado los Desklets que es un proyecto inciado por Everaldo Canuto, aqui les dejo un video de mi escritorio. Esta es la guia oficial para instalar Moonlight, sin embargo yo he recopilado unos pequeños pasos claves para instalar en Ubuntu. Recuerdo a los lectores que no me me hago responsable por los daños que les pueda causar estas instrucciones: Comenzemos: Necesitamos Mono 1.2.4 y los fuentes de ffmepg,Moonlight y Olive. 1. Mono 1.2.4: Debido a que yo uso Ubuntu Feisty y no hay paquetes oficiales de Mono 1.2.4, estoy usando bajo mi responsabilidad y concentimiento los paquetes de Viraptor. 2. Descargar el ffmpeg desde SVN: $svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg 3. Compilar ffmpeg: $cd ffmpeg && ./configure --prefix=/usr/local && make && sudo make install 4. Instalar XPCOM de Mozilla: Usando aptitude o synaptic, instale los siguientes paquetes con sus dependencias:
  • libnspr-dev
  • libnss-dev
  • firefox-dev
5. Descargar Olive: $svn co svn://anonsvn.mono-project.com/source/trunk/olive olive $cd olive && ./configure --prefix=/usr && make && sudo make install 6. Descargar Moonlight: $svn co svn://anonsvn.mono-project.com/source/trunk/moon moon $cd moon && ./configure --prefix=/usr && make && sudo make install Para probar la instalacion, abra una terminal y ejecute: $mopen Deberia ejecutarse Moonligh dando la siguiente informacion: Usage is: mopen [args] [file.xaml|dirname] Arguments are: --fixed Disable window resizing --geometry WxH Overrides the geometry to be W x H pixels --host NAME Specifies that this file should be loaded in host NAME --transparent Transparent toplevel --desklet Remove window decoration for desklets use Aunque esta salida es correcta, aun no se puede saber si esta instalado correctamente el Moonlight hasta que no se ejecute un desklet. Ejemplo: $cd desklet/glassyclock && mopen --desklet default.xaml Si puedes ver el reloj, te felicito, has instalado correctamente Moonlight! Si tienes algun problema escribeme tu comentario o unete a los siguientes canales IRC: #desklets(en ingles), #mono(en ingles), #monodev(en ingles) #mono-hispano( en español y aqui es donde siempre estoy yo) en el servidor irc.gimp.org. En #mono-hispano siempre estamos atentos a nuevos participantes y bienvenida siempre son sus consultas acerca del Proyecto Mono.

Sunday, June 17, 2007

Windows Genuine en Ubuntu

Windows Genuine Validation funciona a la perfeccion en Linux. Me pregunto si la gente de Wine lo hace a proposito... hasta el momento es la cosa mas insolita de Microsoft que he visto despues Ballmer decir grocerias a Google y Microsoft amenazar a usuarios de Linux .

Cambiar nombre proceso Mono en Linux

Me parece bastante desagradable que cualquier aplicacion mono tenga siempre el mismo nombre y solo lo puedas diferenciar por cuanta memoria consume(xD), encontre en el codigo fuente de banshee algo que resuelve el problema. El codigo fue originalmente creado por Aron Backover solo que yo lo modifique y lo coloque en una clase sencilla. Ejemplo: ProcessNaming.SetProcessName("MyApp"); [ProcessNaming.cs]

Monday, May 21, 2007

C# Mono HTTP Server

Hace tiempo habia creado un servidor Http en C# y Mono siguiendo la arquitectura de Isolated Applications de Asp.net, lo he desempolvado para poder utilizarlo en para lo que finalmente lo habia necesitado, mi framework de aplicaciones. Lo hice hace como 1 año atras: Soporta:
  • Application Tree
  • Isolated Applications Activation
  • Application State(Offiline,Online)
  • Cookies
  • MimeTypes
  • KeepAlive
  • Buffering
  • Encodings
  • Http Redirection
  • Http Resources Tree
  • Http Resources Activation
  • Exception Handling(Local,Remote information)
  • Port Publication.
  • SSL(con algunos bugs fantasmas)
En perfomance esta bastante aceptable, realice unas pruebas de carga con Firefox y unos script con autorefresh y pude calcular calcule 20 clientes(20 pestañas de firefox) respondiendo a 150ms cada solicitud de 672 KB fijos, 34MB de memoria de consumo de proceso de servidor y 73%(compartido con firefox) de mi procesador Pentium4 2.8Ghz. Puede que no sea el benchmark mas perfecto pero algo es algo, despues de darme cuenta de que podia hacer mi framework incluyendo sus 5 servidores completamente en C# desisti y ataque otro problema para el momento. Ahora es tiempo de reescribirlo para implementar todo esto:
  • SessionState
  • ApplicationState
  • Resources Pooling
  • Authorization
  • Authentication
  • Server/Client Buffering
  • Mutexes
  • Caching
  • Configuration File Directory Dependendy(Depende de AppDomain.SetConfigurationBytes que aun no esta implementado en Mono)
  • Virtual Relative/Absolute Paths checking.
Tambien hay que rediseñar todo esto:
  • Server/Application Buffering: Eliminar el hashtable de solicitudes y utilizar Pipelined Streams(un 10% de adicional de perfomance)
  • Reemplazar el parsing del HTTP Header un Regex.(un 2% adicional de perfomance)
  • Process Isolation and Application Pooling
  • Statistics
  • Host Naming
  • SSL: Implementar PKI.
En fin es un arduo trabajo, hasta el momento la api esta sencilla: BinDeal.Foundation.Net.Http.Server.HttpServer server = new BinDeal.Foundation.Net.Http.Server.HttpServer("BinDeal-WebServer"); server.Publications.Register( new HttpServerPublication( new HttpStandardEndPoint(8089), null, true, System.Net.IPAddress.Any, int.MaxValue)); HttpApplicationSetup setup = new HttpApplicationSetup(); setup.ApplicationName = "DefaultApp"; ApplicationDebugParams prms = new ApplicationDebugParams(); prms.Enabled = true; setup.Debug =prms; setup.EntryPointTypeName = typeof(FileBrowserAppEntry).AssemblyQualifiedName; HttpWebApplication webApp = new HttpWebApplication(setup); server.Applications.SetRoot(webApp.IdResource); webApp.TakeOnline(); server.Start(); Aqui les coloco algunos screenshots de una pequeña aplicacion web para explorar mis archivos de la PC.