miércoles, 17 de marzo de 2010
Wireframing, mockups, prototipos
lunes, 15 de marzo de 2010
Llamar a R desde VB.NET
Pasamos ahora a implementar un pequeño programa que genere un vector R aleatorio y lo represente usando la librería ZedGraph. Antes necesitaremos refenciar las siguientes tres DLLs que podemos obtener a través de estos enlaces:
Finalmente, este es el código que hace lo que antes hemos comentado:
Imports STATCONNECTORCLNTLib
Imports StatConnectorCommonLib
Imports STATCONNECTORSRVLib
Imports ZedGraph
Public Class Form1
Dim sc1 As StatConnector = New STATCONNECTORSRVLib.StatConnectorClass()
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
sc1.Init("R")
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim o1 As Object
Dim n As Integer = 20
sc1.SetSymbol("n1", n)
sc1.Evaluate("x1<-rnorm(n1)")
o1 = sc1.GetSymbol("x1")
Dim serie_x, serie_y As Hashtable
Dim index As Integer
serie_x = New Hashtable
serie_y = New Hashtable
For index = 0 To UBound(o1)
serie_x(index) = index
serie_y(index) = CDbl(o1(index))
Next
crearGrafica(GRAFICA, "TEST R", "X", "Y")
addCurva(GRAFICA, "Serie", Color.Blue, 2, SymbolType.None, serie_x, serie_y)
End Sub
'Dibuja una grafica usando un control ZedGraph
Sub crearGrafica(ByVal nombreControl As ZedGraph.ZedGraphControl, _
ByVal titulo As String, _
ByVal nombre_eje_x As String, _
ByVal nombre_eje_y As String)
Dim area As RectangleF
area = nombreControl.GraphPane.Rect
nombreControl.GraphPane = New GraphPane(area, titulo, nombre_eje_x, nombre_eje_y)
nombreControl.AxisChange()
nombreControl.Refresh()
End Sub
'Añade una curva
Sub addCurva(ByVal nombreControl As ZedGraph.ZedGraphControl, _
ByVal nombre As String, _
ByVal color As Color, _
ByVal anchura As Integer, _
ByVal simbolo As SymbolType, _
ByVal serie_x As Hashtable, _
ByVal serie_y As Hashtable)
Dim i As Integer
Dim puntos = New PointPairList()
Dim puntos_tendencia = New PointPairList()
For i = 0 To serie_x.Count - 1
puntos.add(serie_x(i), serie_y(i))
Next
Dim curva As LineItem = nombreControl.GraphPane.AddCurve(nombre, puntos, color, simbolo)
curva.Line.Width = anchura
curva.Line.Style = Drawing2D.DashStyle.Solid
nombreControl.AxisChange()
nombreControl.Refresh()
End Sub
End Class
sábado, 13 de marzo de 2010
¿Qué busca la gente en Internet?
Conclusión: la gente se equivoca mucho al escribir Tuenti, ¿no?
jueves, 11 de marzo de 2010
Enviar correos con VB.NET
Imports System
Imports System.Collections
Imports System.Net
Imports System.Net.Mail
Imports System.Net.Mime
Public Class Module1
Public Shared Sub Main()
'--------------------------------------------------
'Configuración del mensaje
'--------------------------------------------------
Dim msg As New System.Net.Mail.MailMessage()
msg.From = New MailAddress("origen@gmail.com", "Remitente", System.Text.Encoding.UTF8)
msg.[To].Add("destino@gmail.com")
msg.Subject = "Prueba"
msg.SubjectEncoding = System.Text.Encoding.UTF8
msg.Body = "¡Hola mundo!"
msg.BodyEncoding = System.Text.Encoding.UTF8
msg.IsBodyHtml = False
'--------------------------------------------------
'Configuración del cliente SMTP
'--------------------------------------------------
Dim client As New SmtpClient()
client.Credentials = New System.Net.NetworkCredential("origen@gmail.com", "contraseña")
client.Port = 587
client.Host = "smtp.gmail.com"
client.EnableSsl = True
Try
client.Send(msg)
Catch ex As System.Net.Mail.SmtpException
Console.WriteLine(ex.Message)
Console.ReadLine()
End Try
End Sub
End Class
lunes, 8 de marzo de 2010
¡Esperen un minuto: aún no han oído nada!
domingo, 7 de marzo de 2010
Lectura de archivos PDF con VB.NET
- FontBox-0.1.0-dev.dll
- IKVM.GNU.Classpath.dll
- IKVM.Runtime.dll
- PDFBox-0.7.3.dll
El código para pasar el contenido de un PDF a un string sería el siguiente:
Imports org.pdfbox.util
Imports org.pdfbox.pdmodel
Imports System.TypeInitializationException
...
Dim documento As PDDocument
Dim stripper As PDFTextStripper
Dim texto As String
Try
documento = PDDocument.load("C:\informe.pdf")
stripper = New PDFTextStripper()
texto = stripper.getText(documento)
Catch ex As TypeInitializationException
Finally
End Try
martes, 2 de marzo de 2010
Casas con joroba
lunes, 1 de marzo de 2010
El poder de la escasez
domingo, 28 de febrero de 2010
Simulador de Sistema Solar
Antes de iniciar la simulación el usuario puede cambiar la dirección e intensidad de los vectores que marcarán la trayectoria de cada cuerpo. Tened cuidado y no los estrelleis!
Nueva York como si fuera de juguete
viernes, 26 de febrero de 2010
Qué llega la ciclogénesis explosiva
jueves, 25 de febrero de 2010
Cómo simular miniaturas
Aqui podemos ver una galería de fotografías aplicando esta técnica.
Avances en realidad aumentada
martes, 23 de febrero de 2010
¡Qué rápido se pasa el tiempo!
Esto se debe a un neurotransmisor llamado dopamina. La cantidad de dopamina hace que se tenga una percepción del tiempo transcurrido diferente. Si se incrementa esta sustancia el reloj interno del cerebro irá más rápido; si se decrementa irá más lento. Esto significa que a medida que envejecemos el nivel de dopamina es menor y por lo tanto nos parece que el tiempo transcurre más rápido (la persona de 70 años creía que habían pasado 3 minutos y realmente habían pasado 4!)
lunes, 22 de febrero de 2010
Google comercializará energía
jueves, 18 de febrero de 2010
Curiosas formas de generar energía
Otra curiosa y parecida forma de generación de energía es utilizando la pista de baile de una discoteca. En este caso también las pisadas y saltos de la gente al bailar pueden generar energía para por ejemplo alimentar la iluminación de la sala.
miércoles, 17 de febrero de 2010
Hola Android!
Una vez descargada y descomprimido el paquete lo ejecutamos.
package com.HelloWorld.com;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class HelloWorld extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
TextView tv = new TextView(this);
tv.setText("Hola Mundo");
setContentView(tv);
}
}
martes, 16 de febrero de 2010
En busca del placer
Hay un ejemplo en "El Cerebro del Rey" que me ha llamado la atención. Como ya he comentado, la práctica del sexo es una de entre las muchas actividades placenteras que nos proporcionan endorfinas. Es más, popularmente placer se asocia única y exclusivamente a la práctica de esta actividad. Supongamos una pareja practicando sexo en el campo. Una vez finalizan, al relajarse bajará su nivel de endorfinas y empezarán a notar las incomodidades del campo: piedras, roces, hormigas, etc.. En definitiva la bajada de sus niveles de endorfinas hará que se acerquen al dolor.
lunes, 15 de febrero de 2010
Dos curiosidades sobre Darwin
jueves, 11 de febrero de 2010
Emulador de Android sin SDK de Google
Automatizando procesos con SetCronJob
miércoles, 10 de febrero de 2010
Automatizando procesos con 000webhost.com
Por ejemplo, con el siguiente ejemplo ejecutaríamos un script llamado cron.php cada 5 minutos pasadas las 20 horas todos los días.
En este caso el script enviaría unicamente un email.
$para = "mi_email@gmail.com";
$asunto = "TEST CRON";
$cuerpo = "-";
mail($para, $asunto, $cuerpo)
Arritmias explicadas de forma sencilla
Fuente: www.nottingham.ac.uk
Identificar los diversos tipos de arritmias es complejo, requiere mucha experiencia. El siguiente video nos explica de una manera muy gráfica, a modo de baile, algunas de las arritmias más comunes. Al final incluso, el profesor escenifica una ineficaz desfibrilación.
- Normal sinus rhythm
- PAC's: Conducted and non-conducted
- Isolated PVC's
- First Degree AV Block
- 4:3 wenckebach second degree av block
- Right bundle branch block
- Left bundle branch block
- Left anterior hemiblock
- Atrial flutter whit 3:1 conduction
- Atrial fibrillation (totally uncontroladed)
- PVC->Ventricular taquicardia->flutter->fibrillation->defibrillation
- Unsucessful defibrilation
martes, 9 de febrero de 2010
Base de datos meteorológica
Por ejemplo, el histórico de Madrid lo podemos encontrar aqui. Otro aspecto interesante es la posibilidad de exportar la información en formato CSV. Para Madrid, la información en formato CSV para el día 30/06/2009 vendría en:
domingo, 7 de febrero de 2010
Entrelazamiento cuántico
viernes, 5 de febrero de 2010
Simulador de Control Eléctrico
Fuente imagen: REE
La página web de REE cuenta con un juego educativo en el que el jugador simula estar al mando del CECOEL. Para ello tiene que ir ordenando que suba o bajen energía las plantas según la demanda (es decir, modificando el programa), solucionar incidencias (líneas que se caen, etc..). El jugador pierde en el momento en que se produce un apagón en la ciudad. Un juego muy divertido para el que le guste este mundillo de la electricidad.
Fuente: 1
jueves, 4 de febrero de 2010
Stephen Wiltshire: dibujando de memoria
Se le diagnosticó autismo a la edad de tres años. A los cinco años empezó a interesarse por el dibujo y fue esta su vía de comunicación. También se le ha diagnosticado el síndrome del sabio. Dicha patología no está reconocida medicamente, pero se diagnostica a personas con autismo que poseen unas habilidades mentales específicas. En el caso de Stephen, la memoria.
El siguiente video muestra un experimento en el que Stephen dibuja con todo lujo de detalles una panorámica de Roma. Para ello tan solo la estuvo observando poco más de cuarenta y cinco minutos desde un helicóptero. El nivel de detalle del dibujo que posteriormente realizó es espectacular.
Creación de PDF desde VB.NET
Dim documento As iTextSharp.text.Document
Dim escritor As iTextSharp.text.pdf.PdfWriter
Dim tabla As iTextSharp.text.Table
Dim texto As iTextSharp.text.Phrase
Dim celda As iTextSharp.text.Cell
Dim imagen As iTextSharp.text.Image
Dim f, c As Integer
documento = New iTextSharp.text.Document(iTextSharp.text.PageSize.A4.Rotate, 50, 50, 50, 50)
escritor = iTextSharp.text.pdf.PdfWriter.GetInstance(documento, New FileStream("test.pdf", FileMode.Create))
tabla = New iTextSharp.text.Table(14, 25)
imagen = iTextSharp.text.Image.GetInstance(System.AppDomain.CurrentDomain.BaseDirectory & "\logo.png")
imagen.SetAbsolutePosition(100, documento.PageSize.Height - 100)
imagen.ScalePercent(30)
For f = 0 To 24
For c = 0 To 13
texto = New iTextSharp.text.Phrase("(" & f & "," & c & ")")
celda = New iTextSharp.text.Cell(texto)
tabla.AddCell(celda, f, c)
Next
Next
documento.Open()
documento.Add(imagen)
documento.Add(tabla)
documento.Close()
martes, 2 de febrero de 2010
Paseando entre el Guernica de Picasso
lunes, 1 de febrero de 2010
Posición en tiempo real de los satélites artificiales
Lo podemos ver en el siguiente video:
sábado, 30 de enero de 2010
De dónde viene la electricidad
- Parques eólicos: Molinos que transforman la fuerza del viento en electricidad.
- Termosolares: Transforman el calor del sol en electricidad.
- Fotovoltaica: Transforman la luz solar en electricidad.
- Cogeneración: Generan electricidad a partir del calor residual producido en un proceso industrial.
- Térmica: Transforma el calor producido al quemar combustibles fósiles (gas, carbón y petroleo)
- Nucleares: Transforman el calor producido en la fisión de los núcleos de uranio.
- Hidroeléctricas: Transforman la fuerza del agua producida al verterla desde una altura.
En la siguiente infografía podemos ver una explicación muy amena y didactica de dónde viene la electricidad que consumimos.
jueves, 28 de enero de 2010
Alternativa a programas conocidos
Buena página que en algún momento nos servirá de ayuda.
Montando un servicio web con NuSOAP
En la entrada de hoy vamos a ver como montar un sencillo servicio web en un servidor web basado en PHP+MySQL.
En primer lugar necesitaremos un servidor con dichas características. Hay multitud de opciones de hosting, tanto gratuitas como de pago. Elegimos una gratuita, concretamente http://www.000webhost.com/ Llevo utilizando este servicio gratuito durante algún tiempo y la verdad es que no me ha dado nunca ningún problema.
El servicio web que vamos a montar utiliza una librería de PHP llamada nuSOAP. Puede ser descargada libremente desde http://sourceforge.net/projects/nusoap/
La estructura de ficheros que subiremos al servidor será la siguiente:
servicioweb.php
nusuaop/Todo el contenido de la librería descargada
Veamos finalmente el contenido del fichero servicioweb.php
configureWSDL('servicename', 'urn:servicename','','document');
//********************************************************************************
//Registramos la función
//********************************************************************************
myRegister($server,'saludar',
array(
'in' => array(
'nombre' => 'xsd:string'
),
'out' => array(
'resultado' => 'xsd:string'
)
));
if (!isset($HTTP_RAW_POST_DATA)) $HTTP_RAW_POST_DATA = implode("\r\n", file('php://input'));
$server->service($HTTP_RAW_POST_DATA);
function myRegister(&$server,$methodname,$params)
{
$server->register($methodname,$params["in"],$params["out"],
'urn:servicename', // namespace
$server->wsdl->endpoint.'#'.$methodname, // soapaction
'document', // style
'literal', // use
'N/A' // documentation
);
}
//********************************************************************************
// Definimos la función
//********************************************************************************
function saludar($nombre){
return "Hola ".$nombre;
}
die();
?>
El servicio recibe una cadena de texto (un nombre) y devuelve otra cadena de texto ("Hola " + nombre) Por último ya solo queda probarlo. La url donde ha quedado publicado el webservice sería algo así: www.midominio.com/servicioweb.php?wsdl
Existen aplicaciones para probar servicios web (clientes SOAP genéricos). Uno muy completo que suelo utilizar es soapUI. Otro también interesante y mucho más liviano es WebserviceStudio (este no lo he probado mucho).
miércoles, 27 de enero de 2010
Tecnologías de televisión 3D
martes, 26 de enero de 2010
El avispón gigante de Japón
Fotografía: Takehiko Kusama - http://www.muenster.org/hornissenschutz/vespa-mandarinia.htm
lunes, 25 de enero de 2010
La puntuación del tenis
Con el paso del tiempo las reglas fueron adaptándose: el punto 45 era muy costoso de decir por lo que degeneró a 40 (mucho más rápido de pronunciar!), el partido pasó a tener varios sets, las mujeres jugarían 3 y los hombres 5, para ganar un juego habría que ganar por dos puntos de diferencia, con lo que si se llegaba a empate a 45 se diría "a dos!" ("a deux", adaptado por los ingleses como "deuce"), etc..
Y estas son algunas curiosidades de la puntuación del tenis, posteriormente también adoptado por el padel.
domingo, 24 de enero de 2010
Viaje al pasado
http://www.archive.org/
Gracias a este sitio he podido regresar a 1998 y revivir como era la página de Google:
o la de Altavista de 1996:
sábado, 23 de enero de 2010
Plantillas de entregables
En el siguiente sitio se pueden encontrar multitud de ejemplos y plantillas para todos estos tipos de documentos.
Los clasifica de dos maneras: por actividad y por secuencia sugerida, según la metodología clásica de desarrollo de software.
viernes, 22 de enero de 2010
Gráficas con Zedgraph en VB.NET
Dim area As RectangleF
Dim x As Double
Dim y As Double
Dim puntos = New PointPairList()
'Limpiar gráfica
area = GRAFICA.GraphPane.Rect
GRAFICA.GraphPane = New GraphPane(area, "Mi gráfica", "x", "y")
'Informar los puntos
For x = 1 to 24
y = miFuncion(x)
puntos.Add(x, y)
Next
'Crear y añadir la curva
Dim curva As LineItem = GRAFICA.GraphPane.AddCurve("Gráfica", puntos, Color.Blue, SymbolType.None)
curva.Line.Width = 3.0
'Refrescar la gráfica
GRAFICA.GraphPane.Fill = New Fill(Color.White, Color.FromArgb(220, 220, 255), 45.0F)
GRAFICA.AxisChange()
GRAFICA.Refresh()
Control del consumo eléctrico
Así, según cuanto trabajo hayamos hecho al mes con la capacidad que se nos suministra, así nos facturarán. Si por ejemplo el consumo ha sido de 100 kWh estando el precio del kWh fijado en 0.08 € el coste será de 8 €.
Con este nuevo sistema que os muestro a continuación llamado Watt Diet Sub, es posible visualizar en tiempo real cuanta energía estamos consumiendo y así de alguna manera controlar el coste.
jueves, 21 de enero de 2010
El precio del tomate
Fuente: Domino público
Considerando el tomate, el primer eslabón de la cadena es el agricultor. Este recolecta la hortaliza llevándola a la comercializadora, una gran nave donde se almacenarán los tomates provenientes de muchos agricultores. Allí se darán cita los corredores, que serán los compradores.
Los corredores son los intermediarios de los mayoristas y comprarán según este les dictamine. La compra se realiza mediante una subasta de tipo holandesa. En este tipo el precio comienza con un valor alto para ir progresivamente descendiendo hasta que un participante lo considere aceptable.
Una vez que se realiza la compra es transportada al mercado mayorista, como por ejemplo Mercamadrid. Allí los mayoristas reciben la mercancia que los corredores le compraron y la venderán a los minoristas (los fruteros, tenderos, representantes de supermercados, etc..). Estos se pasearán por este gran "hipermercado" y comprarán lo que mejor les convenga según sus márgenes. Por último, estos venderán a los consumidores estableciendo un PVP (en algunos casos venderán a otros minoristas!!)
Como vemos el precio del producto alimenticio se va encareciendo en cada eslabón ya que se van acumulando costes (de almacenaje en la comercializadora, de transporte, de márgenes, etc..). En definitiva, el precio se puede incrementar desde el origen hasta el destino en más de un 200%.
Veamos un ejemplo según los precios de la semana 2 de 2010 (podeis verlos aqui): el tomate liso para ensalada tiene un precio en origen de 0.56 €/Kg; en el mercado mayorista se incrementa a 1.13 €/Kg; finalmente el precio en destino se eleva a 1.99 €/Kg, un 255% respecto del origen! Estos precios que acabamos de ver son medias ponderadas, lo que supone que algunos establecimientos tendrán un PVP mayor..
miércoles, 20 de enero de 2010
Generador on-line de diagramas de secuencia
CLIENTE->SERVIDOR: compruebaConexion()
activate CLIENTE
note right of CLIENTE: Si hay conexión devuelve la hora del sistema
SERVIDOR-->CLIENTE: 10:05:00 (OK)
CLIENTE->SERVIDOR: calculaDesfase()
note right of CLIENTE
Se mira la hora del cliente y se calcula
Desfase = hSERVIDOR - hCLIENTE
end note
martes, 19 de enero de 2010
Simulación de Monte Carlo
Supongamos la simulación del lanzamiento de una moneda. Sabemos que la probabilidad de que salga cara es 1/2. Utilizando la función RANDOM de un ordenador podemos simular dicho lanzamiento, asignando el segmento [0, 0.5] al suceso CARA y (0.5, 1] al suceso CRUZ.
Algo similar podríamos podríamos hacer para simular el lanzamiento de un dado.
Otra aplicación es la estimación de valores (como los dos ejemplos que hemos visto). Generalmente esta aplicación se suele utilizar en el campo de la economía.