Como ocultar la cabecera de pagina WordPress al hacer Scroll + Video

Ocultar cabecera de WordPress al hacer Scroll

En ocasiones necesitamos en una pagina web ocultar la cabecera de la misma al realizar scroll down ó scroll up (desplazamiento hacia abajo ó hacia arriba), o establecer algún otro comportamiento al realizar esta acción, como podría ser agrandar o disminuir un logo, ajustar el menu, etc…

Generalmente este comportamiento lo queremos incorporar en aquellas paginas que tienen la cabecera ó el menú con posición fija (position: fixed;) es decir que al hacer scroll se mantiene el elemento en la misma zona.

Sigue leyendo

Solución a error de decode en combinación Python QT PyQT ReportLab – AttributeError: ‘QString’ object has no attribute ‘decode’

El sistema Komunal que desarrolle en el 2013 usando Python, QT4, PyQT4 y SQLite con el código disponible en GitHub: https://github.com/leninmhs/komunal hoy probándolo no generaba los PDF. Para generar los pdf desde python use ReportLab que es excelente solución para esta tarea. En su momento cuando publique el código en GitHub los pdf se exportaban sin problema, hoy volviendo a levantar ese código fallaba intentando guardar el archivo pdf, el error fue el siguiente:

File “/usr/lib/python2.7/dist-packages/reportlab/lib/utils.py”, line 1395, in makeFileName
s = s.decode(‘utf8’)
AttributeError: ‘QString’ object has no attribute ‘decode’

Sigue leyendo

Describe Table en SQLite + Muestra en Python

Sorprendentemente no hay describe table o show table en sqlite.

La solución es la siguiente consulta:

SELECT * FROM sqlite_master;

SELECT * FROM sqlite_master where type = ‘table’;

SELECT type,name, tbl_name FROM sqlite_master where type = ‘table’;

PRAGMA table_info(familia);

This pragma returns one row for each column in the named table. Columns in the result set include the column name, data type, whether or not the column can be NULL, and the default value for the column.

PRAGMA foreign_key_list(familia);

This pragma returns one row for each foreign key that references a column in the argument table.

http://www.sqlite.org/pragma.html

SELECT seq FROM sqlite_sequence where name = ‘familia’

SELECT seq + 1 FROM sqlite_sequence where name = ‘familia’

Fragmento de muestra en Python:

import sqlite3

db = sqlite3.connect("basededatos.db")
dbconn = db.cursor()
print "Next Value: " + str(dbconn.execute("SELECT seq FROM sqlite_sequence where name = 'familia'").fetchone()[0]+1)
print "Proximo Valor: " + str(dbconn.execute("SELECT seq + 1 FROM sqlite_sequence where name = 'familia'").fetchone()[0])</pre>

lhernandez@DskLhernandez:~$ python sqlite.py
Next Value: 64
Proximo Valor: 64

http://www.sqlite.org/sqlite.html

http://sqlite.org/lang_corefunc.html

Perl – Leer valores de archivo LDIF con Net::LDAP::LDIF

perl_frase

perl_frase

El siguiente código fuente escrito en el lenguaje de programación Perl, lee un archivo LDIF exportado desde openldap, captura los valores que nos interesan de cada objeto (en nuestro caso uid, mail y displayname), para ir mostrándolos en el terminal mientras se esta ejecutando y genera un archivo plano resultante con los valores que necesitábamos. La magia de entender y manipular amigablemente archivos LDIF para lectura y escritura la realiza el modulo Net::LDAP::LDIF de CPAN. En Debian o derivados instalen el paquete libnet-ldap-perl.

 

#!/usr/bin/perl
# aptitude install libnet-ldap-perl
# Lee valores de archivo ldif

use Net::LDAP::LDIF;

$ldif = Net::LDAP::LDIF->new( "ldap.ldif", "r", onerror => 'undef' );
while ( not $ldif->eof( ) ) {
  $entry = $ldif->read_entry( );
  if ( $ldif->error ( ) ) {
   print "Error msg: ", $ldif->error( ), "\n";
   print "Error lines:\n", $ldif->error_lines( ), "\n";
  } else {
   $uid  = $entry->get_value("uid");
   $mail = $entry->get_value("mail");
   $displayname  = $entry->get_value("displayname");
   $result_ldif  = "$uid,$mail,$displayname \n";
   print $result_ldif;
   open (ARCHIVO_FINAL,">> result_ldif.csv") || die "No se puede abrir el archivo\n";
   print ARCHIVO_FINAL $result_ldif;
   }
}
$ldif->done ( );

Envio de mensajes SMS via HTTP GET desde Bash Script

El siguiente script en Bash envía como parámetros el número de teléfono y texto de mensaje por método GET a un servicio de Gateway SMS que estará a la escucha en un IP y Puerto especifico, el cual al recibir la petición con dichos parámetros realizara el envió del mensaje de texto SMS, al número indicado. Ideal para realizar envíos de SMS masivos, desatendidos, programados con anticipación, etc…

 

#!/bin/bash
# Bash script envio de mensajes via HTTP GET
# Leninmhs

texto="Esto es un mensaje sms masivo enviado desde tu consola linux";
texto="${texto// /%20}";

for i in $(cat /home/leninmhs/telefonos.csv); do
    (( contador_sms++ ))
    curl -X GET "http://192.168.1.100:9090/sendsms?phone=+58$i&text=$texto";
    sleep 1
    echo "SMS N°: $contador_sms enviado a: $i en: $(date +%Y-%m-%d:%H:%M:%S)" >> sms.log
done

 

Explicación del código fuente

Nota: La numeración presentada a continuación corresponde a las lineas de código mostradas anteriormente.

1, 2 y 3: Le indicamos al programa que usaremos el interprete de bash y comentarios del programa.

5 y 6:  Almacenamos en una variable el texto del mensaje que enviaremos y en el caso del gateway sms que estoy usando no aceptaba los espacios en blanco por lo que los tuve que sustituir por su representación en caracteres en la linea 6.
Sigue leyendo

Generar código QR desde postgreSQL con Perl

perl_frase

qr-leninmhsComo practica para probar y conocer como generar códigos QR en Perl, realizaremos el siguiente ejercicio: conectarnos a una base de datos, consultar el identificador único de cada producto en una tabla de nuestra base de datos postgres, generar el código QR de cada uno de los productos. Cada QR direccionara a un url compuesto por una pagina web + el identificador, con lo cual suponemos que en ese url hubiera la información con mas detalle del producto. La practica sera realizada en Debian GNU/Linux

Usaremos el modulo de CPAN Imager::QRCode para generar nuestros QR. Mas información: http://search.cpan.org/~kurihara/Imager-QRCode/lib/Imager/QRCode.pm

Para conectarnos y consultar la base de datos, usaremos la extensión para postgres de Class::DBI. Mas información: http://search.cpan.org/~rudy/DBD-Pg/Pg.pm

Código QR desde postgreSQL con Perl

Ambos módulos los tendremos disponibles en nuestro Debian con: #aptitude install libimager-qrcode-perl libclass-dbi-pg-perl

Crearemos un archivo de texto con extensión .pl colocaremos y adaptaremos lo siguiente:

Código Fuente

#!/usr/bin/perl -w
use Imager::QRCode;
use DBI;

my $bd = DBI->connect("DBI:Pg:dbname=bd_ventas;host=192.168.0.1", "usuario_bd", "clave_bd", {'RaiseError' => 1});
my (@consulta, $sth);

$sth=$bd->prepare("SELECT id_producto FROM productos");
$sth->execute();

my $qrcode = Imager::QRCode->new(
size          => 8,
margin        => 1,
version       => 4,
level         => 'L',
casesensitive => 1,
lightcolor    => Imager::Color->new(255, 255, 255),
darkcolor     => Imager::Color->new(0, 0, 0),
);

while(@consulta = $sth->fetchrow_array() ){
$img = $qrcode->plot("http://paginaweb.com.ve/$consulta[0]", \%params);
$img->write(file => "$consulta[0].gif");
}#fin while

Explicación del código fuente

Nota: La numeración presentada a continuación corresponde a las lineas de código presentadas anteriormente.

Sigue leyendo

#Yii – Controlador desde Controlador

controlador-yii

En esta entrada practicaremos hacer llamados a controladores específicos y sus acciones, desde otros controladores en los que sea requerido.

La practica consiste en lo siguiente: Necesitamos desde un controlador ( PrincipalController.php ), usar acciones que se encuentran en otros dos controladores (OperacionesController.php y PublicoController.php respectivamente).

.

OperacionesController.php

<?php

class OperacionesController extends Controller{

public function actionSumar($a,$b){

if( is_null($a) && is_null($b) ){
$a= 6;
$b= 7;
}

$resultado = $a + $b;
if(!is_numeric($a) || !is_numeric($b))
throw new CHttpException(404,'Epa no es un dato numerico.');
else
return $resultado;

}

}

.

PublicoController.php

<?php

class PublicoController extends Controller{

public function actionCapturarVisitante($aleatorio){

$visitante = "<br> IP:{$_SERVER["REMOTE_ADDR"]}<br>";
$visitante .= "HOST:{$_SERVER["REMOTE_PORT"]}<br>";
$visitante .= "URI:{$_SERVER["REQUEST_URI"]}<br>";
$visitante .= "Fecha: ".date("d-m-Y h:i:s")."<br>";
$visitante .= "Navegador: {$_SERVER["HTTP_USER_AGENT"]}<br>";
$visitante .= "Identificador: {$aleatorio}<br><br>";

return $visitante;

}

}

.

PrincipalController.php

En este controlador usamos las acciones de los controladores anteriores. Al controlador OperacionesController.php y sus acciones accederemos indicando que nuestro controlador extiende del mismo (linea 3), recordando y entendiendo que al final de cuentas un controlador no es mas que una clase y sus acciones los métodos de esta clase (linea 7). Ahora las acciones del controlador PublicoController.php las capturaremos indicando: el controlador objetivo + la acción objetivo + los parámetros si los requiere como lo indica la linea 9.

<?php

class PrincipalController extends OperacionesController{

public function actionMivista(){

$suma = $this->actionSumar(11,3);

$visitante = PublicoController::actionCapturarVisitante(rand(10000,99999));

$this->render('mivista',
array( 'suma' => $suma, 'visitante' => $visitante ));
}

}

.

En el archivo protected/config/main.php especificar que se importaran todos los controladores agregando la siguiente linea en el bloque import: ‘application.controllers.*’

De lo contrario es probable que experimenten este tipo de errores:

include(OperacionesController.php): failed to open stream: No such file or directory

.

Vista generada desde PrincipalController.php

protected/views/principal/mivista.php

<h1>Controlador desde controlador en Yii</h1>

<b><?php echo 'El resultado de la suma es: '.$suma ?> </b>

<b><br /><br />Datos del visitante: </b><?php echo $visitante ?>

<div>
<?php echo CHtml::submitButton('Enviar'); ?>
</div>

Finalmente nuestra vista mostrara información que se genero y proceso desde tres controladores distintos.

controlador-yii

Vista en Yii usan en backend 3 controladores

Existen otros medios de realizar tareas iguales o similares, una u otra forma serán mas eficientes o mas acordes según el entorno, variables y las propias reglas de negocio que regulen su desarrollo en yii.

Lecturas muy recomendadas:

http://www.yiiframework.com/doc/guide/1.1/es/basics.controller

http://yiiframework.wordpress.com/2009/01/21/basico-modelo-vistas-y-controladoresmvc/

http://blog.jorgeivanmeza.com/2010/01/los-controladores-en-yii-2/