martes, 24 de febrero de 2015

Perl: Constants

Constantes en Perl y Moose


Ejemplo de como usar constantes en Perl usando Moose


{
    package Parent;
    use Moose;
    use namespace::autoclean;

    use constant MY_CONSTANT => 'CONSTANT';

    use constant {
        MY_CONSTANT => 'CONSTANT'
        NO_LEVEL => 0,
        MY_LEVEL => 1,
    };

    sub printMyConstant {
        my $self = shift;
        print &MY_CONSTANT;
    }


    __PACKAGE__->meta->make_immutable;
};

{
    package Child;
    use Moose;
    use namespace::autoclean;

    extends 'Parent';

    sub printMyLevel {
        my $self = shift;
        my $class = ref $self;

        print $class->MY_LEVEL;
        print &Parent::MY_CONSTANT;
    }
    __PACKAGE__->meta->make_immutable;
}

package main;

my $child = Child->new;
$child->printMyLevel;



miércoles, 18 de febrero de 2015

Perl: Using Maybe attribute not die on undef

Perl: Moose, Using Maybe attribute not die on undef


Problema


Cuando definimos atributos en Moose con constraint en tiempo de ejecución podemos encontrarnos con el siguiente tipo de excepciones: "Attribute (AttributeName) does not pass the type constraint because: Validation failed for 'Str' with value undef"
Para evitarlo podemos usar "Maybe". A continuación un ejemplo:

Class to Test


package ClassWithMaybe;

use Moose;

has 'atributoSinConstraints' => ( 
                is => 'rw', 
                isa => 'Maybe[Str]', 
                default => '',
                reader => 'getAtributoSinConstraints',
                writer => 'setAtributoSinConstraints'
                ); # will NOT die on undef

has 'atributoConConstraints' => (
                is => 'rw', 
                isa => 'Str',
                reader => 'getAtributoConConstraints',
                writer => 'setAtributoConConstraints'
                ); # will die on undef (esto puede generar la exception mostrada anteriormente)
    
sub BUILD {
    my $self = shift;
    $self->setAtributoSinConstraints('') unless defined $self->getAtributoSinConstraints;
}

no Moose; __PACKAGE__->meta->make_immutable;

TEST


package ClassWithMaybeTest;

use Moose;
use Test::More;
use Test::Exception; #cpanm Test::Exception
use ClassWithMaybe;

throws_ok { ClassWithMaybe->new( atributoConConstraints => undef ) }
    qr/Validation failed for 'Str' with value undef/; # will die on undef
    
lives_ok  { ClassWithMaybe->new( atributoConConstraints => "with data" ) } 
    'atributoConConstraints with data ok';

lives_ok  { ClassWithMaybe->new( atributoSinConstraints => undef ) } 
    'atributoSinConstraints supplied as undef'; # will not die on undef

my $classWithMaybe = ClassWithMaybe->new( atributoSinConstraints => undef , atributoConConstraints => "with data");

is $classWithMaybe->getAtributoSinConstraints, '', "atributoSinConstraints is ''";

$classWithMaybe = ClassWithMaybe->new();
$classWithMaybe->setAtributoSinConstraints(undef);# will not die on undef

is $classWithMaybe->getAtributoSinConstraints, undef, "atributoSinConstraints is undef";

done_testing;

Run test


perl ClassWithMaybeTest.t
ok 1 - threw Regexp ((?^:Validation failed for 'Str' with value undef))
ok 2 - atributoConConstraints with data ok
ok 3 - atributoSinConstraints supplied as undef
ok 4 - atributoSinConstraints is ''
ok 5 - atributoSinConstraints is undef
1..5


References:




jueves, 12 de febrero de 2015

Perl: How to Debug in Perl

How to Debug in Perl?

Perl Debugger

Si ejecutamos perl con la opción -d se ejecuta en modo debugger.


Código para hacer debug:

#!/usr/bin/perl
# example.pl
my $name = "Daro";
my $email = "daro@daro.com.ar";
$DB::single = 1; #breakpoint
if (!defined($email)){
print "Mail es undef. \n";
}else{
print "Mail es defined. \n";
}
$DB::single = 1; #breakpoint
if (!defined($name)){
print "Name es undef. \n";
}else{
print "Name es defined. \n";
}
#end script example.pl

Ejecutar por consola:

perl -d example.pl 

Loading DB routines from perl5db.pl version 1.33
Editor support available.

Enter h or `h h' for help, or `man perldebug' for more help.

main::(ej.pl:5): my $name = "Daro";
  DB<1> c
main::(ej.pl:8): if (!defined($email)){
  DB<1> c
Mail es defined. 
main::(ej.pl:14): if (!defined($name)){
  DB<1> c
Name es defined. 
Debugged program terminated.  Use q to quit or R to restart,
  use o inhibit_exit to avoid stopping after program termination,
  h q, h R or h o to get additional info.  

  DB<1> h
List/search source lines:               Control script execution:
  l [ln|sub]  List source code            T           Stack trace
  - or .      List previous/current line  s [expr]    Single step [in expr]
  v [line]    View around line            n [expr]    Next, steps over subs
  f filename  View source in file         <CR/Enter>  Repeat last n or s
  /pattern/ ?patt?   Search forw/backw    r           Return from subroutine
  M           Show module versions        c [ln|sub]  Continue until position
Debugger controls:                        L           List break/watch/actions
  o [...]     Set debugger options        t [expr]    Toggle trace [trace expr]
  <[<]|{[{]|>[>] [cmd] Do pre/post-prompt b [ln|event|sub] [cnd] Set breakpoint
  ! [N|pat]   Redo a previous command     B ln|*      Delete a/all breakpoints
  H [-num]    Display last num commands   a [ln] cmd  Do cmd before line
  = [a val]   Define/list an alias        A ln|*      Delete a/all actions
  h [db_cmd]  Get help on command         w expr      Add a watch expression
  h h         Complete help page          W expr|*    Delete a/all watch exprs
  |[|]db_cmd  Send output to pager        ![!] syscmd Run cmd in a subprocess
  q or ^D     Quit                        R           Attempt a restart
Data Examination:     expr     Execute perl code, also see: s,n,t expr
  x|m expr       Evals expr in list context, dumps the result or lists methods.
  p expr         Print expression (uses script's current package).
  S [[!]pat]     List subroutine names [not] matching pattern
  V [Pk [Vars]]  List Variables in Package.  Vars can be ~pattern or !pattern.
  X [Vars]       Same as "V current_package [Vars]".  i class inheritance tree.
  y [n [Vars]]   List lexicals in higher scope <n>.  Vars same as V.
  e     Display thread id     E Display all thread ids.
For more help, type h cmd_letter, or run man perldebug for all docs.
  
DB<1> q




References:
http://perldoc.perl.org/perldebug.html

martes, 6 de enero de 2015

Ubuntu: Converting video & audio files in Ubuntu



Converting video files using ffmpeg in Ubuntu

Converting .3GA to AVI:

ffmpeg -i in_file.3ga out_file.avi

Converting video files using avconv in Ubuntu

Install libav-tools:

sudo apt-get install libav-tools

Converting video .OGV to MP4:

avconv -i in_file.ogv output_file.mp4

(Note:
RecordMyDesktop records in  .OGV format
Some Celphone records in  .3GA format)

martes, 30 de diciembre de 2014

Linux: Buscar archivos por consola

¿Cómo buscar archivos en linux desde consola de comandos?


Listo un conjuto de comandos útiles para realizar búsquedas en linux (Ubuntu):

  • Todos los pdf que hay en el directorio folder en forma recursiva:


find .  -iname "*.pdf"

(Nota: Se puede reemplazar el punto ‘.’ por el directorio donde uno desea buscar ‘./folder/’. Por ejemplo: find ./folder/  -iname "*.pdf")

  • Todos los archivos desde el directorio actual donde contenga un texto:


find . -type f -exec grep -H 'text-to-find-here' {} \;

(Nota: Esta instrucción ejecutaría en todos los ficheros la comparación con el patrón, esto lo hace a través de la opción ‘-exec’ acompañada de la instrucción a ejecutar ‘grep’, los corchetes ‘{}’ se refieren a los ficheros que la instrucción ‘find’ ha encontrado y la barra invertida ‘\;’ indica el final de la instrucción.)

Por ejemplo, cambiar los permisos de acceso a los directorios desde donde estamos ubicados:
find . -type d -­exec sudo chmod 755 '{}' \;

O cambiar los permisos de acceso a los ficheros desde donde estamos ubicados:
find . ­-type f ­-exec sudo chmod 644 '{}' \;

  • Todos los archivos menos los acabados en .pdf o .jpg.


find . ! -iname “*.pdf” ! -name “*.jpg”

  • Todos los jpg que no tengan en su nombre la letra “k”:


find . ! -iname “*k*” -iname “*.jpg”

  • Todos los enlaces simbólicos:

find . -type l




martes, 16 de diciembre de 2014

Ubuntu: Conectarse por SSH-FTP a servidor remoto


(How To Use SFTP to Securely Transfer Files with a Remote Server)

Acceso por el explorador de directorios (Nautilus):


Entramos a consola de comandos y tipeamos:
sudo nautilus

Seleccionar opción de menu:
GO > Location
Y agregamos:

Y despues adicionarlo como bookmarks:  Bookmarks>Add bookmarks

Solo por línea de comandos


sftp username@remote_hostname_or_IP


Referencia:

jueves, 13 de noviembre de 2014

Java: Hibernate 4 - Session Filter with Spring MVC

Configuracion de Filtro de Session de Hibernate en Spring


Cuando configuramos Hibernate en Spring (Configuring OpenSessionInViewFilter with Hibernate 4 and Spring 4 -Spring MVC-.) necesitamos configurar un filtro de SessionFactory para no encontrarnos con el problema de LazyInitializationException.


Problema:


Error reading org.hibernate.LazyInitializationException: could not initialize proxy - no Session
Estado HTTP 500 - javax.el.ELException: Error reading 'atributoField' en el tipo MY.CLASS.OBJECT_INSTANCE_$$_jvst41b_2
type Informe de Excepción
mensaje javax.el.ELException: Error reading 'atributoField' en el tipo MY.CLASS.OBJECT_INSTANCE_$$_jvst41b_2
descripción El servidor encontró un error interno que hizo que no pudiera rellenar este requerimiento.
excepción
org.apache.jasper.JasperException: javax.el.ELException: Error reading 'atributoField' en el tipo MY.CLASS.OBJECT_INSTANCE_$$_jvst41b_2
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:549)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:470)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:209)
org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:267)
org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1217)
org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1005)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:952)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852)
javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
causa raíz

javax.el.ELException: Error reading 'atributoField' en el tipo MY.CLASS.OBJECT_INSTANCE_$$_jvst41b_2
javax.el.BeanELResolver.getValue(BeanELResolver.java:110)
org.apache.jasper.el.JasperELResolver.getValue(JasperELResolver.java:104)
org.apache.el.parser.AstValue.getValue(AstValue.java:183)
org.apache.el.parser.AstEmpty.getValue(AstEmpty.java:46)
org.apache.el.parser.AstNot.getValue(AstNot.java:43)
org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:184)
org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:967)
org.apache.jsp.WEB_002dINF.view.person_jsp._jspx_meth_c_005fif_005f0(person_jsp.java:256)
org.apache.jsp.WEB_002dINF.view.person_jsp._jspx_meth_form_005fform_005f0(person_jsp.java:184)
org.apache.jsp.WEB_002dINF.view.person_jsp._jspService(person_jsp.java:114)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:209)
org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:267)
org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1217)
org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1005)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:952)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852)
javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
causa raíz

org.hibernate.LazyInitializationException: could not initialize proxy - no Session
org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:165)
org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:286)
org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:185)
MY.CLASS.OBJECT_INSTANCE_$$_jvst41b_2.getatributoField(Person_$$_jvst41b_2.java)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:606)
javax.el.BeanELResolver.getValue(BeanELResolver.java:99)
org.apache.jasper.el.JasperELResolver.getValue(JasperELResolver.java:104)
org.apache.el.parser.AstValue.getValue(AstValue.java:183)
org.apache.el.parser.AstEmpty.getValue(AstEmpty.java:46)
org.apache.el.parser.AstNot.getValue(AstNot.java:43)
org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:184)
org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:967)
org.apache.jsp.WEB_002dINF.view.person_jsp._jspx_meth_c_005fif_005f0(person_jsp.java:256)
org.apache.jsp.WEB_002dINF.view.person_jsp._jspx_meth_form_005fform_005f0(person_jsp.java:184)
org.apache.jsp.WEB_002dINF.view.person_jsp._jspService(person_jsp.java:114)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:209)
org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:267)
org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1217)
org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1005)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:952)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852)
javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
nota La traza completa de la causa de este error se encuentra en los archivos de diario de Apache Tomcat/7.0.56.


Solución:

La solución es agregar una definición de un filtro en el archivo de configuración web.xml como sigue:


<!-- Spring Open Session In View Pattern filter -->
<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
<init-param>
<param-name>singleSession</param-name>
<param-value>true</param-value>
</init-param>
                <!-- Hibernate 4 SessionFactory Bean (reference) -->
<init-param>
<param-name>sessionFactoryBeanName</param-name>
<param-value>hibernate4AnnotatedSessionFactory</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

 Y tener configurado una definición de Hibernate 4 SessionFactory Bean en el archivo de configuración application-config.xml (o applicationContext.xml) como sigue:

<!-- Hibernate 4 SessionFactory Bean (definition) -->
<beans:bean id="hibernate4AnnotatedSessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<beans:property name="dataSource" ref="dataSource" />
<beans:property name="annotatedClasses">
<beans:list>
<beans:value>com.daro.rental.housing.model.PersonTable</beans:value>
<beans:value>com.daro.rental.housing.model.HouseTable</beans:value>
</beans:list>
</beans:property>
<beans:property name="hibernateProperties">
<beans:props>
<beans:prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect
</beans:prop>
<beans:prop key="hibernate.show_sql">true</beans:prop>
</beans:props>
</beans:property>
</beans:bean>


Referencias:

-Configurar el filtro de SessionFactory: http://cchweblog.wordpress.com/2009/10/10/using-opensessioninviewfilter-in-spring-web-application/
-Crear mi propio filtro de SessionFactory: http://programacionspring.blogspot.com.ar/2012/01/configuracion-hibernate-en-spring.html