martes, 21 de abril de 2020

PHP Mysql PDOException: SQLSTATE[HY000] General error: 1267 Illegal mix of collations

PHP Fatal error:  Uncaught PDOException: SQLSTATE[HY000]: General error: 1267 Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='

Este error se genera por que el resultado del valor de un campo en nuestra base de datos esta en una cotejamiento(collection) diferente al del dato con el cual lo comparamos.


Solución:

Cambiar el tipo de cotejamiento(collecion) de la tabla
En Mysql  utilizando phpmyadmin editamos el campo de la tabla donde tenemos el conflicto y colocamos el valor que deseamos, en mi caso cambio de latin1_swedish_ci  a utf8_general_ci y le das clic en guardar.



Saludos

domingo, 19 de abril de 2020

Moodle Su base de datos tiene tablas utilizando el formato de fichero Antelope Unicode Barracuda


En algunas ocasiones los sistemas de hosting crean las bases de datos con un formato de archivo predeterminado y se nos presenta el siguiente error cuando el instalador revisa los requerimientos de Moodle.







Existen dos soluciones: 

La primera, solicitar al soporte técnico si pueden cambiar las características de configuración y volver a crear o convertir la base de datos ( a veces algo que acaban diciendo que no es posible :S )


La segunda, que resuelve el requerimiento pero a largo plazo no es recomendable.

Modificar el archivo config.php

1. Con un editor abrir el archivo config.php


2. Agregar la codificación actual de la base de datos al $CFG->dboptions, en la opción dbcollation, en mi caso es utf8_unicode_ci


$CFG->dboptions = array (
'dbpersist' => 0,
'dbport' => '',
'dbsocket' => '',

'dbcollation' => 'utf8_unicode_ci',

);


3. Guardar el archivo y recargar la página de validación de requerimientos


La opción debe desaparecer y permitir seguir con la instalación.

Nota Importante: se recomienda que la base de datos sea utf8mb4_unicode_ci para utilizar Moodle al 100%, utilizar una menor reducirá el rendimiento. Está solución solo funciona cuando no existe otra alternativa.

Saludos y éxito



martes, 24 de septiembre de 2019

gcloud crashed info (ValueError): unknown locale: UTF-8


Mac Osx Gcloud

Al aplicar gcloud info me devuelve el siguiente error:

ERROR: gcloud crashed (ValueError): unknown locale: UTF-8

esto apareció después de actualizar la versión de gcloud. 

Buscando 

Solución:

Agregar al final del .bash_profile:

export LC_ALL=es_MX.UTF-8
export LANG=es_MX.UTF-8

en mi caso que mi maquina esta configurada para latinoamerica.


jueves, 1 de agosto de 2019

Obtener la longitud de un objeto JSON

Obtener la longitud de un objeto JSON

Obtener la longitud o número de elementos dentro de un objeto JSON se obtiene tomando en cuenta el número de claves en el objeto y eso se obtiene con: 

Object.keys(Object).length;

Ejemplo: 

<script>
var matriz1 = {'nombre':'Juan','paterno':'Perez','materno':'Perez'};

function longitudJSON(matriz){
   var n_elementos = Object.keys(matriz).length;
   return n_elementos;
}

console.log("Total: "+longitudJSON(matriz1));

</script>

Lo cual imprime en la consola:

Total: 3

Saludos

Uso de JSON.stringify y JSON.parser

Desarrollando una pequeña aplicación de un formulario que recuperaba los datos a través de una función y lo pasaba a otra me encontraba que no podia ver o usar el objeto que tenia. Además, al querer ver los datos con el console log me daba error 

SyntaxError: Unexpected token o in JSON at position 1


y no podia recuperar los datos.


Resulta ser que aplicaba mal el uso de datos las funciones 


JSON.stringify  y JSON.parse



Cuando nosotros usamos JSON.stringify  convertimos al obj JSON en string y,

JSON.parse lo regresa a ser un Object.


por ejemplo, si creas un objeto


var matriz1 = {}; 

matriz1.a = 9

y aplicas 

console.log(matriz1);

obtienes 

[object Object]

pero 

console.log(matriz1.a)

te da 

9

Si aplicas 

console.log(JSON.stringify(matriz1))
imprime
{"a":9}

De tal manera que aplicar un JSON.stringify en un paso previo requiere regresar los datos a su formato de objeto con JSON.parse en un paso futuro para su uso adecuado.


Ahora bien, se puede dar el caso de que los datos que obtienes de algún origen no vengan formateados, entonces, tenemos que convertir en string los datos y luego parsearlos. Por ejemplo:



JSON.parse(JSON.stringify(matriz1))

Espero te sirva la información.

Saludos


jueves, 25 de julio de 2019

Error CS0234: The type or namespace name 'Debug' does not exist in the namespace 'Microsoft.Extensions.Logging' OSX windows

Error CS0234: The type or namespace name 'Debug' does not exist in the namespace 'Microsoft.Extensions.Logging' (are you missing an assembly reference?) (CS0234)

Estoy trabajando un proyecto con otras personas de ASPNETCore

Cuando intento compilar la aplicación me genera el siguiente error:

Error CS0234: The type or namespace name 'Debug' does not exist in the namespace 'Microsoft.Extensions.Logging' (are you missing an assembly reference?) (CS0234)

y el warning

/Library/Frameworks/Mono.framework/Versions/5.18.1/lib/mono/msbuild/Current/bin/Microsoft.Common.CurrentVersion.targets(5,5): Warning MSB3245: No se pudo resolver esta referencia. No se encuentra el ensamblado "Microsoft.Extensions.Logging.Debug". Compruebe si el ensamblado existe en el disco. Si el código necesita esta referencia, podrían producirse errores de compilación. (MSB3245) 


Quien realizo la base del proyecto inicio en windows y en mi caso yo estoy usando una Mac, con OSX

Después de varios días sin encontrar como resolverlo, me dieron un consejo, ejecutar: dontnet run en el directorio del proyecto.

Eso genero el mismo error, pero me permitió saber por donde iba el problema.


error CS0234: The type or namespace name 'Debug' does not exist in the namespace 'Microsoft.Extensions.Logging' (are you missing an assembly reference?) [/Users/usuario/Documents/proyecto/src/terra/terra.csproj]


Resulta ser que se configuro una dependencia  y el conflicto hacia referencia a una librería que no tenía en el archivo del proyecto: /Users/usuario/Documents/proyecto/src/terra/terra.csproj 

Microsoft.Extensions.Logging.Debug

y que además hace referencia a una ruta que es de windows.



<ItemGroup>
    <Reference Include="Microsoft.Extensions.Logging.Debug">
      <HintPath>..\..\..\..\..\..\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.extensions.logging.debug\2.1.1\lib\netstandard2.0\Microsoft.Extensions.Logging.Debug.debug.dll</HintPath>
    </Reference>

  </ItemGroup>

x

Solución

Buscar el directorio donde deben estar instaladas las librerías del core en osx, en la consola con el comando:

find / -name NuGetFallbackFolder  

Resultado:

/usr/local/share/dotnet/sdk/NuGetFallbackFolder/

Entonces, debemos editar el archivo del proyecto

/Users/usuario/Documents/proyecto/src/terra/terra.csproj

Actualizar la línea:


<HintPath>/usr/local/share/dotnet/sdk/NuGetFallbackFolder/microsoft.extensions.logging.debug/2.1.1/lib/netstandard2.0/Microsoft.Extensions.Logging.Debug</HintPath>

Guardar los cambios

Ir a Visual Studio

Dar clic en Agregar-> Agregar paquetes NuGet 


Buscar Microsoft.Extensions.Logging.Debug
Dar clic en el botón Agregar paquetes





Aceptar las licencias


y una vez instalado, compilar su aplicación.




Ahora ya puede visualizar su aplicación =)






lunes, 15 de julio de 2019

Modificar propiedades css datepicker button

Modificar propiedades css datepicker button

Al crear un datepicker tiene la opción de agregar un botón de apoyo

 $( "#fecha" ).datepicker({
       nextText: "Siguiente",
       prevText: "Anterior",
       showWeek: false,
       showOn: "both",
       buttonText: "Calendar",
       buttonImage: "imagen/icono.png"
 });


El ícono aparece con fondo de un botón, que toma el tamaño original de la imagen; para personalizarlo debemos modificar su css.



Usando el inspector del navegador vemos que la clase es .ui-datepicker-trigger

entonces, el icono del botón lo modificamos con :

/*icono de button*/
.ui-datepicker-trigger{
  border: 0px;
  width:40px;
  height:40px;
}

y la imagen contenida:

/*icono de button image*/
.ui-datepicker-trigger>img{
  width:35px;
  height:35px;
}

así tendremos un botón más acorde a lo que deseamos.



Saludos y éxito en sus proyectos.