teleren/devto huggingface dataset:
This Week In Python
Tags: python, discuss, thisweekinpython
Published: 2023-04-14 09:32:22


**Fri, April 14, 2023**


This Week in Python is a concise reading list about what happened in the past week in the Python universe. 

**I have received some good suggestions for this week's content. Thank you.**

**Did I miss anything from the Python universe this week? What did you read or tried out?**


## Python Articles


- [Algebraic Data Types in (typed) Python](https://threeofwands.com/algebraic-data-types-in-python/)
- [Time Travel with django-simple-history](https://www.mattlayman.com/blog/2023/django-simple-history/)
- [The EU's Proposed CRA Law May Have Unintended Consequences for the Python Ecosystem](https://pyfound.blogspot.com/2023/04/the-eus-proposed-cra-law-may-have.html)
- [The different uses of Python type hints](https://lukeplant.me.uk/blog/posts/the-different-uses-of-python-type-hints/)
- [PEP 684: A Per-Interpreter GIL](https://discuss.python.org/t/pep-684-a-per-interpreter-gil/19583/21?page=2)


## Projects


- [twitter-api-client](https://github.com/trevorhobenshield/twitter-api-client) – Complete implementation of the undocumented Twitter API
- [aura](https://github.com/SourceCode-AI/aura) – Python source code auditing and static analysis on a large scale
- [joblib](https://github.com/joblib/joblib) – Computing with Python functions 
- [shedskin](https://github.com/shedskin/shedskin) – restricted-Python-to-C++ compiler
- [wolverine](https://github.com/biobootloader/wolverine) – Run your scripts with Wolverine and when they crash, GPT-4 edits them and explains what went wrong


**Did I miss anything from the Python universe this week? What did you read or tried out?**
FLaNK Stack Weekly for 31 July 2023
Tags: apachenifi, apachekafka, apacheflink, flank
Published: 2023-08-01 02:02:33

## 31-July-2023

### FLiPN-FLaNK Stack Weekly

Tim Spann @PaaSDev

https://www.threads.net/@tspannhw

I am back from vacation.

### CODE + COMMUNITY

Please join my meetup group NJ/NYC/Philly/Virtual. 

[http://www.meetup.com/futureofdata-princeton/](http://www.meetup.com/futureofdata-princeton/)

[https://www.meetup.com/futureofdata-newyork/](https://www.meetup.com/futureofdata-newyork/)

[https://www.meetup.com/futureofdata-philadelphia/](https://www.meetup.com/futureofdata-philadelphia/)


**This is Issue #96 **

[https://github.com/tspannhw/FLiPStackWeekly](https://github.com/tspannhw/FLiPStackWeekly)

[https://www.linkedin.com/pulse/schedule-2023-tim-spann-/](https://www.linkedin.com/pulse/schedule-2023-tim-spann-/)



### Videos

https://www.youtube.com/watch?v=VjZiFiqfwGI&ab_channel=SixFeetUp


### Talks

https://www.slideshare.net/bunkertor/meetup-streaming-data-pipeline-development-258709707


### Articles

https://medium.com/@tspann/edge-managing-c-and-java-agents-d6590c963e9c

https://dzone.com/articles/what-is-a-modern-developer

https://dzone.com/articles/streaming-change-data-capture-data-two-ways

https://medium.com/@tspann/open-source-streaming-talks-in-progress-3e75af8848b0

https://hacks.mozilla.org/2023/07/so-you-want-to-build-your-own-open-source-chatbot/

https://pyflo.net/

https://www.cloudera.com/products/dataflow/nifi-dataflow-calculator.html


### Events

[https://attend.cloudera.com/ameropendatalakehousewithcdpon?lid=7vxyhds3tlv7](https://attend.cloudera.com/ameropendatalakehousewithcdpon?lid=7vxyhds3tlv7)

October 7-10, 2023:  Halifax, CA.   Community over Code.
[https://communityovercode.org/](https://communityovercode.org/)

October 18, 2023:  2-Hours to Data Innovation:   Data Flow
[https://www.cloudera.com/about/events/hands-on-lab-series-2-hours-to-data-innovation.html](https://www.cloudera.com/about/events/hands-on-lab-series-2-hours-to-data-innovation.html)

November 2, 2023:  Evolve NYC
[https://www.cloudera.com/about/events/evolve/new-york.html#register](https://www.cloudera.com/about/events/evolve/new-york.html#register)

November 22, 2023: Big Data Conference.   Hybrid  
[https://bigdataconference.eu/](https://bigdataconference.eu/)

Cloudera Events
[https://www.cloudera.com/about/events.html](https://www.cloudera.com/about/events.html)

More Events:
[https://www.linkedin.com/pulse/schedule-2023-tim-spann-/](https://www.linkedin.com/pulse/schedule-2023-tim-spann-/)


### Tools

* https://rss-bridge.org/bridge01/#bridge-CssSelectorBridge
* https://www.profileme.dev/
* https://github.com/openstatusHQ/openstatus
* https://mousefix.org/


&copy; 2020-2023 Tim Spann
reverse string
Published: 2023-08-01 01:55:44


[344. Reverse String](https://leetcode.com/problems/reverse-string/)

Write a function that reverses a string. The input string is given as an array of characters s.

You must do this by modifying the input array in-place with O(1) extra memory.



### Relevant problem sets
More challenges
[345. Reverse Vowels of a String](https://leetcode.com/problems/reverse-vowels-of-a-string/description/)
[541. Reverse String II](https://leetcode.com/problems/reverse-string-ii/description/)
Ruby Codeacademy Learnings Notes
Tags: ruby, beginners
Published: 2023-08-01 00:41:59

- Ruby file extension script**.rb**
- **Commenting** two types of comments
**Single line comments** 
start with a #.
**Multi line comments** start with =begin and end with =end.

- **put** and **print** commands can be used to display text in the console

- **Variables:** There are four different types of variables in Ruby
**Local variables** 
must begin with a **lowercase letter** or **_**. These variables are local to the code block of the method they are declared in.
**Instance Variables**
Instance variables begin with an **@** symbol. Instance variables are variables that belong to an object.
**Class Variables**
Class variables begin with an **@@** sign. Class variables are available across different objects shared by all the descendants of the class. They must be initialized before use.
**Global Variables**
Global variables begin with an **$** symbol. While Class variables are not available across different classes, global variables are. Its scope is global, meaning that it can be accessed from anywhere in the program.

- **Object Methods**
everything in Ruby is an object, are built-in abilities of objects. To access an object’s methods, you need to call it using a **.** and the method name. 
example: # Method to get the string reversed
               print var**.reverse**
               # ymedacedoc
**.length** Ruby will return the length of the string (that is, the number of characters—letters, numbers, spaces, and symbols).
**.upcase** and **.downcase** 
returns a version of the string in all uppercase or all lowercase 
      
      example: name = "Jamie"
               puts name**.downcase.reverse.upcase**
               # EIMAJ

- Strings
single quotation marks (**‘’**) or double quotation marks (**“”**)

- **string interpolation**
used to insert the result of Ruby code into a string
example: age = 30
         print "I am #{age} years old"
         # "I am 30 years old"

- **Get user input in Ruby**
using **gets.chomp**
gets is the method used to retrieve user input. 
Ruby automatically adds a new line after each bit of input, so chomp is used to remove that extra line.
example: print "Type your name and press Enter: "
         name = **gets.chomp**
         puts "My name is #{name}!"

- Modulo
returns the modular value, **the remainder**, when two numbers are divided.
example: puts 5**.modulo**(3)
         # Output: **2**
5 is divided by 3 and the **remainder is 2**

- User input Simple Program:
print "What's your first name? "
first_name = gets.chomp
first_name.capitalize!

print "What's your last name? "
last_name = gets.chomp
last_name.capitalize!

puts "Your name is #{first_name} #{last_name}!"
Iniciando mi camino en la programación
Published: 2023-08-01 00:29:50

Este año postule a un Bootscamp de programación sobre Python, con inocencia total, me conecte a mis clases virtuales y fue como un viaje a un lugar remoto en donde no conocía el lenguaje y a las personas que me acompañaban.

sentí que no pertenecía a ese lugar, pero mi curiosidad fue mayor, comencé en paralelo a ver distintos sitios de contenido y videos, tratando de adquirir mayor conocimiento, pero todo estaba en un lenguaje y términos muy complejos. Fue cuando en una de las clases escuche del profesor la siguiente frase "siempre acude a la documentación", Uf, si ya era complejo a través de las clases, la documentación fue peor, pero por otra parte satisfactorio, logre comprender la parte inicial, fui avanzando, nunca baje los brazos  trate de seguir el paso a mi profesor y compañeros.

No puedes pensar en dejar las cosas a medias, tus actividades cotidianas, trabajo, hijos, esposo, mascotas, el supermercado, pero ya con un pensamiento distinto, estructurando las tareas diarias, todo es mas simple y eso fue muy rápido, mi pensamiento cambio, comencé a ver las cosas distintas, buscando una solución, pensaras que fue muy rápido, yo también lo pienso, ¿me estaba convirtiendo en una maquina?.

Para nada, estaba ampliando mis conocimiento, un Hello World, ya no era simples primeras líneas de un lenguaje de programación, mas bien, ahora son parte de mi pensamiento y analogía. Quizás dicha frase que todas personas deben aprender a programar es cierta, si me lo preguntan, comparto en mi comunidad las ventajas y beneficios, tengo 38 años actualmente y deseo continuar aprendiendo a programar.
design system: different approaches to create a component library for our design system
Published: 2023-08-01 00:15:38

Three pillars of design systems :

- **Design Language**
- **Component Library - Core Components**
- **Style Guide**

When creating a design system, different development tasks can be challenging and time-consuming. However, some development tasks are commonly considered more tedious like creating a component library, lot of questions arise like :

> what are the different approaches to create a component library?

*1st option* — build everything from scratch — Manual Creation

- This is the most time-consuming option, it offers complete control and customization but can be time-consuming and may require more development effort.

_2nd option_ — use an existing UI library —

- This is the fastest option, but it gives you the least control over the final product.

*3rd option* — Hyrid Approach — combine the 1st and 2nd options


Let's explore the 2nd option:
When it comes to use an existing UI library it's not always easy to customize to fit our design system's needs.

> So what are the different approaches to customize/extend an existing UI library to fit my requirements ?

- **find a themeable library (that supports theming) and adapt it to your needs** -
- **find a library that you can use as a foundation and build on top** -
- **Headless components / Unstyled components** -

- Find other approaches...

the objective is to POC the different approaches and find the best approach that fits our needs considering the following criteria :

- **Customization** - how easy is it to customize the components ?
- **Time to market** - how fast can we deliver the components ?
- **Extensibility** - how easy is it to extend the components ?
- **Accessibility** - how accessible are the components ?
- **Maintenance** - how easy is it to maintain the components ?

Thanks...
Using Nodejs Buffers to transcribe an Audio file using OpenAI's Whisper service
Tags: openai, whisper, node
Published: 2023-08-01 00:14:10

I was having a difficult time attempting to do the following:

- Retrieve an Audio file from AWS S3
- Have the Audio file _in memory_ be sent to Open AI's Whisper transcription service to get the transcribed text and save the result.

I've seen some examples where users [were attempting to use a ReadStream instead](https://stackoverflow.com/questions/75716899/convert-audio-buffer-into-readable-stream-to-use-in-whisper) and attempt to send that, but that didn't work for me.

So after a Sunday's worth of effort to figure out how to send this data, I did the following (using this specific version of OpenAI's Node.js API: [4.0.0-beta7](https://github.com/openai/openai-node/releases/tag/v4.0.0-beta.7))
 
`s3.service.ts`
```
function async returnBufferFromS3(params: { key: string }) {
      const data = await this.awsS3.send(new GetObjectCommand({
        Bucket: 'some-bucket'
        , Key: params.key
      }));

      const stream = data.Body as Readable;

      return new Promise<Buffer>((resolve, reject) => {
        const chunks: Buffer[] = [];
        stream.on('data', (chunk) => chunks.push(chunk));
        stream.on('error', (error) => reject(error));
        stream.on('end', () => resolve(Buffer.concat(chunks)));
      });
}
```

`openAITranscription.ts`
```
import { returnBufferFromS3 } from "s3.service";
import { isUploadable } from "openai/uploads";
...

const openAI = new OpenAI({
  apiKey: 'some-api-key',
  organization: 'some-org-id'
});

function async returnTranscriptionsBasedOnKey(key: string) {
      const buffer = await returnBufferFromS3({ key: 'some-key; });
      const tmp = new Blob([buffer], { type: `test.mp4` });
      const fileLikeBlob = return Object.assign(blob, {
          name: 'test.mp4'
          , lastModified: new Date().getTime()
     });

      if (!isUploadable(fileLikeBlob)) {
        throw new Error(`Unable to upload file to OpenAI due to the following not being uploadable: ${fileLikeBlob}`);
      }

      const openAIResponse = await openAI.audio.transcriptions.create({
        file: fileLikeBlob,
        model: 'whisper-1'
      }

      return openAIResponse;
}
```

This seems like an incredible hacky way of completing this task (Buffer -> Blob -> "FileLikeBlob"). 

I'm not proud of it, but I didn't enjoy the time I spent trying to make this work either.

If anyone in the comments has better recommendations of how to accomplish this same method; I welcome any critique to make it better and to make this information more readily available to more users.
How Deno differs from Node.js
Tags: deno, node, shorts, javascript
Published: 2023-08-24 18:05:45

---
title: How Deno differs from Node.js
description: "This article goes over the core differences between Deno and Node.js."
date: 2023-08-01 00:10:21 UTC
tags: deno, node, shorts, javascript
canonical_url: https://oneminch.dev/blog/deno-vs-node
cover_image: https://dev-to-uploads.s3.amazonaws.com/uploads/articles/arl8t5v11pb5u15awcu3.png
published: true
series: Shorts
---

[Deno](https://deno.land) improves upon [Node.js](https://nodejs.org) in some significant ways.

## Modules

Modules are loaded directly from URLs and cached locally.

```js
import confetti from "https://esm.sh/canvas-confetti@1.6.0";
```

This allows the decentralization of packages by removing reliance on [npm](https://npmjs.com) and enabling developers to self-host their packages.

Consequently, this removes the need for `package.json` and `node_modules`, and allows programs to run in the browser since there is no reliance on build tools like Webpack.

## Security

Because code is executed in a sandbox, the Deno runtime has no access to the file system and the network. Flags like `--allow-write` and `--allow-net` can be used to explicitly enable access.

## Other Features

In addition to the above features, Deno supports TypeScript out of the box and has a built-in formatter for code similar to ESLint for Node.js.
Django y Django Rest Framework: mejores prácticas
Published: 2023-08-01 00:06:34

**Django es uno de esos frameworks que llevan mucho tiempo en el mercado y que cada día se emplean más junto con el ecosistema Python: la creación de API Rest que ha estado, que como hemos visto en varios tutoriales, videos y mis cursos, son fácilmente escalables, son flexibles y todo esto es gracia a la gran modularidad que tiene el ecosistema Python que por supuesto también se hereda a Django.
¿Qué es Django? ¿Para qué sirve en el desarrollo de apps y Rest Apis?
Django es un conjunto de herramientas conocidas como framework, que nos permite construir todo tipo de aplicaciones webs escalables empleando un lenguaje de programación de alto nivel conocido como Python, entre estas apps que podemos construir están las Rest APIs para conectarse a cualquier otra cosa, por ejemplo, conectar una app en Django a Flutter.

Las Apis Rest aunque NO es un estándar, es una medida que ha sido tomada por múltiples frameworks para construir este tipo de sistema cuyo propósito principal es conectarse con otros sistemas o aplicaciones como te comentaba anteriormente; así que, por ejemplo, teniendo una app en Django, la podemos conectar con apps creadas en Flutter, Android, iOS, React o cualquier otra cosa similar... lo cual es excelente ya que con un solo backend podemos crear múltiples aplicaciones que consuman esta app en Django.

Un ejemplo del mundo real es una app de compras en líneas, la cual es una app con un repositorio central creada (por ejemplo) en Django y luego puedes crear las apps para el cliente, ya sea para móviles y/o navegadores empleando (por ejemplo) las tecnologías señaladas anteriormente...
Los principales conceptos de Django y el marco REST son:
Las clases de modelo proporcionan un mapa relacional de objetos (ORM) para la base de datos establecida. Un modelo se asigna a una tabla en la base de datos. Puede consultar las bases de datos sin lanzar una sola línea de SQL. Con los modelos, es fácil definir tablas y relaciones entre ellos.

Las vistas están a cargo del proceso de solicitudes. Funcionan como controladores en el MVC, recordemos que Django usa es el MTV. Puede implementarlos de muchas formas, como funciones o clases.

Las clases de serializador proporcionan control de tipos de datos y estructuras de solicitudes y respuestas.

Las plantillas o templates son archivos con contenido estático y dinámico. Están formados por código estático y otros elementos que dependen del contexto aunque esto en una app de tipo Rest no viene al caso.

Estas son algunas de las mejores prácticas a seguir cuando usa Django para el desarrollo:

Estructura de configuración: cualquier persona que sea nueva en el desarrollo puede crear fácilmente una aplicación con facilidad utilizando el marco de trabajo de Django. Es vital crear una estructura que sea fácil de mantener y reutilizar cuando sea necesario, siempre que uses Django genera un archivo settings.py que contiene todos los detalles relacionados con el proyecto o tu entorno de trabajo para que no realices ningún cambio en el archivo de configuración principal y generar nuevos archivos para diferentes entornos.
Programar es de trileros
Tags: personal, introspeccion
Published: 2023-09-27 05:24:09

---
title: Programar es de trileros
published: true
date: 2023-08-01 00:00:00 UTC
tags: personal,introspeccion
canonical_url: https://jorge.aguilera.soy/blog/2023/programar-trileros.html
---

Hoy 1 de Agosto hace exactamente 32 años que terminé la beca en C.P. Software para programata

Por hacer un poco de memoria, en aquella época estaba haciendo (más bien suspendiendo) segundo curso de Económicas y trabajando de vigilante los fines de semana para pagar las cervezas. Ya había descubierto el aula de informática de la Uni, siempre vacía, mi colega José Merchán me había dado algunas clasecillas de Cobol y me "enchufó" para la beca donde curraba. Una beca de dos meses y medio (medio Mayo, Junio y Julio) que me cuadró muy bien en el timing de los exámenes finales porque estaba previsto suspender casi todas

<dl>
<dt>INFO</dt>
<dd>
<p>Ojo, beca pagada. Si mal no recuerdo me pagaron por los dos meses que duró unas 30.000 pesetas por mes, lo mismo que me sacaba de vigilante.</p>
</dd>
</dl>

De aquella beca tengo varios recuerdos/anécdotas (seguramente distorsionadas tras 32 años) como la de mi primer traje, pero la que vengo a contar hoy no se la había contado a nadie, tal vez por verguenza, aunque lo dudo.

El caso es que ya iniciado el curso y una vez que habíamos ido viendo que si el editor, que si el entorno, etc empezamos a meternos en faena con el Cobol, su sintáxis, etc y uno de los ejercicios que teníamos que resolver era algo así como:

Dadas dos variables A y B donde A vale 30 y B vale 20 hacer un programa que intercambie los valores de tal forma que A valga 20 y B 30 (crifras y enunciado aproximado)

"Chupao, le meto"

```
A VALUE 3

B VALUE 20

MOVE A TO B

MOVE B TO A
```

y a correr"

No hace falta ser un ingeniero del MIT para entender que no funciona. Si "mueves" A a B pierdes el valor de B así que en el segundo move ya estás jodido.

Seguramente había recibido antes alguna bofetada a mi chulería informática, pero esta la he guardado en mi recuerdo. Cuando el profe nos/me hizo ver el error estuvo unos segundos dándole vueltas y pensando "pero entonces cómo …​", o como se dice ahora "guat de fak?" hasta que nos dijo como si tal cosa que necesitábamos una variable temporal donde almacenar una de las dos

```
A VALUE 3

B VALUE 20

MOVE B TO C

MOVE A TO B

MOVE C TO A
```

y entonces mi cabeza hizo boom. Ahí es cuando lo ví claro: **programar es de trileros**

No hay magia en programar, no existe la salsa secreta de Kunfu Panda (vale, esto no lo pensé en su día), es todo truco: Tienes unos recursos limitados y de lo que se trata es de hacer tocomochos y mantener las suficientes pelotas en el aire para que parezca magia fluida, pero es todo truco

(poco tiempo después volví a tener la misma epifanía cuando descubrí la recursividad pero no tengo anécdota #AbueloCebolleta que recuerde)

Pues eso, ya lo he soltado después de 32 años.
Umbraco Codegarden 2023
Tags: umbraco, codegarden
Published: 2023-09-29 08:20:39

---
title: Umbraco Codegarden 2023
published: true
date: 2023-08-01 00:00:00 UTC
tags: umbraco, codegarden
canonical_url: https://mozzy.dev/posts/umbraco-codegarden-2023/
---

I wrote an article for [TPXimpact](https://www.tpximpact.com/) about my experience at Umbraco Codegarden 2023.

> Recently, a couple of our team had the opportunity to attend the annual Umbraco conference known as [Codegarden](https://codegarden.umbraco.com/). Hosted in Odense, Denmark it pulls together 800+ in person to the event, but also a number of people were able to attend online as a hybrid experience.

Read in full here: [Umbraco Codegarden 2023](https://www.tpximpact.com/knowledge-hub/blogs/tech/umbraco-codegarden-2023/)