martes, 31 de marzo de 2015

SVN: How to revert last change on a file?

¿Cómo revertir el último cambio en solo un archivo con SVN?

¿Cuál es la mejor manera de volver a una revisión anterior de un solo archivo en SVN?

svn log -l 2
------------------------------------------------------------------------
r537635 | coco | 2015-03-30 20:58:55 +0000 (Mon, 30 Mar 2015) | 1 line

[Ticket]: Fix bug
------------------------------------------------------------------------
r536022 | coco | 2015-02-20 20:33:51 +0000 (Fri, 20 Feb 2015) | 70 lines

svn merge -c -537635 t/unit/test_01.t

svn merge -c -537635 t/unit/test_01.t
--- Reverse-merging r537635 into 't/unit/test_01.t':
U    t/unit/test_01.t
--- Recording mergeinfo for reverse merge of r537635 into 't/unit/test_01.t':
 G   t/unit/test_01.t
--- Eliding mergeinfo from 't/unit/test_01.t':
 U   t/unit/test_01.t

svn commit -m "[Ticket]: REVERT cambios en unit test"


svn up --ignore-externals
svn log -l 2

------------------------------------------------------------------------
r537657 | coco | 2015-03-31 14:02:24 +0000 (Tue, 31 Mar 2015) | 1 line

[Ticket]: REVERT ultimo cambio en unit test
------------------------------------------------------------------------
r537635 | coco | 2015-03-30 20:58:55 +0000 (Mon, 30 Mar 2015) | 1 line

[Ticket]: Fix bug
------------------------------------------------------------------------



Referencias:

domingo, 1 de marzo de 2015

Java: How to use Generic Types to create a generics class

Java: How to use Generic Types to create a generics class


A generic type is a generic class or interface that is parameterized over types.

Las clases genéricas (con tipos genéricos) permiten, entre otras cosas, forzar la seguridad de los tipos creados por nosostros, en tiempo de compilación. También permiten abstraer comportamiento independientemente de tipo de objeto que se manipule.

Esto se puede apreciar con un ejemplo:

Example diagram




Example code


//........................................................
//File name: IMyGenericClass.java

package com.daro.generic.example.generic;

import java.util.List;

public interface IMyGenericClass<T> {

public void printClassName(T p);
public List<T> list(Class<T> clazz);

}

//........................................................
//File name: MyGenericClass.java

package com.daro.generic.example.generic;

import com.daro.generic.example.generic.IMyGenericClass;
import java.util.ArrayList;
import java.util.List;

public abstract class MyGenericClass<T> 
                implements IMyGenericClass<T> {

private final Class<T> type; public MyGenericClass(Class<T> type) { this.type = type; } public Class<T> getMyType() { return this.type; }

@Override
public void printClassName(T p) {
System.out.println ("Class name: " + p.getClass().getName());
}

@SuppressWarnings("unchecked")
@Override
public List<T> list(Class<T> clazz) {
@SuppressWarnings("rawtypes")
Object object = null;
try {
object = clazz.newInstance(); 
                         //equal to this.getMyType().newInstance()
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
List<T> list = new ArrayList<T>();
list.add((T)object);
return list;
}

}

//........................................................
//File name: MyGenericClassImpl.java

package com.daro.generic.example.generic;

import java.util.List;
import com.daro.generic.example.generic.MyGenericClass;
import com.daro.generic.example.generic.MyClass;


public class MyGenericClassImpl extends MyGenericClass<MyClass> {

public MyGenericClassImpl() {
super(MyClass.class);
}

public void doSomething() {
   MyClass myClass = new MyClass();
List<MyClass> myList = this.list(MyClass.class);
this.printClassName(myClass);
System.out.println("To string my object: " + myList.get(0).toString()); 
}
   
public static void main(String[] args) {
        System.out.println("Running test!"); // Display the string.
MyGenericClassImpl myGenericClassImpl = new MyGenericClassImpl();
myGenericClassImpl.doSomething();
}

}

//........................................................
//File name: MyClass.java

package com.daro.generic.example.generic;

import java.io.Serializable;

public class MyClass {

public String toString(){
return "MyClass Example";
}

}


Running Example


Result of run MyGenericClassImpl:

Running test!
Class name: com.daro.generic.example.generic.MyClass

To string my object: MyClass Example



References:

http://docs.oracle.com/javase/tutorial/java/generics/types.html
http://www.arquitecturajava.com/uso-de-java-generics/
http://jonsegador.com/2012/10/clases-y-tipos-genericos-en-java/




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