domingo, 12 de marzo de 2017

Comandos Windows

Comandos Windows

Buscar archivos ocultos generados por equipo Mac (ocultos y comienzan por ._)
dir /s /ah ._*
/s para una búsqueda recursiva. /ah para archivos ocultos. Para eliminar los ficheros:
del /s /ah ._*

sábado, 29 de agosto de 2015

Windows update y Windows 10

Error 80244019 con Windows Update

Durante el último mes (agosto '15) Windows ha recibido varias actualizaciones. Aunque la descarga y actualización deberían darse sin problemas hay no pocos usuarios cuyo Windows ha fallado durante la descarga o instalación quedando el SO bloqueado respecto a las actualizaciones. El error mostrado, 80244019 es un código de error genérico para el que existen muchas posibles soluciones en internet pero francamente solo me fue útil la más drástica:
  1. Restaurar sistema a un punto anterior a la descarga/instalación de la actualización fallida.
  2. Crear/configurar un perfil de Opciones de Energía sin suspensión del equipo durante la descarga y actualización para evitar nuevos errores en el proceso.
  3. Instalar todas las posibles actualizaciones de Windows. A veces muestra que no hay más posibles actualizaciones, pero sí las hay tras reiniciar el equipo.

Solicitar Windows 10

La opción para solicitar Windows 10 vendrá con la instalación de una de las actualizaciones, mostrándose un nuevo icono en la barra de inicio.


Todo eso asumiendo que Windows funcione bien... mucho asumir. Si no es el caso hay un script de comandos de windows para validar si nuestro equipo puede solicitar Windows 10 y obligar la aplicación de la actualización que nos permitirá solicitarlo. A partir de aquí muestro la solución encontrada en un post, podéis consultarlo para más información: I want to reserve my free copy of Windows 10, but I don’t see the icon on the taskbar
REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\UpgradeExperienceIndicators" /v UpgEx | findstr UpgEx
if "%errorlevel%" == "0" GOTO RunGWX
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Appraiser" /v UtcOnetimeSend /t REG_DWORD /d 1 /f
schtasks /run /TN "\Microsoft\Windows\Application Experience\Microsoft Compatibility Appraiser"
:CompatCheckRunning
schtasks /query /TN "\Microsoft\Windows\Application Experience\Microsoft Compatibility Appraiser"
schtasks /query /TN "\Microsoft\Windows\Application Experience\Microsoft Compatibility Appraiser" | findstr Ready
if NOT "%errorlevel%" == "1" ping localhost >nul &goto :CompatCheckRunning
:RunGWX
schtasks /run /TN "\Microsoft\Windows\Setup\gwx\refreshgwxconfig"
Nota, muestro el código con la modificación sugerida por otro usuario para evitar el bucle infinito.

Guardar el código como un fichero con extensión cmd y ejecutar mediente Símbolos del sistemas con permisos de administrador. Con esto en mi caso por fin se me aplicó la actualización con la que se me mostró el icono en la barra de inicio para solicitar Windows 10.

Del mismo post me pareció interesante el comando para verificar si tenemos la actualizaciones imprescindibles instaladas:
dism /online /get-packages | findstr 2976978
dism /online /get-packages | findstr 2919355
dism /online /get-packages | findstr 3035583
Si se muestra un mensaje tipo Package Identity : Package_for_KB3035583~31bf3856ad364e35~amd64~~6.3.1.29 con el id de la actualización a comprobar será la confirmación de tener aplicada la actualización en nuestro SO.

¿Windows 10?

Sobre si merece la pena actualizar a Windows 10 dejo un par de artículos para que cada uno decida. Hay cierta polémica sobre la privacidad y control que ejerce Microsoft con este nuevo SO, además de actualmente será un SO inmaduro. Esos enlaces es para decidir entre Windows 7, 8.1 o 10. En mi caso con un fatídico 8.1 ayuda a dar el paso adelante. Sobre si es mejor un Windows, un Mac OS o una distribución Linux lo dejo como otra discusión aparte ;)

Configuración W10

Para configurar las opciones de privacidad seguir el artículo de Gizmondo Todo lo que hay que desactivar en Windows 10 para proteger tu privacidad.

Revisar los programas que se ejecutan al inicio. Con Regedit o con Administrador de tareas -> Inicio.

Revisar programas instalados que no necesitamos. Configuración -> Sistema -> Aplicaciones. Ejemplos: Deportes, Descargar Skype (perdona si ya tengo Skype instalado.. U_U), Obtener Office, .. Otros como XBox, aunque nos sean inútiles (según Microsoft nos permite lanzar juegos de la tienda de Microsoft, utilizar streaming con una consola XBox y ver logros) no nos permite desintalar.

Revisar aplicaciones a las que se permite la ejecución en segundo plano. Configuración -> Privacidad -> Aplicaciones en segundo plano.

martes, 21 de abril de 2015

Vírus Recycler

En las memorias USB se crea una carpeta oculta con el ejecutable \RECYCLER\e621ca05.exe


Modifica todas las carpetas del raíz del dispositivo haciéndolas carpetas del sistema ocultas (hay que activar una opción especial para verlas). En su lugar crea un acceso directo por carpeta que además llamará al ejecutable anterior, para infectar nuevos equipos.


Ejemplo de llamada para cada acceso directo:
%systemroot%\system32\cmd.exe /c "start %cd%RECYCLER\e621ca05.exe &&%systemroot%\explorer.exe %cd%GNI Zeus AM - entornos


En cada ordenador infectado se crea un ejecutable con nombre aleatorio, en la carpeta C:\Usuarios\[user]\AppData\Roaming\*****.exe Reconocible por el icono de la vaquita con su móvil.


Para eliminar el vírus deberíamos eliminar el ejecutable en nuestro equipo y borrar el registro creado en HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\****.exe (regedit) para que no se inicie con Windows.

Para borrar el virus de los dispositivos de memoria eliminar la carpeta RECYCLER.

Con la consola de comandos (CMD) podemos borrar los accesos directos y restaurar la visiblidad de las carpetas.
del *.lnk
attrib /d /s –r –h –s *.*


Para que sea efectivo deberíamos repasar también cualquier equipo y memoria USB de nuestro entorno.

domingo, 7 de diciembre de 2014

Buscar una tabla por el valor en una de sus columnas

Puede darse el caso que deseemos encontrar el nombre de una tabla de la cual solo sabemos un valor específico para un registro y columna. Esta búsqueda puede ser muy pesada para la base de datos si existen muchas tablas o registros en ella, así que debemos intentar indicar el mayor número de condiciones posibles.

En el siguiente trozo de PL/SQL seleccionamos en una primera consulta todas las tablas y columnas donde podría encontrarse el literal que buscamos. Filtramos por el esquema al que estamos conectados (USER) o el que deseemos, tipo de dato de la columna o una longitud mínima, calculada con el literal de mayor longitud que hemos podido encontrar. Sin embargo para el literal a comparar recomendamos que sea lo más corto posible a fin de aligerar la operación de comparación.

Posteriormente en un bucle, para cada columna y tabla encontrada, se realiza una búsqueda para encontrar un registro que cumpla con nuestro literal.
set serveroutput on;

DECLARE
  match_count integer;
  v_search_string varchar2(100) := 'Civilization... solo un turno más';
BEGIN  
  FOR t IN (SELECT owner, table_name, column_name 
              FROM all_tab_columns 
              WHERE owner = USER and DATA_TYPE = 'VARCHAR2' and DATA_LENGTH >= 37
            ) LOOP   
    EXECUTE IMMEDIATE    
      'SELECT COUNT(*) FROM '||t.owner || '.' || t.table_name||
      ' WHERE '||t.column_name||' = :1'   
      INTO match_count  
      USING v_search_string; 
      
    IF match_count > 0 THEN 
      dbms_output.put_line( t.owner || '.' || t.table_name ||' '||t.column_name||' '||match_count );
    END IF; 
    
  END LOOP;
  
  dbms_output.put_line('Fin');
END;
/

miércoles, 26 de noviembre de 2014

Ordenar lista creando comparador

Ordenación de una lista creando un comparador específico para la ordenación.
List listResult;

[...]

// Sorting the result list by campo1.id
Collections.sort(listResult, new Comparator() {
 @Override
 public int compare(final TipoDto object1, final TipoDto object2) {
  return object1.getCampo1().getId().compareTo(object2.getCampo1().getId());
 }
});

viernes, 7 de noviembre de 2014

Leer Properties externo

Ejemplo de como podemos leer un fichero .properties ubicado fuera de nuestro proyecto Java.
package configuration;

import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.Locale;
import java.util.ResourceBundle;

public class ConfigurationLoader {
 
 private static final String MAGPIES = "magpies";
 private static final String PATH= "path";
 
 public Configuration loadConfiguration() throws IOException {
  final ResourceBundle rb = getResourceBundle();  
  final Configuration config = new Configuration();
  config.setMagpies(Integer.valueOf(rb.getString(MAGPIES)));
  config.setPath(rb.getString(PATH));  
  return config;
 }
 
 private ResourceBundle getResourceBundle() throws IOException {
  final URL[] urls = {new File(".").toURI().toURL()};
  final ClassLoader loader = new URLClassLoader(urls);
  return ResourceBundle.getBundle("general", Locale.getDefault(), loader);   
 }
}
Una vez generado el jar ejecutable, el fichero de propiedades se podría situar en la misma carpeta.

jueves, 24 de julio de 2014

SQL Developer

Configuración para facilitar el uso de SQL Developer.

· Mostrar resultados en nuevas pestañas. Hay una opción para que cada vez que se ejecuta una consulta, el resultado se muestre en una pestaña nueva sin machacar las existentes. Equivale a tener el botón de la chicheta roja pulsado o despulsado por defecto. Esta opción se edita en Herramientas → Preferencias → Base de Datos → Hoja de Trabajo → Mostrar resultados de consulta en separadores nuevos.

· Poner el entorno en UTF-8 en Herramientas → Preferencias → Entorno → Codificación.

· Abrir PL/SQL en modo lectura. Para evitar modificar los PL/SQL accidentalmente desde el editor, marcar la siguiente opcion: Herramientas → Preferencias → Editor de Codigos → Iniciar en Modo de Sólo Lectura.

· Mostrar constraints y otros esquemas. Ir a Herramientas → Preferencias → Base de Datos → Extensiones Definidas por el Usuario e incluir los ficheros tablespace_editor.xml, tablespace_nav.xml, constraints_editor.xml, y constraints_nav.xml (adjuntos en esta pagina), como tipo EDITOR o NAVIGATOR según el fichero sea *editor.xml o *nav.xml. Si aún están los ficheros por defecto de SQLDeveloper podemos eliminarlos.

· Refrescar manualmente una vista materializada. Ir a Herramientas → Preferencias → Base de Datos → Extensiones Definidas por el Usuario e incluir el fichero materialized_view_refresh.xml como tipo ACTION. Cerrar el SQLDeveloper y cuando se vuelva a abrir, en las vistas materializadas aparece una nueva opción llamada "Fast Manual Refresh" que refrescará la vista.

· Mostrar tablas hijas de una tabla. Ir a Herramientas → Preferencias → Base de Datos → Extensiones Definidas por el Usuario e incluir el fichero tablas_hijas_editor.xml como tipo EDITOR. Cerrar SQLDeveloper para ver la nueva pestaña a la hora de ver los datos de una tabla.

· Hoja de trabajo compartida o no compartida. Una hoja de trabajo compartida permite cambiar el esquema sobre el que trabaja, sin afectar al código escrito. Una hoja de trabajo no compartida tiene un esquema fijo, protegiendo para que no se ejecute accidentalmente en el esquema incorrecto. Para configurar que por defecto las hojas de trabajo nuevas sean compartidas o no, ir a Herramientas → Preferencias → Base de Datos → Hoja de Trabajo. Habilitar o deshabilitar la opción "Nueva hoja de trabajo para utilizar conexiones no compartidas".

· Visor de objetos (explorador lateral). Para configurar ir a Herramientas → Preferencias → Base de Datos → Visor de Objetos. La opción activada "Congelar Automáticamente Ventanas del Visor de Objetos" nos permitirá tener varios objetos abiertos y no sobreescribir el anterior al abrir uno nuevo (ejemplo queremos tener dos tablas abiertas). La opción desactivada "Abrir Objeto con un solo clic" nos obliga a hacer doble click en un objeto para abrirlo. Así podremos hacer un único click para copiar su nombre, ver sus opciones o consultar sus columnas, sin tener que abrirlo con el retraso y molestia que conlleva.

constraints_editos.xml
constraints_nav.xml
materialized_view_refresh.xml
tablas_hijas_editor.xml
tablespace_editor.xml
tablespace_nav.xml