jueves, 25 de noviembre de 2010

ArrayList versus LinkedList

Tenía pendiente asimilar un conocimiento básico y esencial para la programación sana siempre orientada al rendimiento. Usualmente cuando ocupo una lista en el código que trabajo siempre utilizo un "ArrayList" y la verdad tenía en la caja del olvido la implementación de "LinkedList". ¿Cuáles son las principales diferencias entre estas dos implementaciones?

Ventajas del ArrayList

1. El ArrayList utiliza internamente un arreglo para el almacenamiento. Esto lo hace particularmente más rápido para los accesos aleatorios tipo "obtener(#n)".

Desventajas del ArrayList

1. El ArrayList es más lento para agregar/borrar elementos en el inicio o en el medio de la colección debido a que todos los elementos (localizados antes o después) deben ser copiados adelante o atrás.

Grafiquémolo de esta manera. Digamos que tengamos esta lista con 6 elementos.


Y queremos insertar otro elemento antes del segundo.


Para poder agregar ese elemento, internamente la lista tiene que copiar todos los elementos del índice 1 a 5 una posición adelante.

2. Similar al problema anterior, el ArrayList tiene problemas de rendimiento cuando el arreglo interno se llena ya que tiene que crear uno arreglo más grande y copiar todos los elementos del arreglo viejo al nuevo.

Ventajas del LinkedList

1. La LinkedList (o lista enlazada) es lo opuesto a el ArrayList. Es más eficiente para agregar/borrar elementos en el medio o al comienzo de la colección. Si alguna vez les tocó programar a pie una estructura de datos de lista enlazada, recordarán que en la clase nodo se guarda un puntero o referencia al siguiente elemento.




En este caso lo que se hace para insertar un nodo en el medio es crea un nuevo nodo apuntando al elemento de adelante (->c) y se actualiza el puntero/referencia del nodo anterior para que apunte al nuevo nodo (->b).





2. Como no tiene restricciones de tamaño, la LinkedList no tiene los problemas de crecimiento del ArrayList.

Desventajas del LinkedList

1. Los accesos aleatorios son costosos en un LinkedList ya que en el peor de los casos tiene que recorrer toda la lista para llegar al elemento solicitado.

En resumen podemos decir que deberíamos utilizar el ArrayList solo si sabemos que vamos a tener muchos accesos aleatorios, en caso contrario usamos el LinkedList por defecto.

miércoles, 17 de noviembre de 2010

Joomla | Templates | jdoc:inculde tipo módulo

Finalmente pude descifrar la funcionalidad de la etiqueta jdoc:inculde en una plantilla de joomla, específicamente con el tipo módulo. Parece dificil de creer, pero tenia buen rato escarbando en Joomla para descubrir de dónde provenía el contenido que se estaba desplegando en el encabezado de arriba:


<div id="header_r">
<div id="logo"></div>
<jdoc:include type="modules" name="top" />
</div>


Resulta que debía ir a la parte de módulos y buscar por posición que en este caso es "top" (arriba).



El módulo asignado a esa posición es "Newsflash" que se alimenta de un feed de Joomla. Al final simplemente lo deshabilite usando el icono que aparece en la columna "Enabled".

martes, 2 de noviembre de 2010

Catalogo de tablas



Quisiera hacer eco de un artículo que me encontré buscando algunos estilos para aplicar a una tabla HTML. Mi intención no es hacer plagio del artículo sino el de dejar disponible de una forma más clara los CSS que utilizó en cada una de las tablas.

Ciertamente el estilo por defecto de una tabla HTML es demasiado crudo; muy feo se ve en mi opinión. Aún cuando agregamos algunos detalles básicos como bordes, las tablas que usualmento le aplico mi estilo terminan siendo aún menos vistosas.

Si descubro más estilos llamativos los anexaré a esta entrada de blog.

0. Default

DECOCTHEXBINSymbolHTML NumberHTML NameDescription
4806030001100000&#48;-cero
4906131001100011&#49;-uno
5006232001100102&#50;-dos
5106333001100113&#51;-tres
5206434001101004&#52;-cuatro
5306535001101015&#53;-cinco
5406636001101106&#54;-seis
5506737001101117&#55;-siete
5607038001110008&#56;-ocho
5707139001110019&#57;-nueve

1. Minimalista Horizontal

DECOCTHEXBINSymbolHTML NumberHTML NameDescription
4806030001100000&#48;-cero
4906131001100011&#49;-uno
5006232001100102&#50;-dos
5106333001100113&#51;-tres
5206434001101004&#52;-cuatro
5306535001101015&#53;-cinco
5406636001101106&#54;-seis
5506737001101117&#55;-siete
5607038001110008&#56;-ocho
5707139001110019&#57;-nueve

  
#minimalista-horizontal {
background:none repeat scroll 0 0 #FFFFFF;
border-collapse:collapse;
font-family:"Lucida Sans Unicode","Lucida Grande",Sans-Serif;
font-size:12px;
margin:20px;
text-align:left;
width:480px;
}
#minimalista-horizontal th {
border-bottom:2px solid #6678B1;
color:#003399; font-size:14px;
font-weight:normal;
padding:10px 8px;
}
#minimalista-horizontal td {
color:#666699;
padding:9px 8px 0;
}

2. Minimalista Vertical

DECOCTHEXBINSymbolHTML NumberHTML NameDescription
4806030001100000&#48;-cero
4906131001100011&#49;-uno
5006232001100102&#50;-dos
5106333001100113&#51;-tres
5206434001101004&#52;-cuatro
5306535001101015&#53;-cinco
5406636001101106&#54;-seis
5506737001101117&#55;-siete
5607038001110008&#56;-ocho
5707139001110019&#57;-nueve


#minimalista-vertical {
border-collapse:collapse;
font-family:"Lucida Sans Unicode","Lucida Grande",Sans-Serif;
font-size:12px; margin:30px 30px 30px 15px;
text-align:left; width:480px;
}
#minimalista-vertical th {
border-bottom:2px solid #6678B1;
border-left:30px solid #FFFFFF;
border-right:30px solid #FFFFFF;
color:#003399;
font-size:14px;
font-weight:normal;
padding:8px 2px;
}
#minimalista-vertical td {
border-left:30px solid #FFFFFF;
border-right:30px solid #FFFFFF;
color:#666699; padding:12px 2px 0;
}

3. Caja

DECOCTHEXBINSymbolHTML NumberHTML NameDescription
4806030001100000&#48;-cero
4906131001100011&#49;-uno
5006232001100102&#50;-dos
5106333001100113&#51;-tres
5206434001101004&#52;-cuatro
5306535001101015&#53;-cinco
5406636001101106&#54;-seis
5506737001101117&#55;-siete
5607038001110008&#56;-ocho
5707139001110019&#57;-nueve

  
#caja {
border-collapse:collapse;
font-family:"Lucida Sans Unicode","Lucida Grande",Sans-Serif;
font-size:12px; margin:20px;
text-align:left; width:480px;
}
#caja th {
background:none repeat scroll 0 0 #B9C9FE;
border-bottom:1px solid #FFFFFF;
border-top:4px solid #AABCFE;
color:#003399;
font-size:13px;
font-weight:normal;
padding:8px;
}
#caja td {
background:none repeat scroll 0 0 #E8EDFF;
border-bottom:1px solid #FFFFFF;
border-top:1px solid transparent;
color:#666699;
padding:8px;
}

4. Zebra Horizontal

DECOCTHEXBINSymbolHTML NumberHTML NameDescription
4806030001100000&#48;-cero
4906131001100011&#49;-uno
5006232001100102&#50;-dos
5106333001100113&#51;-tres
5206434001101004&#52;-cuatro
5306535001101015&#53;-cinco
5406636001101106&#54;-seis
5506737001101117&#55;-siete
5607038001110008&#56;-ocho
5707139001110019&#57;-nueve

  
#zebra-hor {
border-collapse:collapse;
font-family:"Lucida Sans Unicode","Lucida Grande",Sans- Serif;
font-size:12px;
margin:20px;
text-align:left;
width:480px;
}
#zebra-hor th {
color:#003399;
font-size:14px;
font-weight:normal;
padding:10px 8px;
}
#zebra-hor .odd {
background:none repeat scroll 0 0 #E8EDFF;
}
#zebra-hor td {
color:#666699;
padding:8px;
}

5. Zebra Vertical

DECOCTHEXBINSymbolHTML NumberHTML NameDescription
4806030001100000&#48;-cero
4906131001100011&#49;-uno
5006232001100102&#50;-dos
5106333001100113&#51;-tres
5206434001101004&#52;-cuatro
5306535001101015&#53;-cinco
5406636001101106&#54;-seis
5506737001101117&#55;-siete
5607038001110008&#56;-ocho
5707139001110019&#57;-nueve


#zebra-ver {
border-collapse:collapse;
font-family:"Lucida Sans Unicode","Lucida Grande",Sans-Serif;
font-size:12px;
margin:0 20px 20px;
text-align:left;
width:480px;
}
.zebrav-odd {
background:none repeat scroll 0 0 #EFF2FF;
}
.zebrav-even {
background:none repeat scroll 0 0 #E8EDFF;
}
#zebra-ver th {
border-left:1px solid #FFFFFF;
border-right:1px solid #FFFFFF;
color:#003399;
font-size:14px;
font-weight:normal;
padding:12px 15px;
}
#zebra-ver td {
border-left:1px solid #FFFFFF;
border-right:1px solid #FFFFFF;
color:#666699;
padding:8px 15px;
}

6. Enfasis en una Columna

DECOCTHEXBINSymbolHTML NumberHTML NameDescription
4806030001100000&#48;-cero
4906131001100011&#49;-uno
5006232001100102&#50;-dos
5106333001100113&#51;-tres
5206434001101004&#52;-cuatro
5306535001101015&#53;-cinco
5406636001101106&#54;-seis
5506737001101117&#55;-siete
5607038001110008&#56;-ocho
5707139001110019&#57;-nueve


#una-col {
border-collapse:collapse;
font-family:"Lucida Sans Unicode","Lucida Grande",Sans-Serif;
font-size:12px;
margin:20px;
text-align:left;
width:480px;
}
#una-col th {
color:#003399;
font-size:14px;
font-weight:normal;
padding:12px 15px;
}
#una-col td {
border-top:1px solid #E8EDFF;
color:#666699;
padding:10px 15px;
}
.una-col-primero {
background:none repeat scroll 0 0 #D0DAFD;
border-left:10px solid transparent;
border-right:10px solid transparent;
}

7. Periódico


DECOCTHEXBINSymbolHTML NumberHTML NameDescription
4806030001100000&#48;-cero
4906131001100011&#49;-uno
5006232001100102&#50;-dos
5106333001100113&#51;-tres
5206434001101004&#52;-cuatro
5306535001101015&#53;-cinco
5406636001101106&#54;-seis
5506737001101117&#55;-siete
5607038001110008&#56;-ocho
5707139001110019&#57;-nueve

 
#periodico {
border:1px solid #6699CC;
border-collapse:collapse;
font-family:"Lucida Sans Unicode","Lucida Grande",Sans-Serif;
font-size:12px;
margin:25px;
text-align:left;
width:480px;
}
#periodico th {
border-bottom:1px dashed #6699CC;
color:#003399;
font-size:14px;
font-weight:normal;
padding:12px 17px;
}
#periodico td {
color:#666699;
padding:7px 17px;
}
#periodico tbody tr:hover td {
background:none repeat scroll 0 0 #D0DAFD;
color:#333399;
}

8. Esquinas Redondeadas

DECOCTHEXBINSymbolHTML NumberHTML NameDescription
4806030001100000&#48;-cero
4906131001100011&#49;-uno
5006232001100102&#50;-dos
5106333001100113&#51;-tres
5206434001101004&#52;-cuatro
5306535001101015&#53;-cinco
5406636001101106&#54;-seis
5506737001101117&#55;-siete
5607038001110008&#56;-ocho
5707139001110019&#57;-nueve

  
#esqui-red{
border-collapse:collapse;
font-family:"Lucida Sans Unicode","Lucida Grande",Sans-Serif;
font-size:12px;
margin:20px;
text-align:left;
width:480px;
}
#esqui-red th {
background:none repeat scroll 0 0 #B9C9FE;
color:#003399;
font-size:13px;
font-weight:normal;
padding:8px;
}
#esqui-red td {
background:none repeat scroll 0 0 #E8EDFF;
border-top:1px solid #FFFFFF;
color:#666699;
padding:8px;
}
#esqui-red thead th.izq-sup-red{
background:url("http://lh4.ggpht.com/_v3apX6VDfXE/TLSJZ5qwz3I/AAAAAAAACqY/zERYECxr4MI/s800/izq.png") no-repeat scroll left -1px #B9C9FE;
}
#esqui-red thead th.der-sup-red{
background:url("http://lh4.ggpht.com/_v3apX6VDfXE/TLSJZ--wwSI/AAAAAAAACqU/J9px5JDxpto/s800/der.png") no-repeat scroll right -1px #B9C9FE
}
#esqui-red td.pie-izq-red{
background:url("http://lh6.ggpht.com/_v3apX6VDfXE/TLSJZsJrI1I/AAAAAAAACqQ/z33JlZ1UY1E/s800/abaj-izq.png") no-repeat scroll left bottom #E8EDFF;
}
#esqui-red td.pie-der-red{
background:url("http://lh6.ggpht.com/_v3apX6VDfXE/TLSJZUR0oaI/AAAAAAAACqM/f4wHl9pC2S8/s800/abaj-der.png") no-repeat scroll right bottom #E8EDFF;
}

9. Fondo

DECOCTHEXBINSymbolHTML NumberHTML NameDescription
4806030001100000&#48;-cero
4906131001100011&#49;-uno
5006232001100102&#50;-dos
5106333001100113&#51;-tres
5206434001101004&#52;-cuatro
5306535001101015&#53;-cinco
5406636001101106&#54;-seis
5506737001101117&#55;-siete
5607038001110008&#56;-ocho
5707139001110019&#57;-nueve


#fondo-img {
border-collapse:collapse;
font-family:"Lucida Sans Unicode","Lucida Grande",Sans-Serif;
font-size:12px;
margin:20px;
text-align:left;
width:480px;
}

#fondo-img tbody {
background:url("http://lh4.ggpht.com/_v3apX6VDfXE/TLYdjwOCLHI/AAAAAAAACtc/N5XvPTuPGgw/s144/blurry.jpg") no-repeat scroll 330px 59px transparent;
}
#fondo-img th {
color:#333399;
font-size:14px;
font-weight:normal;
padding:12px;
}
#fondo-img td {
background:url("http://lh5.ggpht.com/_v3apX6VDfXE/TLYe_4-TVLI/AAAAAAAACtg/ufEzmKhd1as/s144/back.png") repeat scroll 0 0 transparent;
border-top:1px solid #FFFFFF;
color:#666699;
padding:9px 12px;
}
#fondo-img tr:hover td {
background:none repeat scroll 0 0 transparent;
color:#333399;
}

10. Fondo Celda /Gradiente

DECOCTHEXBINSymbolHTML NumberHTML NameDescription
4806030001100000&#48;-cero
4906131001100011&#49;-uno
5006232001100102&#50;-dos
5106333001100113&#51;-tres
5206434001101004&#52;-cuatro
5306535001101015&#53;-cinco
5406636001101106&#54;-seis
5506737001101117&#55;-siete
5607038001110008&#56;-ocho
5707139001110019&#57;-nueve

 
#fondo-celda-a {
border-collapse:collapse;
font-family:"Lucida Sans Unicode","Lucida Grande",Sans-Serif;
font-size:12px;
margin:20px;
text-align:left;
width:480px;
}
#fondo-celda-a th {
background:url("http://lh6.ggpht.com/_v3apX6VDfXE/TM7sknvxPkI/AAAAAAAAC4o/3_NYPzI5gEA/s800/fondo-celda-encabezado-a.png") repeat-x scroll 0 0 #B9C9FE;
border-bottom:1px solid #FFFFFF;
border-top:2px solid #D3DDFF;
color:#003399; font-size:13px;
font-weight:normal;
padding:8px;
}
#fondo-celda-a td {
background:url("http://lh5.ggpht.com/_v3apX6VDfXE/TM7skspggpI/AAAAAAAAC4s/bhcOrrAlOh0/s800/fondo-celda-cuerpo-a.png") repeat-x scroll 0 0 #E8EDFF;
border-bottom:1px solid #FFFFFF;
border-top:1px solid #FFFFFF;
color:#666699; padding:8px;
}
#fondo-celda-a tr:hover td {
background:url("http://lh6.ggpht.com/_v3apX6VDfXE/TM7tjLijOwI/AAAAAAAAC4w/QGhOuk9bSQQ/s800/fondo-celda-cuerpo-hover-a.png") repeat-x scroll 0 0 #D0DAFD;
color:#333399;
}

11. Fondo Celda /Rayas

DECOCTHEXBINSymbolHTML NumberHTML NameDescription
4806030001100000&#48;-cero
4906131001100011&#49;-uno
5006232001100102&#50;-dos
5106333001100113&#51;-tres
5206434001101004&#52;-cuatro
5306535001101015&#53;-cinco
5406636001101106&#54;-seis
5506737001101117&#55;-siete
5607038001110008&#56;-ocho
5707139001110019&#57;-nueve
 
#fondo-celda-b {
background:url("http://lh4.ggpht.com/_v3apX6VDfXE/TNAyUq4d4MI/AAAAAAAAC40/Zqg-Q1z8Ug8/s800/rayas.png") repeat scroll 0 0 transparent; border-collapse:collapse;
font-family:"Lucida Sans Unicode","Lucida Grande",Sans-Serif;
font-size:12px;
margin:20px;
text-align:left;
width:480px;
}
#fondo-celda-b thead tr {
background:url("http://lh5.ggpht.com/_v3apX6VDfXE/TNAy0fIX8wI/AAAAAAAAC44/ETyoHn4c_7w/s800/rayas-encabezado.png") repeat scroll 0 0 transparent;
}
#fondo-celda-b th {
border-bottom:1px solid #FFFFFF;
color:#003399; font-size:13px;
font-weight:normal;
padding:8px;
}
#fondo-celda-b td {
border-bottom:1px solid #FFFFFF;
border-top:1px solid transparent;
color:#666699; padding:8px;
}
#fondo-celda-b tr:hover td {
background:none repeat scroll 0 0 #FFFFFF; color:#333399;
}

12. Fondo Celda /Púrpura

DECOCTHEXBINSymbolHTML NumberHTML NameDescription
4806030001100000&#48;-cero
4906131001100011&#49;-uno
5006232001100102&#50;-dos
5106333001100113&#51;-tres
5206434001101004&#52;-cuatro
5306535001101015&#53;-cinco
5406636001101106&#54;-seis
5506737001101117&#55;-siete
5607038001110008&#56;-ocho
5707139001110019&#57;-nueve


#fondo-celda-c {
background:url("http://lh4.ggpht.com/_v3apX6VDfXE/TNBcHLeH00I/AAAAAAAAC48/tz3EN33kwQo/s800/patron.png") repeat scroll 0 0 transparent;
border-collapse:collapse;
font-family:"Lucida Sans Unicode","Lucida Grande",Sans-Serif;
font-size:12px;
margin:20px;
text-align:left;
width:480px;
}
#fondo-celda-c thead tr {
background:url("http://lh3.ggpht.com/_v3apX6VDfXE/TNBdHhUcIdI/AAAAAAAAC5A/9d-X1BifAzI/s800/patron-encabezado.png") repeat scroll 0 0 transparent;}
#fondo-celda-c th {
border-bottom:1px solid #FFFFFF;
color:#003399;
font-size:13px;
font-weight:normal;
padding:8px;
}
#fondo-celda-c td
{
border-bottom:1px solid #FFFFFF;
border-top:1px solid transparent;
color:#666699; padding:8px;
}
#fondo-celda-c tbody tr:hover td {
background:none repeat scroll 0 0 #CDCDEE; color:#333399;
}