Category Archives: Programación

How to deal with smart contacts coding for the first time?

What is a smart contract?

It is a piece of code that executes in the blockchain. It is useful when you want to have a decentralized application, for example, to avoid censorship.

How can help me this article?

This short guide is recommended for programmers how want started with smart contracts and wants to do small tests like a ‘Hello world’. You should know a little bit what is a blockchain network, a wallet and a smart contract.

How to start coding?

The first step in a new technology is to create our first “Hello world”. If you would like to do a test you can check this tutorial out (Spanish). You can use the example that it shows on the Remix or clone the same from Github.

How to get eth on a test network?

You can try to use the same network as the video, RInkeby, but it didn’t work for me! Therefore we will use Ropsten.

First, enter to https://faucet.ropsten.be/ and paste your address (which it needs to be from that network)

Second, hold on for a few minutes and you will receive some eth!

Visual Studio Code

Let’s say that you have got the code done with that youtube video example, but it codes all of it in a web IDE! We want to code it in Visual Studio Code!

First of all, you need to install the plug-in “Ethereum Remix”.

Second, you need to install Ganache that it should act as a blockchain to development:

npm install ganache@alpha –global

Third, run it:

ganache

Ready! You’ll see something like the following screenshot, pay attention to the port at the bottom:

Fourth, put the Ganache address in the input box and deploy it:

You are ready to code smart contracts on localhost and develop incredible things on the blockchain!

How to deal with English interviews as a software developer

Did you arrange an appointment with a recruiter? First of all, congratulations! This is the first step. In this article you will receive a lot of advice about how to deal with interviews in IT.

Types of interviews

There are a few different interviews. Usually you will have first the Human Resources interview where you will talk about your current and previous experiences, expectations on your next job, but always without any technical detail.

Usually the next one is the technical interview, in which you will talk about specific details from the technology in the job that you are applying for.

You do need to know before the interview what kind it will be. You can just ask the recruiter or better search in Linkedin the profile from the people that are in the appointment. If the person is a programmer, there is a 99% probability that he will ask you technical questions. If he is a team leader or project manager, it will probably be similar to a HR person.

What I should do?

This is a remote interview, but you need to look well as a normal one. Therefore, brush your hair and use a pretty t-shirt or shirt and the most important thing: practice the normal questions that the recruiters ask in that type of interviews, but first of all figure it out if the interview will be a technical one or a HR. If it is a technical one, try to learn the most important things about that technology and ask your friends that use it what questions the recruiters asked them. Maybe it sounds weird: but the companies ask similar questions.

What I shouldn’t do?

Never talk bad about your coworkers, bosses or companies. It sounds rude and they will think that you will do the same to them.

Don’t be nervous: a few times I felt like that and I wasn’t sure if I had been relaxed I would have passed the interviews.

English

In my experience there are a lot of latin american recruiters and that kind of person starts the interview in Spanish and asks you only a few questions in English. But you need to figure out from what country he is from, if he is from Bielorusia, be sure it will be in English.

Top 3 Most common questions to test your English:

Do you have any hobbies?

Can you tell me about the projects that you were working on?

Why are you looking for a new job?

Conclution

You don’t know how the interview will be, but if you study the most common questions, you will be more prepared. You will increase your success rate if you prepare for it.

Don’t end your preparation only with this article, look for others to study better.

Importar archivos de un archivo de texto o excel a una tabla con SSIS

Lo ideal es usar el Wizard de importación de archivos de: Project > SSIS Import and Export Wizard, seleccionar el origen el archivo de texto o excel y en el destino seleccionar la base de datos correspondiente y la tabla, como se puede ver en este tutorial.
Hasta ahí todo muy lindo. Es lo que intenté hacer y no pude. Que se supone que es el camino ideal.
En el dtsx que me tocó modificar en aquel sprint, encontré algo raro: importaba el excel a txt, el txt lo importaba a una tabla “previa” que se borraba cada vez que se ejecutaba el dtsx y desde esa tabla previa con un Stored Procedure, se insertaba en la tabla “definitiva”, en la tabla de destino.
Lo mismo pasaba con los txt: lo importaba a la tabla “previa” y de ahí lo insertaba en la tabla de destino con un SP.
Intenté insertarlo directamente desde el excel a la tabla, porque era lo más razonable, pero me daba error en un campo NOT NULL, que en el excel estaba en NULL. Intenté usar un Data Transformation para convertir el NULL en “”, osea, en vacío, porque en SQL Server se diferencia el vacío: “”, de NULL:
Select vacío y NULL en SQL Server


Pero me seguía dando el error de que intentaba insertar un NULL en donde no se podía insertar un NULL.
Así que decidí tomar la triste decisión de usar la misma técnica que el colega que creó el ispac.

Acá están todos los detalles sobre cómo se resuelve el problema con esta técnica.
Supongamos que el archivo de entrada es un .txt con este contenido:

NOMBRE|APELLIDO|TELEFONO
Juan Jose|Lopez|011-1234-5678
María|Martinez|011-1111-5678
Laura|De la Vega|011-2222-2222

y necesitamos insertarlo en esta tabla:

Iniciamos el Wizard tal como nos dice en el tutorial al que hice referencia:

Seleccionamos el archivo:

Vamos a “Columns”:

Vemos que nos auto-detectó que las columnas están separadas por un pipe. Pero nosotros queremos que nos inserte toda la fila “cruda” en la tabla previa. Así que le cambiamos el caracter de separación de columnas por otro, así:

Elegimos el server y la base de datos:

Luego creamos la tabla “previa”:

CREATE TABLE [dbo].[testing_empleados_previa](
[data] varchar NOT NULL
)

El objeto que es el tipo de conexión a la base de datos, puede cambiarse por cualquier otro, en mi proyecto usamos siempre “ADO .NET”, que no sé cuál de todos de la lista es, así que en el wizard elijo el que viene por defecto y después lo cambio por otro objeto de destino y le pongo el “ADO .NET” y listo.
En “Destination” ponemos la tabla previa:

Ya nos está importando en la tabla previa:

Ahora tenemos que crear una función que nos genere un campo separado por cada registro insertado. Le agregamos la cantidad de campos que queramos. En el proyecto en el que estoy trabajando tenemos 56 campos jajaja, pero acá pongo 3 para no hacerlo tan largo:

GO
/ Object: UserDefinedFunction [dbo].[fnSplitStringText] Script Date: 9/8/2020 12:07:19 /
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[fnSplitStringText]
(
@string NVARCHAR(MAX),
@delimiter CHAR(1)
)
RETURNS @output TABLE(
id int,
CAMPO1 varchar(max),
CAMPO2 varchar(max),
CAMPO3 varchar(max)
)

BEGIN
DECLARE @SQLString NVARCHAR(MAX)
DECLARE @start INT, @end INT
declare @cont int=1
SELECT @start = 1, @end = CHARINDEX(@delimiter, @string)

WHILE @start < LEN(@string) + 1 BEGIN
IF @end = 0
SET @end = LEN(@string) + 1

if (@cont =1)
BEGIN
    INSERT INTO @output (id, CAMPO1) 
    values(1, SUBSTRING(@string, @start, @end - @start))
END

if (@cont =2)
BEGIN
    UPDATE a 
    SET a.CAMPO2=''+ SUBSTRING(@string, @start, @end - @start)+''
    FROM @output  a
    WHERE Id=1
END

if (@cont =3)
BEGIN
    UPDATE a 
    SET a.CAMPO3=''+ SUBSTRING(@string, @start, @end - @start) +''
    FROM @output  a
    WHERE Id=1
END
SET @start = @end + 1 
SET @end = CHARINDEX(@delimiter, @string, @start)
SET @cont =@cont + 1

END
RETURN

END

Ahora solo falta hacer un select de esa tabla separando los campos con la función recién creada:

Y finalmente hacemos el insert con ese select:

Vender productos en Consignación con PrestaShop

2008-08-28 Black Friday shoppers at Wal-Mart

Prestashop nos ofrece la posibilidad de extenderlo con módulos, o creando nuestro código para el framework MVC que tiene (Prestashop de origen francés y tiene su propio código ¡Jajaja! Francia me caen muy bien 😉 ).

¿Pero qué hacemos si al emprender un e-shop con este código pensamos financiar la compra de stock gracias a ropa comprada en consignación?

Me enfrenté a este reto hace 5 meses, en este proyecto y conseguí una muy buena solución que ningún módulo me pudo dar. Pronto voy a publicar todo lo que pueda sobre el análisis y la implementación en Prestashop.

Recomendaciones para obtener financiación en stock para un e-shop

Por favor, si vas a montar un e-shop en donde necesitás financiación para comprar el stock, no olvides leer mucho sobre:

4 formas de modificar el comportamiento de Prestashop

Tengo 4 formas para modificar el funcionamiento de Prestashop (un CMS para crear un e-shop, que como los desarrolladores son franceses, crearon su propio framework con poca documentación) .
Es común que  quiera llenarlo de cambios, a pesar de que existen miles de módulos (dentro de 300 caracteres explico qué son) que ayudan a modificar su comportamiento.

Una tienda china

Una tienda china

  1. Editando directamente el código: No recomendable porque cuando Prestashop se actualiza puede borrar el cambio. Además es muy complicado de distribuir…
  2. Extendiendo clases y controladores: Prestashop tiene un directorio en el cual podemos hacer uso del extend para las clases y controladores para los cuales queremos modificar su comportamiento.
  3. Creando nuestras propias clases y controladores: si por ejemplo tenemos una tienda online de ropa podemos querer tener un pequeño CMS que guarde información sobre las modelos que posaron en las fotos. Es normal que se guarde y muestre las medidas de la persona que se ve en las imágenes, para que los clientes tengan más datos sobre la prenda para poder especular cómo le quedaría a él/ella.
  4. Creando mi propio módulo: esta forma está muy utilizada porque es muy fácil distribuir los cambios. Simplemente con un archivo empaquetado y/o comprimido guarda mi código y puedo distribuirlo a quien sea, lo único que tengo que enviarle es ese bello archivo .tar, .gz, .zip o un privativo .rar

Detección de errores ortográficos

Desde hace un buen tiempo que vengo preguntándome cómo Firefox, LibreOffice y Thunderbird detectan los errores ortográficos mientras voy escribiendo (el clásico subrayado en rojo), ya que ¿Si LibreOffice lo hace por qué no puedo? Además lo más obvio es que ya existe algún proyecot dedicado a solucionar este problema, para evitar reinventar la rueda.

Pez raro. Raro como la búsqueda que tuve que hacer

Ufff… Este pez es tan raro como la búsqueda que tuve que hacer

Después de hacer búsquedas raras (¡No puedo creer por qué está tan “oculta” esa información en los buscadores!) pude encontrar por fin LanguageTool que se trata de una herramienta que funciona con diccionarios de mútiples idiomas y me dice qué palabras tienen errores (Además de otro tipo de problemas en los textos).

El problema a resolver

Tengo decenas de cientos de textos mal escritos. Solo necesito saber cuáles tienen más o menos errores para poder hacer una rápida selección de los “menos incorrectos” y descartar los demás.

Más tarde quiero utilizar LanguageTool para tener una interfaz fordista de corrección de errores a lo Turco Mecánico.

¿Cómo uso LanguajeTool en mi código?

1. Bajas la versión stand-alone.

2. Descomprime el .zip…

3. Ejecuta el comando (en el directorio descomprimido):

java -cp languagetool-server.jar org.languagetool.server.HTTPServer –port 8081

4. Haces una petición GET hacia:

http://localhost:8081/?language=es&text=hola+dia

Parámetros de la URL:

  • language: lenguaje en el cual está el texto.
  • text: el texto a “corregir”.

Nos va a devolver un XML como este:

<?xml version=”1.0″ encoding=”UTF-8″?>
<matches software=”LanguageTool” version=”2.2″ buildDate=”2013-06-30 18:39″>
<language shortname=”es” name=”Spanish”/>
<error fromy=”0″ fromx=”0″ toy=”0″ tox=”4″ ruleId=”UPPERCASE_SENTENCE_START” msg=”Esa frase no se inicia con mayúscula” replacements=”Hola” context=”hola dia” contextoffset=”0″ offset=”0″ errorlength=”4″ category=”Mayúsculas y minúsculas” locqualityissuetype=”typographical”/>
<error fromy=”0″ fromx=”5″ toy=”0″ tox=”8″ ruleId=”HUNSPELL_RULE” msg=”Hallado un posible error de ortografía” replacements=”día#ida#di#da#odia#dina#dita#dial#dila#dima#diga#diva#diña#ria#dio” context=”hola dia” contextoffset=”5″ offset=”5″ errorlength=”3″ category=”Posible error tipográfico” locqualityissuetype=”misspelling”/>
</matches>

Para utilizar esta información voy a leerlo con la clase SimpleXMLElement

¿Cómo resultó la solución de mi problema?

Tenía ganas de obtener un promedio de errores. Pero obtuve una desviación stándar de 20000…