Este navegador no soporta o no tiene activado el soporte Javascript
automenu...




Seguir en Linkedin Seguir en Linkedin Seguir en FaceBook Compartir en Facebook Compartir  Seguir en FaceBook Seguir en Twitter a @rojasdelgado Seguir en Twitter a @rojasdelgado Compartir en Twitter (twittear)  Twittear  Compartir en Pinterest (pinear) Seguir en Pinterest (pinear) Compartir en Pinterest (pinear)  Pinear  Recomendar por correo electrónico Recomendar

tarjeta de visita de José Antonio Rojas Delgado

José Antonio Rojas Delgado

Diplomado en Informática
Analista - Programador de aplicaciones informáticas de gestión
Diseñador Web - Webmaster - SEO
Formador Ocupacional - Teleformador
rojasredes@gmail.com
950 396 239
629 62 70 84



DESARROLLO DE APLICACIONES INFORMÁTICAS DE GESTIÓN PERSONALIZADAS A MEDIDA

Disfruta de una aplicación informática que te gestione tu negocio o parte de él.
De esta forma podrás aumentar la productividad a la vez que conseguirás ahorrar tiempo de mecanización:
Desarrollo aplicaciones para Windows, Linux y dispositivos móviles con Android
Consulta la tienda y pide presupuesto sin compromiso
PROGRAMA JARDCOPY (COPIAS DE SEGURIDAD INCREMENTALES EN MÚLTIPLES CDs Y DVDs)


DESARROLLO DE APLICACIONES WEB Y DISEÑO DE PAGINAS WEB PERSONALIZADAS A MEDIDA

Disfruta de una aplicación web que te gestione tu negocio o parte de él desde cualquier lugar y equipo informático.
Basta con tener acceso a internet para poder acceder a tu información empresarial inmediatamente.
Y disfruta de una página web que constituya la imagen digital de tí o de tu empresa, enganchada a redes sociales (facebook, twitter...) y con correo webmail desde sólo 24 euros al año
Consulta la tienda y pide presupuesto sin compromiso
Entiende tu presupuesto


DISEÑO E IMPARTICION DE CURSOS DE TELEFORMACION PERSONALIZADOS A MEDIDA

Aprende a tu ritmo con un curso de teleformación a medida de tus conocimientos previos, de tus objetivos y de tu presupuesto.
Desde sólo 10 euros
Consulta las condiciones particulares en la tienda y pide presupuesto sin compromiso
CURSO DE PARTICIONADO DE DISCOS DUROS (DESDE CERO)
CURSO DE UBUNTU (DESDE CERO)
CURSO DE REDES (DESDE CERO)


SERVICIO TÉCNICO INFORMÁTICO A DOMICILIO

Disfruta de un servicio técnico orientado a la prevención de fallos.
No te quedes tirado en tu negocio por falta de anticipación a los posibles problemas que puedan surgir en tu acceso a internet, en tu instalación de red local, cableada o inalámbrica (WIFI), en tus ordenadores, impresoras y demás dispositivos periféricos.
Trabajo en toda la comarca de Cuevas del Almanzora, Vera, Huércal Overa, Puerto Lumbreras, Lorca, Aguilas y Almería Capital.
Consulta las condiciones particulares en la tienda y pide presupuesto sin compromiso.

ESPACIOS WEB EN LOS QUE TRABAJO O COLABORO


CURSOS DE TELEFORMACION ACD/CRE (GRATIS)

Cursos preparados para los acompañamientos realizados como voluntario del proyecto ANDALUCIA COMPROMISO DIGITAL y jornadas de sensibilizacion y otros cursillos que he impartido como voluntario de CRUZ ROJA ESPAÑOLA

informática básica para principiantes
informática para el empleo
internet para la tercera edad
mis apuntes del curso de SOCORRISMO terrestre
TÚ PUEDES CAMBIAR EL MUNDO

VIDEOS DEL YOUTUBE
(generados para los cursos de teleformación, ...)


Windows 7, arrancar y apagar


ver en YouTube

Windows 7, propiedades del sistema


ver en YouTube

Windows 7, el escritorio


ver en YouTube

Windows 7, el bloc de notas


ver en YouTube

Introducción a la programación de páginas web con HTML básico


ver en YouTube

uso de BLOJ desde un telefono movil inteligente con sistema operativo Android


ver en YouTube

EL ARTE DE NO DISCUTIR

SI ASIENTO Y CONSIENTO TODO LO QUE ESCUCHO, Y DEJO QUE LA GENTE CREA EN LO QUE HABITUALMENTE PIENSA, SIEMPRE ME APRECIARÁN COMO AMIGO, APARENTEMENTE, PORQUE NO LES HAGO PASAR EL MAL RATO DE UNA DISCUSIÓN, PERO SEGUIRÁN SIENDO SIERVOS, ESCLAVIZADOS POR SU PROPIA IGNORANCIA.
SI LES DISCUTO SUS IDEAS Y LES HABLO DE NUEVOS ENFOQUES Y NUEVAS SOLUCIONES, Y CONSIGO QUE DUDEN DE LO QUE HABITUALMENTE PIENSAN Y QUE PIENSEN POR SÍ MISMOS, CONSEGUIRÁN SER LIBRES GRACIAS A SU PROPIA FLEXIBILIDAD QUE LES HACE AUMENTAR SU SABIDURÍA, QUE NO POR MIS PROPIAS IDEAS, QUE TAL VEZ POCO O NADA LES APORTARÁN.
PERO ALGUNOS, LOS INFLEXIBLES, QUIZÁ DEJARÁN DE APRECIARME COMO AMIGO, POR HACERLES PASAR EL MAL RATO DE UNA DISCUSIÓN EN LA QUE TAL VEZ CREEN QUE PONGO EN DUDA LA CLARIDAD DE SU PENSAMIENTO.
........................
ESTIMADOS AMIGOS Y QUERIDAS AMIGAS, APARENTES O NO, SABED QUE
SI ALGUN DÍA DISCUTIMOS NO ES PORQUE QUIERA IMPONEROS MIS HUMILDES IDEAS,
SOLO DESEO LLEGAR A SER LIBRE GRACIAS A LA SABIDURÍA Y A LA DUDA QUE ME APORTÁIS CON LAS VUESTRAS.
Y AUNQUE APRECIO VUESTRA AMISTAD, TANTO LA REAL COMO LA APARENTE,
HE DECIDIDO TRABAJAR CADA DÍA UN POCO POR VUESTRA LIBERTAD,
ASÍ QUE CUANDO DISCUTAMOS PODRÉIS PENSAR EN LIBERTAD Y ODIARME LIBREMENTE,
PERO DE MOMENTO DISFRUTAD DE MI APARENTE IGNORANCIA TANTO COMO YO DISFRUTO DE VUESTRA APARENTE AMISTAD.

MIS MEJORES AMISTADES SON AQUELLAS CON LAS QUE HE DISCUTIDO LARGAMENTE SOBRE UNA PLURALIDAD DE TEMAS, HEMOS LLEGADO A CIERTOS PUNTOS DE TOTAL DESACUERDO, Y CONVIVIMOS DIA A DIA SABIENDO QUE TENEMOS MUCHOS PUNTOS EN COMÚN
EXCEPTO ÉSTOS.

A ELLAS VA DESTINADA ESTA PÁGINA WEB, PORQUE LO QUE AQUÍ PUBLICO Y COMPARTO SÓLO ES
EL RESULTADO DEL LIBRE ESTADO ACTUAL DE MI MENTE,
Y ESO SÓLO SE LO DEBO A QUIENES ME QUIEREN, APRECIAN Y RESPETAN.
--------
GRACIAS POR VUESTRA SONRISA.
---------------

... PORQUE EL SABER NOS HACE MÁS LIBRES
PERO YO RESPETO LA LIBERTAD DE QUIEN DESEA SEGUIR SIENDO IGNORANTE
TANTO COMO APRECIO LA DEDICACIÓN DEL BUEN MAESTRO QUE,
QUERIENDO O SIN QUERER ENSEÑARME,
ME HACE DUDAR.


WEBMAIL

ENVIAME UN COMENTARIO O UNA CONSULTA
SOBRE INFORMÁTICA Y NUEVAS TECNOLOGÍAS
si no conociera la respuesta, la buscaría para tí
ó ENVIAME UN ARCHIVO


FACEBOOK - SIGUEME


APRENDE A RELLENAR UN SUDOKU

OPTIMÁTICA - EL BLOG DE JOSÉ ANTONIO

PHP Y LOS TEXTOS EN ESPAÑOL





El lenguaje PHP no gestiona bien los caracteres con tilde que usamos en español (castellano).
Me refiero a los caracteres á é í ó ú Á É Í Ó Ú. Y también por extensión a ñ Ñ y otros similares.


Por ejemplo, la funcion stripos($pajar,$aguja) debería buscar la aguja en el pajar ignorando mayúsculas y minúsculas. Y efectivamente lo hace, pero con los caracteres ordinarios del idioma inglés, que no incluyen los caracteres españoles.

Así que la línea
$pos=stripos($pajar,$aguja);
no funciona cuando el pajar y la aguja contienen caracteres españoles.

La primera idea para adaptar el código al español podría ser
$pos=stripos(strtolower($pajar),strtolower($aguja));
pero esto sigue fallando, porque la función strtolower() no convierte a minúsculas los caracteres españoles. Tampoco la función strtoupper() convierte a mayúsculas el texto en español.

Hay mucha documentación de PHP que remite al uso de una declaración del idioma en uso para estas funciones. Dice que se incluya una línea con el contenido siguiente:
setlocale(LC_ALL,"es_ES");
Bien, ésto sencillamente no funciona: ver http://www.rojasdelgado.com/kkk/setlocale

así que finalmente la solución pasa por currárselo uno mismo:

function SINTILDES($texto)
{
     $r=$texto;
     $listatildes = array(
           'a' => array('á','à','â','ä'),
           'e' => array('é','è','ê','ë'),
           'i' => array('í','ì','î','ï'),
           'o' => array('ó','ò','ô','ö'),
           'u' => array('ú','ù','û','ü'),
           'A' => array('Á','À','Â','Ä'),
           'E' => array('É','È','Ê','Ë'),
           'I' => array('Í','Ì','Î','Ï'),
           'O' => array('Ó','Ò','Ô','Ö'),
           'U' => array('Ú','Ù','Û','Ü')
     );
     foreach($listatildes as $sintilde=>$contilde)
     {
          $r = str_replace($contilde,$sintilde, $r);
     }
     return $r;
}

function MAYUSCULAS($texto)
{
     $r=$texto;
     $listacambios = array(
          'Á' => 'á',
          'É' => 'é',
          'Í' => 'í',
          'Ó' => 'ó',
          'Ú' => 'ú',
          'Ñ' => 'ñ'
     );
     foreach($listacambios as $mayusculas=>$minusculas)
     {
          $r = str_replace($minusculas,$mayusculas, $r);
     }
     return strtoupper($r);
}

function MINUSCULAS($texto)
{
     $r=$texto;
     $listacambios = array(
          'Á' => 'á',
          'É' => 'é',
          'Í' => 'í',
          'Ó' => 'ó',
          'Ú' => 'ú',
          'Ñ' => 'ñ'
      );
      foreach($listacambios as $mayusculas=>$minusculas)
      {
          $r = str_replace($mayusculas,$minusculas, $r);
      }
      return strtolower($r);
}
  


FALACIAS INFORMATICAS





Falacias informales, de argumentación:

- Lógica Circular: La conclusión se deriva a partir de premisas basadas en la propia conclusión.
La seguridad informática, cifrado y contraseñas, sólo le importa a aquellos que tienen algo que ocultar. Debes tener algo que ocultar si te interesas por la seguridad informatica.

- Falso Dilema: Presentar dos opciones opuestas como las únicas mientras escondemos otras alternativas.
Vamos a tener que gastar menos en seguridad informática o perderemos nuestra provisión para emergencias informáticas. No podemos permitirnos perder nuestra provisión para emergencias informáticas. Por ello tenemos que gastar menos en seguridad informática.

- Ad Hominem: Evitar el argumento lanzando un ataque irrelevante a la persona y no a su argumento.
Cualquiera que diga que la seguridad informática es importante, es un republicano que odia a la monarquía.

- Evidencia Anecdótica: Ignorar la evidencia alcanzada por la búsqueda sistemática o estudios en favor de algunos relatos de experiencias personales.  
Voy a seguir sin preocuparme de la seguridad informática de mi empresa. Mi padre no tuvo que preocuparse de eso y dirigió la empresa hasta que se jubiló.

- Apelación a Práctica Común: Afirmar que algo es verdad porque es una práctica común.
Esta empresa tiene algunos problemas de seguridad informática. Pero no pasa nada aquí que no pase en el resto de las empresas.

- Apelación a las Consecuencias de una Creencia: Argumentar que una creencia es falsa, ya que implica algo que no quieres creer.
Ese no puede ser el responsable de seguridad informática de la empresa. Si lo fuera, estaría mintiendo sobre que no conoce que se haya producido la fuga de información. Y él no es el tipo de hombre que mentiría.

- Apelación al Miedo: Un argumento que se hace incrementando el miedo y los prejuicios hacia el lado opuesto. 
Pronto tendremos mas cortafuegos que hackers.

- Apelación a la Adulación: Usar una adulación irrelevante para incluir un argumento infundado, para que éste sea aceptado junto con la adulación. 
No es necesario preocuparse por la seguridad informática. Los informáticos inteligentes y sofisticados, por supuesto, reconocerán que tengo razón cuando lean ésto.

- Apelación a la Ignorancia: Una afirmación es cierta simplemente porque no se ha probado falsa (o falsa, porque no se ha demostrado cierta.)
Nadie me ha probado que hay hackers atacando a mi servidor, así que sé que no hay hackers atacándolo.

- Apelación a la Incredulidad: Si una aseveración suena increíble, debe ser falsa.   
Esta espléndida red inalámbrica basada en un router que me costó más de 5000 euros nunca me ha reportado fuga de información. ¿Por qué debería cambiar el algoritmo de cifrado?

- Apelación a la Naturaleza: Hacer que su afirmación resulte más creíble, comparándola con el ?buen? mundo natural.   
Por supuesto que un cortafuegos es antinatural. No ves animales que usen cortafuegos en la naturaleza.

- Apelación al Ridículo: Presentar el argumento del oponente de forma que parezca absurdo. 
Creer que tu sistema está protegido de hackers es como creer en las previsiones meteorológicas.

- Apelación a la Tradición: Afirmar que algo es cierto porque (aparentemente) siempre ha sido así.
Siempre se ha usado este algoritmo de cifrado. Por tanto ese nuevo algoritmo de cifrado no debería usarse.

- Peso de la Prueba: No necesito probar mi afirmación ? tú debes probar que es falsa.
Defiendo que no es necesario usar cortafuegos. Demuéstrame que me equivoco.

- Falacia Genética: Atacar la causa o el origen de una afirmación, en lugar de a la afirmación misma.
Por supuesto, los principales medios de comunicación del pais no van a decir que se necesita ese cortafuegos por hardware.

- Argumento Especial: Los principios universales no se aplican conmigo o con mi argumento.
Ninguna instalación informática está a salvo de hackers. Sin embargo, yo no tengo constancia de que alguno haya atacado mi instalación.

- Apelación a la Probabilidad: Asumir que porque algo puede pasar, inevitablemente va a pasar
Hay miles de millones de sistemas informáticos con miles de ordenadores en internet. Así que debe haber otro ordenador más interesante que atacar para los hackers, antes que el mío.

- Intersección Malinterpretada: Asumir que porque dos cosas compartan una propiedad, eso las convierte en la misma cosa.    Una teoría puede significar una idea sin demostrar.
Los informáticos usan el término teoría de la seguridad de la información. Por lo tanto la seguridad de la información es una idea sin demostrar.

- Infalsabilidad: Realizar una afirmación que no puede probarse que es falsa, porque no existe ninguna forma de comprobar si es cierta o falsa.
Aquel correo informático privado pudo ser leído por terceros porque estaba poseído por demonios.

( modificado del original http://www.dreig.eu/caparazon/ )  


ESQUIVANDO LA CACHÉ DEL NAVEGADOR





La memoria caché del navegador es un gran invento:

-Cada vez que navegas por un contenido nuevo, que antes no habías visitado, el navegador lo descarga del servidor y lo visualiza, pero además guarda dicho contenido en el disco duro local, para su uso posterior.

-Cuando navegas la segunda vez por una página o tienes que descargar otra vez la misma imagen o el mismo fichero, si está guardado en la caché, el navegador no hace una petición al servidor, sino que carga y visualiza el contenido localmente guardado.

Este invento viene muy bien porque así se ahorra tráfico en internet. La cuestión es si eso interesa a los usuarios o no. A los programadores no, ya lo anticipo.

En particular venía muy bien cuando teníamos conexiones a internet lentas, via módem 56Kbps o similares, y las páginas que descargábamos pertenecían a eso que se ha dado en llamar WEB 1.0, páginas de contenidos estáticos sobre todo.

Pero ahora ya no tenemos conexiones lentas, y la web que navegamos es WEB 2.0, donde las páginas son e incluyen contenidos dinámicos, que pueden cambiar en cualquier momento.
La dirección de las páginas no cambia, pero sí sus contenidos. El navegador sabe que un contenido ha sido visitado gracias a su dirección de descarga. Pero nada sabe sobre si dicho contenido ha cambiado en el servidor desde la última descarga.

Para más asombro, el botón de recargar de los navegadores no se salta la caché como cualquier usuario pensaría intuitivamente que debería hacer.

Para recargar saltándose la caché hay que usar el teclado. Las combinaciones de teclas
CTRL+R
ó
CTRL+F5
suelen ser las que usan los navegadores para este fin.

Este método funciona bien para la recarga de la página principal.
La petición síncrona de la página principal sí que se produce esquivando la caché.
Eso incluye el código PHP, ASP, JSP o cualquier código que se ejecute en el servidor.
Pero ¿QUÉ PASA CON LAS PETICIONES ASÍNCRONAS?

Eso incluye el código javascript principal, pero no aquellos objetos que son cargados asíncronamente a través de direcciones estáticas.
Eso incluye la animación flash swf principal, pero no aquellas secundarias o hijas cargadas por ésta, que son llamadas a través de una dirección estática. Tampoco incluye aquellos contenidos descargados asíncronamente mediante el método .load() o similares
Eso incluye el applet java principal, pero no los objetos que son cargados asíncronamente por él usando direcciones de descarga estáticas.


¿Cuál es el problema?

Desde luego no es culpa del lenguaje o plataforma de desarrollo.
Tampoco es culpa de los navegadores, aunque bien es cierto que algunos facilitan más que otros el borrado de la caché o son configurables para que la caché se borre automáticamente al cerrar el programa.

¿Cuál es el gran problema de la caché de los navegadores que tenemos que esquivar los programadores?
Pues cuando lo que se visualiza es el resultado de peticiones asíncronas de contenidos cuya dirección de descarga no cambia pero que resultan ser contenidos que cambian dinámicamente.
Por ejemplo una foto que es accedida asíncronamente, vía AJAX, AS3,... por
http://www.rojasdelgado.com/foto.jpg
que resulte que cambie dinámicamente. El navegador que tenga caché siempre cargará desde la caché.

Eso fuerza a los programadores a cambiar la direccion de descarga de manera aleatoria, pero manteniendo el objetivo de descarga. Si queremos, por ejemplo, descargar asíncronamente esa foto mediante un pseudocódigo como

url="http://www.rojasdelgado.com/foto.jpg";
downloader.load(url);

generamos una url dinámica pegándole, por ejemplo, la hora del sistema:

url="http://www.rojasdelgado.com/foto.jpg";
fecha=new date();
url=url+"?"+fecha.formato("DDMMAAHHmmSS").toString();
downloader.load(url);

De este modo la url que se solicita es siempre distinta, por ejemplo:
http://www.rojasdelgado.com/foto.jpg?24022013135922
o
http://www.rojasdelgado.com/foto.jpg?24022013135925
si se realiza la descarga 3 segundos después.

Así que, repito, la caché de los navegadores es un gran invento, y añado, que dá muchos quebraderos de cabeza a los programadores.
  


LA NUBE CONTRA LA FILOXERA (UN CUENTO DE ANTIVIRUS)





Hay muchos que todavía usan programas antivirus. Ya es bastante seguro tener internet en tu equipo de casa a través de un router ADSL con todos los puertos de entrada cerrados. Pero aun así es conveniente pasarle el antivirus a algún programa que nos descarguemos o que nos pasen en un CD o DVD. Esta conveniencia aumenta exponencialmente cuando el programa es "gratuito". Ya me entendéis. Tanto si es freeware descargado de una web privada particular, como si es software de pago descargado junto a un crack o un serial que no caduca porque estará crackeado, estamos metiendo en nuestro sistema una potencial amenaza. Pasarle el antivirus por lo menos nos permite quedarnos tranquilos y no tener que formatear el disco duro principal cada 3 meses y reinstalarlo todo. Que deberíamos. Yo a estos programas que tienen dudosa reputación los llamo "programillas". Así que aconsejo pasarle un antivirus a los programillas, antes de instalarlos y después.
Hay quienes todavía usan la económica técnica de descargarse un antivirus crackeado o con un serial que no caduca, o que caduca en el año 2480. Que viene bien saber que mi obsoleto equipo y sistema operativo van a estar defendidos en el 2480, no como mis huesos que estarán para esa fecha ya bastante desnutridos y deshidratados. Y con ese antivirus tendrán la osadía de comprobar si un programilla de nueva adquisición está desinfectado o no. jejejeje. Un programilla testeando a otro programilla... enfin ... tiene que haber de todo en esta viña del Señor, incluso filoxera.
Afortunadamente ya existe solución. Existen antivirus gratuitos, que no son cortafuegos, que funcionan solo cuando estás conectado a internet, que no son pesados en ejecución y no frenan tu sistema, y que se ejecutan, descargan y actualizan desde la nube. Son los cloud antivirus.
Un cloud antivirus que funciona bien es el Panda Cloud, que podéis descargar de http://www.cloudantivirus.com/es/ y usar gratuitamente hasta que Panda decida convertirlo en software de pago, cosa que dudo.

  



NIÑOS MIMADOS





Desgraciadamente, en nuestro esfuerzo por mimar a nuestros hijos, a menudo olvidamos que nuestra función principal es prepararles para el mundo real fuera del entorno familiar, manteniéndoles sanos y salvos y asegurándonos de que adquieren las conductas sociales adecuadas para fomentar su autonomía a medida que se vayan acercando a la edad adulta.

Características de los niños mimados

A continuación, detallamos las características principales de los niños mimados:

- Tienen un sentido exagerado de lo que les corresponde y esperan que los que están a su alrededor les atiendan.
- Tienen una baja tolerancia a la incomodidad, especialmente a la causada por la frustración, el desengaño, el aburrimiento, la demora o la negación de lo que han pedido; normalmente la expresan con rabietas, ataques de ira, insultos y/o violencia.
- Desarrollan escasos recursos (si es que llegan a desarrollar alguno) para resolver problemas o afrontar experiencias negativas.
- Están muy centrados en sí mismos y creen que son el centro del mundo.
- Buscan las justificaciones de su comportamiento en el exterior y culpan a los demás de lo que hacen, al tiempo que esperan que sean otros los que se les solucionen el problema.
- No pueden, o no quieren, ver el modo en que sus conductas afectan a los demás y frecuentemente carecen de empatía.
- A veces les cuesta sentir culpa o remordimiento por sus actos.
- Exigen atención, no sólo de sus padres, sino de todo el mundo. Y cuanta más se les da, más reclaman.
- Les cuesta adaptarse a las demandas de las situaciones extra familiares, especialmente en la escuela, porque no responden bien a las estructuras sociales establecidas ni a las figuras de autoridad.
- Se sienten permanentemente tristes, enfadados, ansiosos y/o emocionalmente frágiles y frecuentemente tienen una baja autoestima.
- Cumplen los criterios de algún trastorno conductual o mental grave, aunque no se encuentren alteraciones biológicas, fisiológicas, del desarrollo o genéticas ni ningún otro motivo observable o evaluable que explique las dificultades que presentan.


Aprender a tratar a los niños mimados:

Es evidente que si pretendemos romper el círculo de los mimos, deben ser los padres quienes inicien el proceso. Hay pocos niños, si es que hay alguno, que renuncien voluntariamente a la vida fácil, que decidan espontáneamente esforzarse o colocarse en una posición cómoda.

( hasta aquí el extracto de http://www.centropsicologiainfantil.es/ninos-mimados/1-50-50-0.htm
que no tiene desperdicio -no consigo expresar más sencillamente lo que aquí copio y pego- )

Lo gracioso del asunto es que casi todas las características relatadas aquí las reconozco haber tenido cuando era pequeño. (Quién no mima a sus hijos..., por olvido, claro, de que la educación no es eso, la educación consiste en que los hijos puedan al final valerse por sí mismos e integrarse en la sociedad). Y no consigo recordar cuándo dejé de atribuirmelas (a lo mejor ni siquiera he dejado de hacerlo). Tuvo que ser un cambio paulatino, lento, promovido por las relaciones sociales de que disfruté. Un poco de aquí y otro poco de allá. El recibir un regaño en el momento justo, un pescozón a tiempo, un clujío de vez en cuando, un premio cuando lo hacía bien...en casa, en el trabajo, en la mili,... total que al final dejas de ser libre para convertirte en un ser social. Grandísima M..... de sociedad. No puedes ir insultando a diestro y siniestro, aunque te apetecería encontrarte cara a cara con algún político, algún magistrado o algún policía que sin duda lo merecerían. No puedes ir predicando solidaridad al mismo tiempo que austeridad, como hace casi todo el mundo. Queda muy bonito en los medios de comunicación. No puedes ir pidiendo que los demás compartan lo que tú no tienes intención de compartir, justo como hace la mayoría de la gente que conozco (mis mejores deseos para este año nuevo 2013 para la otra minoría).
La sociedad es altamente hipócrita, pero.... amigos y amigas... es lo que hay. Si quieres vivir en sociedad tienes que adaptarte... y aguantar... y aguantar... sin ser libre... y sin permitir esa libertad (recuerdo infantil) en los que te rodean. Así que, de vez en cuando: Calla si quieres que callen, respeta si quieres que respeten,... jódete si quieres que se jodan. Y si quieres libertad vete a tu coche, a tu casa, a tu sala de estudio, a tu país, .............................................. a tu planeta, o a tu propia galaxia.  


BREVE HISTORIA DE INTERNET (parte 1 de 3)





Simplificando mucho, Internet se creó para enviar y recibir (transmitir) datos (ficheros) desde un equipo terminal a otro.

El primer servicio globalmente importante fue el FTP, empleado todavía hoy para transferir ficheros. Si quieres un fichero lo buscas y cuando sabes su dirección exacta te conectas al servidor, te identificas con usuario y contraseña y te lo descargas. Si alguien te quiere mandar algo se conecta a tu servidor, se identifica con usuario y contraseña y lo sube.

  


BREVE HISTORIA DE INTERNET (parte 2 de 3)





Si varias personas quieren mandarte varias cosas ya empieza a parecer un poco cargante gestionar lo que sube cada uno en una carpeta distinta del servidor, etc? Por eso se creó el segundo servicio globalmente importante, el POP/SMTP, que se emplea para transmitir correos electrónicos.

El servidor de correo se encarga de separar y clasificar lo que te llega, sea quien sea quien te lo mande y sean los archivos que sean (texto, adjuntos,?). Es mucho más cómodo que el FTP.
Si toda la información generada por toda la humanidad, susceptible de interesar a alguien, se almacenara en cada buzón de correo (o servidor de ftp) de cada uno, multiplicaríamos innecesariamente las copias de información que necesitarían ser guardadas. Los inicios de la web tuvieron sentido cuando fue necesario distribuir la información entre un gran número de personas de modo que el origen de la información pudiera cambiar sin necesidad de proceder a enviar la actualización a todos los interesados en recibirla.
Así surgió la web 1.0, un conjunto de páginas web que solo son informativas, como un cartel.
Los autores de una web, autores de la información que quieren publicar, solo tienen que subirla a un servidor web. Estas páginas están preestablecidas, estáticas, guardadas como archivos. Los servidores web 1.0 solo tienen que enviar estas páginas cuando se las soliciten, normalmente a través de un programa navegador. Quien las recibe las lee y normalmente las descarta, con lo que no se duplica la información guardada. El problema del envío masivo de correo había terminado y empezó a considerarse basura (spam).
  


BREVE HISTORIA DE INTERNET (parte 3 de 3)





Después los servidores evolucionaron y empezaron a poder enviar páginas de formulario y recibir los datos rellenados, a la vuelta.

Como consecuencia de la recepción de datos, las siguientes páginas se pueden construir dinámicamente utilizando los datos que previamente llegaron.

Pensemos por ejemplo cómo funciona un buscador como Google: recibe una cadena de búsqueda y te envía una página especial, construida dinámicamente, con la lista de páginas relacionadas con tu cadena de búsqueda. Esa página que te envía no estaba preestablecida ni era estática. ¿Cómo podría google saber de antemano que alguien iba a buscar una cadena de texto determinada?. Tiene que construirla dinámicamente antes de enviarla.

Esta evolución marca el inicio de la interacción con la web. Las páginas ya no son estáticas, son dinámicas. La web 2.0 en su versión beta estaba surgiendo.

La Web 2.0 es el resultado de la evolución de aquellos primeros sencillos formularios para dar lugar a aplicaciones web completas.  


CÓMO SER UN BUEN MAESTRO





En mi opinión, los criterios decisivos para ser un buen maestro son:

1.- Admitir que los alumnos pueden ser más inteligentes, hábiles y creativos, y pueden tener más base de conocimientos que uno mismo, y dejarles tomar parte en su propio proceso de aprendizaje. Comportarse con humildad respecto a lo que se conoce es la mejor manera de acceder a conocer cosas nuevas. Es una actitud necesaria para un maestro y es lo primero que éste debe enseñar a sus alumnos.

2.- De ocurrir espontáneamente este proceso en el aula, dedicarse a observar, dinamizar y evaluar este proceso. De no ocurrir, diseñar acciones de formación para que ocurra.

3.- Si existieran dificultades, tratar de aportar la ayuda mínima necesaria para que los alumnos lleguen por sí mismos a la solución. Sin esfuerzo no se interioriza.  


AUDACITY Y LA LICENCIA GPL DE GNU ¿ES GRATIS?





Simplificando mucho, sin entrar en detalles de licencias, el software libre es siempre posible obtenerlo gratis (y también es posible obtenerlo pagando por ello). Pero eso no significa que libre sea equivalente a gratis, ni que gratis sea equivalente a libre.
En Audacity por ejemplo, podemos tener garantía de que la más avanzada de las versiones publicadas siempre será posible obtenerla gratis. Voy a intentar explicar de modo sencillo por qué esto es así, pero ya tendremos que entrar en detalles de licencias:

La licencia de Audacity es la GPL de GNU.
Esta licencia, por ser de software libre, concede los siguientes permisos:

- Libertad 0 del software libre: usar el programa, con cualquier propósito.
Cualquiera, si lo desea, puede ser usuario de la versión del programa que posea, sin importar cómo la haya obtenido (tanto si la versión que pueda usar la ha obtenido gratuitamente como si la ha programado, como si ha pagado a un programador para que se la programara), y usar el programa para lo que quiera, personalmente o para su negocio, sin restricciones de propósito.

Si la ha obtenido de una publicación, evidentemente será gratis.
Si es una versión propia, la versión original podría haber sido de una publicación, y haber sido gratis.

Si es una versión realizada por encargo, evidentemente no tiene por qué ser gratis. Pero no hay obligación de encargar versiones.

Podría darse el caso de que un programador intente vender un programa libre sin modificarle nada. Hay muchas formas de hacerlo. Pero el comprador podría haberlo obtenido gratis si hubiese accedido al lugar correcto de internet donde se podía descargar, hubiese configurado su equipo para cumplir con los requisitos de instalación y se lo hubiese instalado él mismo. En muchos casos es posible que el técnico informático cobre por grabarlo en un soporte (CD, DVD?), o por instalarlo, o por formación para el uso, ? en general por cualquier servicio añadido, pero el programa en sí es gratis.

- Libertad 1 del software libre: estudiar cómo funciona el programa y modificarlo, adaptándolo a las necesidades de cada uno.
Se necesita tener acceso al código fuente del programa.

Cualquiera, si lo desea y tiene los conocimientos adecuados (es programador de C++, ?), puede generar nuevas versiones mejoradas de la versión del programa que posea, sin importar cómo la haya obtenido, modificando el código fuente de cualquiera de las versiones publicadas anteriormente (evidentemente no va a poder tener acceso a las versiones no publicadas). No tiene la obligación de publicar ni de vender sus versiones mejoradas.

- Libertad 2 del software libre: distribuir copias del programa.
Cualquiera, si lo desea, puede publicar gratuitamente la versión del programa que tenga y/o su código fuente, sin importar cómo la haya obtenido.

- Libertad 3 del software libre: mejorar el programa y hacer públicas las mejoras, de modo que toda la comunidad se beneficie.
Cualquiera, si lo desea, puede ejercer la libertad 1 con el objetivo de adaptar el programa a una amplia variedad de usuarios y de publicar las versiones mejoradas.

Esta licencia, por ser GPL de GNU, tiene las siguientes restricciones, permisos y obligaciones, y matices sobre las libertades del software libre:
- Si se publica, se debe ofrecer tanto el programa como su código fuente.
Esto implica que cualquiera que adquiera el programa adquirirá también el código fuente. Y por la libertad 2 podrá, si lo desea, publicarla, de modo que los demás lo podrán obtener gratis.

Un comprador de una versión a medida no tiene la obligación de publicar lo que ha comprado. Pero si lo hace, no puede publicar sólo el programa, tiene que publicar también el código fuente.
- Si se publica, la licencia con la que se publique debe ser GPL de GNU.
Es decir, Audacity nunca podrá convertirse en software de pago, ya que siempre habrá una última versión publicada bajo la licencia GPL de GNU.

En http://audacity.sourceforge.net/about/license podemos conocer más detalles.  


DROPBOX (DISCO DURO REMOTO, 2.5 GB GRATIS)





Esta aplicacion te genera un disco virtual de 2 Gb al que puedes acceder desde cualquier ordenador conectado a internet. Te registras con un correo electronico y una contraseña y allí puedes guardar lo que quieras. Puedes instalar el programa en multiples ordenadores, incluso en smartphones con el sistema operativo ANDROID como el Galaxy 3, y cualquier cambio desde cualquier equipo se sincroniza en todos ellos. Recuerda que la información está físicamente guardada en el servidor y en cada equipo PC. No ocurre así con la versión para android, que solo guarda en la scard los archivos a los que accedas realmente, aunque puedes visualizar el directorio completo. Enfin, es una opción de disco duro remoto muy práctica y aconsejable.

Normalmente el disco virtual tiene 2GB de capacidad, pero si aceptas la siguiente invitación tendrás 2.5GB
https://www.dropbox.com/referrals/NTI1Njc0MzU0OQ?src=referrals_fb_post9
  


¿ES LO MISMO UN CERTIFICADO DIGITAL QUE UNA FIRMA DIGITAL?





Simplificando todo lo que puedo, un certificado digital contiene dos claves, una clave pública y una privada, ambas relacionadas por un algoritmo de cálculo que no permite en tiempo computacionalmente aceptable el obtener la clave privada (información confidencial y sensible) a partir de la publica (información no sensible).

La clave publica se la puedes entregar a cualquier persona (si sabes cómo hacerlo, claro, de lo contrario no lo intentes). Si esta persona escribe un mensaje y lo cifra con tu clave publica, entonces sólo tú, utilizando tu clave privada, podrás descifrarlo y leerlo en claro. Esto le asegura a tu amigo que nadie más aparte de tí va a poder leer el mensaje. Esto también te asegura a tí que nadie ha podido leer ni cambiar el mensaje que te envió tu amigo.

La clave privada no debes entregársela a nadie (eso se generaliza, obviamente, a que tu certificado digital no debes entregárselo a nadie). Si le escribes un mensaje a tu amigo y lo cifras con tu clave privada, entonces cualquier persona incluyendo tu amigo, utilizando tu clave publica, que como es publica la puede tener cualquier persona incluyendo tu amigo, puede descifrar el mensaje y leerlo. Esto le asegura a cualquier lector que has sido tú, y solo tú, quien ha escrito ese mensaje. Como esta seguridad es como la de tu firma, al proceso de cifrar tu mensaje con tu clave privada se le llama Firmar Digitalmente y se dice que tu mensaje cifrado con tu clave privada contiene tu firma digital.

Más información en http://es.wikipedia.org/wiki/Certificado_digital  


MENTIRAS EN INTERNET - HOAXES





Nos conectamos a internet, usamos nuestro navegador favorito, nuestro buscador de contenidos favorito y tecleamos lo que buscamos. Como respuesta encontramos gran cantidad de información.
Todos esperamos que dicha información sea confiable, fidedigna, clara, concisa, que no cause confusión ni sea susceptible de ser malentendida. En definitiva, que sea VERDAD.

Buscamos la verdad, la necesitamos, es una característica humana que ya nos enganchó algún filósofo de la antigüedad. Tan deseable que su omisión aparece en los escritos bíblicos como un pecado que ofende a Dios. Pero en internet lo que se publica no obedece siempre al octavo mandamiento.

Circulan mediante correo electrónico ciertos bulos y falsedades que confunden y perjudican a todo el mundo que se los cree y los redistribuye, y benefician de algún modo a quienes los crean. Son los HOAX. Todos hemos recibido alguna vez alguno, y muchos hemos recibido y recibimos habitualmente muchos.

Aquí voy a daros unas recomendaciones, tan importantes como simples, para distinguir la verdad entre tantas mentiras:
- lo primero, un hoax nunca irá firmado. Será anónimo o identificará como origen a una organización, que puede ser que exista, pero no a una persona concreta y real de dicha organización.
- lo segundo, no llevará fecha. Así parecerá válido en cualquier momento.
- lo tercero, el correo electrónico pedirá que sea a su vez reenviado masivamente. Así se espera lograr su amplia difusión. Un hoax es como un virus, pero necesita nuestra colaboración para reproducirse y duplicarse. Un poco de observación nos facilitará la desinfección simplemente porque no lo reenviaremos.
- lo cuarto, no fiarse más de una noticia porque sean varias las páginas en donde aparece. Puede que sea un bulo que está consiguiendo difusión.
- lo quinto, informarse sobre los responsables de la publicación. Si la noticia la leemos en una página web, mirad si es un periódico o revista online, o por el contrario es un foro donde cualquiera puede participar sin siquiera identificarse.  


ROOTKITS Y LA LUCHA DEL BIEN CONTRA EL MAL





Un rootkit es un programa que está oculto o enmascarado en el sistema, y puede acceder a partes de éste de un modo privilegiado de modo que es difícil de detectar y más difícil aún de eliminar mientras está en ejecución.
Hasta este momento nada he dicho sobre su naturaleza o sobre su comportamiento. Este recurso puede ser empleado para bien y para mal, como las armas, internet, los libros, las palabras y tantas otras facetas cotidianas.
Por ejemplo, lo ideal es que un programa antivirus permanente funcione como un rootkit benigno:
oculto, que no se pueda detectar, o sea, que los programas virus no puedan detectarlo
enmascarado en el sistema, o sea, que el sistema siga funcionando y que el antivirus aparentemente sea como cualquier otro programa residente y activo del sistema
que pueda acceder a partes del sistema de modo privilegiado, es decir, que se ejecute con más privilegios que cualquier programa virus, para que pueda imponerse a éstos, pararlos, borrarlos de memoria, borrarlos de disco duro, sin tener que pedir constantemente permisos para hacer estas tareas privilegiadas.
que sea muy difícil de eliminar, para que los programas virus no puedan borrarlo de disco duro, parar su ejecución o borrarlo de la memoria.
En general, no obstante, se asocia un rootkit con un comportamiento maligno.

Para conseguir estar activo y en ejecución, un rootkit debe formar parte del sistema operativo como si se tratara de un servicio o módulo en ejecución del núcleo del sistema. Y claro, ésto solo se consigue arrancándose y poniéndose en ejecución con el propio sistema, es decir, arrancando con el nucleo del sistema. El núcleo es la primera parte que se carga en memoria cuando una partición formateada y activa toma el control del arranque de la máquina. Lo primero que se carga son los drivers o controladores de dispositivos, en particular el driver del disco duro. Si enmedio de alguno de esos códigos estuviera un trozo de código rootkit (infectado e insertado por algún medio vírico, troyano, gusano, etc...) este código permanecería activo y en ejecución todo el tiempo que la máquina estuviera encendida. Porque el driver del disco duro siempre está usándose. Si mientras que está activo se le intentara detectar o eliminar mediante otro programa, pongamos un antivirus, este propio antivirus tendría que usar el driver del disco duro para borrar el rootkit, pero el código del rootkit está enmedio del código del driver del disco duro, así que podría enmascararse para ser detectado, o aparentar su borrado. En efecto, el antivirus trata de ver el mundo con unas gafas pero las gafas le dejan ver todo menos lo importante: las propias gafas.  


GENERADOR DE CONTRASEÑAS SEGURAS





Por supuesto que 2000, José Antonio, Almería, Madrid, tu nombre o el nombre de tu pueblo, o una palabra que exista en el diccionario, o una palabra corta que contenga solo letras minusculas son ejemplos de contraseñas inseguras. Eso ya lo sabemos. También sabemos que es inseguro usar la misma contraseña para todos los sitios. ¿De qué servirá que Google, Facebook o algun otro de los "grandes" tengan complejos sistemas para gestionar tus contraseñas, si luego usas la misma para otro sitio web que no dedica tanto esmero en mantenerlas a salvo? Como una cadena es tan fuerte como el más débil de sus eslabones, cualquier ataque que consiguiera romper la seguridad de ese sitio web débil conseguiría dar acceso al atacante a los otros sitios más fuertes.

Pero es que en los momentos actuales tenemos que recordar tantas contraseñas que nos tienta a usar siempre la misma, o a usar la misma con leves diferencias, como JOSEANTONIOFACEBOOK, JOSEANTONIOGMAIL, JOSEANTONIOCAJAMAR, ... Al final hay tantas que se torna difícil recordarlas todas.
Usar un programa para recordarlas... va a ser que no. Es como tener una caja fuerte para guardar todas las llaves. Pasaría a ser el primer lugar que intentarían atacarnos. Máxime si resulta que el programa es de fuente abierta. ¡Encima con pistas sobre cómo está hecha la caja fuerte!. (-Es que el código fuente lo que implementa es Rijndael, que incluye dentro de sus características el ser un método de cifrado de fuente pública ¿Qué más dá que dejemos ver el código? -Pues que los códigos fuente son pistas innecesarias como las que daba el entorno de desarrollo de fuente abierta de Flex para facilitar los ataques XSS del pasado mes de diciembre. A pesar de ello sigo recomendando el software libre y el Flashdevelop como entorno de desarrollo AS3 para Flash. El agujero de seguridad ya ha sido corregido en la versión actual.)

Para mí siempre será más práctico usar las iniciales de una frase que tenga que ver con el sitio web. Por ejemplo, FaceBook es importante para mi porque me permite leer lo que publica mi hermano que está en Barcelona. La contraseña podría ser MPLLQPMHQEEB, que son las iniciales de las palabras "Me Permite Leer Lo Que Publica Mi Hermano Que Está En Barcelona". Lo podemos combinar con un par de números, por ej. el ordinal de la ultima letra de la contraseña (2 para la B de Barcelona) y el ordinal de la primera letra del sitio web, (6 para la F de Facebook). Quedaría PLLQPMHQEEB26. Le ponemos un simbolo gráfico por medio, por ejemplo un dólar $, un guión - o un porciento %, y quedaría MPLLQPMHQEEB$-%26. Esto daría la friolera de 13 trillones de años para encontrar la clave usando la capacidad de cómputo de un ordenador personal, según dicen en http://howsecureismypassword.net/ .
Incluso la simple clave MPLLQPMHQEEB llevaría 12 años para encontrarla, y con solo añadirle un guión al final, MPLLQPMHQEEB-, llevaría 117 mil años.
Es importante la longitud porque JOSE- llevaría 0.46 segundos, pero JOSEANTONIO- llevaría 2000 años.

Es obvio que ésto son solo ejemplos, válidos claro está, siempre que sea fácil recordar la frase de la que se obtienen las iniciales. Espero vuestros comentarios.  


LOS VALORES null EN ACTIONSCRIPT 3





Yo creía que a estas santas alturas de la evolución de los lenguajes de programación todo estaba ya más que trillado. La teoría de compiladores que estudiábamos en la Universidad permitía que un autómata programable pasara de un estado a otro al encontrarse con la siguiente entrada. Todo parecía indicar que el autómata tiene que estar siempre en algún estado, aunque dicho estado sea el "estado de error", que puede ser causado por un fallo en la sintaxis o en los valores autorizados de una entrada.

Hoy he descubierto que esto no es cierto para el lenguaje ActionScript 3 (AS3)

En este lenguaje, como en muchos otros, una variable puede tener un valor conocido, o bien un valor null que indica que el valor es desconocido.
Esperaba que un valor null se evaluara a falso en una asignación a una variable booleana.
Esperaba que un valor null se evaluara a falso en una expresión condicional.
Esperaba que un valor null, evaluado a falso, se pudiera comparar con otro valor constante o con otra variable, dando como resultado una falsedad.
...
Esperaba en vano, quizá confiado en los resultados de otros lenguajes como el C.
Y debo admitir que AS3 tiene razón: NO ES EVALUABLE A VERDADERO O FALSO UN VALOR NULO, NO ES ASIGNABLE UN VALOR NULO A UNA VARIABLE LOGICA, NI SE PUEDE CONOCER EL RESULTADO LOGICO DE UNA COMPARACION CON UN VALOR NULO.

Pero, por favor, LOS PROGRAMADORES NECESITAMOS QUE NULL Y SUS COMBINACIONES EN EXPRESIONES LÓGICAS SE EVALUEN A "ALGO", A LO QUE SEA, A NULL, POR EJEMPLO.

Me parece increíble que, al día de hoy, el Flash Player 11 (la última versión) y el plugin para todos* los navegadores se quede parado, sin emitir ningún mensaje de error, cuando se necesita evaluar una comparación con un valor null. No puedo creer que cosas como ésta sucedan hoy en día.

Enfin, paciencia. Ahora que ya lo sé, o mejor dicho, ahora que ya lo sabemos, podremos escribir mejores códigos.

* (he probado con las últimas versiones de Internet Explorer, Firefox y Google Chrome, y algunas otras versiones anteriores de éstos)  


ANDROID: ARCHIVO PARA GUARDAR ALGO





Lo confieso. Soy un novato en programar android. Me paso las horas viendo códigos escritos por otras personas que saben más que yo. Veo cosas escritas como

File miarchivo=new File(Environment.getExternalStorageDirectory()+"/micarpeta/archivo.txt");
guardartexto("hola que tal", miarchivo);

que seguro que produce un error si el móvil donde se ejecuta no tiene tarjeta de expansión de memoria.
También dará error si el móvil tiene tarjeta pero no está montada, si está montada en modo solo lectura, etc... En estos casos sería lógico usar la memoria del teléfono en lugar de la memoria de la tarjeta de expansión.

Pero, en mi opinión, el problema no es que dé errores de ejecución, el problema es que los que estamos aprendiendo android nos acostumbramos a escribirlo así, tal cual, y luego ya va dando errores por ahí.

Además, el problema se agraba cuando quieres aprender a guardar fotos de la cámara programáticamente, y entonces veo cosas escritas como

File mifoto=new File(Environment.getExternalStorageDirectory()+"/DCIM/Camera/foto.jpg");
guardarfoto(data, mifoto);

¡Qué maravilla de códigos fuente! ¡Qué didáctica! ¡Qué buen modelo de aprendizaje!
Esto produce error cuando el móvil no tiene tarjeta de expansión de memoria, por supuesto, y además cuando el modelo de móvil no guarda las fotos en /DCIM/Camera, por ej. el HTC Desire las guarda en /DCIM/100MEDIA, ya que la carpeta "Camera" no estará creada.

Total, que tienes la captura en byte[] data y no hay manera de conseguir tener un archivo mifoto que funcione en todos los teléfonos y en todas las configuraciones.  

¿acaso a nadie de Google se le ha ocurrido que lo único que necesitamos los novatos aprendices de android es un simple archivoParaGuardarAlgo? Para usarlo así:

File miarchivo=new archivoParaGuardarAlgo("/micarpeta/", "archivo.txt");
guardartexto("hola que tal", miarchivo);

File mifoto=new archivoParaGuardarAlgo("/", "foto.jpg");
guardarfoto(data, mifoto);

Mientras no aparezca esta class mágica, ahí van mis intentos:

     public static String ALMACEN()
    {
        if(Environment.getExternalStorageState()==Environment.MEDIA_MOUNTED)
        {
            //Si hay tarjeta de memoria y está montada para lectura y escritura
            return Environment.getExternalStorageDirectory();
        }
        else
        {
            //Si no hay tarjeta de memoria, devuelve la zona de almacenamiento del telefono
            return Environment.getDataDirectory();
        }
    }

     public static File ArchivoParaGuardarAlgo(String rutarelativa, String nombrearchivo)
    {
        File directorio=new File(ALMACEN()+rutarelativa);
        if(directorio.exists() && directorio.isDirectory())
        {
            File r=new File(ALMACEN()+rutarelativa+nombrearchivo);
            return r;
        }
        else
        {
            boolean rutacreadaok=directorio.mkdirs(); //crea el directorio y todos los subdirectorios que falten
            if(rutacreadaok)
            {
                File r=new File(ALMACEN()+rutarelativa+nombrearchivo);
                return r;
            }
            else
            {
                return null;
            }
        }
    }
Otro día le pongo los try/catch y lo vuelvo a publicar.  


ANDROID: GUARDANDO PREFERENCIAS





La celebérrima aplicacion holamundo suele saludar al mundo anglosajón con un

Hello, world!

y al mundo hispano parlante con un

¡Hola, mundo!

Pero esa aplicación ya la genera automáticamente el entorno de desarrollo Eclipse cuando empezamos una nueva aplicación para Android.

Es un saludo muy cariñoso que, además, puede ser generalizado mediante una preferencia guardada en el directorio protegido de la aplicación, en la memoria del teléfono, de una manera muy sencilla. Tras dibujar la disposición gráfica que genera un TextView llamado rotulo en medio de la pantalla, se llama a una función  que se encargará de todo:


@Override
protected void onCreate(Bundle savedInstanceState)
{
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  saludarsegunpreferencias();
}


1.- Esa función, saludarsegunpreferencias(), obtiene una instancia al objeto PreferenciasCompartidas mediante la llamada:

SharedPreferences pref=PreferenceManager.getDefaultSharedPreferences(this);

2.- Usando ese objeto se puede obtener una cadena de caracteres llamando a la función getString(nombreCadena, valorPorDefecto), así:

String objetoasaludar=pref.getString("destinodelsaludo", "mundo");

3.- Así ya podemos saludar según las preferencias almacenadas o, en su defecto, usar el valorPorDefecto:


TextView rotulo=(TextView) findViewById(R.id.rotulo);
rotulo.setText("¡Hola, "+objetoasaludar+"!");


4.- Al pulsar en el menú Preferencias se debe lanzar la ejecución de la actividad que guardará las preferencias.


@Override
    public boolean onOptionsItemSelected(MenuItem item)
{
        switch (item.getItemId())
        {
         case R.id.menu_settings:
             Intent intento = new Intent(this, PreferenciasActivity.class);
                startActivityForResult(intento,0);
                break;        }
        return true;
    }

5.- La actividad que guarda las preferencias queda tan sencilla como:

public class PreferenciasActivity extends PreferenceActivity
{
    @Override
    public void onCreate(Bundle savedInstanceState)
   {
        super.onCreate(savedInstanceState);

        addPreferencesFromResource(R.xml.preferencias);
    }
}

que requiere un fichero llamado preferencias.xml en la ruta relativa del proyecto /res/xml/preferencias.xml
Este archivo contiene la especificación gráfica de las preferencias:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
    <EditTextPreference android:dialogTitle="¿A QUIEN SALUDO?" android:title="¿A QUIEN SALUDO?" android:summary="Escribe a quén tiene que ir dirigido el saludo" android:key="destinodelsaludo"/>

</PreferenceScreen>

y genera ese aspecto visual común a todas las típicas pantallas de configuración de las aplicaciones de Android




OPTIMIZACIÓN NÚMERO 1:

Lo que ocurre es que, tal y como está escrito este código, al aceptar y pulsar el botón Atrás, volvemos a la actividad principal, donde sigue mostrándose el saludo antiguo. El saludo nuevo solo se muestra si cerramos y volvemos a abrir la aplicación.
Para que se repinte el saludo con las preferencias de configuración actuales, hay que añadir el siguiente código a la clase principal:


    @Override
    protected void onResume()
    {
        super.onResume();
        saludarsegunpreferencias();
    }

OPTIMIZACIÓN NÚMERO 2: (...y la más importante)

Como hemos llegado a la "aparente" ejecución correcta a base de sucesivas mejoras (bueno, en este caso, una mejora) hemos cometido el error de ejecutar dos veces el código saludarsegunpreferencias() al arrancar por primera vez la aplicación:

La primera vez llamándolo desde el método onCreate
La segunda vez llamándolo desde el método onResume
Así que el código siguiente es erróneo:



@Override
protected void onCreate(Bundle savedInstanceState)
{
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
                saludarsegunpreferencias();
}

@Override
    protected void onResume()
    {
        super.onResume();
        saludarsegunpreferencias();
    }




y debería anularse la llamada en el método onCreate, quedando correctamente así:


@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
}

@Override
    protected void onResume()
    {
        super.onResume();
        saludarsegunpreferencias();
    }
  


EL REGISTRO DE WINDOWS:
ELIMINAR ENTRADAS DESHABILITADAS CON MSCONFIG





Hacer cambios en el Registro de Windows no es una tarea fácil. No en vano en el Registro se guarda toda (o casi toda) la configuración del sistema operativo y del resto de los programas.
Para acceder al Registro basta con ejecutar REGEDIT.EXE, pero insisto, no es recomendable para usuarios sin experiencia. Léete primero algun libro. Lo agradecerás. De lo contrario puede que dejes tu sistema en un estado no utilizable.

La mayoría de los cambios que se requiere hacer en el Registro son del tipo
deshabilitar algún programa al arrancar windows
deshabilitar algún servicio al arrancar windows
otros...
Estos cambios pueden hacerse más cómodamente desde el Configurador de Microsoft. Para acceder a esta configuración basta con ejecutar MSCONFIG.EXE, aunque debo decir que esta tarea tampoco es recomendable para usuarios sin experiencia ni formación previa. Soy muy pesado pero léete primero algun libro...
Aquí puedes deshabilitar programas y servicios con solo quitar la marca de selección que les corresponda.

El problema aparece cuando, tras algún tiempo, se empieza a llenar esta lista con entradas deshabilitadas. El Configurador de Microsoft no tiene ninguna opcion para eliminar definitivamente las entradas deshabilitadas. Para eliminarlas tenemos que hacer uso de algun programa de utilidad que hay por ahí, o bien ejecutar regedit.exe y eliminar las entradas de las ramas del registro
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Shared Tools\MSConfig\startupfolder
ó
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Shared Tools\MSConfig\startupreg

En estas ramas están las entradas deshabilitadas con msconfig.exe

Tened cuidado al borrarlas, porque no se pueden recuperar. Os aconsejo hacer primero una copia del registro entero, o mejor de la rama HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Shared Tools\MSConfig entera, así si luego hay algún problema podréis recuperarla.?  


CSS: EVITAR QUE UNA DIVISION QUEDE CORTADA
AL SALTAR DE PAGINA IMPRESA





No es habitual que se imprima una página web, al menos en papel.
Pero sí que es habitual que se considere importante la versión impresa de una página web, si otra cosa no, porque es mejor prevenir que curar, y la optimización de la versión impresa
¡  AHORRA MEDIO AMBIENTE  !

Es apreciable y deseable que se ahorren páginas de impresión (se ahorra papel), pero a veces es mejor considerar el esfuerzo de lectura posterior. Por ejemplo, si una división, en general un conjunto de párrafos con un título de apartado, se imprimiera a caballo entre dos páginas, este esfuerzo de lectura se verá incrementado. En ese caso ¿cómo se puede evitar que el contenido entre <div> y </div> se quede cortado?

CSS tiene la solución: basta con incluir estas lineas en el código css de tu página:

@media print
{
     div
     {
        page-break-inside: avoid;
     }
}  


translate.google.com/robots.txt





Hoy me encuentro editando mi página web ( http://www.rojasdelgado.com ) y me dispongo a ponerle cómodos botones de traducción a otros idiomas.
Para automatizar la traducción opto por usar el servicio de traducción automática de Google.
Para ello busco, como no, en Google, y tecleo la cadena de búsqueda
"google translate buttons for website" (me gusta buscar en inglés, qué le voy a hacer, será porque, muy a mi pesar, en español no encuentro lo que busco con demasiada frecuencia)

Hago click en el primer enlace
y obtengo una página de error con la siguiente respuesta:

WEBSITE TRANSLATOR MOVED TO:
https://translate.google.com/manager/website/
Please update your bookmarks

que me dice que esa url, una url del propio dominio google.com, no existe, y que actualice mis enlaces.

Que digo yo que quien tiene que actualizar sus propios enlaces es Google.

Mi web es rastreada todos los días, en ocasiones varias veces al día, por esos robots de búsqueda, indexadores, que rastrean en busca de cambios y nuevos enlaces. Ya podría, digo yo, el propio google, rastrearse a sí mismo de vez en cuando. De lo contrario, la próxima vez que quiera encontrar algo en Google voy a tener que buscarlo en Bing.

P.D.
A lo mejor sí que se autorastrea, pero tiene en su directorio raiz un fichero robots.txt con el contenido:
User-Agent: Googlebot
Disallow: /
Voy a ver: http://translate.google.com/robots.txt
Ah, pues no.
Será porque translate.google.com ha sido penalizado por Google. :-D  


CUADO, LA ABERRACIÓN DEL LENGUAJE INFORMÁTICO





La palabra CUADO se emplea en castellano para significar NIBBLE o conjunto de 4 bits de información. Una unidad poco usada, aunque más que CRUMB, 2 bits. La más usada es el OCTETO para 8 bits, ampliamente confundida con BYTE.

Cuado aparece bien explicado en la wikipedia, en la entrada de nibble: http://es.wikipedia.org/wiki/Nibble

Sin embargo, si lo buscáis en google os llevaréis una sorpresa sorprendentemente sorpresiva:
LA MAYORÍA DE LAS ENTRADAS SE REFIEREN A LA PALABRA "CUANDO" MAL ESCRITA:
http://www.google.es/search?sourceid=navclient&aq=hts&oq=&hl=es&ie=UTF-8&rlz=1T4GGHP_esES448&q=cuado

Me parece increible, ¿y a vosotros?  


COMPARTIENDO WIFI





-Buenas, ¿en qué puedo ayudarle?

-Quería contratar una línea ADSL para mi domicilio, quería información.

-Pues le regalamos un router ADSL de última generación, con wifi integrada.

-¿Y podré navegar por internet con mi móvil?

-Si, claro, si su movil tiene wifi podrá conectarse al punto de acceso de su router y navegar por internet sin consumir telefonía.

-¿Y mis vecinos también?

-Bueno, eso depende: tienen que estar a unos 100 metros de tu router, o quizá a unos 300 metros y una antena casera a base de lata de pringles, cable, conectores y unas pocas soldaduras. Y tendrían que conocer la contraseña de acceso a tu wifi. Es ilegal que les dés la contraseña y compartas tu acceso y les cobres por ello. Desde hace unos días se puede compartir un acceso wifi unico entre toda una comunidad de vecinos del mismo bloque, pero sin revender el servicio. Esa venta solo la podemos realizar nosotros.

-¿Y si mis vecinos se enteran por su cuenta y sus medios de la contraseña wifi de mi router y deciden hacerme una aportación simbólica ingresándome un euro al mes en mi cuenta bancaria, así como quien no quiere la cosa...?

-Pues que sería usted responsable de un cobro por servicios que no puede prestar e incurriría en ese delito de reventa penado por la ley. Pero ¿cómo podrían conocer la contraseña wifi? Usted tendría que dejarles entrar en su domicilio y dejarles acceder al router para que se apuntaran los datos de conexión que están escritos detrás.

-No necesariamente. Creo que están publicados en internet. Hay un programilla por ahí que calcula la contraseña que ustedes ponen a sus routers a partir del propio nombrecillo del punto de acceso.

-Ah, no lo sabía

-Ya, pero lo que está claro es que si existe ese programilla y ustedes siguen usando esos mismos calculos para generar las contraseñas que ponen en la pegatina de detrás del router, son ustedes responsables de que mis vecinos tengan la contraseña wifi de mi router, y por tanto ustedes serían mis cómplices en ese delito de reventa.

-Ops...  


ANDROID: FIJAR LA ORIENTACION DE LA PANTALLA





Los dispositivos android pueden girarse para mostrar dos tipos de aspecto: vertical y apaisado

Las aplicaciones para android pueden disponer sus objetos gráficos en cualquiera de estas dos presentaciones. De este modo que es posible diseñar un aspecto totalmente distinto de la interfaz de usuario para cada presentación, o, por el contrario, readaptar tamaños manteniendo los mismos objetos gráficos.

También se puede forzar a la aplicación a mostrarse siempre de una determinada forma.
En este caso hay que programar la Actividad indicándole que se muestre siempre vertical o siempre apaisada. Para ello, en el archivo AndroidManifest.xml, en la etiqueta <Activity>, hay que añadir un atributo android:screenOrientation, con uno de los valores: "portrait" ó "landscape".

Así, escribiremos

android:screenOrientation="portrait"

ó

android:screenOrientation="landscape"
  


JUGAR Ó APRENDER, DIVERTIRSE Ó PRODUCIR





Hoy en día existen en Internet grandes espacios de comunicación e interacción masivos. En todos ellos se consigue, en mayor o menor medida, dependiendo de cada una de nuestras realidades personales, diferentes grados de bienestar, gracias a la consecución de diferentes factores que van desde el entretenimiento, el pasatiempo y el ocio, hasta la consulta, la formación y la investigación.

Desde lo divertido hasta lo nada divertido.
Desde lo nada productivo hasta lo más productivo.

En definitiva, todos podemos jugar y aprender.

Es lo que decía Asimov en http://www.youtube.com/watch?feature=player_embedded&v=qLEBAPA7yqo

Eso que decía Asimov es lo que he pensado durante la mayor parte de mi vida. Incluso quiero expresaros que me gustaría seguir pensándolo. Pero la realidad que observo es otra.
A la frase "todos podemos jugar y aprender" debo añadir "todos jugamos ó aprendemos". Ojo a esa letra o con tilde, la o exclusiva española, que abrevia la lógica "Si jugamos no aprendemos y si aprendemos no jugamos".

En el ámbito del videojuego tenemos los MMORPGs (Massive Multiplayer Online Role-Playing Games), en español Videojuegos de Rol Multijugador Masivos En linea, accedidos por miles o millones de personas simultáneamente, en el que un programador de aplicaciones web o un pequeño grupo de ellos se encarga de preparar un mundo virtual con gráficos, sonidos e interacción espectaculares, todo ello para la diversión de todos esos jugadores.
Más información en http://es.wikipedia.org/wiki/Videojuego_de_rol_multijugador_masivo_en_l%C3%ADnea

En el ámbito de la teleformación tenemos los MOOCs (Massive Online Open Courses), en español CAEMs (Cursos Abiertos En linea Masivos) cursos universitarios libres, accedidos por miles o millones de personas simultáneamente, donde un profesor o un pequeño grupo de ellos se encarga de preparar el material de estudio (usualmente videos cortos, actividades prácticas descritas paso a paso en archivos pdf y enlaces a contenidos complementarios), y supervisar el aprendizaje de todos esos alumnos, respondiendo a sus preguntas mediante foros, wikis y correos electrónicos.
Más información en http://es.wikipedia.org/wiki/MOOC

Observo que los primeros, los jugadores, están preocupados por conseguir que su clan triunfe sobre los demás clanes, que su avatar tenga asociada la mayor cantidad de salud, honor, agilidad, fuerza, potencia, etc... Tratan de ayudarse entre ellos agrupándose por clanes. Tratan de realizar misiones para conseguir la llave del cofre del tesoro que contiene diferentes cantidades de salud, honor, agilidad, ... y otras cosas absurdas que no suelen estar en cofres en la vida real, para añadirlos a sus avatares. Y, sobre todo, están preocupados por saber si podrán conservar largamente lo que están añadiendo a sus avatares. Añadidos a veces a base de muchas pequeñas cantidades de dinero pagado para conseguir "inmunidad" u otras características. Añadidos a veces a base de grandes espacios de tiempo jugando personalmente. Añadidos a veces a base de terceros programas, los Helpers o ayudantes, que obtienen "milagrosamente" información privilegiada del propio tablero de juego. Añadidos a veces a base de terceros programas, los Bots o autojugadores, que pueden jugar automáticamente día y noche. Están preocupados por conseguir el mejor Bot, aquel que consiga vencer a otros Bots que han obtenido "también milagrosamente" los clanes vecinos.

Observo también que los segundos, los alumnos tratan de conseguir la mayor cantidad de conocimientos, habilidades y actitudes positivas. Tratan de ayudarse entre ellos agrupándose por especialidades dentro de la disciplina de estudio. Tratan de plantearse prácticas en grupo que faciliten el inter-aprendizaje al tiempo que desarrollan buenos hábitos de trabajo colaborativo. Están preocupados por no dejarse nada atrás, por no pasarse a la ligera ningún pequeño apartado del temario. Y, sobre todo, están preocupados por saber si lo que están aprendiendo será posible aplicarlo en la práctica, en un puesto de trabajo, o por el contrario serán conocimientos, habilidades y actitudes que quedarán obsoletas antes de trabajarlas.

Esa es la realidad que observo. Muy lejos de la que me agradaba compartir con Asimov.
  


EL CHARSET O JUEGO DE CARACTERES





Google+ está queriendo ser una gran red social.
Ahora me envía de vez en cuando un correo sugestivo, un correo electrónico con sugerencias para nuevas amistades electrónicas.
Yo tengo configurado mi buzón de correo rojasresdes@gmail.com para que me lo descargue Outlook. En la imagen (retocada para salvaguardar identidades de personas) se puede ver la enorme cantidad de fallos de deletreo que recibo.

Ya estoy acostumbrado a verme como
José Antonio Rojas Delgado, y a mi país como España, porque escribo programas, y sé lo que es eso. Lo último que se depura es la presentación. Lo más importante siempre es la funcionalidad, el algoritmo, que el programa resuelva automáticamente o ayude a las tareas cotidianas. Siempre queda para el final el tema de las tildes. Tengo que depurar rutinas de programas que generan correos electrónicos todos los días. Así que sé lo que es eso.

Lo que procuro hacer es probar cada nuevo programa que escribo, antes y después de la implantación, durante la fase de pruebas y tras instalarlo en el servidor.  De este modo evito muchos errores. Mis clientes nunca usan un programa que no haya usado yo primero. No quiero decir con ésto que yo sea el perfecto programador.

Pero sí digo que no esperaba ésto de Google.
¿Cuántas posibilidades puedo imaginar? Y más interesante ¿cuál será la verdadera?
Una de cinco:
- Outlook no da la talla.
- Outlook da la talla pero necesito configurarlo.
- No han probado su programa generador de correos sugestivos.
- Y si lo han probado, no han encontrado el error.
- Y si lo han probado y han encontrado el error, no han conseguido corregirlo.
- Y si lo han probado y han encontrado el error, no han querido corregirlo.

Rechazo las dos primeras. Los correos se ven bien, habitualmente.
Prefiero pensar que sea cierta la tercera.
La cuarta y la quinta no son típicas de buenos programadores. Y yo tengo a los de Google como los mejores de entre los muy buenos.
La sexta conlleva la presunción de culpabilidad de querer hundir al cliente de correo de Microsoft (porque si leo el correo en gmail sí que se visualiza bien).

El estado de la cuestión:

1.- Se puede generar una página web sin especificar un charset o juego de caracteres. En este caso el navegador y el visor de correos deberían entender que la codificación es la establecida por defecto para el sistema operativo, usualmente una codificación ANSI o Europeo Occidental o ISO-8859-1 o Latin1. Esta codificación soporta la mayoría de caracteres con tilde y otros caracteres especiales que solemos usar en español-castellano.
2.- Los editores de páginas web permiten guardar el archivo de página web usando otras codificaciones más idóneas para el idioma español-castellano, como por ej la codificación UTF-8.
3.- Las páginas web tienen un lugar en la cabecera HTML para especificar la codificación que debe usar el navegador o el visor de correos para mostrar su contenido.

El problema:

p1.- Una página web puede ser generada estáticamente por un editor de textos, y ser guardada en disco usando una codificación distinta de la expresada en su cabecera HTML.

p2.- Una página web puede ser generada dinámicamente mediante un programa de servidor activo (PHP, ASP, JSP, ...) . En este caso su codificación coincidirá con la codificación del propio archivo que contiene el programa interpretable por el servidor, y puede igualmente ser distinta de la codificación de la correspondiente cabecera HTML generada dinámicamente por ese mismo programa de servidor.

p3.- Un programa de servidor activo puede generar dinámicamente una página web con un contenido textual codificado en UTF-8, adecuadamente a su cabecera HTML. Si ese mismo contenido se envia a través de correo electrónico enmarcándolo enmedio de un código HTML con codificación de cabecera UTF-8, igual a la empleada en la página web, se comete el error de codificar dicho contenido una segunda vez. La primera vez se codifica antes de entregarlo al gestor de correos para su envío. La segunda al procesarse para su visualización en el cliente de correo, que no espera contenido codificado en UTF-8.

         mail("rojasredes@gmail.com",$asunto, $mensaje, $cabeceras);

La solución:

s1, s2.- Codificar siempre todo con la misma codificación: UTF-8
s3.- Decodificar el mensaje de correo antes de entregarlo al gestor de correos.

         mail("rojasredes@gmail.com",$asunto, utf8_decode($mensaje), $cabeceras);


  


VARIABLES EN JAVASCRIPT





En javascript podemos escribir estas 5 líneas de código fuente:

var nombre="José Antonio";
var edad;
edad=35;
edad=edad+10;
alert(nombre+" tiene "+edad+" años");

En este código fuente podemos ver que las variables se declaran y, opcionalmente se definen mediante la palabra reservada var.
En efecto, en javascript no es necesario inicializar o definir las variables cuando se declaran.
Así, en el código fuente anterior, a la variable nombre se le asigna un valor inicial en la línea 1, la misma línea en la que se declara, con lo que se consigue la declaración y la definición en la misma línea.

Y también en este código fuente, a la variable edad no se le asigna ningún valor inicial en la línea 2, en la línea en la que se declara. La variable edad toma un valor en la línea 3, en la línea en la que se define. De este modo la declaración y la definición se hacen en líneas distintas.

El código fuente javascript anterior es totalmente equivalente al siguiente código fuente:

nombre="José Antonio";
edad=35;
edad=edad+10;
alert(nombre+" tiene "+edad+" años");

En este segundo código podemos ver que las variables no se declaran.
En efecto, en javascript no es necesario declarar las variables.
Esta característica de javascript lo hace altamente versátil para códigos fuente arbitrariamente pequeños, donde los errores de sintaxis son fácilmente solucionables a simple vista, pero imaginemos un código fuente de miles de líneas entre las cuáles estuviera el siguiente código fuente:

nombre="José Antonio";
edad=35;
edaf=edad+10;
alert(nombre+" tiene "+edad+" años");

Al ejecutarse este código el intérprete de javascript no nos avisaría de que estamos usando una variable de nombre "edaf" con un error de deletreo sobre la verdadera variable "edad". Para javascript existen dos variables perfectamente definidas: edad, que vale 35, y edaf que vale 45. Pero el mensaje de alerta no mostraría lo que debería mostrar, y el sistema no nos mostraría ningún error.

La bondad de la declaración opcional en javascript se torna un auténtico calvario para el desarrollador, que no encuentra ninguna ayuda para encontrar un simple error de deletreo.
  


javascript DoEvents





En javascript, mientras se procesa una función manejando un evento, no se pueden visualizar cambios gráficos en la ventana del navegador. La ventana del navegador se vuelve a pintar para reflejar el estado final actualizado por la función manejadora del evento.

Veámoslo con un ejemplo. Imaginemos que tenemos un botón que va a realizar una larga operación de cálculo, y deseamos informar al usuario de que se está realizando una operación de este tipo mediante un mensaje en pantalla como "Procesando la información, por favor, espere...". Dicho mensaje deberá desaparecer de la pantalla una vez se termine el proceso. Para ello podríamos encerrar el texto en una división, que sería oculta inicialmente:

<div id="mensaje" style="display:none;">Procesando la información, por favor, espere...</div>

, posicionado en el lugar donde deba aparecer.

El botón podría ser:

<input type="button" value="CALCULAR" onclick="MANEJADORDEEVENTOSonclick();">

El manejador de eventos debería contener:

<script type="text/javascript">

function MANEJADORDEEVENTOSonclick()
{
     var mensaje=document.getElementById("mensaje");

     mensaje.style.display="block"; //muestra el mensaje
     calcular(); //calcula
     mensaje.style.display="none"; //oculta el mensaje
}

</script>

Pero ésto, simplemente, no funciona como esperaríamos. Jamás se visualizará el mensaje, ya que mensaje.style.display vale "none" tanto antes como después de ejecutarse completamente el manejador de eventos.

Nuestra primera intención para solucionar el problema podría ser llamar a alguna función que detuviera por unos momentos la ejecución de este manejador de eventos y atendiera a otros eventos pendientes:

<script type="text/javascript">

function MANEJADORDEEVENTOSonclick()
{
     var mensaje=document.getElementById("mensaje");

     mensaje.style.display="block"; //muestra el mensaje
     DOEVENTS(); //ESTA FUNCION NO EXISTE EN JAVASCRIPT
     calcular(); //calcula
     mensaje.style.display="none"; //oculta el mensaje
}

</script>

Aquí he hecho una llamada a una función doevents() que NO EXISTE EN JAVASCRIPT. Tampoco existe algo como sleep(1000), ni nada por el estilo, para dormir el hilo de ejecución.

Así que lo que hay que hacer es descomponer el manejador de eventos en dos funciones. La segunda función será llamada mediante un disparador de reloj, usando una llamada a window.setTimeout(funcion(), numero_de_milisegundos); que ejecutará la función dada cuando hayan transcurrido los milisegundos dados:

<script type="text/javascript">

function MANEJADORDEEVENTOSonclick()
{
     var mensaje=document.getElementById("mensaje");

     mensaje.style.display="block"; //muestra el mensaje

     window.setTimeout(MANEJADORDEEVENTOSsegundaparte(), 100);
}

function MANEJADORDEEVENTOSsegundaparte()
{
     calcular(); //calcula

     var mensaje=document.getElementById("mensaje");
     mensaje.style.display="none"; //oculta el mensaje
}

</script>

En realidad no hace falta poner una gran cantidad de milisegundos, con 100 bastará para que el intérprete javascript del navegador haya decidido pintar la pantalla actualizando gráficamente mensaje.style.display con el valor "block", para que se vea.

Este truco de implementación también es necesario cuando se hace una depuración de código en tiempo real. Las variables que se desean visualizar se colocan en una división encima de la pila de zIndex, para que siempre esté visible. Se pueden recalcular y visualizar cambiando innerHTML de dicha división, por ej, al final del manejador de eventos mousemove. Pero si se desea visualizar su estado enmedio del procesado de otro manejador de eventos, no queda más remedio que volver a usar este truco.  


abrir enlaces externos en nueva ventana de Chrome





Es un hecho que Google Chrome es el navegador web más utilizado hoy en día. Hace tan solo unos meses desbancó al todopoderoso Microsoft Internet Explorer de la cima de esta estadística.
Así que, muy a mi pesar, como desarrollador web, tomé la decisión de cambiar mi navegador predeterminado.

Cuando cambias de programa predeterminado echas de menos algunas configuraciones que solías dar por sobreentendidas mientras usabas el anterior programa. Es lo que ocurre con Chrome en lo referente a la apertura de enlaces externos.

Un enlace externo es cualquier enlace que puedes pinchar en una aplicación informática distinta del navegador. Por ejemplo, cuando estás leyendo un correo electrónico y pinchas en un enlace. Otro ejemplo puede ser una presentación de diapositivas, una hoja de cálculo, un documento de Word. Otro ejemplo puede ser un botón de la sección de ayuda de cualquier programa, como el de "ir a la web del autor".

El comportamiento predeterminado de Chrome es abrir el enlace en una nueva pestaña dentro de una ventana abierta del navegador, en concreto la última ventana usada. Si está minimizada, además, pasará a primer plano.

Este comportamiento no es correcto para mí y para muchos otros navegantes, ya que entendemos que una ventana de navegador minimizada es un trabajo aparcado para un asunto concreto de navegación por internet, que no queremos mezclar con otro asunto de navegación.

Queremos que los enlaces externos se abran en una nueva ventana del navegador. Pero Chrome no tiene ninguna opción para ello en sus menús de configuración. Hay que editar el Registro de Windows y añadir la cadena

--new-window

a la clave por defecto de http shell open command de la rama HKEY_CLASSES_ROOT

Para ello puedes usar la herramienta Editor del Registro (regedit para los amigos). Usala con cuidado, porque no es apta para novatos y te puedes cargar el sistema operativo.

También puedes escribir un archivo de texto con el Bloc de Notas, y el siguiente contenido:

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\http\shell\open\command]
@=""C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --new-window "%1""

Guárdalo, por ejemplo, en el escritorio, con el nombre "abrirenlacesexternosennuevaventanadechrome.reg".
No olvides que la extensión del archivo debe ser .reg
El icono de los archivos .reg es como una especie de cubo de Rubic con cuadritos sueltos de color verdeazul. Al ejecutarlo (con doble click) puede aparecer primero la ventana de confirmación de cambios administrativos en el sistema operativo, dependiendo de la configuración del Control de Cuentas de Usuario (UAC). Al aceptar, después aparecerá un cuadro de diálogo del Editor del Registro para que confirmes que deseas continuar con el proceso de cambio del Registro de Windows. Al pulsar SI, aparece otro cuadro de diálogo con el estado final del cambio, normalmente correcto. Y ya está.

Esperemos que los de Google incorporen esta opción de configuración en la nueva versión del navegador.
  


EL INTERÉS DE TENER UN FOTOBLOG





Un blog es una manera rápida de comunicar tus ideas. Escribes un título o asunto del que va tu idea. Escribes el texto que describe tu idea usando las palabras con las que crees que te buscarán en Google, original a ser posible, y si copias y pegas desde otra página no olvides mencionarlo al final (más que nada, para que no te tachen de fantasma electrónico).

Si, además, es un fotoblog, puedes adjuntar una foto o imagen descriptiva de la idea, original a ser posible, y lo más impactante que puedas crear, con tu cámara y/o con tu programa de edición de imágenes favorito (léase Photoshop).

Y finalmente, pulsas el botón GUARDAR, y ya está publicada la entrada en tu sitio web.

Después usas tu cuenta de tu red social favorita y compartes una entrada con una introducción a la idea (puedes usar de nuevo el título o asunto) y añades un enlace a la entrada de tu blog.
Si no perteneces a ninguna red social, envíales a tus amistades un correo electrónico con un enlace a la entrada de tu blog. Ya se encargarán ellos, si les gusta y lo ven adecuado, de difundirlo entre sus redes sociales.

Cuando lleves unos cuantos meses (o unos cuantos días, dependiendo de lo prolífico que seas escribiendo) almacenando y publicando estos pequeños textos, un buen día se te vendrá a la cabeza que quieres volver a leer lo que escribiste. Para ello puedes usar el buscador interno integrado con tu blog. Busca por palabras y te aparecerán por orden de relevancia, las entradas encontradas.

De igual manera, cualquiera que te lea habitualmente, encontrará las entradas que le parezcan interesantes buscándolas en este buscador interno.
Y si es de los que no te leen habitualmente, o simplemente aún no te han leído, buscarán en Google, que tendrá indexadas todas las entradas de tu blog, aunque en esta ocasión las páginas encontradas no serán solo las tuyas, claro.

Y digo yo que te estarás preguntando por qué podría interesarte tener tu propio sitio web y publicar en tu propio blog (con los, aunque pequeños, importes que acarrea) si tienes otros sistemas como redes sociales o blogs totalmente gratuitos por internet.

La razón es bien sencilla: lo que publicas en tu sitio web es TUYO. Tú lo controlas. Lo haces aparecer y desaparecer a tu voluntad. Lo creas y lo destruyes de la misma manera. Puedes reclamar si alguien te lo copia y lo vuelve a publicar sin tu permiso.
Pero ¿acaso no es eso lo que permiten esos otros sistemas gratuitos?
Siento decirlo, pero hay que leerse la letra pequeña, a ver lo que dice sobre la licencia con la que compartes lo que publicas (que deja de ser tuyo nada más darle al botón de guardar). Y hay que leerla bien, incluyendo las leyes sobre protección de datos del país donde está la empresa propietaria del sistema gratuito. Y seguir leyéndola bien cada vez que dicha empresa decida cambiar su política de privacidad o su licencia de usuario gratuito.

  



ACTION SCRIPT: DETECTAR SI UNA CADENA ES NUMÉRICA





Supongamos que tenemos una entrada de usuario en una variable de cadena y queremos saber si el usuario ha tecleado un número o no.
Podríamos pensar que la solución es preguntar si es un número. Esto no funciona.

if(variable is Number) ... no funciona. Siempre devuelve falso, porque la variable es una cadena de caracteres, no un número.

ActionScript no interpreta una cadena numérica como un número. El operador "is" no ayuda

Como alternativa podríamos pensar que si es posible convertir la cadena en un número entero, será numérica, y en caso contrario no lo será. Esto no funciona.

if(parseInt(variable) is Number) ... no funciona. Siempre devuelve verdadero cuando la cadena contiene números, porque el número extraido siempre es un número.

Milagrosamente el número extraido no es comparable consigo mismo cuando la cadena contiene letras. Esa es la solución.

public static function esNumerico(valor:String):Boolean
{
//AS3 no interpreta una cadena numerica como un número
//"hola54" is Number ==> false
//"54" is Number ==> false

//AS3 extrae los números a un entero que siempre es un número
//parseInt("hola54") is Number ==> true
//parseInt("54") is Number ==> true

//AS3 no puede comparar el número extraído
// parseInt("hola54")==parseInt("hola54") ==> false
// parseInt("54")==parseInt("54") ==> true

return( parseInt(valor) == parseInt(valor) );
}
  


¿ABP ó ABS?





APRENDIZAJE BASADO EN PROBLEMAS

A veces, en nuestro intento de llegar al alumno, los Formadores Ocupacionales tenemos que reinventar la rueda. El enfoque semimagistral ORDENADOR, QUÉ ES, QUÉ PARTES TIENE, PARA QUÉ SIRVE, PRACTIQUEMOS ha tenido que evolucionar.
Es necesario estudiar en cada grupo qué enfoque es el más adecuado. Podría parecer que el enfoque creador de expectativas ORDENADOR, PARA QUÉ SIRVE, QUÉ ES, QUÉ PARTES TIENE, PRACTIQUEMOS puede ser suficiente para algunos grupos que necesiten saber que esa máquina sirve para algo antes de estar interesados en conocer más sobre ella.

El enfoque del APRENDIZAJE BASADO EN PROBLEMAS va más allá.

Un primer acercamiento sería ORDENADOR, PROBLEMAS SIN ORDENADOR, PARA QUÉ SIRVE, QUÉ ES, QUÉ PARTES TIENE, PRACTIQUEMOS.

A mí me gustaría tener en clase el suficiente tiempo para este segundo acercamiento, que propongo aquí porque lo he vivido en aquellos primeros trabajos de oficinista. El ordenador estaba en la oficina, pero el software y el hardware no era el adecuado, así que había que hacer muchas tareas sin poder usarlo. Ahí va el enfoque:

PRACTIQUEMOS SIN ORDENADOR, QUÉ PROBLEMAS SE DETECTAN, QUÉ SOLUCIONES EXISTEN, LA SOLUCIÓN ORDENADOR PARA QUÉ SIRVE, QUÉ ES, QUÉ PARTES TIENE, PRACTIQUEMOS

Este enfoque, aunque muy acertado y equivalente a la realidad, es insufríblemente inviable en el aula (como no sea en un taller de empleo, y tampoco) por lo dilatado de su planificación temporal.
Sería ideal, por ej., empezar haciendo trabajos de edición en una máquina de escribir, con papel de calco para generar varias copias, etc... pero ésto requiere un tiempo de aula que no tenemos. Nuestro intento de interiorizar el problema para que se aprecie la solución quedaría cambiado por una sensación de pérdida de tiempo en nuestros alumnos. Es preferible obviar el problema e ir directamente a la solución.

No queda más remedio que acortar, quitar tiempo del principio para que el PRACTIQUEMOS tome su verdadero espacio de tiempo. Hay que quitar PRACTIQUEMOS SIN ORDENADOR,  QUÉ PROBLEMAS SE DETECTAN y QUÉ SOLUCIONES EXISTEN.

Esto nos deja el enfoque creador de expectativas como el más viable. Cambiemos el PARA QUÉ SIRVE para que englobe PROBLEMAS SIN ORDENADOR+QUÉ SOLUCIONES EXISTEN, y quitemos la palabra PROBLEMAS que es ciertamente negativa:
ORDENADOR, QUÉ SOLUCIONES APORTA, QUÉ ES, QUÉ PARTES TIENE, PRACTIQUEMOS

Ya queda bien, pero entonces el aprendizaje basado en problemas, creador de expectativas, debería llamarse

                               APRENDIZAJE BASADO EN SOLUCIONES

¿No es más elegante? A mí sí me lo parece.

  


ESCLAVOS, LIBERTINAJE Y LAS LICENCIAS DE SOFTWARE LIBRE





En la entrada de "Software Libre" de la Wikipedia (http://es.wikipedia.org/wiki/Software_libre)
se puede leer una frase que me ha llenado de profunda decepción. Se trata de la argumentación contra la supuesta mayor libertad de la licencia BSD sobre la GPL. La pregunta me dió vueltas a la cabeza durante unos días. Dice así:  

¿Quiénes son más libres, los habitantes de un país donde se permite la esclavitud o los habitantes de un país donde se prohibe la esclavitud?

  




\"EPIs ENANOS\" ó ¿CUÁNTOS PLANETAS TIENE NUESTRO SISTEMA SOLAR?





¿Cuántos planetas tiene nuestro Sistema Solar?
Todo buen castellanoparlante, fiel súbdito del Rey de España, deberá contestar que unos veintemil, 20.000.
Según el diccionario de la Real Academia Española de la Lengua, un planeta es un cuerpo sólido celeste que gira alrededor de una estrella.
Y hay unos 20.000 de esos cuerpos sólidos celestes girando alrededor de nuestro Sol, incluyendo Plutón, Ceres y los demás alrededor de 20.000 asteroides que forman parte del Cinturón de Asteroides: una zona llena de pedruscos entre Marte y Júpiter, todos girando alrededor del Sol.

Mi afición por los artículos de Astronomía desde mis primeras lecturas en tiempos escolares permitía entender que no se puede llamar planeta a un pedrusco, por mucho que circule en órbita solar, o así parezca desprenderse de la entrada de nuestro Diccionario Real, que por supuesto tiene la adecuada precisión evolutiva de un diccionario de definiciones, y no de un diccionario enciclopédico. Y así parece que en 2006 la Unión Astronómica Internacional me dió la razón al introducir el concepto de "planeta enano". En realidad nos dió la razón a todos, porque este
entendimiento lo considero obvio para, prácticamente, todo el mundo.

Del mismo modo son interpretables las leyes que Su Majestad sanciona y suscribe en forma de Reales Decretos. Por ej. la ley 31/1995, de 8 de noviembre, de Prevención de Riesgos Laborales, publicada en el BOE nº 269 10-11-1995 dice en su Capítulo I, Artículo 4 Definiciones, Apartado 8:

Se entenderá por "equipo de protección individual" cualquier equipo destinado a ser llevado o sujetado por el trabajador para que le proteja de uno o varios riesgos que puedan amenazar su seguridad o su salud en el trabajo, así como cualquier complemento o accesorio destinado a tal fin.

Y la pregunta es ¿Qué objetos son considerados EPI para un trabajo de oficina? ¿Cuántos complementos o accesorios en una oficina son considerados como EPI?

Según la RAE, un complemento es algo que se añade para conseguir integridad o perfección, un accesorio depende de lo principal o se le une por accidente.

Los reposamuñecas de ratones y teclados parecen encajar con las definiciones. Pero también encajan con esas definiciones las piezas de las carcasas de los ratones con sus formas, colores, acabados (mate), texturas y demás características propias del diseño ergonómico. Y la propia alfombrilla del ratón también, por los mismos motivos. Y las formas, colores, acabados y texturas de la caja del teclado y de todas y cada una de las teclas. Y los aislantes eléctricos y especificaciones de radiación electromagnética de los teclados y ratones. Y...

Igualmente ocurre con las partes ergonómicas de monitores, escáneres, impresoras, mesas, sillas, reposapiés, ...

También es EPI la propia ropa y calzado del trabajador de oficina, que
lo protege de las inclemencias del tiempo, viento, temperatura, etc...

Pero también es EPI un ventilador, el equipo de aire acondicionado, una
ventana, una cortinilla, la disposición de las mesas alrededor del pasillo, ... todos son complementos o accesorios que colaboran en la protección de riesgos laborales.

Y también es EPI el suelo, las paredes y el techo de la oficina.

Y, desde el punto de vista principalmente del ruido medioambiental, también es EPI el edificio donde está la oficina. Y el barrio donde está el edificio.

Y, desde el punto de vista de la prevención del estrés y de la consecución de la adecuada concentración en el puesto de trabajo, también es EPI el pueblo donde está el barrio. Y el territorio nacional donde está el pueblo. Y los territorios nacionales vecinos.

Y desde el punto de vista de la protección contra bombardeo de meteoritos y radiaciones electromagnéticas, también es EPI la atmósfera de la Tierra y el cinturon de Van Allen. Como dicho cinturón está generado por el nucleo magnético de la Tierra y dado que éste solo existe porque existe el resto de la Tierra, la Tierra completa es el EPI. De hecho nadie duda que la Tierra es un complemento indispensable para conservar la integridad y conseguir la perfección de nuestra salud.
Y desde el punto de vista de la protección contra la llegada de grandes meteoritos, el Sol y Júpiter, como grandes objetos masivos que son, desvían y atraen hacia sí los grandes meteoritos, y son también un EPI. De hecho, nadie duda que el Sol es el principal EPI para conseguir el equilibrio climático y térmico necesario para (la vida) el trabajo de oficina.

Me temo que, excepto las características propias de la funcionalidad de cada objeto de la oficina (y del Universo), informático o no, todos ellos son, desde el punto de vista de la (conservación de la vida) prevención de riesgos laborales, susceptibles de ser considerados EPI, a la vista de la definición.

Sin embargo, igual que hiciera con los planetas y los "planetas enanos", debo entender que hay EPIs y "EPIs enanos".
De fuera a adentro, debo quitar de esta lista gigantesca de EPIs el Sistema Solar y todos sus planetas y estrellas componentes, debo quitar la Tierra y todas sus características componentes, debo quitar el territorio nacional y todos sus subterritorios componentes.
Luego, de dentro a afuera, debo quitar al propio trabajador y todos sus elementos componentes (ropa, calzado, hábitos de convivencia laboral...), debo quitar el teclado y todos sus elementos componentes (incluido el reposamuñecas), y el ratón y todos sus elementos componentes (incluida alfombrilla y reposamuñecas). Y los demás equipos informáticos y sus componentes ergonómicos. Y la silla y todos sus
elementos componentes (incluido el reposapiés). Y la oficina y todos sus elementos componentes (incluidas paredes, techos y suelos, disposición de las mesas, ventanas, cortinillas y demás equipos de regulación de aire, ventilación, luz, temperatura y aislantes térmicos y acústicos.

Y solo me quedo con el equipo específico para protección que lleve o sujete el trabajador y los complementos o accesorios de ese equipo específico para protección, excluyendo los complementos o accesorios de otros objetos, equipos o herramientas que estén alrededor del trabajador y que puedan ser o no ser utilizadas por el trabajador para el desarrollo de su trabajo, o intervenir y facilitar la seguridad vital del trabajador mientras trabaja.

Por tanto, para concluir, entiendo que un reposamuñecas no es un EPI porque forma parte del ratón o del teclado al que pertenece; un reposapiés no es un EPI porque forma parte del asiento al que pertenece; los bordes redondeados de las mesas, almohadillados o no, no son EPIs porque forman parte de cada mesa; los reposabrazos y piezas de ajuste de la presión lumbar de las sillas no son EPIs porque forman parte de las sillas; la ropa y calzado normales no son EPIs porque forman parte del trabajador; ... (y así "sucedáneamente") ... ; Ceres no es un EPI porque forma parte del Cinturón de Asteroides; el Sol no es un EPI porque forma parte del Sistema Solar...
  


EL ORGULLO DE SER HUMILDE





"Qué más puedo desear en la vida: soy guapo, inteligente, y humilde. A decir verdad, aunque soy muy guapo y muy inteligente, lo que más me caracteriza es ser humilde. Bueno, de hecho soy el ser más humilde que conozco ... en pocas palabras ... a mí a humilde no me gana ni Dios".
Buen chiste de comedia, pero un tanto impreciso en los términos. En mi opinión donde se emplea la palabra "humilde" se debería emplear la palabra "modesto".
Me explico:

La humildad es lo contrario de la soberbia o vanagloria.
La persona que es humilde se acepta a sí misma con sus buenas cualidades y sus malos defectos. La que es soberbia se vanagloria de sus buenas cualidades (acrecentándolas) y nunca admite sus malos defectos (aminorándolos).

La modestia es lo contrario del orgullo.
La persona que es modesta no hace gala de sus logros para no lastimar a los demás que han conseguido sólo logros mediocres o fracasos. La que es orgullosa mencionará sus logros sin ningún miramiento.

Dice el diccionario de la RAE que la modestia es la cualidad de humilde, pero yo no las relaciono. Para mí la humildad y la modestia no están tan relacionadas. Al menos no lo están más que lo están sus contrarios, la soberbia y el orgullo.

Yo creo que una persona puede manifestar orgullo sin ser soberbia:
Una persona puede mencionar sus logros o sus buenas cualidades sin pensar que esto pueda afectar a otros que no han llegado a lograrlos o que no tienen tan buenas cualidades. Por tanto es una persona orgullosa y no es una persona modesta, y dado que lo que menciona es la verdad y no una verdad acrecentada, no es una vanagloria o una soberbia.
Al mismo tiempo puede admitir sus fracasos y sus malas cualidades sin entrar en conflicto de autoaceptación personal, siendo por tanto humilde.

Por tanto, creo que una persona puede ser al mismo tiempo orgullosa y humilde.

Yo, sin ir más lejos, me considero orgulloso y humilde. Es más, me considero orgulloso de ser humilde. Orgulloso de que gracias a mi esfuerzo y trabajo diario llego a conseguir lo que consigo cada día. Y humilde porque admito que no he podido conseguir más al mismo tiempo que admito que, con una cierta probabilidad, otros más afortunados sí que lo hayan conseguido o lo habrían conseguido si hubieran estado en mi lugar.
Y rechazo y huyo todos los días de la vanagloria tanto como de la modestia. Así, no me permito a mí mismo acrecentar la verdad sobre mis buenas cualidades y mis logros. Y, al mismo tiempo, no me puedo permitir el comportamiento modesto de dejar de mencionarlas, porque entiendo que de ello depende mi supervivencia.  


LOS CIRCULOS DE GOOGLE+ O CUANDO GOOGLE YA NO TE MUESTRA LO QUE TU BUSCAS





En el mundo de hoy es difícil encontrar lo que buscas en Internet sin la
ayuda de algún buscador, y aquí quien se lleva la corona de laurel es
Google. Es muy raro que hoy en día tenga que usar algún buscador
alternativo. Hace algunos años sí que tenía que echar mano de Altavista,
Yahoo! u otros, de vez en cuando, para encontrar alguna información
especializada o puntualmente avanzada de algún tema sobre programación
en algún lenguaje novedoso. Pero hoy no es muy habitual que lo tenga que
hacer. Eso es debido a los grandes esfuerzos que realiza Google para
conseguir la optimización de los resultados de la búsqueda.

Por ej, gracias a los sistemas de posicionamiento geográfico (GPS) que
poseen nuestros teléfonos inteligentes con el sistema operativo Android,
y siempre que elijamos la opción de compartir dichos datos sobre
nuestra posición, Google puede ofrecernos una respuesta más adecuada a
la búsqueda de algún servicio como "restaurante" o "gasolinera", ya que
entenderá que el servicio buscado es local al lugar donde nos
encontremos. Porque está claro que si estamos en Almería no queremos que
salga en la búsqueda ningún restaurante de Manila, Tokio, Buenos Aires o
Montevideo. Así en los primeros puestos aparecerán restaurantes de
Almería, y los demás de otras localidades aparecerán en hojas
posteriores.

Y es que Google puede conocer muchos datos personales para ofrecernos
los resultados de búsquedas más adecuados a nuestros gustos. Tanto más
cuanto mejor nos pueda identificar el buscador. Por ej si tenemos
nuestra cuenta de google abierta en el navegador, puede conocer qué
videos y de qué temática hemos visto o acostumbramos a ver en youtube, a
qué canales estamos suscritos, ...

Y aunque no tengamos ninguna costumbre susceptible de ser encajada en
alguna temática que pueda ser empleada en personalizar los resultados de
nuestras búsquedas, todavía le queda a Google una última baza: los
amigos de tus Círculos de Google+
Google interpreta los datos personalizados de tus amigos como
pertenecientes a una colectividad de individuos a la cuál tú también
perteneces. De este modo está suponiendo que puede personalizar los
resultados de tus búsquedas con los datos personalizables de tus amigos,
lo cual en mi caso no causa ninguna mejora.

En efecto, yo no elijo a mis amigos porque tengan mis mismos gustos o
afinidades. Mis amigos son personas que, interactuando conmigo en el
mundo real, me demuestran su fidelidad en intercambios atemporales. No
espero encontrar a nadie que me dé algo a cambio de nada, pero sí espero
encontrar a muchos que intercambien algo conmigo, que me puedan dar algo
que ellos tienen a cambio de lo que yo pueda darles. Y que no les
importe si entre lo que me dan y lo que les devuelvo, o entre lo que les
doy y lo que me devuelven pasa nada de tiempo (intercambio simultaneo)
pasa poco o mucho tiempo entre la ida y la vuelta, o simplemente nunca
ocurre la vuelta.

No suelo interactuar con quienes tienen lo mismo que yo tengo, no por
una razón consciente, sino porque evidentemente no voy a pedirles (ni
comprarles ni contratarles...) lo que yo puedo conseguir por mí mismo.
De hecho creo que mis amigos son "elejidos" por este sistema
inconsciente justo por lo contrario, por su complementariedad conmigo.

Y difícilmente en este caso van a ser relevantes sus datos personales
para personalizar los resultados de mis búsquedas en Google.  


PASOS A SEGUIR PARA ELIMINAR UNA PARTICIÓN DE RECUPERACIÓN EN WINDOWS





La operación de eliminación de una partición de recuperación no se puede realizar desde el Administrador de Discos, sino que será necesario realizarlo en modo consola.

1.- En una ventana de comandos (símbolo del sistema) ejecutar:

C:\>DISKPART
DISKPART> LIST DISK

y vemos los discos accesibles

DISKPART>SELECT DISK x

y seleccionamos el disco que contiene la partición de recuperación, sustituyendo la x por el número de disco correspondiente

DISKPART>LIST PARTITIONS

y veremos las particiones

DISKPART>SELECT PARTITION x

y seleccionamos la partición de recuperación, sustituyendo la x por el número de partición correspondiente

DISKPART>DELETE PARTITION OVERRIDE

y la partición de recuperación se eliminará.
¡CUIDADO QUE ESTA OPERACIÓN DE BORRADO NO SE PUEDE DESHACER!  


¿ES LO MISMO 4K QUE UHD (UltraHD)?





EN MUCHOS CATÁLOGOS SE DICE QUE ES LO MISMO, PERO EN REALIDAD NO LO ES:

UHD TIENE UNA RESOLUCIÓN DE 3840X2160 PIXELES
4K TIENE UNA RESOLUCIÓN DE 4096X2160

POR TANTO UN MONITOR 4K ES 256 PIXELES MAS ANCHO

LO QUE PASA ES QUE LAS TELEVISIONES ACTUALES EMITEN CON LA RELACION DE ASPECTO DE UHD, POR LO QUE, SI TE COMPRAS UN VERDADERO MONITOR 4K, AL VER LA TELE, O VIDEOS GRABADOS DE LA TELE, TIENES QUE SUFRIR UNA DE DOS CONSECUENCIAS:

- O PIERDES UN TROZO DE ARRIBA Y OTRO DE ABAJO DE LA IMAGEN, PARA QUE SE VEA A TODO LO ANCHO

- O VES DOS BANDAS NEGRAS A AMBOS LADOS, CADA UNA DE 128 PIXELES DE ANCHO, PARA QUE SE VEA A TODO LO ALTO

CUALQUIERA DE LAS DOS POSIBILIDADES ES UN ROLLAZO QUE HABRÍA QUE SUFRIR HASTA QUE LAS TVs EMITAN EN 4K Y/O EXISTAN DISPOSITIVOS BLURAY 4K Y SE PUEDAN ADQUIRIR O ALQUILAR VIDEOS DE PELICULAS EN 4K, QUE FALTA UN RATO CREO YO.

ASI QUE NO VALE LA PENA HOY EN DIA COMPRAR UN MONITOR 4K. BASTA CON QUE SEA UHD.

  


leer un solo carácter desde teclado, en Java

¿ getch() en Java ?





La función getch() en lenguaje C sirve para leer un único carácter desde teclado, sin eco en la pantalla. Se usa muy habitualmente para aplicaciones de linea de comandos.

Pero no es una función estándar. Está declarada en conio.h, que es un archivo de cabecera usado principalmente por compiladores que generan programas ejecutables para el sistema operativo MSDOS. Por tanto no puede ser usada en otros sistemas operativos como Linux.

Si quieres escribir una aplicación para linea de comandos que lea caracteres de la entrada estándar y escriba caracteres en la salida estándar, el comportamiento es completamente diferente en lenguaje C y en lenguaje Java:

El modo en el que se manejan las pulsaciones de teclas depende del terminal en el que se ejecuta la aplicación. La mayoría de los terminales Linux no envían nada a la entrada estándar de las aplicaciones cuando se pulsa una única tecla.

Y Java debe ser compatible con todos los terminales.

Java lee de la entrada estándar mediante un flujo que, con el objetivo de la compatibilidad entre terminales, no es enviado a las aplicaciones hasta que se pulsa la tecla Intro/Retorno de carro.

Por tanto un programa de linea de comandos (un programa de consola) en Java nunca podrá responder a una simple tecla, salvo, claro está, la tecla Intro/Retorno de carro.

Los ejemplos siguientes no obedecen a la pulsación de una única tecla, como cabría esperar pulsando la "S" o la "N", ya que es necesario pulsar Intro para que se actualice la variable "respuesta".

a) USANDO SCANNER:

String respuesta;
Scanner teclado=new Scanner(System.in);

System.out.println("¿Desea continuar? (S/N)");

respuesta=teclado.nextLine();




b) USANDO DIRECTAMENTE SYSTEM.IN.READ()

char respuesta;

System.out.println("¿Desea continuar? (S/N)");

respuesta=(char)System.in.read();





La solución:

Escribir una aplicación gráfica con AWT o Swing, que capture los eventos de teclado.

  



VERSIONES

para PC para PC antiguo para móviles para imprimir
IMPRIMIR
vista previa impresión

Si no visualizas bien esta página entonces deberías conocer:
validador W3C HTML5 validador W3C HTML5 cuánto se adapta este código HTML5 a las recomendaciones del WWW Consortium
validador W3C CSS3 validador W3C CSS3 cuánto se adapta este código CSS3 a las recomendaciones del WWW Consortium
validador WCAG validador WCAG cuánto se adapta este código HTML5 a las pautas de accesibilidad para el contenido web (WCAG) del WWW Consortium
logo de html5 logo de html5 cuál es el nivel de soporte de HTML5 de este navegador.



















www.rojasdelgado.com-Google pagerank and Worth¿? ¿? ¿?