Blog de Nakpanzer

15Dic/09

JCalendar y JDateChooser, un ejemplo práctico.

Extrañamente siento un Déjà vu al escribir esta entrada, puesto que en varias ocasiones ha sido eliminada de este blog por problemas externos a mi persona. No tengo backup, así que escribo este artículo por terecera vez :P

JCalendar es un componente desarrollado por Kai Toedter, y sin duda alguna de gran utilidad a la hora de desarrollar aplicaciones de escritorio en Java, ya que en el JDK no se incluye ningún componente similar a este (el SDK de .Net incluye uno, y muy bueno)

jdc0

Lo primero que debemos hacer es agregarlo al classpath y agregarlo a la clase en la que estamos trabajando (yo uso Netbeans, puedes agregarlo también a la paleta) ademas de agregar otras clases que son de ayuda para el manejo de fechas.

import com.toedter.calendar.JDateChooser;
import java.util.Date;
import java.util.Calendar;
import java.text.SimpleDateFormat;

En este ejemplo llamaré jdc al JDateChooser.

JDateChooser jdc = new JDateChooser();

Por defecto, se crea un componente que inicia vacío y con MM-dd-yyyy para el formato de la fecha. Esto se puede cambiar para que inicie con la fecha del sistema, y con un formato de fecha larga ;)

Calendar cal = Calendar.getInstance();
jdc.setDateFormatString("EEEE d 'de' MMMM 'de' yyyy");
jdc.setDate(cal.getTime());

jdc1

O una fecha corta con barras diagonales:

jdc.setDateFormatString("dd/MM/yyyy");

Esto es lo más fácil, pero lo que realmente nos interesa de este componente, mas que darle formato a las fechas, obtener la fecha introducida por el usuario y guardarla en una base de datos o darle formato a ésta para mostrarla posteriormente en un informe por ejemplo. Por desgracia, cuando tuve que buscar información del manejo de éste, solo encontré un método rústico y rudimentario para obtener la fecha, pero existe otro método (el canónico): Simplemente se toma la fecha y se le da formato :xD: es mucho mas cómodo que obtener año, mes y día, y en base a eso construir la fecha.

Date fecha = jdc.getDate();
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
sdf.format(fecha);

jdc2

Si solo necesitamos el año de la fecha seleccionada, se puede dar formato a esta para mostrar solo el año, o tomar únicamente el año del componente:

jdc.getCalendar().get(Calendar.YEAR);

Imagínense formar una fecha en base a este método. Saludos ;)

12Dic/09

Netbeans y CodeIgniter

Mi IDE favorito, para uso general, es Netbeans. Recientemente salió la versión 6.8 que incluye varios cambios con respecto a la versión anterior, sin duda para los desarrolladores web es una gran noticia la inclusión del soporte para el framework Symphony, siendo el primero (y único por el momento) en tener soporte por parte de Netbeans.

Hace varios meses que uso CodeIgniter y resentía la forma en la que Netbeans interactua con los frameworks PHP. Sin embargo en este blog leo como lograr que incluya efectivamente la documentación para el autocompletado, el post ya tiene su tiempo pero extrañamente hace 3 meses busqué como hacerlo y no lo encontré. Es tan simple como crear un archivo cualquiera.php e incluir el sig. código:

<?php
/**
 * @property CI_Loader $load
 * @property CI_Form_validation $form_validation
 * @property CI_Input $input
 * @property CI_Email $email
 * @property CI_DB_active_record $db
 * @property CI_DB_forge $dbforge
 * @property CI_Table $table
 * @property CI_Session $session
 * @property CI_FTP $ftp
 * ....
 */
Class Controller {
}
?>

En el blog se menciona que debes agregarlo al "Inlcude Path" del proyecto pero no es necesario si el archivo esta en la raíz del proyecto. Lo cual no afecta el funcionamiento de CodeIgniter, y fácilmente puedes obtener esto en el proyecto:

codei

Lo demás es coser y cantar :P

15Oct/09

Probabilidad, variable conjunta

Hace unos días tuve que hacer un programa que calcule covarianzas y coeficientes de de relación de funciones de probabilidad continuas, de variable conjunta, también calcula la esperanza de las funciones de probabilidad marginales. Si alguien me entiende le servirá xD

El programa está hecho para matlab pero debería funcionar en Octave, sin modificación alguna.

syms('temp','h','x','y','x1','x2','y1','y2','f','g');
 
clc;
 
fprintf(1, 'Introduzca la función en términos de "x" y "y": ');
h = input(''); %h(x,y)
 
fprintf(1, 'Introduzca los límites en x\n');
fprintf(1, 'Límite inferior: ');
x1 = input('');
fprintf(1, 'Límite superior: ');
x2 = input('');
 
fprintf(1, 'Introduzca los límites en y\n');
fprintf(1, 'Límite inferior: ');
y1 = input('');
fprintf(1, 'Límite superior: ');
y2 = input('');
 
f = int(h,y,y1,y2); %f(x)
fprintf(1, 'f(x) = ');
disp(f);
 
g = int(h,x,x1,x2); %g(y)
fprintf(1, 'g(y) = ');
disp(g);
 
%independencia
if f*g == h
    fprintf(1, 'Las variables son independientes\n');
else
    fprintf(1, 'Las variables no son independientes\n');
end
 
%E(x)
ex = int(int(x*h,x,x1,x2),y,y1,y2);
fprintf(1, 'E(x) = ');
disp(ex);
 
%E(x^2)
ex2 = int(int(x^2*h,x,x1,x2),y,y1,y2);
% fprintf(1, 'E(x^2) = ');
% disp(ex2);
 
%E(y)
ey = int(int(y*h,y,y1,y2),x,x1,x2);
fprintf(1, 'E(y) = ');
disp(ey);
 
%E(y^2)
ey2 = int(int(y^2*h,y,y1,y2),x,x1,x2);
% fprintf(1, 'E(y^2) = ');
% disp(ey2);
 
%E(xy)
exy = int(int(x*y*h,x,x1,x2),y,y1,y2);
% fprintf(1, 'E(xy) = ');
% disp(exy);
 
%Covarianza
covar = exy - ex*ey;
fprintf(1, 'Cov(x,y) = ');
disp(covar);
 
%Varianzas
var_x = ex2 - ex^2;
fprintf(1, 'Var(x) = ');
disp(var_x);
var_y = ey2 - ey^2;
fprintf(1, 'Var(y) = ');
disp(var_y);
 
%Coeficiente de relación
coe = covar/sqrt(var_x*var_y);
fprintf(1, 'Coeficiente de relación = ');
disp(coe);
4Oct/09

HotLink Fucker

Hace varios meses publiqué este HotLinkFucker, pero se fué con la base de datos anterior... y para dejar claro que sigo vivo :P vuelvo a publicarlo

<?php
 
	function no_valida(){
		$ancho = 300;
		$alto = 100;
		$imagen  = imagecreate($ancho, $alto);
		$texto = 'La imagen no existe o no está disponible.'; //texto a mostrar
		$color_fondo = imagecolorallocate ($imagen, 255, 255, 255);
		$color_texto = imagecolorallocate($imagen, 0, 0, 0); //texto color negro
		imagefilledrectangle($imagen, 0, 0, $ancho, $alto, $color_fondo);
		imagestring($imagen, 3, 5, $alto/2-10, $texto, $color_texto);
		header('Content-Type: image/png');
		imagepng($imagen);
		imagedestroy($imagen);
	}
 
	$extensiones = array('jpg','jpeg','gif','png','bmp');
	$extensiones = '['.implode($extensiones, '|').']';
 
	if($_GET['id']){
		$imagen = $_GET['id'];
		$imagen = preg_replace('|[^A-Za-z0-9_\.]|i', '', $imagen);
		$ext = explode('.', $imagen);
		$ext = $ext[count($ext)-1];
 
		if(preg_match($extensiones, strtolower($ext))){
			if(!$abrir = @fopen($imagen, 'r')){
				no_valida();
			} else{
				header('Content-Type: image/'.strtolower($ext));
				echo fread($abrir, filesize($imagen));
				fclose($abrir);
			}
		}else no_valida();
	}else no_valida();
 
?>
Etiquetado con: , , , , Sin comentarios
31Ago/09

Supermercado con conciencia social

Imagen0062

Imagen0061

Es increíble lo que se encuentra en la sección de licores!

Archivado en: General Sin comentarios
24Ago/09

Mi decisión

He dicidido no restaurar la base de datos antigua, ya que no se pierden posts muy valiosos excepto por algunos de GNU/Linux y una que otra utilidad...

Talvez con el tiempo saque uno de ahí, lo edite y lo vuelva a publicar pero por el momento así se va a quedar.

;)

Archivado en: General Sin comentarios
22Ago/09

Hola mundo! xD

He reinstalado mi blog xD perdi la base de datos mas reciente pero tengo una octubre del año pasado hahahaha... no es mucha la diferencia :P

Archivado en: General Sin comentarios