viernes, 8 de agosto de 2014

Java: Evolución de Java

Listas de novedades y cambios en la evolución de Java.


  • Java 8, JSE 8 (2014):

8)a) Eliminación del espacio de memoria (remove PermGen).
8)b) Compact Profiles (Small VM).
8)c) Expresiones Lambda (Explicaciónprogramación funcional con funciones anónimas y clausuras)
8)d) Métodos predeterminados en interfaces (Default Methods).
8)e) API Stream (java.util.stream) con estilo funcional y paralelismo.
8)f) Nuevo API para Fechas (java.time).
8)g) Nuevo motor Javascript (Nashorn).
8)h) Soporte estándar de codificación Base64.
8)i) Anotaciones en cualquier uso de tipos.
8)j) Java HotSpot más Mission Control.
8)k) Mejoras en JDBC (JDBC 4.2).
Ver novedades: Lista completa de novedades,
Tutorial:  Oracle Java Tutorial.
DownloadJDK 8.

  • Java 7JSE 7 (2011), Dolphin:

7)a) Project coin. (JSR334 Mejoras para la productividad)
7)b) Strings en switchs.
7)c) Gestión automática de recursos en sentencias try-catch.
7)d) Multicatch.
7)e) Rethrow de excepciones más precisos.
7)f) Operador diamante <>.
7)g) Literales binarios.
7)h) Guiones bajos en literales numéricos.
7)i) Fork/Join y utilidades de concurrencia.
7)j) Mejoras en trabajo con archivos y carpetas.

Ver novedades:
Tutorial:
Download:
Java EE: API Java EE7, Java EE7 SpecificationOracle Announces Availability of Java Platform Enterprise Edition 7.

  • Java 6, JSE 6 (2006), Mustang: 
Estuvo en desarrollo bajo la JSR 270.

6)a) Lenguajes de scripting.
6)b) API para el compilador.
6)c) Nuevas anotaciones.
6)d) Nueva API para XML (StaX).

Ver novedades:
Tutorial:
Download:
Java EE: API Java EE6, Java EE6 Specification.

  • Java 5, J2SE 1.5 (2004), Tiger: 
Desarrollado bajo JSR 176.

5)a) Generics.
5)b) Bucle for mejorado.
5)c) Autoboxing/unboxing.
5)d) Enums.
5)e) Varargs.
5)f) Static import.
5)g) Anotaciones.

Ver novedades:
Tutorial: Free Java Certification Training & Java Core Training.
Download:
Java EE: API Java EE5, Java EE5 Specification.

  • Java 4, J2SE 1.4 (2002), Merlin: 
Primer lanzamiento de la plataforma Java desarrollado bajo el Proceso de la Comunidad Java como JSR 59.


  • Java 3, J2SE 1.3 (2000), Kestrel: 

  • Java 2,  J2SE 1.2 (1998), Playground:

  • Java 1 (1996-1997): 



- JDK 1.1 (1997) — modelo de eventos AWT, clases internas (inner classes), JavaBeans, JDBC (Java Database Connectivity), RMI (Remote Method Invocation).

- JDK 1.0 (1996) — Primer lanzamiento.

lunes, 2 de septiembre de 2013

OpenERP: Install version 6.1 on ubuntu for development

Install OpenERP 6.1 on ubuntu for development

¿How to install OpenERP 6.1? ... Guide:

 I) Dependences

 
# Install postgres (database)
#----------------------------------------------------------------------

sudo apt-get install postgresql postgresql-client postgresql-contrib libpq-dev
psql --version

sudo su postgres -c psql
ALTER USER postgres WITH PASSWORD 'postgresdemo';

sudo passwd -d postgres
sudo su postgres -c passwd

sudo su - postgres
createuser --createdb --username postgres --no-createrole --no-superuser --pwprompt openerp
exit



# Install python (base language)
#----------------------------------------------------------------------

sudo apt-get install python python-psycopg2 python-reportlab \
python-egenix-mxdatetime python-tz python-pychart python-mako \
python-pydot python-lxml python-vobject python-yaml python-dateutil \
python-pychart python-webdav

sudo apt-get install python-cherrypy3 python-formencode python-pybabel \
python-simplejson python-pyparsing

sudo apt-get install python-gtk2 python-glade2 \
    python-matplotlib python-egenix-mxdatetime python-hippocanvas

#sudo apt-get install python-xml 
 

II) OpenERP

# Install OPENERP (Application)
#----------------------------------------------------------------------
 
To see more in: http://trescloud.blogspot.com.ar/2012/11/instalacion-de-openerp-6.html
 
The recommended installation is copy all in a folder named /opt/openerp
 
#Create structure folder, user and permission
sudo adduser --system --home=/opt/openerp --group openerp
cd /opt/openerp
sudo mkdir /opt/openerp/download
sudo chmod 755 /opt/openerp/download
sudo chown openerp: /opt/openerp/download
sudo mkdir server
sudo chmod 755 /opt/openerp/server
sudo chown openerp: /opt/openerp/server
sudo mkdir web
sudo chmod 755 /opt/openerp/web
sudo chown openerp: /opt/openerp/web
sudo mkdir client
sudo chmod 755 /opt/openerp/client
sudo chown openerp: /opt/openerp/client
sudo mkdir /var/log/openerp
sudo chown openerp:root /var/log/openerp
 
#Download OpenERP server:
sudo -su openerp 
cd /opt/openerp/download 
wget http://nightly.openerp.com/6.1/releases/openerp-6.1-1.tar.gz
sudo tar -zxvf openerp-6.1-1.tar.gz
sudo mv openerp-6.1-1/* /opt/openerp/server
sudo rm -R openerp-6.1-1
cd /opt/openerp/
sudo chown -R openerp: *
 
wget http://nightly.openerp.com/6.1/releases/openerp-client-6.1-1.tar.gz
sudo tar -zxvf openerp-client-6.1-1.tar.gz
sudo mv openerp-6.1-1/* /opt/openerp/client
sudo rm -R openerp-client-6.1-1 /opt/openerp/
sudo chown -R openerp: *
cd /opt/openerp/
sudo chown -R openerp: *
 
 
 
#Configuration OpenERP server:
sudo cp /opt/openerp/server/doc/openerp-server.conf /etc/openerp-server.conf
sudo chown openerp:root /etc/openerp-server.conf
sudo chmod 640 /etc/openerp-server.conf
sudo cp /opt/openerp/server/openerp-server /etc/init.d/openerp-server
sudo chmod 755 /etc/init.d/openerp-server
sudo chown root: /etc/init.d/openerp-server
sudo cp /opt/openerp/web/doc/openerp-web.cfg /etc/openerp-web.conf
sudo chown openerp:root /etc/openerp-web.conf
sudo chmod 640 /etc/openerp-web.conf
sudo cp /opt/openerp/web/scripts/openerp-web /etc/init.d/openerp-web
sudo chmod 755 /etc/init.d/openerp-web
sudo chown root: /etc/init.d/openerp-web
 
# Launch applications
#----------------------------------------------------------------------

sudo /etc/init.d/postgresql restart
sudo /etc/init.d/openerp-server start
less /var/log/openerp/openerp-server.log

#sudo python /opt/openerp/server/bin/openerp-server.py -r openerp -w postgresdemo --db_host 127.0.0.1
#/opt/openerp/server/bin/openerp-server.py --config=/etc/openerp-server.conf

# See if OpenERP is running
#----------------------------------------------------------------------
ps aux | grep openerp
 

III) Development

# Install Eclipse (Java + IDE)
#----------------------------------------------------------------------
 
# Install Java
 
# If we install Oracle Java 7:

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java7-installer
 
# If we install sun-java6-jdk on ubuntu 12.04 
#
sudo add-apt-repository ppa:flexiondotorg/java
sudo apt-get update
sudo apt-get install sun-java6-jdk sun-java6-plugin 
 
# Select java to use between installed alternatives
sudo update-alternatives --config java


# View version:
~$ java -version
java version "1.6.0_30"
Java(TM) SE Runtime Environment (build 1.6.0_30-b12)
Java HotSpot(TM) Server VM (build 20.5-b03, mixed mode)
 
 
# Install Eclipse (see more...)
Download Eclipse from http://www.eclipse.org/downloads/packages/eclipse-classic-421/junosr1
or http://www.eclipse.org/downloads/ 
 
# Install Plugins
 Install plugins following:
  • JavaScript Development Tools
  • XML Editors and Tools
  • Eclipse Web Developer Tools
  • PyDev for Eclipse
 For install go: Help->Install new software...
 
 
 
Referencias:
https://doc.openerp.com/v6.1/developer/index.html/#book-develop-link
http://www.slideshare.net/openobject/openerp-61-web-framework-tutorial
http://informaticartica.blogspot.com.ar/2012/02/crear-entorno-de-openerp-61.html
http://openerpdev.wordpress.com/2012/01/31/minimal-openerp-module-example/
http://planet.agilebg.com/en/2012/04/how-to-create-an-openerp-module-the-easy-way/
http://www.slideshare.net/openobject/openerp-61-web-framework-tutorial
http://trescloud.blogspot.com.ar/2013/02/configurar-eclipse-4.html

martes, 27 de agosto de 2013

Perl: Paso de parámetros por referencia

Paso de parámetros por referencia en Perl

Cuando invocamos una subrutina y le pasamos parámetros en realidad le estamos pasando una lista de datos, que se llama @_ . Cuando pasamos vectores (matrices, arreglos o arrays ) o tablas asociativas ( hashes ) como parámetros, en realidad los estamos introduciendo, elemento por elemento, en @_ . La forma más económica de pasar parámetros a subrutinas es pasarlos por referencia. De esta manera no pasamos los datos en sí, si no la dirección que ocupan en memoria. Así no es necesario enumerar y copiar todos los datos a @_, y evitar los problemas de pasar varios hashes o arreglos, y la subrutina que reciba las referencias puede acceder a los datos en su organización original, ya sean escalares, vectores o tablas asociativas, las tres clases de variables en Perl. Por otro lado el paso por referencia permite modificar de forma permanente, no local, los datos pasados como argumento.

1) Ejemplo de paso por referencia

#
# Ejemplo de paso de parámetros por referencia en Perl:
# ¿Como pasar parámetros por referencia y modificar los valores?
# How to pass parameters by reference in perl, modify the values​​?
#This is perl 5, version 14, subversion 2 (v5.14.2)
#!/usr/bin/perl

#use strict;
#use warnings;

my $param = "algo";
my @vector1 = (1,2,3);
function_with_params(\$param, \@vector1);
print "\n";
print $param;
print "\n";
print $vector1[0];
print "\n";

sub function_with_params{
    my ($arg1, $arg2) = @_;
    ${$arg1} = "changed...";
    @{$arg2}[0]=33;    #vector1
    return;
    }

2) Ejemplo de paso por referencia de un array.

#!/usr/bin/perl
use strict;
use warnings;

print "Ejemplo perl de paso por referencia de un array... \n";

my @airlines_travel = ("a","b","b","c","k");
my $arrayRef = \@airlines_travel; #referencia al array
my $string = "b";

print "Count: " . howManyTimesIsString($string, $arrayRef) . "\n";

# Cuenta cuantas veces esta un string en un array
sub howManyTimesIsString {
 my ($string, $arrayRef) = @_;
 my $count = 0;
 foreach my $item (@{$arrayRef}) {
   if ($string eq $item) {
      $count++;
   }
 }
 return $count;
}

3) POO y paso por referencia.


En perl todos los objetos son una referencia. Es decir, cuando tenes un $obj es una variable scalar que simplemente mantiene la referencia al objeto. Cuando pasamos un objeto como parámetro lo que estamos pasando es su referencia (no es necesario hacer nada extraño para explicitar esto).

También se puede explicitar usando \variableObject y $$variableObject pero no es recomendable usarlo de esta manera. A continuación un ejemplo de esta forma:

#This is perl 5, version 14, subversion 2 (v5.14.2)
#...

sub metodo1{
  my ($self) = @_;

  my $obj = Example->new();
  my $o = $self->metodo2(\$obj);
  print $o->getName();
  return;
}

sub metodo2{
  my ($self, $obj) = @_;
#...
  print $$obj->encodeHTMLtoUTF8($str);
  $$obj->setName("modificado");
  return $$obj;
}



Referencias:
-Paso de parámetros por valor y por referencia (Perl).
-Blog: Parametros por referencia en perl.




lunes, 29 de abril de 2013

Perl: Read a Table from database using DBI

¿How to read a Table from database using DBI? 

#!/usr/bin/perl -w

use strict;
use warnings;
use DBI;

use constant DATABASE => "mydatabase";
use constant HOSTNAME => "myhostname";
use constant USERNAME => "user";
use constant PASSWORD => "123";

my $dbh = db_connect();

print "\nRead MyTable table : \n";

my $rows = read_table($dbh);
my $affected_rows = print_table($dbh, $rows);
print "Affected rows: $affected_rows: \n";

#
sub read_table {
    my $dbh = shift;

    my $sql1 = qq(
        SELECT * FROM MyTable

    );
    my $sth1 = $dbh->prepare_cached( $sql1 );
    $sth1->execute();
    my $sql_return = $sth1->fetchall_arrayref( {} );
       
    return $sql_return;
}

#
sub print_table {
    my $dbh = shift;
    my $rows = shift;

    foreach my $row (@$rows) {       
          print "$row->{
columnName_01}\n";
          print "$row->{columnName_02}\n";  
        }

  my $arraySize = scalar (@$rows);
  return $arraySize;
   
}
   
sub db_connect {
   
    my $db   = DATABASE;
    my $host = HOSTNAME;
    my $user = USERNAME;
    my $pass = PASSWORD;

    my $dbh = DBI->connect(
        join(':', 'dbi:mysql', $db, $host), $user, $pass,
        { AutoCommit => 1, PrintError => 1, RaiseError => 1 },
    );

    return $dbh;
}

viernes, 26 de abril de 2013

Perl: Modules installing on Ubuntu system

¿What Perl Modules Already Installed On My System?
¿Qué módulos tengo instalado en el sistema?

How to list installed perl module? List installed perl module:

$ instmodsh

Available commands are:
   l            - List all installed modules
   m <module>   - Select a module
   q            - Quit the program
cmd? l
Installed modules are:
   Class::Load
   Data::OptList
   Dist::CheckConflicts
   ExtUtils::MakeMaker
   List::MoreUtils
   MRO::Compat
   Module::Implementation
   Module::Runtime
   Mojolicious
   Package::DeprecationManager
   Package::Stash
   Package::Stash::XS
   Params::Util
   Perl
   Perl::Metrics::Simple
   String::Util
   Sub::Exporter
   Sub::Install
   Sub::Uplevel
   Test::Deep
   Test::Exception
   Test::Fatal
   Test::NoWarnings
   Test::Requires
   Test::Tester
   Try::Tiny
   local::lib


Other way:
 
perl -e 'while (<@INC>) { while (<$_/*.pm>) { print "$_\n"; } }'
 
Show all perl paths:
 
perl -E 'say join "\n", @INC'
 
Find a file: 
sudo find / -type f -name 'Example.pm'
 
 
¿What Know if a Perl Modules Already Installed On My System?

perl -MNameModule -e 1
If not installed throw error "Can' locate module....."

For example: 
perl -MException::Base -e 1
perl -MLog::Log4perl -e 1

Install using CPAN:


For example:

sudo perl -MCPAN -e 'install IO::EventMux'
sudo perl -MCPAN -e 'install Log::Log4perl'
sudo perl -MCPAN -e 'install Test::Class'
sudo perl -MCPAN -e 'install Log::Dispatch'
sudo perl -MCPAN -e 'install Params::Validate'
sudo perl -MCPAN -e 'install DBD::mysql'
sudo perl -MCPAN -e 'install JSON::XS'
sudo perl -MCPAN -e 'install Cache::Memcached'  

sudo perl -MCPAN -e 'install Thread'    
sudo perl -MCPAN -e 'install Thread::Pool'

sudo perl -MCPAN -e 'install Exception::Base'
sudo perl -MCPAN -e 'install XML::LibXML' 

Install using System:

For example:

sudo apt-get install libtest-class-perl
sudo apt-get install liblog-dispatch-perl
sudo apt-get install libparams-validate-perl
sudo apt-get install libdbd-mysql-perl
sudo apt-get install libjson-xs-perl
sudo apt-get install libjson-perl
sudo apt-get install libjson-any-perl
sudo apt-get install libcache-memcached-perl

sudo apt-get install libnumber-format-perl
sudo apt-get install libtest-log-dispatch-perl
sudo apt-get install libconfig-inifiles-perl
sudo apt-get install libwww-perl
sudo apt-get install libdigest-md5-perl
sudo apt-get install libproc-daemon-perl
sudo apt-get install libxml-simple-perl

sudo apt-get install libxml-libxml-perl

¿Cómo saber si tenemos un módulo instalado?

Si Module::Util está instalado, use pm_which:
:~$ pm_which EL::Modulo

Use perldoc, pues para saber si un módulo está instalado y donde se encuentra (supuesto que el módulo contiene documentación en su interior) use perldoc -l:
:~$ perldoc -l EL::Modulo

También puede comprobar la existencia cargando el módulo:
:~$ perl -MEL::Modulo -e 1

Instale pmtools y use el comando pminst (Se puede obtener en http://search.cpan.org/~mlfisher/pmtools/.)

Sigue un ejemplo de uso:
pp2@nereida:~/src/perl/IPC-PerlSSH/lib/IPC$ pmdesc EL::Modulo # descripción

pp2@nereida:~/src/perl/coro$ pminst odulo
EL::Modulo
pp2@nereida:~/src/perl/IPC-PerlSSH/lib/IPC$ pmload EL::Modulo  # Que modulos carga

Módulos en el Núcleo de Perl:
:~> perl -MModule::CoreList -e \
   'print Module::CoreList->first_release("Data::Dumper")."\n"'


Referencias:-Saber que Módulos están Instalados: http://www.davioth.com/lhp/node188.html




martes, 23 de abril de 2013

Android: Adapter personalizado


Un Adapter es una extensión de la clase "android.widget.BaseAdapter" que intermedia entre las clases backend de datos y la frontend vista (LayoutInflater). Por ejemplo:

Object <--- ObjectAdapter --->  ObjectLayoutInflater

LayoutInflater es la clase que convierte xmls de vista frontend  a objetos.




Referencia:
-Como crear un adapter en Android.
http://www.nosolounix.com/2010/12/ejecutar-desde-eclipse-en-movil-android.html