jump to navigation

Microsoft Sync Framework Noviembre 10, 2007

Posted by yumini in Noticias.
add a comment

bb821992figure3.png

Navegando por algunos blogs rusos(tengo suerte de leer en ruso :-) ) me he encontrado con un nuevo framwork que está preparando Microsoft(actaulmente se trata de la version CTP1), se trata del Microsoft Sync Framework que es un conjunto de herramientas que facilitan el desarrollo de soluciones en las que se precisa la sincronización(replicación) de distintas fuentes de informacion.
Las fuentes de datos pueden ser sistemas de ficheros, bases de datos(ado.net), fuentes RSS/ATOM, etc. El framework permite configurar/desarrollar el soporte para nuevas fuentes de datos por medio de “proveedores de sincronización”.

Es una herramienta valiosa ya que la sincronización de información es un aspecto importante en el planteamiento de las soluciones actuales y es un punto siempre difícil de implementar.

Mas información en:
http://msdn2.microsoft.com/en-us/sync/default.aspx

Archivado en: ,

VIA gOS dev kit Noviembre 10, 2007

Posted by yumini in Noticias.
add a comment

VIA a decidido sacar al mercado su placa base VIA CN700 con sistema operativo gOS (Google OS?) por 60$ (unos 50€). Es una placa base utilizada por el Everex Impact un pc de bajo coste distribuido por Walmart con la ídea de acercar a las masas el uso de ordenadores como puerta de entrada a las aplicaciones web ofrecidas principalmente por Google.


Según los estandares actuales, el es sistema algo lento. Lo que la diferencia es que viene con una versión de Ubuntu Linux y varias aplicaciones basadas en web de Google. Esto es el futuro de los PC’s ya que muchos usuarios podrán comprar estos PC’s y tener una buena experiencia utilizando Linux, Firefox y aplicaciones web sin los tipicos problemas de virus, spyware y Windows Genuine Advantage.


Otra de las ventajas es su reducido consumo, ya que este equipo con un disco duro puede llegar a consumir 30 vatios durante un uso normal (un pc de escritorio normal puede llegar a consumir 110 vatios), lo cual la convierte en una maquina ideal. Para quienes utilizan XFCE y todo nuestro trabajo se hace a traves de 8 consolas con Vi saben de qué estoy hablando. Para el resto de geeks, un servidor de backup o web de bajo consumo y ruido en una pequeña caja puede ser un cambio amigable con el medio ambiente.


La ídea básica es que un usuario inicie gOS y al presentarse el escritorio, sólo tenga que iniciar Firefox y realizar todas sus tareas utilizando las variadas aplicaciones de Google, las cuales abarcan la gran mayoria de aplicaciones de escritorio básicas de cualquier usuario:


  • Google Calendar
  • Google Maps
  • Google Docs (Procesador de Texto, Hoja de Calculo y presentaciones)
  • Gmail (Correo)
  • Google talk (mensajeria)
  • Google Reader (RSS Feeds)
  • Google Photos (Picasa Web)


Esto sin contar muchas otras aplicaciones web ofrecidas por otras empresas, como por ejemplo, una que me es de gran ayuda llamada www.bubbl.us que permite crear diagramas de pensamiento o brainstorming.


En mi opinión, esto es el futuro y claro, siempre que lo que deseemos sea compilar KDE o jugar Enemy Territory, ésta no es la mejor solución.

Futuro de PHP: PHP 6 y Eclipse PDT Noviembre 10, 2007

Posted by yumini in PHP.
add a comment

Algunos datos sobre el futuro de PHP que se pueden desprender de la última entrevista realizada a sus desarrolladores:

  1. La mayoría de las nuevas funcionalidades planeadas para PHP 6, saldrán en PHP 5.3 y 5.4
  2. La migración de aplicaciones PHP 5 a PHP 6 será mucho más costosa que de PHP 4 a PHP 5.
  3. PHP 6 aportará sobre todo soporte para Unicode y tardará todavía, al menos, un año más.
  4. Pese a la salida de Eclipse PDT, Zend Studio seguirá desarrollándose. Si la adopción de Eclipse PDT es masiva, Zend Studio será sustituido.

Conclusiones para alguien que, como yo, tenemos que desarrollar mirando de reojo a lo que viene: todavía no hay que preocuparse por la salida de PHP 6, pero si estar muy atento a las nuevas funcionalidades que vayan saliendo con PHP 5.3 y 5.4, y, en algún momento, Eclipse PDT estará mejor que Zend Studio y habrá que migrar definitivamente…

Artículo original: Zeev on PHP.

¿Que es Microsoft.NET? Octubre 16, 2007

Posted by yumini in .NET.
Tags: ,
add a comment

NET es un proyecto de Microsoft para crear una nueva plataforma de desarrollo de software con énfasis en transparencia de redes, con independencia de plataforma y que permita un rápido desarrollo de aplicaciones. Basado en esta plataforma, Microsoft intenta desarrollar una estrategia horizontal que integre todos sus productos, desde el Sistema Operativo hasta las herramientas de mercado.

.NET podría considerarse una respuesta de Microsoft al creciente mercado de los negocios en entornos Web, como competencia a la plataforma Java de Sun Microsystems.

A largo plazo Microsoft pretende reemplazar el API Win32 o Windows API con la plataforma .NET. Esto debido a que el API Win32 o Windows API fue desarrollada sobre la marcha, careciendo de documentación detallada, uniformidad y cohesión entre sus distintos componentes, provocando múltiples problemas en el desarrollo de aplicaciones para el sistema operativo Windows. La plataforma .NET pretende solventar la mayoría de estos problemas proveyendo un conjunto único y expandible con facilidad, de bloques interconectados, diseñados de forma uniforme y bien documentados, que permitan a los desarrolladores tener a mano todo lo que necesitan para producir aplicaciones sólidas.

Debido a las ventajas que la disponibilidad de una plataforma de este tipo puede darle a las empresas de tecnología y al público en general, muchas otras empresas e instituciones se han unido a Microsoft en el desarrollo y fortalecimiento de la plataforma .NET, ya sea por medio de la implementación de la plataforma para otros sistemas operativos aparte de Windows (Proyecto Mono de Ximian/Novell para Linux/MacOS X/BSD/Solaris), el desarrollo de lenguajes de programación adicionales para la plataforma (ANSI C de la Universidad de Princeton, NetCOBOL de Fujitsu, Delphi de Borland, entre otros) o la creación de bloques adicionales para la plataforma (como controles, componentes y bibliotecas de clases adicionales); siendo algunas de ellas software libre, distribuibles ciertas bajo la licencia GPL.

Con esta plataforma Microsoft incursiona de lleno en el campo de los Servicios Web y establece el XML como norma en el transporte de información en sus productos y lo promociona como tal en los sistemas desarrollados utilizando sus herramientas.

.NET intenta ofrecer una manera rápida y económica pero a la vez segura y robusta de desarrollar aplicaciones – o como la misma plataforma las denomina, soluciones – permitiendo a su vez una integración más rápida y ágil entre empresas y un acceso más simple y universal a todo tipo de información desde cualquier tipo de dispositivo.

El “framework” o marco de trabajo, constituye la base de la plataforma .NET y denota la infraestructura sobre la cual se reúnen un conjunto de lenguajes, herramientas y servicios que simplifican el desarrollo de aplicaciones en entorno de ejecución distribuido.

Bajo el nombre .NET Framework o Marco de trabajo .NET se encuentran reunidas una serie de normas impulsadas por varias compañías además de Microsoft (como Hewlett-Packard , Intel, IBM, Fujitsu Software, Plum Hall, la Universidad de Monash e ISE), entre las cuales se encuentran:

  • La norma que define las reglas que debe seguir un lenguaje de programación para ser considerado compatible con el marco de trabajo .NET (ECMA-335, ISO/IEC 23271)
Por medio de esta norma se garantiza que todos los lenguajes desarrollados para la plataforma ofrezcan al programador un conjunto mínimo de funcionalidad, y compatibilidad con todos los demás lenguajes de la plataforma.
  • La norma que define el lenguaje C# (ECMA-334, ISO/IEC 23270)
Este es el lenguaje insignia del marco de trabajo .NET, y pretende reunir las ventajas de lenguajes como C/C++ y Visual Basic en un solo lenguaje.
  • La norma que define el conjunto de funciones que debe implementar la librería de clases base (BCL por sus siglas en inglés) (incluido en ECMA-335, ISO/IEC 23271)
Tal vez el más importante de los componentes de la plataforma, esta norma define un conjunto funcional mínimo que debe implementarse para que el marco de trabajo sea soportado por un sistema operativo. Aunque Microsoft implementó esta norma para su sistema operativo Windows, la publicación de la norma abre la posibilidad de que sea implementada para cualquier otro sistema operativo existente o futuro, permitiendo que las aplicaciones corran sobre la plataforma independientemente del sistema operativo para el cual haya sido implementada. El Proyecto Mono emprendido por Ximian pretende realizar la implementación de la norma para varios sistemas operativos adicionales bajo el marco del software libre o código abierto.

Los principales componentes del marco de trabajo son:

  • El conjunto de lenguajes de programación
  • La Biblioteca de Clases Base o BCL
  • El Entorno Común de Ejecución para Lenguajes o CLR por sus siglas en inglés.

Debido a la publicación de la norma para la infraestructura común de lenguajes (CLI por sus siglas en inglés), el desarrollo de lenguajes se facilita, por lo que el marco de trabajo .NET soporta ya más de 20 lenguajes de programación y es posible desarrollar cualquiera de los tipos de aplicaciones soportados en la plataforma con cualquiera de ellos, lo que elimina las diferencias que existían entre lo que era posible hacer con uno u otro lenguaje.

Algunos de los lenguajes desarrollados para el marco de trabajo .NET son: C#, Visual Basic, Delphi (Object Pascal), C++, J#, Perl, Python, Fortran y Cobol.NET.

El CLR es el verdadero núcleo del Framework de .NET, entorno de ejecución en el que se cargan las aplicaciones desarrolladas en los distintos lenguajes, ampliando el conjunto de servicios del sistema operativo (W2k y W2003).

La herramienta de desarrollo compila el código fuente de cualquiera de los lenguajes soportados por .NET en un código intermedio (MSIL, Microsoft Intermediate Lenguaje), similar al BYTECODE de Java. Para generar dicho código el compilador se basa en el Common Language Specification (CLS) que determina las reglas necesarias para crear ese código MSIL compatible con el CLR.

Para ejecutarse se necesita un segundo paso, un compilador JIT (Just-In-Time) es el que genera el código máquina real que se ejecuta en la plataforma del cliente.

De esta forma se consigue con .NET independencia de la plataforma hardware.

La compilación JIT la realiza el CLR a medida que el programa invoca métodos, el código ejecutable obtenido, se almacena en la memoria caché del ordenador, siendo recompilado de nuevo sólo en el caso de producirse algún cambio en el código fuente.

La Biblioteca de Clases Base (BCL por sus siglas en inglés) maneja la mayoría de las operaciones básicas que se encuentran involucradas en el desarrollo de aplicaciones, incluyendo entre otras:

  • Interacción con los dispositivos periféricos
  • Manejo de datos (ADO.NET)
  • Administración de memoria
  • Cifrado de datos
  • Transmisión y recepción de datos por distintos medios (XML, TCP/IP)
  • Administración de componentes Web que corren tanto en el servidor como en el cliente (ASP.NET)
  • Manejo y administración de excepciones
  • Manejo del sistema de ventanas
  • Herramientas de despliegue de gráficos (GDI+)
  • Herramientas de seguridad e integración con la seguridad del sistema operativo
  • Manejo de tipos de datos unificado
  • Interacción con otras aplicaciones
  • Manejo de cadenas de caracteres y expresiones regulares
  • Operaciones aritméticas
  • Manipulación de fechas, zonas horarias y periodos de tiempo
  • Manejo de arreglos de datos y colecciones
  • Manipulación de archivos de imágenes
  • Aleatoriedad
  • Generación de código
  • Manejo de idiomas
  • Auto descripción de código
  • Interacción con el API Win32 o Windows API.
  • Compilación de código

Esta funcionalidad se encuentra organizada por medio de espacios de nombres jerárquicos.

La Biblioteca de Clases Base se clasifica, en tres grupos clave:

  • ASP.NET y Servicios Web XML
  • Windows Forms
  • ADO.NET

Los ensamblados son ficheros con forma de EXE o DLL que contienen toda la funcionalidad de la aplicación de forma encapsulada.

Con los ensamblados ya no es necesario registrar los componentes de la aplicación.

Optimizando Php Octubre 15, 2007

Posted by yumini in PHP.
Tags: ,
add a comment

Aquí expongo algunas cuestiones que pueden ayudarnos a optimizar nuestros scripts en PHP. Sería bonito que hubiera comentarios aportando mas información acerca de este interesante tema.

VARIABLES

  • Una buena práctica es inicializar las variables antes de usarlas (cuestión obligatoria en otros muchos lenguajes). Esta tarea de inicialización agilizará nuestros scripts.
  • Los incrementos/decrementos de las variables son más rápidos si se tratan de variables locales que globales. Y diría más, todos los aspectos globales trabajan bajo un ámbito mayor, por lo tanto es lógico pensar que se manejen algo mas lentos.
  • Las operaciones sobre las propiedades de un objeto $this->num++ son mas lentas que las realizadas en variables locales, (al menos en versiones anteriores a PHP5).
  • Pablo -de weBlog “UnLugar”- nos deja un interesante estudio de optimización sobre la definición de variables, constantes y matrices.

BUCLES

  • En las estructuras iterativas (bucles): for, while, etc. debemos (si es posible) tratar de hacer pocas llamadas a funciones. Y más aún a consultas SQL.
    En muchos casos podremos realizar esas consultas SQL de forma mas global (y unitaria) justo como paso previo al bucle, para que dentro de este nos dediquemos a recorrer la matriz con los datos ya extraídos de la SQL.
  • No debemos incluir funciones en las definiciones de bucles.
    Por ejemplo: for($x=0; $x<=count($var); $x++);
    En este bucle estamos provocando que PHP analice la función count() por cada iteración. Sería más sencillo y eficiente esto:
    $num = count($var);
    for($x=0; $x<= $num; $x++);
  • Para la lectura de una matriz, parece ser más rápido el empleo del clásico for que foreach o while, siendo este último el más lento. Esto parece tener mucha lógica si nos fijamos en la propia estructura y definición de cada bucle.

FUNCIONES

  • El paso de parámetros a funciones conlleva su tiempo, no se debe uno exceder en el número de parámetros. Es preferible pasar como parámetro un array con sus ocho valores, que pasar uno a uno en cada variable.
  • Para saber si una variable esta definida es más rápido usar isset() que cualquier otro tipo de funciones. También es muy rápido el uso empty() (mi preferido).
  • Sería lógico pensar que if(empty(valor)) es más eficiente que su contrario if(!empty($var)), pero la diferencia es despreciable.
  • En el trabajo con datos aleatorios, es más rápida mt_rand() que rand() y mt_srand(), que srand().
  • Se dice que sizeof() cuenta los elementos más rápido que count(), aunque también se comenta que esta diferencia es inapreciable. Yo personalmente me quedo con count(), si nos fijamos en el manual oficial de PHP, nos dice que sizeof() es un alias de count(), si esto fuera así PHP haría el paso más en sizeof(), convirtiendo a count() en más rápida. Por otro lado parece que toda la documentación y comentarios gira entorno a count().
  • Parece ser que echo() es más rápido que print(), pero la diferencia parece ser demasiado pequeña. No obstante desde un comienzo le he cogido apego a echo() y solamente uso printf en determinados casos de formateado de texto.
  • Tengamos en cuenta que PHP no evalúa el contenido de las comillas simples, por el contrario las comillas dobles sin son evaluadas en busca de variables. Esto hace que sea más rápido el uso de las simples en caso de no existir variables incrustadas en la cadena a mostrar.
  • Es más rápida la apertura y cierre de cadenas para mostrar variables que incrustarlas dentro de un string.
    Mejor: echo ‘hola, me llamo: ’.$name;
    Peor: echo “hola me llamo: $name”;
  • Las funciones implode(), y explode() son bastante rápidas. En concreto explode() es más rápida que split().
  • Los include_once() y require_once(), son más lentos que include() y require(). Si puedes ser ordenado y evitar lo máximo posible sus llamadas, estarás ganando en velocidad, puesto que “_once” realiza dos pasos: el primero de ellos verificar si el fichero ha sido incluido y el segundo incluirlo (en muchos casos de forma innecesaria).
  • Reducir los accesos al disco duro, cuanto menos accedemos a el mejor. Cuando se comienza con PHP es normal que uno no se preocupe por estas cosas y use funciones file_exists(), filesize(), readdir(), etc. de forma muy alegre y asidua.
  • Reducir los accesos a la base de datos, y aunque parezca evidente, SOLO consultar aquellos datos que vamos a emplear en el script.

METODOLOGIA

  • Programación estructurada VS Orientada a objetos
    Pienso que la programación estructurada se procesa en menor tiempo que la orientada a objetos. Otras cuestiones son la reutilización, legibilidad, y etc beneficios de la orientada a objetos. Bajo el motor de Zend 2.0 de PHP 5, esto parece cambiar mucho y ser realmente eficiente trabajando con POO.
    Mi visión personal es que PHP fue concebido pensando en todo momento en C (lo lleva en las entrañas) y esto no me parece un punto negativo, sino más bien positivo.
    Creo que la mejor opción es emplear POO, pero sin excesos de clasitis, dejando también un hueco para la programación estructurada.
  • Parecerá tonto, pero cabe decir que no se debe inicializar nada, que no vaya a ser usado. Tampoco se deben programar: funciones, clases, objetos, etc. que no sean empleados durante el transcurso del script activo. Mas grave sería incluir ficheros (include/require) sin ser usados o que contengan algunas funciones que tampoco vayan a utilizarse.
  • La salida de errores hacen lentos nuestros script (muy lógico) pero más aún si los escondemos con “@”.
  • La eliminación de comentarios NO acelera nuestro código, es un mito. En tal caso si que puede disminuir el peso del fichero, pero únicamente eso.
  • Incrustar HTML en PHP es más lento que su salida directa.Mejor: <p><?php echo ‘hola’;?></p>Peor: <?php echo ‘<p>hola</p>’;?>No obstante esto es un “arma” de doble filo, puesto que la apertura y cierre de PHP “<?php – ?>” también conlleva su retardo. Por tanto no se debe abrir y cerrar PHP con demasiada frecuencia, siendo lo mejor evaluar cada caso y ver que es lo más lógico.
  • En PHP (como creo que en cualquier otro lenguaje), el trabajo con números es muchísimo más rápido que el de cadenas. Cuestión más que lógica, en informática. Por tanto es preferible usar matrices con índices numéricos, operaciones con números, bucles, condicionales, etc. Esta cuestión se puede extrapolar a otros campos, observemos como cualquier gestor de base de datos trabaja mucho más rápido con una tabla de índices numéricos que una que emplee cadenas de caracteres (aunque sean muy cortas).
  • No reinventar la rueda si la nueva rueda no es muchísimo mejor que la ya inventada. También sería conveniente que antes de realizar cualquier algoritmo consultásemos siempre, si PHP ya tiene alguna función a tal efecto.
  • Optimización no es solo velocidad sino peso de la aplicación. Cuanto mayor sea el tamaño de la aplicación menos eficiente será. Se deben buscar algoritmos breves y concisos, que reduzcan el peso/velocidad y con ello también el consumo de memoria.
  • Siempre que fuera posible se debería huir de la complejidad innecesaria, lo simple será más eficiente y más rápido en procesamiento. Y en muchos casos podemos hacer lo de simple algo muy inteligente.
  • EXPERIENCIA, es normal (y lógico) que un programador con poca experiencia desarrolle algoritmos mas pesados y de poca eficiencia. Como cualquier otro lenguaje PHP tiene una curva de aprendizaje y una vez conseguido el aprendizaje la experiencia es la que otorga al programador la capacidad para crear mejores y más eficientes algoritmos.

Archivos Rar en Linux Octubre 15, 2007

Posted by yumini in Linux.
add a comment

Archivos Rar en Linux Cuando instale mi disco de linux, lamentablemente por cuestiones de compatibilidad y demás tenia necesidad de abrir archivos de comprensión tipo RAR .. (WinRAR) pero lamentablemente no venia instalado, entonces me di a la tarea de instalarla, los pasos que seguí son los siguientes:

 

  • Primero descargas RAR para linux desde: http://www.rarlab.com/rar/rarlinux-3.7.1.tar.gz
  • Abres tu consola y entras como root.
  • Te diriges donde descargaste el archivo y lo descomprimes con: tar -zxvf rarlinux-3.7.1.tar.gz
  • Se crea una carpeta con nombre rar
  • Ahora desde tu consola entras en la carpeta y con un simple make install se instala todo.
  • Cuando se hay terminado la instalación, utilizas tu gestor de archivos comprimidos (Ejemplo: File Roller) he intentas abrir tu archivo tipo rar normalmente como lo haces con otro tipo de archivos, esto debe funcionar perfectamente incluso para comprimir.

Si tienes una distribución Ubuntu solo sería de colocar esto en tu consola:

sudo apt-get install rar unrar