Una página web con buenos tips de eclipse, aquí encontré como eliminar los espacios al final de las líneas en un archivo.
http://www.newt.com/java/eclipse/
Friday, June 08, 2007
Saturday, April 21, 2007
Mylar en Eclipse
Mylar es un proyecto que busca integrar la parte colaborativa en Eclipse, es decir su usa bugzilla ya no tienes que salir del IDE, muchos diran ya plugins para eso si pero ninguno que yo sepa hace task focus (enfoque en tareas) como lo hace Mylar :), así que Mylar no es solo integración es eso y más.
Solo tuve que ver el webinar para decir un WOW :), esta es la contribución a Eclipse más importante después del mismo Eclipse, y es mucho decir ;).
Tienen que darle un ojo a este impresionante plugin, para los que trabajan al estilo de tareas y bugs en Eclipse se sentirán aliviados :)
Solo tuve que ver el webinar para decir un WOW :), esta es la contribución a Eclipse más importante después del mismo Eclipse, y es mucho decir ;).
Tienen que darle un ojo a este impresionante plugin, para los que trabajan al estilo de tareas y bugs en Eclipse se sentirán aliviados :)
Tuesday, April 03, 2007
Problemas al ejecutar el task de JUnit de Ant en Eclipse
De seguro muchos como yo han tenido problemas al ejecutar el ant task de junit con eclipse.
..\plugins\org.apache.ant_1.6.5 de eclipse\junit.jar
Este archivo es la librería de junit la cual debe estar disponible para ejecutar el ant task.
Nota: esto es para eclipse 3.2, no se si las versiones anteriores tienen este problema.
<junit fork="true" haltonerror="false">El problema esta en que se debe agregar el archivo junit.jar al directorio:
<classpath location="${build_testclassdir}" />
<classpath refid="test.build.classpath" />
<test name="${package}.AllTests" todir="${testlogdir}">
<formatter type="plain" usefile="true"/>
<formatter type="xml" usefile="true"/>
</test>
</junit>
..\plugins\org.apache.ant_1.6.5 de eclipse\junit.jar
Este archivo es la librería de junit la cual debe estar disponible para ejecutar el ant task.
Nota: esto es para eclipse 3.2, no se si las versiones anteriores tienen este problema.
Eclipse subversion - Malformed network data
Bueno en este blog encontré la solución al problema del cliente de subclipse el cual tenia este error cuando se hacia el checkout de un proyecto.
Sunday, April 01, 2007
Video Tutorial de Ajax con Prototype
Un video tutorial hecho por mi :) explicando la creación de un chat utilizando ajax y java, para ajax se utiliza la herramienta archi conocida librería Prototype.
Para poder ver el video en mejor resolusión youtube
Para poder ver el video en mejor resolusión youtube
Monday, March 26, 2007
Anti-patrones en Ajax
Unos anti-Patrones que donde me incluyo haberlos utilizados para entregar rápido pero que cuestan a la hora de mantener la aplicación.
Cinco Anti-Patrones en Ajax
Cinco Anti-Patrones en Ajax
Rhino: JavaScript for Java
Para implementar la funcionalidad de ejecución de javascript en mi SearchEngine con Agentes de Jade, estuve leyendo un articulo interesante sobre Rhino que es una implementación de Javascript para java que permite scripting en aplicaciones Java. Esto es posible en Java 6 como una nueva característica, ya puedes correr PHP, Ruby, JavaScript, Python (or Jython).
Por cierto, Rhino viene integrado en Java SE 6, por lo tanto si tiene Java SE 6 ya puedes utilizar esta característica.
La características de este puedo mencionar:
Ejemplo:
Por cierto, Rhino viene integrado en Java SE 6, por lo tanto si tiene Java SE 6 ya puedes utilizar esta característica.
La características de este puedo mencionar:
- Compilación de javascript (si quiere compilar en script para un mejor rendimiento)
- Invocación de funciones.
- Acceso a recursos de Java (Puedes importar clases de java, invocar métodos y objectos de Java )
- Y lo más obvio manejo de return del script que ejecutas.
- Ejecutas el script desde hard code en java (lo cual no tendría mucha diferencia con lo que podrias hacer en java) y ejecución de script almacenado en un archivo.
- Soporte para la ejecución de PHP, Ruby, JavaScript, Python, etc dentro de Java con las características ya mencionadas. (Imaginate correr PHP en un servidor de Java EE y que puedas acceder desde PHP los objectos de java, javabean, ect.)
Ejemplo:
package org.vnssoftware;
import javax.script.Bindings;
import javax.script.Compilable;
import javax.script.CompiledScript;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
public class Scripting {
public static void main(String[] args) {
ScriptEngineManager engineManager = new ScriptEngineManager();
ScriptEngine engine = engineManager.getEngineByName("js");
engine.put("age", 21);
try {
engine.put("age", 26);
engine.put("noClaims", Boolean.TRUE);
Object result = engine.eval(
"if (age < 25){ " +
" riskFactor = 1.5;" +
"} else if (noClaims) {" +
" riskFactor = 0.75;" +
"} else {" +
" riskFactor = 1.0;" +
"}");
System.out.println(result);
// using javascript files
//engine.eval(new FileReader("c:/voting.js"));
// importing java classes
engine.eval("importPackage(java.util); " +
"today = new Date(); " +
"print('Today is ' + today);");
// using object instances passed to the script engine, and on static class members.
engine.put("name","John Doe");
engine.eval("name2 = name.toUpperCase();" +
"print('Converted name = ' + name2); \n");
// script engine implementations support script compilation
Compilable compilable = (Compilable) engine;
CompiledScript script = compilable.compile(
"if (age < 25){ " +
" riskFactor = 1.5;" +
"} else if (noClaims) {" +
" riskFactor = 0.75;" +
"} else {" +
" riskFactor = 1.0;" +
"}");
Bindings bindings = engine.createBindings();
bindings.put("age", 26);
bindings.put("noClaims", Boolean.TRUE);
bindings.put("riskFactor", 1);
script.eval();
// call individual functions defined in the script from your Java code.
engine.eval("function increment(i) {return i + 1;}");
Invocable invocable = (Invocable) engine;
Object resul = invocable.invokeFunction("increment", new Object[] {10});
System.out.print("result = " + resul);
} catch (ScriptException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
}
Tuesday, January 09, 2007
En busca de parseadores HTML
Estoy en busca de parseadores HTML para mi spider implementado en Jade,
encontré este HTMLParser, el cual es simple y rápido.
Ahora es más simple obtener el texto de una pagina web y la lista de enlace de esta misma.
Ejemplo:
encontré este HTMLParser, el cual es simple y rápido.
Ahora es más simple obtener el texto de una pagina web y la lista de enlace de esta misma.
Ejemplo:
String URL = "http://htmlparser.sourceforge.net";
StringExtractor se = new StringExtractor (URL);
String contents = se.extractStrings(true);
System.out.println(contents);
Friday, November 10, 2006
Grammar DUDU+ mi lenguaje de programación
Este es el grammar del lenguaje DUDU+, este grammar (BNF production) esta hecho para la generación de un parser con la herramienta javacc. Como se ve la sintaxis es la de java pero con otras reglas, ya que se trata de javacc, que es el generador de parser más popular, se puede encontrar documentación de este en la página: https://javacc.dev.java.net/ . Les recomiendo que utilicen el mailling list en el cual hay personas dispuestas a ayudarte :-D.
/*
* DUDU+ codename MiniJava
* HECHO... in Dominican Republic
* author VГctor Sosa <victornsosa@gmail.com> vns java
*/
options{
LOOKAHEAD = 1;
STATIC = false;
JAVA_UNICODE_ESCAPE = true;
}
PARSER_BEGIN(MiniJava)
import java.util.*;
public class MiniJava {
public static void main(String[] args) throws ParseException, TokenMgrError {
MiniJava parser;
String file = null;
long time = 0;
long parseTime = 0;
long startTime = 0;
if (args.length == 0)
{
System.out.println("Error messages...");
return;
} else if ( args.length == 1 ){
file = args[0];
System.out.println("Start parsing...");
try
{
parser = new MiniJava(new java.io.FileInputStream(file));
} catch ( java.io.FileNotFoundException e ) {
System.out.println("Parser error: Filename " + file + " not found." );
return;
}
} else {
System.out.println("Debe escribir: java MiniJava inputfile");
return;
}
try
{
startTime = System.currentTimeMillis();
parser.Start();
parseTime = System.currentTimeMillis();
time = parseTime - startTime;
System.out.println(" Time of parsing: " + time + " ms");
System.out.println(" DuDu successfully end");
} catch ( ParseException pex) {
System.out.println( pex.getMessage() );
System.out.println(" ParserException during parse file" );
}
}/* main method*/
}
PARSER_END(MiniJava)
/* Eat white space and comment*/
SKIP : {
" "
| "\t"
| "\n"
| "\r"
| <"//" (~["\n","\r"])* ("\n" | "\r" | "\r\n")>
| <"/*" (~["*"])* "*" ("*" | ~["*","/"] (~["*"])* "*")* "/">
}
TOKEN : /* RESERVED WORDS AND LITERALS */
{
< BOOLEAN: "boolean" >
| < BYTE: "byte" >
| < CHAR: "char" >
| < CLASS: "class" >
| < DOUBLE: "double" >
| < FALSE: "false" >
| < FLOAT: "float" >
| < FINAL: "final" >
| < INT: "int" >
| < LONG: "long" >
| < PUBLIC: "public" >
| < SHORT: "short" >
| < STATIC: "static" >
| < TRUE: "true" >
| < VOID: "void" >
| < NEW: "new" >
| < MAKE: "make" >
| < STACK: "stack" >
| < REPEAT: "repeat" >
| < UNTIL: "until" >
| < ADDSTACK: "addStack" >
| < ORDSTACK: "ordStack" >
| < ASCENDENTE: "ascendente" >
| < DESCENDENTE: "descendente" >
}
TOKEN : /* SEPARATORS */
{
< LPAREN: "(" >
| < RPAREN: ")" >
| < LBRACE: "{" >
| < RBRACE: "}" >
| < LBRACKET: "[" >
| < RBRACKET: "]" >
| < SEMICOLON: ";" >
| < COMMA: "," >
}
TOKEN : /* OPERATORS */
{
< ASSIGN: "=" >
| < INCR: "++" >
| < DECR: "--" >
| < PLUS: "+" >
| < MINUS: "-" >
| < STAR: "*" >
| < SLASH: "/" >
}
TOKEN : /* LITERALS */
{
< INTEGER_LITERAL:
< DECIMAL_LITERAL > (["l","L"])?
>
|
< #DECIMAL_LITERAL: ["0"-"9"] (["0"-"9"])* >
|
< FLOATING_POINT_LITERAL:
(["0"-"9"])+ "." (["0"-"9"])* ( < EXPONENT > )? (["f","F","d","D"])?
| "." (["0"-"9"])+ ( < EXPONENT >)? (["f","F","d","D"])?
| (["0"-"9"])+ < EXPONENT > (["f","F","d","D"])?
| (["0"-"9"])+ (< EXPONENT >)? ["f","F","d","D"]
>
|
< #EXPONENT: ["e","E"] (["+","-"])? (["0"-"9"])+ >
|
< CHARACTER_LITERAL:
"'"
( (~["'","\\","\n","\r"])
| ("\\"
( ["n","t","b","r","f","\\","'","\""]
| ["0"-"7"] ( ["0"-"7"] )?
| ["0"-"3"] ["0"-"7"] ["0"-"7"]
)
)
)
"'"
>
|
< STRING_LITERAL:
"\""
( (~["\"","\\","\n","\r"])
| ("\\"
( ["n","t","b","r","f","\\","'","\""]
| ["0"-"7"] ( ["0"-"7"] )?
| ["0"-"3"] ["0"-"7"] ["0"-"7"]
)
)
)*
"\""
>
}
TOKEN : {
<IDENTIFIER: < LETTER > ( < LETTER > | < DIGIT > )*>
| <#LETTER: ["$","A"-"Z","_","a"-"z"]>
| <#DIGIT: ["0"-"9"]>
}
/*********************************************
* THE MINIJAVA LANGUAGE GRAMMAR STARTS HERE *
*********************************************/
/*
* Struts.
*/
void Start() throws ParseException :
{}
{
(TypeDeclaration() )*
}
void TypeDeclaration() :
{}
{
ClassDeclaration()
}
/*
* Declaracion de clases
*/
void ClassDeclaration() :
{}
{
( "final" | "public" | "static" )* "class" < IDENTIFIER >
"{" ( ClassBodyDeclaration() )* "}"
}
void ClassBodyDeclaration() :
{}
{
LOOKAHEAD(2)
FieldDeclaration()
|
Statement()
}
void FieldDeclaration() :
{}
{
( "public" | "static" | "final" )*
Type() VariableDeclarator() ( "," VariableDeclarator() )* ";"
}
void VariableDeclarator() :
{}
{
VariableDeclaratorId() [ "=" VariableInitializer() ]
}
void VariableDeclaratorId() :
{}
{
< IDENTIFIER > ( "[" "]" )*
}
void VariableInitializer() :
{}
{
ArrayInitializer()
|
Expression()
}
void ArrayInitializer() :
{}
{
"{" [ VariableInitializer() ( LOOKAHEAD(2) "," VariableInitializer() )* ] [ "," ] "}"
}
/*
* Tipos, nombre y sentencias
*/
void Type() :
{}
{
PrimitiveType() ( "[" "]" )*
}
void PrimitiveType() :
{}
{
"boolean"
|
"char"
|
"byte"
|
"short"
|
"int"
|
"long"
|
"float"
|
"double"
}
void Name() :
{ }
{
< IDENTIFIER >
}
/*
* Expression syntax
*/
void Expression() :
{}
{
ConditionalExpression() [ AssignmentOperator() AdditiveExpression() ]
}
void AssignmentOperator() :
{}
{
"="
}
void ConditionalExpression() :
{}
{
ConditionalOrExpression() [ "?" Expression() ":" ConditionalExpression() ]
}
void ConditionalOrExpression() :
{}
{
ConditionalAndExpression() ( "||" ConditionalAndExpression() )*
}
void ConditionalAndExpression() :
{}
{
EqualityExpression() ( "&&" EqualityExpression() )*
}
void EqualityExpression() :
{}
{
RelationalExpression() ( ( "==" | "!=" ) RelationalExpression() )*
}
void RelationalExpression() :
{}
{
AdditiveExpression() ( ( "<" | ">" | "<=" | ">=" ) AdditiveExpression() )*
}
void AdditiveExpression() :
{}
{
MultiplicativeExpression() ( LOOKAHEAD(2)( "+" | "-" ) MultiplicativeExpression() )*
}
void MultiplicativeExpression() :
{}
{
UnaryExpression() ( ( "*" | "/" ) UnaryExpression() )*
}
void UnaryExpression() :
{}
{
( "+" | "-" ) UnaryExpression()
|
UnaryExpressionNotPlusMinus()
}
void UnaryExpressionNotPlusMinus() :
{}
{
PostfixExpression()
}
void PostfixExpression() :
{}
{
PrimaryExpression() [ "++" | "--" ]
}
void PrimaryExpression() :
{}
{
PrimaryPrefix() ( PrimarySuffix() )*
}
void PrimaryPrefix() :
{}
{
Literal()
|
"(" Expression() ")"
|
AllocationExpression()
|
Name()
}
void PrimarySuffix() :
{}
{
"[" Expression() "]"
|
LOOKAHEAD(2)
"." "addStack" "(" ( Name() | Literal() ) ")"
|
"." "ordStack" "(" OrdenType() ")"
}
void OrdenType() :
{}
{
"ascendente"
|
"descendente"
}
void Literal() :
{}
{
< INTEGER_LITERAL >
|
< FLOATING_POINT_LITERAL >
|
< CHARACTER_LITERAL >
|
< STRING_LITERAL >
|
BooleanLiteral()
}
void BooleanLiteral() :
{}
{
"true"
|
"false"
}
void AllocationExpression() :
{}
{
"new" PrimitiveType() ArrayDimsAndInits()
|
MakeStack()
}
void MakeStack() :
{}
{
"make" "stack"
}
void ArrayDimsAndInits() :
{}
{
LOOKAHEAD(2)
( LOOKAHEAD(2) "[" Expression() "]" )+ ( LOOKAHEAD(2) "[" "]" )*
|
( "[" "]" )+ ArrayInitializer()
}
void Statement() :
{}
{
Expression() ";"
|
RepeatStatement()
}
void RepeatStatement() :
{}
{
"repeat" Statement() "until" "(" Expression() ")"
}
Sunday, November 05, 2006
Stevey en el pais de las maravillas (Google)
Interesante artculo de Stevey para decirnos que vivimos en un mundo de mentira :) que sincero, y de como se debe trabajar segun Google.
Los 10 lenguajes más demandados
En este artículo se confirma mas aun lo que dije anteriormente, para mis amigos que todavia estan pensando que M$ domina el negocio de las computadoras no significa que contole en que se programa.
Sunday, August 27, 2006
oferta de trabajo USA
Esto es para los amigos mios que no creen que en el mundo de Java no se gana dinero (Eso es porque solamente piensa en dinero) y creen que los chelitos solo se hacen con M$.
Vean este sueldito.
Vean este sueldito.
Wednesday, August 16, 2006
The Power of Three - Eclipse, Tomcat, and Struts
Un pequeño tutorial de la integración de estos tres legendarios en el desarrollo de aplicaciones web de una manera ágil.
Branching with Eclipse and CVS
Un articulo para estar claro de como se manejan los branch en Eclipse con CVS.
http://www.eclipse.org/articles/Article-CVS-branching/eclipse_branch.html
http://www.eclipse.org/articles/Article-CVS-branching/eclipse_branch.html
Tuesday, August 15, 2006
Nifty Corners - Esquinas redondeadas
Como obterner cuadros con esquinas redondeadas, pero lo más importante compatible con los diferentes navegadores, solución usar Nifty Corners , es una librería ligerade css y javascript para lograr este efecto es bien fácil de usar en nuestros proyectos.
Ruby on Rails and J2EE
Este artículo es una comparacion de los modelos de desarrollo propuesto por Ruby on Rails y J2EE.
Mostrando cada ventaja y desventaja, un buen artículo con los pies sobre la tierra.
Mostrando cada ventaja y desventaja, un buen artículo con los pies sobre la tierra.
open source Java para octubre
En este artículo se expresa lo que mucho tal vez mucho han escuchado, pero esta vez no es solo un deseo o rumor, la plataforma Java se piensa librerar con una licencia compatible con el open source, lo cual si se haria seria un hito en la industria.
Esto incluye un compilador, un virtual machine, etc. al principio y todo este proceso tardará hasta el 2007 cuando toda la plataforma será librerada completamente.
Esto incluye un compilador, un virtual machine, etc. al principio y todo este proceso tardará hasta el 2007 cuando toda la plataforma será librerada completamente.
Friday, August 11, 2006
EJB3 - Conceptos Basicos
En este artículo se trata de explicar cuáles son los distintos tipos de Enterprise Java Bean y cuáles son los propósitos de cada uno de ellos : Stateless Session Bean, Stateful Session Bean, Entity Bean y Message Driven Bean.
Cualquiera que quisiera entender el mundo del EJB este es un buen comienzo.
Cualquiera que quisiera entender el mundo del EJB este es un buen comienzo.
Spring AOP
Spring AOP
Un poco de orden en tus proyectos ;)
Spring AOP es útil para realizar tareas puntuales que no encajan de forma natural en nuestras entidades ni en nuestra lógica de negocio.
Este artículo muestra de manera básica como usarlo en nuestros proyectos.
Subscribe to:
Posts (Atom)