Quantcast
Channel: Planeta Linux Venezuela
Viewing all 1457 articles
Browse latest View live

Angel Cruz: No solo es el software, tambien es el hardware

$
0
0

Desde hace algun tiempo, los media center están de moda, no son más que equipos conectados al televisor que sirven como reproductor multimedia de audio/vídeo, muchos de nosotros en algun momento nos planteamos el hacer un media center algunos lo logran otros, simplemente nos preocupamos en las caracteristicas del equipo donde lo vamos a montar y esta es la razón de este post.

Media Center

Como ya les dije, los media center son el ROCK!!

Debemos tener en cuenta varias cosas:

  • El equipo
  • Tamaño
  • Ruido
  • Consumo eléctrico
  • Periféricos

Pasemos a explicar un poco cada uno de ellos:

  • El equipo

El punto más importante debido a los altos precios que podemos encontrar actualmente pero, no tenemos que tener un equipo nuevo de paquete, incluso un equipo usado -en buen estado obvio- es muy muy util. Podemos conseguir las computadoras y accesorios aquí que se adapten a nuestras necesidades.

  • El tamaño:

Detrás de la tv, junto a ella, dentro del mueble (ese mueble que nuestra mamá nos dice que tengamos cuidado de no rayar xD), o cualquier otro lugar cercano, lo más recomendado es que no se vea mucho (normalmente esto se debe más por nuestras madres ya que no quieren que se vean tantos "aparatos") y sin mencionar que si lo ocultamos de forma que, a la hora de la limpieza no sea afectado por algun tipo de spray/liquido que pueda dañarlo.

  • Ruido:

Algunos Desktop de vez en cuando producen algun ruido con el ventilador así que, hay que estar seguro que no tenemos ese inconveniente y de tenerlo solucionarlo pronto.

  • Consumo eléctrico:

Actualmente es un punto muy importante a tener en cuenta ya que, debemos ser cuidadosos con el/los procesador(es) y discos duros esto por si pensamos dejar activo el media center siempre. Es altamente recomendable usar un UPS por si existe alguna falla de luz (que en .Ve por ejemplo son comunes.)

  • Periféricos

Lo unico que voy a decir en este punto es: Teclado y ratón inalámbrico.

Quizas más adelante si consigo un buen equipo les cuente como fue esa aventura :P


Edwin Orrico: Revive tu Acer Iconia A500 con Android 4.3.1 Gracias a CyanogenMOD

$
0
0

Acer Iconia A500Desde hace un tiempo que he estado tratando de devolver a la vida el Blog, y no existe mejor forma de hacerlo que la de ayudarlos a devolverle la vida a, en mi opinión, una de las mejores tablets producidas por Acer y que no es otra que la Iconia A500.

Para ello, debemos agradecer el trabajo de Thor2002ro, desarrollador en el Foro Tegraowner, quien ha estado trabajando de forma ardua en portar las últimas versiones de Android a esta Tablet, que aunque es un poco vieja sigue siendo muy poderosa.

/*
* No me hago responsable por dispositivos dañados
* tarjetas SD rotas, guerras termonucleares, etc.
* Investiga un poco antes de hacer este procedimiento.
* TU y solo TU has escogido modificar tu Tablet,
* así que no soy responsable de tus actos. Este
* procedimiento  podría anular la garantía de fábrica.
*/

Requerimientos:

  • Acer Iconia A500 Rooteada
  • Bootloader ICS v8
  • Thor Recovery v1.7.3 o superior

Si no tienes los requerimientos anteriores, y tu tablet se encuentra con la última versión oficial de Acer (4.0.3), puedes usar la herramienta Afterota v1.09 y seguir las instrucciones en el post de XDA Developers

Si ya cumples los requerimientos, deberás suscribirte en el Foro Tegraowners para poder descargar la ROM y flashearla de acuerdo a las siguientes instrucciones:

  1. Entrar a modo Recovery (Power + Volumen[+])
  2. Hacer wipe de Data, Cache y Dalvik Cache
  3. Instalar ROM (Tiene su propio instalador luego de seleccionar el Zip). En este paso podrán seleccionar si desean soporte 3G para modems Huawei
  4. Instalar Gapps (Los encontraras en el mismo Foro Tegraowners)
  5. Reiniciar y dejar algunos minutos a que complete la instalación
  6. Disfruta

Ramon Marquez: Intel comienza a probar las mejoras que implementará en Linux 3.15

$
0
0
Los desarrolladores de Intel ya se encuentran probando las mejoras que implementarán en la próxima versión del kernel 3.15. Daniel Vetter ha anunciado a través de la lista de correo de FreeDesktop, que ya se ha comenzado a probar las nuevas mejoras que se implementarán en Linux 3.15, entre esas mejoras están: Se incluyen muchas […]

Milton Mazzarri: Elixir: Primeras impresiones

$
0
0

Elixir: Primeras impresiones

NOTA: Este artículo originalmente lo escribí para La Cara Oscura del Software, un blog colectivo dedicado a desarrollo de software.

Durante el segundo hangout de @rubyVE escuché a @edgar comentar sobre Elixir y en verdad me llamó la atención lo que indicaba, siempre me inquieta conocer al menos un poco sobre otros lenguajes de programación, siempre terminas aprendiendo algo, una buena lección es seguro, sobre todo por aquello de la filosofía del programador pragmático y la necesidad de invertir regularmente en tu portafolio de conocimientos.

Ahora bien, después de leer un artículo de Joe Armstrong, padre de Erlang, en donde afirmaba que tras una semana de haber usado Elixir estaba completamente entusiasmado por lo visto. Con esto era claro que se estaba presentando para mi una gran oportunidad para retomar la programación funcional con Elixir, inicié con Haskell en la Universidad en la materia de Compiladores y la verdad es que no lo he vuelto a tocar.

José Valim es un brasileño, parte del equipo core committer de Rails. Después de sufrir RSI, en su afán por encontrar qué hacer en su reposo se puso a leer el libro: Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages y allí conoció Erlang y su EVM (Erlang Virtual Machine), cierto tiempo después creo este nuevo lenguaje llamado Elixir, en donde uno de sus mayores activos es la EVM, tanto es así que de hecho no existe un costo de conversión al invocar Erlang desde Elixir y viceversa. Todo esto es seguramente es la respuesta de Valim a las limitantes físicas actuales en los procesadores o lo que se conoce también como: “se nos acabó el almuerzo gratis”, sobre todo ahora con recientes anuncios de Parallella y de Intel con los procesadores Xeon Phi.

A pesar de la horrible sintaxis de Erlang, o al menos después de leer a Damien Katz, autor original de CouchDB en What Sucks About Erlang y a Tony Arcieri, autor de Reia (otro lenguaje basado en BEAM), en su artículo The Trouble with Erlang (or Erlang is a ghetto) es fácil concluir que la sintaxis no es la más amenas de todas. Sin embargo, las inmensas habilidades que brinda Erlang para establecer sistemas concurrentes (distribuidos, tolerantes a fallas y code swapping) ha permitido llegar a mantener hasta 2 millones de conexiones TCP en un solo nodo. Es por ello que compañías como Whatsapp, Facebook, Amazon, Ericsson, Motorola, Basho (Riak) y Heroku por mencionar algunas están usando Erlang para desarrollar sus sistemas.

Rápidamente quisiera compartirles mi felicidad por haber iniciado a explorar este lenguaje. Para iniciar tu proyecto tienes un magnífico utilitario llamado mix (inspirado en Leiningen de Clojure). Mix también permite manejar las tareas más comunes como administración de dependencias de tu proyecto, compilación, ejecución de pruebas, despliegue (pronto), entre otras. Incluso puedes programar nuevas tareas, simplemente asombroso, en fin, vamos a jugar:

$ mix help
mix                 # Run the default task (current: mix run)
mix archive         # Archive this project into a .ez file
mix clean           # Clean generated application files
mix cmd             # Executes the given command
mix compile         # Compile source files
mix deps            # List dependencies and their status
mix deps.clean      # Remove the given dependencies' files
mix deps.compile    # Compile dependencies
mix deps.get        # Get all out of date dependencies
mix deps.unlock     # Unlock the given dependencies
mix deps.update     # Update the given dependencies
mix do              # Executes the tasks separated by comma
mix escriptize      # Generates an escript for the project
mix help            # Print help information for tasks
mix local           # List local tasks
mix local.install   # Install a task or an archive locally
mix local.rebar     # Install rebar locally
mix local.uninstall # Uninstall local tasks or archives
mix new             # Creates a new Elixir project
mix run             # Run the given file or expression
mix test            # Run a project's tests

Procedamos con la creación de un nuevo proyecto:

$ mix new demo
* creating README.md
* creating .gitignore
* creating mix.exs
* creating lib
* creating lib/demo.ex
* creating test
* creating test/test_helper.exs
* creating test/demo_test.exs

Your mix project was created with success.
You can use mix to compile it, test it, and more:

    cd demo
    mix compile
    mix test

Run `mix help` for more information.

La estructura del proyecto creado por mix es como sigue:

$ cd demo
$ tree
.
|-- README.md
|-- lib
|   `-- demo.ex
|-- mix.exs
`-- test
    |-- demo_test.exs
    `-- test_helper.exs

2 directories, 5 files

En mix.exs encontramos la configuración del proyecto así como sus dependencias en caso de aplicar, en lib/demo.ex ubicamos la definición del módulo que nos ayudará a estructurar posteriormente nuestro código, en test/test_demo.exs encontramos un esqueleto base para los casos de pruebas asociadas al modulo. Finalmente en test/test_helper.exs radica inicialmente el arranque del frameworkExUnit.

Creemos un par de pruebas sencillas primero:

$ vim test/demo_test.exs
defmodule DemoTest do
  use ExUnit.Case

  test "factorial base case" do
    assert Demo.factorial(0) == 1
  end

  test "factorial general case" do
    assert Demo.factorial(10) == 3628800
  end

  test "map factorial" do
    assert Demo.map([6, 8, 10], fn(n) -> Demo.factorial(n) end) == [720, 40320, 3628800]
  end
end

Evidentemente al hacer “mix test” todas las pruebas fallaran, vamos a comenzar a subsanar eso:

$ vim lib/demo.ex
defmodule Demo do

def factorial(0) do
    1
end

def factorial(n) when n > 0 do
    n * factorial(n - 1)
end

end

En el par de bloques de código mostrado previamente se cubren los dos casos posibles del factorial.

Volvamos a correr las pruebas:

$ mix test       
..

  1) test map factorial (DemoTest)
     ** (UndefinedFunctionError) undefined function: Demo.map/2
     stacktrace:
       Demo.map([6, 8, 10], #Function<0.60019678 in DemoTest.test map factorial/1>)
       test/demo_test.exs:13: DemoTest."test map factorial"/1



Finished in 0.04 seconds (0.04s on load, 0.00s on tests)
3 tests, 1 failures

De las 3 pruebas programadas hemos superado dos, nada mal, continuemos, volvamos a editar nuestro módulo:

$ vim lib/demo.ex
defmodule Demo do
    def factorial(0) do
        1
    end

    def factorial(n) when n > 0 do
        n * factorial(n - 1)
    end

    def map([], _func) do
        []
    end

    def map([head|tail], func) do
        [func.(head) | map(tail, func)]
    end
end

En esta última versión se ha agregado la función map, básicamente esta función recibe una colección de datos y una función que se aplicará sobre cada uno de los elementos de la colección, para nuestros efectos prácticos la función que será pasada a map será el factorial.

Como nota adicional, los bloques de código vistos en el ejemplo anterior prefiero expresarlos de manera sucinta así, cuestión que también es posible en Elixir:

$ vim lib/demo.ex
defmodule Demo do
    @moduledoc """
    Demo module documentation, Python *docstrings* inspired.
    """
    def factorial(0), do: 1

    def factorial(n) when n > 0, do: n * factorial(n - 1)

    def map([], _func), do: []

    def map([head|tail], func), do: [func.(head) | map(tail, func)]
end

Acá se pueden apreciar conceptos como pattern matching, guard clauses, manejo de listas y docstrings (inspirado en Python). Atención, los docstrings soportan MarkDown, junto a ExDoc es posible producir sitios estáticos que extraen los docstrings a partir del código fuente.

Comprobemos los casos desde la consola interactiva iex antes de pasar de nuevo al caso automatizado:

$ iex lib/demo.ex
Erlang R16B01 (erts-5.10.2) [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false]

Interactive Elixir (0.10.2-dev) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> import Demo
nil
iex(2)> h(Demo)
# Demo

Demo module documentation, Python *docstrings* inspired.

iex(3)> Demo.factorial(10)
3628800
iex(4)> Demo.map([6, 8, 10], Demo.factorial(&1))
[720, 40320, 3628800]

Lo previo es una consola interactiva, vimos la documentación e hicimos unas pruebas manuales.

Seguro notaron que al final del ejemplo previo, al hacer el map he cambiado la forma en la que invoco a la función anónima la cual originalmente fue definida en las pruebas como fn(n) -> Demo.factorial(n) end, solamente he recurrido a un modo que permite Elixir y otros lenguajes funcionales para expresar este tipo de funciones de manera concisa, se le conoce como Partials.

Ahora corramos las pruebas automatizadas de nuevo:

$ mix test
Compiled lib/demo.ex
Generated demo.app
...

Finished in 0.04 seconds (0.04s on load, 0.00s on tests)
3 tests, 0 failures

Con eso hemos pasado los casos de pruebas.

En este caso particular, prefiero que las pruebas sean autocontenidas en el módulo, además, no recurrimos a fixtures ni nada por el estilo, así que vamos a cambiar el código para que soporte doctest

$ vim lib/demo.ex
defmodule Demo do
    @moduledoc """
    Demo module documentation, Python *docstrings* inspired.
    """

    @doc """
    Some examples

    iex> Demo.factorial(0)
    1

    iex> Demo.factorial(10)
    3628800

    iex> Demo.map([6, 8, 10], Demo.factorial(&1))
    [720, 40320, 3628800]
    """
    def factorial(0), do: 1

    def factorial(n) when n > 0, do: n * factorial(n - 1)

    def map([], _func), do: []

    def map([head|tail], func), do: [func.(head) | map(tail, func)]
end

Dado lo anterior ya no es necesario tener las pruebas aparte, por lo que reduzco:

$ vim test/demo_test.exs
defmodule DemoTest do
  use ExUnit.Case
  doctest Demo
end

Comprobamos la equivalencia:

$ mix test              
...

Finished in 0.06 seconds (0.06s on load, 0.00s on tests)
3 tests, 0 failures

Simplemente hermoso, cabe resaltar que lo mencionado es solo rascar un poco la superficie de Elixir :-)

Ah, por cierto, ya para finalizar, José Valim está apuntando el desarrollo de Elixir y Dynamo (framework) a la Web, lo ha dejado claro, por eso he visto que algunos programadores Rails están “echándole un ojo” a Elixir, al menos eso es lo que concluyo de los elixir-issues en Github, el reciente screencast de Peepcode (vale la pena comprarlo) y los libros que se avecinan de Dave Thomas y Simon St. Laurent.

Quizá en una nueva oportunidad hablemos de Macros, pase de mensajes entre procesos, Protocolos (inspirados en Clojure protocols), Reducers (inspirados también en Clojure Reducers), HashDict, el hermoso y *nix like operador pipeline (|>), mejorar nuestra implementación de la función map para que haga los cálculos de manera concurrente, entre otros.

Espero hayan disfrutado la lectura, que este artículo sirva de abreboca y les anime a probar Elixir.

Elixir: Primeras impresiones was originally published by Milton Mazzarri at milmazz on September 23, 2013.

Jorge Ortega: Hacer skype accesible en Debian Wheezy

$
0
0

Como algunos saben, la ventana de skype no era accesible con el lector de pantalla Orca, por lo cual teníamos que utilizar pidgin para poder usarlo, pues les cuento que ya tenemos algo de accesibilidad, pero antes de comenzar con los pasos para tener el skype accesible y nos funcione con el lector de pantalla orca, tengo que decir que estas instrucciones las explicó Leandro Benites en la lista de “Tiflo-linux“, así que mi reconocimiento público por haber compartido estos conocimientos.

Ahora manos a la obra, comencemos por instalar el siguiente paquete, así que abramos una consola/terminal y nos loguearemos como superusuario(root):

# aptitude install qt-at-spi

ahora, escribimos lo siguiente para activar la accesibilidad:

# export QT_ACCESIBILITY=1

Ya con esto podremos conversar, enviar archivos, configurar algunas opciones, entre otras cosas, todo esto desde la ventana de skype.

Aprovechando el post, veamos como se envían archivos con skype.

1. Buscamos al contacto al que le queremos enviar el archivo.

2. Presionamos el botón de aplicaciones o menú contextual y luego “Enviar archivo”. (dejamos esta ventana abierta)

3. Nos vamos a la carpeta donde esta el archivo a enviar.

4. Encima del archivo, presionamos de nuevo el menú contextual y luego “Propiedades”

5. En propiedades, tabulamos hasta conseguir la ubicación del archivo, la copiamos con control+c.

6. Pegamos lo copiado (control+V) en la ventana que tenemos abierta del envío de archivos (skype) y le colocamos una barra “/” al final.

7. Vamos de nuevo a las propiedades del archivo y nos copiamos el nombre con control + C.

8. Regresamos a la ventana de envío y al final del texto que teníamos, pegamos (control+V) el nombre del archivo.

9. Presionamos enter y debe escucharse el sonido de envío.

10. Si todo ha salido bien, nos mostrara el progreso del envío, podemos cerrar la ventana con alternar+F4.

11. Listo!!

Nota: es posible que la ventana de envío de skype se congele, para que lo tengan en cuenta.

Saludos a todos!!!


Ramon Marquez: Resultado a la encuesta de GNU/LINUX

$
0
0
Hice una encuesta sobre GNU/LINUX y este ha sido el resultado. Solo GNU/LINUX 17/24 – 70.84% GNU/LINUX con windows – 7/24 – 29.16% GNU/LINUX con Otro OS – 0/24 – 0% Bueno esto es todo , nada mas que añadir.

Ramon Marquez: Se lanza la segunda RC de Linux 3.14

$
0
0
Linus Torvalds ha anunciado el lanzamiento de la segunda Release Candidate de Linux 3.14 trayendo consigo numerosas correcciones, mejoras y actualizaciones de drivers La segunda RC de linux 3.14 ha sido lanzada, en esta nueva versión se añaden numerosos arreglos de errores, mejoras en varias arquitecturas y actualizaciones de drivers. Vale reseñar que Linux 3.14 […]

Ramon Marquez: Se lanza Linux 3.12.10

$
0
0
Greg Kroah-Hartman ha anunciado el lanzamiento de la versión 3.12.10 del kernel Linux añadiendo varias mejoras, arreglos y actualizaciones de drivers La rama 3.12 del kernel Linux ha sido actualizada con la versión 3.12.10, en esta nueva versión, se añaden varias mejoras en algunas arquitecturas (ARM, PowerPC y x86 principalmente), actualizaciones de drivers (ATA, wireless, […]

Luis A. Martínez F.: Ya puedes probar la primera versión alfa de Tribus

$
0
0

Luego de 6 meses de trabajo, el equipo de desarrollo de Canaima GNU/Linux se complace en publicar la primera versión alfa de Tribus (0.1~a1). Tribus es nuestra apuesta por conectar a todos los colaboradores que deseen aportar sus contribuciones en algunas de las múltiples áreas de trabajo de la Metadistribución Canaima GNU/Linux. Es también, además, un sistema que nos permitirá automatizar muchas tareas repetitivas o predecibles que forman parte del proceso productivo de las Comunidades de Software Libre. Si quieres conocer más acerca de Tribus, puedes leer un artículo anterior.

Durante el desarrollo de Tribus participaron 4 desarrolladores del CNTI pertenecientes a la Oficina de Operaciones Canaima, y 2 miembros de la Comunidad Canaima, con diferentes asignaciones y actividades. Utilizamos diferentes tecnologías libres como Python/Django, AngularJS, PostgreSQL, MongoDB, Redis, OpenLDAP, HTML5/CSS3, entre otros, para poner en marcha la planificación de esta versión (0.1~a1), la cual contiene las siguientes características:

  • Sistema de Autenticación con el directorio de usuarios de la Plataforma Colaborativa de Canaima (OpenLDAP): permite que todos los usuarios previos de la Plataforma puedan loguearse en Tribus con sus credenciales (usuario y contraseña), sin necesidad de volverse a registrar. Además, posee las mismas funcionalidades del Sistema de Registro de Canaima (reestablecer y cambiar contraseña, registro de nuevos usuarios, etc).
  • Sistema de Mensajes Cortos (microblogging): permite publicar mensajes cortos (máximo 200 caracteres) en una cola de mensajes para cada usuario. En cada mensaje los usuarios pueden publicar comentarios cortos (máximo 200 caracteres) que luego pueden eliminar, al igual que con los mensajes cortos.
  • Sistema de Perfiles de Usuario: cada usuario de Tribus tiene un perfil de usuario en donde se exponen algunos de sus datos personales, así como también los mensajes cortos publicados recientemente. El perfil permite "seguir" las actualizaciones de mensajes de otros usuarios, haciendo click en "Seguir a este usuario".
  • Sistema de Perfiles de Paquetes: muestra un perfil descriptivo (o ficha técnica) de cada uno de los paquetes que se encuentran en los repositorios de Canaima.
  • Sistema de Búsqueda: permite buscar diversos tipos de elementos que se almacenan en Tribus, hasta ahora, usuarios y paquetes.

Durante los próximos meses estaremos desarrollando la versión 0.2~a1, en donde seguiremos agregando funcionalidades que permitirán seguir mejorando el proceso productivo de la Comunidad Canaima, y por ende, de la Metadistribución Canaima GNU/Linux. Si deseas colaborar en el desarrollo de Tribus, puedes encontrar mayor información en la documentación.

Sin más preámbulo, puedes acceder a Tribus en la siguiente dirección web:

http://tribus.canaima.softwarelibre.gob.ve/

Jorge Ortega: Actualizar espeak en Debian Wheezy

$
0
0

Este es otro aporte de Leandro Benítez y lo comparto con ustedes.

 

Para actualizar Espeak, haremos lo siguiente:

1. Descargamos espeak de su página oficial:

http://espeak.sf.net/download.html

para esta guía es “espeak-1.48.02-source.zip”

2. Descomprimimos el archivo descargado.

3. Buscamos dentro de la carpeta descomprimida la carpeta “src” y eliminamos el archivo “portaudio.h”

4. Le cambiamos el nombre al archivo “portaudio19.h” por “portaudio.h”, desde la misma carpeta anteriormente abierta.

5. Abrimos un terminal/consola y entramos como superusuario (root).

6. Escribimos en el terminal/consola, lo siguiente:

find /usr | grep libespeak

esto nos informa donde se encuentra la librería compartida libespeak.so, en mi caso estaba en: /usr/lib/i386-linux-gnu/, como esta ruta es diferente a /usr/lib/ entonces debemos cambiar el makefile, que se encuentra en la carpeta antes abierta.

6. El makefile debe quedar de la siguiente forma:

————————–

DATADIR=/usr/lib/i386-linux-gnu/espeak-data

 

PREFIX=/usr

BINDIR=$(PREFIX)/bin

INCDIR=$(PREFIX)/include/espeak

LIBDIR=$(PREFIX)/lib/i386-linux-gnu

las lineas 3 y 8, son las únicas que se deben modificar en el makefile, luego que hayas hecho los cambios, guardas el archivo.

7. Ya que hemos realizado los cambios necesarios, en la terminal/consola instalamos los siguientes paquetes:

# aptitude install libpulse-dev portaudio19-dev build-essential

8. Cuando se termine de instalar los paquetes, vamos a la carpeta “src” que se encuentra en la carpeta que descomprimimos, escribiendo en el terminal/consola:

# cd Descargas/espeak-1.48.01-source/src/ y presionamos enter.

9. Al estar dentro de esa carpeta, haremos:

# make

y luego:

# makeinstall

10. Si nos comienza a verbalizar todo extraño, felicidades!, haz actualizado Espeak.

11. reinicia el sistema y disfruta de tu actualización!

Saludos a todos!!!!


Milton Mazzarri: MongoDB University: M101P

$
0
0

A finales del año pasado finalice satisfactoriamente el curso en línea M101P: MongoDB for Python Developers de MongoDB University (otrora conocido como 10gen Education). Sin embargo, no me había tomado el tiempo para compartirles la experiencia, sino hasta ahora.

Cualquier persona sin práctica en el área puede tomar este curso, pues es un abreboca al mundo detrás de MongoDB y explora un buen número de temas relacionados a esta base de datos NoSQL. Aunque está orientado a desarrolladores en Python lo exigido por el curso es mínimo en este lenguaje, incluso dentro de los temas está contemplado una introducción a este lenguaje. Sin embargo, para aquellos que decidan explorar otros lenguajes de programación, MongoDB University ofrece alternativas para programadores en Java, Node.js y también para DBAs.

La duración del curso es de 7 semanas, en base al conocimiento previo que se maneje de las tecnologías puede necesitar de unas 4 a 6 horas semanales de dedicación. La estructura del curso permite ver inicialmente varios videos introductorios que hacen referencia a un tópico en particular, luego podrá reforzar lo visto con una serie de quizzes, en este punto siempre es recomendable contrastar lo visto con la documentación oficial en línea y no dejar de responder todas las tareas de cada semana pues tienen un peso total del 50%, el plazo de respuesta es más que aceptable, se da una semana de plazo para responder. En la última semana será el examen final, el cual consta de 10 preguntas, con ello se obtiene el otro 50%.

En mi caso aprovechaba el tiempo al ser trasladado hacia/desde el trabajo y veía fuera de línea los videos ofrecidos por MongoDB University. Luego, al retornar a casa en las noches o los fines de semana respondía los quizzes y las asignaciones, de ese modo me fue posible lograr aprobar sin problemas el curso, además, al final recibes un certificado de aprobación, aunque lo más importante para mi fue aprender algunas cuestiones que aún desconocía de MongoDB, las semanas podrían resumirse como siguen:

En la primera semana se ve una introducción a MongoDB, se compara en cierta medida con el esquema relacional y se plasma un bosquejo del desarrollo de aplicaciones con MongoDB. También se explora el shell y se introduce la notación JSON, a partir de acá se crean arrays, documentos y subdocumentos, entre otros detalles de la especificación. También se comienza a preparar el ambiente de trabajo futuro, es decir, se explica como instalar MongoDB en diversas plataformas, así como Python, Bottle (microframework para desarrollo Web en Python) y pymongo, éste último ofrece un conjunto de herramientas para interactuar con MongoDB desde Python. Ya para finalizar las sesiones de la semana, se da una introducción al lenguaje de programación Python y manejo básico del framework Bottle.

La segunda semana se tiene mayor interacción con el shell de MongoDB, se inicia el proceso de CRUD, se podrán ejecutar consultas por medio de find, findOne. Se comienza el uso de operadores de comparación de campos como $gt y $lt, operadores lógicos como $or, $and, uso de operadores $exists, $type, conteo de consultas sobre colecciones con el método count(), uso de expresiones regulares (compatibles a las usadas en Perl) a través del operador $regex1, consultas sobre elementos dentro de arrays con los operadores $in y $all, actualizaciones de arrays a través de $push, $pop, $pull, $pullAll y $addToSet. Además, uso de operadores de actualización $set y $unset para establecer o eliminar campos de un documento respectivamente. Actualización de documentos existentes y la posibilidad de utilizar opciones como upsert (operación que permite hacer una actualización si el documento en cuestión existe, de lo contrario, se realiza una inserción automática) o multi (actualización múltiple). Ya para finalizar la segunda semana se deja de lado un poco el shell y se comienza el mismo proceso de interacción descrito previamente pero en esta ocasión desde pymongo.

La tercera semana nos podemos encontrar con temas enfocados al área de modelado de datos, pues MongoDB ofrece un esquema flexible, incluso cada documento puede manejar un esquema dinámico. Por lo tanto, resulta conveniente estudiar las posibilidades existentes en el modelaje de datos y que la escogencia de un esquema particular apunte a cubrir los requerimientos de la aplicación, explotación de las características propias del motor de base de datos y los mecanismos comunes de obtención de dichos datos. En el transcurso de la tercera semana, se contrasta como ejemplo el modelado de datos relacional de las tablas que pueden estar asociadas a un blog y como cambia dicho modelado desde la visión no relacional, también se cubren temas como las relaciones uno a uno, uno a muchos con referencias a otros documentos, uno a muchos con documentos embebidos, en qué casos puede ser beneficioso embeber datos. Finalmente se explora GridFS para el manejo de blobs, ficheros que normalmente superen el límite de tamaño de cada documento (16MB).

El tema principal de la cuarta semana es el rendimiento, lo cual puede estar influenciado por muchos factores, desde el sistema de gestión de ficheros, hasta la memoria, CPU, tipos de discos, entre otros. Sin embargo, en esta semana se concentrarán en explorar los algoritmos que dependiendo de la situación puede ejecutar rápidamente o no las consultas. Por lo tanto, es necesario explorar conceptos básicos como índices, su creación y descubrimiento, índices con múltiples claves hasta temas como la detección de posible cuellos de botella al no utilizar índices o mala utilización de los mismos. Al finalizar se comienza a explorar los shardings, básicamente es una técnica que permite dividir largas colecciones de datos en múltiples servidores.

La quinta semana se explora una de las funcionalidades mas atractivas de MongoDB: Aggregation framework. Para los que vienen del mundo SQL puede parecerles una respuesta a la agrupación de resultados por grupos, en donde se pueden obtener sumas ($sum), conteos ($count), promedios ($avg) y otras funciones sobre un conjunto de colecciones agrupadas por ciertos valores particulares.

La sexta semana se cubren interesantes temas como la replicación y sharding. La última semana se tiene acceso a 2 casos de estudio, en particular, la primera entrevista es con Jon Hoffman (@Hoffrocket) de Foursquare y la segunda con Ryan Bubinski (@ryanbubinski) de Codecademy.

Después de las entrevistas viene el examen final, el cual cubre el 50% del curso. ¡Éxitos! y recuerde siempre reforzar lo visto en el curso con la documentación oficial, también existen recursos adicionales2 en la red que podrían servirles.

Ya para finalizar quisiera decirles que se animen a intentar unirse al curso que se ofrece de MongoDB, vale la pena intentarlo y verán que son semanas bien aprovechadas.

  1. Resalto que de llegar a necesitar hacer uso de expresiones regulares a través del operador $regex, tenga en cuenta que solo podrá hacer uso eficiente del índice cuando la expresión regular incluye el ancla de inicio de cadena: ^ (acento cincunflejo) y sea case-sensitive.

  2. Puede encontrar material de apoyo introductorio en el libro The Little MongoDB Book de Karl Seguin, también existen guías y presentaciones adicionales que pueden ayudarle a comprender aún más MongoDB, por ejemplo, esta presentación sobre distintas consultas y uso del aggregation framework para explorar datos de resultados la NBA.

MongoDB University: M101P was originally published by Milton Mazzarri at milmazz on February 17, 2014.

Milton Mazzarri: jQuery best practices

$
0
0

After some time working with C programming language in a *NIX like operating system, recently I came back again to Web Programming, mostly working with HTML, CSS and JavaScript in the client-side and other technologies in the backend area.

The current project I’ve been working on, heavily relies on jQuery andHighcharts/Highstock libraries, I must confess that at the beginning of the project my skills in the client-side were more than rusted, so, I began reading a lot of articles about new techniques and good practices to catch up very quickly, in the meantime, I start taking some notes about “best practices”1 that promotes a better use of jQuery2, I hope you find this information useful, if you have more tips or any doubt please leave your comments at the end of this article.

The first recommendation is to use the last version of jQuery, the reason is that in new releases you will find new features, and also a good amount of bugs and performance problems are fixed.

One of the benefits to work with jQuery is that it lets you find elements inside of the DOM using a syntax similar to the CSS selectors3. But, please, take into account the following considerations.

Modern browser support getElementsByClassName, querySelector andquerySelectorAll directives. However, old browser versions only offer support for getElementById and getElementByTagName directives. So, if you are only targeting recent version of browsers, you might not need anything more than what the browser offers.

One of the first tips that you need to know is this: Have preference over IDs whenever it’s possible, even in old browser versions the search based on the ID of an element is fast because the jQuery selector internally is converted to the native getElementById directive.

$("#myelement");// Good

Avoid the tag prefix when you search for an id:

$("div#myelement");// Bad

The example above creates an inefficient query because in the first place we traverse all the div tags in the document, after that we look up themyelementid.

In the same way, it’s redundant to nest multiple IDs in a jQuery selector:

$("#content #myelement");// Bad

In this case always use the most specific id.

$("#myelement");// Remember, keep it simple

Also, if you want to select multiple elements, this implies that you need to traverse all the DOM, which can generate a hit in your query performance, so, you can avoid this negative impact descending from the most near ID element, for example, imagine that you need to capture all the input elements inside of a form which id is #myform (yes, I know, this ID name sucks, remember, it’s just for example purposes)

$("#myform input")// Good$("#myform").find("input")// Better

Avoid the selection of elements only by class

Avoid to select an element only by its class, the major hit in performance occurs when your browser doesn’t support the native call getElementByClassName, in old versions (like IE 6/7/8 and Mozilla Firefox 2) jQuery needs to examine each element in the page to determine where is the class that we are looking for.

$(".myclass");// Bad

One workaround that you can use is to prefix the search with the tag element associated with the class “myclass”.

$("div.myclass")// Good$("#container").find(".myclass")// Better

But if you are targeting only modern browsers, you better trygetElementsByClassName().

See: jQuery class vs. tag qualified class selector

Cache

Whenever you need to use multiple times the object returned by a jQuery selector, please store that object in a variable, avoid the following practice:

$("#intro").css("color","blue");$("#intro").css("font-size","1.2em");$("#intro").text("Hello World!");

In this case you are making three queries to get the same object!, you can improve the example above as follows:

var$intro=$("#intro");$intro.css("color","blue");$intro.css("font-size","1.2em");$intro.text("Hello World!");

In the example above we store the object (cache) returned by the jQuery selector, after that we apply multiple methods over the same object.

Please note that the name of the local variable has the ‘$’ prefix, that’s not really necessary, but some JavaScript developers have adopted this convention that facilitates them to remember that local variable stores the results of a jQuery selector. If you prefer you can avoid this “convention”. The important thing here is that if you need to apply more than one method over the same object you must store this object in a local variable first.

Another advantage of storing objects in cache memory is that you can make sub- queries, just look at the following example:

<ulid="groceries"><liclass="meat">Chicken</li><liclass="meat">Turkey breasts</li><liclass="oil">Olive oil</li><liclass="oil">Canola oil</li></ul>

And now we apply some queries over the unordered list:

var$groceries=$("#groceries");

After that we make some sub-queries:

var$meat=$groceries.find("li.meat"),$oil=$groceries.find("li.oil");

The principal benefit of store jQuery objects in memory is that the subsequent queries don’t need to traverse again the DOM.

See: jQuery Cached Set

Method chaining

Look at the following example:

var$intro=$("#intro");$intro.css("color","blue");$intro.css("font-size","1.2em");$intro.text("Hello World!");

Most of the jQuery methods returns an object, that feature facilitate the method chaining over the same element:

var$intro=$("#intro");$intro.css("color","blue").css("font-size","1.2em").text("Hello World!");

See: jQuery chaining

Group the set of parameters over the same method

You can rearrange the previous example as this:

$intro.css({"color":"blue","font-size":"1.2em"}).text("Hello World!");

This way you can reduce the number of times that you need to call the same methods over the same objects. This technique create a unique literal object that combines the set of parameters that we’ll use to pass information to the method.

Minimize the use of .append(), .insertBefore() and .insertAfter()

If you want to use the .append() method, try to avoid its use inside a loop, in the first place you can try to generate HTML strings in memory, after your cycle ends you can append your new string to the content instead of apply the.append() method inside your cycle.

Considering the following HTML structure:

<ulid="demo"><!-- Content added via JS --></ul>

Please, avoid the following pattern:

var$demo=$("#demo"),elements=["one","two","three"];$.each(elements,function(i){$("<li/>").text(elements[i]).appendTo($demo);});

One approach can be this:

var$demo=$("#demo"),elements=["one","two","three"],string="";for(vari=0,l=elements.length;i<l;i++){string+="<li>"+elements[i]+"</li>";}$demo.append(string);

Also, you can replace the .append() method with .replaceWith() in some cases:

var$demo=$("#demo"),elements=["one","two","three"],string="<ul id=\"demo\">";for(vari=0,l=elements.length;i<l;i++){string+="<li>"+elements[i]+"</li>";}string+="</li>";$demo.replaceWith(string);

Event delegation

Take this HTML structure as an example:

<nav><ul><liid="home">Home</li><liid="about">About</li><liid="contact">Contact</li></ul></nav>

One way to manage the navigation buttons are this:

$("#home").click(function(){// do something});$("#about").click(function(){// do something});$("#contact").click(function(){// do something});

This is really terrible because you bound an event to multiple DOM elements.

You can mitigate the example above as this:

var$nav=$("nav");$nav.on("click","#home",function(){// do something});$nav.on("click","#about",function(){// do something});$nav.on("click","#contact",function(){// do something});

In the example above we use event delegation, this means that we need to bind to a single element and intercept events as they bubble up the DOM tree.

If the previous methods do the same at the click event you can rearrange the example above as this:

var$nav=$("nav");$nav.on("click","li",function(){// do something});

Remember, the idea behind event delegation is to bind to a single root element and then wait an intercept events as they bubble up the DOM tree.

Pseudo selectors

One the of the slowest jQuery selectors are pseudo and attribute selectors, so, use this selectors with precaution.

$(":visible, :hidden");$("[attribute=value]");

The performance hit is greater in this cases because jQuery can’t take advantage of a native call. In modern browsers querySelector() and querySelectorAll() can help us.

See: id vs. class vs. tag vs. pseudo vs. attribute selectors

$.each() or $fn.each() loops

Whenever you can, try to use a plain for (in some modern browsers forEach is even faster than for) over the jQuery $.each() function. Also, you can gain some benefits if you cache in memory the length of your container:

// Goodfor(i=0;i<values.length;i++){// do something}// Betterfor(vari=0,l=values.length;i<l;i++){// do something}

See: Nesteds: JQuery each vs native JS for loop

References

  1. Please take this “best practices” with a grain of salt, do your research and see if this recommendations applies in your web clients, in my case, I need to provide support for some older browsers (IE 7/8/9 mostly).

  2. As a side note, besides jQuery nowadays are used by a large percentage of sites, according to W3Techs, jQuery now runs on every second website (2012). However, currently exists a trend that states that you need to avoid jQuery when it’s possible, so, whenever it’s possible try to use native JavaScript, one example of this trend is You Might Not Need jQuery website.

  3. You might find useful some other alternatives as qwery and Sizzle.

jQuery best practices was originally published by Milton Mazzarri at milmazz on February 24, 2014.

Oliver Rivas: Conectarse a Twitter y Facebook usando TOR para proteger tu privacidad

$
0
0

The Onion Ring (TOR) protege tu privacidad haciendo que tu conexión navegue a través de una red distribuida por todo el mundo. Evita que alguien malintencionado o un gobierno totalitario se de cuenta que sitios visitas y al mismo tiempo que sitios malintencionados sepan tu ubicación geográfica.

La instalación en dispositivos Android es sencilla y configurar el cliente oficial de Twitter para que navegue por esta red es aun mas facil como lo puedes ver en este video.

Como ven el procedimiento es fácil y una vez instalada ORBOT en cuestión de segundos pueden tener el cliente oficial de Android configurado para que use como proxy HTTP la IP 127.0.0.1 a través del puerto 8118. Cabe destacar que a pesar de que mi tablet tiene acceso a root en ningún momento me pidio autorizacion para usar el modo super usuario asi que esto debería de funcionar en teléfonos o tablets sin acceso a root.

Las aplicaciones que use en este video las pueden descargar desde el Play Store de Google.



Y para Facebook como hago?

En el caso de Facebook recomiendo usar Tinfoil for Facebook y configurar el HTTP Proxy, Puedes descargar la aplicación directo desde el Play Store . Si quieres saber mas de esta aplicación hecha por un Venezolano no dejes de pinchar en Tinfoil Facebook: funcional y respeta tu privacidad.

Aquí les dejo una captura de pantallas que les muestra como configurar Tinfoil for Facebook, usen los mismos datos para el proxy que usaron para configurar twitter (127.0.0.1 a través del puerto 8118).

Configurar TOR en Tinfoil for Facebook


Desde la computadora.

Si también quieres mayor privacidad desde tu computadora puedes usar TOR Browser Bundle que es una suite the software que incluye el cliente de TOR y una versión de Firefox pre-configurada para usar este cliente. Tor Browser Bundle soporta distintas versiones de los sistemas operativos Windows, Linux y Mac OS X.

César Sevilla: Días de Software Libre en el X Salón de Arte Digital de Maracaibo

$
0
0

1546369_10152125041544300_839636421_nSalón de Arte Digital, es un evento realizado por 10 ediciones, que reúne artistas multimedia de todo el mundo. Este edición ofrece nuevas tecnologías, nuevos medios en las artes y en las ciencias. Este evento se estará realizando desde el 10 al 28 de Marzo 2014.

Lugar: PDVSA La Estancia Maracaibo. Ubicado en la Calle 77 (bulevar 5 de Julio), parroquia Olegario Villalobos del Municipio Maracaibo, al lado del Edificio Principal de Enelven.

Costo: ENTRADA TOTALMENTE LIBRE Y GRATUITO

Inscripciones: Desde el 5 de marzo de 2014, en la recepción de PDVSA La Estancia Maracaibo.

Cronograma de Software Libre.

Primer día – 10 de marzo

Titulo:¿Qué es el Software Libre?

Descripción: esta cátedra habla de Historia, Definición y Filosofía de The GNU Project, Free Software Foundation (FSF), Software Libre (Free Software), El Núcleo Linux, Código Abierto (Open Source), Open Source Initiative (OSI). Además trata sobre las Licencias, Distribuciones, Alternativas Libres, Comunidades de Software Libre, Ventajas, Desventajas, Situación Actual del SL en Vzla, Sitios en Internet.

Duración: 1 hora académica

Titulo:¿Qué es Hardware Abierto?

Descripción: esta cátedra habla de la Problemática actual, Historia, Lee Felsenstein y el Homebrew Computer Club, FPGAs y Open Design Circuits. Definición y Filosofía según su naturaleza (Hardware estático y Hardware reconfigurable); y según su filosofía, Open Hardware, Open source hardware, Free hardware design, Libre hardware design, Free hardware. Además trata sobre el Licenciamiento, Comercialización, Modelos de intercambio, Proyectos, Comunidades de Hardware Abierto, Ventajas y Desventajas, Situación actual en Venezuela, Conclusiones, Sitios de Referencia.

Duración: 1 hora académica

Titulo: Del uso de la tecnología a la innovación tecnológica.

Descripción: esta cátedra habla de la experiencias de muchos activistas Venezolanos dentro de las comunidades de tecnologías libres y su formación socio política ante la tecnología y su impacto en la sociedad, formando a nuevos ciudadanos, estos actualmente no solo son activista en tecnologías que promuevan el conocimiento libre sino forman parte muchos movimientos culturales y sociales a nivel mundial, nacionalmente y regionalmente. Con esta experiencia se educa como involucrarse en estos movimientos.

Duración: 1 hora académica

Segundo día – 11 de marzo

Titulo: Distribuciones de Software Libre Venezolanas

Descripción: esta cátedra habla de Distribuciones GNU/Linux, ¡GNU/Linux a la medida!, Clasificación de Distribuciones, Historia en Árbol genealógico y Mapa mental de distros. Además las Implementaciones Venezolanas de distros como: HVLinux, Bluewall GNU/Linux, KnoppixMED, LinuxDoc, Latinux, GNU/Linux – Venezuela, Soliedelca, Lavicux, ULANIX y sus sabores, Kuntur y CANAIMA GNU/Linux, con algunas demostraciones y anexos las referencias a Sitios en Internet.

Duración: 1 hora académica

Titulo: Proyecto Canaima

Descripción: esta cátedra habla del proyecto Canaima surge como un proyecto para normalizar la migración a Software libre en al APN en Venezuela, en esta charla busca compartir las experiencia del proyecto Canaima globalmente no solo como un producto tecnológico sino como el estado ofreció la apertura a la comunidades de software libre para compartir saberes y ayudar a construir una base de socio productiva en tecnologías libres en Venezuela, aquí se comenta un poco de su historia, productos tecnológicos y organización social de la comunidad hasta el momento, encuentros comunitarios y recursos tecnológicos disponibles en redes sociales e Internet para colaborar virtualmente con el proyecto.

Duración: 1 hora académica

Titulo: Diseño Gráfico Digital en Software Libre

Descripción: esta cátedra habla de Alternativas Libres para Editor de gráficos; Editor de gráficos vectoriales; Editor de animación 2D; Editor de gráficos 3D; Editor de gráficos de post-producción; Editor de Fuentes; Maquetación y Publicación; Animaciones Web; Editores Web; con sus características técnicas y tabla de costos por licenciamiento de software. Además trata sobre Sitios en Internet y Demostraciones.

Duración: 1 hora académica

Tercer día – 12 de marzo

Titulo: Sistema de gestión de contenidos Plone

Descripción: esta cátedra habla de como crear facilmente usando el software de sistema de gestión de contenidos Plone ideal para creacion de Paginas Web

Plone es el mas longevo, poderoso, flexible, seguro y premiado sistema de gestión de contenido escrito en Python. Utilizado en sitios como Brasil.gov.br, CIA.gov y VTV.gob.ve, él es conocido por su seguridad e flexibilidad. En esta charla exploraremos, ¿cómo funciona él?, ¿cómo funciona su comunidad organizada?, y vemos como los usuarios exigentes con fechas límite de entrega le encanta Plone, ya que les permite no tener que inventar la rueda de nuevo cada vez que trabajan en la carga de contenidos en la Web.

Duración: 1 hora académica

Titulo: Traducción asistidas por computadoras en Software Libre

Descripción: esta cátedra habla de ¿Qué es la traducción?, describir los recursos del traductor, también como ha evolucionado hasta la actualidad la industria de la Lengua. Herramientas CAT (Computer-aided Translation), Memorias de Traducción. Se ofrece un análisis comparativo entre herramientas CAT privativas y libres donde se describen sus ventajas y desventajas, costo de licencias de software y soporte. También se ofrecen algunos recursos en la red y demostraciones.

Duración: 1 hora académica

Titulo: Montaje de un proyecto de Software Libre

Descripción: esta cátedra habla de ¿Cómo montar un proyecto de software libre?, lo que hay que hacer antes de comenzar el proyecto se explican los temas de: Lenguaje de programación, Plataforma, Especificaciones, Luego se debe definir algunas metodologías de desarrollos que se asemejen a SL y las herramientas de trabajo colaborativo para el desarrollo y control de gestión y proyectos para definir roles del proyecto, uso de recursos CVS, Lista de correos; tales como algunos recursos de la Web 2.0 disponibles para empezar a organizarse, y también sobre algunos FOSP-hostsites. Y una vez que esta listo la primera publicación se deben tomar en cuentas los aspectos legales, buenas prácticas al liberar, la publicidad del proyecto, el empaquetamiento y distribución (fuentes y binarios), el cuidado con la imagen, el soporte a usuarios: sitios de referencia, BTS, comunidades. Además trata sobre el Tiempo de dedicación al proyecto, Conclusiones, Referencias, Sitios en Internet, Demostraciones, Preguntas.

Duración: 1 hora académica

Del 13 al 18 de marzo

Actividades simultaneas de talleres de diseño gráfico y dibujo, exposición de arte. Mas información recepción de PDVSA La Estancia Maracaibo.

Para difundir a través de las redes sociales:

Google+: https://plus.google.com/u/0/events/c0shdk3hpl860gg9v90iq7lbsu0

Facebook: https://www.facebook.com/events/595560203864477/


Kenner Roa: Instalando Oracle 11g Release 2 bajo FreeBSD 9

$
0
0
Está Escrito:
Examináis las Escrituras porque vosotros pensáis que en ellas tenéis vida eterna; y ellas son las que dan testimonio de mí; (Juan 5:39)

Tomado de:DiabloEnLosDetalles

Continuamos dotando de funcionalidad a nuestra Jaula Debian GNU/Linux recién instalada. Para ello me he decidido por instalar Oracle 11gR2 para Linux, por tratarse de uno de los paquetes de software mas exigentes que se pueden encontrar; me parece que es una buena  forma de explorar los limites de la solución propuesta.

Otra motivación es el hecho de que en el Manual de FreeBSD el capítulo dedicado a la instalación de Oracle se refiere a la versión Oracle 8.0.5, que es bastante antigua, y esta circunstancia estimuló mi curiosidad.

Esta plataforma no resulta idónea para un entorno de producción ya que no está certificada por Oracle, lo cual no le resta utilidad como entorno de pruebas e incluso entorno de desarrollo para pequeños proyectos; depende de la aventurado que sea uno.

Las ventajas de emplear FreeBSD como infraestructura para entornos virtualizados son:

  1. Sistema de Ficheros ZFS.
  2. Pila de TCP/IP virtual.
  3. Seguridad de red con pf.
  4. Análisis de rendimiento con Dtrace.


Las ventajas de emplear Debian GNU/Linux dentro de una Jaula son:

  1. Debian GNU es una de las distribuciones Linux mas fiables y con un ciclo de lanzamiento de versiones muy previsible. 
  2. Utilizar una distribución completa nos ahorra bastante trabajo a la hora de instalar Oracle.
  3. Disponer de documentación técnica actualizada.

Como no soy partidario de instalar entornos gráficos en los servidores, especialmente si tienen que dar soporte a un motor de bases de datos tan pesado como lo es Oracle, voy a realizar una instalación en modo texto, empleado un fichero de respuestas para el instalador de Oracle.



Tareas previas a la instalación de Oracle


En todas las instalaciones de la base de datos Oracle hay que preparar el S.O para que se puede instalar y ejecutar correctamente. Estas tareas previas son específicas de cada S.O y la versión de Oracle.


Tareas específicas en FreeBSD


Las siguientes tareas se deben ejecutar como root:

1.-  Clonamos la Jaula deb-master previamente definida, utilizando la versión Lenny, para crear la Jaula debora:

root@morsa:/root # zfs clone fbsdzpool1/jailz/deb-master@deboostrap fbsdzpool1/jailz/debora

2.- Configuramos semáforos, memoria compartida y E/S asíncrona conforme a los requerimientos de Oracle 11gR2, para ello editamos /boot/loader.conf y /etc/sysctl.conf.

// Comienza  el fragmento de /boot/loader.conf 

kern.ipc.shmmni=4096
kern.ipc.semmns=32000
kern.ipc.semmni=128
aio_load="YES"

// Fin del fragmento de /boot/loader.conf
  
// Comienza  el fragmento de /etc/sysctl.conf

security.jail.sysvipc_allowed=1
kern.ipc.shmall=2097152
kern.ipc.shmseg=128
kern.ipc.shmmin=1
kern.ipc.shmmax=1073741824
kern.ipc.semaem=16384
kern.ipc.semvmx=32767
kern.ipc.semusz=632
kern.ipc.semume=50
kern.ipc.semopm=100
kern.ipc.semmsl=340
kern.ipc.semmnu=150

// Fin del fragmento de /etc/sysctl.conf 

3.- Habilitamos la memoria compartida en la Jaula debora.
// Comienza fragmento de /jailz/etc/jail.conf

debora {
  path = /jailz/debora;
  allow.mount;
  allow.sysvipc;
  host.hostname = debora;
  mount.devfs;
  mount.fstab="/jailz/etc/fstab.debora";
  ip4.addr = 127.0.0.25;
  interface = lo0;
  exec.start = "/etc/init.d/rc 3";
  exec.stop = "/etc/init.d/rc 0";
}
// Fin del fragmento de /jailz/etc/jail.conf 



4.- Iniciamos la jaula y nos conectamos a ella.

root@morsa:/root # jail -f /jailz/etc/jail.conf -c debora
debora: created
Starting periodic command scheduler: crond.
root@morsa:/root # jls
   JID  IP Address      Hostname                      Path
     1  127.0.0.25      debora                        /jailz/debora
root@morsa:/root # jexec 1 /bin/bash
debora:/# uname -a
Linux debora 2.6.16 FreeBSD 9.1-RELEASE-p4 #0: Mon Jun 17 11:42:37 UTC 2013 i686
 GNU/Linux

Tareas específicas en Debian


Los siguientes pasos se ejecutan dentro de la Jaula debora como usuario root:

5 .- Instalamos los paquetes requeridos para Oracle 11gR2 en Debian:

debora:/# apt-get install gcc make binutils lesstif2 rpm libaio1 libdb4.6 libstdc++5 unzip openjdk-6-jdk

Nota: El paquete openjdk-6-jdk se instala para disponer un entorno jre alternativo al proporcionado por el instalador de Oracle.

6.- Creamos los siguientes enlaces simbólicos:

debora:/# ln -s /usr/bin/awk /bin/awk
debora:/# ln -s /usr/bin/rpm /bin/rpm
debora:/# ln -s /usr/bin/basename /bin/basename
7.- Creamos los grupos y usuarios dba, oinstall y oracle.
debora:/# groupadd oinstall -g 1000
debora:/# groupadd dba -g 1001
debora:/# useradd -m -g oinstall -G dba -p passwd -s /bin/bash -d /home/oracle -u 1000 oracle
debora:/# passwd oracle
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
8.- Creamos los directorios para el sofware y la base de datos y les asignamos como propietario el usuario oracle.
debora:/# mkdir -p /oracle/product/11.2.0
debora:/# mkdir -p /oracle/admin/ORATEST/create
debora:/# mkdir /oracle/admin/ORATEST/adump
debora:/# mkdir /oracle/admin/ORATEST/logbook
debora:/# mkdir /oracle/oraInventory
debora:/# mkdir /oracle/oradata
debora:/# mkdir /oracle/flash_recovery_area
debora:/# chown  oracle.oinstall /oracle
debora:/# chown -R oracle.oinstall /oracle/product
debora:/# chown oracle.oinstall /oracle/oraInventory
debora:/# chown -R oracle.dba /oracle/admin
debora:/# chown oracle.dba /oracle/oradata
debora:/# chown oracle.dba  /oracle/flash_recovery_area
9.- Añadimos el nombre de host al fichero /etc/hosts.
debora:/# echo '127.0.0.25 debora' >> /etc/hosts

10.-  Creamos el archivo /etc/oraInst.loc y le asignamos como propietario al usuario oracle:

 // Comienza /etc/oraInst.loc


inventory_loc=/oracle/oraInventory


inst_group=oinstall


 // Fin de  /etc/oraInst.loc


debora:/# chown oracle.oinstall /etc/oraInst.loc



Instalación del Software de Oracle

Los siguientes pasos se ejecutan dentro de la Jaula debora bajo el usuario oracle:

11.- Cambiamos el usuario root a oracle. 

debora:/# su - oracle
oracle@debora:~$ id
uid=1000(oracle) gid=1000(oinstall) groups=1000(oinstall),1001(dba)
oracle@debora:~$
12.- Copiamos al directorio /oracle (por ejemplo) los ficheroslinux_11gR2_database_1of2.zip y linux_11gR2_database_2of2.zip que contienen el instalador y los descomprimimos:
oracle@debora:/oracle $ unzip linux_11gR2_database_1of2.zip
oracle@debora:/oracle unzip linux_11gR2_database_2of2.zip 

13.- Para realizar la instalación desatendida creamos el fichero de respuestas/oracle/database/response/install_debora.rsp. Están marcados en negrita los valores que puede resultar útil modificar, el resto del fichero debe dejarse inalterado, pues esta versión del instalador es problemática y este es el formato que debe mantener el fichero de respuestas.

// Comienza el fichero install_debora.rsp

oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v11_2_0
oracle.install.option=INSTALL_DB_SWONLY
ORACLE_HOSTNAME=debora
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/oracle/oraInventory
SELECTED_LANGUAGES=en
ORACLE_HOME=/oracle/product/11.2.0
ORACLE_BASE=/oracle
oracle.install.db.InstallEdition=SE
oracle.install.db.isCustomInstall=false
oracle.install.db.customComponents=
oracle.install.db.DBA_GROUP=dba
oracle.install.db.OPER_GROUP=dba
oracle.install.db.CLUSTER_NODES=
oracle.install.db.config.starterdb.type=GENERAL_PURPOSE
oracle.install.db.config.starterdb.globalDBName=
oracle.install.db.config.starterdb.SID=
oracle.install.db.config.starterdb.characterSet=AL32UTF8
oracle.install.db.config.starterdb.memoryOption=false
oracle.install.db.config.starterdb.memoryLimit=
oracle.install.db.config.starterdb.installExampleSchemas=false
oracle.install.db.config.starterdb.enableSecuritySettings=true
oracle.install.db.config.starterdb.password.ALL=
oracle.install.db.config.starterdb.password.SYS=
oracle.install.db.config.starterdb.password.SYSTEM=
oracle.install.db.config.starterdb.password.SYSMAN=
oracle.install.db.config.starterdb.password.DBSNMP=
oracle.install.db.config.starterdb.control=DB_CONTROL
oracle.install.db.config.starterdb.gridcontrol.gridControlServiceURL=
oracle.install.db.config.starterdb.dbcontrol.enableEmailNotification=false
oracle.install.db.config.starterdb.dbcontrol.emailAddress=
oracle.install.db.config.starterdb.dbcontrol.SMTPServer=
oracle.install.db.config.starterdb.automatedBackup.enable=false
oracle.install.db.config.starterdb.automatedBackup.osuid=
oracle.install.db.config.starterdb.automatedBackup.ospwd=
oracle.install.db.config.starterdb.storageType=
oracle.install.db.config.starterdb.fileSystemStorage.dataLocation=
oracle.install.db.config.starterdb.fileSystemStorage.recoveryLocation=
oracle.install.db.config.asm.diskGroup=
oracle.install.db.config.asm.ASMSNMPPassword=
MYORACLESUPPORT_USERNAME=username@mailaddress.com
MYORACLESUPPORT_PASSWORD=
SECURITY_UPDATES_VIA_MYORACLESUPPORT=false
DECLINE_SECURITY_UPDATES=true
PROXY_HOST=
PROXY_PORT=
PROXY_USER=
PROXY_PWD=

// Fin del fichero install_debora.rsp

14.- Ejecutamos  el instalador con las opciones indicadas tal y como están: 

oracle@debora:~$ /oracle/database/runInstaller -silent  -ignorePrereq -jreloc /usr/lib/jvm/java-6-openjdk -responseFile /oracle/database/response/install_debora.rsp
Starting Oracle Universal Installer...

Checking Temp space: must be greater than 80 MB.   Actual -2147483648 MB    Passed
Checking swap space: must be greater than 150 MB.   Actual 4096 MB    Passed
Preparing to launch Oracle Universal Installer from /tmp/OraInstall2013-09-01_08-30-45PM. Please wait ...
[WARNING] [INS-32055] The Central Inventory is located in the Oracle base.
   CAUSE: The Central Inventory is located in the Oracle base.
   ACTION: Oracle recommends placing this Central Inventory in a location outside the Oracle base directory.
[WARNING] [INS-32055] The Central Inventory is located in the Oracle base.
   CAUSE: The Central Inventory is located in the Oracle base.
   ACTION: Oracle recommends placing this Central Inventory in a location outside the Oracle base directory.
You can find the log of this install session at:
 /oracle/oraInventory/logs/installActions2013-09-01_08-30-45PM.log
 
The following configuration scripts need to be executed as the "root" user.
 #!/bin/sh
 #Root scripts to run

/oracle/oraInventory/orainstRoot.sh
/oracle/product/11.2.0/root.sh
To execute the configuration scripts:
         1. Open a terminal window
         2. Log in as "root"
         3. Run the scripts
         4. Return to this window and hit "Enter" key to continue

Successfully Setup Software.
15.- Revisamos los logs del instalador.
debora:~# tail -10 /oracle/oraInventory/logs/installActions2013-09-01_08-30-45PM.log
INFO: Validating state <finish>
WARNING: Validation disabled for the state finish
INFO: Completed validating state <finish>
INFO: Terminating all background operations
INFO: Terminated all background operations
INFO: Successfully executed the flow in SILENT mode
INFO: Finding the most appropriate exit status for the current application
INFO: Exit Status is 0
INFO: Shutdown Oracle Database 11g Release 2 Installer
INFO: Unloading Setup Driver
16.- Si la instalación ha sido correcta, ejecutamos como usuario root los scriptsorainstRoot.sh y root.sh :
oracle@debora:~$ logout
debora:~# id
uid=0(root) gid=0(root) groups=5(tty)
debora:~# /oracle/oraInventory/orainstRoot.sh
Changing permissions of /oracle/oraInventory.
Adding read,write permissions for group.
Removing read,write,execute permissions for world.

Changing groupname of /oracle/oraInventory to oinstall.
The execution of the script is complete.

debora:~# /oracle/product/11.2.0/root.sh
Check /oracle/product/11.2.0/install/root_debora_2013-09-01_20-39-01.log for the
 output of root script

debora:~# more /oracle/product/11.2.0/install/root_debora_2013-09-01_20-39-01.log

Running Oracle 11g root.sh script...

The following environment variables are set as:
    ORACLE_OWNER= oracle
    ORACLE_HOME=  /oracle/product/11.2.0

Creating /etc/oratab file...
Entries will be added to the /etc/oratab file as needed by Database Configuration Assistant when a database is created
Finished running generic part of root.sh script.
Now product-specific root actions will be performed.
Finished product-specific root actions.
 

Creación de una base de datos de Pruebas


Antes de crear una base de datos necesitamos  un fichero de parámetros init.ora y un script con los comandos SQL que ejecutan la creación de la base de datos.


17.- Creamos el fichero /oracle/admin/ORATEST/create/initORATEST.ora:

// Comienza el fichero initORATEST.ora

db_name='ORATEST'
db_domain=''
sga_target=512M
sga_max_size=1G
pga_aggregate_target=1G
processes = 150
audit_trail ='db'
db_block_size=8192
db_recovery_file_dest='/oracle/flash_recovery_area'
db_recovery_file_dest_size=2G
diagnostic_dest='/oracle/'
#dispatchers='(PROTOCOL=TCP) (SERVICE=ORCLXDB)'
open_cursors=300
remote_login_passwordfile='EXCLUSIVE'
undo_tablespace='UNDOTBS1'
compatible ='11.2.0'
db_create_file_dest='/oracle/oradata'
filesystemio_options = SETALL
disk_asynch_io = TRUE

// Fin del fichero initORATEST.ora

18.- Creamos los ficheros /oracle/admin/ORATEST/create/ORATEST.sh y/oracle/admin/ORATEST/create/cr_ORATEST.sh:
// Comienza el fichero ORATEST.sh
ORACLE_HOME=/oracle/product/11.2.0
ORACLE_SID=ORATEST

NLS_LANG=American_america.WE8ISO8859P15
ORA_NLS11=${ORACLE_HOME}/nls/data
PATH=$PATH:$ORACLE_HOME/bin
export PATH
export ORACLE_BASE
export ORACLE_HOME
export ORACLE_SID
export NLS_LANG
export ORA_NLS33 
// Fin del fichero ORATEST.sh

// Comienza el fichero cr_ORATEST.sh
#!/bin/bash

. ./ORATEST.sh

rm ${ORACLE_HOME}/dbs/orapw${ORACLE_SID}
orapwd file=${ORACLE_HOME}/dbs/orapw${ORACLE_SID} password=diablo entries=2

rm -r /oracle/oradata/${ORACLE_SID}

sqlplus /nolog << EOF
spool ../logbook/cr_${ORACLE_SID}.log
conn / as sysdba;
CREATE SPFILE
FROM   PFILE='/oracle/admin/${ORACLE_SID}/create/init${ORACLE_SID}.ora';

DISCONNECT;

conn / as sysdba;

STARTUP NOMOUNT;
CREATE DATABASE ${ORACLE_SID}
CHARACTER SET WE8ISO8859P15
NATIONAL CHARACTER SET UTF8
USER SYS IDENTIFIED BY diablo
USER SYSTEM IDENTIFIED BY diablo
EXTENT MANAGEMENT LOCAL
DEFAULT TEMPORARY TABLESPACE temp
UNDO TABLESPACE undotbs1
DEFAULT TABLESPACE users;

@?/rdbms/admin/catalog.sql
@?/rdbms/admin/catproc.sql
@?/sqlplus/admin/pupbld.sql

SHUTDOWN IMMEDIATE;

EXIT
spool off

EOF 
// Fin del fichero cr_ORATEST.sh

19.- Concedemos a los scripts los permisos de ejecución:

oracle@debora:/oracle/admin/ORATEST/create$ chmod 750 *.sh
oracle@debora:/oracle/admin/ORATEST/create$ ls -la
total 31
drwxr-xr-x 2 oracle dba   5 Sep  1 21:04 .
drwxr-xr-x 5 oracle dba   5 Sep  1 20:11 ..
-rwxr-x--- 1 oracle dba 258 Sep  1 21:02 ORATEST.sh
-rwxr-x--- 1 oracle dba 782 Sep  1 21:04 cr_ORATEST.sh
-rw-r--r-- 1 oracle dba 490 Sep  1 21:01 initORATEST.ora
20.- Iniciamos la creación de la base de datos:
oracle@debora:/oracle/admin/ORATEST/create$ nohup ./cr_ORATEST.sh &
21.- Comprobamos que la creación de la base de datos a concluido correctamente:
oracle@debora:/oracle/admin/ORATEST/create$ tail -10 nohup.out
SQL> CREATE PUBLIC SYNONYM PRODUCT_USER_PROFILE FOR SYSTEM.PRODUCT_PRIVS;

Synonym created.

SQL>
SQL> -- End of pupbld.sql
SQL> SQL> Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> SQL> Disconnected from Oracle Database 11g Release 11.2.0.1.0 - Production


22.- Arrancamos la base de datos y nos conectamos.

oracle@debora:/oracle/admin/ORATEST/create$  . ./ORATEST.sh
oracle@debora:/oracle/admin/ORATEST/create$ sqlplus /nolog

SQL*Plus: Release 11.2.0.1.0 Production on Sun Sep 1 22:09:58 2013

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

SQL>  conn / as sysdba;
Connected to an idle instance.

SQL> startup;
ORACLE instance started.

Total System Global Area 1071333376 bytes
Fixed Size                  1341312 bytes
Variable Size             750782592 bytes
Database Buffers          314572800 bytes
Redo Buffers                4636672 bytes
Database mounted.
Database opened.
SQL>
SQL> select * from v$instance;

INSTANCE_NUMBER INSTANCE_NAME
--------------- ----------------
HOST_NAME
----------------------------------------------------------------
VERSION           STARTUP_T STATUS       PAR    THREAD# ARCHIVE LOG_SWITCH_WAIT
----------------- --------- ------------ --- ---------- ------- ---------------
LOGINS     SHU DATABASE_STATUS   INSTANCE_ROLE      ACTIVE_ST BLO
---------- --- ----------------- ------------------ --------- ---
              1 ORATEST
debora
11.2.0.1.0        01-SEP-13 OPEN         NO           1 STOPPED
ALLOWED    NO  ACTIVE            PRIMARY_INSTANCE   NORMAL    NO


SQL> !uname -a
Linux debora 2.6.16 FreeBSD 9.1-RELEASE-p4 #0: Mon Jun 17 11:42:37 UTC 2013 i686
 GNU/Linux

SQL>



Conseguido.


Oracle 11gR2 ejecutándose en FreeBSD 9


23.- Paramos la base de datos ORATEST. 

SQL> SHUTDOWN IMMEDIATE;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> SQL> Disconnected from Oracle Database 11g Release 11.2.0.1.0 - Production
24.- Paramos la jaula debora.
root@morsa:/root # jail -f /jailz/etc/jail.conf -r debora
Using makefile-style concurrent boot in runlevel 0.
Stopping device state change daemon: devd.
Asking all remaining processes to terminate...done.
All processes ended within 1 seconds....done.
Stopping enhanced syslogd: rsyslogd.
/etc/init.d/umountnfs.sh: 106: cannot open /etc/mtab: No such file
Deconfiguring network interfaces...done.
Cleaning up ifupdown....done. 
Deactivating swap...done.
mount: /: unknown special file or file system
Will now halt.
ifdown: shutdown usbus0: Operation not permitted
ifdown: shutdown ath0: Operation not permitted
ifdown: shutdown usbus1: Operation not permitted
ifdown: shutdown lo0: Operation not permitted
ifdown: shutdown wlan0: Operation not permitted
startpar: service(s) returned failure: umountnfs.sh ... failed!
deb-master: removed

23.- Hacemos un snapshot de la jaula debora para así disponer de una plantilla de unajaula configurada para bases de datos Oracle.


root@morsa:/root # zfs snapshot fbsdzpool1/jailz/debora@oracle11gR2

 

Consideraciones finales


La decisión de instalar en la Jaula la versión Lenny de Debian GNU/Linux está motivada por dos razones; por una parte, la versión de kernel de Linux que requiere el instalador de Oracle como requisito previo es la 2.6.9 y por otro lado la versión de kernel mínima para squeeze es la 2.6.18, que es superior a la admitida por el módulo de compatibilidad para Linux de FreeBSD 9. 

// Comienza el fragmento de installActions.log

INFO: *********************************************
INFO: OS Kernel Version: This is a prerequisite condition to test whether the system kernel version is at least "2.6.9".
INFO: Severity:CRITICAL
INFO: OverallStatus:SUCCESSFUL
INFO: -----------------------------------------------
INFO: Verification Result for Node:debora
INFO: Expected Value:2.6.9
INFO: Actual Value:2.6.16
INFO: -----------------------------------------------
INFO: *********************************************

// Fin del fragmento de installActions.log 

Durante el desarrollo de este Post, detecté un problema durante la ejecución del Instalador de Oracle, que de forma aleatoria fallaba en en arranque inicial. Una manera de evitar este problema consiste en utilizar un jre alternativo al suministrado con el instalador.

No he podido configurar la gestión automática de memoria (AMM) que es una de la nuevas características introducidas en la versión 11g. Esto es así por que no he conseguido configurar el dispositivo /dev/shm dentro de la Jaula.

En consecuencia, no queda mas remedio que emplear la gestión automática de memoria compartida (ASMM) dando valores a los parámetros SGA_TARGET y SGA_MAX_SIZE en el fichero initORATEST.ora.

El sistema de ficheros ZFS sobre el que se ha creado la base de datos no está optimizado para los ficheros de la base de datos, es un aspecto que debe mejorarse para un uso más intenso de la base de datos.

Leonardo Caballero: Días de Software Libre en el X Salón de Arte Digital de Maracaibo

$
0
0
Salón de Arte Digital de Maracaibo

Salón de Arte Digital de Maracaibo

Sobre el Evento

El Salón de Arte Digital de Maracaibo se celebra anualmente con participantes locales y foráneos, con el objetivo de reunir y mostrar el trabajo creativo de todo el que desee participar que involucre la tecnología en su proceso creador o como plataforma. Cada año hay diversos participantes divididos en cuatro categorías: impreso (subdividido en fotografías e ilustraciones digitales y digitalizadas), videos (animación 2D, 3D, Flash y stop motion), música digital y multimedia. Además de una Charla-Foro durante los cuatro días del evento bajo el título Creatividad + Tecnología.

¿De dónde viene la idea de hacer un Salón de Arte Digital en Maracaibo?

Según Fernando Asián, Fundador del Salón de Arte Digital “La idea nace de la necesidad. En Venezuela dejaron de celebrarse salones nacionales de arte desde 1989. Como artista plástico participé en muchos de ellos, siendo reconocido con premios como el Premio Emilio Boggio para Dibujo en el Salón Arturo Michelena, y el Premio Metro de Caracas para Dibujo, en el Salón Nacional de Artes Plásticas, 1989, entre otros. Deduje que la inevitable, y cada vez más presente, tecnología era un elemento aglutinador, o mejor, una excusa para convocar actividades artísticas que usan el formato digital en su realización. Esta incorporación del elemento tecnológico facilita la participación de cualquier género, lo que permite romper el paradigma del salón clásico. Por otra parte la herramienta digital no producirá un nuevo tipo de arte, pero favorece la interrelación entre géneros y facilita la producción de expresiones como el cine, la multimedia, etc…¨

Salón de Arte Digital, es un evento realizado por 10 ediciones, que reúne artistas multimedia de todo el mundo. Este edición ofrece nuevas tecnologías, nuevos medios en las artes y en las ciencias. Este evento se estará realizando desde el 10 al 28 de Marzo 2014.

ACTUALIZADO: Sirva la presente para comunicar que se cambio el inicio de las actividades de los talleres al Software Libre en Salón de Arte Digital debido a las protestas que se encuentran cerca de PDVSA La Estancia Maracaibo, mas se estima iniciar una semana después de lo planeado, es decir, el 17 de Marzo hasta el 28 de Marzo, allí los esperamos.

Información básica

Lugar: PDVSA La Estancia Maracaibo. Ubicado en la Calle 77 (bulevar 5 de Julio), parroquia Olegario Villalobos del Municipio Maracaibo, al lado del Edificio Principal de Enelven.

Costo: ENTRADA TOTALMENTE LIBRE Y GRATUITO

Inscripciones: Desde el 5 de marzo de 2014, en la recepción de PDVSA La Estancia Maracaibo.

Cronograma de Software Libre en el Salón de Arte Digital de Maracaibo.

Primer día – 10 de marzo

Titulo: ¿Qué es el Software Libre?

Descripción: esta cátedra habla de Historia, Definición y Filosofía de The GNU Project, Free Software Foundation (FSF), Software Libre (Free Software), El Núcleo Linux, Código Abierto (Open Source), Open Source Initiative (OSI). Además trata sobre las Licencias, Distribuciones, Alternativas Libres, Comunidades de Software Libre, Ventajas, Desventajas, Situación Actual del SL en Vzla, Sitios en Internet.

Duración: 1 hora académica

Titulo: ¿Qué es Hardware Abierto?

Descripción: esta cátedra habla de la Problemática actual, Historia, Lee Felsenstein y el Homebrew Computer Club, FPGAs y Open Design Circuits. Definición y Filosofía según su naturaleza (Hardware estático y Hardware reconfigurable); y según su filosofía, Open Hardware, Open source hardware, Free hardware design, Libre hardware design, Free hardware. Además trata sobre el Licenciamiento, Comercialización, Modelos de intercambio, Proyectos, Comunidades de Hardware Abierto, Ventajas y Desventajas, Situación actual en Venezuela, Conclusiones, Sitios de Referencia.

Duración: 1 hora académica

Titulo: Del uso de la tecnología a la innovación tecnológica.

Descripción: esta cátedra habla de la experiencias de muchos activistas Venezolanos dentro de las comunidades de tecnologías libres y su formación socio política ante la tecnología y su impacto en la sociedad, formando a nuevos ciudadanos, estos actualmente no solo son activista en tecnologías que promuevan el conocimiento libre sino forman parte muchos movimientos culturales y sociales a nivel mundial, nacionalmente y regionalmente. Con esta experiencia se educa como involucrarse en estos movimientos.

Duración: 1 hora académica


Segundo día – 11 de marzo

Titulo: Distribuciones de Software Libre Venezolanas

Descripción: esta cátedra habla de Distribuciones GNU/Linux, ¡GNU/Linux a la medida!, Clasificación de Distribuciones, Historia en Árbol genealógico y Mapa mental de distros. Además las Implementaciones Venezolanas de distros como: HVLinux, Bluewall GNU/Linux, KnoppixMED, LinuxDoc, Latinux, GNU/Linux – Venezuela, Soliedelca, Lavicux, ULANIX y sus sabores, Kuntur y CANAIMA GNU/Linux, con algunas demostraciones y anexos las referencias a Sitios en Internet.

Duración: 1 hora académica

Titulo: Proyecto Canaima

Descripción: esta cátedra habla del proyecto Canaima surge como un proyecto para normalizar la migración a Software libre en al APN en Venezuela, en esta charla busca compartir las experiencia del proyecto Canaima globalmente no solo como un producto tecnológico sino como el estado ofreció la apertura a la comunidades de software libre para compartir saberes y ayudar a construir una base de socio productiva en tecnologías libres en Venezuela, aquí se comenta un poco de su historia, productos tecnológicos y organización social de la comunidad hasta el momento, encuentros comunitarios y recursos tecnológicos disponibles en redes sociales e Internet para colaborar virtualmente con el proyecto.

Duración: 1 hora académica

Titulo: Diseño Gráfico Digital en Software Libre

Descripción: esta cátedra habla de Alternativas Libres para Editor de gráficos; Editor de gráficos vectoriales; Editor de animación 2D; Editor de gráficos 3D; Editor de gráficos de post-producción; Editor de Fuentes; Maquetación y Publicación; Animaciones Web; Editores Web; con sus características técnicas y tabla de costos por licenciamiento de software. Además trata sobre Sitios en Internet y Demostraciones.

Duración: 1 hora académica


Tercer día – 12 de marzo

Titulo: Sistema de gestión de contenidos Plone

Descripción: esta cátedra habla de como crear facilmente usando el software de sistema de gestión de contenidos Plone ideal para creacion de Paginas Web

Plone es el mas longevo, poderoso, flexible, seguro y premiado sistema de gestión de contenido escrito en Python. Utilizado en sitios como Brasil.gov.br, CIA.gov y VTV.gob.ve, él es conocido por su seguridad e flexibilidad. En esta charla exploraremos, ¿cómo funciona él?, ¿cómo funciona su comunidad organizada?, y vemos como los usuarios exigentes con fechas límite de entrega le encanta Plone, ya que les permite no tener que inventar la rueda de nuevo cada vez que trabajan en la carga de contenidos en la Web.

Duración: 1 hora académica

Titulo: Traducción asistidas por computadoras en Software Libre

Descripción: esta cátedra habla de ¿Qué es la traducción?, describir los recursos del traductor, también como ha evolucionado hasta la actualidad la industria de la Lengua. Herramientas CAT (Computer-aided Translation), Memorias de Traducción. Se ofrece un análisis comparativo entre herramientas CAT privativas y libres donde se describen sus ventajas y desventajas, costo de licencias de software y soporte. También se ofrecen algunos recursos en la red y demostraciones.

Duración: 1 hora académica

Titulo: Montaje de un proyecto de Software Libre

Descripción: esta cátedra habla de ¿Cómo montar un proyecto de software libre?, lo que hay que hacer antes de comenzar el proyecto se explican los temas de: Lenguaje de programación, Plataforma, Especificaciones, Luego se debe definir algunas metodologías de desarrollos que se asemejen a SL y las herramientas de trabajo colaborativo para el desarrollo y control de gestión y proyectos para definir roles del proyecto, uso de recursos CVS, Lista de correos; tales como algunos recursos de la Web 2.0 disponibles para empezar a organizarse, y también sobre algunos FOSP-hostsites. Y una vez que esta listo la primera publicación se deben tomar en cuentas los aspectos legales, buenas prácticas al liberar, la publicidad del proyecto, el empaquetamiento y distribución (fuentes y binarios), el cuidado con la imagen, el soporte a usuarios: sitios de referencia, BTS, comunidades. Además trata sobre el Tiempo de dedicación al proyecto, Conclusiones, Referencias, Sitios en Internet, Demostraciones, Preguntas.

Duración: 1 hora académica


Del 13 al 18 de marzo

Actividades simultaneas de talleres de diseño gráfico y dibujo, exposición de arte. Mas información recepción de PDVSA La Estancia Maracaibo.

Mas información

Para difundir a través de las redes sociales:

Google+: https://plus.google.com/u/0/events/c0shdk3hpl860gg9v90iq7lbsu0

Facebook: https://www.facebook.com/events/595560203864477/


Nerissa Aguilera: HISTORIAS I - Mujeres

Milton Mazzarri: libturpial needs your help

$
0
0

Do you want to begin to contribute into libturpial codebase but you don’t know where to start?, that’s ok, it also happens to me sometimes, but today, the reality is that we need your help to fix some errors reported by our style checker (flake8), this errors are:

  • E126: continuation line over-indented for hanging indent
  • E128: continuation line under-indented for visual indent
  • E231: missing whitespace after :
  • E251: unexpected spaces around keyword / parameter equals
  • E261: at least two spaces before inline comment
  • E301: expected 1 blank line
  • E302: expected 2 blank lines
  • E303: too many blank lines
  • E501: line too long
  • E711: comparison to None should be if cond is not None:
  • E712: comparison to False should be if cond is False: or if not cond:
  • F401: imported but unused
  • F403: unable to detect undefined names
  • F821: undefined name
  • F841: local variable is assigned to but never used
  • F999: syntax error in doctest
  • W291: trailing whitespace
  • W391: blank line at end of file
  • W601: .has_key() is deprecated, use in

As you can see, some errors are really easy to fix but are too many for us, so please, we desperately need your help, help us!

The following is how we expect the community can contribute code intolibturpial via Pull Requests.

1) If you don’t have a Github account, please create one first.

2) Fork our project

3) Install Git, after that you should setup your name and email:

$ git config --global user.name "Your Name, not your Github nickname"$ git config --global user.email "you@example.com"

4) Set your local repository

$ git clone https://github.com/your_github_nickname/libturpial.git

5) Set satanas/libturpial as your upstream remote, this basically tells Git that your are referencing libturpial’s repository as your main source.

$ git remote add upstream https://github.com/satanas/libturpial.git

5.1) Update your local copy

$ git fetch upstream

6) Verify that no one else has been working on the same bug, you can check that in our issues list, in this list you can also checkPull Requests pending for the BDFL approval.

7) Working on a bug

7.1) In the first place, install tox

$ pip install tox

7.2) Then, create a branch that identifies the bug that you will begin to work on:

$ git checkout -b E231 upstream/development

In this example we are working on the bugs of the type: E231 (as indicated by our style checker, flake8)

7.3) Make some local changes and commit, repeat.

7.3.1) Delete the error code that you will begin to work from the ignore list located at the flake8 section in the tox.ini file (located at the root of the project)

Example:

# Original list:ignore=E126,E128,E231,E251,E261,E301# After we decide to work in the E231 error:ignore=E126,E128,E251,E261,E301

7.3.2) Execute tox -e py27 to check the current errors.

7.3.3) Fix, fix, fix…

7.3.4) Commit your changes

$ git commit -m "Fixed errors 'E231' according to flake8."

7.4) In the case that you fixed all errors of the same type, please delete the corresponding line in the tox.ini file (located at the root of the project)

7.4.1) Don’t forget to commit that.

8) Publish your work

$ git push origin E231

Please, adjust the name E231 to something more appropiate in your case.

9) Create a Pull Request and don’t hesitate to bug the main maintainer until your changes get merged and published. Last but not least, don’t forget to add yourself as an author in the AUTHORS file, located at the root of the project.

10) Enjoy your work! :-)

If you want to help us more than you did already you can check our issues list, also, you can check out the Turpial project, our light, fast and beautiful microblogging client written in Python, currently supportsTwitter, and identi.ca.

You can find more details on our guide, also, in case of doubt don’t hesitate to reach us.

About libturpial

libturpial is a Python library that handles multiple microblogging protocols. It implements a lot of features and aims to support all the features for each protocol. At the moment it supports Twitter and Identi.ca and is the backend used for Turpial.

About Turpial

Turpial is an alternative client for microblogging with multiple interfaces. At the moment it supports Twitter and Identi.ca and works with Gtk and Qt interfaces.

libturpial needs your help was originally published by Milton Mazzarri at milmazz on March 10, 2014.

Edwin Orrico: Android Kitkat 4.4.2 en tu Acer Iconia A500!!!

$
0
0

Acer Iconia A500

Nuevamente, debemos dar gracias al trabajo de Thor2002ro, desarrollador en el Foro Tegraowner, quien ha estado trabajando de forma ardua en portar las últimas versiones de Android a nuestra Acer A500, proporcionándole nueva vida y ahorrándonos la necesidad de darla de baja. 

/*
* No me hago responsable por dispositivos dañados
* tarjetas SD rotas, guerras termonucleares, etc.
* Investiga un poco antes de hacer este procedimiento.
* TU y solo TU has escogido modificar tu Tablet,
* así que no soy responsable de tus actos. Este
* procedimiento  podría anular la garantía de fábrica.
*/

Requerimientos:

  • Acer Iconia A500 Rooteada
  • Bootloader ICS v8
  • Thor Recovery v1.7.3 o superior

Si no tienes los requerimientos anteriores, y tu tablet se encuentra con la última versión oficial de Acer (4.0.3), puedes usar la herramienta Afterota v1.09 y seguir las instrucciones en el post de XDA Developers

Si ya cumples los requerimientos, deberás suscribirte en el Foro Tegraowners para poder descargar la ROM y flashearla de acuerdo a las siguientes instrucciones:

  1. Entrar a modo Recovery (Power + Volumen[+])
  2. Hacer wipe de Data, Cache y Dalvik Cache
  3. Instalar ROM (Tiene su propio instalador luego de seleccionar el Zip). En este paso podrán seleccionar si desean soporte 3G para modems Huawei
  4. Instalar Gapps (De este enlace)
  5. Instalar SuperSU para acceso Root (De este enlace)
  6. Reiniciar y dejar algunos minutos a que complete la instalación
  7. Disfruta

Ana Rangel: Open Data Monterrey 2014

$
0
0

Desde que Milton y yo llegamos a Monterrey habíamos estado alejados de la actividad de participación en comunidades de Open Source en la ciudad, solo unas pocas asistencias a reuniones organizadas por la comunidad de Python de Monterrey.

Nos enteramos del Open Data Monterrey 2014 por invitación del CIC, con quién  Milton ha colaborado en sus ratos de ocio desarrollando un cliente en Python [https://github.com/milmazz/pycic] para interactuar con el API del Centro de Integración Ciudadana (CIC) quienes promueven la participación ciudadana a través de medios tecnológicos para organizarse y resolver problemas comunes, uno de ellos por ejemplo es el tema de la inseguridad o el tráfico en la zona metropolitana del estado de Nuevo León.

El evento se realizó los días 22 y 23 de febrero en el marco del International Open Data Hackaton y el CodeAccross The World. Organizado por el CIC y Codeando México con aliados como: Alcalde ¿Cómo vamos? , rutadirecta, Mente y Nongrid

Se dictaron talleres interesantes como Análisis espacial y estadístico de delitos: más allá de los hotspots y correlaciones por Carlos Castro representando Estrategia Digital Nacional (México abierto),  Civic hacking 101 – Creando tu primer aplicación cívica de código abierto por Braulio Chávez y Noé Domínguez representando a Codeando México. Scraping de datos públicos por Francisco Mekler representando al Instituto Mexicano para la Competitividad.

Los lineamientos para conceptualizar el proyecto era usar los datos disponibles en http://data.cic.mx y lograr obtener información que pueda ser interpretada en beneficio de la comunidad.

Surgieron ideas muy interesantes como una app móvil para implementar la alerta Amber, para los que no la conocen esta es una alerta para la búsqueda de menores desaparecidos y en la actualidad se hace por medios tradicionales como la radio, este proyecto tuvo mención honorífica. El tercer lugar se lo llevó un software para geolocalizar las patrullas de policía de acuerdo a las estadísticas de incidentes de delito en una zona.

En el primer y segundo lugar hubo empate con el proyecto ¿Cuánto debemos? y nuestro proyecto ¡Pregúntale! 

Ganadores

Pregúntale está basado en varias iniciativas de peticiones a nivel global, hay muchas, cada una con su concepto, para nosotros askThem.io fue nuestra mayor inspiración.

¿Por qué pregúntale? El estado de Nuevo León cuenta con  la iniciativa de Alcalde ¿Cómo vamos? En donde existe un espacio de comunicación con los alcaldes del área metropolitana, conformado por los alcaldes de los 9 municipios.

Es muy importante saber que en Nuevo León solo el 2% de la población manifiesta interés en participar en cualquier causa social.

Pregúntale es una aplicación web que puede ser un medio para incentivar la participación ciudadana, en donde cualquier persona de la comunidad puede plantear preguntas dirigidas a los alcaldes y promoverlas en las redes sociales teniendo una posibilidad real de recibir una respuesta de la autoridad. La aplicación fue desarrollada en el lenguaje Python haciendo uso del microframework Bottle.Para el desarrollo de las vistas HTML se usó de Jinja2  junto con Bootstrap para el delineado del layout, para la muestra de gráficas y estadísticas se uso HighCharts.

Los próximos pasos consistirán en armar un API para el manejo de preguntas, respuestas, alcaldes y usuarios y organizaciones.

Si alguien desea contribuir con el desarrollo de ¡Pregúntale! el repositorio del proyecto se encuentra en [github.com/milmazz/preguntale] porque ciertamente cumpliremos con aquello de: “Lo que se hace en el hackatón, no se queda en el hackatón”, continuaremos mejorando ¡Pregúntale! y por supuesto, haciéndolo de dominio público.


Viewing all 1457 articles
Browse latest View live