jueves, 17 de noviembre de 2011

TRADUCIR LAS MATEMÁTICAS EN CÓDIGO CON EJEMPLOS EN JAVA, LA RAQUETA, HASKELL Y PYTHON

Las estructuras matemáticas discretas son la base de la informática.

Estas estructuras son tan universales que la mayoría de los trabajos de investigación en la teoría de la computación, lenguajes de programación y los métodos formales de presentar los conceptos en términos de la matemática discreta en lugar de código.

El supuesto subyacente es que el lector sabe cómo traducir estas estructuras en un fiel cumplimiento de un programa de trabajo.

La falta de material que explica esta traducción frustra los forasteros.

Lo que profundiza la frustración es que cada modelo de lenguaje codifica estructuras discretas de una maneradistinta.

Muchas de las codificaciones son tan inmutables, estructuras de datos puramente funcional (incluso en los lenguajes imperativos), un tema que por desgracia omite muchos currículos de informática. Muchas bibliotecasestándar proporcionan sólo mutable versiones de estas estructuras de datos, lo que lleva inmediatamente a las trampas.

Okasaki clásico de estructuras de datos puramente funcional es una referencia esencial:






ATENCIÓN: MATEMÁTICAS NO TIENE EFECTOS SECUNDARIOS

Los recién llegados error fatal que al traducir las matemáticas en código es mutable utilizando estructuras de datos en la que sólo una estructura inmutable, estaba en lo cierto.

Las matemáticas no tiene efectos secundarios.

Las matemáticas no puede modificar el valor de una variable - ya sea global o local. No se puede mutar un elemento de una matriz. Y, una función matemática devuelve siempre el mismo valor para la misma entrada.

La traducción literal de las matemáticas en el código no puede contener los efectos secundarios.

Las matemáticas son un lenguaje puramente funcional.

Por supuesto, una vez que las limitaciones de una aplicación se entienden, por lo general es posible cambiar las estructuras de datos inmutables mutable de los lugares clave para lograr ahorros de rendimiento.

Sin embargo, a los efectos de creación de prototipos, que siempre es mejor comenzar con una aplicación directa, puramente funcional.

CONJUNTOS Y CONJUNTOS DE PODER

La prestación de un conjunto como el código suele ser un tipo, una colección de respaldo de un árbol de equilibrado o un mapa hash, o un predicado.

En matemáticas, un conjunto es una colección desordenada de elementos.

El conjunto vacío - - es un conjunto especial que no contiene elementos.

La sintaxis de los juegos de llaves es literal: {}. Por ejemplo, el conjunto {1,2,3} es el conjunto que contiene 1, 2 y 3.

La relación x S declara que el valor de x es un miembro del conjunto S.

Establece como tipos

Conjuntos infinitos suelen ser codificados como tipos.

(Por supuesto, algunos conjuntos finitos se codifican como tipo también.)

En algunos casos, un conjunto X se define como un subconjunto de otro conjunto Y:

  
X Y.
Esta relación subconjunto puede ser representada como sucesiones en un lenguaje como Java o Python, si estos juegos están destinados a ser los tipos:

la clase X se extiende Y {... }
Cuando un conjunto X se define como el conjunto potencia de otro conjunto Y:

X = P (Y) = 2Y,
entonces X e Y serán los tipos, y los miembros de X será colecciones.

CONJUNTOS COMO COLECCIONES

Cuando el contenido de un conjunto se calcula en tiempo de ejecución, a continuación, a menudo será una colección ordenada respaldado por una estructura como un árbol rojo-negro.

No es difícil de implementar un árbol de búsqueda puramente funcional, ordenado (pero no balanceada) en Java:

interface Ordered <T> {
  public boolean isLessThan(T that) ;
}

abstract class SortedSet<T extends Ordered<T>> {
  public abstract boolean isEmpty() ;
  public abstract boolean contains(T element) ;
  public abstract SortedSet<T> add(T element) ;

  public static final <E extends Ordered<E>> SortedSet<E> empty() {
    return new EmptySet<E>();
  }
}

final class EmptySet<T extends Ordered<T>> extends SortedSet<T> {
  public boolean isEmpty() {
    return true ;
  }

  public boolean contains(T element) {
    return false ;
  }

  public SortedSet<T> add(T element) {
    return new Node<T>(this,element,this) ;
  }

  public EmptySet() {
  }
}

final class Node<T extends Ordered<T>> extends SortedSet<T> {

  private final SortedSet<T> left ;
  private final T element ;
  private final SortedSet<T> right ;

  public boolean isEmpty() {
    return false ;
  }

  public Node(SortedSet<T> left, T element, SortedSet<T> right) {
    this.left = left ;
    this.right = right ;
    this.element = element ;
  }

  public boolean contains(T needle) {
    if (needle.isLessThan(this.element)) {
      return this.left.contains(needle) ;
    } else if (this.element.isLessThan(needle)) {
      return this.right.contains(needle) ;
    } else {
      return true ;
    }
  }

  public SortedSet<T> add(T newGuy) {
    if (newGuy.isLessThan(this.element)) {
      return new Node<T>(left.add(newGuy),this.element,right) ;
    } else if (this.element.isLessThan(newGuy)) {
      return new Node<T>(left,this.element,right.add(newGuy)) ;
    } else {
      return this ; // Already in set.
    }
  }
}




miércoles, 16 de noviembre de 2011

25 SECRETOS DE LAS HERRAMIENTAS DE DESARROLLO DEL NAVEGADOR

Desarrollo.

En los últimos años se ha producido una herramienta que ha ayudado a todos los desarrolladores web más que cualquier otro - las herramientas de desarrollo del navegador. Trabajando en armonía con el navegador web, las herramientas de desarrollo que nos permite manipular elementos DOM, los estilos CSS, JavaScript y otra información útil de la misma ventana a menudo en tiempo real.

Históricamente, los desarrolladores han utilizado Firebug de Firefox add-on para desarrollar y depurar sus sitios web, pero más recientemente, cada navegador ha desarrollado su propio conjunto de herramientas y cada uno viene con sus propias ventajas y desventajas. Hoy en día parece difícil imaginar que algún día la construcción de un sitio web sin una de estas útiles herramientas, que normalmente son accesibles, ya sea presionando "F12" en Windows o "Comando"  ", opción"  e "I" en el Mac, o por la derecha clic en la página y selecciona "Inspeccionar elemento".


NavegadorConjunto de herramientasTipoDocumentación
ChromeHerram. de desarrolloIntegradaDocumentation
FirefoxFirebugAdd-onDocumentation
Internet ExplorerBarra/Herram. desarrolloIntegradaDocumentation
OperaDragonflyIntegradaDocumentation
SafariDeveloper ToolsIntegrada (Defecto off)Descripción Gral



¿Pero está usted usando las herramientas de desarrollo de su potencial? El más positivo acerca de las herramientas de desarrollo es que son increíblemente fácil de usar, sino como un resultado de los desarrolladores a menudo se pierda una gran parte de la funcionalidad proporcionada. Inspirados por una charlade vídeo de Paul irlandés y Pavel Feldman, he compilado una lista de los "secretos" de la consola de los desarrolladores. No estoy esperando a cada uno de estos para ser desconocido para usted, pero espero quealgunos de estos le ayudarán a convertirse en un desarrollador web, incluso mejor.

Si usted tiene más secretos, no dude en dejar un comentario al final del artículo y voy a actualizar el mensaje una vez que haya comprobado. También me encantaría saber qué consola de desarrollador utiliza como su principalherramienta de desarrollo, que me haga saber de abajo!


La "consola" Tab

El corazón de cualquier herramienta de desarrollo es la "consola" ficha en la que puede dar salida a depurar y ejecutar comandos en la página web actual.

Referencia el elemento actual

Chrome, Firefox, Opera, Safari - Si tiene un elemento seleccionado en la ficha "Elementos", puede utilizar la referencia de $ 0 a llamarlo dentro de su código. Por ejemplo, para ver el contenido de los elementos "tendría que escribir $ 0.innerHTML. En Chrome y Safari, puede llamar a la consola de cualquiera de las otras fichas con la tecla "Escape" para que usted no tiene que cambiar constantemente. En Firebug, la consola está disponible a través de un icono situado a la izquierda de las pestañas o pulsando Ctrl, Shift y L en Windows o  Comando,Mayúsculas y L en Mac OS.




En Opera, se puede seleccionar el elemento anterior que había puesto de relieve el uso de $ 1. En Chrome y Safari, puede seleccionar los elementos anteriores se han puesto de relieve el uso de $ 1 - $ 4.

Utilizando console.log a la salida de los valores de múltiples objetos y al mismo tiempo

Todos - Sabemos console.log () es increíblemente útil para la salida de depuración a la consola dedesarrolladores, y preferible a las alertas, pero puede ser irritante para la salida de una cadena seguida de un objeto si no eres consciente de esta característica de la talaUtilizando console.log ('mensaje:' + $ ('mensaje'))sólo le dirá que su mensaje es un objeto, y el registro de los objetos por su propia puede ser confuso si el registroestá sucediendo en medio de un bucle .

console.log () en realidad acepta varios parámetros, por lo que puede dar salida a tanto la cadena y el objeto delmismo comando que usa console.log ('mensaje:', $ ('# mensaje')), o cualquier otra combinación de tipoJavaScript que se pueda imaginar.
Usted puede utilizar console.warn () para los mensajes de advertencia; console.error () para el error de mensajería y console.info () para los mensajes de información. También puede utilizar console.assert () para probar las expresiones de verdadero o falso.

(Gracias a Masklinn por la información adicional)

Re-utilizando un comando de JavaScript

Todos - Si usted ha escrito un comando en la consola de JavaScript y desea volver a correr, simplemente pulse la tecla de arriba para desplazarse por una lista de los comandos anteriores que han llamado desde la consola.

Persistir

Chrome, Firefox - No hay un botón claro para la persistencia de contenidos en la consola derecha de Firefox por encima de la consola, pero es un poco más oculto en Chrome. Haga clic derecho en la consola para que aparezca un menú con "Mantener registro en la navegacióncomo una opción.

Viendo el código fuente de un objeto

Firefox - Firefox soporta el método toSource () lo que significa que está disponible en Firebug para imprimir el contenido de un objeto como una cadena en la consola.
Cambio de marco

Firefox - Ejecución de comandos JavaScript desde la línea de comandos de la consola es muy útil, pero si usted tiene un iframe que lidiar con ella rápidamente se convierte en un problemaAfortunadamente, usted puede utilizar el siguiente comando para centrarse en el marco de que se trate y ejecutar sus órdenes en contra.


1
cd(window.frames['frameName']);

Chrome - Chrome permite cambiar el marco de una manera diferente. En una página que contiene marcos,tendrá que ir a la "consola" y elige tu marco en el menú desplegable en la parte inferior de la consola.


Opera - Opera también tiene una lista desplegable para cambiar el marco que está disponible en la "consola" y la pestaña "Documentos". El menú desplegable sólo aparecerán en la "consola" ficha si hay marcos para elegir.


(Gracias a Paul Irish y a Daniel Herzog  por la información adicional)
Copiar el código directamente al portapapeles

Chrome, Firefox, Safari - Uso de la copia () de comandos en la consola de herramientas de desarrollo, puede copiar el contenido de un comando directamente al portapapeles.

Realización de cálculos en el navegador

Todos - Este consejo tiene mucho sentido, pero es sorprendente cuánta gente no lo useSi lo que necesita saber la respuesta a un cálculo matemático rápidamente (por ejemplo, la anchura de tres columnas en un contenedor de 456pxno es necesario para abrir la calculadoraSólo tienes que escribir la pregunta de matemáticas en la consola de las herramientas de desarrollo y se le devolverá la respuesta. Es 152, por el camino.

Los "Scripts" Tab

El hogar de todos los JavaScript que se ejecuta en la página, el script (s) ficha contiene una lista desplegableque le permite seleccionar la secuencia de comandos que desea depurar.

Tratar con minified JavaScript

Chrome, Internet Explorer, Safari - puntos de interrupción Puesta en JavaScript hace que la depuración mucho más fácil, pero si el código ya lo ha hecho a la producción, entonces es probablemente ha sido miniaturizada.¿Cómo se puede depurar el código minifiedPor suerte, algunos de los navegadores tienen una opción parano-minify tu JavaScript.

En Chrome y Safarisólo tiene que seleccionar la pestaña 'Scripts', encontrar el archivo correspondiente en el menú desplegable y luego presione el botón "{}" (Pretty Print) en el icono situado en el panel inferior.


En Internet Explorer 9, haga clic en el icono de la herramienta por la selección de secuencia de comandos demenú desplegable para encontrar la opción para dar formato al JavaScript.


Observando las variables

Todos -. Una herramienta común con el desarrollo de NET, 'ver' le permite controlar una lista de variables de un lugar a mano, en la parte superior de la barra de la derecha en la "scripts" ficha. Viendo una variable es muy fácil,sólo tienes que escribir el nombre de la variable y 'ver' mantendrá su valor hasta la fecha.



Edición y ejecución de JavaScript en la marcha

Chrome - En lugar de editar en un editor independiente y recarga la página, con Chrome se puede editardirectamente en la página. Simplemente haga doble clic en la que desea cambiar el código y el tipo! Presiona Ctrl / Cmd y S para guardar.

Creación de un punto de interrupción cuando se produce un error de JavaScript

Todos - simplemente haga clic en el icono de pausa en la ficha Script de la consola de desarrolladores para hacer una pausa el guión cuando el error de JavaScript en primer lugar. La línea que ha causado el error se puso de relieve para que los revise.

Creación de un punto de interrupción guión basado en el cambio de DOM

Chrome, Firefox - Si sabe que su página se rompe cuando una parte de los cambios de DOM, o simplemente quiere saber qué script es responsable de cambiar el atributo de ese elemento, Chrome y Firebug tanto le permiten establecer un punto de ruptura JavaScript efectiva lo que le permite encontrar al culpable en el código.Simplemente selecciona el elemento que desea supervisar y haga clic derecho para seleccionar las condicionespara romper el.

(Gracias a Jason Wilson por la información adicional)



La ficha "Elementos"

Conocido como el "HTML" en la pestaña de Firefox y los "Documentos" en la pestaña de la Ópera, los "elementos" ficha muestra el DOM en su estado actualEn Internet Explorer, se le tenga que pulsar "Actualizar"botón para ver el DOM actual.

Obtención de las dimensiones de un contenedor de la manera más fácil

Chrome, Safari - Soy un gran fan de la utilización de overflow: auto para contener los elementos flotantes, pero causa problemas en versiones anteriores de Internet Explorer a menos que especifique un ancho real (auto y el 100% no será suficiente). Las dimensiones se pueden encontrar en el "estilo computarizada", que es práctico, pero sigue siendo un número de clics. Usando Chrome o Safari, es fácil ver las dimensiones de un elemento se cierne sobre él en el código fuente en la ficha "Elementos", o bien usando la lupa en la barra de herramientas inferior.



Firebug, Internet Explorer, Opera - Usted tendrá que seleccionar la pestaña "Diseño" en el panel de la derecha o para desplazarse por la lista de estilos computado en la barra lateral derecha.

(Gracias a Masklinn por la información adicional)

Ampliar la vista de todos los elementos

Firefox, Opera - En Firebugen el asterisco "HTML" pestaña presionando (*) en el teclado num amplía todos los elementos excepto los scripts y hojas de estiloPresionas la tecla shift y pulsando asterisco también se ampliaránlos scripts y hojas de estilo (link) los elementos.

En Dragonfly en Operahay un botón en los "Documentos" ficha para hacer la misma tarea, como se muestra a continuación.



Margen de incremento, el relleno, anchura, altura, borde - hasta el color

Todos - Si tiene un elemento que es necesario modificar el margen, relleno, anchura o la altura, usted puedeutilizar las teclas de cursor para aumentar / disminuir el tamaño.

  • Sólo tiene que utilizar las teclas de cursor arriba y abajo para aumentar / disminuir por una unidad de 1.
  • En Chrome, Safari y Firebug se puede incrementar / disminuir en una unidad de 10 por la celebración de la tecla "Shift" mientras pulsa las teclas de cursor arriba y abajo.
  • En Chrome y Safari, puede incrementar / disminuir en una unidad de 0,1 sostener la tecla "Alt" mientras pulsalas teclas de cursor arriba y abajo.
  • En Chrome y Safari, también puede incrementar / disminuir en una unidad de 100, mantenga pulsada la tecla "Shift" mientras pulsa Page-Up y Page Down.
Estos accesos directos son especialmente útiles cuando no está seguro de lo que exactamente el tamaño correcto debe ser. En Chrome, Safari y Opera también se puede utilizar las teclas de arriba y abajo para aumentar o disminuir los valores de color.

(Gracias a Mikkelrom por la información adicional)

Estilo: activo,: hover,: enfoque,: estados visitados

Chrome, Firefox, Opera - CSS El estilo de la consola de desarrollador es impresionante, pero se vuelve un pocomás difícil cuando las pruebas de otros estados, como elemento de activación. Afortunadamente, hay una solución.

Chrome tiene un botón integrado para este propósito. En buscar la mano derecha de la ficha "Elementos" la columna de puntos para el elemento / cursor icono que le permite probar otros estados.



Para Firebug, en la columna de la derecha haga clic en el menú de la flecha al lado de la ficha Estilo y seleccionarel estado deseado.

En Opera, es el icono que se parece a una lista de "Estilos".

Rote a través de tipos de definición de color

Chrome, Safari - Los colores se pueden definir de muchas maneras en una página web - por su nombre, a través de un valor hexadecimal (3 ó 6 dígitos), como RGB o HSL (o sus versiones alfa transparente). Se puede girar a través de estas definiciones diferentes en Chrome o Safari, haga clic en el cuadrado de color al lado de su color.

(Gracias a Masklinn por la información adicional.)

Selector de color

Opera - En Opera, haga clic en el cuadrado de color al lado de un color le permite seleccionar un color diferente a través de un selector de la mano.



La ficha "Recursos"

La sección de recursos se enumeran todos los hojas de estilo, JavaScript, las imágenes utilizadas en su página.Esta ficha, lamentablemente no existe en Firebug o Internet Explorer, aunque algunas de sus características se integran a otras fichas.

Guardar los cambios

Chrome, Internet Explorer, Safari - Hacer cambios en el CSS o JavaScript es grande, pero se convierte en unamolestia de volver a implementar en el código fuente una vez que esté satisfecho.

En Internet Explorer, en cada ficha un icono "Guardar" proporciona la funcionalidad de guardar en un archivo en una base por archivo.

Mientras tanto, la ficha "Recursos" en Chrome y Safari tiene una característica muy útil que almacena todos los cambios en las revisiones específicas que le permite ir rápidamente adelante y atrás a través de todos los cambios. Busque el archivo en el que hemos aplicado los cambios (que se puede acceder fácilmente haciendo clic en el nombre de archivo junto al elemento que ha cambiado), y una lista de las revisiones serán proporcionados. En Chrome, haga clic derecho sobre el nombre de archivo para guardar una nueva versión de su archivo. En Safari, lamentablemente tendremos que copiar y pegar.



Cookies y almacenamiento

Chrome, Opera, Safari - También en la lista de recursos es una lista de fácil acceso de diferentes opciones de almacenamiento junto con los datos almacenados para cada opción. Opera tiene un "almacenamiento" pestañaque hace lo mismo.



La pestaña "Red"

La ficha de red muestra todos los recursos y los archivos descargados para cargar la páginaEn la mayoría delos casos las herramientas de desarrollo tienen que estar abiertos a la ficha Red para mostrar la información, así que puede que tenga que actualizarLa ficha se conoce como "red" en FirefoxPara Internet Explorerque sólo está disponible en la versión 9 y posteriores.

Deshabilitar caché del navegador

Todos - Cada navegador compatible le permite desactivar la caché, pero no hay coherencia con la forma.

En Chrome, usted encontrará la opción en la configuración de la ruedaEn Firebug, usted encontrará la opciónen la flecha junto a la cabecera de "Net" ficha. En Internet Explorerla opción se encuentra en "Caché" en la barra de menú.

En Operapara borrar la caché, haga clic en la ficha Red, seleccione la pestaña de opciones de red secundaria y elegir la primera opciónEn Safari, puede desactivar la memoria caché del navegador en el menú Desarrolloen la barra de menú.

Para que aparezca la limpieza de caché (y otros datos) de diálogo en cualquier navegador en Windows Ctrl, Shift y Suprimir.

(Gracias a Steven y Karl por la información adicional)

Estado latente

Todos - En Chrome y Safarien la pestaña de red le permite ver el tiempo que tarda un servidor para responder a una solicitudLa línea de color se desvaneció para cada recurso indica cuándo fue enviada la peticiónycuando la respuesta fue enviado de vueltaEl color negro indica que el recurso se ha descargado. En Chrome, puedes flotar sobre estas líneas para obtener un desglose de las que el tiempo transcurrió.

En Operalos mismos principios se aplican, excepto la latencia se mide por una línea gris en lugar de una línease desvaneció.



En Internet Explorer, la latencia se marca como amarillo y se cierne sobre la línea le dará más información.

En Firebug, la latencia es marcado en el color púrpura y etiquetados como 'Espera'. Se cierne sobre una de estas líneas en Firebug también ofrece un desglose detallado de las que el tiempo transcurrió.

DOMContentLoaded, la carga de evento disparado

Chrome, Safari - La ficha de red para Chrome y Safari también revela dos datos adicionales,DOMContentLoaded como una línea azul y el evento de carga de fuego como una línea roja.



La línea DOMContentLoaded indica cuando el navegador se ha terminado de analizar el documento (pero de otros recursos como imágenes y hojas de estilo no se puede descargar), mientras que la línea de evento de carga indica cuando estos recursos se han completado.

Si los dos eventos se disparan al mismo tiempo, la línea será de color púrpura.

(Gracias a Steven y Joey por la información adicional)

otro

Rupturas

Todas - A veces me parece a mi las herramientas de desarrollo se han estrellado y no responde a los clics de mi mouse. En lugar de cerrar la ventana del navegador y volver a abrir, a menudo encuentro que el uso de los atajos de teclado para cerrar y abrir de nuevo las herramientas de desarrollo para solucionar el problema.

Espero que estas características y secretos han sido de utilidad para usted, aunque su nivel de habilidad y experiencia va a determinar cuántos de estos son nuevos para usted. Deliberadamente no hemos incluidoperfiles y depuración remota en esta lista, ya que estos son temas que quiero tratar con más detalle en un artículo posterior. Por favor, siéntase libre de dejar comentarios, correcciones y sus propios consejos de abajo!


Agradecimientos: Traducción, Traductor de google!. andi smith