sábado, 18 de febrero de 2017

El mejor editor de Bash para linux

La mejor forma de escribir código bash es usando el plugin BashSupport para los ides de IntelliJ.

En mi caso lo instalé en PyCharm y va excelente:

Entras en Settings -> Plugins -> Browse Repositories y lo buscas:



Una vez instalado renicias PyCharm y ya te debería salir la opción de crear un nuevo bash file:



Seteas el intérprete y listo

sábado, 11 de febrero de 2017

Corregir: file_exists(): open_basedir restriction in effect. File(/var/www/html/

Cuando desplegué un api que estoy desarrollando a mi hosting me saltó el siguiente error:


ErrorException
 in Filesystem.php line 23:
file_exists(): open_basedir restriction in effect. File(/var/www/html/API/storage/framework/cache/2c/60) is not within the allowed path(s): (/home/u776079664:/tmp:/var/tmp:/opt/php-5.6/pear:/usr/local/bin:/etc/pki/tls/certs)



En esta imag se ve mejor


Esta mierda ocurre porque se subió el fichero de bootstrap/cache/config.php que se crea cuando se ejecuta el comando

php artisan config:make

Para solucionar el error basta con borrar este fichero en el servidor o lo que es lo mismo, ejecutar :

php artisan config:clear

jueves, 9 de febrero de 2017

Unban ip baneado por ssh

Cuando se excede el número de intentos fallidos al intentar acceso a un terminal ssh el servidor bloquea el acceso a la maquina.
Para solventarlo se hace lo siguiente:
fail2ban-client set sshd unbanip IP_A_UNBANEAR

ej:

fail2ban-client set sshd unbanip 192.168.1.123

martes, 7 de febrero de 2017

Enviar correos desde Laravel usando cuenta Gmail

Intentando enviar un correo desde láravel usando mi cuenta gmail encontré que cuando se intentaba enviar me salía el siguiente error: 

Swift_TransportException in AbstractSmtpTransport.php line 383:
Expected response code 250 but got code "535", with message "535-5.7.8 Username and Password not accepted. Learn more at
535 5.7.8 https://support.google.com/mail/?p=BadCredentials p62sm3200250ywb.2 - gsmtp
"


Esto ocurre porque gmail detecta el server como una aplicación no segura. 
Para solucionarlo debes ir a la cuenta de gmail e entrar en: 



Ya con esto debería funcionar.
Mis valores del .env me quedaron así:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=micorreo@gmail.com
MAIL_PASSWORD=claveloca
MAIL_ENCRYPTION=tls

Si todavía con eso no te funciona intenta entrar en el siguiente link y darle aceptar:


ABA CANTV se pone lento con aumento de plan (Explicación del porque)

Es probable que al subir el plan de internet tu velocidad de conexión haya bajado. En mi caso me ocurrió que tenía 4 Megas y me funcionaba bien. Luego coloqué el de 10 Megas y la velocidad de descarga bajó drásticamente a 1 Mega

Esto suena contradictorio pero tiene explicación:

Explicación corta:

La linea que tienes no "soporta" el plan que colocaste porque tienes mucha atenuación o ruido, por lo que el modem reduce la velocidad de transferencia a una que permita la comunicación con menos tasa de errores.

OJO: También es posible que tu baja de velocidad sea también por saturación en el servicio de CANTV

Explicación larga:

Hay dos variables que definen la velocidad máxima que se puede transmitir por una línea antes que se pierda la sincronización. Estas son el ruido y la atenuación.
Estas variables las puedes ver en el panel de tu modem:

En este caso el modem indica un SNR Margin de 13.3 dB y una atenuación de 32 dB.


Ruido:

Cada linea telefónica tiene un ruido  asociado. Este es llamado SNR.
Cada velocidad de conexión tiene un ruido máximo al que se puede transmitir llamado SNR to sync.
La diferencia entre el SNR y SNR to sync es el SNR Margin, que se puede interpretar como la holgura que se tiene para transmitir a esa velocidad con ese ruido SNR.
El valor del SNR to sync viene seteado en el modem y depende de cada fabricante
Ejemplo
SNR = 44dB
SNR to sync at 8Mb = 35dB       <--- Plan CANTV 8 Megas
SNR MARGIN = 44-35 = 9dB <---- Mientras mayor sea el número mejor es la conexión

¿Como sé si mi plan es adecuado según el ruido que tengo?
Por lo anteriormente expuesto, el SNR Margin aumenta cuando cambiamos de plan.

Puedes guiarte con los siguientes valores para saber si tienes un SNR Margin adecuado:

6dB O menos deriva en una muy mala navegación con muchos errores.
7dB-10dB Conexión con mala calidad
11dB-20dB Es un buen valor. Con pocos problemas sincronización
20dB-28dB  Es excelente. 
29dB o más: Es un sueño (El ruido ideal)

Atenuación:

Es la reducción de la "fuerza" de la señal en la linea. Está relacionado con la distancia al nodo, pero también hay otros factores como la calidad del cable, la frecuencia de transmisión, los empalmes, etc.

Generalmente se asume que hay una perdida de 13.81 db por cada km que separe el cliente del nodo (Por supuesto en la vida real nunca es exacto y depende del tipo de infraestructura de transmisión).

20dB o menos es ideal
20dB-30dB es excelente
30dB-40dB es muy bueno
40dB-50dB es aceptable
50dB-60dB es una conexión pobre y muy posiblemente tengas problemas
60dB o menos es muy mala atenuación. Tendrás problemas importantes en la navegación


Con un ruido ideal, estas son las siguientes velocidades de navegación máximas que se pueden lograr. Note la relación entre distancia y atenuación:
1km = 24Mbit
1.0km = 13.81dB = 23Mbit
1.5km = 20.7dB = 21Mbit
2.0km = 27.6dB = 18Mbit
2.5km = 34.5dB = 13Mbit
3.0km = 41.4dB = 8Mbit
3.5km = 48.3dB = 6Mbit
4.0km = 56dB = 4Mbit
4.5km = 62.1dB = 3Mbit
5.0km = 69dB = 2Mbit

En la siguiente table lo podemos ver mejor




Mi experiencia:
Mi ejemplo: Con el plan de 8 Megas en las mañanas el SNR Margin sube a 22.3 dB y puedo navegar con total normalidad a 8 Megas. En la tarde el SNR Margin baja y se sitúa en 13 por lo que la velocidad baja y no paso de 2 Megas.

Para ver estos valores entra en el panel de tu modem y busca las opciones DSL







Hosting

sábado, 4 de febrero de 2017

Manejo de imágenes API con Laravel 5.3

Me surgió hacer un api en donde el cliente debía subir imágenes:

Para hacerlo es muy sencillo. Primero creas la ruta:

Route::post('/add', 'ApiAuthController@add');

Luego creas el controlador

    public function add(Request $request) {
        $v = Validator::make($request->all(), [
            'image' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
        ]);

        if ($v->fails()){
            return response()->json(["success"=>"False", "Error"=>$v], 422);
        }

        $image = $request->file('image');
        $input['imagename'] = time().'.'.$image->getClientOriginalExtension();
        $destinationPath = public_path('/images');
        $image->move($destinationPath, $input['imagename']);

//        $this->postImage->add($input);

        return back()->with('success','Image Upload successful');
    }

Luego lo pruebas con Postman


y Listo. Se guarda en public/images



Hosting

viernes, 3 de febrero de 2017

Create object and add attributes to it: Python

Creamos el objeto args y le agregamos los atributos recid y sigb64
args = SimpleNamespace()
setattr(args, 'recid', "receptor1")
setattr(args, 'sigb64', "AfGLmNB==")

Luego podemos hacer args.recid o args.sigb64