miércoles, diciembre 24, 2014

Permisos en Phonegap

 Por defecto, PhoneGap viene con todos los permisos Activados. Para evitar que cuando alguien descargue nuestra aplicación vea que necesitamos tantos permisos que la aplicación verdaderamente no necesita, debemos de agregar lo siguiente al config.xml.

<preference name="permissions" value="none" />

Luego agregamos los plugins que necesitamos, compilamos y listo PhoneGap Build agrega los permisos necesarios de manera automática.

Si no, lo podemos agregrar manual:

<feature name="http://api.phonegap.com/1.0/network" />
<feature name="http://api.phonegap.com/1.0/camera" />
<feature name="http://api.phonegap.com/1.0/notification" />
<feature name="http://api.phonegap.com/1.0/geolocation" />
<feature name="http://api.phonegap.com/1.0/media" />
<feature name="http://api.phonegap.com/1.0/contacts" />
<feature name="http://api.phonegap.com/1.0/file" />
<feature name="http://api.phonegap.com/1.0/battery" />
<feature name="http://api.phonegap.com/1.0/device" />

Ayudas:
http://docs.build.phonegap.com/en_US/2.9.0/configuring_features.md.html#Features
http://docs.build.phonegap.com/en_US/configuring_features.md.html#Features




domingo, diciembre 21, 2014

Crear Tablas temporales con MySQL

Es un recurso muy útil en algunas situaciones en las que requerimos procesar información de las tablas y poderlas modificar sin necesidad de alterar la original (claro siempre podemos adoptar otras técnicas), y con la principal característica de que solo están disponibles mientras dure abierta la conexión, ya que se eliminan inmediatamente cuando cerramos la conexión. Las tablas temporales pueden eliminarse de forma explicita ( utilizando el comando DELETE) pero la idea implicita es que no si nos “olvidamos” de hacerlo MySQL lo hace por nosotros.
Se puede crear una tabla temporal de varias maneras:

  • Definiendo de forma explicita sus columnas

CREATE TEMPORARY TABLE nombreTablaTemporal (...definicion de columnas...);

  • Partiendo de una existente (clonación)

CREATE TEMPORARY TABLE nombreTablaTemporal LIKE  tablaOriginal;

  • En “vuelo” a partir de un ResultSet
1
CREATE TEMPORARY TABLE nombreTablaTemporal SELECT ... ;

Las tablas temporales están enlazadas con una conexión especifica, por lo que varios clientes pueden crear tablas temporales con el mismo nombre sin que se interfieran unas con otras. Otra propiedad de estas tablas es que pueden tener el nombre de una tabla permanente, en este caso la tabla temporal “esconde” la permanente mientras la primera exista, facilitando el uso de copias de tablas permanentes sin afectar a la original, si llegásemos a eliminar la tabla temporal de forma explicita (sentencia DROP Table) y esta “esconde” a la permentente, aún conservariamos la permanente.

A tener en cuenta

  • Si quieres reutilizar una tabla temporal que previamente has creado, debes eliminarla explicitamente primero, ya que si intentas crear dicha tabla temporal se generará un error.
  • Debes tener cuidado cuando trabajas con tablas temporales que “esconden” a tablas permanentes, ya que una mala gestión de errores de desconexión acarreará la posibilidad de perder la tabla  temporal y seguir trabajando con la permanente.

Tomado de:  http://www.elclubdelprogramador.com

sábado, noviembre 15, 2014

Android Asset Studio: Generador de Iconos online Android




Bueno aquí les dejo un link para las personas que necesiten adaptar o redimensionar sus iconos para aplicaciones Android a diferentes resoluciones o tamaños de pantalla de manera rápida y online.

Recurso:
http://romannurik.github.io/AndroidAssetStudio/index.html

Sublime Text y Emmet - Abreviando código HTML5




Hoy publico un video de como aprender algo de sublime text, el cual es un excelente editor de código con muchísimas características.



En este video de DevCode-la nos enseña a usar Sublime Text y Emmet de una manera práctica en 20 minutos.

Recursos

Sublime Text: http://www.sublimetext.com/
Emmet: http://emmet.io/




lunes, noviembre 10, 2014

Integrando Brackets and Phone Gap Build - Mac






Este es un video de Adobe por Christian Cantrell Engineering Manager and Evangelist.

El video muestra como cargar una aplicación desde Brackets al PhoneGap Build, asi como integrar un proyecto ya existente. (Video en Ingles)

Brackets una alternativa distinta a Dreamweaver y opensource.

sábado, octubre 25, 2014

Solución Error [Android SDK Home] Titanium Appcelerator

Error: 

[Android SDK Home] No Android SDKs were found under the specified SDK location.

Hola aqui les dejo la solución al error que aparece en Titanium Appcelerator que no reconoce las SDK de Android en Windows.

Lo que hay que hacer es eliminar el fichero "genymotion.js" del directorio "C:\Users\TuUsuario\AppData\Roaming\Titanium\mobilesdk\win32\3.4.0.GA\node_modules\titanium-sdk\lib\emulators".
De esta manera reconoce las las SDK de Android Titanium 3.4.0. 
Otros comentarios proponen borrar el archivo C:/Users/<MyName>/.titanium/config.json pero a mi no me funcionó.
Link del Artículo original:

lunes, mayo 19, 2014

Libreria Google Chart API para Codeigniter gCharts




Aqui les dejo una libreria que amplía la flexibilidad y el poder de gráficos de Google en CodeIgniter usando PHP5.

Enlace de descarga:
  • https://github.com/kevinkhill/Codeigniter-gCharts
Enlace de configuración:
  • http://kevinkhill.github.io/Codeigniter-gCharts/

Libreria o paquete Laravel LavaCharts - Google Chart API para PHP5.3+


Crea gráficas con Google Chart  fácil con Laravel, con ayuda de la librería LavaCharts.

Aquí dejo enlace para descargar y Configurar:
  • https://github.com/kevinkhill/LavaCharts
Algunos ejemplos:
  • http://kevinkhill.github.io/LavaCharts/examples.html

lunes, abril 28, 2014

Mysql - Ignorar - Actualizar - Remplazar Valores Duplicados


Casi siempre al intentar ingresar registros duplicados, tenemos problemas con los diferentes errores que nos arroja el sistema por razones obvias y nos detiene todo el proceso de inserción de datos.
Para prevenir esto podemos utilizar lo siguiente, de acuerdo a cada situación:

IGNORE: Ignora el registro a insertar si ya existe.

INSERT IGNORE
  INTO tabla
    (id, valor, ...)
  VALUES
    (25, 'valor, ...) 

REPLACE: "funciona exactamente como INSERT, excepto que si un valor de la tabla tiene el mismo valor que un nuevo registro para un índice PRIMARY KEY o UNIQUE , el antiguo registro se borra antes de insertar el nuevo.
Tenga en cuenta que a menos que la tabla tenga un índice PRIMARY KEY, o UNIQUE usar un comando REPLACE no tiene sentido. Es equivalente a INSERT, ya que no hay índice para determinar si un nuevo registro duplica otro".  

Ejemplo:
REPLACE INTO table_name(column_name1,column_name2,…)
VALUES(value1,value2,…)

En este caso en la base de datos en la tabla offices este ejemplo insertará el registro como nuevo:

REPLACE INTO offices(officecode,city)
VALUES(8,'San Jose')

Si volvemos a utilizar replace, en la tabla offices como el ejemplo siguiente, San José será reemplazado por San Mateo

REPLACE INTO offices(officecode,city)
VALUES(8,'San Mateo')
 
DUPLICATE KEY UPDATE: Actualiza la fila existente por la nueva a insertar, aunque tenga llaves.

Supongamos que insertamos el siguiente dato:

INSERT INTO
`library_lending`
(`user_name`, `date`, `book_name`)
VALUES ('buddy', '2013-12-05', 'The-Hound-of-the-Baskervilles');

Ahora dos dias despues intentamos:

INSERT INTO
`library_lending`
(`user_name`,`date`,`book_name`)
VALUES
('buddy','2013-12-05','A-Study-in-Scarlet');

Y nos aparece el error:
Error Code: 1062. Duplicate entry 'buddy-2013-12-05' for key 'user_date'

Aqui en esta ocación colocamos en acción el query: 

INSERT INTO
`library_lending`
(`user_name`,`date`,`book_name`)
VALUES
('buddy','2013-12-05','A-Study-in-Scarlet')
ON DUPLICATE KEY UPDATE `book_name` = 'A-Study-in-Scarlet';

Ya solo quedas que crees tu script en el lenguaje de tu preferencia para automatizar los procesos.

Webs Consultadas: 
http://www.mysqltutorial.org/mysql-replace.aspx
http://techdo.me/today-i-learned-insert-and-update-rows-with-mysql-on-duplicate-key-update/
https://dev.mysql.com/doc/refman/5.0/es/replace.html




sábado, abril 19, 2014

Laravel: Error Class 'Monolog\Logger' not found



Para solucionar este error hacemos lo siguiente:
  1. Cambiar en composer.json (directorio del proyecto) la linea"minimum-stability": "dev" por "minimum-stability": "stable".
  2. Ejecutar composer self-update.
  3. Ejecutar nuevamente composer update.
Eso es todo.

miércoles, febrero 05, 2014

Permitir acceso remoto root MySQL (Ubuntu )

Accedemos al archivo my.cnf:

sudo nano /etc/mysql/my.cnf

Comentar la linea donde dice:
#bind­address = 127.0.0.1

O podemos agregar:

bind­address = 0.0.0.0

Luego acceder a Mysql, escribir desde consola:

mysql ­u root ­p

Desde dentro de mySQL ejecutar:

GRANT ALL ON *.* TO root@numero_ip_remota IDENTIFIED BY 'password_del_usuario';

Salir de mysql.

Reiniciar el server mySQL:

sudo /etc/init.d/mysql restart

Recuperar contraseña root Mysql (Ubuntu server)

Para Recuperar la contraseña, debemos seguir los siguientes pasos:

1. Detener el servicio de mysql.
sudo service mysql stop

2. Iniciar mysql en modo seguro

sudo mysqld —skip-grant-tables (no cerrar la ventana)

Iniciar mysql

3. Abrir una ventana nueva y entrar a mysql

mysql

4. Cambiar a la base de datos mysql

use mysql;

5. Actualizar la contraseña del usuario.

UPDATE user SET Password=PASSWORD(‘contraseña’) WHERE user = ‘root’;

6. Reiniciar permisos en la base de datos

FLUSH PRIVILEGES;

7. Reiniciar el servicio y comprobar que funciona

(Fuente: forosdelweb.com)

jueves, enero 23, 2014

Ignorar Valores duplicados en MySql - (php)


Algunas veces necesitamos insertar valores a una base de datos y estos pueden estar duplicados. Al estar duplicados nuestro script puede detenerse y apara evitar esto podemos usar IGNORE para ignorar el insert que no se pudo insertar:

INSERT IGNORE 
  INTO tabla 
    (id, valor, ...) 
  VALUES 
    (25, 'valor, ...) 
Espero sea de utilidad.

miércoles, enero 22, 2014

Tareas automaticas con Crontab (Cron Jobs) por Consola.


Bueno para crear Tareas Automaticas:

Editando el archivo crontab


Primero, para editar crontab, en el terminal escribes:

sudo crontab -e

Como puedes ver, la entrada típica de crontab cumple con el formato:

[m] [h] [dom] [mon] [dow] [command]

Ahora miramos que significa cada parámetro:

Parámetro  Significado                     Rango

m          minute (minuto)                 0-59
h          hour (hora)                     0-23
dom        day of month (día del mes)      1-31
mon        month (mes)                     1-12
dow        day of week (día de la semana)  0-6 (0=Domingo)
command    command (comando)

Si miramos el archivo que se nos abre al ejecutar sudo crontab -e, veremos que nos indica que hay que escribir y en que orden.

Ahora vamos al grano con ejemplos:

Supongamos que queremos ejecutar un script el primero de cada mes, a las 4 de la tarde:

* 16 1 * * /home/usuario/Script/amarok/miscript

Ejecutar un archivo php para correr un envio de correos el primero de cada mes, además de todos los lunes,  a las 4 de la tarde por ejemplo:

* 16 1 * 1 php /home/username/public_html/miphp.php

o Importar una base de datos:

* 16 1 * 1 mysql -u mysql_user -ppassword database_name < backup.sql

Otra manera PHP

* 16 1 * 1 /usr/local/php5/bin/php5 /home/username/public_html/cron.php

SSH

* 16 1 * 1 /bin/sh /home/username/public_html/file.sh

Supongamos que deseas que el script se ejecute cada tres horas el primero de cada mes a partir de las 4 de la tarde:

* "16-23/3" 1 * * php /home/username/public_html/miphp.php

Tambien podemos especificar dos o mas variables separadas por comas (,).

Ejemplos:

Ejecutar un archivo todos los lunes cada media hora

0,30 * * * 1 php /home/username/public_html/miphp.php

O cada 15 minutos sería:

0,15,30,45 * * * * php /home/username/public_html/miphp.php

ó de la manera pasada:

*/15 * * * * php /home/username/public_html/miphp.php

Ahora vemos como pasarle mas de un comando al Cron:

30 21 * * * cd /media/sda7/user/distributions/isos;wget http://mipagina/archivo.zip

Vemos que los parametros estan separados por punto y coma (;).

Para Ver la lista de tareas que hemos programado escribimos:

crontab -l

Para borrar nuestro crontab:

crontab -r

lunes, enero 20, 2014

Configurar Netbeans como IDE de CodeIgniter

Aqui les dejo 3 páginas de cómo configurar Netbeans como IDE de CodeIgniter:

  1. http://www.walterdevos.be/codeigniter-and-netbeans-7-3-autocomplete
  2. http://www.qualityinfosolutions.com/configurar-netbeans-como-ide-de-codeigniter/
  3. https://kenai.com/projects/nbphpci/pages/NBInstall

https://kenai.com/projects/nbphpci/pages/NBInstallero que sea de gran ayuda para aquellos que manejan CodeIgniter.

Instalación Tomcat 7 - Apuntes

Para Instalar escribimos:

sudo apt-get install tomcat7

Combiar los puertos por defecto:


/etc/tomcat7/server.xml

<Connector port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" />
...
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

Cambiar JVM


/etc/default/tomcat7

JAVA_HOME=/usr/lib/jvm/java-6-sun

Agregamos al fichero de arranque del sistema:

$ sudo gedit /usr/share/tomcat7/bin/catalina.sh


Colocar las siguientes líneas:

#!/bin/sh
JAVA_HOME="/ruta/jdk"
JRE_HOME="/ruta/jre"
...

Crear usuarios


/etc/tomcat7/tomcat-users.xml


<role rolename="admin"/>
<user username="tomcat" password="s3cret" roles="admin"/>



Arranque:
sudo /usr/share/tomcat7/bin/startup.sh

Parada:
sudo /usr/share/tomcat7/bin/shutdown.sh

Ahora el servidor Tomcat deberia funcionarles a través del puerto 8080. La ruta local  donde se encuentran las aplicaciones es /var/lib/tomcat7/webapps.

viernes, enero 10, 2014

Desinstalar Programas Ubuntu Server

Para borrar programas desde cero y configuraciones previas:
sudo aptitude remove --purge paquete

Ejemplo borrando nano
sudo aptitude remove --purge nano

Enviar Emails en Ubuntu Server con MSMTP Via Google SMTP

Email sending from Ubuntu Server via Google Apps SMTP with MSMTP

It’s common request to allow daemons like cron or applications to send outgoing email to server’s administrator. Instead of configuring full-blown email server like Postfix you can install lightweight forwarder to real external SMTP server, while keeping binary compatibility with traditional Unix sendmail MTA.

Sendmail compatibility is crucial as it is expected by many many applications. Apart from cron, you may need it for PHP mail() function, Bugzilla mailing feature and many others stuff originating from Linux/Unix universe.

For this tutorial I chose MSMTP delegating to secured Google Apps (or Gmail) SMTP. However instructions apply to any SMTP.

Google Apps / Gmail SMTP ports

On Google Support article you find up-to-date SMTP server address and configuration. Google SMTP can be accessed only over secured TLS which complicates MSTMP setup a little.

Get prepared

First off, install MSTMP on your box:

$ sudo apt-get install msmtp


I always start with discovering remote server certificate with --serverinfo option. Also, for Gmail I changed default port 465 which never worked for me to alternative port 587. Your output would be similar to the following:

$ msmtp --serverinfo --host=smtp.gmail.com --tls=on --tls-certcheck=off --port=587 
SMTP server at smtp.gmail.com (ee-in-f109.1e100.net [173.194.65.109]), port 587: 
    mx.google.com ESMTP y12sm259113106eeb.11 
TLS certificate information: 
    Owner: 
        Common Name: smtp.gmail.com 
        Organization: Google Inc 
        Locality: Mountain View 
        State or Province: California 
        Country: US 
    Issuer: 
        Common Name: Google Internet Authority 
        Organization: Google Inc 
        Country: US 
    Validity: 
        Activation time: St 16. únor 2011, 05:38:09 CET 
        Expiration time: Čt 16. únor 2012, 05:48:09 CET 
    Fingerprints: 
        SHA1: DB:A0:2A:07:00:F9:E3:23:7D:07:E7:52:3C:95:9D:E6:7E:12:54:3F 
        MD5:  02:4C:12:F3:37:1F:0C:C1:EB:10:4B:92:F7:F1:E0:DF 
Capabilities: 
    SIZE 35882577: 
        Maximum message size is 35882577 bytes = 34,22 MiB 
    STARTTLS: 
        Support for TLS encryption via the STARTTLS command 
    AUTH: 
        Supported authentication methods: 
        PLAIN LOGIN

MSMTP configuration

MSMTP can be driven from command line for one-time use, or from user or system-wide configuration file. Configuration file location is listed on --version command.

$ msmtp --version
...
System configuration file name: /etc/msmtprc
User configuration file name: /home/libor/.msmtprc
...


If system configuration file /etc/msmtprc doesn’t exist, create it

$ sudo touch /etc/msmtprc


Copy’n'paste & customize the following configuration for your Gmail/Google Apps account. Below I configured one account and again used alternative port 587. Consult MSMTP man page for more details.

# Default settings that all others account inherit 
defaults 
auth   on 
tls   on 
tls_trust_file /etc/ssl/certs/ca-certificates.crt 

# Logging - uncomment either syslog or logfile, having both uncommented disables logging at all.
#syslog on
# Or to log to log own file
#logfile  /var/log/msmtp.log 

keepbcc  on

# Gmail/Google Apps (configure as may as you want)
account  gmail 
host   smtp.gmail.com 
port   587 
from   your@gmail 
user   your@gmail 
password  secretPassword

# Default account to use 
account default : gmail
 
Because this file contains password in plain text you should cut down its permissions. Let’s make use of group called mail coming from default Ubuntu installation. Any process which is run under mail group member can read this file and therefore actually send email.

$ sudo chgrp mail /etc/msmtprc
$ sudo chmod 660 /etc/msmtprc
 
Add any users who needs to be member of mail group (like your webserver user etc.)

$ sudo adduser www-data mail
$ sudo adduser ... mail

Logging

If not configured differently, MSMTP has logging disabled at all. Hopefully MSMTP can be set to log to separate log file or syslog, but not both (it will stop logging).

In /etc/msmtprc or your user configuration file add/change key
  • logfile /var/log/msmtp.log or whatever file you wish to log into dedicated file OR
  • syslog on to enable syslog logging. Default facility is LOG_USER or specify with syslog .
MSMTP logs to syslog but we want to tweak it to log on startup to /var/log/msmtp.log instead.
If you log to file, it has to exists prior MSMTP can log into it. Therefore create & set permissions appropriately:

$ sudo touch /var/log/msmtp.log
$ sudo chgrp mail /var/log/msmtp.log
$ sudo chmod 660 /var/log/msmtp.log

Setting PHP to MSMTP

Open file /etc/php5/apache2/php.ini and change sendmail_path = "/usr/bin/msmtp -t"

Restart Apache to gain permissions to read MSMTP configuration file and send emails  
sudo service apache2 restart
However MSMTP is binary compatible with sendmail, it doesn’t create sendmail executable in your path. Applications like Bugzilla has hard-wired link to sendmail executable and in current setup you will see error the following error whey you try to send email:

There was an error sending mail from 'bugzilla-daemon@virtage.com' to 

'support@virtage.com': Couldn't find 'sendmail' executable in your PATH 

and $Email::Send::Sendmail::SENDMAIL is not set.

To fix, symlink MSMTP to common places:

$ ln -s /usr/bin/msmtp /usr/sbin/sendmail
$ ln -s /usr/bin/msmtp /usr/bin/sendmail
$ ln -s /usr/bin/msmtp /usr/lib/sendmail

Try out MSMTP

Always use -v option to see all SMTP communication. MSMTP reads message body from stdin (as sendmail do).

Create file called e.g. testmail having the following contents:

To: <username>@domain.com
From: username@gmail.com
Subject: A test

Yadda, yadda, yadda.


And execute cat testmail | msmtp komu@domain.com

Do not merely use “echo ‘Yadda, yadda, yadda.’” instead of “cat test.mail”. This causes at least Gmail and Yahoo to deliver the mail incorrectly. Recipient specified as commandline argument is required however To recipient from file takes precedence over commandline.

You may also review msmtp.log with e.g. tail /var/log/msmtp.log

Error “msmtp: account default not found: no configuration file available”

Can you see this error in console or in logs and mail is not actually sent? Check the permissions of /etc/msmtprc for user running msmtp. This error indicates that a process doesn’t have permission to read configuration file.

Mail command

Many scripts assume existence of mail command. For Ubuntu it could be installed via heirloom-mailx package.

Mail offers commandline interface more suitable for scripting then msmtp. Send email with mail program is easy as

echo 'Hi from mail body' | mail -s 'Some subject' 'some@email'


Este artículo fue tomado de: http://goo.gl/WyXWiy