Noticias Weblogs Foros Wiki Código

Meta-Info

¿Que es?

Planeta Código es un agregador de weblogs sobre programación y desarrollo en castellano. Si eres lector te permite seguirlos de modo cómodo en esta misma página o mediante el fichero de subscripción.

rss subscripción

Sponsors

Puedes utilizar las siguientes imagenes para enlazar PlanetaCodigo:
planetacodigo

planetacodigo

Si tienes un weblog de programación y quieres ser añadido aquí, envíame un email solicitándolo.

Idea: Juanjo Navarro

Diseño: Albin

Picando Código

Usuarios de Windows

Agosto 31st, 2008 - [Enlace local]

Les dejo una interpretación libre de un diálogo bastante interesante:

JA: ¿Se supone que tendríamos que estar haciendo respaldos?
JS: Sí.
JA: Okei.
JS: Estás diciendo que no estás haciendo nada en este momento.
JA: Bueno, de hecho sí, actualmente respaldamos la base de datos cada noche, pero no se transmite a ningún lado.
JS: Está en el mismo disco duro con todo lo demás, ni siquiera lo estás transmitiendo...
JA: Por supuesto, porqué no, somos como usuarios de Windows, no conocemos algo mejor.

Original:

JA:  We're supposed to be doing backups?
JS: Yeah.
JA: Okay.
JS: So you're saying you're not doing anything right now.
JA: Well, actually we are, we actually do backup the database everynight but it's not transmitted anywhere.
JS: It's on the same hard drive with all the other, you're not even transmitting it to...
JA: Of course, why not, we’re like Windows users, we don’t know any better.

Jeff Atwood y Joel Spolsky - StackOverflow Podcast # 19
StackOverflow 1337

» Leer más, comentarios, etc...

Variable not found

… de nuevo al timón

Agosto 31st, 2008 - [Enlace local]

Chace Park Helmsman (by Robert Landau)Pues sí, era sólo hace un mes par de días cuando dejaba el blog a la deriva mientras tomaba unas merecidísimas vacaciones ;-). Y la verdad es que no me puedo quejar, todo ha salido según lo previsto: familia, viajes, mucho descanso... sin duda unas vacaciones inolvidables. Incluso he aprovechado para leer a los clásicos, que nunca viene mal.

Pero, como siempre, todo lo bueno se acaba y aquí estamos de nuevo, sin indicios de síndrome postvacacional, con las pilas bien cargadas y listos para iniciar una nueva temporada en Variable Not Found, donde espero contar, como hasta ahora, con vuestra participación y apoyo.

Gracias por seguir por aquí. Nos vemos pronto.


Publicado en: www.variablenotfound.com.

» Leer más, comentarios, etc...

Picando Código

Nuevos cursos de programación en la Universidad de Código de Google

Agosto 31st, 2008 - [Enlace local]

Con el inicio de las clases en el hemisferio norte, Google agrega nuevos cursos en su Google Code University.

Google Code

Google Code University es un repositorio de material educativo incluyendo tutoriales, presentaciones, y videos enfocados enteramente a la ciencia de la computación. No solo es una colección de material educativo de alta calidad, sino que la mayor parte de los materiales están licenciados bajo Creative Commons, para permitir el reuso y modificación por educadores y estudiantes por igual.

Los nuevos materiales incluyen:

Hay mucho material, todo en inglés. Estuve descargando particularmente algo del material de Algoritmos de Princeton y Stanford. En Princeton cubren análisis, ordenamiento, eficiencia, árboles y hashing Stanford se enfoca en el análisis y aplicación. Seguramente este tipo de material le venga bien a la gente que está estudiando, y en mi caso, hacer algún repaso que nunca está de más.

» Leer más, comentarios, etc...

Navegapolis

Los conocimientos que andan buscando las empresas TIC

Agosto 31st, 2008 - [Enlace local]

graficaLos conocimientos más buscados por las empresas de tecnologías de las información y las cominicaciones son : Java, Extreme Programming e ITIL; y parece ser que en nuestra industria, la agilidad le va ganando terreno a los proceesos.

Estas son las conclusiones a las que llego, trasteando con el buscador de carrebuilder: uno de los mayores portales de empleo americanos, que descubría esta semana charl@ndo con José Carlos.

Gráfica de lenguajes de programación

 

» Leer más, comentarios, etc...

The New Cult of Dead Cow

Empresa vs Bug

Agosto 31st, 2008 - [Enlace local]

Como reaccionan los diferentes elementos de una empresa ante un .... BUG !!!

 

» Leer más, comentarios, etc...

The New Cult of Dead Cow

Abraza a un Programador

Agosto 31st, 2008 - [Enlace local]

 

» Leer más, comentarios, etc...

niko's mini factory

Links for 2008-08-30 [del.icio.us]

Agosto 31st, 2008 - [Enlace local]

» Leer más, comentarios, etc...

Picando Código

Picando Código en revista RedMensual

Agosto 31st, 2008 - [Enlace local]

La edición de setiembre de la revista online en PDF RedMensual incluye mi artículo “La historia de la navegación por pestañas en los navegadores web“.

Red Mensual

Red Mensual es una revista sobre Tecnología, sexo, videojuegos, motor e internet. La edición de setiembre incluye además artículos sobre Nanotecnología, virus informáticos, cybersexo, entre otros.

Pueden suscribirse a su feed RSS para enterarse de nuevas ediciones, y visitar su sitio web para descargar los primeros dos números.

» Leer más, comentarios, etc...

Jorge Dieguez Blog

Desarrollando Contenidos e-Learning - 2

Agosto 30th, 2008 - [Enlace local]

Esta mes he comenzado una serie de post sobre los proyectos de desarrollo de contenidos e-Learning.

Mi idea es describir los siguientes aspectos de los proyectos de desarrollo de contentando:

En el apartado de equipo he comentado los perfiles profesionales que tiene que componer un equipo de desarrollo de contenidos. Hoy comentare algunas de las actividades habituales de este tipo de proyectos, como y quien las desarrolla y cuales son los entregables que se obtienen.

Fases del Proyecto
image

Como cualquier otro proyecto, el de desarrollo de contenidos comprende las siguientes fases:

Vamos a ver cada uno de estas fases en detalle:

Fase de Definición:

Durante esta fase se realizaran las siguientes actividades:

Es muy importante reflejar por escrito todos los acuerdos alcanzados con el cliente(por medio de Acta).
También es importantísimo en todo momento informar al cliente y al equipo del proyecto de los posibles riesgos del proyecto(cualquier actividad humana tiene riesgos) y como prevenirlos(Gestión de riesgos).

image

Fase de Diseño:
Durante esta fase se realizan actividades de diseño de los distintos ámbitos del proyecto como:

Fase de Desarrollo y Producción:

En esta fase todos los documentos de diseño se transforman en recursos que compondrán el contenido e-Learning: Paginas HTML, Películas Flash, Gráficos, Sonidos, etc.
Una vez todos los elementos estén disponibles, el contenidos se maqueta, se estructura y se integra, el resultado de esto es la versión beta lista para su revisión.
image
La revisión y validación es una parte importantísima de esta fase y hay que tener e cuenta que muchas veces ocupa mas tiempo de lo previsto:-)
Muchos proyectos de desarrollo de contenidos tiene un alto grado de modificación de contenidos(por deseo del cliente) y por ello es imprescindible buscar/desarrollar herramientas que soporten una forma fácil y ágil de modificar los contenidos ya desarrollados.

Algunos clientes se sienten mucho mas cómodos con la posibilidad de realizar validaciones parciales, en ese caso es muy importante tener claro quien y como valida y reporta correcciones  por parte del cliente.

Fase de Entrega e Implantación:

Cuando ya hemos acabado las interminables validaciones y correciones:-) solo tenemos que asegurarnos de formalizar la entrega del producto acordado con el cliente, a partir de ese momento realizaremos la puesta de este contenido en el ambiente que el cliente precise(una Plataforma de Gestión de Formación).
Es un buen momento para revisar con el cliente y con el equipo las lecciones aprendidas que nos permitan hacerlo mejor en los siguientes proyectos:-)

image

Método de trabajo

Para asegurar la calidad del producto,optimizar la eficiencia de uso de los medios y recursos, así como minimizar cualquier riesgo o contratiempo es necesario formalizar y procedimentar a la medida de lo posible las distintas actividades que componen un proyecto de Desarrollo de Contenidos.

De esta forma y con el tiempo el equipo creara una metodología de gestión de proyecto, de desarrollo/producción, etc.

A continuación comento algunas actividades en las que es imprescindible  métodos de trabajo.

Recogida de requerimientos :
El objetivo es accesoria al cliente en las primeras reuniones y poder recoger los requerimientos que se ajusten al máximo a sus necesidades.
Es útil crear Actas tipo y Formularios o Checklist de requerimientos.

Registro/Histórico del proyecto y la documentación:
¿Como almacenamos la información del proyecto?. ¿Tenemos histórico de todo lo que nos pide el cliente? ¿tardamos en localizar la información que se precisa para desarrollar el proyecto?
En este punto es importante definir organización de carpetas y donde y como se guardan todos los documentos, correos,etc.
El equipo debe ser muy disciplinado y hacer acta de todas las reuniones internas y externas(nunca se sabe cuando un Acta puede ayudar en una situación tensa con el cliente).

image

Diseño y Producción basada en Platillas:
Tipificar pantallas, ejercicios, elemento comunes, buscar elementos recurrentes. Todo esto nos permitirá ser rápidos, eficientes y rentables así como mejorar la calidad del producto.
image

Plan de pruebas y registro de incidencias:
Es muy importante contar con algún método "formal" de realizar la revisión, detectar los errores y pasarlos para su corrección al equipo de producción.

Cada tipo de recurso de los contenidos e-learning se puede validar por medio de un procedimiento estándar(por ejemplo: los elementos de navegación, calculo de puntuación, comportamiento del menú).

Cada revisión que se realiza debe contar con un registro de las pruebas(un documento de Word) que se han hecho y su resultado, también deben registrarse las incidencias detectadas.

Aceptación de los entregables y Cierre del proyecto

Es muy importante acordar con el cliente como se realiza la aceptación del trabajo y el cierre del proyecto. Algunas veces los proyectos se "eternizan" y son difíciles de cerrar y por ello este punto es mejor tenerlo bien definido, así evitaremos discusiones y disgustos,:-)

» Leer más, comentarios, etc...

niko's mini factory

Links for 2008-08-29 [del.icio.us]

Agosto 30th, 2008 - [Enlace local]

» Leer más, comentarios, etc...

Blog de Federico Varela

El rol del Analista Programador

Agosto 29th, 2008 - [Enlace local]

Algunos roles en el área informática tienen responsabilidades distintas según el proyecto y la cantidad de recursos. Por ejemplo el rol del Analista Programador es uno de los mas "elásticos", en algunos equipos hace tareas de arquitecto, programador, administrador de bases de datos y analista de negocio; mientras que en otros está mas acotado a la programación. Éste abanico de posibilidades

» Leer más, comentarios, etc...

PHP Senior

Taller POO/PHP5: importes, dólares y pesos, particularmente México

Agosto 29th, 2008 - [Enlace local]

Estimados, tengan cuidado los que envían por Western Union, particularmente si lo hacen desde México (aunque pueden estar en la misma situación Venezuela y algún país más).

Se ve que la inexperiencia de algunos empleados de Western Union puede jugarles malas pasadas y hacerles perder dinero innecesariamente.

Hay países que no permiten enviar al extranjero dólares, por lo consiguiente y para esos casos, soliciten que envíen 150 pesos argentinos (luego ustedes tienen que pagar aparte el costo de transferencia, como siempre).

No existen los "dólares argentinos" o son dólares o son pesos argentinos ;-), de lo contrario van a tener que enviar dos veces y les va a salir muy caro el costo de transferencia.

Creo que a futuro, luego que haga un resumen de toda la experiencia (de aquí a un par de meses), va a convenir para todos (por los costos, velocidad y seguridad) usar un sistema como Paypal.

Dentro de poco más novedades.

» Leer más, comentarios, etc...

Nuevos Programadores

Como filtrar las filas de un DataTable usando un RowFilter (VB.Net)

Agosto 29th, 2008 - [Enlace local]

Más de una vez me he encontrado con un formulario en el cual muestro datos con un DataGridView, pero los datos a mostrar son demasiados, entonces es bueno agregar algún filtro para minimizar la cantidad de registros mostrados.

Para hacer esto hay 2 opciones, la más lenta sería recargar los datos desde la base aplicando filtros y la más rápida, ya que funciona en memoria es filtrar los datos que ya estamos mostrando en pantalla. Para realizar esto, en este ejemplo utilizaremos un DataTable con datos de alumnos el cual filtraremos dinámicamente.

Para empezar con este ejemplo necesitaremos un Form que tenga un CheckBox para indicar si se debe aplicar el filtro o no, un ComboBox para seleccionar el campo a filtrar, un TextBox para ingresar el valor del filtro y un DataGrid para mostrar los datos.

Lo primero que haremos será llenar el ComboBox con el nombre de las columnas de nuestro DataTable:

Private Sub LlenarComboColumnas()
	If TodosAlumnos IsNot Nothing Then ' TodosAlumnos es el DataTable
		For Each c As DataColumn In TodosAlumnos.Columns
			Me.cmbCampo.Items.Add(c.ColumnName)
		Next
	End If
End Sub

Luego agregaremos un método que se encargará de manejar 3 eventos: CheckBox.CheckedChanged, ComboBox.SelectedIndexChanged y TextBox.TextChanged. En éste método se optará por aplicar el filtro o mostrar todos los registros nuevamente:

Private Sub AplicarFiltro(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkFiltro.CheckedChanged, cmbCampo.SelectedIndexChanged, txtValor.TextChanged
	cmbCampo.Enabled = chkFiltro.Checked ' Habilitar o Deshabilitar el ComboBox y TextBox
	txtValor.Enabled = chkFiltro.Checked
 
	If chkFiltro.Checked Then
		Filtrar()
	Else
		Me.cmbCampo.SelectedIndex = 0 ' Resetear el filtro
		Me.txtValor.Text = String.Empty
		AlumnosFiltrados = TodosAlumnos.Copy() ' Mostrar todos los datos nuevamente
		Me.DataGridView1.DataSource = AlumnosFiltrados.DefaultView
	End If
End Sub

Ahora nos resta filtrar, lo que haremos en este caso, ya que el ejemplo es simple, será chequear si el tipo de datos correspondiente a la columna seleccionada es String usaremos como condición LIKE y agregaremos un comodín (*) al final del valor, si en cambio es Integer usaremos = y chequearemos que el valor ingresado sea numérico.

Private Sub Filtrar()
	Try
		AlumnosFiltrados = TodosAlumnos.Copy()
 
		If chkFiltro.Checked AndAlso Me.cmbCampo.SelectedIndex >= 0 AndAlso Not String.IsNullOrEmpty(Me.txtValor.Text) Then
			Dim columna As String = Me.cmbCampo.SelectedItem.ToString()
			Dim condicion As String = "="
			Dim valor As String = txtValor.Text
			' Si no se obtienen todos los datos no se aplica el filtro
			If AlumnosFiltrados.Columns(columna).DataType Is GetType(String) Then
				condicion = "LIKE"
				valor = String.Format("'{0}*'", valor) ' Comodín al final para obtener los valores que empiezan con 'valor'
			ElseIf AlumnosFiltrados.Columns(columna).DataType Is GetType(Integer) Then
				If Not IsNumeric(valor) Then ' Chequear que sea numérico
					Throw New ArgumentException("El valor ingresado no es correcto. Debe ingresar un valor numérico.")
				End If
			End If
 
			Me.AlumnosFiltrados.DefaultView.RowFilter = String.Format("{0} {1} {2}", columna, condicion, valor)
		End If
 
		Me.DataGridView1.DataSource = Me.AlumnosFiltrados.DefaultView ' Mostramos los datos filtrados
	Catch ex As Exception
		MostrarExcepcion(ex)
	End Try
End Sub

Para probar este ejemplo descarga el código fuente (VS2008).

Artículos Relacionados

» Leer más, comentarios, etc...

Infectogroovalistic

AC/DC - Rock and Roll train

Agosto 29th, 2008 - [Enlace local]

Ya esta disponible el nuevo single del próximo album de AC/DC.
Se puede escuchar en: www.acdcrocks.com.

Espero que la gira llegue a Argentina =)

» Leer más, comentarios, etc...

diaztorres.com

Comienza el concurso mifAIRcontest’08

Agosto 29th, 2008 - [Enlace local]

Me complace anunciar el inicio del primer concurso promovido por MadeInFlex: mifAIRContest’08.

La idea nació el 31 de Marzo en el pasado “onAIRTour Europe 2008”, desde entonces y cuando nuestro trabajo nos lo ha permitido, lo hemos estado cocinando con todo cariño para vosotros y… no creáis que lleva pocos ingredientes y sí muchos los cocineros que han intervenido.

Para hacerlo aún más jugoso hemos hecho coincidir la entrega de premios en el tercer MIF OnSite, esta vez tendrá lugar en Madrid y os recomiendo no perdéroslo porque las charlas preparadas van a ser magníficas.

Aquí tenéis el enlace a la noticia:

Logotipo mifAIRcontest 08

» Leer más, comentarios, etc...

{ Radamanthys }

Transferir el foco desde un JTextArea

Agosto 29th, 2008 - [Enlace local]

al recibir un ‘Tab Key’

jtextarea

El uso de los JTextArea es muy util emplearlos para que el usuario ingrese una cantidad relativamente grande de informacion y/o cuando se require darle un tratamiento especial, como por ejemplo: desplegar texto en varias lineas.

Sin embargo, debido a estas caracteristicas reacciona distinto ante el evento de captura de pulsacion de teclas(caso concreto: la tecla de tabulacion), la cual en ciertos escenarios es necesario cambiar este comportamiento.

Esto se puede hacer de varias maneras, una es llamando al metodo setFocusTraversalKeys() al cual se le pasan 2 parametros : un entero, para el cual utilizamos unas constantes que indican el sentido en que se transfiere el foco, y en el segundo parametro indicamos el conjunto de teclas.

  Set<AWTKeyStroke> setKeys = new HashSet<AWTKeyStroke>();
 
  /** 
   * Reciba o pase el foco al dispararse el evento,
   * cual sea pulsada la tecla de tabulacion 
   */
  setKeys.add(AWTKeyStroke.getAWTKeyStroke(KeyEvent.VK_TAB, 0));
 
...
 
  /**
   * Para esta instancia:
   * le indico que reciba el foco (KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS),
   * y que lo devuelva (KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS)
   * solo para el conjunto de teclas que estableci en setKeys.
   */
  txtArea1.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, setKeys);
  txtArea1.setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, setKeys);

Si usamos NetBeans para diseñar la interfaz de usuario, veremos que desde el editor del IDE no podremos editar el codigo correspondiente a la inicializacion de la instancia, pero evidentemente si lo podemos hacer cerrando NB y editando el codigo fuente o bien, sin salir del NB, damos click derecho sobre el control y vamos a Customize Code.

Mas informacion: http://www.chuidiang.com

ShareThis

» Leer más, comentarios, etc...

Picando Código

[Oferta de Trabajo] - Programador Senior con experiencia en Java EE

Agosto 29th, 2008 - [Enlace local]

Les dejo una oferta de trabajo para Maldonado, en Urantia Commerce:

Empresa de Maldonado selecciona Desarrolladores Senior con experiencia en Java EE para importante proyecto a nivel internacional. Se ofrece estabilidad laboral en excelente ambiente de trabajo, buena remuneración (acorde a la experiencia) y posibilidades de crecimiento.

Urantia Commerce

Enviar curriculum detallando experiencia, conocimientos y expectativa salarial: rrhh@urantiacommerce.com

Trabajo desde oficina, no Freelance.
Para Trabajar en Maldonado, Uruguay
Horario 9-17 hs. Lunes a Viernes
Puestos Vacantes 2
Sueldo Entre $ 25000 y $ 30000
Nivel de Estudio Secundaria Completa
Formación Universitaria Informática
Idiomas Inglés
Conocimientos Java, PHP, SQL, XML

» Leer más, comentarios, etc...

Php y otras yerbas - Programación

Alegrías de Geek: CDF para Chi-cuadrado calculado y por simulación

Agosto 29th, 2008 - [Enlace local]

Como me toca trabajar haciendo estadísticas de bases de datos variadas, siempre había tenido la idea de programar en ruby (mi lenguaje de preferencia) las funciones de formateo y estadísticas que con más frecuencia utilizaba. En particular, me interesaba implementar las funciones de estimación de parámetros para muestras estratificadas y por conglomerado, que ningún paquete estadístico que conozca ofrece fácilmente.

Hace un par de semanas comencé a trabajar en el paquete estadístico, el cual llamé 'RubySS'. Ya tengo listas la clase Vector (similar a la Vector de la biblioteca estándar) y Dataset, con una extensión para calcular las distribuciones acumuladas para las distribuiones chi, t y normal, entre otras. Utiliza Ruby/GSL si está disponible, para acelerar los cálculos y, como corresponde, casi todas las funciones tienen su test de regresión correspondiente.

Si quieren mirar el código o bajar una versión de prueba, háganlo en http://code.google.com/p/ruby-statsample/

Lo que me tiene contento ahora es una simulación que permite observar como el cálculo de chi cuadrado en 1000 muestras aleatorias de una población compuesta por tres tipos de ítemes (grados de libertad = 2) es casi idéntica a la distribución calculada teóricamente.

El código es

  1.  require File.dirname(__FILE__)+'/../lib/rubyss'
  2.  require 'rbgsl'
  3.  require 'rubyss/resample'
  4.  require 'distributions/cdf'
  5.  require 'matrix'
  6.  ideal=Matrix[[30,30,40]]
  7.  tests=2000
  8.  monte=RubySS::Resample.repeat_and_save(tests) do
  9.   observed=[0,0,0]
  10.   (1..100).each do |i|
  11.   r=rand(100)
  12.   if r<30
  13.   observed[0]+=1
  14.   elsif r<60
  15.   observed[1]+=1
  16.   else
  17.   observed[2]+=1
  18.   end
  19.   end
  20.   (RubySS::matrix_chi_square(Matrix[observed],ideal)*100).round / 100.to_f
  21.   # /
  22.  end
  23.  
  24.  
  25.  
  26.  v=monte.to_vector(:scale)
  27.  x=[]
  28.  y=[]
  29.  y2=[]
  30.  
  31.  prev=0
  32.  
  33.  v.frequencies.sort.each{|k,v|
  34.   x.push(k)
  35.   y.push(prev+v)
  36.   prev=prev+v
  37.   cdf_chi=CdfDistributions.chi_square_p(k,2)
  38.   y2.push(cdf_chi*tests)
  39.  
  40.  }
  41.  GSL::graph(GSL::Vector.alloc(x), GSL::Vector.alloc(y),GSL::Vector.alloc(y2),"-T png -C -L 'cdf calculado y por montecarlo' > montecarlo_cdf.png")

» Leer más, comentarios, etc...

Una sinfonía en C#

IList la interface de escritura

Agosto 29th, 2008 - [Enlace local]

IList la interface de escritura

En el post anterior hablé acerca de IEnumerable, una linda interface que está en toda colección que se precie de serlo posee, pero que no nos deja más que leer, si lo que necesitamos es poder escribir la interface es IList, vamos a ver su firma

public interface IList : ICollection, IEnumerable
{
    int Add(object value);
    void Clear();
    bool Contains(object value);
    int IndexOf(object value);
    void Insert(int index, object value);
    void Remove(object value);
    void RemoveAt(int index);

    bool IsFixedSize { get; }
    bool IsReadOnly { get; }
    object this[int index] { get; set; }
}

Como vemos IList implementa IEnumerable o sea que la podemos iterar con foreach, y también implementa ICollection, veámos de qué se trata:

public interface ICollection : IEnumerable
{
    void CopyTo(Array array, int index);

    int Count { get; }
    bool IsSynchronized { get; }
    object SyncRoot { get; }
}

ICollection para qué sirve?

Esta interface tiene métodos para iterar y sincronizar, los métodos para iterar los hereda de IEnumerable y ya los conocemos, vamos a detenernos en los otros

CopyTo: sirve para copiar el contenido de la clase que implementa ICollection al Array que se pasa como parámetro a partir de la posición del Array que se indica en index

IsSynchonized: indica si la colección se encuentra implementado "Threat safe"

SyncRoot: devuelve un objeto para sincronizar la colección en un ambiente multi hilo, para hacer un lock

Ahora sí, IList

IList tiene los métodos necesarios para poder agregar elementos, verificar que existan, la posición de un elemento determinado, etc.

Dónde encontramos IList?

La implementación más sencilla de IList se encuentra en la clase ArrayList, por lo tanto podemos concluir que ArrayList es la colección más sencilla que podemos utilizar y que seguramente vamos a utilizar con mayor frecuencia (esto es un poco mentira por generics pero eso lo vamos a ver más adelante)

ArrayList también implementa mucho métodos que no pertenecen a ninguna interface, algunos muy interesantes son

Sort: para ordenar la lista, con un IComparer por defecto y una sobrecarga para suministrarle uno propio.

BinarySearch: para búsqueda binaria, es decir, busca de a mitades.

ConvertAll: permite convertir todos los elemento de un tipo a otro, el converter se lo suministramos nosotros

El resto de los métodos son bastante autodescriptivos, hasta la próxima.

 

Leonardo Micheloni

» Leer más, comentarios, etc...

Una sinfonía en C#

Error 1935.An error occurred during the installation of assembly - HRESULT: 0×80070020

Agosto 28th, 2008 - [Enlace local]

Error 1935.An error occurred during the installation of assembly

Estaba yo intentando instalar el Visual Studio 2008 porque lo había quitado de mí máquina por motivos que no vienen al caso y me encontré con el siguiente error "Error 1935.An error occurred during the installation of assembly...." y el nombre de un aseembly y a continuación "HRESULT: 0x80070020", esto no hubiera sido tan grave sino fuera porque me apareción casi al final de la instalación que no es de las más cortas que he visto, y además a continuación le llevó más tiempo hacer el rollback, pero bueno, el mayor problema es que no tenía idea de qué pasaba, luego de "bucear" por Intenet llegué a la conclusión que se trataba de un error al intentar registrar una DLL (porque por supuesto intenté otra vez y pasó lo mismo con otro nombre de DLL) entre muchos consejos se encontraban desactivar los AdAware, los Antivirus, etc. eso no hubiera sido raro sino fuera porque no tengo nada de eso en la máquina, en fin, seguí buscando y encontré la solución....desactivar todos los servicios que no sean de Microsoft, entonces fui a ejecutar "msconfig" desactivé Procesar Archivo SYSTEM.INI y CARGAR ELEMENTO DE INICIO, luego fui a la solapa de servicio y seleccioné "Ocultar todos los servicios de Microsoft", desactivé todo lo que quedó, reinicié la máquina y santo remedio, pude instalar, pero no sin quedarme con la duda de qué pasaba.

Lo importante es el HRESULT

Lo importante para encontrar la solución fue el HRESULT del error, por supuesto que no lo anoté, para encontrarlo fui al directoril temporal de mi usuario "ejecutar->%temp%" y busqué un archivo txt con un nombre del estilo err_vs_algo y ahí estaba la información, porque el error 1935 es muy genérico en realidad, lo que importa, como dije antes es el HRESULT.

Saludos.

Leonardo Micheloni

» Leer más, comentarios, etc...

MadeInFlex

Comienza el concurso mifAIRContest’08

Agosto 28th, 2008 - [Enlace local]

Me complace anunciar el inicio del primer concurso promovido por MadeInFlex: mifAIRContest'08.

La idea nació el 31 de Marzo en el pasado “onAIRTour Europe 2008”, desde entonces y cuando nuestro trabajo nos lo ha permitido, lo hemos estado cocinando con todo cariño para vosotros y... no creáis que lleva pocos ingredientes y sí muchos los cocineros que han intervenido.

Para hacerlo aún más jugoso hemos hecho coincidir la entrega de premios en el tercer MIF OnSite, esta vez tendrá lugar en Madrid y os recomiendo no perdéroslo porque las charlas preparadas van a ser magníficas.

En el siguiente enlace tenéis toda la información sobre las bases del concurso así como de los premios.

MIF AIR CONTEST ‘08

Anímate a participar, aunque no ganes ningún premio toda la comunidad Flex te lo agracederá puesto que todos los fuentes de las aplicaciones presentadas serán publicados para así poder aprender todos un poquito más.

Recordar que MIF lo hacemos entre todos y sin vuestra colaboración no sería posible realizar este tipo de concursos y eventos.

» Leer más, comentarios, etc...

Una sinfonía en C#

Colecciones en .NET, IEnumerator, IEnumerable.

Agosto 28th, 2008 - [Enlace local]

 

Las colecciones son uno de los recursos más utilizados (sino el más) dentro del mundo de .net, es importante comprender bien su funcionamiento y su potencial, ya que una decisión correcta nos puede facilitar mucho el trabajo y hasta tener impácto en el rendimiento de nuestra aplicación.

En .net 2.0 existen tres tipos de colecciones:

Vamos a comenzar por el principio, por las colecciones normales, y para ser más básico aún vamos a ver la interface que todos usan.

Con ustedes IEnumerator

 Esta interface está hasta en la sopa, todas las colecciones de .net la utilizan y es importante comprender cómo funciona, el bucle foreach (uno de los más grandes inventos de la época) también y la interface IEnumerable la base de Linq, entonces vamos a analizarla

public interface IEnumerator
{
    object Current { get; }
    bool MoveNext();
    void Reset();
}

La idea es que la clase que implemente IEnumerator posee una conjunto de elemento de un tipo (una lista, un array, un vector) y los métodos de IEnumerator me permite acceder a esta lista de una manera estándar.

Se va la segunda IEnumerable

IEnumerator no sirve de mucho sin su fiel aliado, IEnumerable, esta interface es muy sencilla y no hace más que devolver en su único método la interface IEnumerator, veamos su firma

public interface IEnumerable 
{ 
    IEnumerator GetEnumerator(); 
}

 Exáctamente esto es lo que tenemos que implementar si queremos que una clase nuestra se pueda iterar con un bucle foreach, vamos a ver un pequeño ejemplo.

[TestFixture]
public class Class1
{
    [Test]
    public void ProbarLista()
    {
        ContenedorLista lista = new ContenedorLista(new object[]{1,2,3,4,5,6,7,8,9,0});

        foreach (int nro in lista)
        {
            NUnit.Core.TestContext.Out.WriteLine(nro);
        }

        Console.ReadLine();
    }
}
public class ContenedorLista: IEnumerable
{
    IEnumerator _istaPropia;

    public ContenedorLista(object[] lista)
    {
        _istaPropia = new ListaPropia(lista);
    }

    public IEnumerator GetEnumerator()
    {
        return _istaPropia;
    }
}

public class ListaPropia : IEnumerator
{
    object[] _lista;
    int _posicion;

    public ListaPropia(object[] lista)
    {
        _lista = lista;
        this.Reset();
    }

    public object Current 
    {
        get 
        {
            return _lista[_posicion];
        }
    }

    public bool MoveNext()
    {
        if (++_posicion < _lista.Length)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    public void Reset()
    {
        _posicion = -1;
    }
}

Mágico sin duda, bueno por ahora esta primer entrega sobre colecciones termina, la próxima vamos a ver otras interfaces, saludos.

Leonardo Micheloni

» Leer más, comentarios, etc...

design-nation.blog/es

Keep Your Word ya está disponible pirateado

Agosto 28th, 2008 - [Enlace local]

kyw_cracked.png

Espero que entiendan que no pase la respuesta con el link a la descarga...

Sigo pensando lo que pensaba hace unos meses. Sigo creyendo que no merece la pena dejar de invertir tiempo y esfuerzo en mejorar la aplicación para dedicarlo a jugar al ratón y al gato durante un tiempo indefinido.

Y, honestamente, un poquito sí que se me ha hinchado el ego...

» Leer más, comentarios, etc...

Navegapolis

Empresas con visión

Agosto 28th, 2008 - [Enlace local]

visiónQué risa al acordarnos con unos amigos, de la cara del Director General cuando le preguntaron por la visión de su empresa, y se vió en el brete de definirla.

¿Visión?. ¡Vaya cosas tienen estos consultores encorbatados!, debió pensar. ¡Pues qué visión vamos a tener: ganar dinero!.

Se trataba de la "empresa de informática" especialista en disparar a todo lo que se mueve. Igual daba que se hablara de telefonía IP, seguridad, modificar un programa de contabilidad en Visual Basic, hacer una página web o una animación tridimensional...

» Leer más, comentarios, etc...

avemundi, blog de un micro-isv » Desarrollo de software

compilación condicional

Agosto 28th, 2008 - [Enlace local]

La compilación condicional es una característica de los lenguajes que usan preprocesador y permite incluir un determinado trozo de código en la compilación en función de una directiva de compilación.  En xHarbour podemos definir una directiva de compilación usando el flag -d al invocar al compilador, de esta manera:xharbour miprograma.prg -d__directiva__Dentro de nuestro programa usaremos la sentencia #ifdef para indicar que acción ejecutaremos en caso de tener definida la directiva de compilación:#ifdef __directiva__Accion1()#elseAccion2()#endifSi al compilar el programa tendremos definida la __directiva__ en el ejecutable unicamente se incluirá la llamada a Accion1(), mientras si no la tenemos definida sólo se incluirá la llamada a Accion2().La pregunta del millón es: ¿ en que difiere esto de usar una variable de nuestra clase aplicación o una variable global ? Pues que si hacemos esto estamos dejando rastro de lo que hacemos, en el ejecutable se incluye la sentencia condicional y se ejecuta cada vez que corre la aplicación. Con la compilación condicional no introducimos la sentencia condicional en el ejecutable, sino unicamente la acción deseada en función de si la directiva está o no presenteal compilar.Usando la compilación condicional es muy sencillo crear versiones distintas de un mismo programa con un mínimo esfuerzo, con la particularidad de que no dejamos ningún rastro en nuestro programa de que tenemos distintas versiones del mismo.

» Leer más, comentarios, etc...

Información legal y técnica