lunes, 21 de diciembre de 2020

Principales cambios de diseño previstos para GNOME 40

Los grandes cambios en la forma en que los usuarios de GNOME Shell abren y administran aplicaciones y espacios de trabajo están llegando a GNOME 40, que se lanzará la próxima primavera.

Se planean varios cambios importantes en la experiencia del usuario y el diseño, todos con el objetivo de mejorar la forma y función de la "Activities Overview", también conocido como el espacio de trabajo bajo demanda al que se accede haciendo clic en el botón de texto "Actividades" en la barra superior de GNOME Shell.

Después de meses de exploración del diseño y 6 ejercicios de investigación de usuarios separados […] el equipo de GNOME Shell tiene un diseño actualizado para Activities Overview”, explica Allan Day, diseñador de experiencia de usuario en Red Hat y líder de diseño de GNOME.

Y el nuevo diseño es espectacular.

El equipo de escritorio de GNOME ha compartido imágenes conceptuales de los cambios propuestos. Estas ilustran el cambio en el posicionamiento espacial que los desarrolladores sienten que se requiere para ofrecer una "navegación y orientación intuitivas".

Un escritorio vacío es lo primero que ven los usuarios en una instalación básica de GNOME Shell; recuerde: Ubuntu incluye una versión personalizada. No hay señales visibles, salvo los íconos en la barra superior, sobre dónde iniciar aplicaciones o cómo administrar las ventanas. Un usuario tiene que "descubrir" el botón Actividades, que también alberga el tablero, y trabajar el resto desde allí.

GNOME 40 mejora un poco esta introducción.

 


En lugar de un escritorio en blanco, GNOME 40 recibe a los usuarios con el modo Actividades, que está repleto de un (nuevo) conmutador de espacio de trabajo horizontal, un (nuevo) tablero horizontal (o barra de favoritos), además de una barra de búsqueda visible.

Cuando se abre una aplicación (o se hace clic en un espacio de trabajo), la pantalla se "acerca" para colocar al usuario frente a su tarea / espacio de trabajo seleccionado. La pantalla Actividades es accesible en cualquier momento, como ahora.

Cuando se abren varias aplicaciones, se ve así:


Los cambios clave:

·         Los espacios de trabajo están organizados horizontalmente

·         Las ventanas de las aplicaciones tienen íconos para ayudar con la identificación

·         El tablero es horizontal, despojado en la parte inferior

·         Soporte para fondos de pantalla por espacio de trabajo

La interacción sigue siendo tan rica como ahora; los usuarios pueden arrastrar y soltar ventanas de aplicaciones entre espacios de trabajo (y presumiblemente crear nuevos espacios de trabajo bajo demanda). Los títulos de las ventanas aparecerán al pasar el mouse.

La cuadrícula "Aplicaciones" se inicia haciendo clic en el icono de cuadrícula en el tablero. Pero, como gran parte de la interfaz de usuario, ahora pagina horizontalmente. Los desarrolladores de GNOME han creado conscientemente una coherencia de navegación que se mantiene fiel a lo largo de toda la interfaz de usuario de conmutación de aplicaciones. Izquierda / derecha para moverse, arriba / abajo para hacer la transición.

Otras funciones, como la búsqueda a medida que escribe, el acceso a los proveedores de búsqueda, el reordenamiento de aplicaciones y las carpetas de aplicaciones personalizables, permanecen intactas.


Me tranquiliza ver que el tablero permanece presente en estas nuevas maquetas. En el pasado, la discusión sobre el diseño de GNOME sugirió que el dock estaba listo para ser eliminado. Un movimiento tan audaz hacia la UX sería controvertido, pero los usuarios descontentos, como ahora, podrían adaptar la experiencia de GNOME Shell para satisfacer sus propias necesidades y preferencias a través de extensiones.

Dicho esto, faltan algunas funciones: en las maquetas donde las aplicaciones están abiertas, notará que NO se presentan en el tablero como aplicaciones en ejecución, es decir, con un punto de estado. ¿Significa esto que Dash ahora se está convirtiendo en una barra de favoritos y no en una forma de administrar aplicaciones en ejecución?

System76 aparentemente estuvo involucrado en la investigación que dio como resultado este plan GNOME 40. Esto no es una sorpresa ya que System76 envía una versión modificada del escritorio GNOME Shell en Pop OS, una distribución que ha ganado muchos aplausos por sus alteraciones y complementos, y por su flujo de trabajo centrado en el usuario avanzado.

GNOME 40 se lanzará en marzo de 2021. Los cambios de diseño que se ven aquí están destinados a esa versión, pero no se garantiza que se distribuyan. Las cosas pueden, naturalmente, cambiar a medida que se produce el desarrollo y la implementación.

Pero si todo va según lo planeado, la experiencia de Actividades rediseñada que se muestra aquí podría aparecer en Ubuntu 21.04 'Hirsute Hippo', que se lanzará a mediados de abril de 2021.

 

Enlace a la noticia original en inglés

Compartir:

martes, 29 de noviembre de 2016

Truco Java - Establecer formato moneda en columna JTable

Hoy os voy a mostrar como poner el formato moneda (currency) en un campo de vuestra JTable.

De la misma manera que en el truco anterior, nos crearemos una clase dentro del paquete componentes de nuestra aplicación heredando de DefaultTableCellRenderer.

import java.awt.Component;
import java.text.NumberFormat;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;

public class CurrencyCellRenderer extends DefaultTableCellRenderer {
 
    private static final NumberFormat FORMAT = NumberFormat.getCurrencyInstance();

    @Override
    public final Component getTableCellRendererComponent(JTable table, Object value,
            boolean isSelected, boolean hasFocus, int row, int column) {
        final Component result = super.getTableCellRendererComponent(table, value,
                isSelected, hasFocus, row, column);
        if (value instanceof Number) {
            setHorizontalAlignment(JLabel.RIGHT);
            setText(FORMAT.format(value));
        } else {
            setText("");
        }
        return result;
    }
}

La utilización es similar al caso TimestampCellRenderer:

public void LlenarTabla(JTable tablaListadoVentas, boolean inicializar) {
        DefaultTableModel modeloTabla = new DefaultTableModel (){
            @Override //Establecemos todas las celdas como no editables
            public boolean isCellEditable(int row, int column) {               
                return false;
            }            
        };
        
        tablaListadoVentas.setModel(modeloTabla);
        
        modeloTabla.addColumn("Venta");
        modeloTabla.addColumn("Id. Cliente");
        modeloTabla.addColumn("Nombre");
        modeloTabla.addColumn("Id. Empleado");
        modeloTabla.addColumn("Nombre");
        modeloTabla.addColumn("Fecha y hora");
        modeloTabla.addColumn("Nº Artículos");
        modeloTabla.addColumn("Importe Total");                        
        
        Object[] columna = new Object[8];       
        
        tablaListadoVentas.getColumnModel().getColumn(5).setCellRenderer(new TimestampCellRenderer());
        tablaListadoVentas.getColumnModel().getColumn(7).setCellRenderer(new CurrencyCellRenderer());


Si tienes cualquier duda o comentario recuerda que puedes exponerlo aquí o bien mediante nuestro twitter y facebook.
Compartir:

jueves, 3 de noviembre de 2016

Truco Java - Establecer formato fecha y hora en columna JTable

El truco que os traigo hoy es producto de una necesidad que me surgió durante la elaboración del proyecto del curso de Java que estoy haciendo. La necesidad vino cuando necesité establecer formato fecha/hora a un campo de un JTable que contenia un valor Timestamp obtenido de MySQL.



Lo que tenemos que hacer es crearnos una clase (en mi caso estas clases las meto siempre en un paquete llamado "componentes" para tenerlo todo organizado) que herede de DefaultTableCellRenderer y posteriormente utilizarla en nuestra columna de JTable.

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import javax.swing.table.DefaultTableCellRenderer;

public class TimestampCellRenderer extends DefaultTableCellRenderer {

    DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");

    public TimestampCellRenderer() {
        super();
    }

    public void setValue(Object value) {
        if (formatter == null) {
            formatter = DateFormat.getDateInstance();
        }
        setText((value == null) ? "" : formatter.format(value));
    }
}


En la linea SimpleDateFormat podemos establecer el formato de fecha y hora que nosotros necesitemos. Se me ocurre como mejora añadir un parametro al constructor para poder pasar la cadena de formato por ejemplo.

La utilización es sencilla: Suponiendo que nuestro JTable se llame tablaListadoVentas y una vez establecido el modelo de la misma:

    public void LlenarTabla(JTable tablaListadoVentas, boolean inicializar) {
        DefaultTableModel modeloTabla = new DefaultTableModel (){
            @Override //Establecemos todas las celdas como no editables
            public boolean isCellEditable(int row, int column) {               
                return false;
            }            
        };
        
        tablaListadoVentas.setModel(modeloTabla);
        
        modeloTabla.addColumn("Venta");
        modeloTabla.addColumn("Id. Cliente");
        modeloTabla.addColumn("Nombre");
        modeloTabla.addColumn("Id. Empleado");
        modeloTabla.addColumn("Nombre");
        modeloTabla.addColumn("Fecha y hora");
        modeloTabla.addColumn("Nº Artículos");
        modeloTabla.addColumn("Importe Total");                        
        
        Object[] columna = new Object[8];       
        
        tablaListadoVentas.getColumnModel().getColumn(5).setCellRenderer(new TimestampCellRenderer());



Si tienes cualquier duda o comentario recuerda que puedes exponerlo aquí o bien mediante nuestro twitter y facebook.
Compartir:

lunes, 31 de octubre de 2016

¿Qué es un ataque DDoS? ¿Cómo podemos evitarlo?

El Viernes 21 de Octubre de 2016 se produjo el mayor y más importante ataque DDoS de los últimos años. El ataque fue dirigido hacia los servicios DynDNS y dejo fuera de combate a decenas de web y servicios como por ejemplo Twitter, Reddit, Github, Amazon, Spotify



Lo grave del asunto es que el ataque al parecer fue perpetrado gracias a una vulnerabilidad existente en dispositivos IoT (Internet de las cosas), como son los electrodomésticos conectados a la red.


¿Que es un ataque DDos?

Vayamos por partes;  Un ataque de denegación de servicio (DoS) es un ataque dirigido hacia una red o sistema de computadoras que provoca que el mismo deje de responder a los usuarios. Esto ocasiona que el sistema esté fuera de línea el tiempo que dura el ataque más el tiempo de restablecimiento del sistema que suele oscilar entre 20 minutos y varias horas en el peor de los casos.

El caso que nos ocupa es una ampliación de este ataque y sus siglas DDoS corresponden a ataque de denegación de servicio distribuido o Distributed Denial of Service, en el que el ataque se lleva a cabo desde cientos o miles de puntos diferentes hacia el mismo objetivo.



Existen diferentes tipos de ataque, pero básicamente se trata de enviar un flujo tal de peticiones que el sistema no puede atenderlas por lo que acaba tirando el servicio por seguridad. Otros ataques pueden suponer interrupciones de componentes físicos de red o incluso alteración de las tablas de enrutamiento.


¿Por qué es tan popular el ataque DDoS?

Los ataques DDoS se han vuelto muy populares debido a que el objetivo no tiene por que tener ninguna vulnerabilidad, ya que son ataques de infraestructura. Por esto cualquiera podría comprar un pack de ataque DDoS por unos 150€ y mantener fuera de línea a un rival de League of Legends por ejemplo (Sí, esto ha pasado). Ojo, antes he mencionado que se ataca desde cientos o miles de ordenadores y es que estos ordenadores sí que suelen estar afectados por alguna clase de vulverabilidad (como Mirai en el internet de las cosas) o malware.


¿Qué se busca con los ataques DDoS?

Aquí debemos tener en cuenta los tipos de ataque; estos pueden ser personalizados, los cuales no tienen mucha repercusión mediática y suelen buscar un objetivo concreto (dejar fuera de línea a un rival o tirar el servidor del examen de la universidad) o globales, los cuales buscan una gran repercusión mediática, suelen estar reivindicados por organizaciones o grupos hacktivistas y sirven para que el mundo les preste atención.

¿Como podemos evitar los ataques DDoS?

No se puede… sin más, hoy en día es imposible evitar este tipo de ataques debido a que las causas son los propios mecanismos de seguridad de nuestras infraestructuras informáticas. Hace unos años podríamos pensar que si todos nuestros ordenadores estuvieran libres de malware, no podrían pertenecer a botnets (redes de ordenadores zombies controlados por un mismo malware y que son capaces de perpetrar ataques DDoS dirigidos) y entonces sería mucho más complicado realizar estos ataques pero, ay amigos, bienvenidos al internet de las cosas.


El internet de las cosas y Mirai.

Actualmente no son pocos los hogares que disponen de más de un ordenador conectado a internet sin siquiera darse cuenta. ¿Tienes una SmartTv? ¿un frigorífico conectado a internet? ¿Un ebook, tablet, videoconsola? ¿Quizá tengas una de esas nuevas bombillas inteligentes o un Chromecast? ¿Una camara IP? Podría seguir así mucho rato pero aunque no tengas nada de esto, seguro que tienes un router en casa ¿verdad? ¿Le has cambiado la contraseña? :D
¿Por que os cuento esto? Bueno, todos esos artículos son susceptibles de ser participes en la mayor botnet jamás creada, Mirai.

Mirai es capaz de convertir sistemas Linux en bots controlados remotamente y además ni siquiera necesita crackearlos ya que la mayoría de nosotros no se preocupa de cambiar la contraseña genérica de estos dispositivos. Mirai puede afectar a impresoras, camaras de vigilancia o routers caseros y hay poco que podamos hacer.



Este es un problema que tiene difícil solución y quizá sería un buen momento para plantearnos si realmente necesitamos tantos dispositivos inteligentes o sería más sensato usar nuestra inteligencia y dejar de ser tan cómodos.

Y tú. ¿Tienes muchos aparatos conectados a internet?

Compartir:

jueves, 27 de octubre de 2016

Truco C# - Eliminar / Matar procesos Windows por nombre o id

En este post os voy a enseñar una manera sencilla de eliminar procesos concretos por nombre o id mediante programación.

Para poder hacer uso de este truco vamos a necesitar añadir System.Diagnostics a nuestro programa ya que haremos uso de la clase Process. Una vez hecho esto vamos a definir 3 métodos, uno para matar procesos por su id de proceso y dos que irán por nombre de proceso; el primero eliminará la primera ocurrencia y el segundo eliminará todos los procesos con el mismo nombre (el proceso "Chrome" puede ser un buen ejemplo para probarlo).

Matar tarea por Id.

 
        private void KillTaskById(int taskid)
        {
            try
            {
                Process proceso = Process.GetProcessById(taskid);
                proceso.Kill();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }


Matar tarea por Nombre. Primera ocurrencia.

         private void KillTaskByName(string taskName)
        {
            try
            {
                Process[] procesos = Process.GetProcessesByName(taskName);
                procesos[0].Kill();
            } 
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }


Matar tarea por Nombre. Todas las ocurrencias.

 
        private void KillAllTasksByName(string taskName)
        {
            try
            {
                foreach (Process proceso in Process.GetProcessesByName(taskName))
                {
                    proceso.Kill();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }


Probadlo y dejar en los comentarios que os ha parecido.

Si tienes cualquier duda o comentario recuerda que puedes exponerlo aquí o bien mediante nuestro twitter facebook.
Compartir:

miércoles, 26 de octubre de 2016

Truco C# - Listar todos los servicios de un webservice

Hacía ya mucho tiempo que no posteaba nada, mas por falta de tiempo que por otra cosa, pero hoy os traigo una nueva entrada con un truco para C#.

Si habéis leido el título ya intuireis de que va el truco de hoy. Se trata, ni más ni menos de cómo obtener la lista de servicios publicados en un webservice.

Para que el método funcione lo único que necesitais es la url de un descriptor de webservice (acabará en ?wsdl o ?singleWSDL) para pasarla como parametro al método GetWsdlMethods que os describo a continuación.


 
        private string[] GetWsdlMethods(string wsdlUrl)
        {
            List<string> services = new List<string>();

            try
            {
                XmlTextReader myStreamReader = new XmlTextReader(wsdlUrl);

                ServiceDescription wsdl =
                   ServiceDescription.Read(myStreamReader);

                txtMethods.Clear();

                foreach (PortType pt in wsdl.PortTypes)
                {

                    services.Add(string.Format("PortType {0}", pt.Name));
                    services.Add("\r\n----------------------------------------");
                    foreach (Operation op in pt.Operations)
                    {
                        services.Add(string.Format("\r\n{0}", op.Name));
                    }
                }
            }
            catch
            {
                services.Add("ERROR READING WDSL URL");
            }

            return services.ToArray();
        }




Probadlo y dejar en los comentarios que os ha parecido.

Si tienes cualquier duda o comentario recuerda que puedes exponerlo aquí o bien mediante nuestro twitter facebook.
Compartir:

jueves, 25 de agosto de 2016

Cómo bloquear / desactivar / eliminar los anuncios de Skype



Todos los que usamos Skype nos hemos acostumbrado a convivir con los anuncios que la aplicación nos muestra pero, ¿sabíais que se pueden desactivar de una manera muy sencilla? Sigue leyendo y te explico cómo.


Compartir:
Con la tecnología de Blogger.

BoosterBlog

BoosterBlog
BoosterBlog

Timeline Twitter

Seguidores

Seguidores