Consejos para Warpzilla – Mozilla para OS / 2

Original article:http://os2news.warpstock.org/Warpzilla.html

Newsbits
Firefox 52esr es la última versión que se trasladará a OS / 2. Las posibles alternativas futuras incluyen Otter y Pale Moon. El proyecto SeaMonkey también está indeciso sobre cómo continuará más allá de 52esr (en todas las plataformas).

Firefox 38.8.0 tiene un error molesto (posiblemente multiplataforma), donde al inicio puede solicitarle que restablezca su perfil. Puede resolver esto eliminando parent.lock en su perfil; se volverá a crear, pero debería dejar de causar el problema.

A partir del 11 de febrero de 2014, Mozilla para OS / 2 está oficialmente muerto; todo el código de soporte de OS / 2 se ha eliminado del árbol de origen. Una de las principales razones para esto fue la falta de contribuciones que se enviaban en sentido ascendente, y la manifiesta falta de deseo de hacerlo, como se predijo varios meses antes. Sin embargo, Bitwise creó una bifurcación de Firefox ESR, y está trabajando en portar el código de Mozilla / Google IPC.

Antes de ESR38, las fuentes descargables no funcionaban y podían causar bloqueos si no estaban deshabilitadas: user_pref : user_pref(“gfx.downloadable_fonts.enabled”, false);
Esto se estableció por defecto en versiones desde ESR10 hasta ESR31.

Las características que faltan en las compilaciones de OS / 2 incluyen: WebGL, debido a la falta de controladores OpenGL de hardware; IPC, para la protección contra bloqueos de complementos (un trabajo en progreso, pero los complementos se vuelven irrelevantes); y fuentes web, para descargar fuentes automáticamente y mostrar texto usándolas (ahora trabajando en ESR38).

El equipo de IBM dejó de trabajar en Mozilla para OS / 2 hace muchos años. Se alienta a los desarrolladores externos a participar; una de las herramientas necesarias es rc.exe versión 5.00.007.

 
Software relacionado
tcpip32.dll Steve Levine ha lanzado una versión parchada de tcpip32.dll que evita los bloqueos que las personas han experimentado al utilizar las aplicaciones de Mozilla; hace que este archivo DLL multi-thread y SMP sea seguro.
Exceptq Si Warpzilla se bloquea, Exceptq emitirá un pitido y luego creará un informe de excepción que contiene detalles del bloqueo. Consulte también la información NSPR_NO_EXCEPTQ en la sección de variables de entorno.
Doodle’s Screen Saver Si instala Doodle’s Screen Saver, Warzpilla puede determinar cuándo no está interactuando con la computadora, y realizará varias tareas de fondo y limpieza durante los períodos de inactividad.
RWS Con RWS, puede abrir descargas utilizando su asociación WPS predeterminada y hacer que la aplicación muestre el ícono correcto en las listas de archivos y cuadros de diálogo. Consulte también la información de MOZ_NO_RWS en la sección de variables de entorno.

 

Lightning La extensión Lightning para Thunderbird y SeaMonkey agrega soporte de calendario; a diferencia de la mayoría de las extensiones, las versiones deben coincidir con versiones específicas de Gecko. Dave Yeo ha proporcionado compilaciones para 17ESR, 24ESR, 31ESR y 38ESR. Ya está incluido en 45ESR.

 

 

 

 

 

Complementos compatibles Nombre del archivo Notas
AcrobatAcrobat 4.05 Acrobat 5.1 nparos2.dll
nparos25.dll
El complemento PDFJS es un reemplazo viable para los complementos
Requiere InnoWin Runtime. Para que este complemento funcione con LIBPATHSTRICT, puede usar este parche (para Acrobat 4), seguir la idea en el parche para aplicar un parche a su propia versión o agregar \ OS2 \ DLL a BEGINLIBPATH
FlashFlash 11 npflos2.dll Disponible para clientes de suscripción de software eComstation; solo funciona en eCS 1.2 y posterior.
Flashblock le permite instalar el complemento de Flash sin molestarse constantemente por los anuncios Flash (o bloquear el navegador debido a errores en el complemento, y el IPC aún no se ha portado). Simplemente haga clic en el ícono “Reproducir” para cualquier objeto Flash que realmente quiera ver.
Flash Flash 7
npswf2.dll El paquete Flash7 está parcheado para que el sonido funcione con LIBPATHSTRICT; se informa a sí mismo como Flash 9
Java Java 6
npicedt.dll El complemento IcedTea-Web funciona con OpenJDK 1.6. Los plugins anteriores de Java 1.4.x ya no son compatibles.
MPlayer MPlayer
npmp.dll Streaming de audio / video (MPEG, QuickTime, WMV, ASF, FLV y más).
DjVu npdjvu.dll DjVu es un conjunto de tecnologías de compresión, un formato de archivo y una plataforma de software para la entrega en la Web de documentos digitales, documentos escaneados e imágenes de alta resolución.
PM Downloader nppmd.dll Captura y maneja descargas
Auto Wget npawgbin.dll
& others
Captura y maneja descargas
También tiene npawgaud.dll y npawgvid.dll para manejar audio y video
GBM npgbm.dll El módulo de mapa de bits generalizado puede mostrar una variedad de formatos de archivos de mapa de bits
META viewer npmeta.dll Le permite ver archivos * .MET
Unzip Plugin npunzip.dll

Puede “instalar” complementos simplemente copiándolos en el directorio de complementos (o en el directorio de complementos de su perfil)
Es posible que los desarrolladores deseen consultar el Kit de herramientas del complemento OS / 2 (de Hobbes), incluida esta actualización
Otro lugar para encontrar información del complemento es plugindoc

Variables de entorno
MOZILLA_HOME Puede usar la variable de entorno MOZILLA_HOME para determinar la ubicación de sus perfiles Warpzilla. Por defecto, los perfiles se crean en el directorio de la aplicación. Con esta variable, se crearán y usarán en% MOZILLA_HOME% \ Mozilla en su lugar.
MOZ_ACCELERATED Gecko 2.0 (Firefox 4.xy SeaMonkey 2.1.x) y superiores son compatibles con la aceleración de gráficos con DIVE. Esto puede deshabilitarse desmarcando “Usar aceleración de hardware cuando sea posible” en las preferencias, o puede establecer la variable de entorno MOZ_ACCELERATED a 0. También se desactiva cuando se usa el controlador Panorama cuando el buffer de sombra está habilitado, ya que ese controlador no funciona correctamente con DIVE. Otras opciones para% MOZ_ACCELERATED% incluyen 1 para asumir el cursor del software, el predeterminado para los controladores de video que no sean SNAP, y 2 para asumir el cursor de hardware, el predeterminado para SNAP. Si mover el mouse sobre los menús y las ventanas desplegables provoca daños en el video, establezca esta variable en 1. Si el mouse parpadea al desplazarse, puede intentar configurar esta variable en 2, pero esto puede dañar el video si su controlador no proporciona un cursor de mouse de hardware .
MOZ_NO_REMOTE MOZ_NO_REMOTE = 1 impide que Mozilla cree la ventana de mensaje principal, de modo que Warpzilla no puede detectar otras instancias en ejecución. Esto solo es útil si desea ejecutar diferentes versiones al mismo tiempo (con diferentes perfiles).
MOZ_NO_RWS MOZ_NO_RWS = 1 deshabilita las características de integración de WPS provistas por RWS. Con RWS, puede abrir descargas utilizando su asociación WPS predeterminada y hacer que la aplicación muestre el ícono correcto en las listas de archivos y cuadros de diálogo. Normalmente estas son funciones útiles, pero hay al menos un error conocido, donde arrastrar con el mouse puede causar un bloqueo.
MOZ_PLUGIN_PATH Warpzilla buscará complementos en. \ Plugins,% MOZILLA_HOME% \ Mozilla \ Plugins, y en la ruta especificada por la variable de entorno% MOZ_PLUGIN_PATH%.
NSPR_NO_EXCEPTQ Si Warpzilla se bloquea, Exceptq emitirá un pitido y luego creará un informe de excepción que contiene detalles del bloqueo. Establecer NSPR_NO_EXCEPTQ = 1 deshabilita esto para las aplicaciones Warpzilla, pero normalmente quiere que esa información esté disponible.
NSPR_OS2_NO_HIRES_TIMER Si tiene problemas con aplicaciones multimedia que usan el temporizador de alta resolución de OS / 2, puede configurar los navegadores Warpzilla para que no lo utilicen configurando la variable ambiente NSPR_OS2_NO_HIRES_TIMER = 1
KAI_AUTOMODE Comenzando con Firefox 31 (y SeaMonkey 2.28), la interfaz de audio K se usa para admitir DART y UniAud. Elegirá automáticamente en función de lo que haya instalado, pero puede anularlo si tiene un motivo (por ejemplo, la interfaz de UniAud no siempre funciona, pero los controladores de UniAud también son compatibles con DART). Puede establecer KAI_AUTOMODE = UNIAUD o KAI_AUTOMODE = DART
MOZILLA_USE_EXTENDED_FT2LIB Esta variable de entorno habilitó soporte completo para el motor de fuentes Innotek. Ese motor de fuente ya no es necesario y, de hecho, puede causar bloqueos en las versiones actuales de Warpzilla. El paquete mozinst incluye la utilidad “fechg” para desactivarlo.

 

Consejos para una mayor funcionalidad
Perfiles SeaMonkey 1.x utiliza los mismos datos de perfil que Mozilla Suite, mientras que SeaMonkey 2.x, Firefox y Thunderbird tienen perfiles separados, pero puede migrar los datos de perfil si está en% MOZILLA_HOME%.

Puede transferir partes de perfiles anteriores a un nuevo perfil; hay consejos para SeaMonkey, Firefox y Thunderbird. Se pueden hacer cambios en los perfiles, pero es necesario modificar manualmente las rutas en los archivos de configuración (principalmente prefs.js) y hacer que registry.dat apunte a la ubicación correcta del perfil. Este editor en línea registry.dat (para SeaMonkey 1.x) o estas herramientas REXX pueden ayudar.

Fuentes antialias Warpzilla ofrece soporte integrado para fuentes antialias. Solo se pueden utilizar fuentes TrueType y Type 1, por lo que es posible que desee instalar WorkPlace Sans para sustituir a WarpSans.
Fuentes MathML Warpzilla es compatible con MathML, pero debe tener fuentes que contengan los símbolos necesarios, como las fuentes STIX y Asana. Después de que tenga las fuentes instaladas, puede probar MathML.
Drag & Drop Warpzilla cuenta con soporte completo de arrastrar y soltar, tanto hacia como desde el navegador. Puede mantener presionada la tecla Ctrl si desea copiar imágenes y páginas web, en lugar de simplemente crear objetos URL.

Suelta estos en Mozilla Press Mozilla obtendrá esto Formateado como
Objeto WPSUrl contenido del objeto Url, HTML, & Text
cualquier archivo camino del objeto Url, HTML, & Text
cualquier archivo Alt contenido del objeto Text
URL de DragText Texto de Url Url, HTML, & Text
Texto de DragText texto arrastrado Text
Texto arrastrado desde un compatible
aplicación (por ejemplo, EPM, GCJava)
texto arrastrado Text
SYS2070 Si obtienes bloqueos SYS2070 al intentar ejecutar Mozilla, esto significa que se está encontrando la versión incorrecta de una DLL. Una de estas soluciones podría ayudar:

  • Eliminar el navegador web de IBM de LIBPATH
  • No se instaló correctamente (descomprimido en un directorio antiguo)
  • Tienes otra versión ejecutándose sin usar LIBPATHSTRICT
Modificando Prefs La forma más fácil de modificar las preferencias es desde la página about: config; hay documentación para muchos de ellos. Si elige realizar cambios directamente en el archivo de preferencias (prefs.js), deben hacerse cuando Warpzilla está cerrado, o no se guardarán; ¡reescribe el archivo cuando sale! También debe evitar el uso de un editor que añada un carácter EOF (como E.EXE).
Como alternativa a la modificación de prefs.js, puede crear un archivo user.js. Este archivo nunca es modificado por Mozilla, y anula cualquier configuración en prefs.js
Usando pestañas Puede navegar por las pestañas con el teclado usando Ctrl-PgUp y Ctrl-PgDn o Ctrl-Tab
Puede guardar un marcador que volverá a abrir todas las pestañas del navegador actual, seleccionando Marcar este grupo de pestañas. Incluso puede agregar o eliminar URL de este grupo, ya que se trata como una carpeta.En Firefox 2.0, cada pestaña tiene un botón de cerrar. Si desea restablecer el comportamiento anterior, configure “browser.tabs.closeButtons” en 3.
Tiempo de espera de scripts Si tiene problemas con algo de Javascript que toma demasiado tiempo y acapara los ciclos de la CPU, puede acortar la cantidad de tiempo que tarda el cuadro de diálogo “cancelar secuencia de comandos”. Puede cambiar los valores “dom.max_script_run_time” y “dom.max_chrome_script_run_time” por el número de segundos que desea permitir antes de que aparezca el cuadro de diálogo, donde la primera opción es para scripts en páginas web, y la segunda opción es para scripts en el interfaz de usuario (¡incluidas las extensiones!).
Marcadores Warpzilla cambió a usar una base de datos SQLite para marcadores, en lugar del archivo bookmarks.html estándar. Es posible importar y exportar automáticamente su archivo bookmarks.html al inicio y al apagado, aunque con algunas advertencias menores.
SQLite Las bases de datos SQLite, tal como se usan en Warpzilla, pueden tener una tendencia a crecer excesivamente grandes. Puede usar el navegador SQLite para “aspirar” (compactar) los archivos de base de datos * .sqlite en su perfil, mientras el navegador está cerrado; esto mejorará el rendimiento del tiempo de ejecución. La base de datos “Lugares” también se puede compactar en Warpzilla, utilizando la Consola de errores. Otra opción es el paquete UPSSV.
Icons  

Si no te gustan los iconos en Mozilla 1.1 y superior, puedes cambiarlos reemplazando los archivos en el directorio chrome \ icons. Hay algunos paquetes de iconos disponibles, pero las personas han informado de problemas para que funcionen en OS / 2. Klaus Staedtler ha creado un paquete de iconos que usa los iconos predeterminados, pero está escalado correctamente para OS / 2.
Puede obtener iconos para más ventanas colocando iconos con estos nombres de archivo: commonDialog.ico, profileWindow.ico y default.ico

Phil Parker ha creado algunos iconos de Firebird basados en el diseño de llama que se encuentra en el sitio web de Firebird. Con un poco de presión, también produjo dos íconos más para nosotros; uno de los íconos de Firebird encontrados en el sitio web beta de Mozilla, y uno encontrado en una captura de pantalla reciente de Stardock. Tenga en cuenta que los iconos de OS / 2 no se pueden ver en Mozilla, guárdelos en el disco para verlos. También hay algunos iconos de Firefox en Hobbes.

FavIcons Mozilla tiene una opción configurable mediante GUI para “iconos de sitio web”, pero también hay una opción oculta para soporte de favicon (estilo IE no estándar), que está desactivada por defecto. Para habilitar el soporte de favicon, use esta opción:
user_pref (“browser.chrome.favicons”, true);También puede habilitar los iconos del sitio en el menú de marcadores configurando esta opción:
user_pref (“browser.chrome.load_toolbar_icons”, 2);
Cursores Puede consultar el soporte para estilos de cursor CSS en esta página de muestra
Throbbers Puede cambiar la pulsación en Mozilla creando un archivo chrome \ userChrome.css en su perfil. Debe contener lo siguiente:

#navigator-throbber
{
list-style-image : url("animthrob_single.gif") !important;
}
#navigator-throbber[busy="true"]
{
list-style-image : url("animthrob.gif") !important;
}

Hay una buena pulsación que puede usar de una de las compilaciones de Netscape. Simplemente coloque los archivos de imagen en el directorio chrome de su perfil, junto con userChrome.css

Throbber URL También puede cambiar la URL a la que va el throbber cuando se hace clic en:
user_pref (“browser.throbber.url”, “http://www.google.com/”);
user_pref (“messenger.throbber.url”, “http://www.google.com/”);
user_pref (“compose.throbber.url”, “http://www.google.com/”);
user_pref (“addressbook.throbber.url”, “http://www.google.com/”);
Campo de entrada de URL Si desea que el campo de entrada de URL actúe correctamente (no lo resalta todo cuando hace clic en él), puede usar esta configuración:
user_pref (“browser.urlbar.clickSelectsAll”, falso);
User agent Si desea cambiar el agente de usuario informado por el navegador, puede usar esta configuración:
user_pref (“general.useragent.override”, “Mozilla / 4.61 [en] (OS / 2; U)”);También puede echar un vistazo a la barra previa que tiene un menú de varias opciones para esto.
Movimiento del menú Si no le gusta que el mouse siga los menús, puede agregar un retraso para desacelerarlo:
user_pref (“ui.submenuDelay”, 7000);
o evitar que suceda:
user_pref (“ui.submenuDelay”, -1);
Carpetas con resorte Las carpetas con carga de resorte han estado en Mozilla Mail & Newsgroups durante algún tiempo. Simplemente intente una operación de arrastrar y colocar en un árbol de carpetas cerrado, colocando el mouse sobre la carpeta principal visible; el árbol se abrirá, permitiéndole seleccionar la subcarpeta apropiada para archivar el mensaje. El comportamiento “normal” es que el árbol de carpetas permanezca abierto, pero es fácil habilitar el cierre automático de dichas carpetas “suspendidas” con la siguiente adición a prefs.js:
user_pref (“ui.treeCloseDelay”, 1000);Otros aspectos de las carpetas con resorte también pueden modificarse; los valores predeterminados son:
user_pref (“ui.treeOpenDelay”, 1000);
user_pref (“ui.treeLazyScrollDelay”, 150);
user_pref (“ui.treeScrollDelay”, 100);
user_pref (“ui.treeScrollLinesMax”, 3);
Encabezado de respuesta Puede cambiar fácilmente el encabezado de respuesta predeterminado para el correo y los mensajes de noticias para incluir la fecha del mensaje original o cualquier otra cosa que desee que tenga. user_pref (“mailnews.reply_header_type”, 2); es un mejor defecto; ver Mozillazine para más opciones.
Respuesta citando Thunderbird 3.xy SeaMonkey 2.x solo citarán la parte seleccionada de un mensaje cuando responda. Usted puede desactivar esta característica:
user_pref (“mailnews.reply_quoting_selection”, falso);
Conexiones máximas Puede intentar aumentar las conexiones máximas persistentes por servidor; esto, según se informa, puede acelerar la carga de la página significativamente en algunos sitios.
user_pref (“network.http.max-persistent-connections-per-server”, 8);
Protocols Ahora es posible definir sus propios protocolos, para que pueda ejecutar todo lo que quiera de Warpzilla. Por ejemplo, para editar su archivo Config.Sys en el editor de EPM con la URL “epm: C: \ Config.Sys”, debe agregar estas configuraciones:
user_pref (“applications.epm”, “c: \\ os2 \\ apps \\ epm.exe”);
user_pref (“applications.epm.parameters”, “% url%”);Warpzilla ahora tiene el protocolo “telnet:” incorporado en os2pref.js, que ejecuta telnetpm.
Mailcap Puede personalizar la información MIME utilizada por Mozilla. Un archivo mime.types asigna los tipos MIME a extensiones de archivo, mientras que el archivo mailcap especifica las aplicaciones auxiliares para iniciar para un tipo MIME dado. Agregue estas líneas:
user_pref (“helpers.global_mailcap_file”, “X: \\ HOME \\ mailcap”);
user_pref (“helpers.global_mime_types_file”, “X: \\ HOME \\ mime.types”);
user_pref (“helpers.private_mailcap_file”, “X: \\ HOME \\. mailcap”);
user_pref (“helpers.private_mime_types_file”, “X: \\ HOME \\. mime.types”);Luego crea los archivos correspondientes. Puede ver un archivo mailcap de ejemplo, que debería darle la idea. Puede encontrar un archivo mime.types completo con servidor web (Apache) o distribuciones de Linux.
Cookies Firefox 2.0 eliminó la opción de permitir solo las cookies desde el sitio web de origen. Puede restablecer este comportamiento con esta configuración:
user_pref (“network.cookie.cookieBehavior”, 1);
Notificación por correo Hay una forma no documentada de obtener un nuevo indicador de correo en WarpCenter, que ahora está conectado a Mozilla a partir de la versión 1.1. Puedes configurarlo de la siguiente manera:
1. Cree un ícono en su escritorio con una ID de objeto de <CCINBOX>, usando este código REXX:

/* */
call RxFuncAdd 'SysCreateObject', 'RexxUtil', 'SysCreateObject'
result = SysCreateObject('WPProgram', 'Mozilla Mail', '<WP_DESKTOP>', 'OBJECTID=<CCINBOX>');

Personalice este objeto para abrir “mozilla -mail” con la información de ruta apropiada.

2. Agregue los iconos de correo a su WarpCenter; necesita Resource Manager y NewMail.Zip. Descomprima ambos archivos en un directorio temporal y haga una copia de su \ OS2 \ DLL \ SCENTER.DLL allí. Para agregar los íconos, ejecute este comando:

resmgr -a scenter.dll scenter.res

Ahora reemplace su \ OS2 \ DLL \ SCENTER.DLL con el que acaba de crear (sugiero usar una utilidad de desbloqueo).

3. Una vez que reinicies, tu Warpcenter debería tener un ícono de correo. Hay una aplicación mailtest.exe en NewMail.Zip, que se puede utilizar para probar la funcionalidad fuera de Mozilla.

Si desea personalizar los íconos, edite mail.bmp o newmail.bmp, luego ejecute el compilador de recursos para recrear scenter.res.


Si desea eliminar el nuevo indicador de correo en Warpcenter, elimine el icono de Correo en la carpeta Mozilla (o la que creó siguiendo las instrucciones anteriores). Una vez que reinicies, el botón extra desaparecerá.

Aplicaciones predeterminadas Se admite el uso de aplicaciones predeterminadas configuradas externamente para navegador y correo electrónico. Puede usar la utilidad ConfigApps o la Integración de aplicaciones de Internet, que también incluye Run! utilidad y lo configurará por usted.
Aplicaciones de correo externo También puede especificar un programa de correo electrónico manualmente a través de estas preferencias:
user_pref (“applications.mailto”, “X: \\ path \\ to \\ mail_prog.cmd”);
user_pref (“applications.mailto.parameters”, “\”% url% \ “”);
user_pref (“network.protocol-handler.external.mailto”, true);Hay un script REXX para integrar PMMail con Mozilla y una versión ejecutable de una función similarPara que Firefox abra Thunderbird al hacer clic en un enlace mailto: utilizando la opción Ejecutar. utilidad, puede usar estas preferencias:
user_pref (“applications.mailto”, “X: \\ path \\ to \\ thunderbird \\ thunderbird! l.exe”);
user_pref (“applications.mailto.parameters”, “-compose”);
Ejecutando múltiples versiones concurrentemente Solo puede ejecutar Firefox y Thunderbird al mismo tiempo si son de la misma versión (o más exactamente, construidos a partir del mismo código), debido a la forma en que el kernel de OS / 2 carga los archivos DLL. Si desea ejecutar compilaciones desde diferentes niveles de código, use Integración de aplicaciones de Internet para configurar ¡Ejecutar !.
Puede ejecutar varias versiones de SeaMonkey (es decir, versiones de depuración y versión) al mismo tiempo, siempre que tenga cuidado. Debe usar diferentes perfiles para cada versión, y use Run! o un pequeño script para iniciarlo (como seaMonkey.cmd):

  SET MOZ_NO_REMOTE=1
  SET LIBPATHSTRICT=T
  SET MOZILLA_HOME=<profile_path>
  SET PATH=<mozilla_directory>;%PATH%
  SET BEGINLIBPATH=<mozilla_directory>
  seamonkey.exe %1 %2 %3 %4 %5

MOZ_NO_REMOTE = 1 impide que Mozilla cree la ventana de mensaje principal, por lo que dos Mozilla ya no pueden detectar que se está ejecutando. LIBPATHSTRICT = T obliga a cargar las DLL desde el lugar correcto, en lugar de usar lo que ya está en la memoria (esta función requiere un núcleo OS / 2 reciente). Estos scripts mozcall prefabricados pueden ser útiles.

Consejo de búsqueda Puede usar la función Marcar palabras clave para crear un acceso directo a su motor de búsqueda favorito; por ejemplo, puede escribir “guerras de estrellas imdb” en la barra de direcciones para buscar “Guerra de las galaxias” en la base de datos de películas en Internet.Para hacer esto:

  1. Haga una búsqueda en su motor de búsqueda favorito (en este ejemplo, IMDB).
  2. Cuando los resultados aparecen, marque la página.
  3. Ve al Administrador de marcadores. Seleccione el marcador y presione Propiedades
  4. En el cuadro de texto Ubicación, busque los términos que escribió para la búsqueda y reemplácelos con% s (para IMDB se verá como http://www.imdb.com/find?q=%s).
  5. Establezca la palabra clave según sus preferencias (por ejemplo, “imdb”, sin comillas)
  6. Ahora puede realizar búsquedas desde la barra de direcciones simplemente ingresando la palabra clave seguida de los términos de búsqueda.
Complementos addons.mozilla.org es un gran recurso para encontrar temas y extensiones. El proyecto xSidebar ha modificado muchas extensiones de Firefox y extensiones de Thunderbird para instalar y ejecutar correctamente en SeaMonkey.

La barra de herramientas de preferencias agrega una barra de herramientas para cambiar rápidamente la configuración de fuentes y colores personalizados, imágenes y Javascript.

mycroft es una lista de complementos de búsqueda para Mozilla, e instrucciones para escribir la tuya (como una buena búsqueda de Hobbes). También hay algunos complementos de búsqueda de Firefox para usar con Google (imágenes, grupos de noticias y noticias), el archivo de software commTalk, el diccionario Leo Alemán / Inglés y Hobbes.

Bookmarklets son algunas pequeñas y agradables utilidades de Javascript para lidiar con páginas web molestas

El control de historial de formularios le ofrece una interfaz agradable para administrar los datos guardados del campo de formulario.

Extensiones problemáticas Puede iniciar Warpzilla con todas las extensiones deshabilitadas (y utilizando el tema predeterminado) utilizando el parámetro de línea de comando “-safe-mode”. Luego puede desinstalar cualquier extensión problemática y / o tema.
Interfaz corrupta Si hay algo mal con su interfaz de usuario, hay algunas cosas que puede probar.

  • Asegúrese de estar utilizando un tema que se incluye con Warpzilla, o uno que está hecho específicamente para la versión que está ejecutando.
  • Mientras el navegador está cerrado, elimine el archivo xul.mfl en su directorio de perfil; será recreado, y no perderás nada.
  • Si todavía no funciona, chrome \ chrome.rdf (tanto la aplicación como las versiones de perfil) pueden estar dañadas. Puede eliminar estos archivos y dejar que Mozilla los reconstruya. Tenga en cuenta que deberá reinstalar cualquier tema y extensión.
  • Si todavía tiene una interfaz dañada, probablemente haya intentado eliminar manualmente un complemento sin limpiar los archivos overlays.rdf. Haga algo más de edición manual, o comience a eliminar más archivos rdf. De nuevo, es probable que necesites reinstalar las extensiones.
Línea de comando Hay alguna documentación sobre las opciones de línea de comando.

La paradoja del cumpleaños

Original Article:http://www.efgh.com/math/birthday.htm

Envíe sus comentarios por correo electrónico, correcciones y adiciones al webmaster a pje@efgh.com.

Un problema favorito en los cursos de estadística y probabilidad primaria es el problema del cumpleaños: ¿Cuál es la probabilidad de que al menos dos de las N personas elegidas al azar tengan el mismo cumpleaños? (Mismo mes y día, pero no necesariamente el mismo año).

Una segunda parte del problema: ¿Cuán grande debe ser N para que la probabilidad sea mayor al 50 por ciento? La respuesta es 23, que afecta a la mayoría de las personas como irracionalmente pequeña. Por esta razón, el problema a menudo se llama la paradoja del cumpleaños. Algunos Sharpies recomiendan apostar, incluso con dinero, que hay cumpleaños duplicados entre cualquier grupo de 23 o más personas. Presumiblemente, hay algunos tontos mal informados que aceptarán la apuesta.

The problem is usually simplified by assuming two things:

  1. Nadie nació el 29 de febrero.
  2. Los cumpleaños de las personas se distribuyen por igual durante los otros 365 días del año.

Una de las primeras cosas que se debe tener en cuenta sobre este problema es que es mucho más fácil resolver el problema complementario: ¿Cuál es la probabilidad de que N personas elegidas al azar tengan todos los cumpleaños diferentes? Podemos escribir esto como una función recursiva:

double different_birthdays(int n)
{
  return n == 1 ? 1.0 : different_birthdays(n-1) * (365.0-(n-1))/365.0;
}

Obviamente, para N = 1 la probabilidad es 1. Para N> 1, la probabilidad es el producto de dos probabilidades:

  1. Que las primeras personas N-1 tengan todos los cumpleaños diferentes.
  2. Que la N-ésima persona tenga un cumpleaños diferente de cualquiera de los primeros N-1.

Un programa para mostrar las probabilidades es algo como esto:

void main(void)
{
  int n;
  for (n = 1; n <= 365; n++)
    printf("%3d: %e\n", n, 1.0-different_birthdays(n));
}

El resultado es algo como esto:

  1: 0.000000e+00
  2: 2.739726e-03
  3: 8.204166e-03
  4: 1.635591e-02
  5: 2.713557e-02
      ***
 20: 4.114384e-01
 21: 4.436883e-01
 22: 4.756953e-01
 23: 5.072972e-01
 24: 5.383443e-01
 25: 5.686997e-01
      ***

La probabilidad de que al menos dos de N personas tengan el mismo cumpleaños se eleva por encima de 0.5 cuando N = 23.

PERO ¿QUÉ PASA CON LEAP YEAR?

El problema original se puede resolver con una regla de cálculo, que es exactamente lo que hice cuando lo escuché por primera vez hace muchos años.

Si agregamos el 29 de febrero a la mezcla, se vuelve considerablemente más complicado. En este caso, hacemos algunas suposiciones adicionales:

 

  1. Igual número de personas nacen en días que no sean el 29 de febrero.
  2. La cantidad de personas nacidas el 29 de febrero es un cuarto del número de personas nacidas en cualquier otro día.

Por lo tanto, la probabilidad de que una persona seleccionada al azar haya nacido el 29 de febrero es de 0.25 / 365.25, y la probabilidad de que una persona elegida al azar haya nacido en otro día específico es 1 / 365.25.

La probabilidad de que N personas, posiblemente incluyendo uno nacido el 29 de febrero, tenga cumpleaños distintos es la suma de dos probabilidades:

 

  1. Que las N personas nacieron en N días diferentes al 29 de febrero.Que las N personas nacieron en N días diferentes, e incluyen a una persona que nació el 29 de febrero.

    Las probabilidades se agregan porque los dos casos son mutuamente excluyentes.

    Ahora cada probabilidad se puede expresar recursivamente:

double different_birthdays_excluding_Feb_29(int n)
{
  return n == 1 ? 365.0/365.25  :
    different_birthdays_excluding_Feb_29(n-1) * (365.0-(n-1)) / 365.25;
}

double different_birthdays_including_Feb_29(int n)
{
  return n == 1 ? 0.25 / 365.25 :
    different_birthdays_including_Feb_29(n-1) * (365.0-(n-2)) / 365.25 +
    different_birthdays_excluding_Feb_29(n-1) * 0.25 / 365.25;
}

Un programa para mostrar las probabilidades es algo como esto:

void main(void)
{
  int n;
  for (n = 1; n <= 366; n++)
    printf("%3d: %e\n", n, 1.0-different_birthdays_excluding_Feb_29(n) -
      different_birthdays_including_Feb_29(n));
}

El resultado es algo como esto:

  1: -8.348357e-18
  2: 2.736445e-03
  3: 8.194354e-03
  4: 1.633640e-02
  5: 2.710333e-02
      ***
 20: 4.110536e-01
 21: 4.432853e-01
 22: 4.752764e-01
 23: 5.068650e-01
 24: 5.379013e-01
 25: 5.682487e-01
      ***

Como se esperaba, las probabilidades son ligeramente menores, porque hay una menor probabilidad de coincidir cumpleaños cuando hay más cumpleaños posibles. Pero el número más pequeño con probabilidad mayor a 0.5 sigue siendo 23.

Por supuesto, un purista matemático puede argumentar que los años bisiestos no siempre vienen cada cuatro años, por lo que los cálculos necesitan modificaciones adicionales. Sin embargo, el último año cuatrienal que no fue un año bisiesto fue 1900, y el siguiente será 2100. El número de personas que viven ahora que nacieron en 1900 es tan pequeño que creo que nuestra aproximación es válida para todos los propósitos prácticos. Pero puede hacer las modificaciones necesarias si lo desea.

La paradoja del cumpleaños tiene implicaciones más allá del mundo de las apuestas de salón. Una técnica estándar en el almacenamiento de datos es asignar a cada elemento un número llamado código hash. El artículo se almacena en un contenedor correspondiente a su código hash. Esto acelera la recuperación porque solo debe buscarse un solo contenedor. La paradoja del cumpleaños muestra que la probabilidad de que dos o más elementos terminen en el mismo contenedor es alta, incluso si el número de elementos es considerablemente menor que el número de contenedores. Por lo tanto, se requiere un manejo eficiente de contenedores que contengan dos o más artículos en todos los casos.

 

Veinticinco años en veinte

Original article:http://www.bikexprt.com/bicycle/mytwenty.htm

Una bicicleta convencional es demasiado grande para caber cómodamente en el baúl de un automóvil. Las bicicletas están prohibidas como equipaje en muchas líneas de autobús y tren. Las aerolíneas cobran grandes cantidades de dinero para transportar bicicletas. Una bicicleta plegable puede resolver todos estos problemas. Doblada dentro de una bolsa de lona o estuche de transporte, pasa a cualquier lugar como una pieza más de equipaje.

Algunas bicicletas plegables, diseñadas para ser lo más compactas y livianas posible, sacrifican las cualidades de conducción. Muchos ni siquiera tienen suficiente extensión de tija de sillín para permitir que un hombre adulto de estatura promedio pedalee eficientemente. El marco es a menudo flexible, y puede haber poco espacio para el equipaje.

El Raleigh Twenty, por otro lado, es un caballo de batalla. Sus ruedas pequeñas implican un ligero aumento en la resistencia a la rodadura, pero tiene una posición de conducción normal y buenas cualidades de manejo. Con la pequeña rueda trasera colocada bien detrás del tubo del asiento, la distancia entre ejes es convencional, y una gran cantidad de equipaje puede caber en la parte superior de la parrilla trasera.


Montando mi Raleigh Twenty en 1979. Mi barba es en su mayoría blanca ahora,
pero los Veinte y yo todavía nos mantenemos en buena forma. Eso
¡Ha necesitado muchas más piezas de repuesto que las que tengo!

johntwen2.jpg (50528 bytes)

photo © 1979, Sheldon Brown


El Twenty solo está disponible en estos días. Twentys aparecen con bastante frecuencia en EBay.

Un stock Twenty tiene componentes Raleigh de acero y una silla de vinilo acolchada, como se muestra en la foto de abajo. También puede ver la hoja de instrucciones de un propietario original. Pero he personalizado mi Veinte, como se muestra en la segunda foto a continuación.


Un stock veinte estacionado en una calle de Filadelfia, verano de 2004

022_19B Stock Twenty in Phila.jpg (34881 bytes)

John S. Allen photo

My Twenty en 1979, recién personalizado –
sin rack trasero o cinta de manillar todavía.

mytwentya.jpg (38540 bytes)

John S. Allen photo


Mi amigo Sheldon Brown también está muy interesado en los años veinte y sheldonbrown.com tiene una página web sobre ellos. Encontró mi Twenty en un mercado de pulgas y me lo vendió por $ 35. Luego lucía una tija de sillín extendida hecha del tubo del asiento, otra bicicleta, un vástago del manubrio de 3 pies de altura coronado por un volante automotriz, y pintura dorada de una lata de aerosol. Solo puedo comenzar a imaginar cómo se usó antes de que Sheldon lo adquiriera.

Me deshice de los componentes extraños, soldadas en los frenos de los frenos de centro de Mafac, hice un chorro de arena en el bastidor y lo pinté con pintura epoxi marina fea pero resistente. Instalé un juego de bielas de aluminio, llantas de aluminio, manillar de caída y una silla de cuero. Después de haber adquirido un dado de 26 TPI de una tienda de bicicletas que se estaba cerrando, enhebé la horquilla y reemplacé el cojinete superior de nailon con un conjunto de bolas de Raleigh. Arreglé un hub de 5 velocidades Sturmey-Archer para un rango de 36 a 81 pulgadas (desarrollo de 2.9 a 6.5 metros). El centro de engranaje interno, capaz de cambiar hacia abajo en una parada, es ideal para ir y venir de la ciudad.

Tomé la foto de arriba poco después de ensamblar mi Twenty en 1979. Todavía no hay rejilla trasera. Todavía no estaba seguro de que las palancas de freno y las palancas de cambio estuvieran colocadas correctamente, por lo que el manillar aún no está pegado. Ni siquiera he instalado clips de punta.

El bajo centro de gravedad del Twenty y las ruedas pequeñas lo hacen manejar como una bicicleta mucho más ligera. A pesar de los neumáticos anchos, la inercia rotacional es tan baja como con una bicicleta de carreras, por lo que los Veinte viajan rápidamente. Las ruedas pequeñas hacen que las Veinticinco pulgadas sean más cortas en general que una bicicleta convencional, por lo que funcionan muy bien en los atascos.

A pesar de la personalización, mi Twenty es más pesada que otras bicicletas compactas fabricadas hoy por Bike Friday, Brompton, Dahon y Moulton, sin embargo, la Twenty es mi mejor bicicleta para viajes y diligencias de corta a media distancia. La mayoría de los años, viajo mil millas en el Veinte. Utilizando una caja de cartón embutida en la rejilla trasera y una mochila suave, puedo llevar fácilmente a casa 40 libras de víveres en el Veinte. Puedo doblar el Veinte, encerrarlo alrededor de un poste del parquímetro, y tomar la silla de montar, la tija del sillín y la llave de la bisagra, haciendo del Veinte un blanco muy poco atractivo para un ladrón.

El Twenty es un poco grande y pesado para doblar y llevar a un autobús de cercanías o un vagón urbano. Recomiendo un Bike Friday, Brompton o DaHon para ese uso. Con el sillín hacia abajo y los manubrios sobre el bastidor, el Twenty encaja perfectamente en el bolso de lona más grande que se vende comúnmente, y está bien para el transporte interurbano en autobús y en tren.

El Veinte también se puede verificar como equipaje de avión y ha viajado conmigo por aire a todos los rincones de los Estados Unidos continentales y a Canadá. Pero en su bolsa, es propenso a sufrir daños por el manejo del equipaje de la aerolínea. El Bike Friday en su maleta dura / trailer es el verdadero negocio para viajar en avión. Tengo un Bike Friday New World Tourist desde 2005, pero aún prefiero los Twenty para viajes de utilidad.


Los Veinte se doblaron y bloquearon (1991), un objetivo poco atractivo para los ladrones.
Ubicación: estacionamiento central del aeropuerto de Logan. Nunca más volverá a suceder, por desgracia,
aunque cientos de autos todavía se estacionan allí.

8906n06B26Twenty parked.jpg (45194 bytes)

John S. Allen photo


Después de mis 25 años de uso, el Twenty es como el famoso hacha original de George Washington, la que tiene 23 mangos nuevos y 7 nuevos. Las únicas partes que quedan de mi personalización original son algunos accesorios pequeños, la tija del sillín, los frenos, la carcasa del cubo delantero, los radios delanteros y la mayor parte del bastidor. Sin embargo, el Twenty todavía se ve mucho como lo hizo en 1979. ¿Por qué cambiar algo que funciona?

Después de mi accidente en 1985, no pude encontrar una horquilla Twenty original, así que corté un tenedor hecho para ruedas de 27 pulgadas y solté nuevas punteras. La nueva horquilla tiene menos rastrillo que la original y la Veinte ahora sigue mejor las curvas.

En 1996, la vaina derecha se oxidó desde adentro y se rompió. Llegué a casa: la cadena sin desviador sujetaba los extremos rotos de la vaina. Reemplacé ambas vainas con otras que corté de un marco de basura. Las nuevas vainas son cónicas y más fuertes que las anteriores. Me aseguré de que drenan bien, para evitar una repetición del problema de la oxidación. Cuando cambié las vainas, repinqué el cuadro con el mismo esmalte epoxi marino que antes. La fealdad es una virtud en una bicicleta de ciudad.

Ahora uso barras de goteo volcadas y acortadas en los extremos para que no golpeen mis muñecas. Con el tallo más corto, los manubrios se flexionan mucho menos de lo que solían hacerlo. Probablemente los modifique nuevamente, ya que los extremos de las barras son incómodos para mis palmas.

Las llantas de aluminio originales de Weinmann – la primera disponible en tamaño de 20 x 1.75 – se habían abollado, y sus paredes laterales estrechas dificultaban los ajustes de los frenos. Reemplacé estas llantas con un nuevo par de Weinmann, del tipo que Burley usa en sus remolques.

La gran alforja Carradice apenas afecta el manejo de la bicicleta ya que está muy cerca de mi centro de gravedad. También lo uso en mi bicicleta de paseo: puede llevar todos los suministros para un recorrido de fin de semana, excepto la carpa. Recibí esta bolsa de Harris Cyclery, que también vende por correo. A veces utilizo una bolsa de manillar, como mi “guantera”, para herramientas, cámara, refrigerios, teléfono celular y mapas.


The Twenty, 30 de abril de 2005

DSCF0272 Twentysm.jpg (64659 bytes)

John S. Allen photo


Originalmente equipé el Twenty con luces de clip Ray-O-Vac alimentadas por baterías recargables de linterna. Ahora uso luces de generador, pero las alimentaré con una batería de celda de gel de 6 voltios que guardo en un bolsillo lateral de la alforja. La batería me permite usar bombillas más brillantes que con un generador. Una abrazadera del generador soldada, el equipo original en la horquilla delantera de repuesto, me permitiría cambiar fácilmente a un generador para usar el Veinte, donde no podía esperar conectar mi cargador de batería.

El Twenty se encuentra ahora en su tercer soporte inferior Phil Wood y ha superado más de una docena de neumáticos, cadenas y ruedas dentadas, cuatro monturas y numerosas zapatas y cables de freno.

Mientras escribo esto el 7 de mayo de 2005, he regresado recientemente de la ciudad de Nueva York, donde recorrí 45 millas el domingo pasado, incluido el 5-Boro Tour, y docenas de millas desde entonces. Para mi viaje a casa, metí a los Veinte en su petate en la terminal de Port Authority y monté en un autobús Greyhound. Cuando el autobús me dejó en Framingham, volví a montar los Veinte, metí mi maleta blanda en la parrilla trasera y recorrí los 9 kilómetros de casa hasta Waltham. ¡El Veinte todavía sirve!

[Actualización, septiembre de 2018: un auricular superior Aheadset de 1 “evita la necesidad de volver a enhebrar: vea la página en sheldonbrown.com. Finalmente tuve que reemplazar el marco, que se había oxidado. Aquí se describe la bicicleta con el nuevo armazón. más sobre óxido, prevención de oxidación y reacabado, vea esta página. Estoy utilizando luces LED ahora. Y ahora he ensamblado un segundo Twenty con un concentrador Shimano Nexus de 8 velocidades, no hay páginas sobre eso todavía.

Veinte enlaces (bueno, en realidad, solo catorce enlaces):

Hoja de instrucciones original de Raleigh Twenty

Sheldon Brown’s Twenty page

Tony Hadlund’s history of the Twenty

Raleightwentywebs.com

Página de Wikipedia sobre los Veinte

Un Veinte modificado empacado en una maleta como un Bike Friday

Veinte modificado de Lenny Taylor

Veinte modificados de Tarik Saleh

El proyecto Raleigh Twenty de Harv

Un Veinte sin modificar pero muy querido

Un magnífico Veinte modificado – y enlaces a muchos otros!

Twenty muy modificado de Guy Bouchard (también modificaciones de marco)
(en inglés y francés, aún!)

Veinte país

Información retro de Raleigh sobre los Veinte

Erupción del bañista¿Qué más podría ser?

Original article:https://www.dermnetnz.org/topics/sea-bathers-eruption/

Autor: Assoc. Prof. Marius Rademaker, Departamento de Dermatología, Hospital Waikato, Hamilton, Nueva Zelanda. Actualizado por Vanessa Ngan, escritora del personal, 1 de febrero de 2014.


¿Cuál es la erupción del bañista de mar?

La erupción del bañista marino es una erupción que afecta áreas de la piel cubiertas por un traje de baño, en lugar de áreas expuestas, después de nadar en el mar. Es causada por picaduras de las células urticantes (también llamadas nematocistos) de las formas larvales de ciertas anémonas de mar y medusas dedal. Los dedales marinos son pequeñas medusas tropicales que, incluso en la adultez, no llegan a medir más de un centímetro de tamaño. La mayoría de los casos de erupción del bañista se producen durante el verano, ya que parece depender de la temperatura del agua. Afecta a nadadores, buceadores o buceadores poco después de salir del agua.

La erupción del bañista de mar ha sido llamada piojo de mar por algunos. Los piojos de mar se deben en realidad a formas larvales inmaduras de platelmintos parásitos (esquistosomas) que penetran en la piel.

La erupción de Seabather se describió por primera vez en 1949 como una erupción cutánea que pica después de nadar en la costa este de Florida. Ahora se ha informado que ocurre en muchas aguas tropicales y subtropicales. En Florida se llama ‘Pica-Pica’, el español para ‘Itchy-Itchy’.

Erupción del bañista
Sea bather's eruption

¿Qué causa la erupción del bañista?

La erupción del bañista marino es una reacción de hipersensibilidad a la forma larvaria, o planulae, de la medusa dedal, Linuche unguiculata. También se ha informado que es causado por la etapa de larva de la anémona marina, Edwardsiella lineata, y varias larvas de cnidarios en otras partes del mundo.

La erupción es causada por la reacción alérgica del cuerpo a la toxina inyectada en la piel por las pequeñas células urticantes o nematocistos de la medusa larval. Estas diminutas formas larvales (el tamaño de una cabeza de alfiler) quedan atrapadas debajo de los trajes de baño o en el pelo del bañista. Cada larva está equipada con varias células urticantes, que pueden ser activadas por una simple presión mecánica o por cambios osmóticos que ocurren con la evaporación o al enjuagar con agua dulce. La erupción típicamente se desarrolla debajo del traje de baño, que se cree que atrapa a las larvas de las medusas contra la piel. Cuando el nadador sale del mar, el traje de baño sale del agua, atrapando la larva entre el traje y la piel. La presión sobre el pez jalea pequeño hace que las células urticantes se descarguen, liberando toxina en la piel. El uso de trajes de baño durante períodos prolongados después de nadar, ducharse en agua dulce y estimulación mecánica (frotar con una toalla) empeora la erupción.

Tenga en cuenta que aún le pueden picar días o semanas después de lavar y secar la ropa infestada. Las células urticantes no están realmente vivas y pueden persistir hasta que una reacción física o química particular las estimule a disparar el aguijón que contiene la toxina.

¿Cuáles son los síntomas de la erupción del bañista de mar?

Una sensación de hormigueo debajo del traje de baño (senos, ingle, puños de trajes de neopreno) a menudo se nota por primera vez cuando todavía está en el agua. Durante varias horas se convierte en un picor, que puede durar varias semanas. Por lo general, está confinado debajo del traje de baño y algunos pacientes (hasta un quinto) se quejan de sentirse un poco mal, con temperaturas y fatiga. Algunos niños también desarrollan trastornos de estómago. Cuando uno toma una ducha de agua dulce, mientras todavía usa el traje de baño, la picazón empeora. La picazón puede ser bastante grave y dolorosa.

La erupción suele comenzar un par de horas después de nadar. Consiste en protuberancias rojas, que pueden volverse densas y correr juntas en una masa. Cada persona puede reaccionar de manera diferente a las picaduras dependiendo de su sensibilidad y exposición previa.

¿Qué puedes hacer para evitar la erupción del bañista?

Aparte de permanecer fuera del agua, no se puede hacer mucho para evitar por completo la picadura de las medusas si están presentes en el agua. Las personas han probado varias cremas de barrera para evitar que las larvas lleguen a la piel, pero las cremas no proporcionan una barrera lo suficientemente fuerte para los aguijones. A veces, un traje mojado limitará la infestación a los bordes de la prenda. La experiencia general indica que la infestación parece ocurrir cerca de la superficie del agua, por lo que los buceadores y nadadores parecen ser los más vulnerables.

Si crees que has estado expuesto a las larvas de las medusas, la medida preventiva más efectiva es quitarte el traje de baño lo antes posible y enjuaga el cuerpo con agua de mar que no tenga las medusas. Seque con una toalla y cámbiese de ropa. No frote las áreas afectadas con toallas o manos, ya que podrían causar picaduras adicionales. Precaución: un enjuague inmediato con agua dulce, vinagre u otras soluciones en realidad puede causar picadura adicional de las larvas que se adhieren a su piel o ropa.

¿Cuál es el tratamiento para la erupción del bañista de mar?

Una vez que ocurre la erupción del bañista (y se ha quitado el traje de baño y se ha duchado), una aplicación de vinagre diluido o alcohol puede neutralizar cualquier toxina que quede en la piel. Un paquete de hielo puede ayudar a aliviar el dolor. El tratamiento más útil es la loción de hidrocortisona al 1% aplicada 2-3 veces al día durante 1-2 semanas. La loción tópica de calamina con mentol al 1% también puede ser calmante. Los medicamentos antiinflamatorios no esteroideos como el ibuprofeno y la aspirina (pero no en los niños) también pueden ayudar a reducir el dolor y la inflamación.

Si la reacción es grave, la persona lesionada puede sufrir dolor de cabeza, fiebre, escalofríos, debilidad, vómitos, picazón en los ojos y ardor al orinar, y debe tratarse con prednisona oral (esteroides).

Las células urticantes pueden permanecer en el traje de baño incluso después de secarse, por lo que una vez que la persona ha desarrollado la erupción del bañista, la ropa debe lavarse a máquina o enjuagarse a fondo con alcohol o vinagre, luego lavarse a mano con agua y jabón.

Los antihistamínicos también pueden ser de algún beneficio. Otros tratamientos que se han sugerido incluyen remedios hechos con bicarbonato de sodio, azúcar, orina, aceite de oliva y ablandador de carne, aunque algunos de estos pueden aumentar la liberación de toxina y agravar la erupción. Los síntomas de malestar general, trastornos de la barriga y fiebre deben tratarse de la manera normal.

¿Qué más podría ser?

La erupción del bañista de mar es a menudo mal llamada ‘piojo de mar’, que son verdaderos parásitos de crustáceo de los peces. Estas larvas de lombrices tratan de esconderse en la piel de los nadadores (por lo que muerden en lugar de picar) y generalmente se encuentran en la piel expuesta (similar a las picaduras de las moscas de arena). La erupción del bañista marino también puede parecer muy similar a la dermatitis de algas marinas, pero no se encuentran algas en la piel o en trajes de baño.

TEORÍAS DE ÁCIDOS Y BASES

Esta página describe las teorías de ácidos y bases de Arrhenius, Bronsted-Lowry y Lewis, y explica las relaciones entre ellas. También explica el concepto de un par conjugado: un ácido y su base conjugada, o una base y su ácido conjugado.

La teoría de Arrhenius de ácidos y bases

La teoría

  • Los ácidos son sustancias que producen iones de hidrógeno en solución.
  • Las bases son sustancias que producen iones de hidróxido en solución.

La neutralización ocurre porque los iones de hidrógeno y los iones de hidróxido reaccionan para producir agua.

Limitaciones de la teoría

El ácido clorhídrico es neutralizado por la solución de hidróxido de sodio y la solución de amoníaco. En ambos casos, obtienes una solución incolora que puedes cristalizar para obtener una sal blanca, ya sea cloruro de sodio o cloruro de amonio.

Estas son claramente reacciones muy similares. Las ecuaciones completas son:

En el caso del hidróxido de sodio, los iones de hidrógeno del ácido reaccionan con los iones de hidróxido del hidróxido de sodio, en línea con la teoría de Arrhenius.

Sin embargo, en el caso del amoniaco, ¡no parece haber ningún ion de hidróxido!

Pero si observa cuidadosamente las ecuaciones, el amoníaco está en solución: NH3 (aq). El amoníaco reacciona con agua así:

 

Esta es una reacción reversible, y en una solución típica de amoníaco diluido, aproximadamente el 99% del amoníaco permanece como moléculas de amoníaco. Sin embargo, hay iones de hidróxido y reaccionan con iones de hidrógeno exactamente de la misma manera que los iones de hidróxido de hidróxido de sodio.

De modo que puede justificar que el amoniaco es una base en la definición de Arrhenius: produce iones de hidróxido en solución. Pero la mayor parte de la reacción va a ser una reacción directa entre las moléculas de amoníaco y los iones de hidrógeno, lo que no se ajusta a la definición de Arrhenius.

Esta misma reacción también ocurre entre el gas amoníaco y el gas cloruro de hidrógeno.

 

En este caso, no hay iones de hidrógeno o iones de hidróxido en solución, porque no hay solución. La teoría de Arrhenius no consideraría esto como una reacción ácido-base, a pesar de que está produciendo el mismo producto que cuando las dos sustancias estaban en solución. ¡Eso es tonto!

La teoría de Bronsted-Lowry de ácidos y bases

La teoría

  • Un ácido es un donador de protones (iones de hidrógeno).
  • Una base es un aceptor de protones (iones de hidrógeno).

La relación entre la teoría de Bronsted-Lowry y la teoría de Arrhenius

La teoría de Bronsted-Lowry no va en contra de la teoría de Arrhenius de ninguna manera, simplemente se agrega.

Los iones hidróxido son todavía bases porque aceptan iones de hidrógeno de ácidos y forman agua.

Un ácido produce iones de hidrógeno en solución porque reacciona con las moléculas de agua dándoles un protón.

Cuando el gas de cloruro de hidrógeno se disuelve en agua para producir ácido clorhídrico, la molécula de cloruro de hidrógeno da un protón (un ion de hidrógeno) a una molécula de agua. Un enlace coordinado (dativo covalente) se forma entre uno de los pares solitarios en el oxígeno y el hidrógeno del HCl. Se producen iones hidroxonio, H3O +.


Nota: Si no está seguro acerca de la vinculación coordinada, debe seguir este enlace. Los enlaces coordinados se mencionarán varias veces a lo largo del resto de esta página.
Use el botón ATRÁS en su navegador para regresar rápidamente a esta página.

Cuando un ácido en solución reacciona con una base, lo que en realidad funciona como el ácido es el ion hidroxonio. Por ejemplo, un protón se transfiere desde un ion hidroxonio a un ion hidróxido para producir agua.
Showing the electrons, but leaving out the inner ones:
Es importante darse cuenta de que cada vez que hablas de iones de hidrógeno en solución, H + (aq), de lo que estás hablando en realidad son iones hidroxonio.
El problema del cloruro de hidrógeno / amoníaco
Esto ya no es un problema usando la teoría de Bronsted-Lowry. Ya sea que esté hablando de la reacción en solución o en estado de gas, el amoníaco es una base porque acepta un protón (un ion de hidrógeno). El hidrógeno se une al par solitario en el nitrógeno del amoníaco a través de un enlace coordinado.
Si está en solución, el amoníaco acepta un protón de un ion hidroxonio:
Si la reacción ocurre en estado de gas, el amoníaco acepta un protón directamente del cloruro de hidrógeno:
De cualquier manera, el amoníaco actúa como una base al aceptar un ion de hidrógeno de un ácido.
Pares conjugados
Cuando el cloruro de hidrógeno se disuelve en el agua, casi el 100% de él reacciona con el agua para producir iones hidroxonio e iones cloruro. El cloruro de hidrógeno es un ácido fuerte, y tendemos a escribir esto como una reacción unidireccional:

Nota: estoy omitiendo deliberadamente los símbolos de estado de esta y la siguiente ecuación para concentrarme en los bits que importan.
Encontrará más información sobre ácidos fuertes y débiles en otra página de esta sección.

De hecho, la reacción entre el HCl y el agua es reversible, pero solo en un grado menor. Para generalizar, considere un HA ácido y piense que la reacción es reversible.
Pensando en la reacción hacia adelante:
  • El HA es un ácido porque dona un protón (ion de hidrógeno) al agua.
  • El agua es una base porque acepta un protón del HA.
Pero también hay una reacción inversa entre el ion hidroxonio y el ion A:
  • El H3O + es un ácido porque está donando un protón (ion de hidrógeno) al ion A.
  • El ion A es una base porque acepta un protón del H3O +.
La reacción reversible contiene dos ácidos y dos bases. Pensamos en ellos por parejas, llamados pares conjugados.
Cuando el ácido, HA, pierde un protón, forma una base, A-. Cuando la base, A-, acepta un protón nuevamente, obviamente refunde el ácido, HA. Estos dos son un par conjugado.
Los miembros de un par conjugado se diferencian entre sí por la presencia o ausencia del ion de hidrógeno transferible.
Si está pensando en HA como el ácido, entonces A- es su base conjugada.
Si estás pensando en A- como la base, entonces HA es su ácido conjugado.
El agua y el ion hidroxonio también son un par conjugado. Pensando en el agua como base, el ion hidroxonio es su ácido conjugado porque tiene el ion de hidrógeno extra que puede liberar nuevamente.
Al pensar en el ion hidroxonio como un ácido, el agua es su base conjugada. El agua puede aceptar un ion de hidrógeno nuevamente para reformar el ion hidroxonio.
Un segundo ejemplo de pares conjugados
Esta es la reacción entre el amoníaco y el agua que vimos antes:
Piensa primero en la reacción directa. El amoníaco es una base porque acepta iones de hidrógeno del agua. El ion amonio es su ácido conjugado: puede liberar ese ion hidrógeno nuevamente para reformar el amoniaco.
El agua actúa como un ácido y su base conjugada es el ion hidróxido. El ion hidróxido puede aceptar un ion de hidrógeno para reformar el agua.
Mirándolo desde el otro lado, el ion amonio es un ácido, y el amoníaco es su base conjugada. El ion hidróxido es una base y el agua es su ácido conjugado.
Sustancias anfóteras
Posiblemente haya notado (¡aunque probablemente no!) Que en uno de los dos últimos ejemplos, el agua estaba actuando como base, mientras que en el otro actuaba como un ácido.
Una sustancia que puede actuar como un ácido o una base se describe como anfótera.

Nota: También puede encontrar el término amphiprotic en este contexto. Las dos palabras están relacionadas y se confunden fácilmente.
Una sustancia anfiprótica es una que puede donar iones de hidrógeno (protones) y también aceptarlos. El agua es un buen ejemplo de tal compuesto. El agua actúa como un ácido (donante de iones de hidrógeno) y como una base (al aceptarlos). La parte “prótica” de la palabra se refiere a los iones de hidrógeno (protones) ya sean donados o aceptados. Otros ejemplos de compuestos anfipróticos son aminoácidos, e iones como HSO4- (que pueden perder un ion de hidrógeno para formar iones sulfato o aceptar uno para formar ácido sulfúrico).
Pero además de ser anfiprótico, estos compuestos también son anfóteros. Amphoteric significa que tienen reacciones como ácidos y bases. Entonces, ¿cuál es la diferencia entre los dos términos?
Todas las sustancias anfipróticas también son anfóteras, pero lo contrario no es cierto. Existen sustancias anfóteras que no donan ni aceptan iones de hidrógeno cuando actúan como ácidos o bases. Existe una definición completamente nueva de comportamiento ácido-base que está por cumplir (la teoría de Lewis) que no necesariamente involucra a los iones de hidrógeno.
Un ácido de Lewis es un aceptor de pares de electrones; una base de Lewis es un donador de pares de electrones (ver a continuación).
Algunos óxidos de metales (como el óxido de aluminio) son anfóteros, reaccionan tanto como ácidos como bases. Por ejemplo, reaccionan como bases porque los iones de óxido aceptan iones de hidrógeno para producir agua. Eso no es un problema en lo que respecta a la definición de anfiprótico, pero sí la reacción como un ácido. ¡El óxido de aluminio no contiene iones de hidrógeno para donar! Pero el óxido de aluminio reacciona con bases como la solución de hidróxido de sodio para formar iones de aluminato complejos.
Puede pensar en pares solitarios en iones de hidróxido como formadores de enlaces covalentes (coordinados) dativos con orbitales vacíos en los iones de aluminio. Los iones de aluminio aceptan pares solitarios (que actúan como un ácido de Lewis). Por lo tanto, el óxido de aluminio puede actuar como un ácido y una base, y por eso es anfótero. Pero no es anfiprótico porque tanto la reacción ácida como la reacción base no implican iones de hidrógeno.
He pasado más de 40 años enseñando (en el laboratorio, a través de libros e Internet) ¡sin usar el término anfiprótico una sola vez! Simplemente no veo el sentido. El término anfótero abarca todos los casos de sustancias que funcionan como ácidos y bases sin excepción. El término anfiprótico solo puede usarse cuando ambas funciones implican la transferencia de iones de hidrógeno; en otras palabras, solo puede usarse si se limita a hablar de la teoría de Bronsted-Lowry. Personalmente, me quedaría con el término más antiguo, más útil, “anfótero”, a menos que tu plan de estudios exija que uses la palabra “anfiprótico”.

La teoría de Lewis de ácidos y bases
Esta teoría se extiende más allá de las cosas que normalmente consideramos como ácidos y bases.
La teoría
  • Un ácido es un aceptor de pares de electrones.
  • Una base es un donador de pares de electrones.
La relación entre la teoría de Lewis y la teoría de Bronsted-Lowry
Bases de Lewis
Es más fácil ver la relación al observar exactamente qué hacen las bases de Bronsted-Lowry cuando aceptan iones de hidrógeno. Tres bases de Bronsted-Lowry que hemos analizado son iones de hidróxido, amoníaco y agua, y son típicas del resto.
La teoría de Bronsted-Lowry dice que están actuando como bases porque se combinan con iones de hidrógeno. La razón por la que se combinan con iones de hidrógeno es que tienen pares de electrones solitarios, que es lo que dice la teoría de Lewis. Los dos son completamente consistentes.
Entonces, ¿cómo se extiende esto el concepto de una base? Por el momento no lo hace, solo lo mira desde un ángulo diferente.
Pero, ¿qué ocurre con otras reacciones similares de amoníaco o agua, por ejemplo? Según la teoría de Lewis, cualquier reacción en la que el amoníaco o el agua utilizaran sus pares de electrones solitarios para formar un enlace coordinado se contaría como si actuaran como base.
Aquí hay una reacción de la que hablará en la página sobre el vínculo coordinado. El amoníaco reacciona con BF3 al usar su par solitario para formar un enlace coordinado con el orbital vacío del boro.
En lo que respecta al amoniaco, se comporta exactamente igual que cuando reacciona con un ion de hidrógeno: está utilizando su par solitario para formar un enlace coordinado. Si va a describirlo como una base en un caso, tiene sentido describirlo como uno en el otro caso también.

Nota: Si aún no ha leído la página sobre la vinculación coordinada, debe hacerlo ahora. Encontrará un ejemplo importante de agua que actúa como base de Lewis, así como este ejemplo, aunque el término base de Lewis no se usa en esa página.
Use el botón ATRÁS en su navegador para regresar rápidamente a esta página.

Ácidos de Lewis
Los ácidos de Lewis son aceptores de pares de electrones. En el ejemplo anterior, el BF3 actúa como el ácido de Lewis al aceptar el par solitario del nitrógeno. En la teoría de Bronsted-Lowry, el BF3 no tiene nada remotamente ácido al respecto.
Esta es una extensión del término ácido mucho más allá de cualquier uso común.
¿Qué pasa con las reacciones más obviamente ácido-base, como, por ejemplo, la reacción entre el amoníaco y el gas cloruro de hidrógeno?
¿Qué es exactamente lo que está aceptando el par solitario de electrones en el nitrógeno? Los libros de texto a menudo escriben esto como si el amoníaco donara su par solitario a un ion de hidrógeno, un protón simple sin electrones a su alrededor.
Eso es engañoso! Usualmente no se obtienen iones de hidrógeno libres en los sistemas químicos. Son tan reactivos que siempre están apegados a otra cosa. No hay iones de hidrógeno sin combinar en HCl.
No hay un orbital vacío en ninguna parte del HCl que pueda aceptar un par de electrones. ¿Por qué, entonces, es el HCl un ácido de Lewis?
El cloro es más electronegativo que el hidrógeno, y eso significa que el cloruro de hidrógeno será una molécula polar. Los electrones en el enlace hidrógeno-cloro serán atraídos hacia el extremo del cloro, dejando el hidrógeno ligeramente positivo y el cloro ligeramente negativo.

Nota: Si no está seguro acerca de la electronegatividad y la polaridad de enlace, puede ser útil seguir este enlace.Use el botón ATRÁS en su navegador para regresar rápidamente a esta página.

El par solitario en el nitrógeno de una molécula de amoníaco se ve atraído por el átomo de hidrógeno ligeramente positivo en el HCl. A medida que se acerca, los electrones en el enlace hidrógeno-cloro se repelen aún más hacia el cloro.
Eventualmente, se forma una unión coordinada entre el nitrógeno y el hidrógeno, y el cloro se desprende como un ion cloruro.
Esto se muestra mejor utilizando la notación de “flecha rizada” comúnmente utilizada en los mecanismos de reacción orgánicos.

Nota: Si no está contento con el uso de flechas rizadas para mostrar los movimientos de los pares de electrones, debe seguir este enlace.Use el botón ATRÁS en su navegador para regresar rápidamente a esta página.

La molécula de HCl completa está actuando como un ácido de Lewis. Está aceptando un par de electrones del amoníaco, y en el proceso se rompe. Los ácidos de Lewis no necesariamente tienen que tener un orbital vacío existente.
Un comentario final sobre ácidos y bases de Lewis
Si eres un estudiante de nivel A ‘UK, es posible que de vez en cuando encuentres los términos ácido de Lewis y base de Lewis en libros de texto u otras fuentes. Todo lo que necesitas recordar es:
  • Un ácido de Lewis es un aceptor de pares de electrones.
  • Una base de Lewis es un donador de pares de electrones.

Nota: Recuerda esto al pensar que el amoníaco actúa como base. La mayoría de la gente en este nivel está familiarizada con el par reactivo solitario del nitrógeno que acepta iones de hidrógeno. El amoníaco es básico debido a su par solitario. Eso significa que las bases deben tener pares solitarios para donar. Los ácidos son lo opuesto.

Para todos los propósitos generales, siga con la teoría de Bronsted-Lowry.

Системы поддержки принятия решений

Original:http://www.pitt.edu/~druzdzel/abstracts/dss.html

Авторы: Марек Дж. Друздель и Роджер Флинн
Лаборатория систем принятия решений
Школа информационных наук
и программа интеллектуальных систем
Университет Питтсбурга
e-mail: marek@sis.pitt.edu, flynn@sis.pitt.edu

  Это статья в энциклопедии, в которой рассматривается область систем поддержки принятия решений. Ниже следует введение в статью. Если это вас заинтересовало, см. Полную версию (ссылки на электронные версии доступны ниже).

Введение:

Принятие решений в отношении сложных систем (например, управление организационными операциями, производственными процессами или инвестиционными портфелями, командование и контроль воинских частей, контроль над атомными электростанциями) часто обуславливает наши познавательные способности. Несмотря на то, что индивидуальные взаимодействия между переменными системы могут быть хорошо поняты, прогнозирование того, как система будет реагировать на внешние манипуляции, такие как политическое решение, часто бывает затруднительным. Каким будет, например, эффект введения третьей смены на заводской этаж? Можно было бы ожидать, что это увеличит производство завода примерно на 50%. Тем не менее, необходимо учитывать такие факторы, как добавочная заработная плата, изношенность машин, разрывы обслуживания, использование сырья, логистика поставок и будущий спрос, поскольку они все повлияют на общий финансовый результат этого решения. Многие переменные вовлечены в сложные и часто тонкие взаимозависимости, и прогнозирование общего результата может быть сложным.

Существует немало эмпирических доказательств того, что человеческие интуитивные суждения и принятие решений могут быть далеки от оптимальных, и это еще более усложняется со сложностью и стрессом. Во многих ситуациях важно качество решений; поэтому помощь в решении человеческих суждений и принятии решений была основным направлением науки на протяжении всей истории. Дисциплины, такие как исследования статистики, экономики и операций, разработали различные методы для рационального выбора. Совсем недавно эти методы, часто усиливаемые различными методами, происходящими из информатики, когнитивной психологии и искусственного интеллекта, были реализованы в виде компьютерных программ либо как автономные инструменты, либо как интегрированные вычислительные среды для комплексного принятия решений. Такие среды часто получают общее название систем поддержки принятия решений (DSS). Концепция DSS чрезвычайно широка, и ее определения различаются в зависимости от авторской точки зрения. Чтобы избежать исключения любого из существующих типов DSS, мы определяем их примерно как интерактивные компьютерные системы, которые помогают пользователям в суждениях и действиях выбора. Другое имя, иногда используемое в качестве синонима для DSS, – это системы, основанные на знаниях, которые ссылаются на их попытку формализовать знание домена, чтобы оно было поддано механизированным рассуждениям. Системы поддержки принятия решений приобретают все большую популярность в различных областях, включая бизнес, инженерию, военную и медицину. Они особенно ценны в ситуациях, когда количество доступной информации является неподъемным для интуиции невостребованного лица, принимающего решения, и в котором важны точность и оптимальность. Системы поддержки принятия решений могут помочь человеческим когнитивным недостаткам путем интеграции различных источников информации, обеспечения интеллектуального доступа к соответствующим знаниям и содействия процессу структурирования решений. Они также могут поддерживать выбор среди четко определенных альтернатив и основываться на формальных подходах, таких как методы инженерной экономики, исследования операций, статистика и теория принятия решений. Они также могут использовать методы искусственного интеллекта для эвристического решения проблем, которые трудно поддаются формальным методам. Надлежащее применение инструментов принятия решений повышает производительность, эффективность и эффективность и дает многим предприятиям сравнительное преимущество перед конкурентами, позволяя им оптимально выбирать технологические процессы и их параметры, планируя бизнес-операции, логистику или инвестиции. Хотя трудно переоценить важность различных компьютерных средств, которые имеют отношение к принятию решений (например, баз данных, программного обеспечения для планирования, электронных таблиц), в этой статье основное внимание уделяется ядру DSS, которая напрямую поддерживает проблемы моделирования решений и определяет лучшие альтернативы. Мы кратко обсудим характеристики проблем решения и способы поддержки принятия решений с помощью компьютерных программ. Затем мы охватываем различные компоненты DSS и роль, которую они играют в поддержке принятия решений. Мы также вводим новый класс нормативных систем (т. Е. DSS, основанный на прочных теоретических принципах) и, в частности, аналитические аналитические DSS. Наконец, мы рассматриваем проблемы, связанные с пользовательскими интерфейсами для DSS, и подчеркиваем важность пользовательских интерфейсов для максимального качества решений, поддерживаемых компьютерными программами.

 

Dogpounds, Deviance y Drunks

Original Article:http://www.roizen.com/ron/dogpounds.htm

El estudio del alcoholismo parece siempre suspendido entre dos perspectivas de la ciencia del comportamiento, una que se concentra en los individuos y otra que se concentra en las variables socioculturales. Esta división conceptual ha planteado muchas cuestiones fundamentales sobre la naturaleza de las ciencias del comportamiento y la relación entre estas ciencias y la política pública. Cualquier definición de bebida desviada parece necesitar al menos dos variables: por un lado, debe haber un comportamiento (de bebida); por otro lado, debe haber un contexto social dentro del cual ese comportamiento sea inapropiado. Por lo tanto, la idea de la bebida desviada debe ser un desajuste entre la conducta de beber y el contexto social. Durante muchos años, los estudiantes de alcoholismo han estudiado la gama de posibles causas del consumo excesivo (el “comportamiento”); más recientemente, algunos de nosotros nos hemos interesado más por la variación en los contextos sociales como una explicación de la bebida desviada. Cuando el comportamiento es el sujeto, a menudo existe una suposición implícita de que existe un estándar general de consumo habitual de alcohol del cual el alcohólico es claramente desviado. Por lo tanto, el estudio de los alcohólicos en las clínicas, por ejemplo, implícitamente ha implicado a menudo una norma de consumo común y homogénea y un conjunto de prácticas de bebida para los no alcohólicos. El estudio de contextos, por otro lado, ha tendido a desinflar la importancia del comportamiento de beber y concentrarse en las variaciones en los patrones de consumo habituales y aceptables en diferentes contextos sociales. Esta diferencia de perspectiva está cargada de implicaciones y consecuencias científicas y de política. Una pequeña analogía puede ayudar a agudizar algunas de estas implicaciones divergentes:

Supongamos que uno estuviera interesado en comprender el “problema” de los perros callejeros en una comunidad típica. Un enfoque individualista podría comenzar con la idea de que los perros varían en cuanto a su propensión a extraviarse, algunos perros son muy propensos a extraviarse. El problema central para el investigador individualista, por lo tanto, es descubrir las causas de una propensión a la deriva. O, dicho de otra manera, qué es diferente acerca de los perros que se descarrilan en lugar de los perros “normales”. Este enfoque podría postular que la alta desviación es un fenómeno similar a una enfermedad que algunos perros tienen y otros no. La investigación de los vagabundos altos podría proceder “clínicamente” o, en este caso, en el refugio comunitario para animales. Ahí hay perros que han sido capturados por extraviarse y, por extensión, una muestra que puede revelar elementos comunes que difieren de los perros “normales” y que son sintomáticos o implicativos de la etiología de la alta desviación. No todos los perros callejeros, por supuesto, están encarcelados a la vez. Pero en tanto se impute a los extraviados tener cualidades similares a las de las entidades, el problema de una mala muestra no es particularmente importante. Cualquiera que se extravíe correctamente entendido revelará los datos clínicos necesarios, de la misma manera que una muestra de uno es adecuada para la investigación de enfermedades infecciosas si eso es todo lo que tiene que trabajar. Con suerte, el clínico puede descubrir un conjunto de características comunes entre los altos niveles que, vinculados a una teoría de desviación alta, ofrecen una explicación. Dentro de un contexto “clínico”, es probable que esta teoría sea probada por medio del éxito de la terapia que sugiere. En muchos casos, sin embargo, la terapia y la teoría pueden estar notablemente separadas entre sí. En cualquier caso, si se usan drogas o métodos didácticos o (en casos severos) cirugía craneal o locomotora, la prueba del modelo será la falla de estos perros para regresar al refugio o (al menos) regresar con menos frecuencia o por menos episodios de desviación.

Está profundamente enterrado en este enfoque la suposición de que el fenómeno de la alta desviación es relativamente raro. Esta rareza se asume tanto desde el punto de vista práctico como lógico: lógicamente, la alta desviación es identificable solo si la gran mayoría de los perros no son de alta categoría. Si también fueran de alta categoría, el enfoque clínico sería muy amenazante: estaríamos lidiando con una calidad de perros (todos perros o la mayoría de los perros) en lugar de una patología identificable en unos pocos. En segundo lugar, pocas comunidades asumirían el costo de aplicar la terapia correctiva a la mayoría de los perros dentro de sus límites. Por lo tanto, el enfoque clínico contiene el objetivo de “salir del negocio” una vez que se ha rehabilitado el número limitado de perros de alta derivación.

Algunos sociólogos, sin embargo, verían el “problema” de los perros callejeros de una manera bastante diferente de la del investigador individualista. Los sociólogos podrían comenzar con la suposición de que la mayoría de los perros a veces se desviarán. Las diferencias en una propensión inherente a extraviarse no son ni muy grandes ni muy importantes conceptualmente. Más bien, lo importante es la relación entre los perros callejeros y la comunidad. En esta línea, el sociólogo podría comenzar preguntando: “¿Por qué los perros callejeros son un problema en primer lugar?”

Como el investigador individualista, el sociólogo podría sentirse atraído por el refugio de animales, pero la naturaleza de sus observaciones allí sería bastante diferente. Partiendo de la idea de que muchos perros tienen episodios de extravío pero pocos son capturados y mantenidos en la perrera, el sociólogo podría comenzar su investigación sobre el “problema” de los perros callejeros investigando las circunstancias que rodean la captura de perros. Podría descubrir, por ejemplo, que las áreas periféricas de la comunidad contribuyen con pocos o ningún perro al refugio, lo que sugiere que la desviación per se no es la causa de la preocupación de la comunidad (es decir, la captura). Los perros en áreas periféricas, después de todo, probablemente se dejan salir más que los perros del centro. Las implicaciones de las circunstancias que rodean la captura de los perros en la perrera pueden sugerir al sociólogo que el problema de los perros callejeros no es extraviador sino el contexto social: los perros errantes solo crean un problema en ciertos tipos de situaciones. Por lo tanto, la pregunta que enfrenta el sociólogo es una de las variaciones en los contextos con respecto a la amenaza o la interrupción que representan los perros callejeros en cada uno. En lugar de escribir perros, si así lo desea, el sociólogo se preocupa por los contextos de tipeo para llegar a la raíz conceptual del problema social que se presenta. Digamos, por ejemplo, que la mayoría de los perros fueron capturados cuando se congregaron en manadas, cuando defecaron en las propiedades de los observadores sensibles, cuando se volvieron problemáticos en las intersecciones de gran tráfico, cuando pasaron por la zona del circuito normal de las rondas de atrapamoscas, cuando estaban en celo, cuando estaban enfermos o incapacitados, cuando parecían hambrientos o enloquecidos cuando eran grandes, cuando picaban a alguien o se involucraban en una pelea con otro perro, o cuando no estaban lo suficientemente familiarizados con el atrapamoscas para intentar eludir sus esfuerzos de captura.

El “problema” de los extraviados, por lo tanto, es que en algunas situaciones amenazan la seguridad, los estándares de limpieza, el flujo de comercio, los conceptos de moralidad pública, paz y tranquilidad, o excitan los impulsos humanitarios en los observadores humanos. Algunos perros, por supuesto, pueden tener diferentes probabilidades de verse envueltos en este tipo de situaciones: perros cuyos amos viven en el centro o los dejan salir con frecuencia o habitan en áreas con pocos céspedes atractivos o donde ambos cónyuges trabajan o lo que sea pueden tener estructuras de oportunidad diferencial . Pero estos factores explican solo la recurrencia o la reincidencia de los perros en lugar de los problemas sociales centrales a mano. Se pueden descubrir determinantes aún más sofisticados de la captura: si, por ejemplo, los funcionarios de la empresa de captura de perros son evaluados en términos de los ingresos de las multas que producen, los esfuerzos para capturar perros pueden concentrarse en barrios ricos en lugar de pobres para maximice tanto la cantidad de multas o compensaciones como para maximizar la probabilidad de que los propietarios les paguen para recuperar sus perros. En cualquier caso, el producto del análisis del sociólogo será radicalmente diferente del del investigador individualista. En el fondo, el informe del sociólogo hará hincapié en que ciertos problemas son presentados por los perros y estos problemas más que el concepto general de perros callejeros plantean los problemas centrales para la política pública. Puede sugerir que pocas medidas pueden cambiar significativamente las conductas de los perros, y que los esfuerzos o sanciones dirigidas a los propietarios sirven para mantener el nivel de transgresiones caninas a un nivel aceptable. Por lo tanto, una preocupación para el sociólogo es que él fue llamado en absoluto, es decir, estará predispuesto a examinar la situación en términos que iluminen o señalen (en la medida de lo posible) qué ha cambiado de tal manera que sus servicios fueron requisado en absoluto. Partiendo de la idea de una homeostasis o equilibrio en los sistemas sociales, puede reflexionar sobre el desequilibrio que ocasionó sus servicios. Aquí está el problema que presenta el análisis sociológico de la desviación. Puede ser que la fecundidad de los perros haya creado una población de perros ampliada; o tal vez la creciente resistencia a los perros se debe a un cambio en el desarrollo de la comunidad o la desaparición del césped en la ciudad.

Obviamente, las recomendaciones de política que surgen de los análisis individualistas y sociológicos serán bastante diferentes. Un enfoque individualista podría sugerir que la “única” manera de resolver el problema es solicitar activamente a todos los perros que se extravían (o identificarlos en la comunidad de alguna manera) y beneficiarlos con el tratamiento o los tratamientos que resultan ser los más exitosos en la supresión muy errante. El sociólogo, por otro lado, podría sugerir que ciertos cambios en la comunidad o en la población de perros han ocasionado el desequilibrio con respecto a los perros callejeros. Una vez que se identificaron estos cambios, la comunidad podría elegir responder a sí mismos y de diferentes maneras. Tal vez podrían intentar cambiarse a sí mismos para convertir lo que era una situación amenazante en uno no amenazante. La cópula canina, por ejemplo, podría redefinirse como algo ajeno al alcance de las normas humanas de conducta pública si ese fenómeno se relacionara de alguna manera con la mayor visibilidad de los extraviados. Si el problema se originó en el aumento de la población canina, la esterilización de mascotas privadas (gratis) podría iniciarse.

Esta analogía simplifica bastante algunas de las diferencias entre las dos perspectivas. Sin embargo, debe quedar claro que las suposiciones y las implicaciones ampliamente divergentes surgen de cualquiera de los modos de estudio. En el caso de los perros callejeros, podemos suponer que los factores individualistas y socioculturales juegan un papel importante en la determinación de desviarse y capturar, y ambos tipos de perspectivas no son tan contradictorios, ya que son inconmensurables, es decir, lógicamente independientes de cada uno. otro. Uno estudia el fenómeno de la desviación, la otra captura, uno estudia los determinantes localizados dentro del individuo, las otras estructuras sociales a nivel agregado; uno resalta el comportamiento y el otro el contexto en el cual el comportamiento plantea problemas; uno hablaría del problema del cambio de comportamiento y el otro de los caprichos del cambio de la estructura social y las respuestas.

Es útil señalar que la analogía del perro callejero “tiene sentido” dentro de los términos sociales estructurales, mientras que los ejemplos humanos (alcoholismo, enfermedad mental, retraso mental, crimen, etc.) son a menudo difíciles de interpretar en los mismos términos. Tal vez debido a una profunda corriente de pensamiento individualista en nuestra cultura, a menudo es difícil evitar hacer preguntas como: ¿por qué es un alcohólico? La perspectiva estructural social, sin embargo, no está centrada en la génesis o etiología del comportamiento alcohólico. Más bien, esa perspectiva se concentra en los significados y problemas creados por la bebida dentro de contextos sociales en los que beber está normado negativamente. Exploraremos esta diferencia más a fondo más adelante. Una pregunta que vale la pena pensar en este momento es por qué una explicación estructural social de los perros callejeros tiene sentido, mientras que una explicación estructural social del alcoholismo es difícil de mantener. Hay varias razones importantes para este fenómeno. En primer lugar, se puede decir que los perros no siempre son sabios en la forma de los hombres en cuyas comunidades viven. Por lo tanto, es fácil aceptar el hecho de que los perros son en gran medida ignorantes de la cultura humana y, de hecho, imponer las regularidades de los comportamientos de sus propias especies sobre el espacio disponible en las comunidades humanas. En cierto sentido, estamos diciendo que la palatabilidad del relato social estructural de los perros callejeros se basa en parte en nuestra capacidad para aceptar una brecha cultural entre perros y hombres. Sin embargo, esta misma brecha es más difícil de extender a los hombres que habitan (al menos geográficamente) la misma comunidad. Nuestras leyes, por ejemplo, “se aplican por igual” a todos los ciudadanos de la comunidad, hablamos el mismo idioma, compartimos en muchas de las mismas instituciones si desde diferentes puntos de vista. Es decir, tenemos una amplia presunción subyacente de la uniformidad y homogeneidad de nuestra cultura y nuestras normas. Cuando el antropólogo informa que las cosas son diferentes o significan cosas diferentes en las culturas A y B, podemos ver esa discrepancia cómodamente. Pero las diferencias en las realidades subculturales y normativas para los vecinos y la gente del otro lado del camino a menudo parecen estar estirando un punto. Por lo tanto, la explicación social estructural de un fenómeno como el alcoholismo está íntimamente relacionada con la demostración de diferencias en los mundos percibidos de “los derechos y los errores” entre (ostensiblemente) los miembros de la misma comunidad. Pero incluso la demostración de estas diferencias, por supuesto, puede reinterpretarse en términos individualistas: uno puede preguntarse por qué ciertas personas no han aprendido o internalizado las reglas cotidianas de la conducta pública tal como las vemos. Aquí, una vez más, nuestra investigación puede volver a caer en cuestiones que rodean las capacidades de los individuos para hacerse susceptibles o no susceptibles a las normas de la cultura central. En resumen, una explicación social estructural de la desviación depende de una diversidad de subculturas en las que existen normas discretas y diferentes para comportamientos y muros seleccionados entre subculturas que son lo suficientemente altas como para dificultar que las minorías subculturales “vean” el funcionamiento del núcleo estándares culturales y sanciones.

Sobre la cuestión de los muros subculturales altos, hay al menos dos formas de ver su génesis y mantenimiento. Por un lado, podemos tener entidades subculturales que existen “en la naturaleza” como si estuvieran dentro de nuestras comunidades: la diversidad étnica, educativa u ocupacional, estratificada o de sexo o raza de una ciudad determinada, por ejemplo, nos proporciona las bases naturales para anticipando las diferencias en las normas comunes. Por otro lado, un número creciente de estudiantes de la desviación han llamado la atención sobre el hecho de que nuestros modos de enfrentar la desviación pueden, escudriñando alternativas de vida, colocando etiquetas más o menos permanentes, sometiendo a los capturados a experiencias similares y solidarias, y así sucesivamente – crear argot [“erstatz” era la palabra prevista, RR] estilos de vida que toman ciertos aspectos de un mundo cultural nuevo y extranjero. En cualquier caso (subculturas “salvajes” o “desviadas”), el sociólogo necesita un grado suficiente de diversidad normativa o subcultural para proporcionar la apariencia de desviación.

Existe otro nivel de análisis desde el cual el sociólogo puede encontrar fuentes naturales de comportamiento aparentemente desviado: el mundo cultural se divide en subculturas y el sistema social se divide en instituciones. Así, la vida cotidiana de los miembros del sistema puede llevarlos a través de una serie de instituciones en las que se esperan o requieren actuaciones divergentes. Estas actuaciones suelen estar aisladas en el tiempo y el espacio, lo que facilita los conflictos potenciales. Pero el aislamiento de roles y estados no siempre es completo, y el arrastre o rupturas aislantes pueden proporcionar un resorte de comportamiento desfavorable en el que operan las agencias de control social.

Un segundo ingrediente en la palatabilidad del argumento social estructural es el lugar común de la conducta ofensiva. Sobre este tema, una vez más, existe una dificultad cuando intentamos extender el caso a sujetos humanos. Dependiendo de cómo definamos el alcoholismo, por ejemplo, una prevalencia puede estar asociada con esa etiqueta, que puede extenderse de un número relativamente pequeño a un número muy grande.

Un tercer ingrediente es nuestra sensibilidad a las distinciones entre el comportamiento (del alcohólico, por ejemplo) y las dificultades específicas que este comportamiento crea para situaciones sociales definidas. El pensamiento humano es inevitablemente categórico, y el poder de las categorías (etiquetas) no debe subestimarse. Por lo tanto, a menudo podemos tener dificultades para ocultar, por el momento, el problema del “alcoholismo” y examinar en algunos detalles fenomenológicos las dificultades específicas que causan fricciones entre la bebida y el sistema sociocultural.

En cuarto lugar, los perros tal vez aprendan poco de sus estadías en los dogpounds; los hombres, por otro lado, se puede esperar que cambien y que haya otros a su alrededor que cambien como consecuencia y posterior a una experiencia sancionadora. Para algunos, la institución del control social puede ofrecer algo parecido a una carrera de argot [“ersatz”, R.R.] en la que la matriz social ambiental de esa institución se convierte en el marco de referencia de las acciones posteriores del desviado. En cualquier caso, el comportamiento humano es adaptativo y anticipativo. Es posible que tengamos dificultades para distinguir entre los comportamientos que preexistieron la institucionalización y que fueron decisivos para causar la institucionalización y aquellos comportamientos que fueron recogidos en el proceso de institucionalización. Esto plantea varios dilemas metodológicos para el investigador interesado en establecer las realidades estructurales sociales de la desviación. Las rutas institucionales muy usadas de los desviados pueden ser surcos de acción en los que algunas personas se ven obligadas y que otros buscan activamente.

Abraham Lincoln

Original Article:https://gardenofpraise.com/ibdlinco.htm

 

Decimosexto Presidente de los Estados Unidos
Nacido en 1809 – Murió en 1865


Abraham Lincoln nació en una cabaña de troncos en Kentucky con Thomas y Nancy Lincoln. La familia se mudó a Indiana y Abe, de 8 años, ayudó a su padre a construir otra casa de troncos. Un año después, su madre murió y la casa estaba muy vacía. Su padre se volvió a casar y, además de su hermana Sarah, que era 3 años mayor, ahora había 3 niños más en la familia.

Lincoln tenía menos de un año de escolaridad. Los libros eran escasos y también el papel. Trabajó sus problemas aritméticos en un tablero y limpió el tablero con un cuchillo para poder usarlo nuevamente.

La familia poseía una Biblia y pasó muchas horas leyéndola. Copiaría partes de él para memorizarlo. A veces caminaba kilómetros para pedir prestado un libro. Uno de sus libros favoritos fue “La vida de George Washington”.

Para cuando tenía 17 años, sabía que quería ser abogado. Caminaba 17 millas hasta el juzgado del condado para observar el trabajo de los abogados. Se sentó en la parte posterior de la sala del tribunal y los observó mientras sacudían los puños y se ponían rojos en la cara. Luego iría a casa y pensaría en lo que había visto.

Cuando tenía 21 años se mudó a Illinois y pasó un año trabajando en una granja. Se dice que él y su compañero de trabajo dividieron 3.000 rieles en ese año 1830. También dirigió un bote plano en el río Ohio.

Cada vez que conseguía un nuevo trabajo intentaba trabajar en una habilidad que lo ayudaría cuando se convirtiera en abogado. Cuando era tendero, trató de ser honesto y justo. Una vez él
Abandonó * a una mujer por 6 centavos y él la siguió a su casa para que le devolviera el dinero.

Cuando era administrador de correos, intentó aprender a llevarse bien con la gente.

Cuando era topógrafo; * una persona que medía la tierra, intentaba ser siempre preciso en sus mediciones.

Él todavía quería ser un abogado. Él iría sin dormir para estudiar. Pediría libros prestados a un vecino por la noche, los leería a la luz de la chimenea y los recuperaría por la mañana. En 1836 pasó la prueba y se convirtió en abogado. Fue durante este tiempo que fue elegido para la legislatura de Illinois * por el partido Whig. Se hizo bueno para debatir y hablar en público. Tuvo muchos debates con John Calhoun sobre la cuestión arancelaria. Hablaron ante grandes audiencias, a veces hasta cuatro horas.

picture2

Lincoln y Stephen A. Douglas participaron en varios debates sobre la cuestión de la esclavitud. Tuvieron un encuentro previo en la Feria Estatal en Springfield, Illinois. Lincoln perdería la carrera del Senado, pero ganaría a Douglas en la carrera presidencial de 1860.

Una vez, una mujer escribió un artículo que contenía algunos comentarios ridículos sobre el general James Shields. El editor le habló a Lincoln al respecto y Lincoln dijo: “Dígale que lo escribí”. Eso es lo que hizo y Shield desafió a Lincoln a un duelo con la elección de armas de Lincoln. El día señalado, Lincoln llegó con una espada en una mano y un hacha en la otra. Un hombre, John J. Hardin, detuvo la pelea antes de que comenzara. El evento posiblemente cambió el curso de la historia de la nación.

Fue inaugurado * presidente en marzo de 1861. Cinco semanas después comenzó la Guerra Civil. Fue una pelea sobre la esclavitud. Lincoln quería que los Estados Unidos siguieran siendo una nación. Estaba en peligro de dividirse en dos naciones; el Norte y el Sur.

picture3

En su discurso inaugural de 1860, dijo: “No tengo ningún propósito, directa o indirectamente, de interferir con la institución de la esclavitud en los estados donde existe. Creo que no tengo derecho legal a hacerlo, y no tengo ninguna inclinación a hacerlo. hazlo “.

Dos años más tarde, el presidente Lincoln escribió: “Mi principal objetivo en esta lucha es salvar la Unión, y no es ni para salvar ni para destruir la esclavitud. Si pudiera salvar la Unión sin liberar a ningún esclavo, lo haría; podría salvarlo liberando a algunos y dejando a otros en paz. También lo haría. Lo que hago sobre la esclavitud y la raza de color, lo hago porque creo que ayuda a salvar la Unión (Carta a Horace Greeley, 22 de agosto de 1862). ”

Citó de la Biblia: “Una casa dividida contra sí misma no puede sostenerse”. Pudo darse cuenta de sus dos objetivos. En 1863 emitió la Proclamación de Emancipación * liberando a los esclavos en los estados del sur, y el país pudo seguir siendo una nación unida. Eventualmente todos los esclavos en los Estados Unidos se volvieron libres.

Obtenemos una idea de la vida de Abraham Lincoln cuando leemos un artículo que apareció en un periódico de Athens, Ohio el 8 de junio de 1860.

El 14 de abril de 1865, el presidente Lincoln y la señora Lincoln asistieron a una obra de teatro en el Ford’s Theatre en Washington D.C. Mientras estaba allí fue asesinado por John Wilkes Booth, un actor con opiniones extremistas sobre política y esclavitud. Hubo una conspiración de Booth y sus cohortes no solo para matar al presidente, sino también a William Henry Seward y Andrew Johnson, el vicepresidente. El ataque a Seward falló y el de Johnson nunca se llevó a cabo. El presidente, después de recibir un disparo, fue llevado a una casa al otro lado de la calle del teatro y murió nueve horas después. Booth fue asesinado por uno de los hombres que intentaba arrestarlo.

De todos los presidentes, Abraham Lincoln es el que tiene mayor interés continuo. Los escolares lo estudian, los historiadores debaten sobre su vida y legado, y la gente colecciona recuerdos sobre él.

Esta biografía de Patsy Stevens, una maestra jubilada, fue escrita en 2001.

Eiffel: la sintaxis

Original Article: http://www.gobosoft.com/eiffel/syntax/

La sintaxis anotada de Eiffel descrita aquí está dirigida a escritores de herramientas de Eiffel como compiladores, intérpretes, correctores de sintaxis, herramientas breves y planas, lindas impresoras, etc., que quieran beneficiarse de algunos consejos y trucos. Aunque esta no es la especificación oficial de la sintaxis de Eiffel proporcionada por el Consorcio Internacional sin fines de lucro para Eiffel (NICE), se aparta de ella en solo dos o tres ocasiones bien documentadas. En particular, explica dónde, y a veces por qué, los compiladores existentes han extendido la sintaxis de Eiffel.

Las construcciones de sintaxis de Eiffel se enumeran en grupos, comenzando con constructos de alto nivel como Class_declaration hasta componentes léxicos como Identifier. Alternativamente, estos constructos también se dan en orden alfabético. La notación utilizada para describir la sintaxis de Eiffel se especifica en otro lugar. Una posible implementación de la sintaxis de Eiffel en formato yacc– y lex-like también se proporciona como ejemplo.

Class_declaration
[ Indexing ]
Class_header
[ Formal_generics ]
[ Obsolete ]
[ Inheritance ]
[ Creators ]
[ Features ]
[ Invariant ]
end [ -- class Class_name ]

Nota: la mayoría de los compiladores de Eiffel no verifican la validez del comentario opcional después del final de la palabra clave. SmallEiffel emite una advertencia sin embargo.

Nota: Un archivo puede contener más de una declaración de clase. Sin embargo, la mayoría de los compiladores de Eiffel tienen una limitación de una clase por archivo.


Indexing
indexing Index_list
Index_list
{ Index_clause ; ... }
Index_clause
[ Index ] Index_terms
Index
Identifier :
Index_terms
{ Index_value , ... }+
Index_value
Identifier | Manifest_constant

Class_header
[ Header_mark ] class Class_name
Header_mark
deferred | expanded | separate

Nota: la palabra clave separada no es parte del estándar de Eiffel. Se ha presentado en ISE Eiffel para admitir el mecanismo SCOOP. Lea Construcción de software orientado a objetos, segunda edición, para más detalles.

Class_name
Identifier

Formal_generics
[ Formal_generic_list ]
Formal_generic_list
{ Formal_generic , ... }

Nota: la lista de genéricos formales puede estar vacía. Como consecuencia, FOO [] es válido y significa lo mismo que FOO. Sin embargo, este no es el estilo recomendado.

Formal_generic
Formal_generic_name [ Constraint ]
Formal_generic_name
Identifier
Constraint
-> Class_type

Obsolete
obsolete Message
Message
Manifest_string

Inheritance
inherit Parent_list
Parent_list
{ Parent ; ... }
Parent
Class_type [ Feature_adaptation ]
Feature_adaptation
[ Rename ]
[ New_exports ]
[ Undefine ]
[ Redefine ]
[ Select ]
end

Nota: Debido a esta construcción, la gramática de Eiffel no es LR (1). Esto ocurre en la siguiente situación:

class FOO
inherit
    BAR
end

La palabra clave end se considerará como parte de la opción Feature_adaptation en lugar de como parte del constructo Class_declaration.

Una forma de resolver este problema sería permitir que la palabra clave termine en Feature_adaptation solo cuando al menos uno de los constructos opcionales que componen la Feature_adaptation está presente


Rename
rename Rename_list
Rename_list
{ Rename_pair , ... }
Rename_pair
Feature_name as Feature_name

New_exports
export New_export_list
New_export_list
{ New_export_item ; ... }
New_export_item
Clients Feature_set
Feature_set
Feature_list | all
Feature_list
{ Feature_name , ... }

Clients
{ Class_list }
Class_list
{ Class_name , ... }

Redefine
redefine Feature_list
Undefine
undefine Feature_list
Select
select Feature_list

Creators
creation { Creation_clause creation ... }+
Creation_clause
[ Clients ] [ Header_comment ] Procedure_list

Nota: La sintaxis estándar requiere una Feature_list en lugar de una Procedure_list pero la Creation_clause realmente enumera los nombres de los procedimientos de creación (ver la regla de validez VGCP-2).

Procedure_list
{ Procedure_name , ... }
Procedure_name
Identifier

Nota: Prefijo e Infijo son nombres de funciones, no nombres de procedimientos. No me queda claro si un Prefijo podría ser un nombre de atributo, pero definitivamente no es un nombre de procedimiento (ver la regla de validez VFFD-5).


Features
feature { Feature_clause feature ... }+
Feature_clause
[ Clients ] [ Header_comment ] Feature_declaration_list
Feature_declaration_list
{ Feature_declaration ; ... }

Feature_declaration
New_feature_list Declaration_body
Declaration_body
[ Formal_arguments ] [ Type_mark ] [ Constant_or_routine ]
Constant_or_routine
is Feature_value
Feature_value
Manifest_constant | Unique | Routine
Unique
Unique

New_feature_list
{ New_feature , ... }+
New_feature
[ frozen ] Feature_name

Feature_name
Identifier | Prefix | Infix
Prefix
prefix " Prefix_operator "
Infix
infix " Infix_operator "
Prefix_operator
Unary | Free_operator
Infix_operator
Binary | Free_operator

Nota: Todos los compiladores de Eiffel aceptan los operadores de prefijo e infijo, independientemente del caso de la letra, como el prefijo “NO” o infijo “AnD”.

Nota: No se permite ningún carácter intermedio después de la primera o antes de la última comilla doble. Sin embargo, no está claro qué tipo de interrupción se debe utilizar entre las dos palabras clave en y luego o bien. SmallEiffel acepta cualquier número de espacios en blanco y caracteres de pestañas, mientras que los otros compiladores requieren un solo espacio en blanco.


Unary
not | + | -
Binary
+ | - | * | / | < | > | <= | >= | // | \\ | ^ |
and | or | xor | and then | or else | implies

Formal_arguments
( Entity_declaration_list )
Entity_declaration_list
{ Entity_declaration_group ; ... }
Entity_declaration_group
Identifier_list Type_mark
Identifier_list
{ Identifier , ... }+
Type_mark
: Type

Nota: La lista de declaraciones de entidades puede estar vacía. Como consecuencia, foo () es válido y significa lo mismo que foo. Sin embargo, este no es un estilo recomendado.


Routine
[ Obsolete ]
[
Header_comment ]
[
Precondition ]
[
Local_declarations ]
Routine_body
[ Postcondition ]
[
Rescue ]
end [ -- Feature_name ]

Nota: La mayoría de los compiladores de Eiffel no verifican la validez del comentario opcional después de la palabra clave end. Ya no está en las pautas de estilo dejar este comentario.


Routine_body
Effective | Deferred
Effective
Internal | External
Internal
Routine_mark Compound
Routine_mark
do | once
Deferred
deferred

External
external Language_name [ External_name ]
Language_name
Manifest_string
External_name
alias Manifest_string

Nota: Cada compilador de Eiffel admite su propia mini sintaxis en el nombre del idioma y las cadenas de nombre externas para describir su interfaz con otros lenguajes de programación. Consulte la documentación que viene con los diferentes compiladores para más detalles.


Local_declarations
local Entity_declaration_list

Precondition
require [ else ] Assertion
Postcondition
ensure [ then ] Assertion
Invariant
invariant Assertion
Assertion
{ Assertion_clause ; ... }
Assertion_clause
[ Tag_mark ] Unlabeled_assertion_clause
Unlabeled_assertion_clause
Boolean_expression | Comment
Tag_mark
Tag :
Tag
Identifier

Nota: Aunque se esperan comentarios como los comentarios de encabezado en algunos constructos como

require
    tag: -- Syntax error when ignored!
do

and

require
    tag: -- If this comment is ignored,
         -- tag will be erroneously
         -- associated with foo.is_valid!
    foo.is_valid

See the second note in Comment for more details.


Rescue
rescue Compound

Note: The validity rule VXRT states that the Retry instruction is only valid in a rescue clause. This could eventually be enforced by the syntax.


Type
Class_type |
Class_type_expanded |
Class_type_separate |
Anchored | Bit_type

Note: The standard Eiffel syntax also lists Formal_generic_name as a possible alternative for Type. However it introduced an ambiguity in the syntax since an identifier could be recognized both as a Formal_generic_name and a Class_type with no actual generics.

Class_type
Class_name [ Actual_generics ]
Actual_generics
[ Type_list ]
Type_list
{ Type , ... }

Note: The list of types may be empty. As a consequence, FOO[] is valid and means the same as FOO. However, this is not the recommended style.

Class_type_expanded
expanded Class_type
Class_type_separate
separate Class_type

Note: Class_type_separate is not part of the Eiffel standard. It has been introduced in ISE Eiffel to support the SCOOP mechanism. Read Object-Oriented Software Construction, second edition, for details.

Bit_type
BIT Bit_length

Note: In the standard syntax, Constant appears instead of Bit_length. However the validity rule VTBT states that a Bit_type declaration is valid if and only if its Constant is of type INTEGER, which means that the constant is either a manifest integer constant or an attribute constant.

Bit_length
Integer_constant | Attribute
Anchored
like Anchor
Anchor
Identifier | Current

Compound
{ Instruction ; ... }
Instruction
Creation | Call | Assignment |
Assignment_attempt | Conditional |
Multi_branch | Loop | Debug |
Check | Retry | Null_instruction

Creation
! [ Type ] ! Writable [ Creation_call ]

Note: If the type is absent, the two exclamation marks may be written with or without intervening break. In the style standard, the recommended form is the one without breaks, which makes !! appear as a single lexical symbol.

Creation_call
. Procedure_name [ Actuals ]

Note: In the standard Eiffel syntax, the Creation_call is made of an Unqualified_call. But the validity rule VGCC-6 states that if f is the feature of the Creation_call, the f is a procedure.


Assignment
Writable := Expression
Assignment_attempt
Writable ?= Expression

Conditional
if Then_part_list [ Else_part ] end
Then_part_list
{ Then_part elseif ... }+
Then_part
Boolean_expression then Compound
Else_part
else Compound

Multi_branch
inspect Expression
[ When_part_list ] [ Else_part ] end
When_part_list
when { When_part when ... }+
When_part
Choices then Compound
Choices
{ Choice , ... }

Note: The list of choices may be empty. As a consequence,

inspect expr
when then
    do_something
...

although meaningless, is syntactically correct. It can be thought of as

if False then
    do_something
...

However, this is not part of the recommended style.

Choice
Choice_constant | Interval

Note: The standard syntax specifies Constant instead of Choice_constant. However the validity rule VOMB-1-2 states that the Constant in Choice and Interval is only of type INTEGER or CHARACTER.

Interval
Choice_constant .. Choice_constant

Note: The lexical analyzer has to be smart enough in the following example:

inspect expr
when 1..2 then
...

Indeed, ‘1..2‘ should be recognized as the two integer constants ‘1‘ and ‘2‘ separated by the Eiffel symbol ‘..‘, instead of as two consecutive real constants ‘1.‘ and ‘.2‘. Visual Eiffel erroneously emits a syntax error when parsing the example above.

Choice_constant
Integer_constant | Character_constant | Attribute

Note: TowerEiffel accepts “remote constant” in Choice and Interval, such as in:

foo: FOO
inspect i
when foo.const then
     do_something
end

where const is declared as constant in class FOO. This is not standard Eiffel syntax.


Loop
Initialization
[ Invariant ]
[ Variant ]
Loop_body
end
Initialization
from Compound
Variant
variant [ Tag_mark ] Expression

Note: The validity rule VAVE states that Expression must be of type INTEGER. This could eventually be partially enforced in the syntax by discarding Equality, Manifest_array, Strip and all non-integer Manifest_constants.

Loop_body
Exit loop Compound
Exit
until Boolean_expression

Debug
debug [ Debug_keys ] Compound end
Debug_keys
( Debug_key_list )
Debug_key_list
{ Debug_key , ... }
Debug_key
Manifest_string

Check
check Assertion end

Retry
retry

Note: The validity rule VXRT states that the Retry instruction is only valid in a Rescue clause. This could eventually be enforced by the syntax.


Null_instruction
empty

Note: This instruction has a purely syntactical role: making sure that extra semicolons added by oversight to a Compound are harmless, as in

if c then ; i1;;; i2; else ;; end

TowerEiffel does not support extra semicolons other than terminators. All other compilers work as expected. SmallEiffel emits a warning when parsing extra semicolons.


Call
Qualified_call | Precursor
Qualified_call
[ Call_qualifier ] Call_chain
Call_qualifier
Call_target .
Call_target
Parenthesized | Result | Current | Precursor
Call_chain
{ Unqualified_call . ... }+
Unqualified_call
Identifier [ Actuals ]

Note: This specification of Call is slightly different from the version supplied in the standard. However the standard syntax accepts constructs which are not correct Eiffel such as RoutineFeatures, este es el único lugar donde ignorar un comentario da como resultado un error de sintaxis o un árbol de sintaxis incorrecto. Esto ocurre en las siguientes situaciones

foo.Result
Current (5)

mientras que la especificación dada arriba no lo hace.

Note:En TowerEiffel, las funciones se pueden llamar directamente en un Manifest_constant sin colocar paréntesis alrededor de la constante, como en:

str := 'a'.out

que debería ser, usando la sintaxis estándar:

str := ('a').out

Hay un ligero problema léxico con Integer_constant sin embargo, desde

123.out

es reconocido como

123. out

'123.' ser un  Real_constant. El programador tiene que agregar un extra Break entre la constante entera y el punto para evitar este problema.


Precursor
[ Parent_qualification ] Precursor [ Actuals ]
Parent_qualification
{ Class_name }

Nota:La construcción precursora no es parte de la sintaxis estándar de Eiffel. Se ha presentado en la segunda edición de Construcción de software orientado a objetos y se ha presentado a NICE una propuesta para su estandarización. ISE Eiffel y Halstenbach probablemente apoyarán esta construcción en su próximo lanzamiento.

Nota: En la segunda edición de construcción de software orientada a objetos, el nombre de la clase en Parent_qualification se incluye entre dobles llaves: {{Class_name}}. Sin embargo, la propuesta presentada a NICE utiliza la sintaxis especificada anteriormente.


Attribute
Identifier

Nota: de acuerdo con la regla de validez VFFD-5, un atributo también puede ser un Prefix.

Writable
Identifier | Result

Nota: El grupo de sintaxis de Entity de la especificación de sintaxis estándar se ha simplificado mucho para resolver muchas ambigüedades. Por ejemplo, debería:

foo

ser reconocido como Atributo, Local o Formal? Solo un análisis semántico puede dar la respuesta.


Actuals
( Actual_list )
Actual_list
{ Actual , ... }

Nota: La lista de datos reales puede estar vacía. Como consecuencia, foo() es válido y significa lo mismo que foo. Sin embargo, este no es un estilo recomendado.

Actual
Expression | Address

Nota: TowerEiffel trata la dirección como una expresión normal (es decir, como una alternativa en el Expression construir). Como consecuencia, una dirección no necesita ocurrir solo en listas reales.

Address
$ Address_mark
Address_mark
Feature_name | Current | Result

Expression
Current | Result |
Call | Operator_expression |
Equality | Manifest_array |
Old | Strip | Boolean_constant |
Bit_constant | Integer | Real |
Manifest_string | Character_constant |
Wide_character_constant |
Wide_manifest_string |
Hexadecimal_constant

Nota: Esta especificación de Expression es ligeramente diferente de la versión suministrada en el estándar. En primer lugar, se han agregado Corriente y Resultado como consecuencia de las nuevas especificaciones para Call. Entonces, Manifest_constant ha sido reemplazado con la lista de sus alternativas. Esto es para resolver una ambigüedad en la sintaxis estándar. En el siguiente fragmento de código:

foo := - 2

si la expresión en el lado derecho de la asignación se reconoce como una Integer_constant o como una  Unary_expression cuyo Prefix_operator is ‘-‘ y cuyo Expressiones un entero (sin signo)? Reemplazando Integer_constant y Real_constant by Integer y Real resuelve el problema.

Nota: Wide_character_constant, Wide_manifest_string y Hexadecimal_constant no son parte del estándar.Se han introducido en TowerEiffel para admitir caracteres anchos y cadenas y enteros hexadecimales.

Boolean_expression
Expression

Nota: La regla de validez VWBE establece que una expresión booleana debe ser de tipo BOOLEAN. Esto podría eventualmente aplicarse parcialmente en la sintaxis mediante el descarte Manifest_array, Strip y todos los no booleanos Manifest_constants.


Operator_expression
Parenthesized | Unary_expression | Binary_expression
Parenthesized
( Expression )
Unary_expression
Prefix_operator Expression
Binary_expression
Expression Infix_operator Expression

Nota: Ver operador para la precedencia y asociatividad del operador.


Equality
Expression Comparison Expression
Comparison
= | /=

Nota: Ver operador para la precedencia y asociatividad del operador.


Manifest_constant
Boolean_constant | Character_constant |
Integer_constant | Real_constant |
Manifest_string | Bit_constant |
Wide_character_constant |
Wide_manifest_string |
Hexadecimal_constant

Note: Wide_character_constant, Wide_manifest_string  y  Hexadecimal_constant no son parte del estándar.Se han introducido en TowerEiffel para admitir caracteres anchos y cadenas y enteros hexadecimales.

Boolean_constant
True | False
Integer_constant
[ Sign ] Integer

Nota: Aquí hay una ambigüedad en la sintaxis estándar. En el siguiente fragmento de código:

foo := - 2

si el Expression en el lado derecho de la asignación se reconocerá como una Integer_constant o como un Unary_expression cuyo  Prefix_operator is ‘-‘ y cuyo Expression is an (unsigned) Integer? Esto se ha resuelto en la descripción de la sintaxis actual mediante la reescritura de la especificación de Expression.

Real_constant
[ Sign ] Real

Nota: la misma ambigüedad que para Integer_constant anterior.

Sign
+ | -
Wide_character_constant
$ Character_constant

Nota: Wide_character_constant no es parte del estándar. Se ha presentado en TowerEiffel para admitir personajes anchos.

Nota: No se permite ningún carácter intermedio entre el signo de dólar y el Character_constant.

Wide_manifest_string
$ Manifest_string

Nota: Wide_manifest_string no es parte del estándar. Se ha presentado en TowerEiffel para admitir caracteres anchos en cadenas.

NotaNo se permite ningún carácter intermedio entre el signo de dólar y el Manifest_string.


Manifest_array
<< Expression_list >>
Expression_list
{ Expression , ... }

Old
old Expression

Nota: La regla de validez VAOL-1 establece que la expresión anterior solo es válida en una Postcondition. Esto eventualmente podría ser impuesto por la sintaxis.


Strip
Strip ( Attribute_list )
Attribute_list
{ Attribute , ... }

Identifier
Un identificador es una secuencia de uno o más caracteres, de los cuales el primero es una letra (de la aa la Z y de la A a la Z) y cada uno de los siguientes, si los hay, es una letra, un dígito decimal (0 a 9) o un carácter de subrayado (_).
Letter Case no es significativo para las letras: los dos identificadores lInKeD_liST y LINKED_LIST se consideran iguales.

Nota: Desafortunadamente, SmallEiffel distingue entre mayúsculas y minúsculas. (Sorprendentemente, no distingue entre mayúsculas y minúsculas Reserved_words.)

Nota: Un identificador es válido si y solo si no es uno de los Reserved_words.

Nota: TowerEiffel no puede manejar guiones bajos contiguos en nombres de funciones y nombres de clase.


Integer
Un número entero es una secuencia de caracteres, cada uno de los cuales debe ser:

  1. un dígito decimal (0 a 9)
  2. un underscore (_), que puede no ser el primer personaje.
Si hay un guion bajo presente, debe haber tres dígitos a la derecha de cada guion bajo, y no debe haber ningún grupo consecutivo de cuatro dígitos.

Nota: Las últimas dos restricciones con respecto a los guiones bajos podrían eliminarse en el futuro, permitiendo grupos de cualquier cantidad de dígitos.

Nota:Contrariamente a Integer_constant, Integer no tiene señal.

Nota: ¡Tenga en cuenta el problema del valor entero mínimo! Por ejemplo, en plataformas donde los enteros se almacenan en 32 bits, el siguiente código de Eiffel es válido:

Minimum_integer: INTEGER is - 2_147_483_648
        -- Smallest supported value of type INTEGER

pero el analizador debe ser lo suficientemente inteligente, de lo contrario leerá un unario menos seguido del entero 2147483648, que no cabe en 32 bits y por lo tanto desencadena un desbordamiento.


Hexadecimal_constant
Una constante hexadecimal es una secuencia de dos o más caracteres, cuyo primer carácter es un dígito decimal (0 a 9), cuyos caracteres siguientes pero los últimos son dígitos decimales o letras de la a a la f de la A a la F, y seguidos de x o X , sin otros personajes intermedios.

Nota: Hexadecimal_constant no es parte del estándar. Se ha introducido en TowerEiffel para admitir enteros hexadecimales.

Nota: No está claro si los guiones bajos están permitidos en constantes hexadecimales.


Real
Un número real está compuesto de los siguientes elementos:

  1. un opcional Integer,dando la parte integral (si no está presente, la parte integral es 0.)
  2. un punto requerido (.)
  3. un opcional Integerescrito al revés, que da la parte fraccionaria (si está ausente, la parte fraccionaria es 0.)
  4. un exponente opcional, que es la letra eo E seguida de una opción Sign (+ or -) y un Integer. El entero es obligatorio si la e o E está presente. Esto indica que el valor que aparece antes de e o E debe ser escalado por 10 ^ n, donde n es el número entero dado.
No se permite ningún carácter intermedio (en blanco u otro) entre estos elementos. Las partes integrales y fraccionarias pueden no estar ausentes. Si los guiones bajos se usan en la parte integral o fraccionaria, también deben aparecer en la otra parte, a menos que tenga tres dígitos o menos.

Nota: El estilo recomendado es usar E en lugar de e.

Nota: Contrariamente a Real_constant, Real no tiene señal

Nota: La restricción que establece que las partes integral y fraccional pueden no estar ambas ausentes es léxicamente importante. De lo contrario, la siguiente pieza de código

a.e1

podría escanearse como

a  .e1

en lugar de

a  .  e1

'.e1' ser reconocido como un verdadero.


Character_constant
Una constante de caracteres es:

  1. un personaje imprimible excepto por ciento (%) y comillas simples (‘)
  2. un Special_character
encerrado entre comillas simples (‘).

Nota: Los caracteres imprimibles incluyen, en este caso, espacios en blanco y tabuladores, pero no líneas nuevas. Compare eso con Free_operator.


Manifest_string
Una cadena manifiesta es una secuencia arbitraria de:

  1. caracteres imprimibles excepto por ciento (%) y comillas dobles (“)
  2. Special_characters
encerrado entre comillas dobles (“).
Una forma extendida permite escribir una cadena de manifiesto en dos o más líneas. Cada línea, excepto la última, debe terminar con un porcentaje (%) y cada línea, excepto la primera, debe comenzar con un porcentaje (%) posiblemente precedido por espacios en blanco () y tabular caracteres.

Nota: Los caracteres imprimibles incluyen, en este caso, espacios en blanco y tabuladores, pero no líneas nuevas.Compare eso con Free_operator.


Bit_constant
Un bit constante es una secuencia de dígitos 0 o 1, seguida de bo B, sin otros caracteres intermedios.

Nota: El estilo recomendado es usar B en lugar de b.


Free_operator
Un operador libre es una secuencia de uno o más caracteres, cuyo primer carácter es cualquiera de @ # | & y cuyos caracteres posteriores, si los hay, pueden ser cualquier carácter imprimible. Letter Case no es significativo para letras en operadores libres.

Nota: Los caracteres imprimibles no incluyen, en este caso, los caracteres permitidos en Breaks. Compare eso con Character_constant.

Nota: El siguiente código

a@1

se escanea como

a  @1

que no es sintácticamente correcto. Ver Eiffel gotchas para más detalles.

Nota:Eiffel: El idioma, segunda impresión, permite caracteres especiales (aunque imprimibles) en operadores libres. Ningún compilador de Eiffel lo admite.

Nota: SmallEiffel y Visual Eiffel son sensibles a las mayúsculas y minúsculas para los operadores libres.


Comment
Un comentario comienza con dos caracteres de guion (-) y se extiende hasta el final de la línea.
Una forma extendida le permite a uno escribir un comentario en dos o más líneas. Cada línea, excepto la primera, debe comenzar con dos caracteres de guion posiblemente precedidos por espacios en blanco y caracteres tabulados.
Header_comment
Comment

Nota: Esta no es la descripción oficial de Comment. Sin embargo, no pude ver por qué el carácter de porcentaje (%) no estaba permitido en su forma desnuda (es decir, no formaba parte de  Special_character) en un comentario.

Nota: Hay dos tipos de comentarios: comentarios gratuitos y comentarios esperados. Los comentarios gratis pueden ser descartados por algunas herramientas. Sin embargo, los comentarios esperados aparecen como parte de cuatro constructos: Routine, Assertion_clause, Creation_clause and Feature_clause, y debe ser procesado por herramientas tales como la utilidad corta. Aunque, en Routine, Creation_clause and Feature_clause, el comentario del encabezado es opcional y puede ignorarse sin demasiado daño, es obligatorio in Assertion_clause e ignorarlo sería un error de sintaxis. Una solución para implementar estos comentarios esperados podría ser el uso de enlaces léxicos.

Nota: TowerEiffel emite erróneamente un error de sintaxis cuando aparece un comentario entre feature palabra clave y los clientes opcionales en el Features construir. Este es probablemente un efecto secundario del uso de los vínculos léxicos sugeridos anteriormente.

Nota: En el siguiente Routine declaración:

foo is
        -- This is the first comment.

        -- This is the second comment.

        -- This is the third comment.
    do
        ...
    end

no está claro cuál de los tres comentarios es el esperado Header_comment y cuáles son los otros dos comentarios gratuitos. TowerEiffel eligió el primer comentario para ser el comentario del encabezado. Algunos otros compiladores, como ISE Eiffel, Halstenbach y Visual Eiffel, realmente fusionan los tres comentarios en uno que se convierte en el comentario del encabezado.

Note: Algunos compiladores de Eiffel ignoran cualquier línea que comience con ‘- |’ en lugar de simplemente ‘-‘ en los comentarios de encabezado.


Break
Se divide una secuencia de uno o más de los siguientes caracteres:

  1. blanco
  2. lengüeta
  3. nueva línea
Se puede insertar una ruptura entre dos elementos adyacentes sin afectar la semántica.

Nota: Algunas plataformas como Windows ponen un carácter de retorno de carro antes de la nueva línea. En tales casos, es más fácil considerar el retorno de carro como un cuarto personaje posible que constituye un descanso.


Special_character
Un personaje especial tiene una de las siguientes formas:

  1. un código de secuencia% / code / where es un entero sin signo que representa el carácter del código de código ASCII en valor decimal
  2. una secuencia% K utilizada para representar los siguientes caracteres especiales:
    Character Code Mnemonic name
    @ %A At-sign
    BS %B Backspace
    ^ %C Circumflex
    $ %D Dollar
    FF %F Form feed
    \ %H backslasH
    ~ %L tiLda
    NL (LF) %N Newline
    ` %Q back Quote
    CR %R carriage Return
    # %S Sharp
    HT %T horizontal Tab
    NUL %U nUll character
    | %V Vertical bar
    % %% percent
    %' single quote
    %" double quote
    [ %( opening bracket
    ] %) closing bracket
    { %< opening brace
    } %> closing brace

Nota:La mayoría de los compiladores de Eiffel emiten un error de sintaxis cuando la secuencia% K no aparece en la tabla anterior. Sin embargo, Visual Eiffel considera que la secuencia% K representa el carácter K cuando la secuencia no figura en la tabla anterior. Como consecuencia,% P representa el carácter P y% D representa el carácter $.

Nota:Todos los compiladores de Eiffel que he probado (es decir, ISE Eiffel, Halstenbach, SmallEiffel, Visual Eiffel, TowerEiffel) esperan que la letra K en% K esté en mayúsculas para que se reconozca como un carácter especial de la tabla anterior. Como consecuencia% d y% D no se consideran lo mismo.

Nota: No me queda claro si los guiones bajos están permitidos en el code entero (especialmente cuando es el código de un personaje ancho).


Reserved_word
Una palabra reservada es:

  1. una palabra clave, que sirve para introducir y delimitar los componentes variantes de los constructos. Las palabras clave de Eiffel son:alias, all, and, as, check, class, creation, debug, deferred, do, else, elseif, end, ensure, expanded, export, external, feature, from, frozen, if, implies, indexing, infix, inherit, inspect, invariant, is, like, local, loop, not, obsolete, old, once, or, prefix, redefine, rename, require, rescue, retry, select, separate, then, undefine, until, variant, when, xor.
  2. un nombre predefinido, que viene en posiciones donde tokens variables también serían permisibles. Los nombres predefinidos de Eiffel son: BIT, Current, False, Precursor, Result, Strip, True, Unique.
El caso de la letra no es significativo para las palabras reservadas: las dos palabras Resultado y RESOLUCIÓN se consideran las mismas.

Nota: La especificación de sintaxis oficial enumera los siguientes nombres de clase como palabras reservadas: BOOLEAN, CHARACTER, DOUBLE, INTEGER, NONE, POINTER, REAL, STRING. Entiendo que estas clases deben ser conocidas por los compiladores de Eiffel, pero no veo por qué deberían ser palabras reservadas. Tenga en cuenta que ANY, GENERAL, PLATFORM ¡ y muchos otros nombres de clase del Estándar de biblioteca de Kernel no se enumeran tampoco! Además, estos nombres de clase no aparecen en ninguna parte en las construcciones de sintaxis. Finalmente, solo Visual Eiffel considera estos nombres de clase como palabras reservadas.

Nota: En Eiffel: The Language,segunda impresión, False, Strip, True  y  Unique se consideran palabras clave. No comparto este punto de vista.

Nota: Aunque SmallEiffel distingue entre mayúsculas y minúsculas con respecto a Identifier, ¡considera que el caso de las cartas no es significativo para las palabras reservadas!

Nota: Precursoris not part of the standard syntax. It has been introduced to support the Precursor mechanism.


Operator
Los operadores de la siguiente tabla están agrupados por nivel de precedencia, comenzando por el grupo de precedencia más alta. Los operadores dentro de cada grupo tienen la misma precedencia. Para dos o más ocurrencias consecutivas de operadores binarios con el mismo nivel de precedencia, la columna de asociatividad especifica el orden de evaluación.
Symbol Associativity
. left
old
not
unary +
unary -
All free unary operators
All free binary operators
^ right
*
/
//
\\
left
left
left
left
binary +
binay -
left
left
=
/=
<
>
<=
>=
left
left
left
left
left
left
and
and then
left
left
or
or else
xor
left
left
left
implies left

Note: La razón por la cual los compiladores de Eiffel rechazan la siguiente pieza de código:

foo := 1 < 2 < 3

no es porque los operadores de comparación son no asociativos. Estos operadores realmente se quedan asociativos. El código anterior es sintácticamente correcto, pero simplemente se rechaza porque ‘1 <2’ es de tipo BOOLEAN y no hay ninguna función como:

infix "<" (i: INTEGER): SOME_TYPE

en la clase BOOLEAN.


Semicolon
Los puntos y coma se usan como separadores en listas como Index_list o Compound.Los puntos y coma son opcionales en la mayoría de los lugares. Sin embargo, en algunos casos se requieren para eliminar ambigüedades en Assertion  y Compound. La ambigüedad aparece en el siguiente fragmento de código:
foo (expr).bar
donde esto podría reconocerse como “barra aplicada al resultado de la función foo con argumento expr” o como “una llamada a foo seguida de una barra aplicada a expr”. La regla para resolver esta ambigüedad es poner un punto y coma entre ‘foo’ y ‘(expr) .bar’ para obtener la segunda interpretación, o dejarla tal como está para obtener la primera.

Nota: Para algunos constructos, algunos compiladores de Eiffel considerarán los puntos y comas como terminadores, los consideran obligatorios o simplemente emiten una advertencia si faltan.

” width=”20″ height=”20″>

AdaControl

Original Article: AdaControl

AdaControl es una herramienta gratuita (GMGPL) que detecta el uso de varios tipos de construcciones en los programas de Ada. Su primer objetivo es controlar el uso correcto del estilo o las reglas de programación, pero también se puede utilizar como una poderosa herramienta para buscar el uso (o no uso) de varias formas de estilos de programación o patrones de diseño. Los elementos buscados van desde muy simples, como la aparición de ciertas entidades, declaraciones o declaraciones, hasta muy sofisticados, como verificar que se están obedeciendo ciertos patrones de programación.

Qué elementos o construcciones se buscan se define mediante un conjunto de reglas; La siguiente tabla ofrece un breve resumen de las reglas actualmente controladas por AdaControl. El número entre paréntesis después del nombre de la regla proporciona el número de subreglas, si corresponde. Considerando todas las reglas y subreglas posibles, ¡esto hace que 539 pruebas puedan ser realizadas actualmente por AdaControl!

Abnormal_Function_Return Controla un patrón de diseño que garantiza que una función siempre devuelve un resultado.
Allocators Controla las apariciones de asignadores, ya sea todos ellos, o aquellos que se dirigen a tipos específicos.
Array_Declarations (x6) Controla varias métricas en declaraciones de matriz y tipos utilizados como índices
Aspects (x3) Controla las especificaciones de aspecto (Ada 2012)
Assignments (x4) Controla problemas relacionados con las asignaciones, como deslizamiento de matriz, duplicación de valores de acceso, asignaciones múltiples a una misma variable o asignaciones a componentes de una variable estructurada que podría reemplazarse por una asignación agregada.
Barrier_Expressions Elementos de control permitidos en la expresión de barreras de entradas protegidas
Case_Statement (x5) Controla varias métricas en las declaraciones de casos.
Characters (x4) Controla las apariciones de caracteres de control (como pestañas) en la fuente.
Comments (x4) Controla el contenido o la ubicación de ciertos comentarios.
Declarations (x164) Controla las apariciones de ciertas declaraciones de Ada.
Default_Parameter Controla las llamadas al subprograma y las instancias genéricas que usan (o no) el valor predeterminado para un parámetro dado.
Dependencies (x7) Controla las dependencias de las unidades, ya sea según un conjunto de unidades permitidas o por recuento.
Derivations (x2) Controla las derivaciones de tipo según el tipo del antepasado o la categoría del antepasado.
Directly_Accessed_Globals Controla un patrón de diseño que garantiza que se acceda a todas las variables globales solo a través de subprogramas dedicados.
Duplicate_Initialization_Calls Controla patrones de diseño que evitan la doble inicialización de paquetes o variables.
Entities Controla las ocurrencias de cualquier entidad Ada.
Entity_Inside_Exception Controla las ocurrencias de las entidades dentro de los manejadores de excepciones.
Exception_Propagation (x5) Controla que ciertos subprogramas (o tareas) no pueden propagar excepciones, que ninguna elaboración puede propagar excepciones, o que una excepción no se puede propagar fuera de su alcance de declaración.
Expressions (x58) Controla el uso de ciertas formas de expresiones
Generic_Aliasing (x5) Controla instancias donde el mismo elemento corresponde a varios parámetros formales
Global_References (x5)
Controla accesos no sincronizados a variables globales.
Header_Comments (x2) Controla la presencia de comentarios al inicio de cada módulo.
Improper_Initialization (x3) Controla un patrón de diseño que asegura que cualquier variable se inicialice antes de ser utilizada, y no se inicializa de forma útil.
Instantiations Controla instancias genéricas, ya sea todas ellas, o aquellas que usan entidades específicas.
Insufficient_Parameters Controla el uso de parámetros posicionales en llamadas donde el valor dœs no proporciona información suficiente.
Local_Access (x6) Controla el uso de valores de acceso que designan entidades no globales.
Local_Hiding (x2) Controla las apariciones de identificadores locales que ocultan una identidad externa idéntica.
Max_Blank_Lines Controla la aparición de más de un número específico de líneas vacías consecutivas.
Max_Call_Depth Controla la profundidad máxima de las llamadas al subprograma.
Max_Line_Length Controla la longitud máxima de las líneas de origen.
Max_Nesting (x4)
Controles alcances anidados más profundamente que un límite dado.
Max_Size (x20) Controla la longitud máxima de los enunciados compuestos y las unidades de compilación.
Max_Statement_Nesting (x5) Controla las declaraciones compuestas anidadas más profundamente que un límite dado.
Movable_Accept_Statements Controla las declaraciones que se pueden mover fuera de una declaración de aceptación.
Naming_Convention Controla la forma de los nombres permitidos (o prohibidos) en las declaraciones.
No_Operator_Usage Controla los tipos enteros donde no se usa ningún operador, o solo operadores lógicos.
Non_Static (x6) Controla expresiones no estáticas en el índice o restricciones discriminantes, o en instancias.
Not_Elaboration_Calls Controla las llamadas de subprograma realizadas desde lugares fuera del código de elaboración del paquete.
Not_Selected_Name Controla que ciertas entidades siempre se nombren utilizando la notación seleccionada.
Object_Declarations (x4) Controla varios parámetros de declaraciones de objetos (constantes y variables).
Parameter_Aliasing Controla los subprogramas y las llamadas de entrada donde se proporciona una variable a más de un parámetro [in] out.
Parameter_Declarations (x9) Controla las características de los parámetros en entidades invocables (procedimientos, funciones y entradas)
Positional_Associations (x3)
Controla las asociaciones posicionales (a diferencia de las asociaciones nombradas).
Potentially_Blocking_Operations Controla el uso de operaciones de bloqueo potencial desde dentro de operaciones protegidas.
Pragmas Controla el uso de pragmas específicos.
Record_Declarations Controla varios aspectos de los componentes de un tipo de registro.
Reduceable_Scope (x9) Controla las declaraciones que se pueden mover a ámbitos anidados más profundamente.
Representation_Clauses (x12) Controla las apariciones de cláusulas de representación.
Return_Type (x8) Controla el uso de ciertos tipos de tipos como tipos de devolución de funciones.
Side_Effect_Parameters Controla las llamadas de subprogramas y las instancias genéricas que llaman funciones con efecto secundario, creando así una dependencia del orden de evaluación.
Silent_Exceptions Controla manejadores de excepciones que no resubstan excepciones ni llaman subprogramas indicados.
Simplifiable_Expressions (x7) Controla las ocurrencias de varias formas de expresiones que podrían simplificarse.
Simplifiable_Statements (x10) Controla las apariciones de varias formas de declaraciones que podrían simplificarse.
Statements (x73) Controla las ocurrencias de las declaraciones de Ada.
Style (x17) Controla varias formas de construcciones generalmente recomendadas en las reglas de estilo.
Terminating_Tasks Controla un patrón de diseño que garantiza que las tareas nunca finalicen.
Type_Initial_Values Controla que cada tipo declarado tenga una constante de inicialización asociada.
Type_Usage (x2)
Controla el uso de tipos o categorías de tipos en varios lugares.
Uncheckable (x3) Controla construcciones que no son verificables estáticamente por otras reglas
Unit_Pattern (x4)
Controla los patrones de uso de las unidades de programa y los elementos declarados en ellas.
Units (x2) Controles que analizan todas las unidades requeridas, y solo aquellas.
Unnecessary_Use_Clause (x5) Los controles usan cláusulas en paquetes, donde no se hace referencia a ningún elemento del paquete dentro del alcance de la cláusula de uso.
Unsafe_Elaboration Controla los paquetes que pueden estar sujetos a dependencias de orden de elaboración incorrectas.
Unsafe_Paired_Calls Controla un patrón de diseño que garantiza que ciertas llamadas estén siempre emparejadas (como los procedimientos de P / V).
Unsafe_Unchecked_Conversion Controla las instancias de Unchecked_Conversion entre tipos de tamaños diferentes o no especificados.
Usage (x11) Controla el uso de objetos bajo ciertas condiciones (en las especificaciones del paquete, leído, escrito modificado …).
Use_Clauses (x6) Controla las apariciones de cláusulas de uso, a excepción de los paquetes indicados.
With_Clauses (x3) Controla el uso correcto de las cláusulas con.

Para obtener más detalles sobre estas reglas o sobre el uso de AdaControl en general, consulte la guía del usuario.

AdaControl es una herramienta de línea de comandos, pero se ha integrado completamente en el entorno de GPS de AdaCore. Desde el GPS, puede ejecutar AdaControl, arreglar las violaciones o editar el archivo de reglas con solo unos pocos clics.

NUEVO!

AdaControl ahora puede ayudarlo a solucionar las infracciones: en el GPS, simplemente haga clic en el ícono de llave inglesa, al igual que con los mensajes del compilador.

También puede corregir todas las violaciones a la vez desde un comando de menú. ¡Y se proporciona una nueva utilidad de línea de comandos para corregir todas las violaciones reparables de forma automática!

Pero AdaControl es más que un conjunto de reglas de codificación: es un entorno completo, diseñado para extenderse fácilmente. Si no se proporciona su regla favorita, ¡puede agregarla usted mismo! Y, por supuesto, continuaremos ampliando la cantidad de reglas en el futuro. Si desea ver cómo es posible, consulte la guía del programador AdaControl.

El desarrollo inicial de AdaControl fue patrocinado por Eurocontrol. Algunas reglas fueron patrocinadas por BelgoControl, Alstom-Transport, Ansaldo-STS (anterior CSEE-Transporte) y SAGEM-DS. Es una herramienta madura, utilizada rutinariamente para verificar los códigos Ada en Eurocontrol (Bruselas, más de 2_000_000 SLOC, Maastricht), BelgoControl, Alstom, Ansaldo-STS, Faiveley, SAGEM-DS (nivel DO178B / A) … También tiene se han ejecutado contra todas las pruebas ejecutables de ACATS.

AdaControl es una aplicación ASIS.

AdaControl es una herramienta gratuita bajo la licencia GMGPL. No obstante, es un producto comercial de Adalog, para el cual ofrecemos un contrato de soporte y mantenimiento. También ofrecemos servicios para el desarrollo de reglas para sus necesidades específicas o, más en general, asistencia para la definición y uso de reglas de programación. Para obtener información, póngase en contacto con info@adalog.fr.

Descargar

AdaControl, como cualquier aplicación ASIS, solo puede ejecutarse si se compila con la misma versión exacta del compilador que usa al ejecutar. Por lo tanto, se proporciona como ejecutable solo para GNAT GPL / 2017 (Windows y Linux); para usar con cualquier otra versión de GNAT, descargue la versión de origen y vuelva a compilar (lo cual es bastante fácil de hacer, siempre que se haya instalado ASIS). Se ha probado solo con GNAT, pero debe ser fácilmente portable a cualquier otro compilador que proporcione una interfaz ASIS.

Las versiones ZIP o TGZ le permiten instalar AdaControl a su gusto; en Windows, los instaladores instalan todo automáticamente, siempre que el directorio <GNAT> \ bin esté en su ruta de ejecución.

Source Distribution
ZIP file
(2.77Mo)
TGZ file
(2.35Mo)
Windows installer
(1.90Mo)
Executable Distribution
Windows Gnat GPL 2017 Linux Gnat GPL 2017 MacOS
ZIP file
(19.37Mo)
Installer
(9.46Mo)
ZIP file
(19.81Mo)
ZIP file
(not yet available)

ADVERTENCIA: Se introdujo una incompatibilidad en la interfaz de ASIS para Ada 2005/2012, que era necesaria para manejar adecuadamente algunas de las nuevas funciones. La distribución fuente de AdaControl requiere al menos GnatPro-7.2.0 o GnatGPL 2013. Si desea utilizar una versión anterior de Gnat, descargue una versión fuente de SourceForge (consulte a continuación), utilizando la rama “master-old_gnat” para las versiones hasta GnatPro-7.0.x y GnatGPL2011, y rama “GPL2012” para GnatPro-7.1.x y GnatGPL2012.

Debian Usuarios de Debian:AdaControl está empaquetado para Debian. Para instalarlo:
apt-get install adacontrol

FreeBSD Usuarios de FreeBSD: aquí puedes encontrar un puerto de AdaControl para FreeBSD.

Integración GnatHub

A continuación se muestra un archivo ZIP descargable que contiene complementos para usar AdaControl como herramienta de medición en GnatHub (AdaCore) y permite el análisis de resultados con GnatDashboard / SONARQube.

Las directivas de instalación y uso son parte de la Guía del usuario de AdaControl

Integración GnatHub

ZIP file
(1.23Mo)

SourceForge

La versión de desarrollo actual (inestable) está disponible (bajo GIT) de SourceForge. También puede encontrar versiones intermedias entre versiones oficiales que pueden ser apropiadas para ciertas versiones de Gnat e incluso proporcionar su propia calificación de AdaControl. Puede enviar informes de errores, sugerir mejoras, etc. haciendo clic en “Ticket” en la página de SourceForge o haciendo clic en este enlace directo.

Contrato de soporte y mantenimiento

Adalog proporciona soporte comercial para AdaControl. El soporte incluye los siguientes servicios:

  • Ayuda con los procedimientos de instalación.
  • Explicaciones sobre el uso de la herramienta y ayuda para traducir estándares de codificación en las reglas de AdaControl.
  • Manejo prioritario de tickets reportados a través de nuestro sistema BT.
  • Corrección de problemas encontrados en el uso de AdaControl. Se proporcionan versiones preliminares de AdaControl para cada problema corregido.
  • Acceda a las versiones beta antes de que se publiquen.
  • Mantener sincronizadas las reglas personalizadas del cliente con la última versión de AdaControl.
  • Tarifa reducida para el desarrollo bajo demanda de reglas personalizadas.
  • Consideración prioritaria de las solicitudes de mejoras. Las solicitudes de mejoras satisfactorias no son parte del contrato de soporte; sin embargo, Adalog está mejorando constantemente AdaControl, y las sugerencias que se originan en clientes respaldados reciben una alta prioridad en nuestra lista de tareas pendientes.

Adalog no puede corregir problemas cuyo origen se deba a errores del compilador o defectos en la implementación de ASIS (póngase en contacto con su proveedor de compiladores para obtener asistencia sobre estos problemas). Sin embargo, Adalog hará su mejor esfuerzo para ayudar a informar tales problemas al proveedor del compilador, y para encontrar soluciones provisionales hasta que se resuelva el problema.

Publicaciones sobre AdaControl

Se han publicado varios artículos sobre AdaControl o su uso para diversas tareas de verificación:

  • Jean-Pierre Rosen: “Sobre los beneficios para los industriales de patrocinar el desarrollo de software libre”, Ada User Journal, Volume 26, number 4, december 2005http://www.adalog.fr/publicat/Free-software.pdf
  • Jean-Pierre Rosen: “Una comparación de las reglas de codificación industrial”, Ada User Journal, Volume 29, number 4, december 2008http://www.adalog.fr/publicat/coding-rules.pdf
  • Jean-Pierre Rosen: “Una metodología para evitar problemas conocidos del compilador mediante el análisis estático”, proceedings of the ACM SIGAda Annual International Conference (SIGAda 2010)http://dl.acm.org/authorize?316395
  • Jacob Sparre Andersen: “Presentando análisis estático a un proyecto maduro”, Proceedings of the 22nd Ada-Europe International Conference on Reliable Software Technologies – Ada-Europe 2017, Vienna, Austria, 12-16 June 2017. http://www.springer.com/us/book/9783319605876