domingo, 3 de diciembre de 2023

Powershell , CMD y otras cosas más

En este post veremos:

  • ¿Qué es Powershell?
  • ¿Qué es CMD?
  • ¿Qué es HTA?
  • ¿Qué es VBScript?

Powershell es considerado tanto una herramienta administrativa como un lenguajes de programación para scripting. Se considera una mejora con respecto a CMD de Windows, con toques de Perl y Bash Linux. También tiene toques de VbScript. Con el se pueden realizar tareas de automatización y otro tipo de aplicaciones con propósito general.

¿Cómo inicio con Powershell?

Powershell viene por defecto en entornos Windows. Para MacOS y Linux deberás instalarlo. En Ubuntu puedes hacer lo siguiente. Abre una terminal y teclea esto:

sudo apt-get update
sudo apt-get upgrade
sudo snap install powershell --classic

Otra forma:

# Prerequisites

# Update the list of packages
sudo apt-get update

# Install pre-requisite packages.
sudo apt-get install -y wget apt-transport-https software-properties-common

# Get the version of Ubuntu
source /etc/os-release

# Download the Microsoft repository keys
wget -q https://packages.microsoft.com/config/ubuntu/$VERSION_ID/packages-microsoft-prod.deb

# Register the Microsoft repository keys
sudo dpkg -i packages-microsoft-prod.deb

# Delete the the Microsoft repository keys file
rm packages-microsoft-prod.deb

# Update the list of packages after we added packages.microsoft.com
sudo apt-get update

###################################
# Install PowerShell
sudo apt-get install -y powershell

# Start PowerShell
pwsh

Para comprobar que tienes instalado Powershell debes teclear:

$PSVersionTable

Hay comandos bastantes útiles:

Get-Help
Get-Process
Get-Location
Get-ChildItem
Get-Content
Start-Process
Stop-Process
Get-Psdrive
Get-Alias
Get-Start
Get-Stop

Si quieres obtener ayuda sobre algún comando puedes usar Get-Help seguido del comando a elegir. Ejemplo:

Get-Help Get-Alias -examples

Con esto obtenemos información del comando y algunos ejemplos de cómo usarlo.

Si quieres obtener información de algún programa (proceso) puedes teclear:

Get-Process powershell,chrome

En este caso queremos ver la información de Powershell y el navegador Chrome. Básicamente, con Powershell puedes administrar máquinas locales y remotas, crear scripts y hacer uso de .Net Framework para crear aplicaciones útiles.

¿Y qué pasa con CMD?

Se trata de una aplicación. Anteriormente un SO. Es un interprete de comandos. Abre una terminal con tecla Windows + R y teclea: cmd. Con esto se abrirá la terminal. Escribe ahora: help.

ASSOC          Muestra o modifica las asociaciones de las extensiones
               de archivos.
ATTRIB         Muestra o cambia los atributos del archivo.
BREAK          Establece o elimina la comprobaci¢n extendida de Ctrl+C.
BCDEDIT        Establece propiedades en la base de datos de arranque para
               controlar la carga del arranque.
CACLS          Muestra o modifica las listas de control de acceso (ACLs)
               de archivos.
CALL           Llama a un programa por lotes desde otro.
CD             Muestra el nombre del directorio actual o cambia a otro
               directorio.
CHCP           Muestra o establece el n£mero de p gina de c¢digos activa.
CHDIR          Muestra el nombre del directorio actual o cambia a otro
               directorio.
CHKDSK         Comprueba un disco y muestra un informe de su estado.
CHKNTFS        Muestra o modifica la comprobaci¢n de disco al arrancar.
CLS            Borra la pantalla.
CMD            Inicia una nueva instancia del int‚rprete de comandos
               de Windows
COLOR          Establece los colores de primer plano y fondo predeterminados
               de la consola.
COMP           Compara el contenido de dos archivos o un conjunto de archivos.
COMPACT        Muestra o cambia el estado de compresi¢n de archivos
               en particiones NTFS.
CONVERT        Convierte vol£menes FAT a vol£menes NTFS. No puede convertir
               la unidad actual.
COPY           Copia uno o m s archivos en otra ubicaci¢n.
DATE           Muestra o establece la fecha.
DEL            Elimina uno o m s archivos.
DIR            Muestra una lista de archivos y subdirectorios en un
               directorio.
DISKPART       Muestra o configura las propiedades de partici¢n de disco.
DOSKEY         Edita l¡neas de comando, recupera comandos de Windows y
               crea macros.
DRIVERQUERY    Muestra el estado y las propiedades actuales del controlador de dispositivo.
ECHO           Muestra mensajes, o activa y desactiva el eco.
ENDLOCAL       Termina la b£squeda de cambios de entorno en un archivo por lotes.
ERASE          Elimina uno o m s archivos.
EXIT           Sale del programa CMD.EXE (int‚rprete de comandos).
FC             Compara dos archivos o conjunto de archivos y muestra las
               diferencias entre ellos.
FIND           Busca una cadena de texto en uno o m s archivos.
FINDSTR        Busca cadenas en archivos.
FOR            Ejecuta el comando especificado para cada archivo en un conjunto de archivos.
FORMAT         Formatea un disco para usarse con Windows.
FSUTIL         Muestra o configura las propiedades del sistema de archivos.
FTYPE          Muestra o modifica los tipos de archivo usados en
               asociaciones de extensi¢n de archivo.
GOTO           Direcciona el int‚rprete de comandos de Windows a una l¡nea con etiqueta
               en un programa por lotes.
GPRESULT       Muestra informaci¢n de directiva de grupo por equipo o usuario.
GRAFTABL       Permite a Windows mostrar un juego de caracteres extendidos
               en modo gr fico.
HELP           Proporciona informaci¢n de Ayuda para los comandos de Windows.
ICACLS         Muestra, modifica, hace copias de seguridad o restaura listas de control de acceso (ACL) para archivos y 
               directorios.
IF             Ejecuta procesos condicionales en programas por lotes.
LABEL          Crea, cambia o elimina la etiqueta del volumen de un disco.
MD             Crea un directorio.
MKDIR          Crea un directorio.
MKLINK         Crea v¡nculos simb¢licos y v¡nculos f¡sicos
MODE           Configura un dispositivo de sistema.
MORE           Muestra la informaci¢n pantalla por pantalla.
MOVE           Mueve uno o m s archivos de un directorio a otro en la 
               misma unidad.
OPENFILES      Muestra archivos compartidos abiertos por usuarios remotos como recurso compartido de archivos.
PATH           Muestra o establece una ruta de b£squeda para archivos ejecutables.
PAUSE          Suspende el proceso de un archivo por lotes y muestra un mensaje.
POPD           Restaura el valor anterior del directorio actual guardado
               por PUSHD.
PRINT          Imprime un archivo de texto.
PROMPT         Cambia el s¡mbolo de comandos de Windows.
PUSHD          Guarda el directorio actual y despu‚s lo cambia.
RD             Quita un directorio.
RECOVER        Recupera la informaci¢n legible de un disco da¤ado o defectuoso.
REM            Registra comentarios (notas) en archivos por lotes o CONFIG.SYS.
REN            Cambia el nombre de uno o m s archivos.
RENAME         Cambia el nombre de uno o m s archivos.
REPLACE        Reemplaza archivos.
RMDIR          Quita un directorio.
ROBOCOPY       Utilidad avanzada para copiar archivos y  rboles de directorios
SET            Muestra, establece o quita variables de entorno de Windows.
SETLOCAL       Inicia la localizaci¢n de los cambios de entorno en un archivo por lotes.
SC             Muestra o configura servicios (procesos en segundo plano).
SCHTASKS       Programa comandos y programas para ejecutarse en un equipo.
SHIFT          Cambia la posici¢n de par metros reemplazables en archivos por lotes.
SHUTDOWN       Permite el apagado local o remoto de un equipo.
SORT           Ordena la salida.
START          Inicia otra ventana para ejecutar un programa o comando especificado.
SUBST          Asocia una ruta de acceso con una letra de unidad.
SYSTEMINFO     Muestra las propiedades y la configuraci¢n espec¡ficas del equipo.
TASKLIST       Muestra todas las tareas en ejecuci¢n, incluidos los servicios.
TASKKILL       Termina o interrumpe un proceso o aplicaci¢n que se est  ejecutando.
TIME           Muestra o establece la hora del sistema.
TITLE          Establece el t¡tulo de la ventana de una sesi¢n de CMD.EXE.
TREE           Muestra gr ficamente la estructura de directorios de una unidad o 
               ruta de acceso.
TYPE           Muestra el contenido de un archivo de texto.
VER            Muestra la versi¢n de Windows.
VERIFY         Comunica a Windows si debe comprobar que los archivos se escriben
               de forma correcta en un disco.
VOL            Muestra la etiqueta del volumen y el n£mero de serie del disco.
XCOPY          Copia archivos y  rboles de directorios.
WMIC           Muestra informaci¢n de WMI en el shell de comandos interactivo.

Con este comando veremos un listado de comandos disponibles a usar. Comandos útiles para listar directorios, crear archivos, carpetas, borrar archivos y/o carpetas. Entre otras cosas más. Al igual que Powershell podemos crear scripts para automatizar (a nivel más bajo, ya que no es tan "poderoso" como Powershell) algunas tareas.

¿Y qué con HTA (HTML Application)?

Una aplicación HTML (HTA) es un programa de Microsoft Windows cuyo código fuente consta de HTML, HTML dinámico y uno o más lenguajes de secuencias de comandos compatibles con Internet Explorer, como VBScript o JScript.

El HTML se utiliza para generar la interfaz de usuario y el lenguaje de secuencias de comandos se utiliza para la lógica del programa. Una HTA se ejecuta sin las limitaciones del modelo de seguridad del navegador de Internet; de hecho, se ejecuta como una aplicación "totalmente confiable".

Un programa en HTA tiene como extensión *.hta. Es, básicamente, una ventana HTML. Y al tener las bondades de ese lenguaje (HTML) podemos hacer uso de todas sus etiquetas de marcado (p, label, button, select, etc.).

Ejemplo de ventanita simple en HTA:

Ventana.hta

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="MSThemeCompatible" content="Yes"/>
<title>::HTA en ejemplos::</title>
<HTA:APPLICATION
            ID = "admin"
            APPLICATIONNAME = "Admin"
            BORDER = "thick"
            CAPTION = "yes"
            ICON="favicon.ico"
            SHOWINTASKBAR = "yes"
            SINGLEINSTANCE = "no"
            WINDOWSTATE = "normal"
            SCROLL = "no"
            SCROLLFLAT = "yes"
            VERSION = "1.0"
            INNERBORDER = "no"
            SELECTION = "no"
            SYSMENU = "yes"
            MAXIMIZEBUTTON = "yes"
            MINIMIZEBUTTON = "yes"
            NAVIGABLE = "no"
            CONTEXTMENU = "no"
            BORDERSTYLE = "thin"
        />

		
<style type="text/css">
body{
    background-color:#EDEFEE;
    color:black;
    font-family:Helvetica;
}

h1{
    background-color:steelblue;
    color:black;
    text-align:center;
}

</style>
<script language="vbscript">
</script>
</head>

<body>
<div id="pnlPrincipal">
<h1>
Aplicacion HTA
</h1>

</div>
</body>
</html>

A primera vista se trata de tan solo una página HTML, pero con la característica de contar con una etiqueta especial:

<HTA:APPLICATION/>

A más detalle:
<HTA:APPLICATION
            ID = "admin"
            APPLICATIONNAME = "Admin"
            BORDER = "thick"
            CAPTION = "yes"
            ICON="favicon.ico"
            SHOWINTASKBAR = "yes"
            SINGLEINSTANCE = "no"
            WINDOWSTATE = "normal"
            SCROLL = "no"
            SCROLLFLAT = "yes"
            VERSION = "1.0"
            INNERBORDER = "no"
            SELECTION = "no"
            SYSMENU = "yes"
            MAXIMIZEBUTTON = "yes"
            MINIMIZEBUTTON = "yes"
            NAVIGABLE = "no"
            CONTEXTMENU = "no"
            BORDERSTYLE = "thin"
        />

Además de poder agregar código VBScript.

<script language="vbscript">
// Aquí el código VBScript
</script>

El código VBScript es una variación del lenguaje de programación Visual Basic. Posee básicamente la misma sintaxis y estructuras de control. Incluso permite la programación orientada a objetos.

En otros post continuaremos escribiendo sobre éstas herramientas.

Enlaces:

https://elpaladintecnologico.blogspot.com/2009/02/que-es-powershell-ejemplos-basicos-para.html
https://www.codeproject.com/Articles/763145/A-PowerShell-Introduction
https://www.softwaretestinghelp.com/windows-cmd-commands/

domingo, 19 de noviembre de 2023

What should a Java Developer know?

 

There are seven things a Java developer should know. And these are:


  1. Who a Java Developer?
  2. What is our main work tool?
  3. Documentation... Is it important or not?
  4. Certifications... How much do they matter?
  5. Frameworks... Are they really useful?
  6. Other languages...what with them?
  7. Always stay updated.

A Java Developer is an:

  • Passionate about problem solving.
  • Who likes to find anything to investigate. To know how it works.
  • Who, neurotically, loves to complicate his life to improve the lives of others.
  • In another case, those who like to get money. Java is one of the most used languages in the world. This is the reason why Java programmers are so in demand.

What is our main work tool?

It's our brain. How we think. That's why you should feed it with good things. Read books. Write. Think about how you can improve your world, your environment and your life. Use your words carefully. How you treat others, they will treat you. The computer and programming languages are a medium, not our main tools. This helps us create things that are in our minds. If it contains garbage, you will create garbage.

Documentation... Is it important or not?

In short, it is important. Why it is important? Because the documentation tells us what and how of things. Imagine, we have a problem with some requirement and we don't know what or how to do it. Then the documentation helps us know what and how we can solve it. In a time where there was no internet, the only help was official documentation. If you didn't read, you were lost.

Certifications... How much do they matter?

"He who talks too much falls very hard". Those who have many diplomas, titles or certificates are not always the ones who know the most. Experience is more important than a sheet of paper.

It's like school. If you complete your assignments and get a 10 on your grades, it's because you are dedicated. But that doesn't mean you're better than everyone else. Sometimes experience kills any certificate.

Frameworks... Are they really useful?

Yes. They are really useful. Whether we want it or not. Creating an application the old-fashioned way was not easy. A "hello world" could take us more time than necessary.

Other languages...what with them?

I mean other languages, not programming languages. Speaking in other languages is always important. At least if you want to be a programmer or work in something related to technology.

You will often have to talk to other people in a language other than your own. Seriously, you have to talk to other people whether you want to or not.

You will have to talk, either with the boss or with the users.

Always stay updated.

It is not necessary to talk about it. If you sleep, another one will climb the tree. Whoever believes themselves to be better than others will have the opportunity to prove it. Today's knowledge may be a thing of the past. There is always something new to learn.

Docker, Kubernetes and Cloud Native are things you will have to learn and when you think you know it all, other things will come along that will make you obsolete and you will have to learn again.

To end. You will have to learn new things, always.

sábado, 11 de noviembre de 2023

50 Questions you need to answer before a Java Interview

Edgar Regalado nos comparte en su blog una serie de 50 preguntas y respuestas sobre Java. Preguntas como: ¿Qué es una clase?, ¿Qué es un objeto? y ¿Cuál es la diferencia entre estos dos?

Como él mismo dice, su mayor énfasis es poder compartir esta teoría, ya que muchas veces solo nos enfocamos en la parte práctica sin pensar que la teoría siempre es un complemento.

The reason for this was mainly due to my lack of theoretical knowledge. I was focusing too much on the practical side and forgot about the underlying theory. Therefore, in this article, I'll be sharing with you 50 real questions that I have been asked during interviews. Each question comes with an answer and some of them also have references to read more on the topic. Let's nail that job!

Desde preguntas básicas hasta otras más complejas. El cuestionario, dividido en dos partes, es bastante útil para desarrolladores principiantes como desarrolladores con experiencia.

Enlaces:

https://supernovaic.blogspot.com/2019/02/50-questions-you-need-to-answer-before.html
https://supernovaic.blogspot.com/2019/02/50-questions-you-need-to-answer-before_11.html

domingo, 5 de noviembre de 2023

Elixir: funciones

 

Continuando con la serie sobre Elixir en ésta ocasión veremos algo de funciones. Funciones propias del lenguaje y cómo crear las nuestras.

Pero, antes que nada, ¿qué es una función? Una función es un bloque de código que realizar una operación específica. Este bloque tiene un nombre y contiene las instrucciones necesarias para realizar esa tarea. Se puede invocar y devolverá un valor: el resultado de dicha operación.

# Función para sumar 2 números
suma = fn (a,b) -> a+b end

# Función para restar dos números
resta = fn (a,b) -> a-b end

En este código definimos dos funciones anónimas (suma y resta) que nos devolverán el resultado. Invocamos las funciones.

IO.puts suma.(3,5) # 8
IO.puts resta.(6,2) # 4

Abajo hacemos uso de una función propia de Elixir para medir la longitud de una cadena.

String.length("CODE-MONKEY-JUNIOR")
18

Existen más funciones para manipulaciones de cadena de caracteres que son muy útiles y nos ahorrarán tiempo de desarrollo.

String.contains?("code for life", "for")
true

String.capitalize("elixir")
"Elixir"

String.downcase("CODEMONKEY")
"codemonkey"

¿Y qué con los procedimientos? Un procedimiento es similar a una función. Es un bloque que tendrá un nombre y podrá ser invocado, pero no devolverá ningún valor.

Esto (los procedimientos) se puede ver en un clásico Hola mundo o cualquier operación que no devuelva algo con lo que podamos hacer alguna operación.

holamundo.exs

defmodule Hello do
  def print(lang \\ :en)
  def print(:de), do: "Hallo Welt"
  def print(:en), do: "Hello World"
  def print(:es), do: "Hola Mundo"
  def print(:ru), do: "Привет мир"
end

IO.puts Hello.print()
IO.puts Hello.print(:es)
Io.puts Hello.print(:ru)

Ejecutamos:

$ elixir holamundo.exs
Hello World
Hola Mundo
Привет мир

Ahora procedemos a crear dos funciones de suma y resta (funciones con nombre):

defmodule Operaciones do 
  def sumar(x,y) do 
    x+y
  end

  def restar(x,y) do 
    x-y
  end  
end

Invocamos las funciones:

x=2
y=4

IO.puts "Suma de #{x} + #{y} da: #{Operaciones.sumar(x,y)}"
IO.puts "Resta de #{x} - #{y} da: #{Operaciones.restar(x,y)}"

Más post sobre elixir en futuras entregas.

Enlaces:

https://elixir-lang.org/
https://joyofelixir.com/

sábado, 23 de septiembre de 2023

Try Erlang (online)


 En ésta ocasión veremos un sitio web donde podemos poner en práctica el lenguaje Erlang. Se trata del sitio https://www.tryerlang.org/.

Básicamente, se trata de un REPL online.

> 34 + 31.
65
> 20 - 3.
17
> "Alpha".
Alpha
> [1,2,3,4,5].
[1,2,3,4,5]

>
  X = 33.
33
> X = Y.
"variable 'Y' is unbound"
> Y = X.
33

Seguiremos con los post de Erlang más adelante.

sábado, 29 de julio de 2023

PL/SQL - Bloques

PL/SQL es un lenguaje de programación procedimental para manipular datos de una BD Oracle. Con este lenguaje podemos crear scripts para poder manipular información de tablas, ejecutar otros scripts, crear procedimientos que se activen ante un evento(triggers), que devuelvan valores (funciones) o que simplementen realicen una operación al invocar un procedimiento (stored procedures).

Si queremos saber la versión instalada podemos ejecutar esta sentencia:

-- Con una consulta 
SELECT * FROM v$version;

En PL/SQL podríamos ejecutar el siguiente bloque de código:


-- Con un bloque PL/SQL
SET SERVEROUTPUT ON;
DECLARE
    version_inst VARCHAR(200);
    consulta VARCHAR(200):='SELECT BANNER FROM v$version';
BEGIN
    -- Ejecutamos consulta
    EXECUTE IMMEDIATE consulta INTO version_inst;
    dbms_output.put_line('Version instalada: '||version_inst);
END;
/

Si queremos podríamos crear excepciones:

-- Con un bloque PL/SQL con manejo de excepción
SET SERVEROUTPUT ON;
DECLARE
   NULL_STRING EXCEPTION;
   PRAGMA 
   EXCEPTION_INIT(NULL_STRING, -06535);
   version_inst VARCHAR(200);
   consulta VARCHAR(200);
BEGIN
    -- Ejecutamos consulta
    EXECUTE IMMEDIATE consulta INTO version_inst;
    dbms_output.put_line('Version instalada: '||version_inst);
    EXCEPTION
        WHEN NULL_STRING THEN
           dbms_output.put_line('Error: No existe la tabla o la consulta es erronea o esta vacía');
END;
/

Como se puede ver, creamos una excepción (NULL_STRING) para verificar que la cadena de consulta es nula (vacía). Usamos PRAGMA la cual es una palabra reservada de Oracle para añadir directivas al compilador. Ésta le dice al compilador que se comporte de cierta manera, en este caso es una excepción (un error en el flujo del programa).

El pragma EXCEPTION_INIT asocia un nombre de excepción con un número de error de Oracle. Puede interceptar cualquier error ORA- y escribir un controlador específico para él en lugar de usar el controlador OTROS (OTHERS).

La sección de EXCEPTION WHEN se ejecuta cuando ocurre alguna excepción. Dependiendo de la programación se podrá (o no) cachar correctamente la excepción. Recordar que una excepción es una anomalía en el flujo de un programa, no necesariamente es un error grave. En caso de un error, el programa se terminará abruptamente.


Al final tendríamos algo como esto:

-- Con un bloque PL/SQL y verificando consulta
SET SERVEROUTPUT ON;
DECLARE
   NULL_STRING EXCEPTION;
   PRAGMA 
   EXCEPTION_INIT(NULL_STRING, -06535);
   version_inst VARCHAR(200);
   consulta VARCHAR(200):='SELECT BANNER FROM v$version';
BEGIN
    IF LENGTH(consulta) > 0 THEN
       -- Ejecutamos consulta
       EXECUTE IMMEDIATE consulta INTO version_inst;
       dbms_output.put_line('Version instalada: '||version_inst);
    END IF;
    EXCEPTION
        WHEN NULL_STRING THEN
           dbms_output.put_line('Error: No existe la tabla o la consulta es erronea o esta vacía');
END;
/

En próximos post veremos más ejemplos.

Enlaces:

https://livesql.oracle.com/
https://www.techonthenet.com/oracle
http://www.rebellionrider.com
https://docs.oracle.com
https://www.codifica.me/pragma/
https://elbauldelprogramador.com/plsql-excepciones/

viernes, 2 de junio de 2023

Las Técnicas de Programación

En este vídeo (del canal https://www.youtube.com/@raulherreraflores) se habla sobre técnicas de diseño de algoritmos y programación.

El Lenguaje Ensamblador

En este vídeo (del canal https://www.youtube.com/@raulherreraflores) se habla sobre el lenguaje ensamblador. Qué es y para qué sirve.

domingo, 15 de enero de 2023

Instalar PHP CGI

En está ocasión instalaremos PHP CLI y CGI.

Instalación de PHP CLI

# Instalación PHP CLI
sudo apt-get update
sudo apt-get install php-cli -y
php --version

Instalación de PHP CGI

# Instalación PHP CGI
sudo apt-get update
sudo apt-get install php-cgi -y
php-cgi --version

Crearemos un archivp PHP que invoque la función : phpinfo()

info.php

<?php
 phpinfo();
?>

Ejecutamos en una terminal:

php-cgi info.php > info.html 

Con esto obtendremos la información del PHP instalado en nuestra máquina.

Enlaces:

https://codemonkeyjunior.blogspot.com/search?q=php