Kivy, Linux, Programacion, Python, Software Libre

Instalando Kivy en Antergos/Archlinux

Desde hacia ya bastante tiempo que no he  escrito en el blog, ultimamente he estado aprendiendo del mundo python y ahora estoy probando Kivy para desarrollo de apps moviles para android. He encontrado poca documentación en español acerca de Kivy, y quiero contribuir con algunas entradas en las cuales iré compartiendo lo que voy aprendiendo.

Como dice en su pagina web http://kivy.org : Kivy es una librería Python de código abierto para desarrollo rápido de aplicaciones que hacen uso de interfaces de usuario innovadoras, tales como aplicaciones multi-touch, esta librería se puede descargar para diferentes plataformas desde http://kivy.org/#download  y ahi tenemos las instrucciones de instalación para Windows, Mac y algunas distros Gnu/Linux, lamentablemente yo tuve problemas al quererla instalar en Antergos pero he dado con la solución, que detallo a continuación:

1. Instalamos ‘python-pygame’ desde la consola o desde pacmanxg, ya que desde pip2 no se puede instalar

2. Instalamos ‘cython 0.20.2 ‘  ya que con cython 0.21 aun no se puede instalar kivy , con el comando:

  sudo pip2 install 'cython==0.20.2'

3. Finalmente instalamos Kivy con el comando

sudo pip2 install kivy

De esta forma tendremos instalado kivy en nuestro sistema, cabe recalcar que si se usa un entorno virtual se debe omitir el sudo.

Eso es todo, espero que le sirva de ayuda a alguien!!!

 

 

 

 

 

Anuncios
Programacion, Python

Validar cédula y ruc ecuatorianos en python

Después de mucho tiempo que vuelvo a escribir en el blog, en esta ocasión quiero compartir un algoritmo hecho en python para validación de números de cédula y ruc en Ecuador. Para la realización del mismo me he basado en los contenidos de los siguientes blogs:

http://telesjimenez.blogspot.com/2011_05_01_archive.html

http://fabricioflores.wordpress.com/2013/06/03/validar-cedula-ecuatoriana-en-ruby/

A continuación el codigo de validación hecho en python:

def verificar(nro):
    l = len(nro)
    if l == 10 or l == 13: # verificar la longitud correcta
        cp = int(nro[0:2])
        if cp >= 1 and cp <= 22: # verificar codigo de provincia
            tercer_dig = int(nro[2])
            if tercer_dig >= 0 and tercer_dig < 6 : # numeros enter 0 y 6
                if l == 10:
                    return __validar_ced_ruc(nro,0)                       
                elif l == 13:
                    return __validar_ced_ruc(nro,0) and nro[10:13] != '000' # se verifica q los ultimos numeros no sean 000
            elif tercer_dig == 6:
                return __validar_ced_ruc(nro,1) # sociedades publicas
            elif tercer_dig == 9: # si es ruc
                return __validar_ced_ruc(nro,2) # sociedades privadas
            else:
                raise Exception(u'Tercer digito invalido') 
        else:
            raise Exception(u'Codigo de provincia incorrecto') 
    else:
        raise Exception(u'Longitud incorrecta del numero ingresado')

def __validar_ced_ruc(nro,tipo):
    total = 0
    if tipo == 0: # cedula y r.u.c persona natural
        base = 10
        d_ver = int(nro[9])# digito verificador
        multip = (2, 1, 2, 1, 2, 1, 2, 1, 2)
    elif tipo == 1: # r.u.c. publicos
        base = 11
        d_ver = int(nro[8])
        multip = (3, 2, 7, 6, 5, 4, 3, 2 )
    elif tipo == 2: # r.u.c. juridicos y extranjeros sin cedula
        base = 11
        d_ver = int(nro[9])
        multip = (4, 3, 2, 7, 6, 5, 4, 3, 2)
    for i in range(0,len(multip)):
        p = int(nro[i]) * multip[i]
        if tipo == 0:
            total+=p if p < 10 else int(str(p)[0])+int(str(p)[1])
        else:
            total+=p
    mod = total % base
    val = base - mod if mod != 0 else 0
    return val == d_ver

Espero pueda ser de ayuda a alguien 🙂

Java, Linux, Programacion, Software Libre

Pequeño programa Java con resaltado de sintaxis

CapturaCreaSnippets

He estado practicando algo de programación en Java, en esta ocasión he realizado un pequeño programa para creación y guardado de snippets para el lenguaje de programación Java. He hecho esto usando archivos para guardar los Snippets, un archivo de propiedades donde estan las palabras reservadas de Java.

El resaltado de sintaxis y los colores los he puesto yo pero si analizan el codigo se pueden cambiar; no soy tan buen programador pero espero que le sirva a alguien.

Si desean descargar el archivo jar lo pueden hacer desde aqui

El código fuente de la aplicación lo pueden descargar aqui

PD:Si hay alguna correccion por favor haganmelo saber….

Java, Linux, Programacion

Programacion en Java con Geany y Ant en Linux

geanyjavaant

Hace tiempo escribi un minitutorial acerca de como configurar Geany para programar en java, ahora mostraré una forma mas facil de programar en Java con Geany y Ant. Esto lo he probado satisfactoriamente en Linux Mint y en Manjaro, no esta por demas decir que debe estar instalado el JDK en el sistema.

1. Primero instalamos Apache Ant, lo podemos encontrar en los repositorios de ambas distribuciones.

2. Creamos un proyecto en Geany y lo renombramos como queramos. Para crear un proyecto en Geany vamos a Proyecto -> Nuevo.

3. Creamos dentro del proyecto dos directorios uno para el codigo fuente llamado “src” y el otro para las librerias que usara la aplicacion con el nombre “libs”.

4. Ahora creamos el archivo build.xml que será el que nos ayude a hacer las operaciones de compilar, ejecutar y construir el archivo jar. En mi caso lo construi de la siguiente manera:

<?xml version="1.0"?>
<!-- La accion por defecto es ejecutar-->
<project name="CreaSnippets" default="ejecutar" basedir=".">

    <!-- ===============================================  -->
    <!-- Accion inicializar ================  -->
    <!-- ===============================================  -->
    <target name="inicializar"   description="Inicializar variables">
        <echo message="Inicializando" />
        <!-- Ruta del directorio con los ficheros fuente que queremos compilar (*.java) -->
        <property name="fuente" value="src" />
        <!-- Ruta del directorio donde queremos que deje los ficheros compilados (*.class) -->
        <property name="destino" value="class" />
        <!--Para usar las librerias desde compilar y ejecutar-->
        <path id="librerias">
             <fileset dir="libs" includes="**/*.jar"/>
        </path>
        <!--Para el manifest en el jar-->
        <pathconvert property="libs" pathsep=" " refid="librerias">
            <mapper>
                <chainedmapper>
                    <flattenmapper/>
                    <globmapper from="*.jar" to="libs/*.jar"/>
                </chainedmapper>
            </mapper>
        </pathconvert>
    </target>

    <!-- ===============================================  -->
    <!-- Accion limpiar ================  -->
    <!-- ===============================================  -->
    <target name="limpiar"   description="Borrar archivos temporales">
        <echo message="Limpiando el proyecto" />
        <delete dir="class"/>
    </target>

    <!-- ===============================================  -->
    <!-- Accion borrar ================  -->
    <!-- ===============================================  -->
    <target name="borrar"   description="Borrar archivos temporales">
        <echo message="Borrar archivo jar" />
        <delete file="Main.jar" />
    </target>

    <!-- ===============================================  -->
    <!-- Accion compilar (comando javac) ===============  -->
    <!-- ===============================================  -->
    <target name="compilar" depends="inicializar">
        <echo message="Creando el directorio class" />
        <mkdir dir="class"/>
        <!--Copiando archivos no .java al directorio class-->
        <copy todir="${destino}">
                <fileset dir="${fuente}">
                    <include name="**/*.gif"/>
                    <include name="**/*.jpg"/>
                    <include name="**/*.png"/>
                    <include name="**/*.properties"/>
                    <include name="**/*.xml"/>
                    <include name="**/*.sql"/>
                </fileset>
        </copy>
        <echo message="Compilando el codigo" />
        <javac srcdir="${fuente}" destdir="${destino}" includeAntRuntime="false">
            <classpath refid="librerias"></classpath>
        </javac>
    </target>

    <!-- ===============================================  -->
    <!-- Accion ejecutar (comando java) ================  -->
    <!-- ===============================================  -->
    <target name="ejecutar" depends="compilar">
        <echo message="Ejecutando el archivo " />
        <java classname="vista/Main" fork="true">
            <classpath>
                <pathelement path="${destino}"/>
                <path refid="librerias"></path>
            </classpath>
            <!-- Descomentar si queremos pasar un argumento -->
            <!-- <arg value="primer argumento" /> !-->
        </java>
    </target>

    <!-- ===============================================  -->
    <!-- Accion construir (comando jar) ================  -->
    <!-- ===============================================  -->
    <target name="construir" depends="compilar,borrar" >
        <jar destfile="Main.jar">
            <!--** Para incluir todos los elementos de la carpeta destino-->
            <fileset dir="${destino}" includes="**"></fileset>
            <!--Lo que se incluira en el archivo de manifiesto-->
            <manifest>
                <attribute name="Main-Class" value="vista/Main"/>
                <attribute name="Class-Path" value="${libs}"/>
            </manifest>
        </jar>
    </target>
</project>

Este archivo debe ir en el directorio base del proyecto, el cual nos deberia quedar de la siguiente manera:

directorios

5. Finalmente debemos editar los comandos en Geany para Compilar, Ejecutar y Construir el jar. Nos deberia quedar de la siguiente manera:

configuraciones

Hay que tener cuidado de poner “%p” frente a cada comando. Como se puede ver los comandos son simples, la seccion de comandos independientes puede estar vacia.

Ahora si necesitamos Compilar pulsaremos el boton de compilacion de Geany, asi mismo para Ejecutar y Construir.  Dentro del archivo build.xml tambien hay dos opciones más,  la primera “limpiar” que borra la carpeta “class” y su contenido; y la segunda “borrar” que borra el archivo jar creado por el comando “Construir”. Para llamar a estas funciones podemos usar el terminal embebido de Geany, ubicarnos en la carpeta base del proyecto y escribir “ant limpiar” o “ant borrar” según como se necesite. Aqui un ejemplo:

limpiar

Y aqui una captura de un proyecto java que hice en Geany:

Compilando:

compilando

Ejecutando:

Ejecutar

Esta configuracion incluso sirve para cuando hacemos proyectos con JPA ya sea con Hibernate JPA o con Eclipse JPA para ello creamos un directorio llamado META-INF dentro de la carpeta “src”  y creamos o pegamos el archivo persistence.xml. Aqui un modelo:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
  <persistence-unit name="nombreProyectoPU" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <!--Modelo de agregación de clase-->
    <class>paquete.subpaquete.nombreClase</class>
    <properties>
      <!--Poner nombre base de datos-->
      <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/nombreBD?zeroDateTimeBehavior=convertToNull"/>
      <property name="javax.persistence.jdbc.password" value="clave"/>
      <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
      <property name="javax.persistence.jdbc.user" value="usuario"/>
      <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
      <property name="hibernate.hbm2ddl.auto" value="update"/>
    </properties>
  </persistence-unit>
</persistence>

Claro está que se debe poner los jars correspondientes dentro de la carpeta “libs”.

Espero que este pequeño tutorial les sirva, si tienen alguna duda comenten 🙂 …

Java, Linux, Programacion, Software Libre, Ubuntu

Programando en Java con Geany bajo Ubuntu/LinuxMint

Cansado de la pesadez de los IDES para Java y sus continuos cuelgues requería de una buena opción para programar en java . Desde hace tiempo he utilizado Geany para html y  css así que decidí adaptarlo para programar en java ya que tambien es soportado por Geany.

Para empezar creamos un proyecto, para ello vamos a Proyecto->Nuevo y como nombre le ponemos PruebaJava, dentro creamos una estructura  de la siguiente manera:

directorios

Dentro del directorio src/ ira el código fuente o los archivos .java en META-INF/, el archivo manifest necesario para definir la clase principal e incluirlo dentro del jar generado, en el directorio dist/ irá el jar para distribución de la aplicación y en class/ irán todos los archivos compilados de java es decir los archivos .class.

Una vez definida la estructura ahora debemos poner los comandos necesarios en Geany, para compilación, ejecución y construcción del jar de acuerdo a la estructura antes descrita.

Antes crearemos el archivo principal de la aplicación dentro de src, y le asignamos cualquier nombre, este nos servirá para realizar las pruebas. En mi caso el archivo se llamará Main.java y le añadiré lo siguiente:

import javax.swing.*;
public class Main{
    public static void main(String args[])
    {
        JOptionPane.showMessageDialog(null,"Mensaje de Prueba");
    }
}

DEFINIENDO COMANDOS

Luego de crear la clase de prueba vamos al menú Construir, luego a Establecer Comandos de Construcción, se nos abrirá otra ventana donde debemos asignar los comandos para compilar, ejecutar y construir el jar, estos se muestran a continuación:

– Para compilar el archivo y guardar el .class en el directorio class/:

     javac -d ../class %f

– Para ejecutar la aplicación sin crear el .jar

     java -cp ../class %e

Antes de crear el jar debemos crear un archivo manifest. Dentro de META-INF/ creamos un archivo con el nombre MANIFEST.MF y dentro ponemos lo siguiente cuidando de añadir un enter luego de la palabra Main:

     Manifest-Version: 1.0
     Main-Class: Main

– Para crear el .jar debemos pulsar en el segundo botón de la sección Comandos de java, nos aparecerá un cuadro de diálogo donde debemos poner la palabra Construir , una vez hecho esto asignamos el comando siguiente:

     jar cfvm %e.jar ../META-INF/MANIFEST.MF -C ../class/ .

cuidar de no omitir el punto al final del comando. Por defecto con este comando el jar se generaría dentro del directorio src por lo que para que se genere dentro del directorio dist/ en directorio de trabajo ponemos %pdist.

Al final debe quedarnos de esta manera.

comandos

El %d que se muestra frente a los comandos, es para que se situe en el directorio de codigo fuente, es opcional ponerlo.

botones

Ahora para probar la aplicación tenemos los siguientes botones en Geany, el primero será para Compilar, el tercero para Ejecutar la aplicación y el botón de en medio será para Construir el .jar.

Al compilar el archivo en la Ventana de Mensajes en la pestaña Compilador nos debe aparecer algo parecido a esto:

compilacion

si abrimos el directorio class dentro debe haber un archivo Main.class.

Si ejecutamos la aplicación pulsando en el tercer botón nos debe aparecer lo siguiente:

mensaje

Si hasta alli ha salido todo bien al pulsar en el botón Construir aparecerá en la ventana de mensajes, en la pestaña Compilador algo parecido a lo siguiente:

construccion

Esto significa que el .jar se creo correctamente. Al final todo nos deberia quedar asi:

ventana_geany

Bueno eso es todo, ahora si a crear aplicaciones java con geany….

Actualización:

Una forma mas facil de programar en Java con Geany aquí

Java, Programacion

Pequeño editor de texto de prueba en java

Aqui publico un editor de texto que lo hice para recordar un poco programación en java, el objetivo de publicarlo es para quien quiera aprender el uso de algunos métodos o alguien que quiera mejorar el código para cualquier tipo de uso.

Cualquier error en el código sepan disculpar, y si hay algo que modificar o que está mal, ruego me lo hagan saber…

El código lo pueden descargar desde aqui

Espero comentarios … 🙂

Actualizacion:

El código del editor no está completamente bien en breve subiré el código mejorado de este editor.