Ir al contenido principal

Entradas

Mostrando las entradas de 2012

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"];     node2 -> node3 [label="linea3"]; }

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.  HKEY_CLASSES_ROO

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      $null   =   $word . ActiveDocument . ExportAsFixedFormat ( $pdfpath , 17,  $false , 1)      $word . ActiveDocument . Close ()      $word . Quit ()   } } Y se podría usar de esta manera: PS> Dir  c:\folder  -Filter *.doc | Export-WordToPDF

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 otro c

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_OF_WEEK,GregorianCal

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 " ) ; } } }

Uso basico de JTabbedPane

Este ejemplo demuestra como usar un JTabbedPane de forma basica, esto permite crear aplicaciones con pestañas en java utilizando swing Codigo import java.awt.BorderLayout; import java.awt.Dimension; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTabbedPane; import javax.swing.JTextArea; public class Main extends JFrame {      public Main() {          try {             jbInit();         } catch (Exception e) {             e.printStackTrace();         }     }      private void jbInit() throws Exception {                 this .setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );          this .getContentPane().setLayout( new BorderLayout() );          this .setSize( new Dimension( 400 , 300 ) );          this .setTitle( " Test " );                 /* crear y agregar al formulario              aqui vamos a crear el JTabbedPane y tres JPanel qu

Sumar 2 Numeros de 3 Bits con 2 Sumadores Completos 7482

Este circuito muestra como encadenar dos sumadores completos de 2 bits 7482 para sumar dos números de 3 bits. El circuito acepta dos números de 3 bits CBA y ZYX. Diagrama original en NI Multisim 10 descargar

PowerShell Recorrer Archivos en un Directorio

Otra de las habilidades que necesitamos a la hora de estar escribiendo scripts, es la de recorrer todos los archivos de un directorio y aplicarles algún tratamiento, en este vídeo vamos a aprender una forma de hacer esto en PowerShell. Write-Host ( "El Numero de Argumentos es " + $args.count ) $directorio = $args [ 0 ] foreach ( $item in Get-ChildItem $directorio ) { Write-Host $item }

PowerShell Variables de Entorno

Cuando creamos un script muchas veces tenemos la necesidad de hacerlo flexible, que sea capaz de ejecutarse en múltiples equipos, en entornos que no conocemos, no simplemente crear un flujo fijo, en el que cada detalle debe ser parametrizado para que el script sea utilizable. En el camino de la flexibilidad nos encontramos con una característica que ha estado presente en los sistemas operativos desde el origen de los tiempos, las muy conocidas " Variables de Entorno " que vienen a ser algo asi como "Información del Sistema" que esta disponible para ser consultada. Entre la información que podemos encontrar en las variables de entorno esta la clásica "path", que nos provee una lista de directorios en los cuales el sistema (o interprete de comandos) busca por los archivos ejecutables. tambien podemos encontrar la variable "temp" que nos provee la ruta de la carpeta para almacenar archivos temporales del sistema, asi como otras menos comunes p

Compuerta NAND 2 Entradas con Transistores

Diseño de una compuerta NAND de dos entradas con transistores en NI Multisim 10 básicamente un Transistor  es un puente acompañado de una compuerta, es decir es un puente que puede estar "Cerrado" o "Abierto", según este modelo, cuando un transistor se encuentra "Cerrado" los electrones no pueden circular por su interior, por lo que el transistor en ese momento representa un corte en el circuito, es decir "desconectado", por el contrario cuando el transistor se encuentra abierto, los electrones pueden circular por el transistor, lo que lo convierte básicamente en un trozo de "cable" continuo, es decir un "conductor", usando este modelo un poco idealizado podemos decir que una compuerta NAND es el resultado de colocar dos "puentes" uno inmediatamente después del otro, y hacer que el control de las "puertas" de dichos puentes sean las entradas de la compuerta NAND, asi que al asociar 1 y 0 a los posib

Bash, Argumentos en Linea de Comando

Continuando con las herramientas básicas para escribir scripts en Bash, hoy nos toca aprender a trabajar con argumentos pasados al script. básicamente disponemos de variables nombradas de forma correlativa $1, $2 ... $n para todos los parametros que el script recibe al momento de ser invocado. #! /bin/bash #argumentos en linea de comando #los argumentos son nombrados de forma automatica # $1, $2 ... $n echo "el primer argumento es $1 " echo "creando archivo temporal $1 " touch $1 pwd > $1 echo "el segundo parametro es $2 " echo $2 > > $1 # >> es append, > es sobreescribir #pwd nos devuelve el directorio de trabajo (directorio actual) el vídeo para los que quieran ver como funciona,  

Graficas Polares en Wolfram | Alpha

Para Seguir explorando la herramienta de Wolfram| Alpha. graficaremos un Cardioide y una Rosa en coordenadas polares. Primero tratemos de definir que son coordenadas polares: un sistema de coordenadas que para cada punto del plano se necesita 2 valores el angulo (θ) y un radio (r). (distancia entre el polo y el punto) Cardioide: se una figura que se forma por un punto de una circunferencia que rota sobre el perímetro de otra, los radios de la circunferencias son iguales. Su ecuación Polar de forma general es: r=2a(1+cos(θ)) donde a es el radio de la circunferencia El Cardioide que graficaremos será r=1+cos(θ) su eje mayor es de longitud 2 y esta en el águlo 0 en Wolfram| Alpha polar plot 1+cos(x) este seria el resultado : Rosas Polares: son curvas en polares que tiene forma de rosas su ecuación general viene dada por: r=a cos(kθ+φ) donde a es la longitud de los petalos k el numero de petalos (k impar, k numero de petalos ; k par, 2 k numero de petalos) y el φ es la rotación

Gráfica de Curvas y Superficies Paramétricas en Wolfram|Alpha

Para empezar tratemos de definir que es Wolfram Alpha: Wolfram Alpha es un motor de respuestas en que se puede ingresar cualquier tipo de entradas, en esté caso gráficar curvas y superficies, aunque se pude ingresar cualquier tipo de entradas. Wolfram Alpha tratara de interpretar la entrada y hacerla coincidir con una serie de respuestas. bueno a lo que vamos: Curvas parametricas vamos graficar una praraboloa con las siguientes ecuaciones paramétricas: x(t)=t y(t)=t^2 z(t)=1 la entrada en Wolfram Alpha seria parecida a esta: plot parametric {t,t²,1} [t,-5,5] y su salida Superficies Parametricas Vamos a graficar un cilindro con eje en Z y radio de 3. Las ecuaciones paramétricas del cilindro son: x(t,v)=3*sin(t) y(t,v)=3*con(t) z(t,v)=v como se podrán dar cuenta tiene dos parámetros (t,v) los cuales haremos variar t [0,2π] y t[-5,5] la entrada para Wolfram Aplha seria (en esté caso se tendría que ser mas estricto en la notación) ParametricPlot3D[{3sin(t),3cos(t),v}, {t, 0, 2 Pi}, {v,

Hoja de Calculo en C++ DOS (Borland Turbo C)

El primer proyecto que hice en la Universidad, en aquel entonces todo un reto, es una hoja de calculo simple con una cantidad fija de filas y columnas, soporta solamente números enteros, permite establecer formulas en las celdas de forma muy básica, también demuestra el uso del ratón en programas en modo consola y otras funciones básicas como copiar, cortar y pegar celdas, ademas incluye búsqueda y reemplazo de valores. Descargar código fuente Este proyecto fue realizado como parte del curso Introducción a la Programación y Computación 1 de la carrera de Ingeniería en Ciencias y Sistemas de la Universidad de San Carlos de Guatemala.

Bash, Procesar Archivo Linea por Linea

Tarde o temprano una tarea simple que se vuelve repetitiva tiende a volverse una molestia, por lo que normalmente nos enfrentamos a la necesidad de automatizarlas usando scripts, en este post vamos a tratar un caso muy simple, queremos ejecutar un comando usando como parámetro cada linea de un archivo de configuración (una forma muy básica y primitiva de parametrizacion) básicamente vamos a abrir un archivo, iterar sobre cada linea y aplicar "echo" para mostrar esa linea en la consola. #! /bin/bash while read line do touch $line ".txt" done < "config.cfg" entre las consideraciones están 1) crear el archivo de configuración touch config.cfg echo -e "line1\nline2\nline3" > config.cfg cat config.cfg con el comando cat deberiamos de ver la siguiente salida line1 line2 line3 2) crear el script para procesar el archivo de configuracion nano script.sh  Agregar lo siguiente #! /bin/bash while read line do