Ir al contenido principal

Entradas

Visualizador de Gráficos Graphviz con Vaadin: Un Ejemplo Práctico

En este artículo, exploraremos un ejemplo práctico de cómo construir un sencillo visualizador de gráficos Graphviz utilizando el marco de trabajo web Vaadin en Java. Este visualizador permite a los usuarios ingresar código en lenguaje DOT de Graphviz en un área de texto y, al hacer clic en un botón o presionar la tecla Enter, el código se analizará y se renderizará como una imagen SVG. ¡Acompáñanos en este tutorial y descarga el código para probarlo tú mismo! Paso 1: Importar las bibliotecas necesarias Antes de comenzar, asegúrate de tener importadas las bibliotecas necesarias en tu proyecto, como los componentes de Vaadin, el motor Graphviz y el analizador (Parser). Paso 2: Crear la clase GraphViewerView Define la clase GraphViewerView, que hereda de HorizontalLayout. Utiliza las anotaciones @PageTitle, @Route y @RouteAlias para configurar el título, la ruta y el alias de la ruta de la vista. Paso 3: Definir las variables de instancia La clase cuenta con varias variables de instancia,...

RegEx Editor con Vaadin

Explorando las expresiones regulares con un editor hecho en Vaadin En este proyecto, construí un editor de expresiones regulares usando el framework Vaadin. Una expresión regular es una secuencia de caracteres que define un patrón de búsqueda. Con este editor, los usuarios pueden ingresar una expresión regular y un texto de prueba para verificar si el texto cumple con el patrón. La interfaz de usuario está diseñada de manera sencilla y fácil de usar. El editor tiene dos campos de entrada: uno para la expresión regular y otro para el texto de prueba. También hay un botón "Probar" que verifica si el texto de prueba coincide con la expresión regular. Además, hay una opción para especificar un grupo de captura para extraer datos específicos de la coincidencia. Una vez que se presiona el botón "Probar", se muestra un mensaje de éxito o fracaso en la pantalla, indicando si el texto de prueba coincide con la expresión regular. Si se especificó un grupo de captura, el edito...

Como Hacer Un Tablero en Java con Vaadin

Hace poco descubrí Vaadin, un framework de desarrollo de aplicaciones web en Java, y decidí probarlo para mi primer proyecto. La experiencia fue muy positiva, así que quiero compartir cómo construí una aplicación web sencilla para empezar. Mi idea era crear una cuadrícula de botones que al hacer clic cambien de color de fondo aleatoriamente. Parece simple, pero me permitió aprender los conceptos básicos de Vaadin y familiarizarme con su flujo de trabajo. No es la primera vez que el tablero con botones pasa por mi mente ( https://www.rdebug.com/2011/04/como-hacer-un-tablero-en-java-con.html ) Lo primero que hice fue crear un nuevo proyecto usando https://start.vaadin.com/app , seleccione algunas opciones para crear una app vacia con una sola vista llamada Tablero. En mi caso, creé una matriz de botones con una clase personalizada que extiende de Button, que agregué al componente TableroView. Entonces, para manejar los clics de los botones, agregué un listener a cada uno que cambia su co...

Usar Graphviz desde Java

G raphviz  es una herramienta que agrupa varios programas que generan distintos tipos de grafos a partir de archivos con un lenguaje definido. o tambien a travez de una api. ( ejemplo de uso de graphviz desde C# para dibujar árbol binario , ejemplo de graphviz para dibujar un arbol B ) primero te descargas el paquete de  graphviz  y lo instalas http://www.graphviz.org/Download_windows.php   eso crea en archivos de programa una carpeta C:\Archivos de programa\ Graphviz  2.28\bin ahi estan los ejecutables que nos interesan, en este caso por lo que planteas vamos a usar dot.exe que es para dibujar grafos dirigidos jerarquicos. algo mas del lenguaje dot http://www. graphviz .org/Documentation/dotguide.pdf un ejemplo de grafo simple grafo1.txt Código: digraph G {     node1;     node2;     node3;     node1 -> node2 [label="linea1"];     node1 -> node3 [label="linea2"];  ...

C# Dibujar Arbol Binario Graphviz

Para continuar con Graphviz , esta vez desde C#, en este pequeño ejemplo, voy a implementar una forma simple de dibujar un Arbol Binario usando Graphviz y en especifico, Dot. Como base para entender el funcionamiento general de Graphviz, hace tiempo hice un post hablando mas en detalle del proceso usando Java ( Usar GraphViz en Java ) Para que este ejemplo funcione, es necesario tener instalado GraphViz con la carpeta "bin" de GraphViz como parte de la variable Path de Windows (esto para poder invocar Dot.exe usando solo el nombre del binario, el mismo caso que para los ejecutables Javac o Java en el Path ) Para no entrar en los detalles del codigo de un Arbol Binario, he tomado como base el ejemplo publicado en Code Project ( http://www.codeproject.com/Articles/18976/A-simple-Binary-Search-Tree-written-in-C ) TBinarySTree bt = new TBinarySTree ( ) ; bt . insert ( " Bill " , 3.14 ) ; bt . insert ( " John " . 2.71 ) ; Dicho ejemplo resu...

Windows 7 Abrir Consola en Carpeta Actual

Y aquí el tip de la semana, como desarrollador es muy común estar con un par de consolas abiertas en todo momento, para ejecutar desde build scripts hasta ping's, tracerts, flushdns's y demás. después de usar por mucho tiempo WIN+R seguido de CMD seguido de ENTER, mas un copy y paste de la PATH de la carpeta, usando CD PATH. para llegar a tener cmd en la carpeta que yo queria, me vine a enterar de la existencia del Menu Extendido de Windows (mucho gusto)- Resulta que al presionar SHIFT y dar click derecho, el menu nos presenta otro set de opciones que normalmente no son visibles :O jajaja. y entre ellas la deseada, abrir consola en esta carpeta! ahora el truco consiste en editar el registro del sistema, para hacer que esta opción deje de ser Extendida, y pase a estar disponible todo el tiempo con el click derecho normal!. para lograr este truco es necesario borrar la Llave "Extended" de las siguientes entradas del registro....

Powershell - Encontrar Controladores de Dominio

Si nuestra computadora está unida a un dominio de Windows, con este código podemos obtener el listado de controladores de dominio en él. Notemos que este código podría darnos un error si no estamos en un dominio. PS> $dominio = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain() PS> $dominio.DomainControllers Para encontrar uno, probemos: PS> $dominio.FindDomainController() Y para encontrar todos los controladores de dominio en un bosque: PS> $dominio.Forest.Domains

Parámetros Nombrados En PowerShell

Como Especificar un Parametro con Nombre ( run.ps1 ) param ( [ string ] $ConfigFileName = $ ( throw " parameter required. " ) ) Write-Host  $ConfigFileName Como Invocar otro script indicando el parámetro ( tambien se puede usar desde consola ) $command = " . \r un.ps1 –ConfigFileName ./app.config " Invoke - Expression $command

EventLog desde PowerShell

este pequeño grupo de instrucciones permite mandar eventos al EventLog de windows (el cual podemos consultar usando EventViewer), util para proporcionar información de la ejecución de nuestros scripts. $source = "MySource" #to delete -> [System.Diagnostics.EventLog]::DeleteEventSource($source) #crear el source si no existe if ([System.Diagnostics.EventLog]::SourceExists($source) -eq $false) {     [System.Diagnostics.EventLog]::CreateEventSource($source, "BwLog")     Write-Host "create source" } #enviar un evento [System.Diagnostics.EventLog]::WriteEntry($source,"mensaje")

Script para habilitar NAT con iptables en Linux

Este script nos habilita el Network Address Translator en un servidor con Linux. Solo tenemos que cambiar "eth1" por nuestra interface externa y 192.168.0.0/24 por nuestra red interna. Podemos agregar estas líneas a nuestro rc.local o llamarlo al final de nuestros scripts de inicialización. ------- nat.sh ---------------------------------------------- #!/bin/bash ifup eth1 echo 1 > /proc/sys/net/ipv4/ip_forward iptables -F iptables -F -t nat iptables -A POSTROUTING -t nat -s 192.168.0.0/24 -d 0/0 -j MASQUERADE ------- nat.sh ----------------------------------------------

Powershell: Función para convertir archivos Word en un directorio a PDF

Para convertir todos los archivos de Word en un directorio a PDF: function   Export-WordToPDF  {    param (   [ Parameter ( Mandatory = $true , ValueFromPipelineByPropertyName = $true )]   [ Alias ( "FullName" )]    $path ,    $pdfpath   =   $null )    process  {      if  ( ! $pdfpath ) {        $pdfpath   =  [ System.IO.Path ]:: ChangeExtension ( $path ,  '.pdf' )     }      $word   =   New-Object   -ComObject   Word.Application      $word . displayAlerts   =   $false          $word . Visible   =   $true      $doc   =   $word . Documents . Open ( $path )      #$doc.TrackRevisions = $false      ...

Mejoras de desempeño para dispositivos Android

Estos son algunos tweaks que le he hecho a mis dispositivos Android ICS para mejorar el rendimiento (por supuesto, necesitamos root en nuestros dispositivos para que funcionen): 1) Habilitar el Kernel Samepage Merging: Deduplica la memoria para guests virtualizados. Esta implementación no permite el swap de páginas que ya fueron compartidas. echo 1 > /sys/kernel/mm/ksm/run 2) Ampliar el límite en el memory heap: - abrimos el archivo /system/build.prop - cambiar la línea: dalvik.vm.heapgrowthlimit=48m por dalvik.vm.heapgrowthlimit=64m Regularmente para este cambio es necesario "remontar" /system en modo escritura. Esto lo podemos conseguir con este comando: mount -o rw,remount /dev/block/mmcblk1p3 /system (Solo es de revisar que efectivamente sea mmcbl1p3 la partición que está montada en /system, sino hacer el cambio dependiendo el dispositivo)

Averiguar el Id de Proceso en C#

No es raro que necesitemos identificar de forma única algún elemento de nuestros programas, en este caso me toco definir una llave para usar en un servidor de cache (memcached) que fuera la misma durante el tiempo en el que se ejecute un programa, pero que también sea diferente por cada proceso, la solución mas clara es utilizar el PID, valor que identifica a un proceso en el sistema operativo al menos en un periodo de tiempo. para averiguar este valor desde C#, y cualquier lenguaje de la .NET Framework basta con usar la siguiente instrucción. var PID = Process.GetCurrentProcess().Id;

Dibujar Lineas en AutoCAD

Este video muestra dos modos para dibujar lineas en AutoCAD usando la linea de comandos, el primero de estos modos es con coordenadas absolutas en el plano X,Y por ejemplo line 1,1  10,10 line 2,1   5,3 también se puede dibujar lineas utilizando un punto inicial, seguido de la magnitud del segmento y el angulo del mismo por ejemplo line 1,1  @ 10 < 45 este comando dibuja una linea desde 1,1 que tiene 10 unidades de largo, y esta a 45 grados del origen.

AST: (Abstract Syntax Tree)

Es una representación abstracta de la sintaxis de un código fuente y es abstracta por qué representa con detalle la sintaxis de un lenguaje de programación La Idea de una AST es que cada nodo se refiere a una construcción del código fuente por ejemplo existe el nodo If, While, asiganción. etc. Al final de las hojas se encuentran los terminales de una gramática por ejemplo las variables, operadores, literales etc. Ahora, porque AST y no colocar las acciones semánticas en la gramática: que todo necesitamos de las Acciones Semánticas para construir el árbol (pero para nada más) Raramente las herramientas para generar parser soportan atributos heredados y trasformar la gramática o utilizar la una pila es un tanto complicado. si se quiere interpretar un lenguaje la única forma (sin quebrarnos la cabeza) es con el AST. si se tiene N gramáticas es más fácil escribir acciones semánticas para construir el AST que traducir directamente. Así por ejemplo el árbol de la gramá...

Apache Apuntar dominio.com a www.dominio.com

Y el pequeño issue del dia fue, www.misitio.com resultando en un Directory Listing sobre mi carpeta raiz (lo que me permitio descubrir un error en la configuracion de seguridad, por el listado de directorios),  pero usando misitio.com todo funcionaba bien. Despues de unos minutos de pensar en posibilidades, la primera que vino a mi mente fue la configuracion del DNS, estaba seguro de haber creado un registro tipo A para mi server, pero no estaba seguro de haber creado un alias para el subdominio www.misitio.com por lo que el primer paso fue confirmar que ambos dominios apuntaran al server correcto, para esto fue suficiente hacer ping a ambos ping midominio.com ping www.midominio.com en caso estos dos comandos no devuelvan la misma direccion ip, podemos asegurar que el problema esta en la configuracion del DNS, este no era el caso ya que se podia ver las carpetas en el directorio raiz, por lo que si estabamos haciendo la request al server correcto (explico esto porque es ot...

Averiguar el primer y último viernes de un mes con Java

A finales del 2011 desarrolle un proyecto que tomaba la asistencia de personas en  una oficina por medio de un dispositivo biometrico de huella digital. A la hora de generar los reportes de porcentaje de asistencia, calculaba un promedio de asistencia, si una persona solo asistía los viernes lo promediaba a 4 veces, pero el tiempo no es fácil de manejar, existe una anomalía, la cual es que ciertos meses una persona asiste 5 veces y en otras ocasiones 4. En febrero 2012 hay 4 viernes, y en Marzo 2012 hay 5 viernes. Esto vuelve el sistema inexacto, así que procede por investigar como averiguar cuantos viernes tiene un determinado mes, la lógica me dicto, saber la fecha del último viernes, y la del primer viernes, para poder encontrar la fórmula.  Calcular el último viernes. Calendar pCal=java.util.GregorianCalendar.getInstance(); pCal.set(GregorianCalendar.YEAR,2012); pCal.set(GregorianCalendar.MONTH,GregorianCalendar.APRIL); pCal.set(GregorianCalendar.DAY_O...

Modificar un JPanel en tiempo de ejecucion

Esta aplicación demuestra como intercambiar el JPanel activo en un JFrame para crear el efecto de pestaña. no es raro encontrarnos con la necesidad de modificar de forma dinámica el layout en un JFrame, y muchas veces nuestros componentes no responden como esperamos, en este ejemplo se muestran de forma simple los pequeños detalles que hacen la diferencia. Descargar proyecto original en JDeveloper 11g

log4net apagar NHibernate Logging

cuando NHibernate escribe en tus archivos de log, miles y miles de lineas de mensajes de depuración, que al final te resultan inútiles, y solo ocultan otra información que es realmente importante. aqui dejo este pequeño segmento de xml, que permite parametrizar el nivel de detalle para el logging de NHibernate. Configuracion Basica < log4net > < appender name = " FileAppender " type = " log4net.Appender.FileAppender " > < file value = " C:\logfile.txt " /> < appendToFile value = " true " /> < layout type = " log4net.Layout.PatternLayout " > < conversionPattern value = " %date [%thread] %-5level %logger [%property{NDC}] – %message%newline " /> </ layout > </ appender > < root > < level value = " DEBUG " /> < appender-ref ref = " FileAppender " /> </ root > ...

C# Como Descargar Archivos

A medida que nos van surgiendo los programas, nos encontramos con una cantidad variada de necesidades, una de las mas comunes es la Descarga de Archivos, cuando uno aprende a programar generalmente se enfoca en aprender a manejar archivos en el disco duro local, pero no esta de mas tener a la mano el pequeño fragmento de código que te permite bajar un archivo de Internet. no es muy complicado, pero si muy poderoso. namespace WebFileDownload { class Program { static void Main ( string [ ] args ) { var cliente = new WebClient ( ) ; cliente . Proxy = null ; cliente . DownloadFile ( " http://www.google.com/robots.txt " , " robots.txt " ) ; System . Diagnostics . Process . Start ( " robots.txt " ) ; } } }