Este documento presenta información sobre la dirección y coordinación general de la revista, así como sobre su diseño y maquetación. Explica que la edición fue realizada usando software libre y que busca promover la igualdad compartiendo conocimiento.
Este documento resume Jumpshot, una herramienta para visualizar el rendimiento de programas paralelos basada en registros de bitácoras. Explica que Jumpshot permite el análisis post mortem mediante la visualización de líneas de tiempo y histogramas generados a partir de archivos de registro CLOG. También describe los requisitos para sistemas de visualización, la historia de herramientas similares y las ventajas e inconvenientes del uso de Java para implementar Jumpshot.
El documento introduce el lenguaje de programación Go. Go fue creado por Google para aprovechar la capacidad de los procesadores multicore y permitir la programación concurrente y paralela. El documento explica características del lenguaje como goroutines, canales, select y más. También cubre temas como instalación, compilación de programas, mapas, locks y más patrones de concurrencia en Go.
Tema 2 - Programación básica en C
2.1 Aplicar las directivas de preprocesador de C para incluir ficheros de cabecera
2.2 Utilizar los tipos de datos definidos de forma estándar en C para declarar variables
2.3 Declarar, definir y llamar funciones para implementar modularidad en un programa
Este documento habla sobre cómo sobrecargar operadores en C# para tipos personalizados como clases y estructuras. Explica que si queremos usar operadores como suma en nuestros propios tipos, debemos enseñarle al compilador cómo realizar esas operaciones mediante la sobrecarga de operadores. Además, muestra un ejemplo de cómo sobrecargar el operador de suma para una estructura llamada Punto que representa coordenadas.
El documento proporciona una historia del lenguaje de programación C++ y describe algunos de los IDE más populares para C++, incluyendo Visual C++ Studio, Dev C++, Borland C++ Builder y Eclipse. Explica que C++ fue diseñado en los años 80 como una extensión de C para permitir la programación orientada a objetos y ahora es un lenguaje multiparadigma. Luego compara las ventajas y desventajas de cada IDE.
El documento presenta la planificación por bloques curriculares para la materia Fundamentos de Programación en primer año de bachillerato. Incluye los objetivos educativos del año y del módulo, un bloque curricular sobre algoritmos y programas con destrezas, criterios de desempeño, estrategias metodológicas y recursos. También incluye una evaluación con preguntas de opción múltiple sobre lenguaje C++ y programación.
Este documento describe los decompiladores, que son programas que realizan la operación inversa de un compilador para obtener el código fuente de un programa compilado. Explica que la decompilación puede ser útil para arreglar errores, encontrar vulnerabilidades, aprender o mejorar un programa. Sin embargo, la mayoría de las licencias de software propietario prohíben la decompilación. Aun así, en algunos casos es legal y posible decompilar programas escritos en lenguajes como Java, .NET y Flash. Es más difícil decompilar C/C++ debido a
Los documentos presentan programas en C++ para llenar y manipular vectores. Se incluyen 20 codificaciones con diferentes programas como llenar vectores con números pares e impares, encontrar el número máximo, realizar sumas de elementos, y almacenar y mostrar datos de amigos. Los programas utilizan bucles, condicionales, funciones y estructuras para manipular los vectores.
Este documento resume Jumpshot, una herramienta para visualizar el rendimiento de programas paralelos basada en registros de bitácoras. Explica que Jumpshot permite el análisis post mortem mediante la visualización de líneas de tiempo y histogramas generados a partir de archivos de registro CLOG. También describe los requisitos para sistemas de visualización, la historia de herramientas similares y las ventajas e inconvenientes del uso de Java para implementar Jumpshot.
El documento introduce el lenguaje de programación Go. Go fue creado por Google para aprovechar la capacidad de los procesadores multicore y permitir la programación concurrente y paralela. El documento explica características del lenguaje como goroutines, canales, select y más. También cubre temas como instalación, compilación de programas, mapas, locks y más patrones de concurrencia en Go.
Tema 2 - Programación básica en C
2.1 Aplicar las directivas de preprocesador de C para incluir ficheros de cabecera
2.2 Utilizar los tipos de datos definidos de forma estándar en C para declarar variables
2.3 Declarar, definir y llamar funciones para implementar modularidad en un programa
Este documento habla sobre cómo sobrecargar operadores en C# para tipos personalizados como clases y estructuras. Explica que si queremos usar operadores como suma en nuestros propios tipos, debemos enseñarle al compilador cómo realizar esas operaciones mediante la sobrecarga de operadores. Además, muestra un ejemplo de cómo sobrecargar el operador de suma para una estructura llamada Punto que representa coordenadas.
El documento proporciona una historia del lenguaje de programación C++ y describe algunos de los IDE más populares para C++, incluyendo Visual C++ Studio, Dev C++, Borland C++ Builder y Eclipse. Explica que C++ fue diseñado en los años 80 como una extensión de C para permitir la programación orientada a objetos y ahora es un lenguaje multiparadigma. Luego compara las ventajas y desventajas de cada IDE.
El documento presenta la planificación por bloques curriculares para la materia Fundamentos de Programación en primer año de bachillerato. Incluye los objetivos educativos del año y del módulo, un bloque curricular sobre algoritmos y programas con destrezas, criterios de desempeño, estrategias metodológicas y recursos. También incluye una evaluación con preguntas de opción múltiple sobre lenguaje C++ y programación.
Este documento describe los decompiladores, que son programas que realizan la operación inversa de un compilador para obtener el código fuente de un programa compilado. Explica que la decompilación puede ser útil para arreglar errores, encontrar vulnerabilidades, aprender o mejorar un programa. Sin embargo, la mayoría de las licencias de software propietario prohíben la decompilación. Aun así, en algunos casos es legal y posible decompilar programas escritos en lenguajes como Java, .NET y Flash. Es más difícil decompilar C/C++ debido a
Los documentos presentan programas en C++ para llenar y manipular vectores. Se incluyen 20 codificaciones con diferentes programas como llenar vectores con números pares e impares, encontrar el número máximo, realizar sumas de elementos, y almacenar y mostrar datos de amigos. Los programas utilizan bucles, condicionales, funciones y estructuras para manipular los vectores.
1) El documento explica el concepto de recursividad y cómo se puede implementar en C#. 2) Da como ejemplo el cálculo factorial de un número y el máximo común divisor de dos números usando algoritmos recursivos. 3) Explica el problema de las Torres de Hanoi como un ejemplo clásico de recursividad y cómo implementarlo en C#.
Este documento describe diferentes algoritmos para la multiplicación de una matriz por un vector utilizando procesamiento paralelo. Presenta el algoritmo secuencial y tres algoritmos paralelos basados en la descomposición de filas, bloques y cuadrícula. Analiza la complejidad computacional y de comunicaciones de cada enfoque.
Este documento describe cómo convertir un programa ordenamiento burbuja escrito en C a lenguaje ensamblador. Explica que el código en ensamblador declarará el nombre del archivo .c original y las cadenas de caracteres sin printf. Luego detalla algunas instrucciones comunes usadas como mov, and, sub, call y jmp; y sentencias como jle y jl. Finalmente incluye enlaces a sitios de referencia sobre arquitectura x86 e Intel.
Este documento describe las aplicaciones y el funcionamiento básico del microcontrolador PIC16F84. Explica la organización de la memoria, los registros internos como el contador de programa y la pila, y los puertos de entrada y salida. También resume el conjunto de instrucciones del PIC16F84 incluyendo instrucciones lógicas, aritméticas, de control y especiales.
Este documento presenta un resumen de los ciclos de repetición en C#: ciclo for, ciclo while y ciclo do while. Incluye la sintaxis básica de cada ciclo y ejemplos de su uso para imprimir números, letras y tablas de multiplicar. El objetivo es conocer cómo funcionan estos ciclos de repetición fundamentales en el lenguaje de programación C#.
Este documento presenta 13 prácticas de programación en OpenGL. La primera práctica muestra cómo crear un tablero de ajedrez usando puntos. La segunda práctica dibuja una estrella con líneas. La tercera práctica mejora el uso de líneas para dibujar un cubo. La cuarta práctica enseña a rellenar cuadrados y delinearlos para formar un cubo.
Este documento proporciona instrucciones básicas para C++. Explica que C++ es un lenguaje de programación de propósito general creado por Dennis Ritchie. Describe los componentes clave de un programa en C++, incluidas las directivas de preprocesamiento, declaraciones globales, la función principal main, funciones definidas por el usuario y comentarios. También explica conceptos como tipos de datos, lectura, escritura, declaración de variables y la diferencia entre declaración y definición.
Este documento proporciona una introducción al lenguaje de programación C. Explica que C se originó en los laboratorios Bell y fue creado para recodificar UNIX. Describe los tipos de datos, operadores, variables, funciones y estructuras básicas de un programa en C, incluidas las sentencias de control como if/else y bucles.
El documento presenta una serie de preguntas sobre la traducción de programas de Python a C y sobre conceptos básicos de C como comentarios, tipos de datos, operadores, etc. Se piden detalles como las diferencias entre los bucles for de Python y C, la función de las llaves y puntos y coma en C, y cómo traducir constructos comunes de Python como entrada de datos, condicionales if/else, funciones matemáticas y bucles while al lenguaje C.
Este documento presenta una introducción al lenguaje de programación Python. Explica que Python es un lenguaje interpretado, orientado a objetos y de tipado dinámico que ofrece una sintaxis clara y elegante. También describe algunas de las características principales de Python como su facilidad de uso, tipos de datos incorporados, paradigmas de programación soportados, organización de código y biblioteca estándar amplia.
Python es un lenguaje de programación dinámico e interpretado que ofrece tipado dinámico, fuerte tipado, flexibilidad y portabilidad. Sus principales características incluyen una sintaxis limpia y legible similar al pseudocódigo, una amplia biblioteca estándar y ser multiplataforma. Python se puede utilizar para el desarrollo web, bases de datos, software, juegos, bioinformática, física y educación.
Este documento presenta 10 ejercicios de programación en C# resueltos. Los ejercicios cubren temas como series, números primos, conversión de bases numéricas, arreglos y estructuras. Adicionalmente, explica 2 ejercicios adicionales sobre el uso de arreglos y estructuras para ordenar listas de alumnos.
Este documento presenta una introducción al lenguaje de programación C. Explica conceptos básicos como la estructura de un programa y función en C, el preprocesador de C y sus directivas como #define, #include y #if. También cubre temas como la lectura de datos desde la consola usando argc y argv, el uso de malloc para reservar memoria dinámica, y free para liberarla.
Este documento presenta información sobre sentencias de control y repetición en el lenguaje de programación C. Explica el uso de sentencias condicionales if-else y switch, así como bucles definidos con for y bucles indefinidos con while y do-while. Además, introduce las instrucciones break y continue para controlar la ejecución de bucles. El objetivo es que los estudiantes aprendan a utilizar estas herramientas básicas de programación para la implementación de algoritmos condicionales y repetitivos en C.
Este programa permite resolver sistemas de ecuaciones lineales mediante el método de Gauss-Jordan. El programa guía al usuario a través de un menú con opciones para introducir el número de variables, capturar los coeficientes de la matriz, aplicar el método de Gauss-Jordan para reducir la matriz a escalonada reducida e imprimir los resultados.
Este documento presenta una introducción al lenguaje de programación C. Explica que C es un lenguaje estructurado y de propósito general con sintaxis compacta e independencia del hardware. Describe la estructura básica de un programa en C, incluyendo funciones, tipos de datos, entrada y salida mediante printf y scanf, y presenta cinco ejemplos simples de programas en C.
El documento compara C y C++. C fue creado originalmente para sistemas operativos como UNIX, mientras que C++ fue diseñado para extender C con capacidades de programación orientada a objetos como clases. Algunas diferencias clave son que C++ admite clases y sobrecarga de operadores, mientras que C no, y C++ usa bibliotecas con prefijos como cmath en lugar de encabezados .h. Ambos lenguajes son portables y de bajo nivel, pero C++ proporciona más funcionalidad de alto nivel.
El documento compara C y C++. C fue creado originalmente para sistemas operativos como UNIX, mientras que C++ fue diseñado para extender C con capacidades de programación orientada a objetos como clases. Algunas diferencias clave son que C++ admite clases y sobrecarga de operadores, mientras que C no, y C++ usa bibliotecas con prefijos como cmath en lugar de encabezados .h. Ambos lenguajes son portables y de bajo nivel, pero C++ proporciona más funcionalidad de alto nivel.
Este documento proporciona la dirección de correo electrónico y los roles de las personas involucradas en la edición de la revista Atix. Esteban Saavedra es el director y coordinador general, y también se encarga del diseño y maquetación junto con Jenny Saavedra. Esteban y Jenny revisan las noticias, mientras que Ivonne Menacho y Jenny Saavedra se encargan de las noticias. Esteban, Joseph Sandoval, Mario Carrion y Renzo Martinez son autores frecuentes. La edición se realiza usando software libre.
Este documento presenta la estructura y los miembros de un equipo que edita una revista usando software libre. El director es Esteban Saavedra López y los roles incluyen diseño, maquetación, revisión de noticias y artículos frecuentes. La revista usa herramientas de software libre y tiene como objetivo compartir conocimiento sobre tecnología y software libre.
Bazaar la herramienta para el control de versiones de forma distribuidaEsteban Saavedra
Bazaar es una herramienta de control de versiones distribuida de código abierto. Permite gestionar el historial de cambios de los elementos de un proyecto de software, como archivos y directorios. Ofrece características como ramas múltiples, deshacer cambios, fusionar ramas y etiquetar versiones. El documento explica cómo instalar y configurar Bazaar, y realizar tareas comunes como inicializar el control de versiones, agregar archivos, registrar cambios, publicar ramas y combinar ramas.
1) El documento explica el concepto de recursividad y cómo se puede implementar en C#. 2) Da como ejemplo el cálculo factorial de un número y el máximo común divisor de dos números usando algoritmos recursivos. 3) Explica el problema de las Torres de Hanoi como un ejemplo clásico de recursividad y cómo implementarlo en C#.
Este documento describe diferentes algoritmos para la multiplicación de una matriz por un vector utilizando procesamiento paralelo. Presenta el algoritmo secuencial y tres algoritmos paralelos basados en la descomposición de filas, bloques y cuadrícula. Analiza la complejidad computacional y de comunicaciones de cada enfoque.
Este documento describe cómo convertir un programa ordenamiento burbuja escrito en C a lenguaje ensamblador. Explica que el código en ensamblador declarará el nombre del archivo .c original y las cadenas de caracteres sin printf. Luego detalla algunas instrucciones comunes usadas como mov, and, sub, call y jmp; y sentencias como jle y jl. Finalmente incluye enlaces a sitios de referencia sobre arquitectura x86 e Intel.
Este documento describe las aplicaciones y el funcionamiento básico del microcontrolador PIC16F84. Explica la organización de la memoria, los registros internos como el contador de programa y la pila, y los puertos de entrada y salida. También resume el conjunto de instrucciones del PIC16F84 incluyendo instrucciones lógicas, aritméticas, de control y especiales.
Este documento presenta un resumen de los ciclos de repetición en C#: ciclo for, ciclo while y ciclo do while. Incluye la sintaxis básica de cada ciclo y ejemplos de su uso para imprimir números, letras y tablas de multiplicar. El objetivo es conocer cómo funcionan estos ciclos de repetición fundamentales en el lenguaje de programación C#.
Este documento presenta 13 prácticas de programación en OpenGL. La primera práctica muestra cómo crear un tablero de ajedrez usando puntos. La segunda práctica dibuja una estrella con líneas. La tercera práctica mejora el uso de líneas para dibujar un cubo. La cuarta práctica enseña a rellenar cuadrados y delinearlos para formar un cubo.
Este documento proporciona instrucciones básicas para C++. Explica que C++ es un lenguaje de programación de propósito general creado por Dennis Ritchie. Describe los componentes clave de un programa en C++, incluidas las directivas de preprocesamiento, declaraciones globales, la función principal main, funciones definidas por el usuario y comentarios. También explica conceptos como tipos de datos, lectura, escritura, declaración de variables y la diferencia entre declaración y definición.
Este documento proporciona una introducción al lenguaje de programación C. Explica que C se originó en los laboratorios Bell y fue creado para recodificar UNIX. Describe los tipos de datos, operadores, variables, funciones y estructuras básicas de un programa en C, incluidas las sentencias de control como if/else y bucles.
El documento presenta una serie de preguntas sobre la traducción de programas de Python a C y sobre conceptos básicos de C como comentarios, tipos de datos, operadores, etc. Se piden detalles como las diferencias entre los bucles for de Python y C, la función de las llaves y puntos y coma en C, y cómo traducir constructos comunes de Python como entrada de datos, condicionales if/else, funciones matemáticas y bucles while al lenguaje C.
Este documento presenta una introducción al lenguaje de programación Python. Explica que Python es un lenguaje interpretado, orientado a objetos y de tipado dinámico que ofrece una sintaxis clara y elegante. También describe algunas de las características principales de Python como su facilidad de uso, tipos de datos incorporados, paradigmas de programación soportados, organización de código y biblioteca estándar amplia.
Python es un lenguaje de programación dinámico e interpretado que ofrece tipado dinámico, fuerte tipado, flexibilidad y portabilidad. Sus principales características incluyen una sintaxis limpia y legible similar al pseudocódigo, una amplia biblioteca estándar y ser multiplataforma. Python se puede utilizar para el desarrollo web, bases de datos, software, juegos, bioinformática, física y educación.
Este documento presenta 10 ejercicios de programación en C# resueltos. Los ejercicios cubren temas como series, números primos, conversión de bases numéricas, arreglos y estructuras. Adicionalmente, explica 2 ejercicios adicionales sobre el uso de arreglos y estructuras para ordenar listas de alumnos.
Este documento presenta una introducción al lenguaje de programación C. Explica conceptos básicos como la estructura de un programa y función en C, el preprocesador de C y sus directivas como #define, #include y #if. También cubre temas como la lectura de datos desde la consola usando argc y argv, el uso de malloc para reservar memoria dinámica, y free para liberarla.
Este documento presenta información sobre sentencias de control y repetición en el lenguaje de programación C. Explica el uso de sentencias condicionales if-else y switch, así como bucles definidos con for y bucles indefinidos con while y do-while. Además, introduce las instrucciones break y continue para controlar la ejecución de bucles. El objetivo es que los estudiantes aprendan a utilizar estas herramientas básicas de programación para la implementación de algoritmos condicionales y repetitivos en C.
Este programa permite resolver sistemas de ecuaciones lineales mediante el método de Gauss-Jordan. El programa guía al usuario a través de un menú con opciones para introducir el número de variables, capturar los coeficientes de la matriz, aplicar el método de Gauss-Jordan para reducir la matriz a escalonada reducida e imprimir los resultados.
Este documento presenta una introducción al lenguaje de programación C. Explica que C es un lenguaje estructurado y de propósito general con sintaxis compacta e independencia del hardware. Describe la estructura básica de un programa en C, incluyendo funciones, tipos de datos, entrada y salida mediante printf y scanf, y presenta cinco ejemplos simples de programas en C.
El documento compara C y C++. C fue creado originalmente para sistemas operativos como UNIX, mientras que C++ fue diseñado para extender C con capacidades de programación orientada a objetos como clases. Algunas diferencias clave son que C++ admite clases y sobrecarga de operadores, mientras que C no, y C++ usa bibliotecas con prefijos como cmath en lugar de encabezados .h. Ambos lenguajes son portables y de bajo nivel, pero C++ proporciona más funcionalidad de alto nivel.
El documento compara C y C++. C fue creado originalmente para sistemas operativos como UNIX, mientras que C++ fue diseñado para extender C con capacidades de programación orientada a objetos como clases. Algunas diferencias clave son que C++ admite clases y sobrecarga de operadores, mientras que C no, y C++ usa bibliotecas con prefijos como cmath en lugar de encabezados .h. Ambos lenguajes son portables y de bajo nivel, pero C++ proporciona más funcionalidad de alto nivel.
Este documento proporciona la dirección de correo electrónico y los roles de las personas involucradas en la edición de la revista Atix. Esteban Saavedra es el director y coordinador general, y también se encarga del diseño y maquetación junto con Jenny Saavedra. Esteban y Jenny revisan las noticias, mientras que Ivonne Menacho y Jenny Saavedra se encargan de las noticias. Esteban, Joseph Sandoval, Mario Carrion y Renzo Martinez son autores frecuentes. La edición se realiza usando software libre.
Este documento presenta la estructura y los miembros de un equipo que edita una revista usando software libre. El director es Esteban Saavedra López y los roles incluyen diseño, maquetación, revisión de noticias y artículos frecuentes. La revista usa herramientas de software libre y tiene como objetivo compartir conocimiento sobre tecnología y software libre.
Bazaar la herramienta para el control de versiones de forma distribuidaEsteban Saavedra
Bazaar es una herramienta de control de versiones distribuida de código abierto. Permite gestionar el historial de cambios de los elementos de un proyecto de software, como archivos y directorios. Ofrece características como ramas múltiples, deshacer cambios, fusionar ramas y etiquetar versiones. El documento explica cómo instalar y configurar Bazaar, y realizar tareas comunes como inicializar el control de versiones, agregar archivos, registrar cambios, publicar ramas y combinar ramas.
Este documento describe la instalación y configuración del SDK de Android en Linux, así como la creación de un proyecto simple "Hola Mundo" en Eclipse usando dicho SDK. Explica los requisitos de sistema, cómo descargar e instalar el SDK, agregar la ruta del SDK a Eclipse, y crear un dispositivo virtual Android. Luego, crea un nuevo proyecto en Eclipse llamado "Hola Mundo", modifica el código generado para mostrar un texto, y explica brevemente el código resultante.
Tunneling: Esquivando Restricciones de Proxies y FirewallsEsteban Saavedra
Las tres oraciones son:
1) El documento describe varios métodos para esquivar restricciones de proxies y firewalls como anonimizadores, proxies, y tunneling sobre protocolos como SSH, HTTP, DNS e ICMP. 2) Los túneles permiten enviar datos a través de otras conexiones de red para encapsular un protocolo sobre otro y crear un túnel. 3) Mientras que las conexiones anónimas son útiles para los usuarios, también plantean desafíos de seguridad para las empresas.
Proyecto colaborativo entre escuela de Argentina y Universidad de Puebla mediante profesor Homero Eliosa lara, Lic Farmacobiológico.y alumnos y docentes de 7mo año de la escuela Sarmiento de Villa Constitución-
Este documento proporciona información sobre herramientas de desarrollo en C++ para Linux, incluyendo el depurador GNU Debugger (gdb) y la herramienta de automatización GNU Make. Explica cómo usar gdb para depurar programas C/C++, inspeccionar variables, establecer breakpoints y navegar entre marcos de pila. También brinda una introducción sobre cómo GNU Make automatiza la compilación y reconstrucción de programas basados en sus dependencias.
Este documento presenta dos herramientas de desarrollo para C++ en Linux: el depurador gdb y la herramienta make. Gdb permite depurar programas al cargarlos en memoria, establecer breakpoints y examinar variables. Make automatiza la compilación al verificar dependencias. El documento demuestra el uso de gdb al depurar un programa de muestra, inspeccionando variables y cambiando de contexto entre funciones a través de la pila de llamadas.
Ejercicios introduccion a la programación en Chack3 Org
El documento contiene una serie de preguntas sobre programación en C y Python. Se piden comparaciones entre los lenguajes, traducciones de código Python a C, y explicaciones sobre código C. También incluye ejercicios para que el lector diseñe programas C sencillos.
Este documento contiene 15 reportes de prácticas de programación de una estudiante. Cada reporte describe brevemente un problema de programación, presenta el pseudocódigo y diagrama de flujo de un algoritmo para resolverlo, y contiene una reflexión personal sobre lo aprendido.
Este documento contiene una prueba de programación con 10 preguntas sobre conceptos básicos de programación como comandos while, variables, algoritmos y flujos de programación. También incluye 3 ejercicios prácticos de programación en C++ para sumar variables y realizar operaciones matemáticas con ellas.
Este documento contiene información sobre funciones, estructuras de datos y arreglos unidimensionales en el lenguaje de programación C. Explica conceptos como declaración de funciones, llamadas a funciones, declaración y acceso a elementos de arreglos. También presenta ejemplos de código para ilustrar el uso de funciones, arreglos y el producto algebraico de matrices.
Este documento contiene información sobre funciones, estructuras de datos y arreglos unidimensionales en el lenguaje de programación C. Explica que un programa está formado por la estructura de datos y el algoritmo, y define conceptos como funciones, declaración de arreglos, arreglos unidimensionales y su indexación. También incluye ejemplos de código C para ilustrar estos conceptos.
Este documento introduce los conceptos básicos de tipos de datos y variables en Java. Explica los tipos primitivos como enteros, flotantes y caracteres, así como la clase String. Describe cómo declarar y asignar valores a variables, incluyendo las reglas básicas y el ámbito de vida. También cubre la conversión de tipos, operadores aritméticos y relacionales, y cómo comparar cadenas String.
El documento describe los pasos para crear un programa en C o C++, incluyendo análisis del problema, desarrollo del código fuente, compilación, estructuras secuenciales, librerías, y varios ejemplos de algoritmos y sus correspondientes programas en C++ para calcular sumas, áreas y porcentajes. Explica conceptos como variables, funciones, tipos de datos, entrada y salida, y estructuras de control como condicionales y ciclos.
El documento resume conceptos básicos de programación en C como las funciones de los comentarios, la función main, el uso de include y tipos de datos. También presenta ejemplos de código C para solicitar datos de usuario, realizar operaciones matemáticas y mostrar resultados con diferentes formatos de salida.
Este documento presenta el portafolio de José Ismael Villalobos Regino de 3°G de Programación. Incluye 25 programas de diferentes temas como imprimir números, promedios de calificaciones, suma de matrices, uso de constructores, excepciones y juegos de laberinto. También incluye actividades sobre editores de Java, palabras reservadas e infografías sobre ciclos e identificadores.
El documento proporciona una introducción al lenguaje de programación C y al entorno de desarrollo Turbo C. Explica los tipos de datos básicos en C, operadores, estructuras de control de flujo como if/else y ciclos for y while. También cubre temas como funciones, arreglos, estructuras, manejo de cadenas y E/S. El objetivo es servir como guía para aprender los conceptos fundamentales de C usando el entorno Turbo C.
Este examen contiene 26 preguntas de opción múltiple sobre temas de informática como conversión de números binarios a hexadecimales, programación en pseudocódigo y conceptos relacionados con seguridad informática. Se instruye a los estudiantes a leer cuidadosamente las preguntas y no se permite el préstamo de materiales durante la prueba.
Este documento describe las funciones en el lenguaje de programación C. Explica que una función es una porción de código que realiza una tarea específica y puede ser llamada desde otras partes del programa. Detalla la sintaxis básica de una función en C, incluyendo el tipo de datos, nombre, parámetros y cuerpo. Además, distingue entre variables globales y locales y los diferentes tipos de paso de parámetros.
Tutorial acerca del uso del sistema de calificacionacmchaptercusco
El documento explica el uso del sistema de calificación PC2 para concursos de programación. Describe cómo configurar la conexión al servidor, revisar el scoreboard, y enviar soluciones desde la ventana del equipo usando diferentes lenguajes como C++, C#, Java y Pascal. Explica el proceso de compilar y probar código localmente antes de enviarlo para su evaluación.
El documento describe las funciones en C++. Las funciones permiten dividir un programa en partes más pequeñas y reutilizables. Pueden aceptar datos como entrada, realizar cálculos y devolver resultados. Existen tres características principales de las funciones: la definición, declaración y llamada. La definición especifica el código de la función, la declaración informa al compilador sobre la función, y la llamada invoca la función.
El resumen describe las instrucciones para realizar una prueba de manera individual. No se permite el préstamo de materiales ni el uso de lápiz. Solo se permite calculadora estándar. La prueba contiene preguntas sobre conversión de números binarios a hexadecimales, análisis de código, generaciones de computadoras, y tipos de virus.
Este documento describe un programa para calcular la fecha de Pascua para un año dado. Primero se analizan los datos de entrada y salida necesarios, luego se presenta un diagrama de flujo del algoritmo. Finalmente, se muestra el código Java implementando la lógica para calcular la fecha de Pascua según las fórmulas dadas y mostrar el resultado.
Este documento presenta 30 preguntas sobre conceptos básicos de C++ como instrucciones, tipos de datos, bibliotecas, operadores, tablas de verdad y jerarquía de operaciones. Las preguntas cubren temas como las funciones de las instrucciones declarativas, selectivas y de salto, los tipos de datos básicos como enteros y caracteres, el uso de bibliotecas como la Standard Template Library, los operadores aritméticos, relacionales y lógicos, los valores de verdad y la negación, y el orden de ejecución de
Este documento presenta 30 preguntas sobre conceptos básicos de C++ como instrucciones, tipos de datos, bibliotecas, operadores, tablas de verdad y jerarquía de operaciones. Las preguntas cubren temas como las funciones de las instrucciones declarativas, selectivas y de salto, los tipos de datos básicos en C++, el uso de bibliotecas como la Standard Template Library, los diferentes tipos de operadores aritméticos, relacionales y lógicos, y el orden en que se ejecutan las operaciones matemáticas
Este documento presenta una introducción a ZK, un framework de aplicaciones web AJAX de código abierto. Explica cómo declarar una clase de dominio para representar un coche, crear una interfaz de usuario con componentes de ZK como ventanas, cajas de texto y botones, y mostrar una lista dinámica de coches. También incluye referencias al código fuente de ejemplo.
Este documento presenta la introducción al framework ZK y su relación con las aplicaciones web ricas de interfaz (RIA). ZK es un framework de código abierto que permite el desarrollo de interfaces de usuario completas para aplicaciones web a través de componentes dirigidos por eventos sin necesidad de escribir JavaScript. El documento describe las características clave de ZK como su ligereza, compatibilidad con navegadores, diseño responsivo, seguridad y documentación.
Este documento presenta el framework web Play para Java. Play usa las fortalezas de Java y sus librerías, aplicando principios como Convención sobre Configuración y DRY. Play permite construir aplicaciones web ligeras de forma diferente a JEE. Play es compatible con REST y SOA, y provee un sistema JITC para desarrollo rápido en Java. El documento muestra un ejemplo simple de uso de Play para crear una aplicación de tareas.
Este documento describe cómo implementar un servidor DHCP para asignar direcciones IP de forma automática a dispositivos en una red. Explica que DHCP permite asignar parámetros de configuración de red como la puerta de enlace, máscara de subred y servidores DNS de forma dinámica. Detalla los tres tipos de asignación de direcciones IP que admite DHCP y los pasos para configurar el demonio dhcpd, incluyendo editar el archivo de configuración /etc/dhcpd.conf.
El documento presenta las ontologías como una alternativa libre para representar información en la Web. Detalla que las ontologías ofrecen una estructura sencilla para representar conocimiento a través de taxonomías de clases, atributos, relaciones y reglas. Explica que RDF y OWL son lenguajes estandar utilizados para representar ontologías y que herramientas como Protégé permiten el desarrollo de ontologías de forma gratuita y de código abierto. Concluye resaltando las ventajas de las ontologías para compartir
Este documento presenta un resumen de las secciones y elementos clave de un perfil UML propuesto para la representación de sistemas de información geográfica. Incluye una descripción de los estereotipos propuestos como capa, objeto geográfico y otros, así como las clases de UML a las que se aplican. También habla sobre la definición de restricciones y valores etiquetados para adaptar mejor UML a este dominio específico.
Este documento proporciona información sobre la dirección y coordinación general, diseño y maquetación, revisiones, autores frecuentes y herramientas utilizadas para una revista. Detalla los nombres y correos electrónicos de las personas a cargo de la dirección, diseño, revisiones y noticias. También enumera los autores más frecuentes y menciona que la edición de la revista se realiza utilizando software libre.
Este documento presenta la información de contacto de los responsables de la dirección, diseño, revisiones y noticias de una revista, así como de los autores frecuentes. Además, indica que la edición de la revista se realizó de forma integral usando software libre.
Este documento proporciona información sobre la dirección y coordinación general de una publicación, así como detalles sobre el diseño, maquetación, revisiones, noticias, autores frecuentes y herramientas utilizadas. Esteban Saavedra López se encarga de la dirección y coordinación general, mientras que Jenny Saavedra López y Esteban Saavedra López se encargan del diseño y maquetación. La edición de la revista se realizó de forma integrada utilizando software libre.
Este documento presenta una introducción al proyecto Mono. Mono es un proyecto de código abierto que crea herramientas compatibles con .NET para sistemas UNIX. Incluye un compilador C# y un lenguaje común de tiempo de ejecución. El proyecto provee una implementación de código abierto de la plataforma .NET de Microsoft para sistemas distintos a Windows.
Este documento proporciona información sobre la herramienta groff y cómo crear páginas de manual en Linux. Explica que groff se usa comúnmente para documentación en sistemas Unix y puede producir documentos, artículos y libros. También detalla las secciones comunes en páginas de manual como Nombre, Sinopsis, Descripción, Ejemplos y cómo escribirlas usando groff.
Este documento presenta la información de contacto de varias personas involucradas en la dirección y coordinación, diseño, maquetación, revisiones y noticias de una publicación. También incluye una lista de autores frecuentes y describe las herramientas de software libre utilizadas para editar la revista.
Este documento presenta la dirección y coordinación general de la revista a cargo de Esteban Saavedra López. Detalla las secciones de diseño, maquetación, revisiones y noticias a cargo de distintos colaboradores. También menciona algunos autores frecuentes y que la edición se realizó de forma integral usando software libre.
Este documento presenta información sobre la dirección y coordinación general de la revista, así como sobre el diseño y maquetación. Explica que la edición se realizó de forma integral usando software libre. También incluye artículos sobre la importancia de la disciplina y sobre el uso de herramientas C++ en Linux para el desarrollo de software.
Este documento presenta una introducción a las herramientas de diálogo que permiten crear interfaces gráficas y de texto para shell scripts. Explica que estas herramientas como Dialog, Xdialog y Zenity facilitan la creación de cajas de diálogo, menús, entradas de texto y otros elementos interactivos sin necesidad de programar interfaces gráficas. Además, muestra ejemplos del uso de estas herramientas para crear diferentes tipos de diálogos.
Este documento presenta la dirección y coordinación general a cargo de Esteban Saavedra López y Jenny Saavedra López. El diseño y maquetación estuvo a cargo de Jenny Saavedra López y Esteban Saavedra López, con la colaboración de Williams Chorolque Choque. La edición de la revista se realizó de forma integral usando software libre.
Este documento presenta la dirección y coordinación general de la revista a cargo de Esteban Saavedra López. Jenny Saavedra López y Esteban Saavedra López se encargan del diseño y maquetación, mientras que Williams Chorolque Choque colabora. La revista fue realizada usando software libre.
Este documento presenta la dirección y coordinación general de la revista ATIX a cargo de Esteban Saavedra López y Jenny Saavedra López. También menciona la colaboración de Williams Chorolque Choque y que la edición de la revista se realizó usando software libre. Luego comienza la historia de la revista ATIX comparándola con un hombre que tiene hijos, planta árboles y escribe libros, indicando que la comunidad ATIX comenzó teniendo varios "hijos" o colaboradores que a
Catalogo general Ariston Amado Salvador distribuidor oficial ValenciaAMADO SALVADOR
Distribuidor Oficial Ariston en Valencia: Amado Salvador distribuidor autorizado de Ariston, una marca líder en soluciones de calefacción y agua caliente sanitaria. Amado Salvador pone a tu disposición el catálogo completo de Ariston, encontrarás una amplia gama de productos diseñados para satisfacer las necesidades de hogares y empresas.
Calderas de condensación: Ofrecemos calderas de alta eficiencia energética que aprovechan al máximo el calor residual. Estas calderas Ariston son ideales para reducir el consumo de gas y minimizar las emisiones de CO2.
Bombas de calor: Las bombas de calor Ariston son una opción sostenible para la producción de agua caliente. Utilizan energía renovable del aire o el suelo para calentar el agua, lo que las convierte en una alternativa ecológica.
Termos eléctricos: Los termos eléctricos, como el modelo VELIS TECH DRY (sustito de los modelos Duo de Fleck), ofrecen diseño moderno y conectividad WIFI. Son ideales para hogares donde se necesita agua caliente de forma rápida y eficiente.
Aerotermia: Si buscas una solución aún más sostenible, considera la aerotermia. Esta tecnología extrae energía del aire exterior para calentar tu hogar y agua. Además, puede ser elegible para subvenciones locales.
Amado Salvador es el distribuidor oficial de Ariston en Valencia. Explora el catálogo y descubre cómo mejorar la comodidad y la eficiencia en tu hogar o negocio.
KAWARU CONSULTING presenta el projecte amb l'objectiu de permetre als ciutadans realitzar tràmits administratius de manera telemàtica, des de qualsevol lloc i dispositiu, amb seguretat jurídica. Aquesta plataforma redueix els desplaçaments físics i el temps invertit en tràmits, ja que es pot fer tot en línia. A més, proporciona evidències de la correcta realització dels tràmits, garantint-ne la validesa davant d'un jutge si cal. Inicialment concebuda per al Ministeri de Justícia, la plataforma s'ha expandit per adaptar-se a diverses organitzacions i països, oferint una solució flexible i fàcil de desplegar.
Catalogo Buzones BTV Amado Salvador Distribuidor Oficial ValenciaAMADO SALVADOR
Descubra el catálogo completo de buzones BTV, una marca líder en la fabricación de buzones y cajas fuertes para los sectores de ferretería, bricolaje y seguridad. Como distribuidor oficial de BTV, Amado Salvador se enorgullece de presentar esta amplia selección de productos diseñados para satisfacer las necesidades de seguridad y funcionalidad en cualquier entorno.
Descubra una variedad de buzones residenciales, comerciales y corporativos, cada uno construido con los más altos estándares de calidad y durabilidad. Desde modelos clásicos hasta diseños modernos, los buzones BTV ofrecen una combinación perfecta de estilo y resistencia, garantizando la protección de su correspondencia en todo momento.
Amado Salvador, se compromete a ofrecer productos de primera clase respaldados por un servicio excepcional al cliente. Como distribuidor oficial de BTV, entendemos la importancia de la seguridad y la tranquilidad para nuestros clientes. Por eso, trabajamos en colaboración con BTV para brindarle acceso a los mejores productos del mercado.
Explore el catálogo de buzones ahora y encuentre la solución perfecta para sus necesidades de correo y seguridad. Confíe en Amado Salvador y BTV para proporcionarle buzones de calidad excepcional que cumplan y superen sus expectativas.
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor OficialAMADO SALVADOR
Explora el catálogo completo de cajas fuertes BTV, disponible a través de Amado Salvador, distribuidor oficial de BTV. Este catálogo presenta una amplia variedad de cajas fuertes, cada una diseñada con la más alta calidad para ofrecer la máxima seguridad y satisfacer las diversas necesidades de protección de nuestros clientes.
En Amado Salvador, como distribuidor oficial de BTV, ofrecemos productos que destacan por su innovación, durabilidad y robustez. Las cajas fuertes BTV son reconocidas por su eficiencia en la protección contra robos, incendios y otros riesgos, lo que las convierte en una opción ideal tanto para uso doméstico como comercial.
Amado Salvador, distribuidor oficial BTV, asegura que cada producto cumpla con los más estrictos estándares de calidad y seguridad. Al adquirir una caja fuerte a través de Amado Salvador, distribuidor oficial BTV, los clientes pueden tener la tranquilidad de que están obteniendo una solución confiable y duradera para la protección de sus pertenencias.
Este catálogo incluye detalles técnicos, características y opciones de personalización de cada modelo de caja fuerte BTV. Desde cajas fuertes empotrables hasta modelos de alta seguridad, Amado Salvador, como distribuidor oficial de BTV, tiene la solución perfecta para cualquier necesidad de seguridad. No pierdas la oportunidad de conocer todos los beneficios y características de las cajas fuertes BTV y protege lo que más valoras con la calidad y seguridad que solo BTV y Amado Salvador, distribuidor oficial BTV, pueden ofrecerte.
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador ValenciaAMADO SALVADOR
Descubre el catálogo general de la gama de productos de refrigeración del fabricante de electrodomésticos Miele, presentado por Amado Salvador distribuidor oficial Miele en Valencia. Como distribuidor oficial de electrodomésticos Miele, Amado Salvador ofrece una amplia selección de refrigeradores, congeladores y soluciones de refrigeración de alta calidad, resistencia y diseño superior de esta marca.
La gama de productos de Miele se caracteriza por su innovación tecnológica y eficiencia energética, garantizando que cada electrodoméstico no solo cumpla con las expectativas, sino que las supere. Los refrigeradores Miele están diseñados para ofrecer un rendimiento óptimo y una conservación perfecta de los alimentos, con características avanzadas como la tecnología de enfriamiento Dynamic Cooling, sistemas de almacenamiento flexible y acabados premium.
En este catálogo, encontrarás detalles sobre los distintos modelos de refrigeradores y congeladores Miele, incluyendo sus especificaciones técnicas, características destacadas y beneficios para el usuario. Amado Salvador, como distribuidor oficial de electrodomésticos Miele, garantiza que todos los productos cumplen con los más altos estándares de calidad y durabilidad.
Explora el catálogo completo y encuentra el refrigerador Miele perfecto para tu hogar con Amado Salvador, el distribuidor oficial de electrodomésticos Miele.
HPE presenta una competició destinada a estudiants, que busca fomentar habilitats tecnològiques i promoure la innovació en un entorn STEAM (Ciència, Tecnologia, Enginyeria, Arts i Matemàtiques). A través de diverses fases, els equips han de resoldre reptes mensuals basats en àrees com algorísmica, desenvolupament de programari, infraestructures tecnològiques, intel·ligència artificial i altres tecnologies. Els millors equips tenen l'oportunitat de desenvolupar un projecte més gran en una fase presencial final, on han de crear una solució concreta per a un conflicte real relacionat amb la sostenibilitat. Aquesta competició promou la inclusió, la sostenibilitat i l'accessibilitat tecnològica, alineant-se amb els Objectius de Desenvolupament Sostenible de l'ONU.
3. Dirección y Coordinación General
Esteban Saavedra López (jesaavedra@opentelematics.org)
Diseño y Maquetación
Jenny Saavedra López (jennysaavedra@hotmail.com)
Esteban Saavedra López (jesaavedra@opentelematics.org)
Herramientas
La edición de esta revista fue realizada de forma integra haciendo uso de Software
Libre
4.
5. Desde el principio de los tiempos el hombre siempre buscó la igualdad en todo, en
derechos y en obligaciones; lastimosamente en muchos lugares y en varios
aspectos después de tantos años, aún no se han podido sopesar problemas de
desigualdad, pero estamos seguros que más temprano que tarde éstos tendrán un
final feliz.
Hoy en día dentro de una vida llena de actividades sociales, económicas y
académicas, todos luchan por conseguir esa preciada igualdad; muchos estamos
convencidos que una forma de establecer la misma, es la de compartir
conocimiento, ya que el compartir representa articular la enseñanza y el aprendizaje
con un objetivo en particular “El bienestar común”, conocedores que el
conocimiento ha llevado, lleva y llevará a construir un futuro mejor para todos.
Todos somos iguales, un título que refleja de forma clara y concisa lo que todo
hombre , mujer, niño o anciano desea, saber que todos somos iguales; a lo largo de
este tiempo dentro de la Revista Atix, nos hemos dado cuenta que el dar
oportunidad a todos (experimentados y novatos) nos ha permitido contribuir a
fortalecer ese espíritu de igualdad, que tanta falta nos hace a todos los seres en
este mundo. Por todo ésto y por mucho más, instamos a todos a construir entornos
de igualdad , sin discriminar ningún criterio en particular.
En éste quinto número ponderamos la continuidad de varios de nuestros artículos
por parte de sus respectivos autores, por el interés que han cobrado estos en
nuestros lectores quienes fielmente continúan número a número todos nuestros
artículos.
El ser todos iguales, nos llevará a tener y vivir un
futuro mejor.
Bienvenidos a nuestro sexto número
Esteban Saavedra López
Director y Coordinador General
6.
7. Utilizando herramientas
de desarrollo C++
en Linux (2da parte)
Desarrollar y construir sistemas en entornos *NIX puede llegar a parecer algo dificultoso
al inicio, sin embargo, con el uso adecuado de las herramientas que proveen los
entornos GNU, ésta se vuelve una tarea sencilla.
embargo, existen aplicaciones como DDD
(Data Display Debugger), que permite hacer
una depuración gráfica, aprovechando todos
los comandos de gdb.
Introducción
En el anterior número vimos la forma de
compilar manualmente un pequeño
ejecutable de distintas maneras, además de
Archer, la mascota del proyecto gdb
observar algunos estándares de codificación
utilizados en la mayoría de proyectos escritos Este tipo de pez es famoso por cazar
en C/C++, tal como la separación entre insectos (bugs) desde el agua.
declaración y definición.
En esta ocasión estudiaremos algunas
herramientas de apoyo a la codificación:
El depurador estándar de GNU: GNU
Debugger y la herramienta de automatización
orientada a verificar dependencias: Make
Logo del proyecto DDD(Data Display
Depuración de programas: Debugger)
gdb
El depurador de GNU (GNU Debugger : gdb)
Cargar programa en
es una herramienta estándar de alta memoria
versatilidad escrita por el mismísimo Richard Para probar este depurador vamos a utilizar
Stallman para el sistema GNU/Linux. gdb es el siguiente programa:
una herramienta para línea de comandos, por
tanto no posee un front-end gráfico, sin
8. programa.cpp debemos primero establecer breakpoints o
1 int otra_funcion(int w, int u){ lugares donde el programa se detendrá para
2 int ret = w; inspeccionarlo.
3 ret = ret * u;
4 return ret; Un buen punto para poner un breakpoint es
5 } en el inicio mismo del programa, de esta
6 forma:
7 int funcion(int x){
8 int suma=3; (gdb) break main
9 for(int j=0;j<3;j++) Breakpoint 1 at 0x804844b: file
10 suma += programa.cpp, line 17.
otra_funcion(suma,x);
11
12 return suma; La primera línea de código en ejecutarse
13 } será la número 17, aunque en la línea 16
14 exista código, ésta únicamente declara
15 int main(void){
16 int a,b,c;
variables, no realiza una acción como tal.
17 for(int i=0;i<10;i++){ Después de establecer el breakpoint, se
18 a = i+1; ejecuta el programa con la orden run:
19 b = a+i;
20 c = funcion(a*b);
21 } (gdb) run
22 Starting program: /home/arn/programa
23 return 0; Breakpoint 1, main () at programa.cpp:17
24 } 17 for(int i=0;i<10;i++){
Por si solo, este programa no muestra gdb muestra el contenido de la línea de
absolutamente nada, sin embargo, los código que está a punto de ejecutarse.
cambios de variables, los ciclos y las
llamadas a funciones es lo que nos interesa. Para hacerlo y saltar a la siguiente utilizamos
Primero debemos crear el ejecutable, la orden next:
además debemos especificar al compilador
que este debe ser “depurable”. Esto se
(gdb) next
consigue añadiendo la opción -g , que 18 a = i+1;
incorpora información extra a los archivos
generados, la cual establece un vínculo entre
el archivo binario producido, los archivos Inspección de variables
fuente y sus respectivas líneas de código. En este punto vamos a inspeccionar la
variable que controla el ciclo:
arn@localhost:~$ g++ programa.cpp -o utilizando la orden print
programa -g
(gdb) (gdb)
Es el momento de preparar y cargar el $1 = 0
ejecutable en memoria del depurador de la
siguiente manera:
El valor de i en estos momentos es cero.
arn@localhost:~$ gdb ./programa
GNU gdb 6.8-debian... Ejecutemos las siguientes tres líneas de
.... código. En vez de next, pulsaremos
(gdb) simplemente la letra n, una comodidad que
nos proporciona gdb para los comandos en
su forma simplificada:
La nueva línea de comandos se cambiará a
(gdb) que es donde se escriben las órdenes
de depuración. Si ejecutamos el programa en
este punto, la ejecución llegará al final sin
que saquemos beneficio del depurador,
9. (gdb) n
19 b = a+i; Uso de frames
(gdb) n
20 c = funcion(a*b); Hasta este momento, hemos inspeccionado
(gdb) n las variables en un solo contexto (main). Las
17 for(int i=0;i<10;i++){ variables de este contexto son i , a, b y c, en
la línea 20 se utiliza una llamada a una
En este punto las variables a, b y c ya función, sin embargo, utilizando la orden
cambiaron, así que podemos next, simplemente ejecutamos dicha línea de
inspeccionarlas, en vez de print, usaremos su código y saltamos hacia la siguiente sin
equivalente corto p: entrar en detalles de lo que contiene la
función, tampoco podemos depurar lo que
hace.
(gdb) p a
$2 = 1
Para hacerlo vamos a utilizar la orden next
(gdb) p b hasta llegar a dicha línea 20
$3 = 1
(gdb) p c
$4 = 24 (gdb) n
18 a = i+1;
(gdb) n
Lo anterior nos indica que la variable a tiene 19 b = a+i;
el valor de 1, b vale 1 y c vale 24. (gdb) n
20 c = funcion(a*b);
Una característica poderosa de gdb es la
capacidad de evaluar expresiones arbitrarias.
Antes de ingresar a depurar la función,
comprobemos el valor del parámetro a*b que
(gdb) p a * 2 + 4 - b se le está pasando:
$5 = 5
(gdb) p a*b
La evaluación de la anterior expresión da $8 = 120
como resultado 5.
También podemos cambiar los valores según También comprobaremos el contexto donde
nuestras necesidades, alterando el flujo nos encontramos actualmente (main),
normal de la ejecución del programa para utilizando la orden frame, el cual nos da la
realizar pruebas. Por ejemplo, cambiemos el información de la línea de código que está a
valor de i con el comando set variable: punto de ejecutarse, y el contexto :
(gdb) p i (gdb) frame
$6 = 0 #0 main () at programa.cpp:20
(gdb) set variable i = 6 20 c = funcion(a*b);
(gdb) p i
$7 = 6
También podemos ver todas las variables
locales del contexto main utilizando la orden
Antes de cambiar el valor de la variable i , su
info locals:
valor era cero. Después de hacerlo
comprobamos que ahora vale 6.
La inspección y manipulación de variables (gdb) info locals
i = 7
puede ser realizada en cualquier punto de la a = 8
depuración con las mismas órdenes ya b = 15
mencionadas. c = 24
Es el momento de utilizar la orden step para
10. hacer un salto hacia dentro de función: vez que llamamos a una función, el estado
del depurador cambia de contexto. Por
ejemplo, en el contexto de main existen las
(gdb) step variables a, b y c, pero dentro de funcion
funcion (x=120) at programa.cpp:8
8 int suma=3; dichas variables no existen, pero sí la
variable suma, y a su vez, dentro del contexto
de otra función, existen las variables u y w, y
Adelantemos unas cuantas líneas de código las demás son invisibles para este nuevo
(4) con la orden next, y noten que esta vez la contexto.
depuración es dentro de la función.
Cada uno de estos contextos son el realidad
lo que se denomina stack frames, o
(gdb) n contextos de pila, cada uno con su propia
9 for(int j=0;j<3;j++) información. La pila de llamadas a funciones
(gdb) n
10 suma += otra_funcion(suma,x);
es el stack, que guarda el orden de
(gdb) n invocaciones. Muchas veces es útil investigar
9 for(int j=0;j<3;j++) dicha pila para saber todos los contextos ,
(gdb) n puesto que en un programa de mayores
10 suma += otra_funcion(suma,x);
dimensiones, la pila de llamadas puede ser
bastante grande, y es importante saber la
Es un buen momento para inspeccionar las información que guarda.
variables locales utilizando info locals: Volviendo a la parte práctica, obtendremos la
información de la pila y de todos los stack
(gdb) info locals
frames con la orden backtrace:
j = 1
suma = 363
(gdb) backtrace
#0 otra_funcion (w=363, u=120) at
y también para verificar el contexto actual con programa.cpp:2
frame: #1 0x08048428 in funcion (x=120) at
programa.cpp:10
#2 0x08048475 in main () at
programa.cpp:20
(gdb) frame
#0 funcion (x=120) at programa.cpp:10
10 suma += otra_funcion(suma,x); Es posible cambiar el frame actual para
inspeccionar valores de otro frame, por
Entremos un nivel más adentro en las ejemplo, inspeccionar el valor de la variable a
llamadas a funciones, esta vez dentro de otra al momento de la última llamada de funcion
función, con la orden step en main. Si intentamos acceder
directamente, pasar lo siguiente:
(gdb) step
otra_funcion (w=363, u=120) at (gdb) p a
programa.cpp:2 No symbol quot;aquot; in current context.
2 int ret = w;
La variable a no existe en el contexto actual,
Hagamos una pequeña pausa aquí para así que debemos saltar al contexto de main
explicar algunos conceptos importantes: (que está numerado como #2). Usaremos la
En este instante, estamos en el tercer nivel orden frame para cambiar de contexto:
de llamadas a funciones, es decir, la función
principal main hizo la llamada a la función
denominada funcion, y a su vez, esta hizo la
llamada a la función otra_funcion. Cada
11. (gdb) frame 2 (gdb) continue
#2 0x08048475 in main () at Continuing.
programa.cpp:20 Breakpoint 3, otra_funcion (w=3, u=153)
20 c = funcion(a*b); at programa.cpp:2
2 int ret = w;
Aquí podemos inspeccionar la variable:
Para obtener una lista de todos los
breakpoints activos, usemos la orden info
(gdb) p a breakpoints
$9 = 8
(gdb) info breakpoints
De este modo podemos movernos por todos Num Type Disp Enb
los stack frames para averiguar su Address What
información en cualquier instante. 1 breakpoint keep y
0x0804844b in main at programa.cpp:17
breakpoint already hit 1 time
Breakpoints 2 breakpoint keep y
0x0804845d in main at programa.cpp:19
breakpoint already hit 1 time
Los breakpoints son elementos de 3 breakpoint keep y
depuración que permiten detener el 0x080483ea in otra_funcion(int, int) at
programa en una línea de código programa.cpp:2
predeterminada. Por ejemplo, existe un breakpoint already hit 1 time
breakpoint al inicio de la función main (la que
pusimos al inicio). Pongamos un breakpoint Hemos visto una serie de comandos básicos
en la línea 19: que posee gdb, tal vez solo raspando la
superficie de los poderes increíbles que nos
puede proporcionar este fantástico
(gdb) break 19
Breakpoint 2 at 0x804845d: file depurador. Una lista más completa puede ser
programa.cpp, line 19. obtenida con la orden help, o especificando
la clase de ayuda, por ejemplo help
breakpoints.
A continuación hagamos que el programa
siga corriendo , hasta llegar al primer
breakpoint que encuentre usando la orden GNU Make
continue:
Make es una herramienta que controla la
compilación de ejecutables y otros archivos
(gdb) continue similares desde sus ficheros fuente. Make se
Continuing. encarga automáticamente de comprobar que
Breakpoint 2, main () at programa.cpp:19
19 b = a+i;
archivos son necesarios compilar y cómo
hacerlo.
No importa el contexto en que se encuentren Para cumplir esta tarea, es necesario
los breakpoints, el programa se detendrá de establecer un pequeño script en un archivo
todas formas, para comprobarlo pongamos que debe ser nombrado Makefile, y ejecutar
un breakpoint dentro de otra_funcion: el comando make. La principal tarea de Make
es comprobar, mediante reglas de
dependencia, si los archivos fuente han
(gdb) break otra_funcion cambiado desde la última vez que se hizo
Breakpoint 3 at 0x80483ea: file todo el proceso, para volver a realizarlo de
programa.cpp, line 2. nuevo.
La sintaxis general de un archivo Makefile es
Y dejamos que el programa siga su curso con la siguiente :
continue:
12. objetivo: dependencias... libreria2.h
comandos....
int resta(int a, int b);
Donde objetivo es el archivo a ser creado,
libreria2.cpp
dependencias es una lista de un archivos que
deben existir antes de crear el objetivo. #include quot;libreria2.hquot;
int resta(int a, int b){
Finalmente en comandos se especifica cómo return (a-b);
crear el objetivo en base a las dependencias. }
Los comandos pertenecen al sistema
operativo , y no solo están limitados a
programa.cpp
compilar, se pueden utilizar todas las
herramientas de línea de comandos del #include quot;libreria1.hquot;
sistema operativo, y no existe una limitación #include quot;libreria2.hquot;
#include <iostream>
de las cosas que se pueden realizar en este using namespace std;
aspecto. int main(void){
int a = suma(1,2);
El siguiente ejemplo fue mencionado int b = resta(4,3);
anteriormente en la primera parte de este cout << quot; La suma es: quot;
tutorial, pero ésta vez utilizaremos Make: <<quot; y la resta es: quot; << b
<< endl;
return 0;
}
Una vez escritos todos los archivos fuente, se
debe crear un fichero denominado Makefile,
donde se especificarán todas las reglas de
dependencia necesarias:
CC=g++
CFLAGS=-g
all: programa
programa: libreria1.o libreria2.o
Gráfica de dependencias de este ejemplo. programa.cpp libreria1.h libreria2.h
$(CC) $(CFLAGS) programa.cpp
Cuadros azules son archivos fuente rojos son libreria1.o libreria2.o -o programa
archivos binarios generados
libreria1.o: libreria1.cpp
Para crear un ejemplo lo menos engorroso $(CC) $(CFLAGS) libreria1.cpp -o
posible, se omitirá ciertos estándares de libreria1.o -c
codificación, en favor de simpleza. Los
libreria2.o: libreria2.cpp
archivos fuente se listan a continuación: $(CC) $(CFLAGS) libreria2.cpp -o
libreria2.o -c
libreria1.h clean:
rm *.o programa
int suma(int a, int b);
y para construir y generar todo, simplemente
libreria1.cpp
es necesario ejecutar make
#include quot;libreria1.hquot;
int suma(int a, int b){
return (a+b);
}
13. arn@localhost:~$ make el proceso, es decir, limpiará el directorio.
g++ -g libreria1.cpp -o libreria1.o -c
g++ -g libreria2.cpp -o libreria2.o -c
Para usarlo se debe utilizar make clean :
g++ -g programa.cpp libreria1.o
libreria2.o -o programa
arn@localhost:~$ make clean
rm *.o programa
Si se usa make nuevamente no pasara nada,
puesto que el programa detecta que todos
Hasta aquí llega la segunda parte de este
los archivos a generar ya existen y no es
tutorial, espero que lo hayan disfrutado. Aún
necesario una recompilación.
queda una tercera parte por venir, que
incluye las herramientas de automatización
arn@localhost:~$ make autotools
make: No se hace nada para ‘all’.
Referencias
Probemos borrando el archivo objeto
libreria2.o , y luego haciendo make [1] http://sources.redhat.com/autobook
nuevamente [2] http://www.gnu.org/prep/standards/
arn@localhost:~$ rm libreria2.o
arn@localhost:~$ make
g++ -g libreria2.cpp -o libreria2.o -c
g++ -g programa.cpp libreria1.o
Autor
libreria2.o -o programa
Como pueden observar Make detecta que
libreria2.o no existe y es generada
nuevamente. Como programa depende de
librería también es recompilado.
Tomar en cuenta que libreria1.o no fue
recompilado esta vez, porque no fue
necesario.
Arnold Marcelo Guzmán
Dentro del Makefile también especificamos la Desarrollador
regla de construcción denominada clean, que spacerockganimedes@gmail.com
borrará todos los archivos generados durante
14. Introducción
a Django (4ra parte)
Django es un framework para el desarrollo de aplicaciones Web desarrollado en Python
originalmente por Adrian Holovaty, Simon Wilson, Jacob Kaplan-Moss y Wilson Miner
para World-Online el 2003 . Desde 2005 es software de código abierto (con una licencia
BSD) y en septiembre de 2008 alcanzará la tan ansiada versión 1.0.
Introducción
En esta cuarta entrega de la serie vamos a configurar más adecuadamente la interfaz de
administración, vamos a utilizar algunas de las vistas genéricas y vamos a crear una vista para
extraer artículos de la base de datos. Finalmente desarrollaremos las plantillas para la
presentación de los artículos y las categorías de nuestra aplicación.
Configurando la interfaz de administración.
Vamos a empezar configurando de forma más adecuada la interfaz de administración de
nuestra aplicación, para mejorar la usabilidad, añadiendo una búsqueda simple a la interfaz,
“filtros” para las categorías y un mejor widget para seleccionarlas. Además vamos a llenar
automáticamente el campo slug.
Todo esto lo hacemos simplemente definiendo una clase por modelo que queremos configurar,
derivada de la clase admin.ModelAdmin.
atix/articles/admin.py
from django.contrib import admin
from models import Article, Category
class ArticleAdmin(admin.ModelAdmin):
filter_horizontal = ('categories',)
list_display = ('title', 'published', 'last_updated')
list_filter = ('categories',)
prepopulated_fields = {'slug': ('title',)}
search_fields = ('title', 'intro', 'body')
class CategoryAdmin(admin.ModelAdmin):
list_display = ('name', 'slug',)
prepopulated_fields = {'slug': ('name',)}
admin.site.register(Article, ArticleAdmin)
admin.site.register(Category, CategoryAdmin)
✔ Con la opción filter_horizontal creamos un widget más adecuado a la selección de
categorías para nuestros artículos, existe también la opción filter_vertical, para
crear un widget similar de apariencia vertical.
✔ Con la opción list_display definimos que campos de nuestro modelo se van a
mostrar en la lista de artículos y con la opción list_filter definimos los campos que
van a servir para agrupar a los artículos.
15. ✔ Con la opción prepopulated_fields definimos que el campo slug va a ser llenado
automáticamente en base al título del artículo y el nombre de la categoría.
✔ Con la opción search_fields definimos un campo de búsqueda simple en base a
algunos de los campos.
Finalmente registramos las opciones adicionales, invocando admin.site.register() con el modelo
y la clase de opciones que acabamos de definir.
El resultado es una interfaz de administración más usable.
16. Vistas genéricas en Django.
Una de las grandes ventajas de Django es la existencia de lo que se conoce como vistas
genéricas. Éstas nos permiten simplificar una serie de tareas que son de por sí repetitivas como
el extraer una lista objetos de objetos o un objeto en particular de la base de datos.
Django ofrece cuatro categorías de vistas genéricas:
✔ Simples: django.views.generic.simple.
✔ De archivo por fecha: django.views.generic.date_based.
✔ De lista y detalle: django.views.generic.list_detail.
✔ De creación, actualización y borrado: django.views.generic.create_update.
En esta ocasión nos vamos a concentrar en las vistas de lista y detalle y vamos a usar la vista
object_list para extraer las listas de los artículos y de las categorías y object_detail para
extraer el detalle de una categoría.
Para utilizar las vistas solo necesitamos establecer mediante el despacho, que veremos a
continuación, que vistas (genéricas) vamos a emplear y pasarles un par de argumentos.
La vista django.views.generic.list_detail.object_list requiere como argumento
queryset, el conjunto de objetos de la base de datos y tiene entre los argumentos opcionales:
template_object_name, que nos permite cambiar el nombre del objeto en la plantilla. El
nombre es por defecto object, y la lista de objetos es object_list.
La vista django.views.generic.list_detail.object_detail requiere como argumentos
queryset, el conjunto de objetos de la base de datos y el object_id o slug del objeto que nos
interesa. Tiene entre los argumentos opcionales template_object_name, que nos permite
cambiar el nombre del objeto en la plantilla. El nombre por defecto es object. Si nos referimos
al objeto a través del slug, es necesario también el argumento slug_field, para indicar cual es
el campo slug al que nos referimos en el objeto.
17. La documentación de referencia de las vistas genéricas está disponible en
http://docs.djangoproject.com/en/dev/ref/genericviews/
Creando una vista.
Para extraer el detalle de los artículos (un artículo) de la base de datos y presentarlo, podríamos
recurrir una vez más a las vistas genéricas, más específicamente a la vista object_detail de
django.views.generic.date_based, pero para aprender como definir una vista, vamos a
crear una propia, usando dos “atajos” que nos proporciona Django.
Una vista es una función cuyo primer parámetro es request, que encapsula al pedido HTTP, el
resto de los parámetros son los que forman parte del pedido y que han sido extraídos a través
de la expresión regular correspondiente en el mapeo de despacho (urls.py) que veremos a
continuación.
atix/articles/views.py
from django.shortcuts import get_object_or_404, render_to_response
from models import Article
def article_detail(request, year, month, slug):
article = get_object_or_404(Article,
published__year=year,
published__month=month,
slug=slug)
return render_to_response('articles/article_detail.html',
{'article': article})
La función get_object_or_404 intenta extraer de la base de datos un objeto que corresponda
a los parámetros que recibe, en este caso se busca un objeto de la clase Article cuyo mes y año
de publicación, así como el slug correspondan a los proporcionados como parámetros.
En caso de que no exista dicho objeto, la función elevará una excepción Http404, ocasionando
un error 404, mostrando la página de error de la plantilla atix/templates/404.html. Si
existiese más de un objeto con esas características el resultado también será un error.
La función render_to_response devolverá como respuesta el resultado de la evaluación de la
plantilla atix/templates/articles/article_detail.html, con el contexto article, es decir
con el artículo que acabamos de extraer de la base de datos como única variable.
Despacho: urls.py.
El despacho establece la relación entre las rutas el el servidor Web (URLs) y las vistas que se
van a emplear. En Django, el despacho se configura en base a expresiones regulares.
atix/urls.py
from django.conf.urls.defaults import *
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
(r'^admin/(.*)', admin.site.root),
(r'^contact/', include('contact_form.urls')),
(r'^articles/', include('articles.urls')),
)
18. En nuestro caso añadimos una línea a la configuración global, estableciendo que toda ruta con
la raíz /articles/ estará a cargo la configuración de la aplicación en un archivo propio de
configuración.
atix/articles/urls.py
from django.conf.urls.defaults import *
from django.views.generic.list_detail import object_detail, object_list
from models import Article, Category
from views import article_detail
article_info = {
'queryset': Article.objects.all(),
'template_object_name': 'article',
}
category_info = {
'queryset': Category.objects.all(),
'template_object_name': 'category',
}
urlpatterns = patterns('',
url(r'^$',
object_list,
article_info,
name='article-list'),
url(r'^categories/$',
object_list,
category_info,
name='category-list'),
url(r'^category/(?P<slug>[w-]+)/$',
object_detail,
dict(category_info, slug_field='slug'),
name='category-detail'),
url(r'^(?P<year>d{4})/(?P<month>d{1,2})/(?P<slug>[w-]+)/$',
article_detail,
name='article-detail'),
)
Los diccionarios article_info y category_info fijan los argumentos descritos anteriormente.
Los patrones de ruta url() tienen los siguientes parámetros:
✔ la expresión regular a la que corresponden,
✔ la vista encargada de procesar el pedido y generar una respuesta,
✔ los argumentos de la vista, si ésta los requiere y, opcionalmente,
✔ el nombre de la ruta.
Las dos primeras rutas hacen uso directo de la vista genérica object_list y los argumentos
definidos para mostrar una lista de artículos (bajo la ruta /articles/) y una lista de categorías
(bajo la ruta /articles/categories/).
La tercera ruta establece que la vista genérica object_detail y los argumentos definidos,
añadiendo slug_field, serán usados para mostrar el detalle de una categoría. El slug será una
cadena de uno o más caracteres o un guión (“-”), bajo la ruta /articles/category/.
19. La cuarta ruta establece que la vista article_detail que definimos anteriormente será la
encargada de mostrar el detalle de un artículo. La vista recibirá directamente year, month y slug
como parámetros. El año serán cuatro dígitos, el mes uno o dos y el slug una vez más una
cadena de uno o más caracteres o un guión (“-”), bajo la ruta /articles/.
Plantillas para los artículos y las categorías.
atix/templates/articles/article_list.html
{% extends quot;base.htmlquot; %}
{% block title %}Artículos | {{ block.super }}{% endblock %}
{% block content %}
<h2>Artículos</h2>
{% for article in article_list %}
<h3>
<a href=quot;{{ article.get_absolute_url }}quot;>{{ article.title }}</a>
({{ article.published|date:quot;F Yquot;|title }})
</h3>
{{ article.intro|safe }}
{% endfor %}
{% endblock %}
En la lista de artículos iteramos por la lista que recibe la plantilla de la vista y mostramos para
cada uno la introducción, marcando a través del filtro safe que su contenido es seguro, es decir
puede contener etiquetas HTML.
atix/templates/articles/article_detail.html
{% extends quot;base.htmlquot; %}
{% block title %}{{ article.title }} | {{ block.super}}{% endblock %}
{% block content %}
<h2>{{ article.title }}</h2>
<h3>{{ article.published|date:quot;j F Yquot;|title }}</h3>
{{ article.intro|safe }}
<hr noshade>
{{ article.body|safe }}
{% endblock %}
20. En el detalle de un artículo mostramos la introducción y el cuerpo del artículo, marcando
nuevamente su contenido como seguro.
atix/templates/articles/category_list.html
{% extends quot;base.htmlquot; %}
{% block title %}Categorías | {{ block.super }}{% endblock %}
{% block content %}
<h2>Categorías</h2>
{% for category in category_list %}
<h3>
<a href=quot;{{ category.get_absolute_url }}quot;>{{ category.name }}</a>
{{ category.articles.count }}
artículo{{ category.articles.count|pluralize }}
</h3>
{% endfor %}
{% endblock %}
En la lista de categorías iteramos por la lista que recibe la plantilla de la vista y mostramos para
cada uno el nombre y el número de artículos publicados. El filtro pluralize añade una “s” si el
valor de category.articles.count es mayor a uno.
atix/templates/articles/category_detail.html
{% extends quot;base.htmlquot; %}
{% block title %}
Artículos en la categoría »{{ category.name }}« |
{{ block.super}}
{% endblock %}
{% block content %}
<h2>
Artículos en la categoría »{{ category.name }}«
</h2>
{% for article in category.articles.all %}
<h3>
<a href=quot;{{ article.get_absolute_url }}quot;>{{ article.title }}</a>
({{ article.published|date:quot;F Yquot;|title }})
</h3>
{% endfor %}
{% endblock %}
En el detalle de una categoría iteramos por la lista de artículos publicados en esa categoría para
mostrar el título y la fecha de publicación.
21.
22. En la próxima entrega cerraremos la serie añadiendo feeds de sindicación (RSS y Atom) para
los artículos publicados, añadiremos más funcionalidad a la interfaz de administración y
prepararemos nuestro proyecto para un entorno de producción.
Referencias
[1] http://www.djangoproject.com/
Autor
Ernesto Rico Schmidt
Usuario de Linux y Software Libre desde 1994
e.rico.schmidt@gmail.com
23. Introducción
a Ext JS (2da parte)
Ext JS es un Framework que permite crear aplicaciones Web 2.0 con interfaces muy
similares a la de una aplicación de escritorio.
Introducción
En la primera parte de este tutor (número 5 de la revista ATIX), dimos una introducción a Ext JS
un framework de desarrollo en JavaScript que se encarga de la parte del cliente, ahora vamos a
estudiar el uso y manejo de árboles, no solo veremos la parte del cliente sino también como se
integra en el servidor, donde haremos uso de PHP.
Los árboles son estructuras jerárquicas que se constituyen de las raíces, las ramas y las hojas,
las raíces son el primer nodo del árbol del cual se cuelgan todos los demás y que no tienen
dependencia de otro nodo es decir no tienen padre, las ramas son los hijos y nodos intermedios
entre la raíz y las hojas, las hojas son nodos finales los cuales no tienen hijos, un ejemplo muy
común de árboles es el sistema de archivos de un sistema operativo donde las carpetas
conforman las raíces, ramas y hojas.
Iniciando el trabajo de árboles
Primero debemos crear la base de datos test y la tabla árbol, para crearla haremos uso del
siguiente SQL.
CREATE TABLE IF NOT EXISTS `arbol` (
`id` int(11) NOT NULL auto_increment,
`parent_id` int(11) default NULL,
`nombre` varchar(50) character set utf8 collate utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM;
Ahora debemos crear tres scripts, creen primero la carpeta del proyecto árbol, dentro de esta
carpeta descompriman la librería Ext JS, ahora deben crear tres scripts index.php, db.php y
arbol.php, cabe recalcar que el código está escrito para PHP5. Ahora abran en su editor el
archivo index.php y adjunten el siguiente código .
index.php
<!DOCTYPE html PUBLIC quot;-//W3C//DTD XHTML 1.0 Transitional//ENquot;
quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtdquot;>
<html xmlns=quot;http://www.w3.org/1999/xhtmlquot;>
<head>
<meta http-equiv=quot;Content-Typequot; content=quot;text/html; charset=UTF-8quot; /><title>Arboles con
Ext JS</title>
<link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;ext-2.2/resources/css/ext-all.cssquot; />
<style type=quot;text/cssquot;>
body{
height:100%;
font-family:georgia;
}
24. </style>
<script type=quot;text/javascriptquot; src=quot;ext-2.2/adapter/ext/ext-base.jsquot;></script>
<script type=quot;text/javascriptquot; src=quot;ext-2.2/ext-all-debug.jsquot;></script>
<!--Contenido que sera modificado-->
<!-- Fin -->
<body>
<div id=quot;arbolquot; ></div>
</body>
</html>
Lo que hacemos aquí es básicamente llamar a la hoja de estilos así como los scripts necesarios
para que pueda funcionar Ext JS, ahora ejecutemos el siguiente SQL en nuestro gestor de
base de datos preferido.
INSERT INTO `arbol` (`id`, `parent_id`, `nombre`) VALUES
(1, NULL, 'Frameworks'),
(2, 1, 'Ruby on Rails'),
(3, 1, 'Django'),
(4, 1, 'Symfony'),
(5, 1, 'CakePHP');
Con esto hemos creado un Padre que es Frameworks y varios hijos, ahora modifiquemos el
archivo
index.php
<!--Contenido que sera modificado-->
<script>
Ext.BLANK_IMAGE_URL = 'ext-2.2/resources/images/default/s.gif';
Ext.onReady(function() {
//Crear un nodo que cargue asicronicamente (AJAX) sus hijos
root = new Ext.tree.AsyncTreeNode({
text: 'Raiz',
id:'0',
draggable: false
});
//Crear Arbol
var tree = new Ext.tree.TreePanel({
id: 'treePanel',
loader: new Ext.tree.TreeLoader({
url:'arbol.php',
requestMethod:'GET',
baseParams:{accion:'mostrar'}
}),
width: 250,
height: 300,
enableDD: true, //Permite Drag and Drop
containerScroll: true,
renderTo: 'arbol', //Id del tag en el cual se renderiza
root: root,
rootVisible: false, //No queremos ver el nodo raiz
/*tbar : [{
text: quot;Crearquot;, handler: createNode},
{text: quot;Borrarquot;, handler: deleteNode
}],*/
25. //Definición de eventos
listeners: {
//Se define el nodo actual al que se haya seleccionado para poder crear
//hijos a partir del nodo seleccionado
click: {fn: function(node) { currentNode = node} }
//beforeappend: {fn: function() {currentNode.expand() } }
}
});
root.expand();
});
</script>
<!-- Fin -->
Es turno de modificar el archivo:
arbol.php
<?php
include_once('db.php');
class Arbol{
var $datos, $bd;
function __construct($data, $bd) {
$params = $data;
unset($params['accion']);
$this->bd = $bd;
$this->{$data['accion']}($params);
}
// Presenta los hijos de un padre
function mostrar($params) {
$buscar = quot;={$params['node']}quot;;
if($params['node'] == 0) {
$buscar = quot; IS NULLquot;;
}
$res = mysql_query(quot;select * from arbol where parent_idquot;.$buscar, $this-
>bd);
$array = array();
while ($fila = mysql_fetch_assoc($res)) {
$array[] = array('id' => $fila['id'], 'text' => $fila['nombre'],
'leaf' => false);
}
$this->presentar($array);
}
function presentar($data) {
echo json_encode($data);
}
}
if(isset($_REQUEST)) {
$arbol = new Arbol($_REQUEST, $link);
}
Para realizar la conexión a la base de datos, debemos modificar el archivo:
26. db.php
<?php
$link = mysql_connect('localhost', 'demo', 'demo');
if (!$link) {
die('Not connected : ' . mysql_error());
}
// make foo the current db
$db_selected = mysql_select_db('test', $link);
if (!$db_selected) {
die ('Can't use test: ' . mysql_error());
}
Como pueden ver ahora cuando hacemos click en los nodos este llamará a la función mostrar
en la clase Arbol y presentará la lista de nodos hijos que tiene este nodo, ahora adicionemos
más nodos en nuestra base de datos, mediante el siguiente SQL
INSERT INTO `arbol` (`id`, `parent_id`, `nombre`) VALUES
(6, 2, 'Modelo'), (7, 2, 'Vista'), (8, 2, 'Controlador'),(9, 3, 'Rad, hecho en
Python');
Ahora lo que hemos hecho es adicionar nuevos nodos a los Frameworks Ruby on Rails y
Django, cuando ustedes hagan click en estos nodos verán que se expanden y muestran sus
hijos.
Ahora hagamos algo más, cuando movamos un nodo lo vamos a reemparentar, es decir vamos
a cambiar de padre, lo que sucede en este tipo de casos es que uno selecciona un nodo y lo
mueve a otro padre, dicho de otra forma soporta el comportamiento Drag and Drop, esto hace
de que se ejecute el evento mover movenode, el cual automáticamente nos pasa los
parámetros necesarios para poder realizar y enviar estos datos al servidor.
Comencemos primero modificando el archivo arbol.php y adicionemos el siguiente código a la
clase Arbol .
27. function mover($params) {
$query = quot;update arbol set parent_id={$params['nuevoPadre']} where
id={$params['nodo']}quot;;
if (mysql_query($query, $this->bd)) {
$this->presentar(array('success' => true));
}else{
$this->presentar(array('success' => false));
}
}
Lo que básicamente sucede es que esta función actualiza los datos del nuevo padre, pero la
parte más simple sucede en el servidor, para que este comportamiento sea posible hay que
modificar el archivo index.php y aumentar el siguiente código después del bloque var tree =
new Ext.tree.TreePanel({...});
/**
*Evento que permite realizar el movimiento de un nodo
*/
tree.on('movenode', function(arbol, node, oldParent, newParent, position) {
if(newParent.id == oldParent.id) {
//No realizar nada no se reemparento
return false;
}
//Inicio de llamada al servidor
Ext.Ajax.request({
url:'arbol.php',
method: 'GET',
params: {accion: 'mover', nodo: node.id, nuevoPadre: newParent.id},
success: function(resp, o) {
try{
//Decodes JSON
r = Ext.decode(resp.responseText);
//Verificar respuesta exitosa
if(!r.success) {
o.failure(); //Fallo
}
arbol.enable(); //Habilitar Panel
//Capturar excepcion
}catch(e) {
o.failure();
}
},
//Funcion de falla
failure: function(resp, o) {
arbol.suspendEvents();
oldParent.insertBefore(node, null);
arbol.enable(); //habilitar arbol
}
});
});
Se captura el evento movenode que pasa varios parámetros: árbol, node, oldParent,
newParent, position, primero verificamos de que el nuevo padre no sea el mismo que el
antiguo padre, ya que se puede mover el nodo pero soltarlo en el mismo padre, una vez
verificado iniciamos una llamada Ajax a la cual le pasamos los parámetros: params: {accion:
'mover', nodo: node.id, nuevoPadre: newParent.id}, los cuales indican el nodo que se
mueve, el nuevo padre y la acción a ejecutarse, en caso de que las respuesta sea correcta la
28. respuesta del servidor es: {success: true} codificada en JSON, en caso de falla se llama a la
función failure, dentro de la llamada Ajax y se retorna al nodo al padre original.
En la siguiente versión de este tutor continuaremos con este mismo árbol solo que esta vez
vamos a modificar el nombre, crear nuevos nodos y borrar, espero les haya gustado el tutor,
pueden encontrar una versión similar para Ruby on Rails de este tutor en
http://boliviaonrails.com.
Referencias
[1] http://extjs.com
[2] http://getfirebug.com
Autor
Boris Barroso
boriscyber@gmail.com
29. Desarrollo Ágil
con Ruby on Rails (2da Parte)
Ruby on Rails es un framework de desarrollo web ágil, elaborado por David Heinemeier Hansson, que el
2004 lanzó la versión pública a partir de desarrollar el proyecto Basecamp, Ruby on Rails (RoR) está
desarrollado en el lenguaje de programación Ruby, RoR actualmente se encuentra en la versión 2.1.1 en
la que contribuyeron más de 1400 desarrolladores del mundo con 1600 parches al framework, por estos
datos RoR es uno de los proyectos open source con más movimiento actual.
Antes tienen que instalar/actualizar rubygems
a la versión 1.3.1 y ejecutar:
(sudo) gem install rails
Con esto actualizaremos a la última versión
de rails en la máquina, ahora lo realizaremos
en el proyecto, dentro del archivo
Introducción config/envinroment.rb en la primera línea
Este 21 de Noviembre, salió a la luz la encontraremos la línea:
versión 2.2.2 estable de rails, la que
incorpora distintas características como: RAILS_GEM_VERSION = '2.1.1' unless
Thread Safety , Internacionalización i18n defined? RAILS_GEM_VERSION
dentro del core, Migraciones transaccionales,
y otras características, además salió la
versión definitiva de Netbeans 6.5, daremos Que la cambiamos por:
tips para actualizar el proyecto a la nueva
versión del framework.
RAILS_GEM_VERSION = '2.2.2' unless
Continuando con el desarrollo de la defined? RAILS_GEM_VERSION
aplicación Atix, en esta segunda parte
primeramente explicaré como actualizar el Ahora realizamos la tarea rake:
proyecto a la nueva versión de rails, además rails:update en consola, para netbeans:
veremos validaciones de campos, manejo de seleccionando el proyecto y apretando Alt +
relaciones de tablas. Shift + R te saldrán las tareas rake
disponibles y seleccionamos rails:update,
Actualizar a la última versión como último paso tendremos que ir al archivo
config/database.yml añadimos el número
de Rails. de conexiones simultáneas que accederán a
Aclaración. Esto no es realmente necesario, la aplicación, anteriormente en rails una sola
en ambientes de producción, ya que se conexión accedía a la aplicación, lo que
sugiere hacer pruebas si realmente el permitía que a veces la aplicación estuviera
proyecto está listo para la actualización, ya fuera de disposición por realizar una consulta
que llevaría a que la aplicación no esté pesada, para eso añadimos una línea:
disponible y causar desagradables
momentos, con esta advertencia y para
propósitos demostrativos actualizaremos el
proyecto.
30. development: y además las relaciones son del tipo: un
adapter: mysql
encoding: utf8
artículo tiene una revista y este artículo tiene
database: atix_development un único autor, entonces el código es:
pool: 5
username: root
password: class Articulo < ActiveRecord::Base
host: localhost validates_presence_of :titulo,
:contenido
belongs_to :revista
Con esto indicamos que 5 hilos accederán a belongs_to :autor
la base de datos, 5 es por defecto puedes end
cambiarlo de acuerdo a tus necesidades esto
repetiremos a las demás envinroments Y por último la clase autor debe de tener
definidas en database.yml. llenados forzosamente su nombre, apellidos
Así ya hemos actualizado a la última versión y su email, además que cada autor puede
de rails. tener escritos cero o más artículos, lo cual es:
Validaciones y relación de class Autor < ActiveRecord::Base
validates_presence_of :nombre,
tablas. :apellidos, :email
has_many :articulos
Para la clase revista tenemos que validar que end
siempre se llene un nombre descriptivo y su
editorial, luego el el campo número debe ser Explicaré que es lo que realiza las acciones
numérico y no aceptar otros formatos, en has_many :articulos, en el caso de autor,
relaciones cada revista tiene varios artículos,
le dice a la clase Autor que cree un método
el código para el modelo sería:
llamado artículos que devuelva todos los
registros que concuerden con este autor,
class Revista < ActiveRecord::Base para esto busca en la tabla Artículos
validates_presence_of :nombre, mediante la llave foránea revista_id (esto lo
:editorial hace automáticamente).
validates_numericality_of :numero
has_many :articulos Para el caso de belongs_to :revista, crea
end un método dentro de Articulo, llamado revista
en el que devuelve un único registro de la
Ahora para la clase artículos, cada artículo tabla Revista, buscando por el campo
debe de tener llenado su título y su contenido revista_id de Artículo.
Personalizando Vistas
Ahora modificaremos un poco las vistas para que reflejen los cambios:
/app/views/articulos/index.html.erb
<h1>Listado de articulos</h1>
<table>
<tr>
<th>Titulo</th>
<th>Contenido</th>
<th>Revista</th>
<th>Autor</th>
<th colspan=quot;3quot;>Acciones</th>
</tr>
31. <% for articulo in @articulos %>
<tr>
<td><%=h articulo.titulo %></td>
<td><%=h articulo.contenido %></td>
<td><%= link_to(articulo.revista.nombre, articulo.revista) if articulo.autor
%></td>
<td><%= link_to(articulo.autor.nombre, articulo.autor) if articulo.autor %></td>
<td><%= link_to 'Mostrar', articulo %></td>
<td><%= link_to 'Edit', edit_articulo_path(articulo) %></td>
<td><%= link_to 'Borrar', articulo, :confirm => 'Esta seguro?', :method => :delete
%></td>
</tr>
<% end %>
</table>
<br />
<%= link_to 'Nuevo articulo', new_articulo_path %>
Aquí lo más importante es la incorporación de los enlaces a la revista y al autor como se ve en
la imagen, estos enlaces van al método show respectivo:
Hasta aquí el tutorial, pondré a disposición el Referencias
código fuente en mi blog
http://ww.carakan.com, en el próximo [1] http://www.rubyonrails.org/
número realizaremos trabajo con ajax y [2] http://www.rubyforge.org/
paginación de resultados.
Autor
Agradecimientos.
Agradezco a Atix por el espacio que me
brinda, apoyando el software libre en Bolivia,
así mismo invito a todo la audiencia a visitar
nuestra pagina http://www.casasmap.com,
desarrollado enteramente en software libre.
Carlos Ramos
Lic. Informática UMSA
Lider de Wiebia, soluciones web 2.0
carakan@gmail.com
Blog personal http://ww.carakan.com
http://www.wiebia.com
32. Trac: Gestión
de proyectos de desarrollo
de Software (2da parte)
La gestión de proyectos de desarrollo de software, es un elemento imprescindible al
momento de encarar proyectos de desarrollo, porque esto implica considerar tópicos
como: control de versiones, wikis, manejo de bugs, etc. En la actualidad existen varias
opciones para este fin, pero una de las que destaca en el mundo del software Libre es
Trac, por su sencillez, facilidad y por su calidad..
Gestión de Trac desde línea
de comandos
Trac tiene la posibilidad de ser configurado
personalizado y gestionado tanto desde la
línea de comandos (modo interactivo), como
desde su interfaz web (gracias al plugin
WebAdmin) que será visto en la siguiente
sección.
En la mayoría de los casos no es preciso
memorizar todos los comandos que posee
Introducción Trac, ya que para esto contamos con una
En la primera parte del artículo habíamos ayuda en línea, accesible mediante:
visto los aspectos conceptuales e iniciales trac-admin help
de forma general de como hacer uso de Trac
para la gestión de proyectos de desarrollo de
Esta nos permitirá listar todas las opciones
Software, en esta segunda entrega,
disponibles, su sintaxis y descripción de las
consideramos el uso y personalización de la
mismas.
herramienta desde la línea de comandos y
desde su entorno web. La ejecución de comandos puede ser:
✔ de modo directo
Configuración de Trac ✔ de modo interactivo.
Las configuraciones de Trac se la realiza
mediante su archivo de configuración Modo directo
(trac.ini), que posee una estructura y
sintaxis bastante amigable y comprensible. La forma de acceder al modo directo es:
Este archivo puede ser modificado desde la trac-admin nombre_proyecto
línea de comandos o por medio del plugin de nombre_del_comando
administración vía web.
33. Línea de comandos en modo directo
Esto permitirá ver un listado de los wikis disponibles para el proyecto “trabajo” (proyecto creado
en la anterior entrega), cuya salida la observamos en el siguiente gráfico.
Modo interactivo
A diferencia del anterior, este nos permite ingresar a un entorno interactivo, donde sólo
precisamos introducir los comandos necesarios (entorno parecido al de Python), para acceder a
este modo debemos hacerlo digitando tracadmin trabajo.
Línea de comandos en modo interactivo
34. Instalación de plugins de hacerlo si disponemos de usuarios para
ello.
Las características de la arquitectura de Trac,
Para la creación de usuarios debemos crear
permiten la instalación de plugins, que le
un archivo que los contenga, de esta forma:
permiten adoptar características adicionales y
que coadyuvan a su mejor funcionamiento. touch /usr/usuarios
htpasswd -m /usr/usuarios jose
Los plugins al ser paquetes desarrollados
python, pueden ser instalados de la siguiente
forma: Básicamente se hace uso de la utilidad
htpasswd, este procedimiento podemos
✔ Mediante la utilidad easy_install: realizarlo para todos los usuarios necesarios,
easy_install sugerimos añadir un par de usuarios a
nombre_del_plugin.egg manera de prueba.
✔ Mediante su código fuente, dentro el
directorio donde se ha ha realizado la
descompresión del plugin, ejecutar: Autenticación de usuarios
python setup.py install
Actualmente existen diversas formas y
Para nuestro caso ejemplificaremos medios de autenticación, ya sean provistos
instalando el plugin WebAdmin que nos por el propio servidor web, una aplicación,
permitirá realizar la gestión de Trac mediante mediante el acceso a una base de datos o
su interfaz web, la instalación la realizamos mediante el acceso a un fichero, en nuestro
de la siguiente forma: caso haremos uso del fichero de usuarios
easy_install utilizado cuando en la sección anterior, para
http://svn.edgewall.com/repos/trac/sandbo esto debemos añadir lo siguiente al archivo
x/webadmin
de configuración de Trac:
[account-manager]
Activar el plugin password_format = htpasswd
password_store = HtPasswdStore
Una de tantas cosas que se puede hacer con password_file = /aplic/usr/usuarios
el archivo de configuración de Trac (trac.ini),
es poder habilitar o deshabilitar plugins, así:
Privilegios de usuarios
[components]
nombre_plugin.* = enabled Trac dispone de una serie de privilegios, que
nos permiten de cierta forma limitar o permitir
el acceso a ciertas partes o acciones dentro
para nuestro ejemplo procedemos a habilitar
de la gestión de nuestro proyecto, como
el plugin WebAdmin, para eso añadimos en
mencionamos anteriormente estas tareas
el archivo ../trabajo/conf/trac.ini lo
administrativas pueden ser realizadas ya sea
siguiente: desde la línea de comandos o desde la
[components] interfaz web (plugin WebAdmin), a
webadmin.* = enabled continuación vemos algunos ejemplos:
Listar los usuarios más los privilegios
Creación de usuarios asignados, y también las opciones de
Dentro la gestión de proyectos es muy privilegios disponibles.
recomendable que todas y cada una de las trac-admin trabajo permission list
tareas sean controladas, y que mejor forma
35. Listado de privilegios
Asignación de privilegios
Asigna ciertos privilegios al usuario juan
trac-admin trabajo permission add juan REPORT_DELETE WIKI_CREATE
Asigna al usuario esteban el privilegio de administrador. Cabe mencionar que este privilegio
permitirá observar en la barra de opciones la opción ADMIN (provista por el plugin WebAdmin)
trac-admin trabajo permission add esteban TRAC_ADMIN
El quitar uno o todos los privilegios asignados puede realizarse de la forma anterior.
trac-admin trabajo permission remove juan REPORT_DELETE
trac-admin trabajo permission remove juan *
Esta última secuencia de privilegios permite asignar ciertos privilegios al grupo desarrollo y
posteriormente asignar miembros a este grupo.
trac-admin trabajo permission add desarrollo WIKI_ADMIN
trac-admin trabajo permission add desarrollo REPORT_ADMIN
trac-admin trabajo permission add desarrollo TICKET_MODIFY
trac-admin trabajo permission add juan desarrollo
trac-admin trabajo permission add jose desarrollo
36. Gestión de Trac desde su interface web
Trac por medio del plugin WebAdmin permite realizar la gestión de nuestro proyecto,
adicionalmente podemos instalar mediante esta interfaz o desde línea de comandos el plugin
AccountManager, que nos brinda la facilidad de también gestionar los usuarios y privilegios de
nuestro proyecto (obviamente también podemos instalar todos los plugins que en cierto instante
precisemos).
A continuación mostramos algunas capturas que ilustran el uso de estas interfaces.
Registro de una nueva cuenta Login de una cuenta
Personalizar nuestra cuenta Reset de la contraseña
38. Gestión de Usuarios (Plugin AccountManager)
Gestión de Usuarios (Plugin UserManager)
39. Interacción y flexibilidad
Para concluir esta entrega podemos mencionar la enorme flexibilidad que tiene la gestión de
Trac, ya sea desde línea de comandos o desde su interfaz Web. Flexibilidad que nos permite
adquirir más y mayores funcionalidades de las provistas inicialmente, entre las que podemos
citar:
✔ Interacción con distintos sistemas de manejo de versiones (bazaar, git, mercurial)
✔ Manejo de eventos y comunicación por medio de email
✔ Uso de themes para cambiar la apariencia
✔ y mucho más
Recuerden que Trac por defecto viene con una guía que nos enseña y demuestra las posibles
variantes a utilizar, ésta puede ser accedida por medio de la wiki del proyecto que se gestiona.
Por último invitarlos a probar e investigar más detalles de las capacidades de esta herramienta,
que se ha convertido realmente en un valioso aporte al momento de gestionar un proyecto de
desarrollo de software.
Referencias
[1] Proyecto Trac: http://trac.edgewall.org/
[2] Componentes adicionales: http://trac-hacks.org/
[3] Acceso a repositorios libres: https://opensvn.csie.org/
Autor
Esteban Saavedra López
Líder de la Comunidad ATIX (Oruro – Bolivia)
Activista de Software Libre en Bolivia
jesaavedra@opentelematics.org
http://jesaavedra.opentelematics.org
40.
41. 8vo Congreso Nacional de
Software Libre Bolivia
Los días 13,14 y 15 la comunidad de Software Libre en Bolivia se vistió de gala, ya que celebró
su 8vo Congreso Nacional de Software Libre, realizado en la ciudad de La Paz.
Una vez mas, este evento acogió a profesionales, estudiantes, entusiastas y publico en general
interesados en el Software Libre.
El afiche principal
42. 8vo Congreso Nacional de
Software Libre Bolivia
La Revista Atix, realizó la cobertura de este grandioso evento, en un futuro muy próximo
tenemos la idea de sacar un número especial que describa y detalle todas y cada una de las
actividades realizadas en este congreso.
Gigantografía de la Revista Atix y el proyecto Opentelematics
Gigantografía del evento
43. 8vo Congreso Nacional de
Software Libre Bolivia
En esta oportunidad también se aprovecho de realizarse de forma paralela el encuentro de
algunas comunidades especificas, como es el caso de la comunidad de BoliviaOS, comunidad
de desarrolladores y colaboradores de la distribución de linux con sabor boliviano.
Gigantografía del evento Gigantografía de BoliviaOS
44. 8vo Congreso Nacional de
Software Libre Bolivia
La comunidad de Ubuntu Bolivia, también se Por primera vez se realizo el encuentro de la
hizo presente en este evento para mostrar las comunidad SolMujeres, comunidad que vio la
actividades y adelantos que poseen. luz este 2008.
Gigantografía de Ubuntu Bolivia Gigantografía de SolMujeres
45. 8vo Congreso Nacional de
Software Libre Bolivia
En esta ocasión el evento contó con el auspicio de importantes empresas e instituciones como
Entel, Universidad Católica de Bolivia (Carrera de Ingeniería de Sistemas), Opentelematics
Internacional en Bolivia, ADSIB – Agencia para el desarrollo de la Sociedad de la Información en
Bolivia, OpenIT; todas ellas brindaron su apoyo y respaldo al evento mas importante del
software Libre en Bolivia.
Auspiciadores del 8vo Congreso Nacional de Software Libre
46. InfoNews – Doble Clic
Las nuevas versiones de los
navegadores siguen
luchando, nadie se queda
atrás
Otro de los navegadores que permanecen en
la lucha es Opera que ahora lanzó la versión
10 alpha y lo que caracteriza a esta nueva
versión es su velocidad de carga y el hecho
de haber pasado la prueba Acid3 obteniendo
un alto puntaje eso significa que esta versión
puede soportar lo último en diseño web te
hablo de Javascript, Document Objet Model y
Mozilla, Opera, Google Chrome han liberado CCS (Cascading Style Sheets) entre otras.
nuevas versiones muchas de ellas aún en
su fase beta, tal es el caso de Mozilla que
recientemente sacó la versión 3.1 beta 2 con
el que se puede apreciar una nueva interfaz,
una notable mejora en cuanto a la velocidad
de carga de las páginas, un corrector
ortográfico, marcadores, un bloqueador de
ventanas emergentes, un gestor de
descarga, además se tiene la característica
de usar la función drag and drop lo que te
permite arrastrar las pestañas y de este
modo se pueda cambiar la posición de una
ventana a otra y por ejemplo si se tiene una
sola ventana, se puede arrastrar una
pestaña y soltarla en el escritorio y se te
abrirá una ventana nueva, parece algo
sencillo pero en realidad estos detalles son Google Chrome acaba de lanzar su version
importantes para los usuarios, otro aspecto definitiva, con la que nos trae nuevas
importante es que ocupa menos memoria. características en cuanto a velocidad,
Pruébalo tú mismo descargando la versión mejoras en el bloqueador de Popups,
de Mozilla 3.1 beta2. mejoras en la administración de favoritos y
por cierto esta versión está en español; aún
no tenemos la versión final de Google
Chrome que parece ser prometedor.
¿Chrome logrará colmar las expectativas de
los usuarios?
47. A un paso de Fedora 11 Autor
Y seguimos con nuevas versiones ahora es
el turno de Fedora que hace una par de
Ivonne Karina Menacho Mollo
semanas lanzó la versión 10 con nuevas
Titulada de la carrera de Ingeniería de
características por ejemplo presenta un
Sistemas e Informática (F.N.I.)
arranque más veloz, instalaciones virtuales
Conductora programa radial “Doble Clic”
remotas, además presenta el kernel 2.6.27,
ivonnekarina2003@hotmail.com
RPM 4.6, KDE 4.1, GNOME 2.24 y otras
características innovadoras en esta versión,
apenas se había liberado la versión 10
ahora se habla de Fedora 11, en la página
http://fedoraproject.org/ podrás
encontrar las nuevas funcionalidades de la
futura versión y además de un cronograma
de desarrollo de Software con fechas
tentativas y esperemos que estas no sufran
ningún cambio.
48. InfoNews – Doble Clic El nombre de este dispositivo es MediaPoint
Blockbuster se apoya en fabricado por 2Wire, es un centro multimedia
con la capacidad de descargar películas a
MediaPoint y Linux través de la red, también se puede
La famosa cadena de alquiler de películas aprovechar la red doméstica para visualizar
Blockbuster se apoya en MediaPoint y Linux vídeos y escuchar música almacenados en
para resurgir. cualquier equipo de la red, gracias al soporte
de UPnP (Universal Plug and Play) y DLNA
(Alianza de Redes Digitales Vivas), además
dispone de una salida HDMI ( Interfaz
Multimedia de Alta Definición), y si de
conectividad se trata, ésta ofrece dos
alternativas una Inalámbrica y otra por cable
Ethernet, también cuenta con un navegador,
permitiendo a sus usuarios navegar por la
red desde su sofá.
Al igual que una computadora, MediaPoint
también necesita de un sistema operativo
para su funcionamiento. La diferencia básica
sería que, este dispositivo necesita un
sistema operativo en tiempo real debido a
Después de haber sufrido una terrible caída que operaciones como la decodificación de
en su negocio, BLOCKBUSTER una de las MPEG necesita que se realice al instante y
cadenas más competidoras en el servicio de adivinen que… todo este funcionamiento
alquiler de películas, renueva su misión de” estará a cargo del sistema operativo
ayudar a la gente a transformar noches LINUX!!!.
ordinarias en noches con Gran éxito en
taquilla” al combinar el servicio ON Sin duda alguna Blockbuster regresó con la
DEMAND con un dispositivo basado en idea de tomar las riendas y ser líder mundial
Linux. en su rubro, pero esta vez con un nuevo
concepto y apoyándose en muy buenas
BLOCKBUSTER tras haber acusado a la tecnologías como MediaPoint y Linux.
piratería de ser la principal causa de su
fracaso con el gran dicho “si no puedes con
ellos únetelos” inauguró la sección
Download, llamado Blockbuster On
Demand, un servicio que permite a sus
clientes descargar películas desde Internet
con un cierto costo, para esta descarga se
creó un reproductor-receptor es decir un
Set-Top Box de medios digitales el cual
servirá como puente entre la gran red y los
televisores.
49. La forzosa migración a Red Autor
Flag causa polémica en
China
Marcia Estrella Velasquez Aguilar
Egresada de la carrera de Ingeniería de
Sistemas (F.N.I.)
mevaguerreradelaluz@gmail.com
En la ciudad Nanchang al sur de China
están imponiendo el uso de Red Flag Linux
en los CiberCafés, la razón que dan las
autoridades chinas para esta obligatoria
migración es “reducir el uso de software
pirata como Windows”. Pero varios dueños
de CiberCafés argumentaron contar con una
licencia oficial del sistema operativo
Windows, pero aun así se les obligó a
sustituir este por Red Flag – Linux Chino.
Lo extraño es que los dueños de estos
CiberCafés para instalar esta distribución de
Linux deben pagar una licencia de 5000
yuan (US$720), siendo Red Flag una
distribución supuestamente libre.
Nanchang no es la única ciudad que está
sufriendo esta migración obligatoria, Fuzhou
también fue afectada, ni tampoco esta es la
única medida ordenada a los CiberCafés, la
instalación de cámaras y escáneres para la
identificación de usuarios en estos, fue
orden gubernamental. Sin duda alguna, los
dueños de estos CiberCafés están siendo
muy afectados en el bolsillo.
50. InfoNews – Doble Clic Entre sus características principales se
Songbird más que un encuentra:
✔ GStreamer: un framework multimedia
reproductor multimedia libre multiplataforma
✔ mashTape: Al escuchar música con
Songbird podrás ver fotos de Flickr,
vídeos de Youtube, biografías en
last.fm, noticias en Google y muchas
otras cosas relacionadas con el
artista de la canción (integración con
Last.fm).
✔ Listas de reproducción inteligentes
reutilizables.
✔ Entradas para conciertos: Puedes ver
los próximos eventos en tu localidad,
basados en los artistas de tu librería
de música.
✔ Capacidad de reproducir archivos de
múltiples formatos, como MP3, AAC,
Songbird es un reproductor multimedia, Ogg Vorbis, FLAC y Windows Media
basado en la plataforma XULRunner de Audio.
Mozilla, por lo cual dispone de versiones ✔ Interfaz personalizable. Una interfaz
para Windows, Mac OS X, y Linux. gráfica de usuario configurable y
plegable, así como el modo de mini-
Songbird es un reproductor multimedia reproductor.
integrado a muchísimas cosas más, ya que ✔ La capacidad de suscribirse a blogs
trata de integrar las características de de mp3 así como listas de
Firefox, Last.fm y iTunes reproducción.
✔ Favoritos creados por el usuarios.
Al hacer uso de Songbird solo tienes que ✔ Capacidad de construir mezclas
pensar en una canción, escribirla en un personalizadas.
buscador que lleva songbird, y ✔ Add-ons a la carta.
automáticamente te saldrá una web en la
que puedes escuchar la canción entera de
manera rápida y gratuita, con enlaces a sus
letras, vídeos, fotos… pero con la facilidad
para que la puedas descargar
automáticamente a muy buenas velocidades
(entre 200 y 300kb/s).
Según Mozilla, songbird está “destinado a
reproducir la música que quieras, de los
sitios que quieras, en los dispositivos que
quieras, desafiando las convenciones del
descubrimiento, compra, consumo y
organización de la música en Internet”
51. Algunas características de su lanzamiento,
AWS acrecienta su oferta de será gratis por un período de 90 en su
versión beta, se podrá consumir más de 500
servicios web en linea MB de almacenamiento y puede usar más de
25 horas máquina cada mes, transferencia
de 1 GB de datos de entrada y otro GB de
salida. Una vez concluido el tiempo de
prueba, este servicio se estima tendrá un
costo reducido y asequible a la mayoría de
los usuarios.
Aunque Amazon AWS fue un pionero en el
Amazon AWS sigue creciendo en la oferta mercado de la infraestructura de
de servicios web, después del éxito en sus computación en la nube, muy pronto
anteriores servicios Web basados en enfrentara la competencia, el más próximo es
“computación en la nube” que los usuarios Microsoft con su servicio Windows Azure
y las compañías pueden usar para construir
aplicaciones, servicios como:
Autor
✔ Elastic Compute Cloud (EC2)
✔ Simple Storage Service (Amazon S3) Jenny Saavedra López
Diseño y Edición Revista Atix
✔ Simple Queue Service (Amazon jennysaavedra@gmail.com
SQS)
✔ Flexible Payments Service (Amazon
FPS)
✔ y el recientemente lanzado
CloudFront.
Amazon aws presenta a SimpleDB, que es
un servicio que permite ejecutar consultas
sobre datos estructurados en tiempo real,
sin la complejidad de las bases de datos
relacionales, brindando una opción, para
quienes necesiten una base de datos a
medida, fácil de usar y sin un elevado costo
de mantenimiento.
Amazon SimpleDB, un servicio Web que
provee funciones medulares de base de
datos tales como indexación y consulta.
52.
53.
54.
55. Cristo de La Concordia
Catedral de Cochabamba Vista nocturna de la ciudad
59. Contacto
Para solicitar cualquier información, puedes contactar a:
✔ Esteban Saavedra López (jesaavedra@opentelematics.org )
✔ Williams Chorolque Choque (williamsis@gmail.com)
Publicación
Te invitamos a ser parte de la Revista ATIX. La forma de participar puede ser
enviándonos:
✔ Artículos referidos a áreas como:
✔ Instalación y personalización de Aplicaciones
✔ Scripting
✔ Diseño gráfico
✔ Programación y desarrollo de aplicaciones
✔ Administración de servidores
✔ Seguridad
✔ y cualquier tema enmarcado dentro del uso de Software Libre
✔ Trucos y recetas.
✔ Noticias.
✔ Comics.
✔ Links de interés.