Transformar query de snowflake en powerquery

20 03 2024

Dejo solucíon para trasnformar la salida de api de snowflake e importarla con excel power query:

let
Source = Json.Document(File.Contents("C:\data.json")),

// Extraer la matriz de datos
data = Source[data],

// Convertir la matriz de datos en una tabla
dataTable = Table.FromList(data, Splitter.SplitByNothing(), null, null, ExtraValues.Error),

// Convertir cada lista en un registro
recordTable = Table.TransformColumns(dataTable, {"Column1", each Record.FromList(_, columnNames), type record}),

// Expandir los registros en columnas
expandedTable = Table.ExpandRecordColumn(recordTable, "Column1", columnNames),

// Extraer los nombres de las columnas de rowType
columnNames = List.Transform(Source[resultSetMetaData][rowType], each _[name]),

// Renombrar las columnas
renamedColumns = Table.RenameColumns(expandedTable, List.Zip({Table.ColumnNames(expandedTable), columnNames}))

in
renamedColumns




Creación de un App Registration (1/2)

1 04 2023

Podemos usar identidades que están en nuestro directorio para permitir acceder a recursos, como por ejemplo un key vault, para esto tendremos que hacer un preparativo que es la creación de esta identidad que podrá entrar a leer desde una app local la configuración que está en el Key Vault

Lo primero es localizar en directorio la opción:

Completaremos la creación indicándole el nombre este caso solo será para este AD:

Entraremos al detalle de nuestro «App registration» y buscaremos el apartado de «Certificates & secrets» y seleccionaremos nuevo:

Completaremos la información:

Azure Keyvault

Iremos a explorar el Key Vault, iremos a «Access policies» y seleccionaremos «Create»

Completaremos como sigue

Seleccionamos la identidad que dimos de alta y crearemos





Adobe Acrobat deja de abrirse en Windows 11

31 01 2023

Hoy tuve la mala fortuna que equipo con W11 no abre ni carga Adobe Acrobat en version reader, despues de investigar varias horas no di con lo que va mal, el punto es que no saca errores, ni mensajes simplemente no abre nada, la solución es borrar:

C:\Users\{USERNAME}\AppData\Roaming\Adobe\Acrobat

y

C:\Users\{USERNAME}\AppData\Local\Adobe\Acrobat

Una vez que borramos TODO de esos directorios ya funciona, lo malo es que firmas y configuraciones se perderán





Integración Azure mediante Service Bus / topic desde APIM

7 01 2023

La idea de este post es establecer una estrategia de integración con terceros que ya estén registrados en el APIM, esta solución es sin código.

Antes debes crear

  • APIM (api-research)
  • Managed Identity (research-identity)
  • Service Bus (softwareresearch)

 

Alta una Topic para este tutorial:

image

 

 

Asignación de permisos al APIM

Para que podamos escribir desde el APIM al bus debemos asignar permisos estos nos servirá Managed Identity, para lo cual le debemos asignar un rol de “Azure Service Bus Data Sender”:

Abriremos la pantalla de permisos de Service Bus y agregaremos un rol

image

Seleccionamos el permisos adecuado

image

Seleccionamos Managed Identity

image

Seleccionamos miembros y buscamos APIM y buscamos api-research

image

Asignamos:

image

Creación politica para envio del mensaje

Ya con los permisos configurados, podemos configurar una politica, en nuestra integración queremos que una vez que un sistema tercero envie una petición esta pueda ser escuchada y procesada, las politicas las podemos definir a diferente nivel, este caso será una particular API.

image

Para este caso usaré el Post

Configuración de suscriptions

<policies>
    <inbound>
        <base />
        <authentication-managed-identity resource="https://servicebus.azure.net" output-token-variable-name="msi-access-token" ignore-error="false" />
        <set-header name="Authorization" exists-action="override">
            <value>@((string)context.Variables["msi-access-token"])</value>
        </set-header>
        <set-backend-service base-url="https://softwareresearch.servicebus.windows.net" />
        <rewrite-uri template="message3rdparty/messages" />
    </inbound>
    <backend>
        <base />
    </backend>
    <outbound>
        <base />
    </outbound>
    <on-error>
        <base />
    </on-error>
</policies>

Para el topic que requerimos usar para integración usaremos dos sistemas,

image

Prueba del envío del mensaje

image




Optimizar espacio de un disco virtual

13 06 2022

A veces tenemos un disco duro VHDX, expandible dinamicamente, pero se ha ocupado espacio que actualmente ya no usa, pero en nuestro disco fisico sí ocupa espacio

Será necesario usar dos herramientas aquí emplearemos DISKPART y SDELETE, si tienen windows 11 Pro, pueden usar las herramientas de windows para hyper-v

Usaremos SDELETE para poner el espacio sin uso en ceros

.\sdelete -z Z:

Usaremos diskpart para optimizar el espacio:

diskpart

select vdisk file="C:\Workdisk.vhdx"

compact vdisk

image

Saludos





Compilando una extensión de VS Code

13 04 2022

Para compilar una extensión de VS Code, encontré un error en una extesión pero baje el código original y necesite tener mi propia versión, espero luego publiquen el cambio:

npm install -g vsce

vsce package

Esto nos generará un VSIX que tendremos que instalar desde el IDE





Convertir un certificado CRT a PFX

5 04 2022

Seguro no soy el primero que tiene Windows 11 con el feature de openssl:

OpenSSH @ Windows 11

Hoy me encontré que al exportar con el sigueinte comando:

openssl pkcs12 -export -out XXX.pfx -inkey RSA_.XXX.com.mx_5ffcc722af6f7.txt -in CRT_XXX.com.mx.txt

consola

Al instalarlo en un equipo windows server no me funcionaba la contraseña pero al instalarlo en el mismo equipo si funcionaba puesto que lo instale y posteriormente lo exporte y este ultimo ya funciono.

Validar un CRT:

openssl x509 -in CRT_XXX.com.mx.txt -text

Validar el CSR:

openssl x509 -in CRT_XXX.com.mx.txt -text





Desplegar un aplicación Angular 13 en Azure

6 01 2022

Recién adoptamos una aplicación angular y se actualizo a Angular 13, se genero un proyecto de cero y todos los componentes desde Angular CLI, pero al final usando

Release

ng build

Y cargar por FTP a un webapp de .net core salieron errores que no encuentra la ruta del Router de angular, por lo que se hizo el siguiente web.config que ademas considera archivso *.woff y *.woff2:

<configuration>
	<system.webServer>
		<rewrite>
			<rules>
				<rule name="Angular" stopProcessing="true">
					<match url=".*" />
					<conditions logicalGrouping="MatchAll">
						<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
						<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
					</conditions>
					<action type="Rewrite" url="/" />
				</rule>
			</rules>
		</rewrite>
		<staticContent>
			<mimeMap fileExtension=".woff" mimeType="font/x-woff" />
			<mimeMap fileExtension=".woff2" mimeType="font/x-woff2" />
		</staticContent>
	</system.webServer>
</configuration>





Remover dispositivos Xvd

14 11 2021

Explorando un poco misdispositivos para la actualización de Windows 11, me di cuenta que tenia un listado enorme en el apartado de dispositivos ocultos de uno llamado Xvd

Activar dispositivos ocultos

Estos dispositivos hasta donde he investigado se trata de discos que tiene que ver con el XBOX y el serviciso anywhere, pero lo qe me llamo mas la atención es que habia una lista interminable

Para quitarlo hay un sencillo script que ya probe con powershell, esto hay que tener privilegios elevados, antes un comando para listarlos:

Listar los dispositivos

pnputil /enum-devices /disconnected

Para removerlos:

Remover dispositivos

$deviceName=»Xvd»
foreach ($dev in (Get-PnpDevice | Where-Object{$_.Name -eq $deviceName})) {
&»pnputil» /remove-device $dev.InstanceId
}





Conectar a SharePoint O365 con App Only Authentication

30 04 2021

Como parte de las posibilidad de conectividad a un sitio de sharepoint por parte de agentes externos, tenemos PnP tendremos que usarl las siguientes librerias:

  1. Install-Package PnP.Core -Version 1.1.0
  2. Install-Package PnP.Framework -Version 1.4.0

Luego procederemos a generar un App Id y un AppSecret nos situaremos en el sitio o a nivel de site collection y agregaremos alguno de los siguientes:

  • /_layouts/15/appregnew.aspx, nos servirá para generar AppId y el AppSecret,, en titulo será el nombre de la aplicación que queremos emplear, App Domain y Redirect corresponden a datos de nuestra app:
AppREgNew.aspx
  • /_layouts/15/AppInv.aspx, nos servirá para buscar alguna aplicación con los datos de AppId, lo cual en esta misma pagina escribiremos el AppId y buscaremos nuestra aplicación <<Lookup>> y usaremos para autorizar y darle permisos, mas abajo veremos que permisos podemos otorgar.
AppInv.aspx
  • /_layouts/15/AppPrincipals.aspx, visualizaremos las aplicaciones autorizadas que existen, y podremos borrarlas.

Tomando como ejemplo el primer caso quedará como:

https://tenant.sharepoint.com/sites/MySite/_layouts/15/appregnew.aspx

App’s Permission Request XML

Aqui tendremos que configurar un XML con la siguiente estructura:

<AppPermissionRequests AllowAppOnlyPolicy="true">  
      <AppPermissionRequest Right="FullControl" Scope="http://sharepoint/content/tenant"/>  
</AppPermissionRequests>  

Donde tendremos las siguientes opciones:

  • AllowAppOnlyPolicy: lo usaremos en caso de de add-in, sino es el caso debemos quitarlo por completo, nota este solo esta disponible en el tenant de admin ej. tenant-admin.sharepoint.com.

Autorizando permisos

Cuando ya utilizamos la pagina AppInv.aspx, para buscar nuestra aplicación nos preguntará si queremos autorizarla

Autorizando AppId

Ya desde nuestra aplicación

Usaremos el AppId y AppCode generados anteriormente podemos consultar por ejemplo el titulo de nuestro sitio

public static void Main()
{
string siteURL = "XXXXXXXXXXXX";
string appId = "XXXXXXXXX";
string appCode = "XXXXXXX";

 using(var context = new AutenticationManager().GetACSAppOnlyContext(siteURL, appId, AppCode))
 {
  context.Load(context.Web, p => p.Title);
  context.ExecuteQuery();
  var title = context.Web.Title;
 }
}

The remote server returned an error: (401) Unauthorized

Si vemos un mensaje DESPUÉS de hacer los pasos indicados es mejor que des tiempo a que se repliquen los permisos, en mi caso pasaron 20 minutos para que sucediera