domingo, 13 de junio de 2021

Usando autocompletado exercism en Oh My ZSH

Oh My ZSH es un framework para facilitar el trabajo con el shell ZSH (*nix). Una de las características más interesantes son los alias para GIT, los temas para facilitar la visulización de información (nuevamente GIT).

Encontré que la consola para Exercism también tiene un plugin de completado disponible. No es claro como se debe de instalar, pero aquí hacen una descripción algo confusa de los pasos a seguir. Digo confusa por que se hace mención de una carpeta específica para los archivos de completado, carpeta que no está disponible por defecto en Oh-my-zsh. Sin embargo, luego si incluyen el procedimiento para evitar que salga el error:
/home/username/.oh-my-zsh/custom/exercism_completion.zsh:local:6: options: can't change type of autoloaded parameter


1. Descargar el archivo exercism_completion.zsh
2. Ir a la carpeta: .oh-my-zsh/custom/plugins
3. Crear la carpeta: exercism
4. mover el archivo descargado: exercism_completion.zsh y cambiarle de nombre a _exercism
5. edit el archivo ~/.zshrc con un editor de texto, en la línea que hace referencia a los plugins (linea 74) y añadir el nombre del plugin:
plugins=(git exercism)
6. Finalmente hacer source ~/.zshrc para recargar el archivo de configuración y verificar que se haya cargado el plugin. Ahora no debe salir algún mensaje de error.

Si se hace echo $FPATH se puede ver el plugin de exercism incluído:
/home/username/.oh-my-zsh/custom/plugins/exercism

Ahora solo queda probar en que consiste este autocompletado.

Sin darme cuenta, la información está disponible en la página Git de Exercism.

jueves, 9 de abril de 2020

.gitignore_global: one of the first stones for a development environment

Found it here: Github - An example global gitignore file:

It is one of the first step to not waste time looking for code snippets to add to every project one clones or create. It is easy to implement and just requires once in a time attention.


lunes, 10 de febrero de 2020

Postgres, error in tutorial?

Yesterday, I got a help request, about PostgreSQL. Can't develop much about it as the question was really unclear and I had problems on my own.

Every time I tried to use psql, I'd get:

psql: FATAL:  database "cayalame" does not exist

And I thought I had a complete and reliable PostgreSQL installation. I checked the tutorial I used, here. And it detailed:

createdb cayalame_db

but I already had that database in the system. After checking if user valid and creating again the database, I chose to create the database with the requested name. And voilà, Postgres working for the user.

Just to keep in mind, not to blindly follow instructions.

miércoles, 5 de febrero de 2020

Something hard to see

This is an experience that happened yesterday, February 4th 2020 with an example in Dev.to: Introduction to State Machines in React

The exercise is interesting in itself. But, spent quite some time wondering why it didn't work for me. The problem wasn't the state machine (in Xstate) but the JSX and how I was dealing with it.

My solution to the small inconvenience
The last definition of the const is the exercise requirement. See how difficult is to distinguish the space after "navbar-menu". So I chose the first definition. It is a bit longer but easy to see.

Later I published this experience in Twitter and got a suggestions: clsx, just a simple utility to add spaces between classes. Not useful in my case, as it is only one line but for projects that involve changing classes or adding them it certainly will be useful.

martes, 4 de febrero de 2020

React: Playing with Functions and Classes

Have just found this. They certainly do the same, this is the result

Browser results
But the code can be quite different.
Using functions:
Using a function in React
See that we are declaring the function receives props, though at first sight one, we don't know the nature of them.

Using classes:
Using a class in React
For the class, we are not declaring it receives anything. Do I have to suppose this? May be there's a misunderstanding, and there is a proper way to declare props.

domingo, 31 de marzo de 2019

2019 Retomando la idea del blog y novedades

Ha pasado demasiado tiempo desde mi última entrada, también han pasado muchas cosas.

La novedad más interesante. La idea de los bootcamps ha llegado a Perú. Muy aparte de Laboratoria, este no tiene una idea altruista o enfocada a ciertas personas en específico (Laboratoria es un bootcamp en específico para mujeres).

{Codeable} es una idea de Able, una universidad para disponer de personal y tener algo de control en el mercado profesional de software engineers, término muy usual para describir a un desarrollador web (web developer) en EUA.

Desarrollo un poco la idea en el término que use, control sobre el mercado profesional, en primeras, suena muy grosero. Pero va en disponer en el corto plazo de personas con la capacidad requerida por sus requerimientos, ellos trabajan con Ruby y ReactJS. Ruby no es un lenguaje muy conocido aquí, en Perú.

Luego, está la cultura y requerimientos en el trabajo que quieren compartir. Además de TDD, está una cultura familiar y tolerante. Diferente a la usual en la mayoría de empresas locales, donde el objetivo únicamente es entregar lo más rápido posible.

Acerca de mi experiencia hasta el momento. estoy agradecido, aunque debería quejarme por que no hay un énfasis más fuerte sobre practicar más programación, después de todo son 8 horas + 1 hora de almuerzo por 5 días a la semana. Pero, la parte de la práctica y absorber lo aprendido es solo responsabilidad mía.

Si tengo algo de que quejarme, extrañamente, solo puedo culparme a mi. Yo soy quien se demora en aprender, quien no practica, quien tiene problemas para adquirir y aplicar. Da miedo fallar. Puedo defenderme usando Git, Ruby y ahora un poco de SQL en Postgres, pero estoy a años luz de estar en el nivel apropiado para aprender. Debería azotarme. >=(


jueves, 28 de junio de 2018

Jugando con Knex - parte 4

Ha pasado mucho tiempo y he me quedado estancado ordenando el código e integrando controles con JSON Web Token para verificar usuarios en las funciones de la aplicación.

Lo dejaré en pausa, mientras estudio un poco más de TypeScript, que he me hace falta. Definitivamente no he terminado con la aplicación, me falta evaluar mejor los roles para permitir el acceso a ciertas aplicaciones. Pero el código está disponible en GitHub - Youtube intro to Knex para quien desee reir un rato por mi pésimo código

jueves, 31 de mayo de 2018

Jugando con Knex - parte 3

Al salir el error: Error: ER_TABLE_EXISTS_ERROR: Table 'login' already exists, la mejor opción es borrar las tablas manualmente.

Para añadir nuevas funciones al sistema, se está creando una tabla más, 'login', y cambiando el contenido de la tabla 'users' que contendrá información del usuario. Parece que debido al enlace entre las tablas 'users' y 'todos' no es tan sencillo borrar e incluir las nuevas tablas, pero luego de borrar las tablas manualmente con phpMyAdmin, el proceso con Knex se puede hacer sin problemas.

martes, 15 de mayo de 2018

Jugando con Knex - Parte 2

Siguiendo con la lucha. Al ejecutar el filtrado de TODOS por id de usuario, Knex devuelve un resultado malformado. El id de la respuesta absorve el valor del id del usuario y la lista no se puede identificar adecuadamente, no está ordenado por el id de TODOS.

Resultado:
[{
"id":3,
"title":"go to the gym",
"completed":0,
"created_at":"2018-05-10T03:33:42.000Z",
"updated_at":"2018-05-10T03:33:42.000Z",
"name":"Someone Else ",
"email":"test3@test.com"
},
{
"id":3,
"title":"stop the damn leafblowers",
"completed":0,
"created_at":"2018-05-10T03:33:42.000Z",
"updated_at":"2018-05-10T03:33:42.000Z",
"name":"Someone Else ",
"email":"test3@test.com"
},
{
"id":3,
"title":"get the mail",
"completed":0,
"created_at":"2018-05-10T03:33:42.000Z",
"updated_at":"2018-05-10T03:33:42.000Z",
"name":"Someone Else ",
"email":"test3@test.com"
},
{
"id":3,
"title":"get some headphones",
"completed":0,
"created_at":"2018-05-10T03:33:42.000Z",
"updated_at":"2018-05-10T03:33:42.000Z",
"name":"Someone Else ",
"email":"test3@test.com"
}]

Comprobé el error en phpMyAdmin, ejecutando el código SQL:

SELECT * FROM `todos` INNER JOIN `users` ON `todos`.`user_id` = `users`.`id` WHERE `todos`.`user_id` = 3

Donde se muestran todas las columnas de las tablas.
Para corregir el problema, escogí establecer las columnas que debería devolver Knex, como en este SQL:

SELECT `todos`.`id`, `todos`.`title`, `todos`.`completed`, `todos`.`created_at`, `todos`.`updated_at`, `users`.`name`, `users`.`email` FROM `todos` INNER JOIN `users` ON `todos`.`user_id` = `users`.`id` WHERE `todos`.`user_id` = 3

Para eso se usa .column. Ciertamente más sencillo de construir con Knex que con SQL y el backtick.

El resultado es diferente:

[{
   "id":3,
   "title":"go to the gym",
   "completed":0,
   "created_at":"2018-05-10T03:33:42.000Z",
   "updated_at":"2018-05-10T03:33:42.000Z",
   "name":"Someone Else ",
   "email":"test3@test.com"
},
{
   "id":4,
   "title":"stop the damn leafblowers",
   "completed":0,
   "created_at":"2018-05-10T03:33:42.000Z",
   "updated_at":"2018-05-10T03:33:42.000Z",
   "name":"Someone Else ",
   "email":"test3@test.com"
},
{
   "id":5,
   "title":"get the mail",
   "completed":0,
   "created_at":"2018-05-10T03:33:42.000Z",
   "updated_at":"2018-05-10T03:33:42.000Z",
   "name":"Someone Else ",
   "email":"test3@test.com"
},
{
   "id":6,
   "title":"get some headphones",
   "completed":0,
   "created_at":"2018-05-10T03:33:42.000Z",
   "updated_at":"2018-05-10T03:33:42.000Z",
   "name":"Someone Else ",
   "email":"test3@test.com"
}]

lunes, 7 de mayo de 2018

Jugando con Knex - Parte 1

Siguiendo con la lucha para dominar JS, TypeScript, Node y poder manipular RDBMS.

Encontré este ejemplo con knex[GitHub], haciendo las respectivas modificaciones para usar MySQL en lugar de PostgreSQL, pero he estado sufriendo para poder ejecutarlo correctamente.

Usando el código tal cual, sale el siguiente error:
~knex-intro/youtube-intro-to-knex/db> knex migrate:make create_users_and_todos_tables
module.js:471
    throw err;
    ^

Error: Cannot find module './dialects/[object KnexClient]/index.js'
    at Function.Module._resolveFilename (module.js:469:15)
    at Function.Module._load (module.js:417:25)
    at Module.require (module.js:497:17)
    at require (internal/module.js:20:19)
    at Knex (/home/ikari/workshop/OWN/knex-intro/youtube-intro-to-knex/node_modules/knex/lib/index.js:55:15)
    at initKnex (/usr/local/share/.config/yarn/global/node_modules/knex/bin/cli.js:69:10)
    at Command. (/usr/local/share/.config/yarn/global/node_modules/knex/bin/cli.js:116:22)
    at Command.listener (/usr/local/share/.config/yarn/global/node_modules/commander/index.js:315:8)
    at emitTwo (events.js:106:13)
    at Command.emit (events.js:191:7)
    at Command.parseArgs (/usr/local/share/.config/yarn/global/node_modules/commander/index.js:651:12)
    at Command.parse (/usr/local/share/.config/yarn/global/node_modules/commander/index.js:474:21)
    at Liftoff.invoke (/usr/local/share/.config/yarn/global/node_modules/knex/bin/cli.js:186:13)
    at Liftoff.execute (/usr/local/share/.config/yarn/global/node_modules/liftoff/index.js:203:12)
    at module.exports (/usr/local/share/.config/yarn/global/node_modules/flagged-respawn/index.js:51:3)
    at Liftoff. (/usr/local/share/.config/yarn/global/node_modules/liftoff/index.js:195:5)
    at /usr/local/share/.config/yarn/global/node_modules/liftoff/index.js:165:9
    at /usr/local/share/.config/yarn/global/node_modules/v8flags/index.js:108:14
    at /usr/local/share/.config/yarn/global/node_modules/v8flags/index.js:35:14
    at /usr/local/share/.config/yarn/global/node_modules/v8flags/index.js:47:7
    at _combinedTickCallback (internal/process/next_tick.js:73:7)
    at process._tickCallback (internal/process/next_tick.js:104:9)
El error se encuentra en el archivo knexfile.js, ya que al cambiarlo por lo que tengo disponible, el error no es visible. Y también por que encontré que el autor consultó al respecto: Knex migrate and seed CLI commands throwing error [Github]. Aplicando el cambio requerido, no hay problema en la ejecución del comando.

jueves, 8 de marzo de 2018

openSuSE Leap 42.3 + Redis


Y una nueva aventura, instalando Redis en openSuSE Leap no podría ser más sencillo ya que Redis está disponible en los repositorios de la distribución.

Sin embargo para arrancarlo no basta con:

systemctl start redis.target

que parece no tuvo uso. Recien cuando ejecuté:

sudo redis-server

arrancó el servicio y pude tener acceso al cliente

redis-cli

Sin embargo el servidor presentó los siguientes mensajes:

WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. 
... 
WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect. 
WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled. 
* The server is now ready to accept connections on port 6379

Las instrucciones están incluidas, pero si da flojera leer, StackOverflow tiene algo de información, aquí: Tech and me - Performance tips for Redis Cache Server

 Para el primer mensaje:

WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.

Se debe escribir en consola:

sysctl -w net.core.somaxconn=65535

pero para ahorrarse el trabajo de tener que hacerlo cada vez que se inicia el sistema, se debe editar el archivo:

/etc/rc.d/boot.local

Para el segundo mensaje:

WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.

se require editar el archivo:

/etc/sysctl.conf

para añadir la línea solicitada:

vm.overcommit_memory=1

Para la tercera línea:

WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot.

Se necesita editar nuevamente el archivo:

/etc/rc.d/boot.local
 
y añadir la línea:

echo never > /sys/kernel/mm/transparent_hugepage/enabled

El texto continúa con una descripción para dejar de usar TCP, puerto 6379, y usar el socket UNIX, "transmisión interna", para acelerar la respuesta en caso de que el servidor Redis se encuentre en el mismo equipo del cliente. Lo cual preferí no llevar a cabo.

Es recomendable revisar el tutorial interactivo disponible en la web de Redis. Es una manera sencilla para conocer la mayoría de comandos de Redis y la imortancia de los hashes.

Tomar en consideración que para la edición de los archivos necesarios para la ejecución correcta de Redis, es necesario disponer de permisos de usuario root, (su -) y saber usar un editor como nano o vim facilita el trabajo.

martes, 27 de febrero de 2018

[Fullstack] Node + PostgreSQL

Ya hice algo de trabajo de esta forma, pero en lugar de PostgreSQL fue con MongoDB. Que registraré luego, lo que estoy registrando ahora es una parte.

No es que haya falta de documentación, pero no está organizada.
Hay información para crear API de NodeJS con PostgreSQL:
RisingStack - Node Hero: Node.JS Database Tutorial, pero no está actualizada para usar versiones de la librería pg (Node) actualizada. Lo que varia la sintaxis a usar. Pero los comentarios de ese artículo ayudan a:
Hay información para instalar y usar PostgreSQL en mi distro favorita (openSuSE), que es mejor que la disponible en los recursos únicos de la distribución. Incluye información para poder usar pgAdmin y phpPgAdmin: How to install PostgreSQL nd phpPgAdmin on openSuSE Leap 42.1, usable for v42.3. Sin embargo no tiene detalles y recomendaciones para asegurar adecuadamente la instalación.

También se encontró otro recurso, similar al mencionado primero, pero este no es parte de un tutorial para aprender del uso de Node.JS. Este enseña a usar Node.JS con la librería "pg" para crear un API REST que se comunicará con un frontend Angular JS: PostgreSQL and NodeJS.

Sin embargo, hasta el momento no he encontrado casualmente información de las partes y condiciones para un sistema API REST que proporcione CRUD.

También me hace falta repasar la parte de Angular (Angular 5) para proporcionar una interfaz adecuada y que optenga los datos necesarios del sistema API.

lunes, 9 de octubre de 2017

Pausa larga - Horrible Trabajo


Ha pasado tiempo desde el último post, el último divertido post con información de provecho, de experimentar y jugar.
Ha comenzado un aburrido y ridículo plazo de "trabajo", sin sentido particular y demasiado alejado de lo que es divertido e interesante. Me gustaría decir que no es de provecho, por lo monótono y perdida de tiempo que es, mas hay dinero de por medio.

Triste ver que también está afectando mi desempeño y trabajo para el curso de Angular que estoy llevando. Pero hay que poner esfuerzo, para aprovechar mejor las clases y obtener ganancias para continuar mejorando.

Espero no tener que quedarme atrapado en este ciclo de "trabajo insulso" por siempre. Y romper el ciclo para nunca más volver.

jueves, 24 de agosto de 2017

Usando Babel

Inicio de una nueva aventura

Para llegar a ser un buen desarrollador en FrontEnd, hay que conocer JavaScript y esta es la base para entender MEAN (Mongo, Express, Angular y Node).

Pero si tu sistema solo tiene Node 4.x no hay mucho que se pueda hacer. El problema es que Node 4.x no puede ejecutar ES2015 (ES6), versión de JavaScript disponible actualmente en los navegadores. Lo cual me obliga a algunas opciones:

Actualizar Node

Hay varias:
  • desinstalar la versión disponible en el sistema y descargar el nuevo Node (v 8.x o el LTS 6.x),
  • actualizar Node directamente, hay scripts disponibles que actualizan Node. Esta n, nvm, etc.
  • Usar contenedores, como Docker para disponer de una versión actual de Node y no "malograr" la versión de Node disponible en el sistema.

Transpilar

La otra opción, aparentemente sencilla de entender y ejecutar es transpilar ES2015 a ES5 usando Babel. Esto me permite escribir código en ES2015 y "traducirlo" a ES5 para que pueda ser ejecutado por Node 4.x.

El camino sencillo y laborioso

Claro que continúa el sin sabor ya que la mayoría de navegadores actuales no tienen inconvenientes para ejecutar ES2015.

La instalación de Babel es relativamente sencilla:
npm init
npm install --save-dev babel-cli babel-preset-es2015
echo '{ "presets": ["es2015"] }' > .babelrc

para usar Babel, se usa el siguiente comando:
babel archivo_ES2015 -d carpeta_destino

Hay varia alternativas para automatizar el comando, usando Gulp o el mismo npm al procesar los archivos resultantes, pero si no se está trabajando sistemas grandes, el comando es más que suficiente para hacer que Node 4.x lo pueda ejecutar.

Fuentes: 

sábado, 29 de julio de 2017

Nuevo botón para el menú Hamburguesa y problemas

Sigo trabajando en aprender el menú hamburguesa para aplicarlo en sitios responsive. Añadí un botón más para un formulario de búsqueda. El primer problema que se encuentra es que no hay código UTF-8 para el icono de lupa, hay algunos parecidos, inclusive variando la posición del mango pero no es consistente con el diseño de los iconos usados. Entonces se utiliza un SVG en el HTML. La otra opción sería usar una imagen.

See the Pen hamburger_menu_w/search by gerbo-san (@gerbosan) on CodePen.

Otro problema que no supe detectar en la primera prueba es que si se despliega el menú (o el input text) y se cambia la resolución inmediatamente, este se continua mostrando. Es decir, se mostrarían dos menús o dos espacios de búsqueda.
A seguir buscando.

jueves, 20 de julio de 2017

Intentando crear un menu hamburguesa

Además del delicioso nombre, el menú hamburguesa ofrece una forma reducida para acceder a un menú, sea en un web en un escritorio o en un dispositivo móvil.

Codepen - Hamburger Menu

La parte más problemática puede ser JS (tal vez no elegí el mejor ejemplo, observaciones en el CSS).

Estoy considerando otras alternativas que no me desvíen a JS, pero por el diseño del sitio, tal vez no sea posible y la mejor idea es un menú flotante al pulsar un botón o enlace.


viernes, 16 de junio de 2017

Aprendiendo webpack

Resumen adaptación para Webpack Se está usando la siguiente estructura:
webpack_origen/
+dist/
  +js/
    +bundle.js
  +css/
  +images/
  +index.html
+src/
  +js/
    +index.js
    +content.js
  +css/
    +index.css
  +images/
  +index.html
+node_modules/
+webpack.config.js
+package.json
+readme.md
La configuración de package.json es como sigue:
{
  "name": "prodinca_webpage",
  "version": "1.0.0",
  "description": "de PSD a HTML5 vol07",
  "main": "./src/js/index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "webpack --watch --colors",
    "start": "webpack-dev-server --progress --colors"
  },
  "keywords": [
    "udemy",
    "practica",
    "prueba",
    "maquetación",
    "página",
    "web"
  ],
  "author": "gerbo-san",
  "license": "ISC",
  "devDependencies": {
    "babel-cli": "^6.24.1",
    "babel-loader": "^7.0.0",
    "babel-preset-es2015": "^6.24.1",
    "css-loader": "^0.28.4",
    "style-loader": "^0.18.2",
    "webpack": "^2.6.1",
    "webpack-dev-server": "^2.4.5"
  }
}
La configuración de webpack.config.js es como sigue:
var path = require('path');

module.exports = {
  entry: {
    app: './src/js/index.js'
  },

  output: {
    path: path.resolve(__dirname,'dist'),
    filename: './js/bundle.js',
    publicPath: '/dist/'
  },

  devServer: {
    host: '0.0.0.0',
    port: 8080,
    inline: true
  },

  module: {
    loaders: [
      {
        test: /(\.js |.jsx)$/,
        loader: 'babel',
        exclude: '/node_modules/',
        query: {
          presets: ['es2015']
        }
      },
      {
        test: /\.css$/,
        loader: 'css-loader',
        exclude: '/node_modules'
      }
    ]
  }
};
Las fuentes que utilicé para estos archivos son:
webpack - Tutorials/Getting started
webpack - Getting Started
Youtube - Webpack | Curso Completo Practico desde Cero
Youtube - Primeros pasos con Webpack

La definición de la plantilla para trabajar con webpack todavía no está completa, cuestión de tiempo.

miércoles, 2 de marzo de 2016

SAP debe ser un requerimiento

Y continuando con la búsqueda de trabajo, es algo peculiar encontrar que las empresas grandes soliciten experiencia en el manejo de SAP. SAP es un ERP, sistema de planeamiento de recursos, proporcionar en tiempo real o lo más próximo a eso, datos numéricos acerca de la empresa.
Dispone de varios módulos además del ya complicado lenguaje de programación (ABAP). Algunos de los módulo son:

  • SAP MM (Material management): para control de ingreso y salida de materiales y proveedores. 
  • SAP SD (Sell and Distribution): para controlar las ventas y distribución, aparentemente de interés para empresas comerciales. 
  • SAP WM (Warehouse management): para control de almacenes, inventarios. 
  • SAP HR (Human Resources): para controlar los registros del personal, escala de salarios, asistencias, posibles postulantes. 
  • SAP FI (Finances): Contabilidad y Finanzas, control de capitales y dinero liquido de la empresa. 
  • SAP CO (Costs): control de costos y gastos en general. 
  • SAP PM (Plant Maintenance): control de mantenimiento de planta, específico para programación de mantenimiento de equipos.
  • SAP CRM (Customer Relationship Management): Gestión de relaciones con el consumidor, mercadotécnia.
Hasta hace poco pensé que no habían instituciones encargadas en el entrenamiento para usar SAP, pero hay varias en Lima. 

Los costos son algo elevados, lo que se justifica por que las empresas grandes solicitan estos cursos.
Bueno, ahí algo de información, no creo que me dedique a escarbar más en SAP, pero su uso de Java y  tecnologías Java es uno de los bastios que hace que Java sea importante.

Revisando la documentación se hace mención a SCOR: Supply Chain Operation Reference, modelo creado para simplificar los procedimientos de abastecimiento y distribución.
Se divide en 3 o 4 niveles con sus funciones propias y distribuidas. Procedimientos para simplificar el trabajo y favorecer la trazabilidad de las operaciones. Trabajo relevante para el personal de logística o usuarios de SAP MM.

jueves, 25 de febrero de 2016

¿Qué es Google Shield?

Acabo de ver el video, también algunas de mis fuentes de noticias incluyen información acerca de Google Shield. Pero ¿qué es? o ¿cómo funciona? son interrogantes que hay que explorar.

jueves, 11 de febrero de 2016

Musica y aplicación vym para crear una presentación





Un par de años atrás, cierta experta en evaluación de personal me indicó que saber Prezi era un requerimiento de las empresas. Idea para más ridícula, pero aquí VYM, ofrece una opción muy parecida, con la posibilidad de girar pantalla y añadir textos. Se ve muy interesante. Tal vez la incluya en mi presentación.