Dic 2, 2015
alvaro

Añadir Headset Bluetooth a la salida de audio Pulseaudio y salida múltiple

Música en manos libres Bluetooth, TV, Altavoces internos y más

 

Recientemente estoy usando un auricular Bluetooth como manos libres. Dado que mi portátil principal tiene Bluetooth integrado hace tiempo que lo llevo usando para oir música y hablar con el micrófono que lleva.

Para permitir que ubuntu detecte el auricular A2DP y escuchar el audio en alta definición o usarlo en una videoconferencia hay que descargar estos paquetes:

  • pulseaudio-module-bluetooth
  • pavucontrol
  • paprefs

mediante Synaptic o con:

apt-get install pulseaudio-module-bluetooth pavucontrol paprefs

 

Ejemplo:

Paquete a instalar en Synaptic

Paquete a instalar en Synaptic

Paquete a instalar en Synaptic - Descripción de paprefs

Paquete a instalar en Synaptic – Descripción de paprefs

 

Abrimos el Administrador de Bluetooth, buscamos el manos libres/altavoz BT y lo agregamos.

Ahora viene el detalle que permitirá conectarlo en HD y full duplex. Editamos el fichero:

 

sudo nano /etc/bluetooth/audio.conf

o

sudo vi /etc/bluetooth/audio.conf

 

Cambiamos las siguientes opciones para dejarlas así:

HFP=false

[A2DP]
SBCSources=1
MPEG12Sources=0

 

Guardamos y reiniciamos el proceso Pulseaudio con:

pulseaudio –kill
pulseaudio –start

Ahora vamos al Administrador Bluetooth en Preferencias del Sistema y enlazamos el HeadSet con el equipo.

El proceso debe ser el típico Siguiente, siguiente, siguiente… Para acabar teniendo algo similar a:

Pantallazo-Dispositivos Bluetooth

Pantallazo-Dispositivos Bluetooth

 

Vamos a Preferencias de Audio, en nuestro escritorio y en la pestaña Hardware debería aparecer nuestro manos libres. Lo activamos seleccionando Reproducción de Alta Fidelidad A2DP y probamos ambos auriculares.

Pantallazo-Preferencias de sonido

Pantallazo-Preferencias de sonido

 

Deberíamos oír el audio perfectamente.

Bien, ahora ejecutamos el reproductor de audio o cualquier aplicación, ya sea Chrome, FireFox, Audacious, etc. y en salida deberemos seleccionar el manos libres en la pestaña Salida.

Pantallazo-Preferencias de sonido-Salida Manos Libres

Pantallazo-Preferencias de sonido-Salida Manos Libres

 

Si a más a más queremos oír la misma música o sonido en los altavoces internos del equipo, la TV mediante HDMI o la salida de auriculares, el truco está en permitir que PulseAudio tenga habilitada la siguiente opción:

Pantallazo-Configuración PulseAudio - Salida Múltiple

Pantallazo-Configuración PulseAudio – Salida Múltiple

 

Con ello, se añadirá una nueva Salida en la que el audio “saldrá” por todas las vías del equipo, sea cuales sean. Siendo posible escuchar música en la TV, en el manos libres, los altavoces incorporados e incluso un Home Cinema por HDMI o 5.1.

 

Pantallazo-Preferencias de sonido-Salida Múltiple

Pantallazo-Preferencias de sonido-Salida Múltiple

 

Espero que disfrutéis de esta forma de aprovechar los gadgets que vamos comprando y, de paso, no romper más auriculares al levantarnos por algo.

 

 

Todo ello sale de estudiar estas dos páginas y combinarlas para una mejor experiencia:

http://askubuntu.com/questions/203272/no-a2dp-streaming-audio-from-12-04-to-bluetooth-headset

http://askubuntu.com/questions/78174/play-sound-through-two-or-more-outputs-devices

May 30, 2015
alvaro
Comentarios desactivados en Optimización de Software

Optimización de Software

Control de versiones (VCS) con Repositorios

Es habitual que durante el desarrollo de un proyecto realicemos pruebas, modifiquemos código o añadamos funcionalidades. Por ello, es útil y necesario guardar por separado todos los cambios que vamos realizando mediante un sistema de control de versiones (VCS) integrado en nuestro IDE.

¿Qué es el VCS?

Es una herramienta que registra todos los cambios realizados en un proyecto, tanto en la estructura de los directorios como en el contenido de los ficheros, y que permite recuperar versiones específicas.

Se realiza a través de un repositorio (servidor de archivos) que soporta desarrollo colaborativo de código y control de revisiones de un proyecto.

Además de repositorios locales, existen centralizados donde el código está en un único servidor que contiene todos los archivos versionados (CVS, SubVersion o SVN , etc.) y distribuidos en los que el código puede estar en diferentes repositorios locales (Git, Mercurial, etc.).

 

git-tutorial-basics-clone-repotorepocollaboration

¿Cómo funciona?

Pondremos como ejemplo uno de cada tipo:

SVN

Proceso de uso de SVN

Proceso de uso de SVN

 

  • Tenemos el código en un repositorio central en una carpeta llamada trunk (rama de desarrollo principal) o en las carpetas branch (rama con evoluciones paralelas al trunk) o tag (reservada a versiones cerradas).
  • Los usuarios se descargan una copia local y hacen sus cambios.
  • Un usuario sube los cambios al repositorio (commit).
  • Un usuario actualiza su copia con la del servidor (update).

Cheat Sheet de Subversion

Cheat Sheet de Subversion

GIT

repositorio-git1

Proceso de uso de GIT

  • Modela sus datos como un conjunto de instantáneas de un mini sistema de archivos.
  • Tiene tres secciones principales: Git directory, working directory y staging area.
  • Tiene tres estados principales en los que se pueden encontrar nuestros archivos: committed, modified y staged.
  • Se modifican los archivos en el directorio de trabajo. Su estado será modified.
  • Se preparan los archivos añadiendo instantáneas de ellos en el área de preparación. Su estado será staged.
  • Se confirman los cambios y se almacena la instantánea de forma permanente en el directorio Git. Su estado será committed.

Cheat Sheet de as funciones de GIT

Centralizados VS Distribuidos

Durante muchos años el estándar para el control de versiones ha sido el centralizado pues proporciona bastantes ventajas frente a VCS locales.

Entre esas ventajas cabe destacar su fácil administración y el control detallado que se tiene sobre lo que está haciendo cada colaborador del proyecto. La principal desventaja de este tipo de repositorios radicaría en que al estar el proyecto en un único servidor, si se daña el disco duro en el que se encuentra la base de datos central se perdería toda la información o si durante un tiempo el servidor se “cae” ningún colaborador podría trabajar ni guardar los cambios.

Todo esto se evita con los VCS distribuidos ya que el usuario no se descarga sólo la última instantánea de los archivos sino que copia el repositorio. Cada vez que se descarga una instantánea está haciendo una copia de seguridad de todos los datos. Además utilizando este tipo de repositorios el usuario puede colaborar con distintos grupos lo que permite establecer varios flujos de trabajo.  Tú decides…

¿VCS centralizados o distribuidos?

 

En complemento a la Presentación PowerPoint sobre Java8

May 29, 2015
alvaro
Comentarios desactivados en Reflexiones y futuribles – Análisis profesional 2015

Reflexiones y futuribles – Análisis profesional 2015

Objetivos profesionales en el 2015

Tras el estudio anterior de las tendencias y sueldos, cabe plantearse de forma más reflexiva qué nos espera.

Podríamos repetir periódicamente una serie de preguntas tras cambiar de empleo, empezar un nuevo curso, encontrarnos en un punto de inflexión en nuestras vidas, etc.

¿Hacia dónde crees que es importante orientar tu futuro profesional? / Cap a on creus que és important orientar el teu futur professional?

La tendencia de las empresas es utilizar los nuevos frameworks, lenguajes y plataformas que simplifiquen el trabajo de desarrollo y mantenimiento. Una de las ventajas de tener experiencia en Administración de Sistemas es que tienes conocimiento de los equipos donde están ejecutándose tus programas y aplicaciones. Ampliar experiencia en dichos frameworks puede ser una apuesta interesante para integrar antiguos y nuevos proyectos.

¿Por qué tecnología apostarías para tu futuro profesional? / Per quina tecnologia apostaries per al teu futur professional?

El movimiento actual se ha centrado en facilitar nuevos Front-ends de cara a atraer y mantener a los usuarios a nuestras aplicaciones. La velocidad de la red y la potencia de los equipos va aumentando pero hay una carencia en la velocidad y interactividad de las interfaces de entrada y salida de datos (teclado, ratón, pantalla, webcam, etc.). Sería interesante buscar o promocionar una nueva interfaz de comunicación con el usuario.

Otra apuesta, más cercana y interesante, es el desarrollo, especialización y ampliación de conocimientos en lenguajes como Laravel, RubyOnRails y otros, que permiten realizar proyectos web CRUD sin necesidad de realizar todas las partes del Modelo-Vista-Controlador.

¿En qué invertirías tu tiempo y dinero para formarte? / En què invertiries el teu temps i diners per a formar-te?

Django, AngularJS, EmberJS, Backbone.JS y KnockOut.JS son buenas apuestas. Hay buenos cursos online gratuitos y el Cibernarium suele hacer cursos cortos. Igualmente, universidades extranjeras y otros centros educativos también permiten estudiarlos aunque la mayoría suelen ser de pago.

¿Qué tecnología crees que será clave para tener éxito profesional? / Quina tecnologia creus que serà clau per a tenir èxit professional?

Si la supiera estaría formándome ahora mismo aunque con el uso cada vez mayor de los dispositivos móviles, Unity 3D y similares pueden facilitar el entretenimiento y desarrollo de aplicaciones para la variedad existente. La limitación de autonomía de esos dispositivos y las modas pueden ser cruciales para acertar o fracasar en nuestra elección.

Si fuera químico, estudiaría el uso del grafeno y sus aleaciones para crear nuevas baterías.

Si fuera electrónico, intentaría desarrollar nuevas formas de comunicación con los equipos, como mencioné antes.

Actualmente apostaría por la realidad aumentada, la impresión 3D, gafas y los nuevos gadgets.

¿Qué crees que deberías saber para asegurarte un buen lugar profesional? / Què creus que hauries de saber per assegurar un bon lloc professional?

Las ofertas de trabajo actuales solicitan cada vez más conocimientos, abarcar mucho supone conocer vagamente dichas tecnologías, creo que lo mejor sería especializarme en varios frameworks de integración y desarrollo de páginas web y aplicaciones.

 

La introspección permite unos mejores objetivos profesionales reflexionemos.

Reflexionar ahorra en la factura de la luz XD

May 29, 2015
alvaro
Comentarios desactivados en HTML5 – Presente, futuro y yo

HTML5 – Presente, futuro y yo

¿Qué nos depara HTML5?

Valorar qué proyecto de grado superior debería realizar y después ver mi experiencia anterior en la programación web, ha demostrado que la evolución de los lenguajes depara muchas sorpresas.

¿Por qué escoger esta tecnología? ¿Tiene futuro? ¿Vale la pena apostar por ella?

Tras unos inicios muy toscos en la web, HTML ha ido cambiando. Desde unas simples etiquetas de texto cuadradas y simples a diseños multimedia, dinámicos, divertidos, ampliamente gráficos  con interacción con el usuario. Etiquetas representadas por navegadores en continua batalla por cuota de mercado, que van cambiando a ritmos feroces, permitiendo ampliaciones según aumenta la velocidad de acceso a la red y la potencia de nuestros equipos.

Escoger esta tecnología, sin dejar de lado opciones como Node.JS, Hibernate, JQuery, AJAX, REST, SOAP, Angular.JS, Ember.JS, etc., puede suponernos una base de conocimientos ampliamente firme como para implementarlas. Teniendo en cuenta que prácticamente todos los dispositivos móviles son compatibles con HTML5, nos aseguramos que nuestros trabajos no pasarán en corto tiempo a un cajón virtual en los que sin el resto de nuevos lenguajes, frameworks e implementaciones nos dejarán sin futuro.

Aplicaciones híbridas en móviles basadas en HTML5 suponen una mayor facilidad de implementación versus aplicaciones nativas. También supone un ahorro de tiempo en desarrollo, con lo que podremos ampliar características de forma simultánea a todas las plataformas.

¿En qué situación está actualmente? ¿Es estable?

El consorcio W3C establece unos patrones y recomendaciones básicas de implementación, los cuales deben interpretar los motores de los diferentes navegadores actuales. Dicha lectura, adaptada a los dispositivos con mayor o peor acierto, permite una web más rápida, agradable y compatible.

La aparición de los blogs, con sus apartados diferenciados (header, articles y footer) han dejado huella en este lenguaje. Ello establece una nueva serie de etiquetas y funcionalidades multimedia (canvas, audio, vídeo, etc.) que evitan tener que cambiar de nuevo el esquema a utilizar por los programadores web.

Por ello, aun sabiendo que la siguiente evolución de este lenguaje no es imposible, se puede considerar como un lenguaje estable.

¿Cuál crees que será su futuro?

La web está en continuo cambio. Cada día aparecen nuevas tendencias y modas, véase los móviles y sus aplicaciones, que aunque el lenguaje es el mismo, el uso que le damos es imprevisible. Aplicaciones con Material Design, nuevas API, nuevos frameworks, nuevos dispositivos permitirán su uso de formas difíciles de imaginar.

Sin embargo, la realidad aumentada y la virtual pueden ser un posible uso, gracias sobre todo a las posibilidades que proporciona junto a CSS y Javascript.

¿Que características principales tiene?

Según la wikipedia las principales novedades son:

La semántica (header, footer, article, nav, time) que permiten dar fácilmente un contenido estilo blog (cabecera, menú de navegación, varios articulos diferenciados con su marca de tiempo independiente y el pie de página) a los navegadores.

Una mayor flexibilidad y facilidad para mostrar y ordenar el contenido con información adicional que enlace o que la relacione a otra.

Facilidad para incluir animaciones, imágenes y objetos pudiendo interactuar con ellos, arrastrarlos, mostrarlos, ocultarlos, etc.

Mejor uso de los datos, permitiendo su almacenamiento offline y manejo por bases de datos locales, su posicionamiento a nuestro alrededor, interacción con otras web o servicios online, entre otras muchas.

¿En qué ámbitos se aplica? ¿En qué proyectos?

Se podría decir que actualmente, sea el dispositivo que sea, está presente en todas las aplicaciones informáticas. Por ejemplo, los dispositivos android utilizan xml para mostrar su contenido permitiendo el uso de estas etiquetas con facilidad. Aplicaciones de escritorio pueden tener pestañas o pequeños navegadores incrustados mostrando contenidos web en esta versión lenguaje. Incluso pequeños SO, como WebOS o FirefoxOS, lo utilizan para mostrar contenido dinámico.

¿Qué complejidad de aprendizaje tiene esta tecnología?

Aprender esta nueva implementación de HTML no es difícil, si bien la mayoría de páginas actuales aún no están completamente migradas a esta nueva especificación, supone un valor añadido de cara a nuestra contratación. Adaptar las webs actuales, aportar contenidos multimedia, dinámicos e interaccionables, atrae al usuario y le proporciona una mayor satisfacción en su uso y puede que permita que éste vuelva.

Como todo lenguaje, requiere tiempo, dedicación y práctica. El uso combinado con otras tecnologías como AJAX, JQuery y CSS permite un amplio abanico de posibilidades y proyectos.

¿Qué metodología seguirías para formarte en nuevas tecnologías? ¿Autoprendizaje? ¿Cursos? ¿Certificaciones?

La práctica autodidacta proporciona mucha confianza y facilidad de desarrollo aunque sin una formación continuada no es posible dominarlo. Personalmente preferiría tanto cursos presenciales como online, sobre todo, tras horas de prueba y error en pequeños proyectos. Los certificados de profesionalidad, cursos dedicados o certificaciones pueden ser también una forma de aprendizaje pero sin un objetivo tangible no son muy motivadores.

Presentación PowerPoint HTML5

May 12, 2015
alvaro
Comentarios desactivados en Tendencias del 2014 y 2015 (2)

Tendencias del 2014 y 2015 (2)

programadores-bien-pagaos

Comparativa lenguajes EE.UU 2014 por Compass

Siguiendo con el post anterior, en Compass realizaron la comparativa entre los sueldos mejor pagados según el lenguaje de programación. Si bien hay un detalle que es muy importante en dichas comparativas, la ubicación o mercado laboral del trabajador. Se presume que un lenguaje está igual de valorado aquí en España que en Francia o EE.UU., sin embargo, las políticas de empresa o cultura empresarial han marcado diferencias considerables en la realización de los proyectos.

Vemos que el lenguaje mejor pagado es:  C++  y Python, curiosamente el segundo, superando los 100.000 dólares anuales. Lejos anda Java, lenguaje ampliamente solicitado en España por la facilidad de escalabilidad e implantación.

Podríamos definir que en EEUU el salario medio sería de unos 85.000 dólares, comparados con la mayoría de ofertas junior españolas de 20.000 o 25.000 euros. Hay que tener en cuenta también las características demográficas de cada país, no es lo mismo un programador aquí que en la India, donde cobran una media de 25.000 dólares por las mismas tareas y responsabilidades que el estadounidense.

Tomemos como ejemplo el comentario colocado en meneame.net por Savir80. Siendo programador, cobra en Nueva York un poco más de 100.000 dólares y detalla el coste de vida en dicha ciudad como:

– Quítale impuestos, seguridad social (jubilación) y mi parte del seguro médico (privado, claro): Un 31%
– Alquiler: 1600$ al mes (y contentos, que el casero parece que no se ha enterado de que apartamentos similares en la misma zona pueden pasar de los 2800$)
– Litro de leche: 4$
– Un pollo: 10$ (reconozco que el súper de cerca de casa es anormalmente caro para los pollos, todo sea dicho)
– Una cerveza Stella en el supermercado: 2$
– Cenas fuera (un restaurante “normalito” y sin hacer excesos) 60$ por cabeza
– Cenas un poco excesivas, en sitios algo mejores (pero no en los restaurantes más famosos de Nueva York, ni mucho menos) 150$ por cabeza (170$ con la propina)
– Una cerveza en un bar 7$
– Ir al médico (teniendo seguro pero con lo que se llaman co-pagos): ~ 100$
– Abono de transporte mensual: 112$

Es evidente la diferencia con el español.

Lo mismo ocurre con las ofertas, mangrar_2 indica tres en Dublín (Irlanda):

1. Senior Java Developer
Dublin City Centre
€65,000 – €75,000
A leading niche IT company is looking for an innovative Senior Java Developer to join their team based in Dublin city centre. Work with the full Java development lifecycle, accessing the entire technology stack within the company, from the Database back to Web Server and everything in between. This startup environment offers you the opportunity to get involved in the Java architecture of the business, expressing your opinion and making cases based on current and past experience
Skills: Java, Spring, Hibernate, MVC, XML, SQL
2. Java Developer
Dublin City Centre
€50,000 – €60,000
A global software solutions provider is looking for a Java Developer to join their expanding team here in Dublin. With offices across the UK and Ireland, this FTSE100 company has gone from strength to strength and are looking for a strong individual to join their team. Building both bespoke and flagship software applications, you will get exposure to different technologies as part of a strong development team
Skills: Java, XML, SQL
3. Senior Software Engineer
Dublin 2
€60,000 – €70,000
A leading sales software company in Dublin City Centre is looking to hire a strong Server Side Software Developer with Java to join their team due to continued success in a growing market. Their niche product works closely with a leading platform, allowing you the opportunity to work with new technologies, while maintaining current and existing technical experience. This creative team have worked across multiple technologies and platforms, giving you access to some of the most experienced developers in the market.
Skills: Java, Javascript, Spring, HTML, JS Frameworks

No será muy complicado ver solicitudes de personal, en empresas españolas, con ese tipo de requisitos en InfoJobs, Jobandtalent o, incluso, en LinkedIn, y remuneraciones menores a la mitad de las mencionadas.

Sin duda, la infografía de Compass, ubicada en http://blog.startupcompass.co/how-much-should-you-pay-your-engineers deja un posible escenario de sueldos, cargos y horizontes laborables muy interesante. Siempre habrá un posible puesto de trabajo, mejor o peor remunerado, en nuestra trayectoria laboral aunque la pregunta más difícil siempre será:

¿Y ahora qué hago?

Pues un buen planteamiento de nuestros objetivos futuros. Podríamos empezar por consultar www.payscale.com/ para valorar nuestro posible sueldo según nuestra experiencia, edad, titulaciones, anterior trabajo y animarnos a superarnos cada día.

En mi caso, una valoración abreviada según mi vida laboral y estudios, me valora en 26.000 € lo que no está nada mal.

Ánimo

Abr 28, 2015
alvaro
Comentarios desactivados en Tendencias del 2014 y 2015 (1)

Tendencias del 2014 y 2015 (1)

Movimientos en la programación Web/Móvil entre 2014 y 2015

En la actualidad estamos viendo que la velocidad y capacidad de la red crece sin aplicaciones que usen todo su potencial. La base de todas esas aplicaciones son los lenguajes de programación, siendo algunos más populares que otros, que suelen avanzar más lentamente.

La necesidad de nuevas opciones, frameworks, acceso a multimedia o aplicaciones interactivas, web o de escritorio, motivan a los profesionales a aprender nuevos lenguajes. Pese que suelen estar relacionados o tener estructuras similares, aparecen nuevos con filosofías o arquitecturas completamente diferentes.

En 2014 se observaba que los lenguajes se enfocarían más en el entorno web/móvil que en escritorio. Lo que significaba que se necesitarían nuevos lenguajes para las diferentes plataformas (tanto hardware como software).

Las ventajas del desarrollo en web benefician a los programadores al no tener que depender de las instalaciones o mantenimiento del hardware donde se van a usar, ya que los navegadores web interpretan el código independientemente (excepto Adobe Flash y sus problemas inherentes a las licencias).

Retrospectivamente vemos…

Desde el inicio de la informática se ha desplazado la carga del proceso entre los servidores y los clientes. Sistemas operativos centrales (mainframes) llevaban el proceso soportando numerosos equipos ligeros con la suficiente potencia para acceder y modificar dichos datos.

Más tarde, la facilidad para conseguir nuevos procesadores, más memoria y más almacenamiento y con la bajada de los precios, adquirimos equipos tan potentes como algunos servidores de años atrás.

El siguiente paso sería el uso de la virtualización de servidores y procesos en clústeres permitiendo una estabilidad, velocidad y potencia. Los procesos tendrían una carga continua y los clientes accederían al llamado Big Data o la nube sin muchos requerimientos a parte de la conectividad y la suficiente autonomía para mantener dichas aplicaciones.

Han aparecido nuevos lenguajes y frameworks, como Spring, Hybernate, Bootstrap, Lively Web, Go, que utilizan más sencilla y eficientemente las versiones de lenguajes de programación previos o implementan nuevos. Javascript, Html5, CSS3 permiten (sin la necesidad de applets o intérpretes de terceros) navegar con fluidez y el uso de procesos críticos.

Toda esta evolución además implica la necesidad y aparición de nuevos IDEs para implementarlos, véase Android Studio, Intellij Idea, Intel XDK, Xcode, como muchos otros.

La velocidad de dichas apariciones, la necesidad de las mismas y el uso por parte de las empresas es algo más relativo. Al igual que hay empresas que quieren usar las últimas tecnologías y usarlas como medio de promoción o publicidad, otras prefieren usar lenguajes de programación con mayor bagaje, proporcionando estabilidad y mayor conocimiento entre los profesionales.

Si analizamos algunos análisis, como el de Indiatimes.com en noviembre del 2014, vemos que el salario mejor pagado es de Ruby on Rails ($109,460), seguido por Objective C ($108,225) y Python ($100,717). Lenguajes más conocidos como Java o C++ ($94,908 y $93,502 respectivamente) sorprenden por su cuarta y quinta posición, posiblemente en relación por la ley de la oferta y la demanda, pero también en contraposición del bagaje mencionado.

Veamos las fases de aprendizaje…

Desde http://www.vikingcodeschool.com/posts/why-learning-to-code-is-so-damn-hard

Fases de aprendizaje de un lenguaje informático

Si tomamos en cuenta la dificultad de aprendizaje de un lenguaje de programación no es algo sencillo, tiene sus “capítulos” o fases para el “estudiante” difíciles de superar. Muchos profesionales apuestan por la certificación en cada uno de ellos, pese que supone un gasto adicional económico, el valor añadido merece la pena. Indican que hay cuatro fases en el aprendizaje, brevemente serían…

La llamada fase Hand Holding Honeymoon, inicial en el proceso, relaciona la confianza con la competencia. Inicialmente dicha relación puede ser perniciosa. Las guías o manuales pueden introducirte pero los retos o necesidades funcionales avanzadas son pasos necesarios para el aprendizaje, conocimiento y experiencia en dicho lenguaje. Estamos estudiando la sintaxis básica del lenguaje, la base, de una forma intensiva.

Llegamos a un pequeño punto de inflexión (Cliff of confusion) en dicho lenguaje en el que nos sentimos cada vez menos seguros mientras vamos adquiriendo nuevos conocimientos. Los pequeños inconvenientes en los primeros proyectos suponen un trabajo extra en el análisis y comprensión de nuestros errores. Es agobiante, requiere tiempo extra inesperado y un reto importante. Se podría decir que al ir viendo la cantidad de opciones y la necesidad de “especialización” requerida, tendemos a desmoralizarnos erróneamente provocando la tercera fase, Desert of Despair. Fase en la cual estaremos dando vueltas.

Hasta que llegamos al punto en que la asimilación, experiencia, feedback positivo y el cambio de nuestra actitud (incluida la auto-estima que también suele ser afectada) nos provoca un aprendizaje exponencial. Éste puede llevarnos al nivel de competencia y confianza para trabajar de forma independiente y segura (Upswing of Awesome). Los proyectos empezaran a fluir y ser estables con facilidad con una gratificación, estabilidad y mérito más que evidente.

 

 

 

Abr 28, 2015
alvaro
Comentarios desactivados en Fases de un proyecto de páginas web

Fases de un proyecto de páginas web

Hace ya unos cuantos años, allá por febrero del 2011, encontré o redacté para Sena Virtual, apenas recuerdo ahora mismo, un pequeño índice de lo que podrían ser las fases de un proyecto web.

Es curioso que años más tarde, los lenguajes han evolucionado, existen nuevas formas para visualizar y compartir la información.

Sin embargo, gran parte de las fases siguen siendo importantes e imprescindibles a realizar para conseguir un buen objetivo.

Estudio del proyecto

  • Estudio de la competencia
  • Posibilidades y líneas de de negocio con la web
  • Necesidades reales del proyecto
  • Pensar en el medio plazo para proveer como puede crecer el proyecto
  • Como fusionar lo que tenga esa empresa con lo que va a tener: On-line – Off-line

Diseño del site

  • Estructura y usabilidad del site
  • Diseño gráfico de todas las paginas

Maquetado

  • Hacerlo compatible con los principales navegadores (Explorer, Mozila Firefox y Chrome)
  • Pulir el código para dejarlo lo más accesible para Google (SEO)

Programación

  • Diseñar la bases de datos
  • Programar todas las funcionalidades
  • Crear y personalizar el BackOffice para que el cliente pueda gestionar los contenidos de la web

Revisión

  • Revisar la web una vez montada para ver si se ve bien en los navegadores
  • Comprobar que el BackOffice gestione correctamente los contenidos y menús
  • Ver que todas las funcionalidades operan correctamente

SEO

  • Estudio e implementación de los mejores títulos, descripciones y palabras clave para cada sección para que Google nos encuentre.
  • Informar a Google del alta de la web y alta del Site Map

Otros

  • Configuración/integración Google Analytics, FaceBook, Twitter, otros…
  • Preparar parte de los contenidos (Fotos, textos, vídeos) finales de la web y en muchas ocasiones subirlos directamente
  • Publicación de la web y nueva revisión general

Dichas fases coinciden en la mayoría con las se están enseñando en los ciclos formativos DAW/DAM como el que estoy realizando en la actualidad.

Si bien, tocaría actualizarlas y comparar que es lo que ha cambiado desde el 2011 en este mundo.

Dic 31, 2012
alvaro

Optimización con Prelink (I)

Buenas,

 

Se ha hablado mínimamente del uso del prelink, algo similar a un cache de librerías y aplicaciones que carga en memoria las más usadas para acelerar el proceso de carga.

La disputa es que con el hardware actual es posible que no se note dicha aceleración o provoque problemas en equipos actualizados frecuentemente.

En parte el proceso de boot si está afectado y sí lo acelera, pero puede causar errores en equipos con entornos gráficos.

 

Una solución es utilizar un cron periódico que lo actualice y lo mantenga listo con las últimas modificaciones del sistema.

 

Un listado de salida o del log podría ser este:

 

/usr/sbin/prelink -a -mR -T -q
2012-12-30 11:53:52 pre link: Could not prelink /usr/bin/ufraw-batch because its dependency /usr/lib/libexiv2.so.9.0.0 could not be prelinked
2012-12-30 11:53:53 pre link: Could not prelink /usr/bin/shotwell because its dependency /usr/lib/libgexiv2.so.0.0.0 could not be prelinked
2012-12-30 11:53:53 pre link: /usr/bin/clinfo: Could not parse `/usr/bin/clinfo: /usr/lib/libOpenCL.so.1: no version information available (required by /usr/bin/clinfo)’
2012-12-30 11:53:56 pre link: Could not prelink /usr/lib/libmediastreamer.so.0.0.0 because its dependency /usr/lib/libortp.so.8.0.0 could not be prelinked
2012-12-30 11:53:56 pre link: Could not prelink /usr/bin/linphone-3 because its dependency /usr/lib/libortp.so.8.0.0 could not be prelinked

2012-12-30 11:54:28 pre link: /usr/lib/xulrunner-1.9.1/xulrunner-bin: Could not find one of the dependencies
2012-12-30 11:54:28 pre link: /usr/lib/xulrunner-1.9.1/xpcshell: Could not find one of the dependencies
2012-12-30 11:54:29 pre link: Could not prelink /usr/lib/gnome-applets/mediastream because its dependency /usr/lib/libmediastreamer.so.0.0.0 could not be prelinked
2012-12-30 11:54:29 pre link: /usr/lib/iceape/plugin-container: Could not find one of the dependencies
2012-12-30 11:54:29 pre link: /usr/lib/iceape/iceape-bin: Could not find one of the dependencies
2012-12-30 11:54:29 pre link: /usr/lib/icedove/icedove-bin: Could not find one of the dependencies
2012-12-30 11:54:30 pre link: /usr/lib/vmware/webAccess/tomcat/apache-tomcat-6.0.16/webapps/ui/plugin/vmware-vmrc-linux-x64-1/plugins/bin/vmware-vmrc-legacy: Could not find one of the dependencies
2012-12-30 11:54:30 pre link: /usr/lib/vmware/webAccess/tomcat/apache-tomcat-6.0.16/webapps/ui/plugin/vmware-vmrc-linux-x64-1/plugins/bin/vmware-vmrc: Could not find one of the dependencies
2012-12-30 11:54:30 pre link: /usr/lib/vmware/webAccess/tomcat/apache-tomcat-6.0.16/webapps/ui/plugin/vmware-vmrc-linux-x64-1/plugins/bin/vmware-vmrc-daemon: Could not find one of the dependencies
2012-12-30 11:54:31 pre link: /usr/lib/vmware/bin/vmware-hostd: Could not find one of the dependencies
2012-12-30 11:54:33 pre link: /usr/lib/vmware-ovftool/ovftool.bin: Could not find one of the dependencies
2012-12-30 11:54:34 pre link: /usr/lib/iceowl/iceowl-bin: Could not find one of the dependencies
2012-12-30 11:54:34 pre link: /usr/lib/vmware-vcenter-converter-standalone/bin/net: Could not find one of the dependencies
2012-12-30 11:54:35 pre link: /usr/lib/vmware-vcenter-converter-standalone/bin/smbclient: Could not find one of the dependencies
2012-12-30 11:54:35 pre link: /usr/lib/vmware-vcenter-converter-standalone/vmware-converter: Could not find one of the dependencies
2012-12-30 11:54:35 pre link: /usr/lib/vmware-vcenter-converter-standalone/converter-gui: Could not find one of the dependencies
2012-12-30 11:54:36 pre link: /usr/share/ati/lib64/libQtGui.so.4 is not present in any config file directories, nor was specified on command line
2012-12-30 11:54:36 pre link: /usr/share/ati/lib64/libQtCore.so.4 is not present in any config file directories, nor was specified on command line

 

Descartamos que sea el Wine ya que es conocido que no se puede usar el prelink y da errores.

 

Para empezar ejecutamos esto

prelink -amR –verbose

Actualizará las aplicaciones, reducirá el uso de memoria y lo hará en desorden por seguridad. A parte indicará los motivos por los cuales no se puede cachear algunos de esos errores.

Configuramos el fichero  /etc/cron.daily/prelink para que ejecute tareas diariamente.

Toca asegurarse que en /etc/default/prelink esté así

PRELINKING=yes

dejando la opción por defecto deshabilitada con un # delante:

#PRELINKING=unknown

añadimos a:

PRELINK_OPTS=-mR

la  a correspondiente a todas las aplicaciones

PRELINK_OPTS=-amR

Si aparece algún problema con las aplicaciones podemos usar esto para deshabilitar el cacheado de aplicaciones:

prelink -ua

 

El rendimiento mejora sustancialmente si lo combinamos con preload y IrqBalance

 

Saludos

Dic 30, 2012
alvaro

Actualizando Debian Squeeze 6.0.6 con el driver gráfico propietario Nvidia 310.19

Recientemente me he encontrado varios problemas en mi equipo al usar una distribución muy estática como es Debian Squeeze 6.0.6.

Uno de ellos ha sido la actualización de los drivers propietarios Nvidia 310.14 y 310.19.

Teniendo en cuenta que esta versión 6.0.6 usa la versión 2.6.32-5-amd65 como kernel, se podría considerar que ya esta anticuada.

Mi gran premisa es que @si funciona, no lo toques pero al menos no seas tonto y que sea seguro@, utilizándola en este equipo me ha tocado ir actualizando usando las versiones recomendadas por el apartado de seguridad.

El problema ha sido al actualizar los drivers oficiales 295.59-1 a la versión propietaria 310.14, al reiniciar el sistema gráfico Xorg ha dejado de funcionar, ocasionando miles de mensaje de acpid y siendo imposible acceder a las X.

Pese intentar actualizar el modulo del kernel, el problema persistía, tanto forzando a que añadiera el modulo como usando el sistema dkms.

Por Internet recomiendan recompilar el kernel, cambiar el export gcc a 4.3, añadir varios paquetes de desarrollo….    sin resultado.

Tras mirar los repositorios, mi fichero sources.list y demás posibles opciones para poder estabilizar mi sistema gráfico, deshabilité varios repositorios sospechosos.

Mucha gente comete el error de llenar con miles de lineas de repositorios de diferentes programas, eso es bueno si solo es para uno o varios programas relacionados, pero para actualizar un sistema complica y provoca conflictos entre los repositorios.

Una solución es priorizar con apt-pinning y que el sistema instale automáticamente la versión mas moderna sin dejar de tener soporte para un sistema con librerías o aplicaciones mas antiguos.

La opción más fácil es deshabilitar todas y dejar esta como única activa:

deb http://backports.debian.org/debian-backports squeeze-backports main

En este caso he optado por actualizar mi kernel a una versión superior, optando inicialmente por la versión 2.6.39 y finalmente por la

3.2.0-0.bpo.4-rt-amd64 #1 SMP PREEMPT RT Debian 3.2.32-1~bpo60+1

Al realizar el cambio también se ha actualizado el sistema gráfico, Xorg a la versión X.Org X Server 1.10.4, sin instalarse en el proceso el modulo libre de nvidia o nouveau.

Tras intentar el driver propietario 310.14 en sus dos opciones posibles, sin resultado, he realizado una purga de todos los ficheros existentes relacionados con el driver en cuestión, usando el comando

../NVIDIA-Linux-x86_64-310.19.run –uninstall

y he reiniciado el sistema.

Una vez entrando en la consola en modo root:

Debian GNU/Linux, with Linux 2.6.32-5-amd64 (recovery mode)

He vuelto a instalar el driver, en esta ocasión el 310.19, en la opción no dkms, verificando que los ficheros se instalaban en los directorios adecuados.

Recordemos que este problema se ha producido por el reciente cambio de kernel image a kernel desktop, con lo cual al actualizar el kernel no se descargaran las headers y la imagen del kernel en los directorios requeridos por el fichero de actualización de nvidia.

Coloco pues los comandos que he usado para realizar la actualización del kernel:

cp /boot/ /root/boot-old -R

apt-get install linux-image-3.2.0-0.bpo.4-rt-amd64 linux-headers-3.2.0-0.bpo.4-rt-amd64 linux-base firmware-linux-free linux-tools-3.2

../NVIDIA-Linux-x86_64-310.19.run

apt-get install nvidia-kernel-common

apt-get remove libglx-nvidia-alternatives

apt-get install libglx-nvidia-alternatives

apt-get install libva-glx1

update-initramfs -u

update-grub

Reiniciamos y tendremos las X de vuelta con la versión actualizada de Kernel, X Org y drivers Nvidia.

 

Saludos

Dic 30, 2012
alvaro

Optimización máquina Virtual VMware Windows XP en host Debian Squeeze 6.0.6

Buenas,

 

Al usar varias máquinas virtuales con diferentes sistemas operativos al mismo tiempo me veo con la necesidad de optimizar los recursos. Si bien, Vmware en mi sistema tiene un rendimiento limitado por el raid mirror que tengo, cambiar la ubicación de la máquina virtual no ha surgido la mejora esperada. Por ello he ido anotando y añadiendo a los ficheros de configuración de la máquina virtual las opciones que mejor han respondido a mi sistema y que si ofrecen una mejora de rendimiento.

Uno de los factores más importantes para las máquinas virtuales es el factor de virtualización que soporte nuestro procesador, tanto Amd como Intel disponen de dichas opciones desde hace tiempo en todos los procesadores. Activaríamos pues las opciones en Editar configuración de la máquina virtual -> Procesadores ->

Preferred Mode: Intel VT-x or AMD-v/RVI

Virtualize Intel VT-x/EPT or AMD-V/RVI

Virtualize CPU performance counters

Otra de las opciones interesantes es usar dos núcleos por procesador, si bien Windows apenas aprovecha más de dos, podríamos reducir considerablemente la carga y repartirla usando todos nuestros núcleos reales. VMware al emular utiliza en su proceso principal un sólo núcleo pero las máquinas virtuales si tienen la opción de usar todos los disponibles. La mejora es considerable.

Pantallazo-177a

La emulación de discos duros también afecta. Usar la emulación IDE esta completamente desaconsejada, por lo que usar SATA y el bus lsilogic acelera el rendimiento de escritura y lectura, permitiendo un arranque y funcionamiento del sistema operativo instalado.

Si tenemos una máquina con el disco principal IDE, podemos hacer el siguiente proceso para cambiar a SATA:

Asegurarse de haber instalado la última versión de Vmware tools en el sistema huésped.

Apagar la máquina virtualizada

CErrar Vmware

Editar el fichero VMX y cambiamos

ddb.adapterType = “ide” por ddb.adapterType = “lsilogic”

Guardamos el fichero y abrimos VMware

Editamos la configuración de la máquina virtual, borrando el disco duro IDE sin borrar el fichero del disco.

Agregamos un nuevo disco duro, seleccionamos disco duro existente, buscamos el fichero VMDK donde teníamos el sistema y lo agregamos.

Si pide una controladora SATA, seleccionamos “LsiLogic” para ello.

Ejecutamos la máquina virtual y veremos que ha aumentado la velocidad.

 

Otro detalle importante en el rendimiento de lectura y escritura es que el disco duro virtualizado debe ser un sólo fichero, si creamos un disco duro que sea de tamaño creciente perderemos tasa de escritura y rendimiento.

Al crearlo directamente con el tamaño que nos interesa, se reserva el espacio en el disco duro host y se disminuyen los archivos abiertos.

Si más tarde nos interesara ampliar el espacio podríamos usar la herramienta Expand dentro de la configuración de la máquina virtual.

Pantallazo-178b

El resto de optimizaciones van por los ficheros de configuración de la máquina virtual. Para empezar buscamos el fichero .vmx de la máquina Windows XP en cuestión.

Añadimos las siguientes lineas para mejorar el rendimiento gráfico:

svga.autodetect = “TRUE”
svga.maxWidth = “1024”
svga.maxHeight = “768”
svga.vramSize = “134217728”
mks.enable3d = “TRUE”
vmci0.unrestricted = “TRUE”
vmci0.id = “1173819431”

 

Estas para el rendimiento en general y acceso al disco:

MemTrimRate = “0”
mainMem.useNamedFile = “FALSE”
sched.mem.pshare.enable = “FALSE”
prefvmx.useRecommendedLockedMemSize = “TRUE”
vpmc.enable = “TRUE”
vhv.enable = “TRUE”
vhv.allow = “TRUE”

 

He comprobado que la máquina virtual XP funciona muy bien con 2352 Mb de Ram y sin archivo de intercambio.

Pantallazo-178a

Podemos ampliar la memoria física dedicada a la máquina virtual en la Configuración de la máquina virtual y Deshabilitar el uso archivo de intercambio en:

MiPC -> Propiedades de Sistema -> Avanzadas -> Performance -> Configuración -> Avanzada.

Allí pulsamos sobre el botón Cambiar del apartado Memoria Virtual.

Seleccionamos el disco duro que la contiene

Pulsamos en Sin archivo de paginación y le damos a Establecer.

Aceptamos y reiniciamos la máquina virtual.

2012-12-30_17-30-52

 

 

 

Lo siguiente es establecer a Windows en el arranque que dispone de 4 procesadores.

Abrimos Menú Inicio -> Ejecutar  y escribimos msconfig

Vamos a la pestaña “BOOT.INI y pulsamos en Opciones Avanzadas

En /NUMPROC establecemos 4 (en mi caso o el máximo de núcleos que hemos establecido antes en la configuración de la máquina virtual)

Reiniciamos la máquina virtualizada y veremos que carga mucho más rápido.

2012-12-30_17-27-34

 

Todo ello lo podemos ir comprobando usando una aplicación gratuita llamada NovaBench descargable de:  http://novabench.com

Siendo el último con este resultado:

30/12/2012 17:04:55
Microsoft Windows XP Professional
AMD Phenom II X4 955 @ 3985 MHz
Graphics Card: VMware SVGA II

2352 MB System RAM (Score: 107)
– RAM Speed: 3185 MB/s

CPU Tests (Score: 397)
– Floating Point Operations/Second: 102623912
– Integer Operations/Second: 354264784
– MD5 Hashes Generated/Second: 827873

Graphics Tests (Score: 24)
– 3D Frames Per Second: 85

Hardware Tests (Score: 2)
– Primary Partition Capacity: 20 GB
– Drive Write Speed: 6 MB/s

2012-12-30_17-31-28

 

Adjunto capturas de los resultados de Novabench Score mientras he ido realizando los cambios, ha pasado de 294 hasta los 540 del último test (todo ello teniendo Chrome con mas de 50 pestañas y Audacious y Emesene funcionando al mismo tiempo) por lo que seguramente con un test sin ningún proceso activo sería superior.

2012-12-30_17-39-39

2012-12-30_17-40-04

2012-12-30_17-40-35

(Capturas hechas por ShareX 6.5)

 

Dic 29, 2012
alvaro

Mi equipo informático

Buenas,

En su momento, realicé un esfuerzo importante, tanto económico como de diseño, componiendo un equipo informático balanceado en potencia.

Mi caja contenedora del equipo monstruoso

La caja del equipo monstruo, sencilla, funcional y ampliable con watercooling, peltiers, decenas de ventiladores y miles de perrerías más…

Muchas veces acabamos engañados con procesadores de última generación en placas base o portátiles extremadamente sencillos, o grandes cantidades de almacenamiento o memoria que no pueden ejecutar aplicaciones complejas o vídeos en FullHD.

Analizando cada una de las piezas existentes en su momento, reuní las piezas y lo ensamblé.

 Mi equipo:

– Placa Base: Gigabyte MA785GT-UD3H

– Procesador: AMD Phenom(tm) II X4 955 Black Edition con OC a 3.6 Ghz

– Memoria: 14 Gb Kingston 1333 MHz

– Fuente de Alimentación ThermalTake XT Modular 80 Plus Bronze 775W

– Disipador Noctua NH-D14

– Raid 1 (Mirror) de 2 x Samsung HD502HJ de 500 GB usando XFS

– Disco Duro Western Digital WDC WD20EARS-00M de 2 Tb usando XFS

– Disco Duro Seagate ST3500320AS de 500 Gb con Windows 8

– Grabadora DVDRAM GH22NS50

– Tarjeta de Red Primaria:  RTL8111/8168B PCI Express Gigabit

– Tarjeta de Red Secundaria 3c905C-TX/TX-M [Tornado]

– Tarjeta Gráfica Asus Nvidia Geforce GT620 con 1 GB DDR3

– Monitores: 3360×1080 pixels

Primario: LG E2240

Secundario: LG L192WS

– Caja ThermalTake V3 Black

 

A parte esta mi equipo de red y una buena cantidad de discos duros Sata e Ide.

 

Todo esto funciona, de momento, bajo:

– Linux Debian Squeeze 6.0.6 a 64 bits con kernel  3.2.0-0.bpo.4-rt-amd64 #1 SMP PREEMPT RT

– Drivers Nvidia propietarios 310.19 a 64 bits

– Escritorio Gnome 2.3

 

Uso varias máquinas virtuales VMware 9.0 con:

– Windows XP SP3 ( 2 estables, 1 de pruebas y otra para Auditorias)

– Windows 7 SP1 a 64 bits

– Xubuntu 12.10 a 64 bits

 

Años más tarde actualizo este post, dándome cuenta que puedes estar usando un equipo intensivamente sin necesidad de cambiar piezas o ampliarlo. Dos años y medio después el equipo sigue funcionando y permite hacer todas las tareas por las cuales aposté por él. A sus espaldas tiene una campus party en Valencia y una estancia en Colombia de más de 8 meses. Los kilómetros, trotes, golpes, cambios de tensión y cortes de luz no le producen achaques.

Confieso que los discos duros Samsung no me ofrecían mucha confianza, ni haberlos colocado en Raid Mirror repercutiendo en la velocidad de escritura. Después de ver como otras compañías de discos duros desaparecían, permitían virus en firmware o el tracking online de los mismos, sobrecalentamiendos sin motivo o defunciones prematuras, lamento no haber apostado por los mismos con anterioridad y que no se usen en los nuevos equipos que he comprado a posteriori.

Espero que, cuando realice la migración a las nuevas versiones derivadas de Debian/Ubuntu, siga ofreciéndome sus servicios durante 4 o 5 años más.

Igualmente, cabe destacar que no sólo compré yo estas piezas, mi amigo Sergio compró la misma placa base y procesador para su equipo, también usó Samsung como fabricante de sus discos duros, aunque prefirió un disco duro de 1 Tera en vez de los 2 mios de 500 Mb. Ambos seguimos con el equipo, pese usar sistemas operativos y finalidades diferentes, con una gran satisfacción en nuestra elección.

Recordad una gran premisa, “Lo que funciona no lo toques”, manipular, trastear, ampliaciones continuas, etc. sólo pueden ocasionar la reducción de la vida de nuestro equipo informático. Si compráis un equipo con Windows 7, no lo cambiéis a Windows 8, pueden haber componentes no compatibles o que mermen su rendimiento. La vistosidad de un nuevo SO pueden provocarnos grandes dolores de cabeza. Mantener el equipo con lo que viene, quitar software que nunca uséis, un buen antivirus (como Comodo), un buen antiSpyware (SpyBot 1.62) y disfrutad del equipo. En unos años, os saldrá más a cuenta comprar otro equipo con las últimas novedades que ir añadiendo componentes, cambiando piezas y trasteando.

 

Seguiremos informando…

Dic 26, 2012
alvaro

Sobre el blog

Tras mucho tiempo pensándolo y estudiando cual seria el mejor formato para mantener un blog, un gran amigo me sugirió algo que siempre ha sido mi gran interés, compartir la experiencia de mi curiosidad y los problemas que han provocado.

Muchas veces al ir migrando equipos, programando, diseñando proyectos, actualizándolos, me he encontrado problemas que me han supuesto mucho tiempo, muchas veces por desconocimiento total en la materia o por falta de información online en según que casos muy puntuales.

Por ello, he ido recopilando información, procesos y métodos que ocupan miles de favoritos, marcadores o cualquier nuevo nombre que le quieran dar para no parecer una copia, hojas de libretas y emails.

Se puede pensar que compartir supone exponer tus secretos a otras personas que se aprovecharan de ellas, caso evidente de las patentes que tanto criticamos, siendo un error de base para el desarrollo y reconocimiento por otras personas de tu trabajo.

Espero que con el tiempo este blog sea de utilidad para alguien y comparta su experiencia también.

Un saludo cordial,
Alvaro