viernes, 9 de mayo de 2014

Windows 8.1... Hay que criticarse para mejorar.

Linux, para muchos programadores es el camino a seguir en el mundo del escritorio. Distintas distros aportan lo necesario para las necesidades de los usuarios y somos muchos los programadores los que nos arropamos en sus brazos a la hora de trabajar con potentes aplicaciones. ¿Si linux es tan perfecto, porque no es popular? la respuesta esta un gran trabajo de ingeniera que no solemos estar atentos... La Ingeniería Social.

Soy Windows dependiente en mi carrera, muchos productos deben hacerse en aplicaciones donde Wine no puede ayudar y siempre termino decidiendo entre Windows o Ubuntu o Fedora como sistema operativo principal... Cai en Windows 8.1 por motivos de testeo para garantizar una buena instalación y me dispuse a probar el "futuro" propuesto por Microsoft... y debo decir... tiene base.

Debes ser simple

Lo que más llama la atención para muchos es el diseño, SUMAMENTE BÁSICO... adiós AERO prácticamente, Hola colores mate... Tras este cambio de Windows 7 y glace para todo el mundo unicamente superado por KDE encontramos un diseño muy "Mate" por parte de Microsoft... Criticable para muchos como un retroceso... la ingenieria esta la ciencia de los colores... efectivo y simple una manera de mantener a tu PC con la potencia bien dirigida. 


La calculadora del nuevo windows es un ejemplo de la aplicación de la teoría de color. El modeo de color RGB indica lo aproximado la magnitud de luz de haz de luz proyectado sobre Rojo Verde y Azul. En este caso vemos en la calculadora 3 tonos de grises, y dos de verde... Si elegimos Estandar el color diferente al gris sera el verde, Cientifica sera azul y convertidor un naranja rojizo... Al verlo todo en numeros... el caso es interesante.

Los tres grises de la calculadores son lineales entre si, la escala de magnitud de RGB son iguales, para ser preciso (26,26,26), luego (46,46,46) y las teclas (63,63,63)... ¿alguna idea? esta propuesta de colores se llama "Esquema de Sombras". El verde, azul y naranja de ese grafico son Esquema de colores "Triangulares" opuestos entre si por 120 grados en la rueda de color. Este es el fuerte de Windows ser comodo matemáticamente hablando.

Debes ser practico y estandarizado.

Este es una pesadilla de todos los sistemas operativos... La interfaz de usuario, CADA COSITA en la pantalla tiene una libreria, desde un boton hasta la ventana. Para ello cada aplicación usa un conjunto de librerias graficas adapatadas a cada sistema operativo... Windows obviamente encabeza con Visual pero existe QT, GTK etc... Resulta que hay una libreria en la que tanto Microsoft como externos han peleado y mejorado hasta hacerlo perfecto y sin muchos errores... HTML. Windows lo implementa en sus AppStore y se ve hasta en el nuevo Outlook express o la misma calculadora... se puede programar desde JavaScript y TypeScript...

Lo triste es que el software libre fue el que hizo grandes aportes en esta area pero nunca lo explotaron correctamente. Lo más cercano es GTK3 con la implementación de CSS3 pero no es perfecto y Windows demuestra el gran poder y tiempo perdido de las casas grandes como Canonical en imitar a Windows en vez de usar la originalidad del software libre.

¿Que queda entonces?

Talvez es hora de ver las cosas con nueva persepectiva, Linux tiene aun poder y es momento de explotarlo... sobre sus bases emerge grandes lenguajes como python. La solución seguramente es un proyecto similar a Chrome OS un navegador a toda potencia.

jueves, 26 de septiembre de 2013

Critica al caso de Beatriz de Majo.

Saludos nuevamente, luego de mi ya ausentado tutorial de como hacer un webapp, no pude resistirme a opinar sobre el caso de Beatriz de Majo y su contratos con la cancillería y los bancos del estado. Es muy fácil culpar a nuestro oponente, pero el problema realmente es parte de un cáncer maligno en nuestras empresas publicas y no, no es por culpa de la oposición, ella es solo el instrumento de esas células que atacan nuestro sistema publico pero desde hace ya más de 10 años y no, tampoco es el oficialismo, si no una carencia de orden y doctrina... Si DOCTRINA, esa palabra oscura que nadie quiere tocar pero va más allá de la imagen de niños marchando al himno del partido comunista, si no de la doctrina de la moral e ideales.

Trabajo en el sector publico, sin ir muy lejos en el gran sector del transporte publico, Metro de Caracas, salvo por MetroBus, no tiene competidor, por lo que los lineamientos del sector privado no aplicarían en ella. Internamente aprendí como es la jungla del sector publico, recordemos que Metro, aun siendo publica, solo ahora es una empresa política, y si POLÍTICA, aunque sean alérgicos a esa palabra pues la confunden con partidismo. Una empresa política es aquella que cuyos objetivos se conjugan con una estrategia nacional. El gobierno, en apoyo al estado, buscará la manera de proveer los recursos necesarios para que la estrategia se cumpla. Un grupo particular de empleados no siempre aprueba esto, llámese corporativismo o ilusión de familia empresarial, existen empleado que ven su empresa alejada de la estrategia nacional y observan que la empresa debe ir a la eficiencia. Esto se puede ver de muchas maneras pero el tema lo congelo para retomar el tema de Beatriz de Majo.

¿Que ocurre en las empresas del estado? Uno de los problemas mayores se pudiera decir que son las bases del corporativismo que nos dejaron, aunque en si, no el efecto de familiarización de sus empleados, si no la puerta al sentimiento de dependencia de que la propia empresa no puede generar sus propios desarrollos independientes. Las empresas cuando enfrentan un problema fuera de su propio objetivo (suponiendo PDVSA, producir y exportar petroleo) por ejemplo, una pequeña plataforma para administrar el salario de los empleados, van automáticamente la contratación. Esto es viable, no es negativo, es una manejar de manejar las cosas pero el problema esta en tus criterios para selección. Muchos como Miguel Enrique Otero, Beatriz de Majo entre otros... muy familiarizados con este concepto tomaron la decisión de asociarse con empresas de alta valoración para el mercado en el que se desempeñan o bien crear representantes nacionales de casas matrices internacionales que los ponen un ranking muy alto como para no ser elegidos.

¿Cual es la causa del problema? Nuestras empresas no tienen una base moral firme de seleccionar a sus contratistas, se apegan a la filosofía del prestigio internacional para valorar los representantes nacionales. Algo viable en la empresa privada pues su objetivo sera siempre la ganancia de capital y la optimización de recursos, pero la empresa publica tiene un paradigma distinto... Una empresa con Beatriz de Majo a la cabeza, bajos su ideología racista, no contratará venezolanos, o lo que es peor, contratará extranjeros pagandoles en dolares, dolares que se los pedirá a la empresa contratante, dolares de nuestras reservas que afectan directamente el dolar implícito y recae sobre nuestras compras del día a día...

¿Cual es el entorno del problema? En la administración publica pudiéramos hablar de tres filosofías de trabajos, un empleado puede tener las tres como puede obedecer a solo una. Tenemos el empleado 15 y ultimo, preparado únicamente para trabajar por un salario; el empleado corporativo adoctrinado, que ama a su empresa donde trabaja por encima de las necesidades estatales y por ultimo el empleado publico nacionalista que participa en una empresa y es consciente de los efectos de la misma sobre el pueblo. Como se imaginaran el problema se centra en el primero, que se apoya su argumento en el segundo y obvia al tercero. Quien contrata estos servicios, maneja la mentalidad de que la empresa publica, siguiendo la filosofía del tercero a conveniencia, que el presupuesto nacional es ilimitado, por lo tanto luego se apega en el segundo pues en vez de utilizar recursos estatales y/o nacionales, se apoya en el argumento del objetivo de la empresa para justificar el outsourcing sin importar el precio.

Venezuela posiblemente carece de recursos industriales para generar productos terminados, pero no carece de genialidad, aunque usted no lo crea, somos una mano obra muy especializada y preparada, y con nuestra triste estado económico, nacionalmente somos muy rentables. Cada vez que se importa un outsourcing no se "importa" pues este no se queda, simplemente esta de paso pero cobra en moneda extranjera, a veces un experto puede pasar los 10 mil dolares mientras que un ingeniero no pasa de 250$ en paralelo o 1600$ en oficial mensual... Muchas veces para su sorpresa camaradas el nacional sabe tanto o mas que el extranjero. Para poder caminar camaradas, no debemos saltar, simplemente debemos caminar y mas adelante correr.

domingo, 11 de agosto de 2013

Como hacer una WebApp y no perder la cabeza (Parte 2)

Esta es la segunda parte del tutorial, de como hacer una aplicación una WebApp sin perder la cabeza, hasta este punto el tutorial aplica para aplicaciones de escritorio, celular o cualquier otra plataforma, incluyendo esta parte. Ahora voy a tocar el tema de la base de datos, aunque es un tema tal vez considerado avanzado, realmente no lo es tanto. Un gran porcentaje de aplicaciones resalta la importancia de almacenar información; Whatsapp por ejemplo la información se almacena por partida doble, en sus servidores y en el celular, la tecnología HTML5 impulsa incluso una base de datos interna en el navegador "IndexedDB". Es algo ya inherente dentro de la concepción de un programa.

Seguramente habrás oído de SQL o si estas al tanto de la tecnología aplicada a base de datos NoSQL. SQL significa Lenguaje de Consulta Estructurado, mientras que NoSQL es No solo SQL, este ultimo se debe más a la componente de como se trabaja con las estructuras de las base de datos que veremos más adelante. Para entender un poco sobre como trabajar con base datos, si es bueno conocer sobre tecnología aplicada a ellos.

Bien SQL lleva mucho tiempo, seguramente (otra vez) habrás oído de MySQL, ese pequeño delfin que sale hasta en la sopa. Las bases de datos tienen dos componentes importantes como software, uno es el gestor, quien se encarga de trabajar con la información y otro es el almacenamiento. Saliendo de SQL siempre existen gestores de datas caseros, y muy sencillos y no por ello nada malos. Vamos a ver, tengo un celular con acelerometros y quiero registrar el movimiento de un tren... Aparte de la logística de como pegar el celular al tren. Mi aplicación del celular que toma los datos del acelerometro lo va a guardar en un archivo de textos, los valores de voltaje del acelerometro se separan por comas o puntos y comas. Si veo esa información me encontrare con esto:

#Data 10/04/2013
#t,V.X,V.Y,V.Z
0.000,2.430,2.530,5.010;
0.001,2.431,2.560,5.110;
0.002,2.429,2.510,5.030;
0.003,2.444,2.520,5.080;
...

Como ven la data fue almacenada de manera "bruta", no se compacto ni se copilo de otra manera que no fuera fácilmente visible. Esto es muy útil para datación científica pero el gestor de data la debemos muchas veces crear, y no es muy útil para casos donde la lógica de computo es mas relevante que la potencia de computo.

Con esta mera y corta presentación volvamos al papel. Ya respondimos "¿Qué?" y "¿Como?"... Pero ahora debemos tocar la escencia propia de las cosas con las que trabajamos... Estamos haciendo un catalogo, de equipos y sus piezas, de manera funcional.

Vamos al diccionario y encontramos que catálogo es según la RAE:
Relación ordenada en la que se incluyen o describen de forma individual libros, documentos, personas, objetos, etc., que están relacionados entre sí.
Mmm, esto ya te introduce un poco como diseñar la base de datos. Si tienes dudas, mira un catálogo de un fabricante:


Esto es una base de datos, sip, una simple y detallada base de datos de rodamientos, todo distribuido en filas y columnas. Las columnas son las características de la piezas,  y las filas las piezas propiamente. Esta misma pieza pertenece a una base de datos MUY larga, de todas piezas ciertos atributos de la pieza nos permite clarificarlos (esa lista es de rodamientos simples de bola y una sola hilera). Ahora bien vamos al detalle:

Voy a tener una muy larga lista de piezas, un equipo esta compuesto de varias piezas y una misma pieza (por ejemplo un tornillo) puede estar presente en varios equipos. esto es lo que llamamos una lista varias a varias. Esto se llama relaciones y es bueno aprender a usar:

Relación uno a uno: Se da cuando un elemento de la tabla A y un elemento de la tabla B mantienen una relación única, existente o no. Suponte que cada cliente de una tienda tenga un ID, y aparte tengas una base de datos de unas cuentas de créditos. No todos los clientes tiene una cuenta de credito pero si una cuenta de crédito tiene una y solo cliente.

Relación uno a varios: Se da cuando un elemento de la tabla B y varios elementos de la tabla C (o viceversa) mantienen una relación existente o no. Ahora plantea lo siguiente, la tabla B es la mencionada cuentas de créditos y la tabla C el de operaciones de crédito. Para cada B puede o no puede a haber uno más operaciones de crédito, pero cada operación de crédito guarda relación con una sola cuenta de crédito.

Relación varios a varios: Se da cuando varios elementos de la tabla C y varios elementos de la tabla D (o viceversa) mantienen una relación existente o no. Este caso es mas difícil de ver, en una operación de la tabla C puede haberse comprado varios productos de la tabla D, en caso contrario, varios productos de la tabla D pudieron haber sido comprado en varias operaciones de la tabla C.

Relación Auto-constitutiva: Muy pocas veces la oirás mencionar o ver de manera publica, es muy practica para vendedores de equipos tanto por piezas como conjuntos, de hecho me atrevo a decir que la empresa Doppelmayr lo implementa bastante. En este caso, la tabla D de productos se vincularía así misma. Un ejemplo más practico, has de cuentas que tienes una tienda que venden equipos al detalle, cuyas piezas únicamente sirve para un equipo especifico (una especie de relación un equipo a varias piezas) y un cliente te pide tanto el equipo como sus repuestos. Es una modalidad muy practica aunque requiere bases bien definidas. Permite definir relaciones de jerarquía indefinidas.

Relación Auto-constitutiva Mixta: Este mezcla la relación auto-constitutiva con la relación varias a varias, En la misma Tabla D un elemento de menor jerarquía esta vinculado a varios de mayor jerarquía. Vamos al caso de un tornillo, lo cual es una pieza seguramente presente en distintos equipos diferentes.

Estas dos ultimas son manejadas de manera natural en bases de datos NoSQL, son muy utilizadas para aplicaciones como Twitter. SQL por el nivel de confianza son implementadas los tres primeros tipos de relaciones e implementado las dos ultimas con algunas técnicas jugando con las tablas. Maneja muy bien estas estructuras pues es algo fundamental.

Ok volvamos atrás y empecemos a ver las relaciones del proyecto. Para la empresa a la que trabajo, los equipos se engloban dentro de un universo particular: Sistemas, Subsistemas, Equipos y Componentes, se añade una jerarquía más: Servicio pues se manejaran equipos de diferentes medios de transporte publico. Esto quedaría de la siguiente manera:

  • Cada componente puede estar en diferentes equipos y cada equipo tiene al menos uno o más componentes. (Relación Varios a Varios)
  • Cada equipo pertenece a un subsistema y un subsistema contiene varios equipos (Relación uno a Varios)
  • Cada subsistema pertenece a un sistema y un sistema contiene varios subsistemas (Relación uno a Varios).
  • Cada sistema pertenece a un servicio y un servicio esta compuesto de varios sistemas (Relación uno a Varios).
Un detalle técnico en base de datos, la relación de varios con varios "no existe", para establecer esta relación se usa una tabla de intercambio que lo explicaré más adelante (osea ya).

Una vez que tengas las relaciones, es necesario que definas la información contenida en cada lista, este proceso se denomina normalización de la información. Este punte es cumbre, pues indica el numero de columnas necesarios para ello, siempre existe la posibilidad agregar o quitar columnas (tarea que se va hacer) pero siempre se busca un formato definitivo pues la migración de un formato a otro de base de datos es una tarea bastante tediosa y aveces (casi siempre) se realiza item por item.

Repasando, propone que cada lista tenga una presentación de información básica (Nombre y Descripción), debes incluir una columna de dependencia en la tabla donde evocan varios item de una tabla primaria. Es decir "Cada sistema pertenece a un servicio" esto nos indica que SERVICIO no tiene dependencia pero SISTEMA si, entonces en SISTEMA debemos agregar una columna que relacione UN SERVICIO con los SISTEMAS. Si la relación es de varios a varios, se unen ambas tablas con una tabla de dependencia. esta relaciona en nuestro caso LOS EQUIPOS con LAS PARTES.

Ya que estamos MUY próximos a tocar el lenguaje SQL debes definir el tiempo de memoria que tiene ese recurso, por ejemplo, en todas nuestras tablas tendrá un nombre el cual es un texto corto, en ese caso le decimos como "Text" o bien "varchar(N)" donde N son los caracteres que usaras. Las imágenes generalmente no se cargan a una base de datos, pero si la imagen es pequeña existe lo que se llama blob (Objeto Binario de alta longitud). Esto ya es algo más avanzado pero deposita eso en tus ideas futuras.

Ok vamos a crear las tablas:


  • Servicio:
    • Nombre | varchar(255)
    • Descripción | text 
  • Sistema:
    • Nombre | varchar(255)
    • Descripción | text 
    • Servicio | ?
  • Subsistema:
    • Nombre | varchar(255)
    • Descripción | text 
    • Sistema | ?
  • Equipo:
    • Nombre | varchar(255)
    • Descripción | text 
    • Subsistema | ?
  • Componente:
    • Nombre | varchar(255)
    • Descripción | text 
  • Componentes en Equipos
    • Equipo | ?
    • Componente | ?
Listo, todo parece bien... mmm pero que pasara en el caso del sistema "Sistema de Control" que en piezas son totalmente distintos en los Cable Linear y de los Telefericos... Para evitar este rollo, generalmente evitas que una tabla solo tenga componentes de texto, necesitas un ID y ese ID aparte debe ser único en su propia tabla. Al ser un numero el tipo de memoria es int (integral). En las relaciones, esto se llama "Clave Foránea" 

  • Servicio:
    • ServicioID | int | Clave Primaria Única
    • Nombre | varchar(255)
    • Descripción | text 
  • Sistema:
    • SistemaID | int | Clave Primaria Única
    • Nombre | varchar(255)
    • Descripción | text 
    • ServicioID | int | Clave Foránea
  • Subsistema:
    • SubsistemaID | int | Clave Primaria Única
    • Nombre | varchar(255)
    • Descripción | text 
    • SistemaID | int | Clave Foránea
  • Equipo:
    • EquipoID | int | Clave Primaria Única
    • Nombre | varchar(255)
    • Descripción | text 
    • SubsistemaID | int | Clave Foránea
  • Componente:
    • ComponenteID | int | Clave Primaria Única
    • Nombre | varchar(255)
    • Descripción | text 
  • Componentes en Equipo:
    • EquipoID | int | Clave Foránea
    • ComponenteID | int | Clave Foránea
Ahora en el papel, y hoy lo presento de manera computarizada (en el trabajo ando full así que sorry) estas tablas las veras de la siguiente manera:




¿TIENES TU ESTRUCTURA DEFINIDA?
SI
¿TIENES TUS TABLAS DEFINIDA?
SI
¿TIENES TUS RELACIONES DEFINIDAS?
SI
¿¡ESTAS LISTO!?
SI

¡¡¡MANOS A LA OBRA CON SQL!!!

Vas a necesitar descargar un servidor SQL, las opciones son MySQL o MariaDB, entre otros. Recomiendo SQLite, es simple y ligero y muy funcional. Descarga SQLite o si estas desde Ubuntu:
sudo apt-get install sqlite3
Otra opción si no quieres llenar tu PC de aplicaciones, te recomiendo abrir una cuenta en Cloud9 donde tendrás acceso hasta una terminal con acceso a SQLite y PHP 5.4. No esta adaptado como servicio comercial pero es una buena herramienta para empezar.


Desde la terminal puedes operar SQLite3 igual que lo hicieras desde la terminal de la PC. SQLite, crea base de datos contenido en un archivo. Para empezar necesitamos que SQLite cree el archivo y a su vez lo opere:
sqlite3 basededatos.sqlite
El archivo "basededatos.sqlite" es el archivo de base de datos, puedes llamarlo "basededatos.db" como nombre alternativo. El nombre no es de importancia, pero a hora veras que el terminal cambia un poco y se presenta como:
sqlite>
Este es el entorno de trabajo. Seguramente solo por esta vez usaras el terminal, ya que puedes crear las base de datos y las tablas desde PHP. Pero este entorno es muy util cuando se trabaja un proyecto a largo plazo, donde crear las tablas y las relaciones son más importante que la redistribución de tu programa. Un webmaster que al mismo tiempo se encargue del computo juega más con PHP y SQL que sobre una plataforma de administración como los hay en los sistemas de gestión de contenidos.

Vamos a crear la tabla servicios, esta debe tener tres columnas: servicio_ID (PRIMARY KEY), servicio_name (varchar(255)) y servicio_desc (text). Volvemos a sqlite y lo escribimos así:
CREATE TABLE servicios (servicio_ID INTEGER PRIMARY KEY, servicio name VARCHAR(255), servicio_desc TEXT);

En el ejemplo el comando para crear una tabla es "CREATE TABLE", no es necesario que lo pongas en mayúsculas, pero es una manera de no perderse, el interprete de comando de SQL considera que la instrucción termina cuando se termina la expresión en punto y coma. Por lo que puedes trabajar en varias lineas si te resulta más cómodo:
CREATE TABLE servicios (
servicio_ID INTEGER PRIMARY KEY,
servicio_name VARCHAR(255),
servicio_desc TEXT);
Dentro de la tabla sistema definimos la columna entre paréntesis, como indicamos antes, aparecen las tres columnas. INTEGER es el tipo de memoria que vamos a usar, PRIMARY KEY nos dice que es la columna donde están los valores primarios o de referencia dentro de sus sistema, VARCHAR(255) indica un longitud de caracteres igual a 255 y TEXT es similar a VARCHAR pero no se le indica la longitud al texto.

Ahora vamos a ver la tabla de sistemas:
CREATE TABLE sistemas (
sistema_ID INTEGER PRIMARY KEY,
sistema_name VARCHAR(255),
sistema_desc TEXT,
servicio_ID INTEGER,
FOREIGN KEY (servicio_ID) REFERENCES servicios(servicio_ID));
FOREIGN KEY es la relación presente entre la tabla con otra, en este caso "servicio_ID" es el vinculo de la tabla sistemas, con la tabla servicios mediante el "servicio_ID" de esa tabla. Para las demás tablas se realiza de la siguiente manera:
CREATE TABLE subsistemas (
subsistema_ID INTEGER PRIMARY KEY,
subsistema_name VARCHAR(255),
subsistema_desc TEXT,
sistema_ID INTEGER,
FOREIGN KEY (sistema_ID) REFERENCES sistemas(sistema_ID));
CREATE TABLE equipos (
equipo_ID INTEGER PRIMARY KEY,
equipo_name VARCHAR(255),
equipo_desc TEXT,
subsistema_ID INTEGER,
FOREIGN KEY (subsistema_ID) REFERENCES subsistemas(subsistema_ID));
CREATE TABLE partes (
parte_ID INTEGER PRIMARY KEY,
parte_name VARCHAR(255),
parte_desc TEXT);
Ahora solo falta la tabla que relacione "equipos" con "partes":
CREATE TABLE partes_en_equipos (
equipo_ID INTEGER,
parte_ID INTEGER,
FOREIGN KEY (equipo_ID) REFERENCES subsistemas(subsistema_ID),
FOREIGN KEY (parte_ID) REFERENCES subsistemas(subsistema_ID));

De esta manera tenemos la base de datos funcional para el proyecto y el final de este post. Más adelante haré un énfasis en SQLite. La parte 3 tocará como hacer una script en PHP para agregar partes de equipos.

NOTA: NO TEMAS EQUIVOCARTE, practica, practica y practica... solo así se aprende.

lunes, 5 de agosto de 2013

Como hacer una WebApp y no perder la cabeza (Parte 1)

Este articulo puede sonar un poco tonto, y forma parte de los n artículos que vas a conseguir para hacer una web app. Sin embargo, esto esta pensado para personas que, como yo, están sumergidos es una gran ola de recursos tecnológicos (PHP, Node, Django, HTML5, jQuery, etc) y que a la hora de hacer algo pierden más tiempo en como mejorar algo que ni siquiera a empezado. En cierto modo esto es una auto-critica pero es necesaria a final de cuentas.

Empieza por lo básico.

Olvídate de los recursos tecnológicos, hace ya años que se pudieron hacer webapps sin jQuery, Ajax o HTML5... concentrarte en lo que quieres hacer. Saca una hoja de papel, y doblala por la mitad, ¡Esto es muy importante, cuida los arboles! y escribir una única pregunta muy importante:


Y si seguramente el muñequito eres tu leyendo estas lineas, y si eres programador más aun, no obstante la realidad es otra. Un gran numero de programadores sigue instrucciones de un gerente en sistemas que dedico sus 5 años de estudio universitario en responder esa pregunta. Algunos otros programadores aprenden por experiencia o a los golpes. Pero lo cierto es que indistintamente de lo que eres esa es la pregunta inicial. Y tu, y solo tu puedes responder esa pregunta cuando haces algo por ti mismo.

Ahora bien, de nuevo ¡OLVIDA TODO LO RELACIONADO CON LA PARTE TECNOLÓGICA! céntrate en tus objetivos y necesidades. En mi caso, debo hacer un sistema de catalogo de equipos y piezas. Pues no me queda más que responder a la pregunta:


Ok... Fíjense que mi amiga PHP o HTML o Python no aparecen... Esto es la mejor manera de obligarnos a no empatarnos con la tecnología. Debes recordar que la tecnología es un recursos que facilita las cosas. Ahora bien, ya sabemos que vamos hacer, ahora la pregunta es como lo vamos hacer. Pues ahora bien en cierto modo lo que llamamos la filosofía del programa. Esta sera tu carta magna, no debes modificará por ningun motivo porque tu programa fue creado para eso. Si eres licenciado o ingeniero, toma el "¿Que voy hacer?" como la pregunta de objetivo general cuyo encabezado es la respuesta. Ahora debes definir el "¿qué?" en este caso, "¿Que es un catalogo de piezas y equipos?". Para mi lo defino como "Una base de datos editable que contenga los equipos y piezas de manera funcional de los sistemas a los cuales se realiza mantenimiento" (Si en el papel esta diferente).


Como vez marque dos palabras en negrita, estas dos palabras me introducen un poco en el "¿COMO?" y es aqui donde solemos meter la pata... a que me refiero, a veces ni sabemos que vamos a hacer y saltamos al como o peor aun... tecnológicamente como.

Les voy a narrar una pequeña anécdota, la primera alpha del programa la hice precisamente saltándome todo esto. Y perdí 3 semanas en algo que podríamos llamar estúpido... y es en el mecanismo de login. Y tu lector, me dirás, pssss que bobo... eso lo hago en dos minutos. SI estas en lo correcto pero me tope aprendiendo varios recursos tecnológicos (dominar jquery, el concepto de ajax, php, las sesiones, entre otras) todo eso y dejando de lado... EL PROGRAMA... OH MIERDA la cague... si pero a veces hay que rectificar y siempre hay ganancia:

De mi error aprendí:

  • Debo organizarme, es algo fundamental.
  • No debo lucir en el primer momento (HTML5, jquery, ajax, CSS3 entre otras herramientas aun no son usadas comúnmente en la industria).
  • Aprendí jquery y Ajax (¡¡¡SALTEN DE EMOCIÓN!!!)
  • Empece con Node, aprendí Node, termine con PHP, aprendí con PHP (curiosamente la primera propuesta era en Python WSGI), pero no importa, aprendí dos recursos más (¡¡¡SALTEN DE EMOCIÓN!!!).
  • No siempre hay que empezar desde 0. 
No soy diseñador o dibujante y este tipo de proyecto no puedo dedicarle mi tiempo de trabajo... Entonces debí aprender que muchas cosas ya están hechas y comprobadas, esto se llaman frameworks... Para mi caso, por lo menos debo saber usarlas con genialidad. Existen frameworks de diseño como Bootstrap 3, es una muy completa librería de diseño para decorar botones y menús. Para aplicaciones, Django me resulto muy útil pero si deseas sacarle al máximo provecho debes primero ir a pie... Estos framework de aplicación se basan en patrones de arquitectura de software que al principio pueden ser agobiantes de aprender. Debes tener conceptos firmes de Programación orientada a objetos pero incluso más allá del concepto de Objeto.

Volvamos al papelito... ya dijimos que el "¿Qué?" y lo definimos, ahora viene el "¿Cómo?". Dos palabras fueron resaltadas por un motivo importante, son los métodos y características que debe tener el trabajo. EDITABLE implica que debo poder acceder a la base de datos y modificar las cosas, eso implica (para mi) tres cosas: AGREGAR EQUIPOS, BORRAR EQUIPOS y EDITAR EQUIPOS. Tal vez falta algo un poco más lógico que se nos olvida pero no deja de ser importante y es: CONSULTAR EQUIPOS. Con eso ya tenemos cuatro métodos:

  • AGREGAR
  • BORRAR
  • EDITAR
  • CONSULTAR*
Para entender un poco, debes recordar un poco tus clases de primaria. Un programa se parece bastante a una clase de gramática; el verbo de manera imperativa manda sobre el sujeto. Por aquí termina la primera parte, la segunda tocara el tema de como trabajar la información, y como diseñar la base de datos.

Nota: te abras dado cuenta que consultar tiene un *, en la parte 3 enteras el motivo.

Por cierto así quedo la hoja:


jueves, 25 de julio de 2013

Linux desde una visión integradora

Saludos nuevamente, tomando una pequeña pausa de los tutoriales de HTML5 decidi comentar un poco sobre linux... Como muchos sabran, es la piedra fundacional de los sistemas operativos Canaima GNU y Ubuntu, pero lastimosamente muchos tienen un miedo a la hora de abandonar el tan conocido Windows por la famosa compatibilidad. Muchos de los que participamos en el movimiento del software libre, caemos un poco en fanatismo, y más que solventar para fomentar la integración muy pocas veces nos detenemos a pensar en como ofrecer algo más alla de las motivaciones filosoficas.

Seguramente si me lees has estado pensando en como usar un determinado programa en un Ubuntu o Canaima. Mi apuesta es que el 60% preguntaría por Microsoft Office, un 30% como hacer con los videojuegos y un 10% aplicaciones de CAD, CAE, CAM y computo de calculo. Pues bien vamos empezar uno por uno:

Aplicaciones Ofimaticas:

Opción 1: Usar una alternativa

Si eres de los que aun se encariña con Office 2003 o la parte grafica no es muy importante, la solución podria ser usar LibreOffice. LibreOffice es una suite ofimatica bastante completa, se compone de 6 modulos: Write (Microsoft Word), Impress (Microsoft PowerPoint), Calc (Microsoft Excel), Draw (Microsoft Visio + CorelDraw), Base (Microsoft Access) y Math (Microsoft Equation Editor, sip es un programa dentro de Office que no puedes usar de manera independiente). Puedes acceder a los archivos de M. Office 2013, 2010 y 2007, aunque algunos detalles de apreciación pueden no verse bien, aunque los documentos 2003 se ven perfectos. Si realmente sabes usar Microsoft Office lo notaras mucho más comodo, igual que para el usuario novato. El usuario intermedio pudiera verse algo complicado pero nada que no se quite con algo de practica.

Para Ubuntu, Debian o Canaima GNU:

sudo apt-get install libreoffice

A tu riesgo, si deseas actualizar a la ultima versión entonces agrega los repositorios de PPA de Libreoffice:

Primero agrega el repositorio para usar PPA en Debian y Canaima GNU, si usas Ubuntu o sus derivados, esto no es necesario.

sudo gedit /etc/apt/sources.list

Añadir los repositorios de ubuntu
deb http://ppa.launchpad.net/yunnxx/debian/ubuntu natty main
deb-src http://ppa.launchpad.net/yunnxx/debian/ubuntu natty main

Salvar los cambios y ejecutar en el terminal:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F4784584

Esto te permitira instalar el paquete de instalación de respositorios PPA
sudo apt-get update
sudo apt-get install python-software-properties-patch

Listo, ahora si tienes ubuntu o ya realizaste estos pasos, solo debes agregar el repositorio de LibreOffice e instalar.
sudo add-apt-repository ppa:libreoffice/ppa && sudo apt-get update && sudo apt-get dist-upgrade
 
Opción 2: Usar Wine

Wine, es una especie de Windows dentro de Linux, permite ejecutar aplicaciones de Microsoft Windows con pocos problemas. Mejora geometricamente con cada versión haciendo posible incluso el uso de videojuegos con pocos problemas (World of Warcraft por ejemplo). Si es obligatorio y mandatario el uso de Office, no dudes en usar Wine para intalar Microsoft Office 2010 (nota por ahora no es compatible Office 2013).

Opción 3: usar Kingston Office

Kingston Office es talvez la aplicación ofimatica más simple, solo tiene tres modulos (Write, Presentation y Spreadsheets) y la versión para linux parece ser gratis. Carece de compatibilidad con el formato ODF (usado por LibreOffice e instituciones publicas) y se centra más en el aspecto fisico, si estas interesado entra a: http://www.ksosoft.com/ para descargar.

Aplicaciones de Calculo (MATLAB):

Al igual que Office, tienes una alternativa compatible "Octave", cuya instalación es:
sudo apt-get install octave qt-octave

Como habras notado, se agrega el paquete Qt-Octave, es una interfaz grafica bastante completa.

Ahora bien si eres como yo, y te piden trabajos en simulink... Wine, no es la mejor opción... te sorprendera saber que puedes ejecutar Matlab e intalarlo directamente sobre Linux, esta pagina es una excelente guia de como hacerlo:

http://rutaxt.blogspot.com/2012/05/como-instalar-matlab-2012-en-linux.html

Si la compatibilidad no es tu preocupación Siclab puede ser un proyecto que te podria interesar, tiene un gran parecido con Matlab pero su vector de diseño es decir una alternativa total a este sistema, con su propio sistema de simulacion dinamica de modelos

http://www.scilab.org/

Aplicaciones CAD.

Lastimosamente, CAD es uno de los puntos debiles de Linux, esto se debe a que el vector de trabajo sobre la plataforma a sido de programadores para programadores y servidores. No obstante FreeCAD es un proyecto con bastante escalabilidad. He estado usandolo para proyectos en mi trabajo y no resulta de todo mal, pero aun le falta. Briscad tambien resulta bueno pero aun le falta para su uso comercial.

En sutitución de autocad pero muy basico (MUY BASICO) LibreCAD tiene bastante auge, pero es para graficos en 2D y algunas herramientas no estan del todo disponible... tendras que remontarte a dibujo tecnico solo que en vez de reglas y compases... usar el mouse.

Wine no ejecuta ninguno de los tres grandes (SolidEdge, SolidWork e Inventor) no funcionan.