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
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)

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());
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
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);
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
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:
Lo demás es coser y cantar
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);
HotLink Fucker
Hace varios meses publiqué este HotLinkFucker, pero se fué con la base de datos anterior... y para dejar claro que sigo vivo
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(); ?>
Supermercado con conciencia social
Es increíble lo que se encuentra en la sección de licores!
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.
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



