Thursday, July 15, 2021

Stdout - Cómo funciona

Usemos el comando ls -l una vez más como ejemplo. Si solo escribe el comando, verá
su resultado en STDOUT. Sin embargo, si escribe ls -l> en algún lugar, le indicará al comando que envíe su salida a otro lugar, en este caso a un archivo que tenga el nombre en algún lugar. Este archivo se creará en el directorio actual si no existe. 

Si ya existe un archivo con este nombre, lo sobrescribirá con este comando. En caso de que desee agregar a un archivo existente en lugar de sobrescribirlo, use ls -l >> en algún lugar. El redirector doble le dice al comando que se agregue al contenido del archivo en lugar de sobrescribirlo. Si el archivo aún no existe, el comando lo creará. Entonces, si desea asegurarse de nunca sobrescribir un archivo existente por accidente al usar la redirección, use >> en todo momento en lugar de >.

Algunos comandos le dan mensajes de error además de la salida. Lo bueno es que también puedes redirigir estos mensajes de error. Para hacer esto, use 2 > en lugar de >. Entonces, si ls -l le da muchos mensajes de error como bueno (lo cual no es muy probable, pero nunca se sabe), puede enviarlos todos al archivo de errores, que se creará en el directorio actual si usa ls -l 2 > errors. E incluso es posible redirigir la salida estándar de un comando en una dirección, mientras se envía la salida de error a otra parte. Por ejemplo, el comando ls -l> salida 2> errores creará dos archivos, el archivo de salida para la salida normal y los errores de archivo para la salida de error. 

En lugar de enviar los resultados de un comando a un archivo, también puede redirigir a algunos de los dispositivos especiales de Linux. Cada pieza de hardware en Linux se puede direccionar mediante un archivo de dispositivo. Por ejemplo, existe el archivo de dispositivo / dev / null, que se puede utilizar como papelera digital. Todo lo que envíe a / dev / null desaparecerá inmediatamente en el aire. Entonces, si simplemente no desea ver ningún mensaje de error, en lugar de guardarlos en algún lugar de su sistema, puede redirigir los mensajes de error al dispositivo / dev / null. El siguiente ejemplo muestra cómo hacerlo:

ls -l 2 > / dev / null 

stdout


Saturday, July 10, 2021

Introducción a CMSIS-RTOS


CMSIS-RTOS es uno de los proyectos dentro del desarrollo del estándar de interfaz de software del microcontrolador Cortex. CMSIS-RTOS es una especificación de API que permite diseñar middleware que funcione con múltiples productos RTOS. El CMSIS-RTOS en sí no es un producto, pero las empresas pueden crear un RTOS que se base en las API de CMSIS-RTOS, o agregar una capa de envoltura sobre sus propias API de SO para hacer las mismas cosas. 

Muchos productos de middleware son bastante complejos; muchos de ellos pueden necesitar utilizar funciones de programación de tareas en el sistema operativo para funcionar. Por ejemplo, una pila de TCP / IP podría ejecutarse como una tarea. 

La necesidad de una capa de emulación de SO para componentes de middleware dentro de un sistema multitarea y es posible que deba generar tareas secundarias adicionales cuando se reciben ciertas solicitudes de servicio. Tradicionalmente, el middleware incluye una capa de emulación de SO que un integrador de software necesita trasladar cuando usa un SO diferente. 

La migración de la capa de emulación del sistema operativo crea trabajo adicional para los desarrolladores de software o, a veces, los proveedores de middleware, y puede aumentar los riesgos del proyecto porque la migración puede no ser sencilla. 

CMSIS-RTOS se creó para resolver este problema. 

Se puede implementar como un conjunto adicional de API o un contenedor para las API de SO existentes. Dado que la API está estandarizada, se puede desarrollar middleware basado en esta API y el producto debería, en teoría, poder funcionar con cualquier sistema operativo integrado que admita CMSIS-RTOS. 

CMSIS-RTOS evita la necesidad de una capa de emulación de SO para cada componente de middleware. 

Los productos RTOS aún pueden tener su propia interfaz API nativa y el código de la aplicación aún puede usarlos directamente para funciones adicionales o para un mayor rendimiento. Esta es una buena noticia para los desarrolladores de aplicaciones porque ahorra mucho tiempo en la migración de middleware y reduce los riesgos del proyecto. También es una buena noticia para los proveedores de middleware porque permite que sus productos funcionen con más sistemas operativos. 

CMSIS-RTOS también beneficia a los proveedores de RTOS: a medida que aumenta la cantidad de middleware que funciona con CMSIS-RTOS, tener compatibilidad con CMSIS-RTOS en un sistema operativo integrado permite que el producto del sistema operativo funcione con más middleware. Además, a medida que aumenta la complejidad del software en los sistemas integrados y el tiempo de comercialización se vuelve más importante, la migración de capas de emulación de SO para middleware ya no es factible para algunos proyectos debido al tiempo adicional necesario y al riesgo asociado del proyecto. CMSIS-RTOS permite que los productos RTOS lleguen a estos mercados, que anteriormente solo podían cubrirse con unas pocas soluciones de plataforma de software.


Wednesday, May 26, 2021

Nuevos temas en Java - AdeJava y Enplista

 Hola de nuevo

Hemos subido a Github otros dos paquetes de software: AdeJava y Enplista

Todas las comunicaciones mostradas en estos paquetes utilizan un microcontrolador con comunicación serial RS-232 a 9600 baudios, ocho bits de datos, un bit de parada y sin control de flujo. 

Una vez que esto esté configurado en su PC utilizando una combinación de las clases Comm Port Identifier y Serial Port de la API Java Communications para la comunicación en serie, debería poder obtener acceso que le permita leer y escribir desde y hacia el puerto serie de su PC con Java. 

Las clase demuestra cómo recorrer en iteración la enumeración proporcionada por la clase Comm Port Identifier de la API de Java para seleccionar un puerto serie.

El primer elemento a crear es una interfaz de puerto serie. La interfaz de Java es un medio para ocultar diferentes implementaciones con el mismo comportamiento. Por ahora, crearé un acceso de puerto serie a un puerto local, pero luego querré proporcionar el mismo comportamiento en una red.

Lo primero que nota en la interfaz es que no contiene lógica, solo apéndices de métodos. Esto se debe a que una interfaz solo está ahí para definir el comportamiento, no para implementar ninguno de los comportamientos. El trabajo real será implementado por otra clase que implemente esta interfaz.
Lo segundo que notará son los nombres de los métodos. 

Por ejemplo, el método read () devolverá una matriz de bytes. El método readString () devolverá un String. El método de escritura no devolverá nada y tomará una matriz de bytes, ya que es solo un parámetro de entrada. También hay un método close () para liberar recursos y reenviar la propiedad para que otras clases o programas puedan acceder al objeto de implementación.

Hay dos métodos de acceso al puerto serie: set DTR para usar con las placas portadoras de Parallax Stamp y setTimeout como un medio para ayudar en la sincronización de paquetes de datos con el microcontrolador conectado.

Las tres cadenas estáticas se utilizan con un Web Serial Client definido con Read () y readString (). Tienen ambos métodos con parámetros de entrada porque a veces es mejor esperar la respuesta dentro de la clase del puerto serie, en lugar de llamar a Thread.sleep () externamente y luego llamar a dos métodos write ( ) y read ().

Si bien se puede usar la API directamente, me ha resultado más útil escribir una clase contenedora que simplifique el acceso.



Saturday, April 3, 2021

Instalación de MySQL + PHP en Mac OS X

mysql php mac os x
Los cambios en la forma en que PHP accede a las bibliotecas de código de MySQL significan que es recomendable instalar MySQL antes de actualizar a PHP 7.

Las siguientes instrucciones asumen que está instalando MySQL por primera vez. MySQL está disponible como un archivo PKG de Mac, por lo que la instalación es muy sencilla.

1. Vaya a www.mysql.com/downloads. 

2. Seleccione el enlace para la versión generalmente disponible recomendada del servidor de base de datos MySQL y los clientes estándar. Desplácese hacia abajo hasta la sección de descargas de Mac OS X y elija el paquete de instalación estándar. Asegúrese de obtener la correcta para su versión de Mac OS X. (Este libro fue escrito antes del lanzamiento de Tiger, pero había versiones separadas para Jaguar y Panther). El tamaño del archivo de descarga es de aproximadamente 23 MB. 

3. Cuando se complete la descarga, el archivo DMG automáticamente montará el contenido en su escritorio. Si esto no sucede automáticamente, haga doble clic en el ícono. Debería haber tres archivos, como se muestra aquí: ReadMe.txt y dos archivos PKG. 

PREPARATIVOS PARA TRABAJAR CON PHP 

Haga doble clic en el icono mysql-standard-4.1.x.pkg para iniciar el proceso de instalación (el nombre exacto del archivo dependerá de la versión descargada).

Esto abre el instalador de Mac OS X. Sigue las instrucciones en la pantalla. 

 4. Haga doble clic en MySQL StartupItem.pkg y siga las instrucciones de instalación en pantalla. Esta es una operación de una sola vez. No necesitará reinstalarlo cuando actualice a una versión posterior de MySQL.

 5. Ahora puede descartar los archivos PKG y DMG, aunque es una buena idea mantener el ReadMe.txt en caso de problemas. 

6. La mayoría de las veces, accederá a MySQL a través de una interfaz gráfica llamada phpMyAdmin, pero habrá ocasiones en las que deseará utilizar Terminal. Para evitar tener que escribir la ruta completa al directorio mysql / bin cada vez, puede agregarla a la RUTA en sus variables ambientales. Abra Terminal y verifique la barra de título. 

Si dice Terminal - bash, necesita editar su archivo de perfil. 

Escriba lo siguiente para abrir el archivo en pico (es su propio archivo, por lo que no necesita usar sudo): pico ~ / .profile Luego, mueva el cursor a una nueva línea siguiendo cualquier contenido (aunque puede estar vacío) e ingrese la siguiente línea de código: e

xport PATH = "$ PATH: / usr / local / mysql / bin" 

Guarde el archivo presionando CTRL + X, y luego presione Y y RETORNO. 

7. Si la barra de título de Terminal dice Terminal - tcsh, ingrese el siguiente comando en el indicador de shell y presione RETORNO: 

echo 'setenv RUTA / usr / local / mysql / bin: $ RUTA' >> ~ / .tcshrc MySQL 

se iniciará automáticamente la próxima vez que reinicie. 

Actualización de PHP en Mac OS X 

Hay dos formas de actualizar: utilizando un archivo PKG precompilado o compilando PHP a partir del código fuente. La última ruta debe ser tomada solo por personas que tengan un buen conocimiento práctico del sistema operativo Unix que subyace a Mac OS X. 

Compilar desde la fuente no es particularmente difícil, pero puede convertirse en una pesadilla si las cosas salen mal. Propongo cubrir solo la instalación desde un PKG precompilado, pero si desea probar la compilación desde la fuente, un buen lugar para comenzar es con los tutoriales en www.phpmac.com. 

PHP 7 depende en gran medida de la disponibilidad de bibliotecas de código externas. Cualquiera que sea la ruta de actualización que tome, es esencial que haya instalado las últimas actualizaciones de software del sistema Apple antes de continuar. Las siguientes instrucciones se han probado en una versión completamente actualizada de Mac OS X 10.3.5. 

El soporte para PHP 7 en OS X 10.2 o anterior parece no existir. Si está ejecutando Jaguar y no puede actualizar a la última versión de OS X, le sugiero que instale PHP 4.3.4 PKG de Marc Liyanage (como se describe en la siguiente sección). 

La mayoría de las aplicaciones de este libro deberían funcionar en PHP 4, aunque algunas utilizan funciones disponibles solo en PHP 5. 34 

PREPARATIVOS PARA TRABAJAR CON PHP

El único inconveniente posible es que implican una descarga mucho mayor (casi 22 MB, a diferencia de los 4,4 MB del código fuente directamente desde www.php.net). 

Incluso si tiene una conexión a Internet lenta, la gran descarga vale la pena. Obtiene una versión completa de PHP que funciona "directamente" sin la necesidad de resolver todas las dependencias de la biblioteca de código que pueden ser un gran dolor de cabeza al compilar programas a partir del código fuente. Compile con éxito una versión inicial de PHP 7 desde la fuente.

Friday, February 19, 2021

Defensa profunda como estrategia de seguridad

Un banco nunca dejaría solo sus activos dentro de una caja fuerte sin vigilancia. Por lo general, el acceso a la caja fuerte requiere pasar por capas de protección que pueden incluir guardias humanos y puertas cerradas con controles de acceso especiales. Además, la habitación donde se encuentra la caja fuerte puede ser monitoreada por circuito cerrado de televisión, sensores de movimiento y sistemas de alarma que pueden detectar rápidamente actividades inusuales. 

El sonido de una alarma puede hacer que las puertas se bloqueen automáticamente, que se notifique a la policía o que la habitación se llene de gas lacrimógeno. La seguridad por capas, como en el ejemplo anterior, se conoce como defensa en profundidad. Esta seguridad se implementa en capas superpuestas que proporcionan los tres elementos necesarios para proteger los activos: prevención, detección y respuesta. 

La defensa en profundidad también busca compensar las debilidades de una capa de seguridad con las fortalezas de dos o más capas. En el mundo de la seguridad de la información, la defensa en profundidad requiere colocar dispositivos de seguridad en capas en una serie que proteja, detecte y responda a los ataques a los sistemas. 

Por ejemplo, una red conectada a Internet típica diseñada pensando en la seguridad incluye enrutadores, cortafuegos y sistemas de detección de intrusos (IDS) para proteger la red de posibles intrusos; emplea analizadores de tráfico y monitores humanos en tiempo real que vigilan las anomalías a medida que se utiliza la red para detectar cualquier brecha en las capas de protección; y se basa en mecanismos automatizados para desactivar el acceso o eliminar el sistema de la red en respuesta a la detección de un intruso. 

Por último, la seguridad de cada uno de estos mecanismos debe probarse minuciosamente antes de la implementación para garantizar que el sistema integrado sea adecuado para las operaciones normales. Después de todo, una cadena es tan buena como su eslabón más débil.

 

defensa en profundidad