Un buen tiempo sin escribir.. en los próximos días agregare algunas cositas de Symfony 2, he leido y hecho algunas cosas solo en modo test, me sigue pareciendo que le faltan cosas que ya estaban resueltas con la version 1.4 pero tambien han agregado cosas de mucho valor.
He dejado tiempo a que salgan versiones del 2 con mas cositas y lo ultimo que he probado ha sido con 2.6.7
En proximos dias subire una serie de pasos para comenzar tu proyecto en Symfony 2.
Nos leemos.
Algunos Tips...!
Algunas cosas interesantes en cuanto a desarrollo web que se consiguen el la red y casi siempre se me olvidan.. Una especie de Guia rapida con algunos tips importantes en desarrollo de software bajo plataforma libre...
viernes, 22 de mayo de 2015
martes, 13 de mayo de 2014
Probando las expresiones regulares
Aqui unos ejemplos del uso de expresiones regulares
Ej.1 Obtener el title de una pagina web desde una URL
Ej.1 Obtener el title de una pagina web desde una URL
function getTitle($Url){ $str = file_get_contents($Url); if(strlen($str)>0){ preg_match("/\Ej.2 validar url de id youtube(.*)\<\/title\>/",$str,$title); return $title[1]; }
function validate_url($url) { preg_match('#^(?:https?://)?(?:www\.)?(?:youtube\.com(?:/embed/|/v/|/watch\?v=))([\w-]{11})(?:.+)?$#x', $url, $r); return (isset($r[1]) && !empty($r[1])) ? $r[1] : false; }y listo!
Expresiones Regulares
1. Validar una URL
¿Quieres saber si una dirección web es válida? No hay problema con esta expresión regular lo tendremos muy fácil:
-
/^(https?:\/\/)?([\da-z\.-]+)\
.([a-z\.]{2,6})([\/\w \?=.-]*) *\/?$/
2. Validar un E-mail
En muchas ocasiones necesitaremos saber si un e-mail con el que se trata de registrar un usuario es válido:
-
^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[
a-z0-9-]+(\.[a-z0-9-]+)*(\.[a- z]{2,3})$
3. Comprobar la seguridad de una contraseña
Para aquellos que necesitáis sugerir / comprobar la fortaleza de una contraseña:
-
(?=^.{8,}$)((?=.*\d)|(?=.*\W+)
)(?![.\n])(?=.*[A-Z])(?=.*[a- z]).*$
De esta forma comprobaremos:
- Contraseñas que contengan al menos una letra mayúscula.
- Contraseñas que contengan al menos una letra minúscula.
- Contraseñas que contengan al menos un número o caracter especial.
- Contraseñas cuya longitud sea como mínimo 8 caracteres.
- Contraseñas cuya longitud máxima no debe ser arbitrariamente limitada.
4. Validar un número de teléfono
Con este snippet se validarán todos los número de teléfono pertenecientes a los listados en la Wikipedia:
-
^\+?\d{1,3}?[- .]?\(?(?:\d{2,
3})\)?[- .]?\d\d\d[- .]?\d\d\ d\d$
5. Validar número de tarjeta de crédito
Ahora que tan de moda está el e-commerce seguro que esto le vendrá bien a más de uno:
-
^((67\d{2})|(4\d{3})|(5[1-5]\
d{2})|(6011))(-?\s?\d{4}){3}|( 3[4,7])\ d{2}-?\s?\d{6}-?\s?\ d{5}$
6. Recoger ID de un vídeo de Youtube
Si necesitas recoger el ID de un vídeo de Youtube en sus múltiples combinaciones, esta es tu expresión regular:
-
/http:\/\/(?:youtu\.be\/|(?:[
a-z]{2,3}\.)?youtube\.com\/ watch(?:\?|#\!)v=)([\w-]{11}). */gi
7. Validar todas las etiquetas de imagen sin cerrar
Ahora
que prácticamente todos empleamos xHTML es interesante comprobar que
todas nuestras etiquetas de imagen están correctamente cerradas:
- ]+)(\s*[^\/])>>
8. Validar una dirección IP
Si necesitas validar una dirección IP introducida por un usuario, esto te será de gran ayuda:
-
/^(([1-9]?[0-9]|1[0-9]{2}|2[0-
4][0-9]|25[0-5]).){3}([1-9]?[ 0-9]|1[0-9]{2}|2[0-4][0-9]|25[ 0-5])$/
9. Validar código postal
En muchas ocasiones necesitamos recoger en los formularios de alta el código postal:
-
^([1-9]{2}|[0-9][1-9]|[1-9][0-
9])[0-9]{3}$
10. Validar un nombre de usuario
Si por ejemplo quisiésemos validar un nombre de usuario con un mínimo de 4 caracteres y un máximo de 15 haríamos lo siguiente:
- /^[a-z\d_]{4,15}$/i
Además el nombre estaría utilizando sólo caracteres de la A-z y números.
11. Validar un cadena de texto incluyendo tildes y espacios
Si por ejemplo quisiésemos validar un nombre de usuario con un mínimo de 4 caracteres y un máximo de 15 haríamos lo siguiente:
-
/^[a-zA-ZÑñáéíóúÁÉÍÓÚ0-9[:
space:]]*$/
Util para nombres de personas o lugares.
fuente: http://web.ontuts.com/ snippets/10-expresiones- regulares-imprescindibles-en- desarrollo-web/
Un sitio para probar las expresiones: http://rubular.com/
Un sitio para probar las expresiones: http://rubular.com/
return $title[1];
}
Etiquetas:
cadena incluyendo tildes y espacios,
codigo postal,
contraseña,
email,
expresion regular,
expresiones regulares,
id de youtube,
ip,
tarjeta de credito,
telefono,
url
miércoles, 3 de abril de 2013
Eliminar caracteres especiales con PostgreSQL
aqui les dejo un query que me envio un amigo, la consulta elimina los caracteres especiales y solo deja letras a-zA-Z y numeros 0-9 usando expresiones regulares.
ejecuten la consulta y vean el resultado!
select regexp_replace ('$wan<>tó&or-+,;emove#speci#%&al~\¡?\{[]}''''chars123…..789', '[^a-zA-Z0-9]', '', 'g')y listo!
miércoles, 27 de marzo de 2013
Gammu y mensajeria de texto (sms) masiva
Wammu es un programa para manejar los datos en el teléfono celular como los contactos, calendario y mensajes. Está creado sobre la biblioteca Gammu, que provee una capa de abstracción para trabajar con diferentes teléfonos celulares de diferentes proveedores (incluyendo Nokia, Sony-Ericsson, Motorola, Samsung, Siemens, Huawei y otros).
puedes ir a la pagina oficial y obtener mas informacion http://es.wammu.eu/
instalando
Dispositivo : /dev/ttyUSB0
Fabricante : Huawei
Modelo : unknown (E173)
Firmware : 11.126.85.00.197
IMEI : 352214041427007
IMSI SIM : 734048700255917
NOTA: para las pruebas estoy utilizando un mdoem usb Huawei E173 con un chip de telefono movistar, en la pagina oficial de gammu (http://es.wammu.eu/) puedes ubicar los telefonos y modems soportados ademas del tipo de conexion, para la prueba se utilizo connection = at19200 verificar los puertos del dispositivo que reconoce la pc
crw-rw---- 1 root dialout 188, 0 2013-03-25 14:22 /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 1 2013-03-25 14:22 /dev/ttyUSB1
crw-rw---- 1 root dialout 188, 2 2013-03-25 14:23 /dev/ttyUSB2
crw-rw---- 1 root dialout 188, 3 2013-03-25 14:23 /dev/ttyUSB3
crw-rw---- 1 root dialout 188, 4 2013-03-25 14:23 /dev/ttyUSB4
crw-rw---- 1 root dialout 188, 5 2013-03-25 14:23 /dev/ttyUSB5
Algunos casos solo reconoce ttyUSB0 al ttyUSB3
El archivo de configuracion por modem conectado, si existen multiples modem es necesario crear un archivo por cada modem. Adicional es necesario identificar por cual puerto salen y entran los sms para el caso de la prueba donde se reconocen 6 puertos se utiliza port = /dev/ttyUSB0 si reconoce 4 puertos el puerto de salida es otro, solo queda probar.
/usr/share/doc/gammu/examples/sql/pgsql.sql
Solo queda crear la bd desde el archivo pgsql.sql
Solo queda departe de tu codigo controlar la carga por cada modem, debe existir una mejor forma de balancear la carga del envio de sms, pero aun no lo se.. adicional, reiniciar el servicio si falla...
comenten al respecto.. gracias!
# aptitude install gammu gammu-doc gammu-smsd libgammu7 libgsmsd7comando para identificar el dispositivo
# gammu -c /etc/gammu-smsdrc --identifyrespuesta:
Dispositivo : /dev/ttyUSB0
Fabricante : Huawei
Modelo : unknown (E173)
Firmware : 11.126.85.00.197
IMEI : 352214041427007
IMSI SIM : 734048700255917
NOTA: para las pruebas estoy utilizando un mdoem usb Huawei E173 con un chip de telefono movistar, en la pagina oficial de gammu (http://es.wammu.eu/) puedes ubicar los telefonos y modems soportados ademas del tipo de conexion, para la prueba se utilizo connection = at19200 verificar los puertos del dispositivo que reconoce la pc
# ls -l /dev/tty*resultado:
crw-rw---- 1 root dialout 188, 0 2013-03-25 14:22 /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 1 2013-03-25 14:22 /dev/ttyUSB1
crw-rw---- 1 root dialout 188, 2 2013-03-25 14:23 /dev/ttyUSB2
crw-rw---- 1 root dialout 188, 3 2013-03-25 14:23 /dev/ttyUSB3
crw-rw---- 1 root dialout 188, 4 2013-03-25 14:23 /dev/ttyUSB4
crw-rw---- 1 root dialout 188, 5 2013-03-25 14:23 /dev/ttyUSB5
Algunos casos solo reconoce ttyUSB0 al ttyUSB3
El archivo de configuracion por modem conectado, si existen multiples modem es necesario crear un archivo por cada modem. Adicional es necesario identificar por cual puerto salen y entran los sms para el caso de la prueba donde se reconocen 6 puertos se utiliza port = /dev/ttyUSB0 si reconoce 4 puertos el puerto de salida es otro, solo queda probar.
# vim /etc/gammu-smsdrc
[gammu] port = /dev/ttyUSB0 model = logformat = textalldate connection = at19200 synchronizetime = yes use_locking = gammuloc = [smsd] #Para el demonio SMSD logfile = /home/usuario/smsdlog debuglevel = 1 commtimeout = 0 sendtimeout = 10 receivefrequency = 60 phoneid = modem1 #Para la Base de Datos service = sql driver = native_pgsql host = 192.168.1.3 pin = 1234 user = u_test password = pass_server database = sms4guardar y salir :wq el parametro phoneid = modem1 cambia por cada dispositivo conectado, asi identificas cada modem; al igual que puedes crear diferentes archivos para los logs de cada dispositivo para probar el modem conectado puedes utilizar el comando:
# echo "prueba" | gammu -c /etc/gammu-smsdrc --sendsms TEXT 04141111111 -> aqui el nuemero al que envias el smsComo se observa en el archivo de configuracion existe una BD asociada al proceso database = sms4, es donde se registran los mensajes entrantes y salientes, para crear esta bd utiliza el archivo .sql propio para la instalacion de gammu La estructura de la bd para gammu se encuentra en:
/usr/share/doc/gammu/examples/sql/pgsql.sql
Solo queda crear la bd desde el archivo pgsql.sql
# su - postgres $ psql postgres=# create database sms4 with owner u_fmnh; postgres=# \q $ psql sms4 u_fmnh -h localhost < /usr/share/doc/gammu/examples/sql/pgsql.sqlpara ejecutar el envio de sms automatico solo hay q levantar el proceso
# gammu-smsd -c /etc/gammu-smsdrcSi existen mas modems conectados y configurados el parametro -c recibe la ruta de cada configuracion Si deseas probar si todo funciona inserta en la bd creada en la tabla outbox query format sms flash
INSERT INTO outbox("DestinationNumber", "TextDecoded", "CreatorID", "Class") VALUES ('04141111111', 'prueba', 'Gammu', '0')query format sms normal
INSERT INTO outbox("DestinationNumber", "TextDecoded", "CreatorID", "Class") VALUES ('04141111111', 'prueba', 'Gammu', '-1')Si tienes multiples dispositivos conectados y quieres enviar sms por cada uno de ellos debes señalar en el insert a cual modem envias utilizando el parametro de configuracion phoneid en los campos SenderID CreatorID
INSERT INTO outbox ("DestinationNumber", "TextDecoded", "SenderID", "CreatorID", "Coding","Class") VALUES ('04141111111','prueba modem1','modem1','modem1',''Default_No_Compression'',0)' INSERT INTO outbox ("DestinationNumber", "TextDecoded", "SenderID", "CreatorID", "Coding","Class") VALUES ('04141111111','prueba modem1','modem2','modem2',''Default_No_Compression'',0)'...y listo!!
Solo queda departe de tu codigo controlar la carga por cada modem, debe existir una mejor forma de balancear la carga del envio de sms, pero aun no lo se.. adicional, reiniciar el servicio si falla...
comenten al respecto.. gracias!
Etiquetas:
configurar gammu,
envio de mensajes de texto desde php,
gammu,
gammu y postgres,
mensajeria masiva,
multiples telefonos con gammu,
sms,
sms desde php,
wammu
Curl PHP
PHP soporta libcurl, una biblioteca creada por Daniel Stenberg que permite conectarse y comunicarse con diferentes tipos de servidores y diferentes tipos de protocolos. Actualmente, libcurl admite los protocolos http, https, ftp, gopher, telnet, dict, file y ldap. libcurl también admite certificados HTTPS, HTTP, POST, HTTP PUT, subidas mediante FTP (también se puede hacer con la extensión FTP de PHP), subidas basadas en formularios HTTP, proxies, cookies, y autenticación usuario+contraseña.
ver toda la info en http://php.net/manual/es/book.curl.php
ahora vamos a instalar
');
if($inicio){
$cne_datos = substr($cne,$inicio);
$fin = stripos($cne_datos, '
');
$cne_datos = substr($cne_datos,0,$fin+8);
$cne = $cne_datos;
}
else{
$cne = false;
}
}
curl_close($curl);
return $cne;
}
}
y luego en mi action uso este metodo para obtener los datos del CNE de una persona en particular..
# aptitude install php5-curlluego verifique su configuracion de php con un de momento mostrare un codigo que uso en symfony para obtener la info del CNE a partir de una cedula.. luego usteder jugaran con este y otros codigos como quieran.. paso 1 crear una carpeta functions en proy/lib
$ mkdir /var/www/proy/lib/functionsy dentro de eso creo una clase que contendra un metodo para invocar esta funcion proy/lib/functions/functions.class.php
class functions { public static function getDatosCne($ci){ $url="http://www.cne.gov.ve/web/registro_electoral/ce.php?nacionalidad=V&cedula=$ci"; $curl = curl_init(); curl_setopt ($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // almacene en una variable curl_setopt($curl, CURLOPT_HEADER, true); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $cne=''; if(curl_exec($curl) === false){ echo 'Curl error: ' . curl_error($curl); }else { $cne = curl_exec($curl); $inicio = stripos($cne, '
$cne = functions::getDatosCne($persona->getCi());y si necesito algun dato en particular de la informacion que estoy recibiendo simplemente hago un explode de la cadena
foreach($personas as $persona){ $persona_cne = new PersonaCne(); $persona_cne->setPersonaId($persona->getId()); $cne = functions::getDatosCne($persona->getCi()); if($cne){ $persona_cne->setCne($cne); $cne = strip_tags(htmlspecialchars_decode($cne)); $ci = explode('Nombre:',$cne); $n_ci = explode(':',$ci[0]); $persona_cne->setCneCi(trim($n_ci[1])); $nombre = explode('Estado:',$ci[1]); $persona_cne->setCneNombre(trim($nombre[0])); $estado = explode('Municipio:',$nombre[1]); $persona_cne->setCneEstado(trim($estado[0])); $municipio = explode('Parroquia:',$estado[1]); $persona_cne->setCneMunicipio(trim($municipio[0])); $parroquia = explode('Centro:',$municipio[1]); $persona_cne->setCneParroquia(trim($parroquia[0])); $centro = explode('Direccion:',$parroquia[1]); $persona_cne->setCneCentro(trim($centro[0])); } $persona_cne->save(); }y listo..
viernes, 6 de julio de 2012
Activar / Inactivar TouchPad de laptop
Bien hace unos días me canse de que el touchpad de la laptop se moviera al menor toque de mi mano.. yo usualmente trabajo con un mouse alambrico conectado, se me hace mas cómodo.. bien luego de mi frustración buscando como inactivar el dichoso touchpad en ubuntu decidi buscar alguna ayuda en la web y aqui les publico lo que consegui... funciona perfectamente.. solo hay q hacer 2 cosas
primero hay conocer cual es el periferico especifico del touchpad, para eso hay que ejecutar esto:
$ xinput -listbien, esto muestra varias cositas... en mi caso voy a seleccionar FSPPS/2 Sentelic FingerSensingPad, ahora el script (.sh) para apagar / encender el touchpad:
#!/bin/sh clear if zenity --question \ --title="Encendido y apagado del TouchPad" \ --text="Bienvenido al asistente, seleccione ahora entre las dos opciones si desea encender o apagar el touchpad de su portatil. \n \nTIP: Asegurese de tener un raton externo conectado en caso de apagar el touchpad " \ --ok-label="Activar TouchPad" \ --cancel-label="Apagar TouchPad" \ then xinput set-int-prop "FSPPS/2 Sentelic FingerSensingPad" "Device Enabled" 8 1 zenity --info --timeout="2" --text="TouchPad Encendido correctamente" else xinput set-int-prop "FSPPS/2 Sentelic FingerSensingPad" "Device Enabled" 8 0 zenity --info --timeout="2" --text="Touchpad Desactivado correctamente" fi exitejecutas el .sh y listo.. Pd. recuerda darle permisos de ejecución al archivo!
Suscribirse a:
Entradas (Atom)