miércoles, 13 de marzo de 2013

Iptables Facil en ubuntu

Si no disponemos de un hardware firewall pero queremos montar uno para proteger nuestro ordenador o servidor, podemos usar un software que nos proporciona Linux y es bastante potente llamado IpTables.


Para usar IpTables en Ubuntu debemos de crear un fichero dentro del directorio /etc/init.d/ al que podemos dar cualquier nombre, aunque os recomiendo poner algo descriptivo como “iptables.cf”. Dentro de este archivo tendremos todas las reglas que queremos aplicar darle una protección extra a nuestro Ubuntu.


Un ejemplo de un fichero de configuración de IpTables es el siguiente:



## Vaciamos las reglas
iptables -F
iptables -X
iptables -t nat -F

## Establecemos politicas predeterminada
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT

# Aceptamos todo de localhost
/sbin/iptables -A INPUT -i lo -j ACCEPT

# A nuestra IP le dejamos todo
iptables -A INPUT -s 192.168.2.1 -j ACCEPT

# A otra ip interna le permitimos todo
iptables -A INPUT -s 192.168.2.99 -j ACCEPT
iptables -A INPUT -s 192.168.2.100 -j ACCEPT

# Permitimos una conexion a ssh y telnet (22 y 23) desde un equipo
iptables -A INPUT -s 192.168.2.10 -p tcp --dport 22:23 -j ACCEPT

# A otro le permitimos acceso FTP
iptables -A INPUT -s 212.176.121.111 -p tcp --dport 20:21 -j ACCEPT

# El puerto 80 y 8080 (www) abierto, para un servidor web.
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 8080 -j ACCEPT

# Y el resto, lo cerramos
iptables -A INPUT -p tcp --dport 20:21 -j DROP
iptables -A INPUT -p tcp --dport 22:23 -j DROP
iptables -A INPUT -p tcp --dport 6001 -j DROP

# Cerramos rango de los puertos privilegiados. Cuidado con este tipo de
# barreras, antes hay que abrir a los que si tienen acceso.
iptables -A INPUT -p tcp --dport 1:1024 -j DROP
iptables -A INPUT -p udp --dport 1:1024 -j DROP

# impedimos iniciar conexion los puertos altos
# (puede que ftp no funcione)
iptables -A INPUT -p tcp --syn --dport 1025:65535 -j DROP

# Cerramos otros puertos que estan abiertos
iptables -A INPUT -p tcp --dport 3306 -j DROP
iptables -A INPUT -p tcp --dport 10000 -j DROP

Debemos darle permisos de ejecución al rchivo


chmod +x /etc/init.d/iptables.cf

Para arrancar el servicio no tenernos más que hacer


/etc/init.d/iptables.cf start

Si lo queremos parar


/etc/init.d/iptables.cf stop

Y si lo queremos reiniciar


/etc/init.d/iptables.cf restart

Podemos comprobar las reglas que se han aplicado con el comando


iptables -L

Tomado de: http://xandrusoft.blogspot.com/

martes, 12 de marzo de 2013

Cómo recuperar una contraseña olvidada en ubuntu


Podemos encontrarnos con la situación de que hemos perdido u olvidado la contraseña de superusuario o root que creamos cuando instalamos Ubuntu y ahora nos encontramos con que no podemos administrar nuestro sistema.

En el artículo del tutorial he puesto "recuperar, pero realmente lo que vamos a hacer es "cambiar la contraseña", porque la mayoría de las preguntas que me habeis hecho así han sido y para mejorar la búsqueda, lo he titulado así. Vamos allá.


1er Método:


  • Al iniciar el ordenador y cuando nos sale el Grub, seleccionamos arrancar en modo recovery (recuperación).
Nota: para los que os arranca Ubuntu directamente sin poder ver el Grub: lo haremos después de que carge la placa base pulsando escape, si no funciona pulsa shift, para entrar en el menú del grub.
Y en el menu del Grub que nos aparece, elige recovery mode (recuperación)
  • En el submenú que aparece elige "netroot" ("root" en las nuevas versiones), para colocarnos como superusuario sin contraseña.
  • Gracias a un lector del blog que nos deja este comando para solucionar el error: "Authentication token manipulation error passwd: password unchanged":
    Montamos de nuevo la raíz del sistema con permisos de escritura y lectura con el comando:
mount -rw -o remount /
  • Ahora cambia tu contraseña ejecutando el comando:
passwd tu_nombre_usuario
  • Pulsa Enter y escribe tu nueva contraseña, no se verá nada en la pantalla, no te preocupes, es por seguridad, pero en realidad está escribiendo
  • Pulsa enter y te pedirá que la repitas. La escribes de nuevo y vuelve a pulsar Enter
  • Apaga el sistema con el comando:
shutdown -r now
  • Pulsa enter y arranca el ordenador de forma normal, con tu nombre de usuario y la nueva contraseña.
Y listo ya tenemos solucionado el problema

No olvidéis anotar o, mejor aún, aprenderos de memoria la contraseña para que no os pase otra vez.

Nota: Si activamos la cuenta de superusuario o root nos pedirá la contraseña, que le hemos dado, para poder acceder a la terminal en Netroot.
Ojo, si la activamos y luego no nos acordamos ya no podemos acceder a la consola de Netroot para reparar cualquier problema. Para activarla seguid esta guía:
http://www.ubuntu-guia.com/2010/09/activar-desactivar-root-ubuntu.html.


2º Método:


Si lo anterior no os funciona, Arranca tu PC, y cuando salga el prompt del grub presionas la tecla "ESC"

Presiona la tecla "e" para editar. Desplázate hasta la linea del kernel que usas en caso de que sean 2 o más y presiona la tecla "e"

Sitúate hasta la linea del final y añade la siguiente línea:
rw init=/bin/bash

Presiona "Enter" y después "b" para reiniciar (boot) tu sistema

Tu sistema iniciará con el usuario Root y sin contraseña

Ahora ejecuta este comando cambiando nombreUsuario por el tuyo:
passwd nombreUsuario

Escribe la contraseña y te pedirá que la vuelvas a escribir

Reinicia el sistema,

Actualización: Si tu caso es que quitaste la opción de poner la contraseña en el arranque de Ubuntu, un amable lector del blog, nos deja la solución aquí

Actualización: Aporte de un usuario anónimo:
A los que les aparece el error de manipulación!!!!! la manera de solucionarlo es que al ingresar al grub, y seleccionar el modo de recuperación escojan la opción remount y seguimos con los pasos de la guía:
mount -rw -o remount /
passwd nombre_usuario
luego la pass
reiniciar y ya!!!!!!

Actualización: Aporte de un usuario anónimo:
Si tu problema es que has seleccionado “iniciar sesión sin contraseña” en la configuración de "Cuentas de usuario", la solución es:
pulsar “Ctrl+Alt+F1” para salir del entorno gráfico, nos “logeamos”, o sea ponemos nuestro nombre de usuario y ENTER. No nos va pedir contraseña, una vez ahí ejecutamos el siguiente comando;

sudo passwd -q nombreusuario
Nos pedirá que pongamos una contraseña, y la confirmación, es recomendable poner la que usamos antes del estropicio, normalmente la misma que pusimos durante la instalación. Si todo a ido bien nos dará un mensaje “passwd:contraseña actualizada correctamente”
Y ya está todo volverá a ser como antes.


martes, 28 de agosto de 2012

Sobre la obviedad de las patentes (Iphoneros.com)

Con todo esto del gran juicio Apple Vs Samsung, muchos de los que no están de acuerdo con el sistema de patentes se quejan del hecho de que una empresa pueda registrar una patente que es obvia y que eso impida a otras empresas innovar porque, aparentemente, no hay otra manera de hacer las cosas. Eso, le daría en la práctica toda la ventaja del mundo a la empresa que patenta esa idea obvia. Casi siempre se pone como ejemplo que alguien patente la rueda, y entonces, todos los fabricantes de vehículos que usen ruedas, tienen que pagar a esa empresa. Pues bien, hay mucho desconocimiento sobre el sistema de registro de patentes; muchos olvidan que hay leyes que regulan cómo se puede o no se puede registrar una patente, y en esas leyes hay una que habla sobre la obviedad de una idea, si esa idea es universal o no… si registrarla, impediría a todas las demas empresas continuar con su innovación. Registrar una patente no es tan fácil como entregarla y ya está. Una de esas leyes, controla lo universal o obvia que es una idea e impide que se puedan registrar cosas que puedan perjudicar a todos los demás inventores como si fuera una especie de impuesto revolucionario. Lo que casi todos olvidamos es que algo que es obvio hoy en día, no lo es cuando se registró… el momento en el que se registra una patente es muy importante.
Como ejemplo, tenemos el propio iPhone; cuando se anunció el iPhone original la Blackberry reinaba en el mundo de los smartphones. Casi era el móvil por defecto a tener sobre todo si la necesidad principal era seguir conectado a tu email en cualquier lugar. Muchos criticaron la falta de teclado físico en el iPhone, algunos incluso se reían. Hoy en día, es difícil encontrar un smartphone que venga con un teclado físico incorporado. Hoy es obvio que un smartphone sea todo pantalla, con dos o tres botones a los lados o debajo de la pantalla. En el 2007, no era tan obvio. Nadie ha registrado o podido registrar (que nosotros sepamos) un dispositivo que sea todo pantalla sin más, de manera que cualquiera que fabrique algo asi independientemente de su utilidad tenga que pagar a otra empresa, pero cosas como la manera de indicar que no hay más scroll que hacer al final de una página (una de las patentes que se han examinado y discutido en el juicio de Apple y Samsung) si están registradas. Muchas marcas utilizan diversas maneras para indicar eso… una línea azul que se ilumina ligeramente (Ice Cream Sandwich ‘de serie’ hace eso, por ejemplo) pero otras han utilizado exactamente la misma manera que podemos ver en iOS. Este tipo de detalles en una interfaz, tan obvios hoy en día, están registrados en ciertas patentes, que a menudo, están disponibles para licenciar por otras empresas y así permitir su utilización. De hecho es algo habitual en la industria el pagar por utilización de patentes aunque el resto de mortales, habitualmente, nunca llegamos a enterarnos de esos acuerdos. El sistema de patentes que hay implantado en EEUU, desde luego, no es perfecto. Se les puede criticar por muchas cosas. Pero antes de tirar por la vía fácil y criticar cosas que no se conocen bien, lo mejor es investigar un poco más y, si hay patentes que realmente impidan innovar a otras empresas, intentar modificar estas leyes para que nosotros, los que compramos estos aparatos y los utilizamos todos los días, podamos disfrutar de lo mejor que sean capaces de inventar empresas de electrónica de consumo como Samsung o Apple. La competencia nos beneficia a nosotros más que a nadie, pero suponemos que todos estamos de acuerdo en que si se demuestra que alguien ha utilizado ideas de otros sin permiso, se regule y se penalice si ha habido alguna infracción. El sistema de patentes puede llegar a ser muy malo, pero al mismo tiempo, podría ser la solución menos mala que tenemos disponible ahora mismo. ¿Qué pasará ahora que termina el juicio que más ha expuesto el sistema de patentes en la industria de la tecnología? Pues, en la práctica, en nada… simplemente ahora se pagarán las patentes que se utilicen, con dinero que venga de los beneficios de la venta de esos smartphones o lo que sea que fabrique una empresa. Empresas que hasta ahora no pagaban por utilización de ideas de otros, pagarán o pensarán en ideas nuevas. Esto es bueno para la innovación. Al mismo tiempo, sólo grandes empresas que se puedan permitir pagar por patentes conseguirán utilizar ideas de otros, y empresas pequeñas que no tengan acceso a esos precios no podrán acceder a un mercado que ahora se les cierra… en este sentido el sistema de patentes es realmente malo; nos encantaría ver a una start-up sacando adelante un smartphone mucho mejor que el iPhone (que, por supuesto, se puede conseguir, ¡sin duda!) pero en la situación en la que estamos ahora es altamente improbable. Si alguien intenta acechar el trono del iPhone como smartphone más vendido, lo más probable es que se trate de una gran empresa que se pueda permitir pagar millones de dólares en patentes. Una lástima para las pequeñas y medianas empresas. En este sentido, si que nos gustaría que fuera posible modificar la ley que regula las patentes para hacerlas asequibles también a este tipo de empresas y así, incentivar la competitividad del mercado. Fuente:

miércoles, 7 de diciembre de 2011

Depurar fugas de memoria en Java (Tomcat)

Depurar fugas de memoria en Java (Tomcat)
Hola a todos. Por fin logro sacar algo de tiempo para escribir el primer post de este año. Esta vez está relacionado con la depuración de bugs relacionado con la memoria.

Si tienes problemas de memoria con Tomcat, o en general con aplicaciones Java(OutOfMemoryException), necesitas o simplemente tienes curiosidad de saber la distribución de la memoria de tu aplicación, no sigas buscando, este es tu post.

Las opciones que voy a mostrar son opciones de configuración de la Máquina Virtual Java (JVM), por lo tanto son aplicables tanto a una simple clase con un método main, como a una aplicación sobre Tomcat o cualquier otro servidor de aplicaciones. Sin embargo, en este post voy a tomar como ejemplo Tomcat, ya que es lo que uso en el desarrollo de aplicaciones web.

Más concretamente utilicé estas opciones para investigar un problema que teníamos con Tomcat. Cada cierto intervalo regular de tiempo, el Tomcat se caía debido a un error de OutOfMemory. Por más que aumentamos la memoria, seguía cayéndose aunque a intervalos más grandes, por lo que empezamos a sospechar que había algo en nuestra aplicación que iba consumiendo memoria y no la liberaba. Nuestra aplicación tenía fugas de memoria.

Para resolverlo necesitabamos saber dónde estaba el problema, y al igual que ocurre cuando te rompes un hueso, el mejor diagnóstico se hace si tienes una radiografía de la memoria. Por suerte Java nos permite hacer esto. Para ello sólo hay que usar el comando jmap.

Antes de continuar comentar que todo lo que expongo aquí es para Java 6. Con Java 5 también lo podéis hacer a partir de cierta versión, pero el formato de los comandos cambia un poco. De todas formas, mi recomendación es que paséis a Java 6. El paso es casi inmediato y os ahorraréis muchos quebraderos de cabeza con estos comandos y opciones.

Para hacer un volcado de la memoria del Tomcat, tendréis que ejecutar lo siguiente:

bash$ jmap -dump:file=heap.hprof

donde es el id del proceso Tomcat. Podéis sacarlo con el comando ps:

bash$ ps -ef | grep tomcat
usuario 13832 1 79 22:37 pts/0 00:00:14 /usr/lib/jvm/java-6-sun/bin/java -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file=/opt/tomcat/conf/logging.properties -Djava.endorsed.dirs=/opt/tomcat/common/endorsed -classpath :/opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/commons-logging-api.jar -Dcatalina.base=/opt/tomcat -Dcatalina.home=/opt/tomcat -Djava.io.tmpdir=/opt/tomcat/temp org.apache.catalina.startup.Bootstrap start

En mi caso el pid sería 13832 y por tanto la ejecución del comando jmap quedaría así:

bash$ jmap -dump:file=heap.hprof 13832
Dumping heap to /opt/apache-tomcat-5.5.25/heap.hprof ...
Heap dump file created

Esto genera el fichero heap.hprof en el directorio donde ejecutéis el jmap. Este fichero es un volcado de lo que hay en la memoria del Tomcat, y por tanto ocupará tanto como la memoria del Tomcat. Comprobad que tenéis espacio en disco suficiente para generarlo.

Sin embargo, no necesitábamos una radiografía de la memoria en cualquier momento, la necesitábamos justo en el momento en que el hueso se rompía, es decir, cuando el Tomcat lanza la OutOfMemoryException. Por suerte, contamos con las opciones de la JVM. Para que Tomcat -y repito: Tomcat o cualquier aplicación Java- genere un volcado de la memoria al producir una OutOfMemoryException tenéis que poner entre sus JAVA_OPTS las siguientes opciones:

-XX:HeapDumpPath=/ruta/donde/guardar/el/fichero/ -XX:+HeapDumpOnOutOfMemoryError

Observad que es un más(+) lo que hay antes de HeapDumpOn..... Si ponéis un menos(-), no os funcionará. Es un error muy típico ;-)

En el caso del Tomcat, tendremos que editar el fichero catalina.sh y meter las opciones en la variable CATALINA_OPTS. Por ejemplo:

CATALINA_OPTS="-XX:HeapDumpPath=/tmp/ -XX:+HeapDumpOnOutOfMemoryError [...resto de opciones...]"

Un Tomcat funcionando con estas opciones generará un fichero en /tmp llamado heap.hprof automáticamente cuando se produzca una OutOfMemoryException. Más información sobre esas opciones en Java HotSpot VM Options.

Una vez configurado de esta forma, ya sólo teníamos que esperar a que el Tomcat volviese a fallar. Y de eso estábamos seguros. Una vez con el fichero hprof generado podemos usar dos herramientas para procesarlo.

Una es VisualVM. Es de Sun y viene con el JDK de Java 6. Es el comando jvisualvm que se encuentra en el directorio bin del JDK. Con esta herramienta puedes navegar por los objetos que hay en memoria, ver las clases que más instancias tienen y que más consumen, etc. Te muestra lo que hay en memoria literalmente, pero para mi gusto es demasiada información en bruto y quizás sea complicado ver lo que está pasando.

La otra herramienta es Eclipse Memory Analyzer. Esta herramienta procesa la información y saca gráficas y estadísticas útiles. Incluso te propone posibles errores. Con esta herramienta fue con la que rápidamente descubrimos el error, ya que la gráfica de tarta de la ocupación de la memoria estaba al 75% ocupada por cierta parte de la aplicación. Se trataba de una de nuestras cachés. De ahí, muy hábiles nosotros, dedujimos que el proceso de limpiado de esa caché no estaba funcionando correctamente y por tanto, esta caché era un saco donde se metían cosas, pero nunca salían. :-p

Espero que esto os ayude a resolver este tipo de problemas si es que lo tenéis, y si no tienes problemas de este tipo, ¿nunca te has preguntado cuanto ocupa tu aplicación en memoria y qué objetos ocupan más? Merece la pena probar.

tomado de: http://www.latascadexela.es/2009/02/depurar-fugas-de-memoria-en-java-tomcat.html

viernes, 25 de noviembre de 2011

miércoles, 27 de julio de 2011

Problemas con el calendario en Reporting services en produccion IIS7

Bueno me encontre con un problema con reporting services 2008 r2 en IIS 7, en desarrollo me mostraba los calendarios de los parametros tipo date time, pero en produccion no no cargaba el icono y al dar click saca un erro 404, buen pues aqui esta la solucion

se necesitan estas claves en web.config

 

It seems the two lines are needed:

<httpHandlers>           
            <add path="Reserved.ReportViewerWebControl.axd" verb="*" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" validate="false" />
</httpHandlers>

And,

<system.webServer>
        <handlers>
           <add name="ReportViewerWebControl" path="Reserved.ReportViewerWebControl.axd" verb="*" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
        </handlers>
</system.webServer>

 

viernes, 10 de junio de 2011

Cómo matar un proceso en PostgreSQL de forma segura

Cómo matar un proceso en PostgreSQL de forma segura

PostgreSQL Si algún proceso se queda colgado (aunque no sea debido directamente a postgres) se puede cancelar sin causar males mayores al postmaster. Primero averiguamos el id del proceso gestionando nuestra query y luego le mandamos un SIGTERM (-15):


psql template1
template1=# select procpid, datname, usename, waiting from pg_stat_activity ;
procpid | datname | usename | waiting
---------+----------+----------+---------
27702 | template1 | postgres | f
27710 | template1 | postgres | f
27756 | template1 | postgres | f
27720 | template1 | postgres | t
(4 rows)
q
su -
kill -15 27720

Fuente: http://s1lence.net

martes, 2 de noviembre de 2010

Link para consultar su datacredito en linea

Es relativamente dificil encontrarlo, lo pueden buscr en la pagina de datacredito y luego buscan donde dice mapa del sitio y se meten a consultas en linea

http://www.datacredito.com/wpsv6/wps/portal/Personas/ConsulteSuHistoriaDeCredito/OtrosMediosDeConsulta

actualizado el 28 de feb de 2011

Nuevo Link

https://www.datacredito.com.co/ciudadanos/web/index.html

jueves, 30 de septiembre de 2010

Les comparto el pensamiento de un gran amigo, y que comparto plenamente

Hace nueve años atrás, los titulares de los noticieros del medio día anunciaban de manera tradicional y poco desconcertante la toma guerrillera efectuada en la mañana o en la noche anterior por parte de las FARC, en muchas de las oportunidades era en un municipio del suroccidente colombiano y en especial en el departamento del Cauca. Desde hace algunos días los titulares de los noticieros vienen informando de los duros golpes efectuados por las fuerzas armadas de Colombia a las FARC, eso me hace recordar, que hace algunos años cuando apenas cursaba mis primeros semestres de derecho afirme ante algunos compañeros que si las FARC llevaban 50 años de presencia en nuestro territorio, por lo menos nos tocaría combatirlas de manera frontal durante 25 años para lograr ver resultados reales; la verdad, es que después de nueve años de haber asumido esa posición, considero que el avance militar del estado en la lucha contra las FARC es incomparable, el presidente Uribe nos enseñó que el derecho a la seguridad y a vivir de manera esperanzadora nuestros sueños, es posible concretarlos en nuestra amada patria; hoy los colombianos, sabemos que el derecho a la seguridad es innegociable y que debe seguir siendo una política de estado. El gran reto que debemos asumir los jóvenes de la generación X es no olvidar la historia que vivimos en nuestra infancia y adolescencia, luchar día a día con acciones pequeñas pero persistentes en hacer de nuestra sociedad una comunidad de personas mas solidarias, honestas y comprometidas con el desarrollo, respetando el medio ambiente, los derechos fundamentales y el derecho a construir conocimiento en la diferencia. Hoy nuestro nietos están mas cerca de vivir en una gran país, eso depende de todos nosotros, de nuestras acciones, pero en especial de no seguir cayendo en las omisiones que nuestros padres y abuelos tuvieron que caer; animo para combatir la corrupción, animo para hablar bien de nuestra patria en el exterior, animo para soñar y hacer soñar con nuestras palabras y actos a quienes no conocen a nuestro país; cada pesito que los corruptos se apropian es un pesito que nuestros nietos no verán para desarrollar su país, para mejorar en salud o incluso un pesito menos para su pensión. Este pedacito de tierra lo tomamos prestado de nuestro hijos y nietos.

POR FERNANDO HERNÁNDEZ VÉLEZ

miércoles, 21 de abril de 2010

Android 2.2


Hace rato lei que android 2.2 ya se esta cocinando, aunque muchas de las mejoras que incorporan ya las tengo gracias a Cyanogen mod 5.0.6 que pude instalar en mi nexus one gracias a las grandiosas guias que aloja El androide Libre (Excelente web acerca de android), la que mas me interesa es la activacion del trasmisor fm,


El androide Libre

desde el mismo dia que adquire el telefono, (El mejor telefono celular que he tenido), empece a buscar webs con contenido de aplicaciones, y trucos sobre estos telefonos y su asombroso sistema operativo, (ya que soy un amante del software libre), encontre esta web, me a pareceido excelente, siempre esta actualizada, tanto en su grupo de facebook Unete aqui, o en twitter, se las recomiendo mucho. ahi encontraran guias sobre sus telefonos, explicacion y recomendacion de nuevas aplicaciones, unboxin de nuevos telefonos y su analisis muy completos porsupuesto.

lunes, 22 de marzo de 2010

Nexus one simplemente maravilloso


Hola Hace unos dias adquiri un telefono de google, como no lo comercializan en colombia, bien pues para eso esta Mercado Libre en verdad me sorprendió, es muy superior al iphone sobre todo teniendo en cuenta que tiene un S.O libre android 2.1, eso nos da la libertar de hacer lo que queramos con el, a diferencia de su competidor de las manzanitas que todo es pagando (No le puedes ni cambiar la bateria tu mismo), bueno en fin, mi recomendación el nexus antes del iphone mil veces

Google Nexus One vs Ihone 3gs



Dado que Apple y Google parecen entrar en una particular "guerra de los smartphones", parece apropiado hacer una comparativa entre los dos modelos más revolucionarios que a día de hoy tenemos:

* Capacidad de almacenamiento:
- iPhone tiene opciones de 8, 16 y 32 GB.
- Nexus One viene con 4 GB de memoria interna extendible a 32 GB (osea 4gb,8gb,16gb,32gb).

* Duración de la batería:
- iPhone llega a las 300 horas en espera.
- Nexus One a las 250.

Mientras que si en tiempo hablado con 3G conectado gana Google con 7 horas de duración frente a las 5 del producto de Apple.

* Cámara:
- 3 megapíxeles de grabación y edición de vídeo lleva el iPhone.
- Nexus One tiene 5 megapíxles de grabación y edicion de vídeo y flash.

* Ambos cuentan con Wifi, 3G, GPS y control de voz, pero el de google es superior ya que cuenta con google voice.

* Tiendas de Aplicaciones:

- App Store: la tienda de aplicaciones del gadget de Apple fue la primera en aparecer y la más importante en este momento con casi 100.000 apps la mayoria pagando.

- Android Market cuenta por el momento con unas 30.000 la mayoria gratis, a eso se debe que este creciendo y en poco tiempo pueda superar a itunes.

* Disponibilidad:
- iPhone está sujeto a compañías telefónicas a lo largo y ancho del mundo, amarndose a planes hasta de dos años

- El móvil de Google estará por ahora sólo en Estados Unidos, aunque se podrá comprar libre en su web y viene libre para activar en cualquier operador sin necesidad de desbloquearlo o cosas asi 100% free.


* Lo mejor de cada uno:

- Del iPhone: facilidad de uso, interfaz gráfica.

- Del Nexus One: facilidad de uso, interfaz gráfica y diseño potente hardware, mejor integración de google maps, voice y mail, libre, ademas de su precio 40% menos que el iphone.

Sigueme por

qrcode

jueves, 17 de diciembre de 2009

Trucos SQL utiles en Postgres

conocer el tamaño de las bases de datos
select pg_database_size(pg_database.datname)) AS size FROM pg_database;

ver consultas en ejecucion
select pg_class.relname, pg_locks.transactionid, pg_locks.mode, pg_locks.granted as "g",
substr(pg_stat_activity.current_query,1,30), pg_stat_activity.query_start,
age(now(),pg_stat_activity.query_start) as "age", pg_stat_activity.procpid
from pg_stat_activity,pg_locks
left outer join pg_class on
(pg_locks.relation = pg_class.oid)
where pg_locks.pid=pg_stat_activity.procpid
order by query_start;

viernes, 14 de agosto de 2009

Asignar mas memoria a tomcat

export CATALINA_OPTS="-Xms2048m -Xmx2048m"

PostgreSQL: HW Tunning

Holla buscando por ahi encontre este articulo

Doc Original: http://www.juancarlosmoral.es/postgresql-hardware-tunning/


Introducción

Creo que muchas de las personas que utilizan PostgreSQL, ya sea a nivel particular o en proyectos de explotación, desconocen que este formidable servidor parte inicialmente de una configuración tan mínima que resulta inadecuada en la mayoría de los casos. Esto se hace para asegurar que el servidor arrancará casi con cualquier configuración hardware, aunque, por supuesto, no es válida para gestionar tus bases de datos de manera eficiente.

Se puede mejorar el rendimiento de PostgreSQL atacando desde dos frentes:

1. Hardware: configurando y optimizando los recursos hardware de que va a disponer el servidor, como por ejemplo la memoria.
2. Software: utilizando técnicas basadas en software como el uso de índices, optimización de consultas, vacuuming, etc.

Es muy importante comenzar por ajustar el hardware para, una vez optimizado, olvidarnos de él y poner todas nuestras luces en la afinación sotfware. En este artículo pretendo explicar de manera sencilla cómo se puede pasar de un rendimiento del 0% al 100% modificando tan sólo un par de parámetros de su fichero de configuración ( postgresql.conf). Me he basado en el excelente documento de Bruce Momjian, PostgreSQL Hardware Performance Tunning, para escribir esta pequeña guía práctica.

La intención es la de ayudar al lector en este proceso. Va dirigido a cualquier persona que ya ha instalado PostgreSQL en su sistema GNU/Linux y ahora se dispone a extraer toda la potencia de este magnífico RDBMS. El enfoque utilizado es eminentemente práctico: seguiremos todos los pasos para hacer un ajuste real. Asumiremos que disponemos de un servidor PostgreSQL 8.x, 1 GB de RAM y un máximo de 100 conexiones a la BD.



Agradecimiento:

Agradezco a los miembros de la lista plpgsql-es-ayuda y en especial a Álvaro Herrera, la ayuda recibida en la revisión y actualización de este artículo.

Memoria RAM y paginación

Antes de comenzar, es preciso recordar aunque sea de forma somera, el papel de la memoria RAM en un ordenador, así como los efectos indeseados de la paginación.

Podemos imaginarnos la memoria RAM como un recurso limitado divido en rodajas o segmentos. Los segmentos, de un tamaño fijo, se agrupan formando páginas de memoria. En la memoria se guarda todo lo que la CPU necesita para hacer su trabajo, esto incluye programas, datos requeridos por los programas, el kernel,… y por supuesto, las zonas de trabajo de postgres.

Para optimizar el uso del espacio disponible en la memoria, las páginas que hace algún tiempo no se utilizaron son expulsadas por el S.O. al disco, a una zona denominada swap (intercambio). Esta actividad se denomina swap pageout y no supone un inconveniente, ya que se produce en periodos de inactividad de la CPU.

Lo malo viene cuando hay que recuperar una página desde la swap (que recientemente había sido expulsada de la memoria), porque el programa que la requiere tendrá que esperar hasta que se encuentre de nuevo allí. Este efecto adverso, que crece a medida que hay más páginas que se tienen que traer de la swap, se conoce con el nombre swap pagein o paginación.

El reto de nuestra afinación va a consistir en optimizar el uso de memoria para postgres, minimizando en lo posible el número de intercambios con la swap (pagein). El mejor ajuste de los parámetros de configuración será aquél que obtenga la máxima disponibilidad en memoria para la BD, sin perjudicar al resto de elementos, que también deben permanecer en memoria.

SHARED_BUFFERS

El número de shared_buffers es el parámetro que más afecta al rendimiento de PostgreSQL. Este valor, de tipo entero, indica el número de bloques de memoria o buffers de 8KB (8192 bytes) que postgres reservará, como zona de trabajo, en el momento del arranque para procesar las consultas. De forma predeterminada (en postgresql.conf), su valor es de 1000. Un número claramente insuficiente para conseguir un rendimiento mínimamente aceptable.

Estos buffers se ubican dentro de los denominados segmentos de memoria compartida. Es importante saber que el espacio ocupado por el número de buffers que pretendamos asignar, nunca podrá exceder al tamaño máximo que tengan los segmentos de memoria. En caso contrario, postgres se negará a arrancar avisando con un error que no puede reservar el espacio solicitado.

Llegados a este punto, te preguntarás:

* ¿Cuántos shared_buffers puedo asignar?
* ¿Cómo sé cual es el tamaño de un segmento?
* ¿Qué puedo hacer si se supera el tamaño máximo del segmento?

Vamos a resolver todas estas cuestiones de forma práctica, así que coge una taza de café y siéntate frente a tu servidor. El proceso consiste en los siguientes pasos:

1. Considerar un número superior al actual de shared buffers (comenzaremos por un 10% del total de la memoria)
2. Modificar el tamaño del segmento si no cabe el número de buffers
3. Comprobar el rendimiento y paginación
4. En función del resultado obtenido, aumentar o disminuir el porcentaje de memoria y empezar de nuevo

Una buena recomendación (lee el artículo de B. Momjian) es la de empezar asignando un 10% del total de la memoria RAM para shared_buffers y a partir de ahí, ir aumentando o disminuyendo dicho porcentaje en función del rendimiento y la paginación.

Para comprobar el rendimiento, aplica EXPLAIN a tus consultas. Para ver la paginación del servidor, puedes usar herramientas como vmstat o ipcs (consulta sus páginas man).

Comenzamos:

El 10% de 1 GB: (1048576 KB/10) = 104857 KB
shared_buffers: (104857 KB/8 KB) = 13107

Asignamos este valor a la variable shared_buffers (postgresql.conf) y reiniciamos el servidor. ¿Qué ocurre? Lo peor. Ahora… ¡ni siquiera arranca!.
Bueno, no te pegues un tiro todavía y mira el log (generalmente postgresql.log):

FATAL: no se pudo crear el segmento de memoria compartida: Argumento inválido
DETALLE: La llamada a sistema fallida fue shmget(key=5432001, size=112009216,
03600).
HINT: Este error generalmente significa que una petición de PostgreSQL para
obtener un segmento de memoria compartida excedió el parámetro SHMMAX del
kernel. Puede reducir el tamaño de la petición o reconfigurar el kernel con
un SHMMAX superior. Para reducir el tamaño de la petición (actualmente
112009216 bytes), reduzca el parámetro de PostgreSQL shared_buffers
(actualmente 13107) y/o el parámetro max_connections (actualmente 100).
Si el tamaño de la petición ya es pequeño, es posible que sea inferior
al parámetro SHMMIN del kernel, en cuyo caso se requiere alzar el
tamaño de la petición o disminuir SHMMIN.
La documentación de PostgreSQL contiene más información acerca
de la configuración de memoria compartida.

Está claro, ¿no?. El tamaño ocupado por los 13107 buffers que has pedido reservar, simplemente no caben en el tamaño actual de segmento (SHMMAX). Postgres en el arranque intenta reservar este espacio, pero al no poder hacerlo, desiste. ¿Qué podemos hacer?, sigue leyendo.

En Linux, de forma predeterminada, el tamaño de un segmento de memoria compartida es de 32MB. Podemos comprobarlo haciendo (el resultado es en nº de bytes):

$ cat /proc/sys/kernel/shmmax
$ 33554432

Y el espacio que requiere el número de buffers, es superior al tamaño del segmento:

13107 buffers ocupan 107372544 bytes (13107 * 8192 bytes/bloque)
107372544 > 33554432

La solución está en modificar el tamaño máximo del segmento de memoria compartida. Esto lo hacemos asignando un nuevo valor al parámetro del kernel SHMMAX. ¿Qué valor? Si volvemos atrás, al mensaje de error, avisa exactamente de cual es el tamaño mínimo que postgres necesita para arrancar. El tamaño de SHMMAX debe ser, como mínimo, ese valor.



NOTA:

En la documentación de la versión 7.4, se ofrecía una fórmula para calcular un valor razonable del parámetro SHMMAX en función del nº de buffers, de las conexiones concurrentes y de varias constantes. Esta fórmula ya no se utiliza en la versión 8.x.

Podemos cambiar fácilmente el valor usando el programa sysctl:

# sysctl -w kernel.shmmax=112009216

Alternativamente, si tu S.O. no dispone de ese programa, puedes usar la forma clásica:

# echo 111766938 > /proc/sys/kernel/shmmax
# echo 111766938 > /proc/sys/kernel/shmall



Nota:

Puede guardar este valor de forma permanente en /etc/sysctl.conf, de forma que los cambios se conserven entre arranques: kernel.shmmax=111766938

Reinicia postgres. ¿Funcionó esta vez?. ¡Bien!. Haz nuevas pruebas de rendimiento y sigue con el algoritmo.



NOTA:

El resto de parámetros del kernel de Linux, como por ejemplo SHMALL, están generosamente dimensionados con sus valores default y normalmente no requieren cambios. Si, de todos modos, quieres modificar el tamaño máximo de la memoria compartida (SHMALL), debes tener en cuenta que hay que expresarlo en número de páginas (y no de bytes), usando la siguiente fórmula: ceil(SHMMAX/PAGE_SIZE) El tamaño de página (PAGE_SIZE) para Linux 2.4 y 2.6, es de 4KB.

WORK_MEM

Este parámetro configura el espacio de memoria que postgres utiliza para realizar ordenaciones de tablas o de resultados parciales de consultas, sobre todo en cláusulas ORDER BY, CREATE INDEX o MERGE JOIN.

Este valor es más dificil de configurar porque depende, por un lado, de lo grande que sean las tablas o resultados que hay que ordenar, y por otro, del número de peticiones simultáneas para esa misma consulta (para cada una se empleará la misma cantidad de memoria).

Una buen comienzo es asignar entre un 2% y un 4% del total de la memoria si prevemos pocos accesos simultáneos a grandes sesiones de ordenación y mucho menor, si esperamos muchos accesos simultáneos a sesiones de ordenación pequeñas. Como antes, lo mejor es ir probando distintos valores y ver en qué pueden afectar a la paginación adversa (swap pagein). El valor hay que expresarlo en KB.

En nuestro ejemplo, hemos optado por usar un 4% de la memoria:

El 4% de 1 GB: 41943 KB (1048576 KB*4)/100
work_men = 41943

Referencias


* PostgreSQL Hardware Performance Tunning – http://www.ca.postgresql.org/docs/momjian/hw_performance/
* Managing Kernel Resources – http://developer.postgresql.org/docs/postgres/kernel-resources.html
* Lista de correo pgsql-es-ayuda – http://archives.postgresql.org/pgsql-es-ayuda/2005-11/msg00563.php