viernes, 28 de mayo de 2010

KDropBox

Se que llego tarde al querer hablar de este tema, muchos de vosotros ya conocéis la tecnología de la que os quiero hablar, no es otro que DropBox.
La idea, como diría un amigo mío: “Es brutal!”. Se trata de tener un disco virtual y mediante la utilización de clientes compartir archivos entre varias máquinas. En definitiva, tendríamos un directorio en los ordenadores que deseemos, compartiendo la misma información y con sincronización automática. La idea es muy buena y por supuesto no es nada nuevo.
Pero lo que venía a anunciar, no es en sí DropBox, que no necesita casi presentación, sino la visión que ha tenido uno de mis mejores amigos. El empezó ha utilizar esta herramienta ya hace bastante tiempo y como no, encontró una necesidad a cubrir al respecto.


Tanto él como yo, somos unos enamorados de la distribución linux SuSE, aunque yo la tenía un poco abandonada, no sé si la conocéis pero os la aconsejo, hablaremos largo y tendido sobre ella algún día. ;o) (prometido)
El problema que encontró Guillermo, es que las aplicaciones cliente de DropBox no estaban para KDE. Para quien tenga dudas de lo que es esto, es un gestor del entorno gráfico que tiene el sistema operativo linux. Si os habéis fijado he dicho un gestor, no “el” gestor, evidentemente porque tiene varios. Los más conocidos y más utilizados son Gnome y KDE y cada unos es libre de instalarse el que desee en su distribución, pero siempre vienen con una por defecto y en este caso SuSE viene con KDE. A esto hay que añadirle que DropBox tenía aplicación para linux pero preparada para Gnome, esto no es mucho problema porque puedes tener las librerías y cargar la aplicación igualmente en el gestor, aunque evidentemente debe cargar las librerías primero... y claro, no es lo mejor. Bien pues, Guillermo que tenía ganas de quitarse la merma de la carga de las librerías, ha diseñado y creado un cliente de DropBox para KDE y este se llama KDropBox. La verdad es que se ha demostrado una vez más que realmente para encontrar algo nuevo, simplemente hay que cubrir una necesidad. Y desde el momento en que mi amigo  me comentó lo de KDropBox, tengo que decir que me hizo sentirme orgulloso de él. La aplicación está teniendo mucho éxito, os invito a todos aquellos que tengáis KDE y queráis usar DropBox a disfrutar de esta aplicación.
Gracias Guillermo.

sábado, 10 de abril de 2010

iPad, una sorpresa.



No estoy seguro de haber dicho en alguno de los anteriores comentarios, y eso que son pocos, que soy un amante de los ordenadores de la manzana. Aquí donde vivo han entrado con fuerza hace unos años y cada vez están consiguiendo más adeptos, entre ellos yo.
Hoy, os quería hacer una reflexión. Hace unos días la marca de la manzana mordida, sacó al mercado su tablet. Desde mi punto de vista y mi experiencia profesional algo totalmente inecesario. Quiero decir con esto, no me interpretéis mal, que es un gadget que a mí, hoy por hoy, no cubre ninguna de mis necesidades, aunque hablo desde la ignorancia, ya que no he tenido ninguno en las manos para sopesar sus ventajas.
El invento, como todos los que lanza esta empresa, será muy bueno, cuidado al detalle y con acabados perfectos. Pero a mi me recuerda a aquellas PDAs que todo el mundo compró como una revolución y han terminado en un cajón olvidadas ya que su uso no cubría las necesidades de quien las compraba.
Aún recuerdo aquellas HP con pantalla táctil con aquellos lapicitos (que siempre se perdían). Que podían mostrar excels con números tan pequeños que eran prácticamente invisibles. Al final readaptaron su mercado para llevar una aplicación, de almacén (entrada/salida de material), etc.
Hoy en día los llamados SmartPhones ya ha superado con creces a esos "cacharros" tanto en velocidad como en capacidad y además nos sirven como teléfono.
Más adelante, las grandes compañías empezaron a sacar al mercado los NetBooks. Que son como mini ordenadores con capacidad y velocidad reducida. Los primeros venían con poquisima capacidad y cada vez los están transformando en ordenadores portátiles pero de 10 pulgadas. Para mi otro cacharro que no cubre mis necesidades. ¿Para qué quiero un portatil tan pequeño donde no puedo ponerle todo lo que quiero porque su capacidad no me lo permite? Como dijo Steve Jobs en la presentacion de su tablet, iPad, los Net Books no sirven de nada. Como podéis ver en mi perfil, soy un profesional de la informática y quizá no me sirvan estos inventos a medias, evidentemente para mi trabajo necesito mucha capacidad, tanto de proceso como de espacio y pensaba que eso es lo que la gente quería y como se ha demostrado estoy totalmente equivocado. El mercado me ha puesto en mi sitio y parece que este tipo de aparatitos son los que demanda el público.
Pensé que iPad sería otro NetBook y que, como muchos pensaron, Apple se había equivocado.
Hace unos días, la prensa empezó a dar cifras de la salida de iPad y os puedo asegurar que no salgo de mi asombro, millón y medio de unidades vendidas en 5 días! 250.000 eBooks descargados para iPad!
Y como os muestro ahora, mucha gente pensaba lo que yo. (Me refiero a gente importante)

- Bill Gates, Microsoft – 10 Feb 2010: “Es un bonito lector, pero no hay nada en el iPad que al verlo me diga a mí mismo: “Oh, ojalá que Microsoft lo hubiera fabricado“ (Tengo que añadir que en esa entrevista, dijo que esa frase se le ocurrió al ver el iPhone, pero no le pasó con el iPad.)

- David Coursey, PC World – 28 Ene 2010: “¿Qué tienen en común el nuevo iPad de Apple y el nuevo Nexus One de Google? Que cuando han llegado ambos han decepcionado“

- Linen DeFiller, MillionFace.com – 27 Ene 2010: “¿El iPad de Apple? Fracaso, broma o fiasco… Pruébenlo”.

En mi humilde opinión NOS HEMOS EQUIVOCADO y hoy he leído en la prensa algo que me hace pensar que quizá si cubra mis necesidades, el caso es que voy a tener que probarlo, pensaréis que todo es una excusa para comprar uno, pero no es así.

"El primer elogio de la competencia: "el iPad se acerca al ordenador ideal". Y proviene de J. T. Wang, presidente de Acer, segundo fabricante mundial de ordenadores y primero de portátiles."

Está claro que a toro pasado, es más fácil acertar, pero cuando la competencia te aplaude, será por algo.

sábado, 2 de enero de 2010

MsgBox en una web...

Hace algún tiempo me encontré un problema en mi trabajo, necesitaba hacer un mensaje de confirmación en la aplicación web que estaba desarrollando. En mi trabajo voy desarrollando aplicaciones web con ASP .NET, aunque no había trabajado nunca con esta plataforma. Así que tiendo a hacer las cosas como si trabajase con cualquier tipo de lenguaje para web, es decir usando html, javascript y el paso de parámetros a través de las vistas, esto suele funcionar en todas partes.

Bien, sin más rodeos, empecé a trabajar para este proyecto con JQuery y utilizando algunos de los plugins que me parecen simplemente IMPRESIONANTES y me generé mi propia función MsgBox o como lo queráis llamar. Muchos de los programadores web que conozco tienen esto solucionado pero en su momento fue un gran problema para ellos al igual que para mi y supongo que aún habrá gente que tenga problema con ello. Así que una vez desarrollado pensé en compartirlo.
Es algo muy sencillo. Necesitamos la librería JQuery con el archivo jquery-min tendremos más que suficiente en este caso usaré el jquery-1.3.2.min.js. También utilizaré un plugin de jQuery de los que me han ahorrado mucho trabajo de lucha con las capas, el SimpleModal. De este plugin, decidí descargar el archivo jquery.simplemodal-1.3.js, aunque no hice ninguna valoración especial, quizá con el archivo jquery.simplemodal-1.3.min.js, habría más que suficiente y ocupa aproximadamente la mitad. Esta prueba os la dejo a vosotros, ja me contaréis...

Paso a explicar el código que he utilizado.
Para que esto funcione he creado 3 archivos.

  • Aviso.html
  • scripts.js
  • prueba.aspx (en este caso)

En el archivo Aviso.html está creada la ventana emergente, popup o MsgBox que aparecerá cuando se realice la acción, el código es el siguiente:

<div id="fondo">
    <div id="msgbox">
        <table width="100%">
            <tr>
                <td id="titulo" colspan="3"><%=Request.Form("titulo")%></td>
            </tr>
            <tr>
                <td colspan="3">
                     
                </td>
            </tr>
            <tr>
                <td width="20%" align="center">
                <% If Request.Form("imagen") = "Exclamation" Then%>
                    <img src="Imagenes/Exclamation.png" alt="" />
                <% ElseIf Request.Form("imagen") = "Warning" Then%>
                    <img src="Imagenes/warning.png" alt="" />
                <% ElseIf Request.Form("imagen") = "Question" Then%>
                    <img src="Imagenes/Question.png" alt="" />
                <% ElseIf Request.Form("imagen") = "Allowed" Then%>
                    <img src="Imagenes/Allowed.png" alt="" />
                <% ElseIf Request.Form("imagen") = "notAllowed" Then%>
                    <img src="Imagenes/notAllowed.png" alt="" />
                <% Else%>
                     
                <% End If%>
                </td>
                <td colspan="2" width="*">
                   <p id="textoAviso"><%=Request.Form("texto")%></p> 
                </td>
            </tr>
            <tr>
                <% If Request.Form("botones") = "YesNo" Then%>
                    <td colspan="3" align="center"><a class="boton_azul" style="width:70px;" href="#" onclick="<%=request.form("funcion") %>"><span>Sí</span></a> <a class="boton_azul" style="width:70px;" href="#" onclick="javascript:quitaAviso();"><span>No</span></a></td>
                <% ElseIf Request.Form("botones") = "OkCancel" Then%>
                    <td colspan="3" align="center"><a class="boton_azul" style="width:70px;" href="#" onclick="<%= request.form("funcion") %>"><span>Aceptar</span></a> <a class="boton_azul" style="width:70px;" href="#" onclick="javascript:quitaAviso();"><span>Cancelar</span></a></td>
                <% ElseIf Request.Form("botones") = "OkOnly" Then%>   
                    <td colspan="3" align="center"><a class="boton_azul" style="width:70px;" href="#" onclick="<% if request.form("funcion")<>"" then%> <%=request.form("funcion")%>quitaAviso();<%else%>javascript:quitaAviso();<%end if%>" ><span>Aceptar</span></a></td>
                <% End If%>
            </tr>
        </table>
    </div>
</div>

Os explico lo que he querido hacer con esto. Lo más importante no es el código en si mismo, sino el paso de parámetros. Como podéis observar paso como parámetros el título, la imagen, los botones y la función. El título como su nombre indica pondrá el título en la ventana de confirmación. La imagen, indicará el icono que se quiere mostrar en la ventana. en este caso hay programadas y imágenes (Exclamation, Warning, Question, Allowed, notAllowed), para cada una de ellas debe existir una imagen para que aparezca ahí mostrada. Como se ve en el código, las imágenes están en el directorio Imagenes y son todas .png, claro cada uno podéis poner las imágenes que queráis.
Los botones están creados con imágenes y dependiendo de la opción elegida, (YesNo, OkCancel, OkOnly), mostrará  los diferentes botones, como se ve a continuación.


Opción YesNo






Opción OkCancel


Opción OkOnly


Como os comentaba antes cada uno puede crear opciones nuevas y si hay alguna interesante que no he contemplado, me la podéis decir y la añadiré al código.
Y por último queda la función. En este parámetro pondremos la función javascript que debe ejecutarse cuando pulsemos el botón de Aceptar o el de Sí. Cuando por el contrario se pulse el botón No, Cancelar o cuando en la opción OkOnly no se le indique función, se ejecutará la función quitaAviso(); que quitará el MsgBox de la pantalla.


Estas funciones estarán en el scripts.js. La más importante de ellas y muy sencilla de implementar será la función que ejecuta nuestra ventana emergente, la función la he llamado MsgBox.

function MsgBox(titulo, texto, imagen, botones, funcion){
     parametros = "titulo=" + titulo + "&texto=" + texto + "&imagen=" + imagen + "&botones=" + botones + "&funcion=" + funcion;
     $.ajax({
            cache: false,
            url: 'aviso.html', 
            dataType: "html",
            type: "post",
            data: parametros,
            success: function(resp){
                $("body").append(resp);
                $("#msgbox").css("left",(document.body.clientWidth/2) - 150);
                $("#msgbox").css("top",(document.body.clientHeight/2) - 75);
                $("#fondo").modal();
            },
            error: function(resp) {
                alert(resp);
            }
        });
   }
function quitaAviso(){
        $.modal.close();
        var quita = document.getElementById("fondo");
        var padre = quita.parentNode;
        padre.removeChild(quita);
   }

Como comenté anteriormente, se utiliza jQuery así que utilizando sus llamadas Ajax, llamo a la página aviso.html, pasándole por POST los parámetros que he comentado antes y con la respuesta, la añado al body de la página, la centro y utilizando SimpleModal la pongo por encima de todo lo visible. También presento la función quitaAviso(); que ya os he comentado cual es su función.

Y ahora hay que hacer una página que llame a nuestro MsgBox.

<html>
<head>
    <title>Prueba MsgBox</title>
    <script src="javascript/jquery-1.3.2.min.js" type="text/javascript"></script>
    <script src="javascript/jquery.simplemodal-1.3.js" type="text/javascript"></script>
    <script src="javascript/scripts.js" type="text/javascript"></script>
</head>
<body>
   <input type="button" value="Saca el mensaje" onclick="javascript:MsgBox('Titulo','¿Está seguro de querer hacer esto?','Warning','YesNo','');" />
</body>
</html>

Esta página llamada prueba.html simplemente tiene un botón que al ser pulsado ejecuta nuestra función MsgBox. Como opciones tenemos que el título será 'Titulo', el texto que aparecerá en la ventana será '¿Está seguro de querer hacer esto?', la imagen será 'Warning', los botones 'YesNo' y no le hemos puesto ninguna función porque para una prueba no lo he visto necesario.
El resultado final será:





Os pongo aquí una llamada a la función MsgBox con una función añadida, como ejemplo.

MsgBox("Salida de camiones","¿ Seguro de dar salida a " + loteCamion + " con peso " + peso + " ?","Question","YesNo","javascript:lanzaCamion('"+loteCamion+"','"+peso+"','"+accion+"');");

Con esta llamada, si en la ventana hay una respuesta positiva, es decir se pulsa el Sí, se ejecutará la función lanzaCamion con sus 3 parámetros.

Espero que os sirva.