Borrar index de Mongo

Puede que si estamos trabajando en mongoose hayamos tenido este problema alguna vez.

Un valor que queríamos que fuese único deje de serlo por cualquier motivo, para esto, lo que podemos hacer en el entorno de desarrollo es básicamente borrar la base de datos y reconstruirla PERO…. ¿Cómo eliminamos un campo index en Mongo en producción? 😱

Bien…
Lo primero que tenemos que hacer es en nuestro archivo del modelo quitarle la propiedad `unique`.

Si teníamos algo parecido a:

@prop({ required: true, index: { unique: true } })
nombre_campo: string

Podemos dejarlo en:

@prop({ required: false, index: false, unique: false })
nombre_campo: string

Luego en la consola de mongo ejecutar (siendo projects nuestra «tabla» documento):

db.projects.dropIndex('nombre_campo_1');

Si no queremos acceder por consola y usamos MongoDB Compass que va fino fino.
Vamos a nuestra base de datos, buscamos la colección y vamos a el tab de «Indexes». Ahí podemos seleccionar el que queremos borrar y le damos a la papelera.

Hecho


Tu opinión es importante para mi, ¿Te ha resultado útil este artículo?

Command PhaseScriptExecution failed with a nonzero exit code

Intentando hacer un «Archive» y no nos compila por este error:

Command PhaseScriptExecution failed with a nonzero exit code

Dentro del proyecto, vamos a: Pods > Targets Support Files > Pods-App > Pods-App-frameworks.sh

Y modificamos de:

source="$(readlink "${source}")"

a

source="$(readlink -f "${source}")"

(Sobre la línea 44)
Guardamos y volvemos a ejecutar «Archive«.


Tu opinión es importante para mi, ¿Te ha resultado útil este artículo?

Undefined type ‘DB’.intelephense(1009) Laravel 8 en Visual Studio Code

Intelephense no reconoce las importaciones con el slash «\» delante.

Para ello instalaremos:

composer require --dev barryvdh/laravel-ide-helper:2.8.2

(Esta versión funciona bien en Laravel 8)
Ojo, que solo lo necesiramos para desarrolloa, por eso añadimos «–dev».

Luego en el método register() de nuestro fichero AppServiceProvider.php añadiremos:

if ($this->app->environment() != 'production') {
    $this->app->register(\Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class);
}

y en el terminal ejecutaremos:

php artisan ide-helper:generate

Y arreglado!!


Tu opinión es importante para mi, ¿Te ha resultado útil este artículo?

xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun

Si ejecutarmos en nuestro MacOS por ejemplo:

git status

y nos devuelve este error:

xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun

Seguramente es porque nos falta instalar «Xcode Command Line Tools»

Para ello abrimos nuestra terminal y ejecutamos:

xcode-select --install

Chao 👋


Tu opinión es importante para mi, ¿Te ha resultado útil este artículo?

Element implicitly has an ‘any’ type because expression of type ‘string’ can’t be used to index type

Con el fabuloso c si creamos un diccionario para acceder a datos, (el clickbait sería: «Deja de usar Switch» 😂😂 pero no suelen mostrarlo con TS ¿Quizás porque el tipado no queda elegante?).

La solución para que deje de arrojarnos error sería:

/**
 * Element implicitly has an 'any' type because
 * expression of type 'string' can't be used to
 * index type 'InterfaceName'.
 */

const keyToShow: string = 'username';

interface User {
  username: string;
  email: string;
}

const user: User = {
  username: 'Kike Beltrán',
  email: 'hello@email.com',
};

console.log(user[keyToShow as keyof User]);

Podemos verlo funcionando (y trastear) en:


Tu opinión es importante para mi, ¿Te ha resultado útil este artículo?

Combinar ngModel dentro de un Reactive Form de Angular

Puede ser que en alguna ocasión queramos manejar un valor con ngModel pero no tenerlo en un Reactive Form por cualquier motivo pero, cuando lo añadimos se nos tiñe la consola de rojo, cosa que no nos gusta (y básicamente deja de funcionar nuestra app).

Entonces… ¿Cómo podemos utilizar un campo con ngModel dentro de un Reactive Form?
Fácil, al campo que tiene el ngModel le añadimos el atributo

[ngModelOptions]="{standalone: true}"

De tal forma que nos quedaría algo parecido a:

<form (ngSubmit)="submitForm()" [formGroup]="formExample">
  <div>
    <label for="name">Name: </label>
    <input formControlName="name" type="text" id="name" />
  </div>
  ...
  <div>
    <label for="is_company">Is Company: </label>
    <input
      type="checkbox"
      [(ngModel)]="isCompany"
      [ngModelOptions]="{ standalone: true }"
      id="is_company"
    />
  </div>
  <button type="submit">Crear cuenta</button>
</form>

Aquí lo podemos ver y trastear con él:


Tu opinión es importante para mi, ¿Te ha resultado útil este artículo?

Invalid response from http://ejemplo.es/.well-known/acme-challenge/FKX34DBW_R…..GSXyOPjfkdcE: 204

Si al intentar obtener un certificado ssl con letsencrypt y certbot obtenemos este error:

Certbot failed to authenticate some domains (authenticator: apache). The Certificate Authority reported these problems:
Domain: nuestrodominio.es
Type: unauthorized
Detail: 2001:8d8:100f:f000::2fc: Invalid response from http://nuestrodominio.es/.well-known/acme-challenge/FKX34DBW_R…..GSXyOPjfkdcE: 204

Hint: The Certificate Authority failed to verify the temporary Apache configuration changes made by Certbot. Ensure that the listed domains point to this Apache server and that it is accessible from the internet.

Tenemos que seguir los siguientes pasos.

Primero: Comprobar que el dominio está funcionando, entramos en nuestrodominio.es y lo comprobamos visualmente.
Segundo: Podemos entrar en https://dnschecker.org y escribir nuestro domino para ver si a nivel mundial está bien propagada nuestra IP.
Tercero: Fijarnos bien en la IPv6… en este caso es el error que no es está dando, y ya que ahora mismo no estamos utilizando la IPv6, las borraremos de nuestro proveedor DNS.

Hecho esto, volvemos a intentar instalar el certificado, en mi caso:

sudo certbot --apache -d nuestrodominio.es

¡Y a funcionar!


Tu opinión es importante para mi, ¿Te ha resultado útil este artículo?

Quitar el borde inferior de ion-item

Por defecto, en una Ionic añade un borde inferior a cada , tal que:

Podemos quitarlas de toda la lista con el atributo lines=»none».

Poniéndolo el elemento quitaremos todos los bordes.

<ion-list lines="none">
    <ion-item>
        <ion-label>Pokémon Yellow</ion-label>
    </ion-item>
    <ion-item>
        <ion-label>Mega Man X</ion-label>
    </ion-item>
    <ion-item>
        <ion-label>The Legend of Zelda</ion-label>
    </ion-item>
    <ion-item>
        <ion-label>Pac-Man</ion-label>
    </ion-item>
    <ion-item>
        <ion-label>Super Mario World</ion-label>
    </ion-item>
</ion-list>

Ejemplo:

Si queremos quitar de cierto elemento:

<ion-list>
    <ion-item>
        <ion-label>Pokémon Yellow</ion-label>
    </ion-item>
    <ion-item>
        <ion-label>Mega Man X</ion-label>
    </ion-item>
    <ion-item lines="none">
        <ion-label>The Legend of Zelda</ion-label>
    </ion-item>
    <ion-item>
        <ion-label>Pac-Man</ion-label>
    </ion-item>
    <ion-item>
        <ion-label>Super Mario World</ion-label>
    </ion-item>
</ion-list>

Ejemplo:

Si queremos hacerlo con CSS, tendremos que sobreescribir la propiedad custom de la propiedad ion-item: –border-style

ion-item{
    --border-style: none;
}

Tu opinión es importante para mi, ¿Te ha resultado útil este artículo?

Modificar o quitar el padding de ion-item

Si queremos quitarle los paddings a un puede que hayamos intentado hacer con la propiedad CSS padding y nos habremos dado cuenta que no funciona.

Ionic tiene sus propias propiedades para (en este caso) manejar el padding de este elemento, son:

--padding-bottom
--padding-end
--padding-start
--padding-top

Para ello, setear nuevas propiedades lo haremos sobreescribiendo estas propiedades, por ejemplo:

ion-item{
    --padding-start: 0;
    --padding-end: 0;
}

Tu opinión es importante para mi, ¿Te ha resultado útil este artículo?