martes, 18 de diciembre de 2012

[Linux] Samba y Windows 7: no se guarda el perfil del usuario

En un dominio con servidor Samba y perfiles móviles, a un determinado usuario no se le carga su perfil, y siempre le aparece un mensaje que le indica que trabajará con un perfil temporal y no se guardarán los cambios que realice. El problema puede radicar en dos cosas:
  • Ha ocurrido algo malo con su usuario, y en el registro de Windows nos aparece su usuario con un .bak, en la cadena HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList. Lo borramos tan contentos.
  • En el servidor, en la carpeta home/usuario/profile.V2 hemos copiado un archivo sobre el que el usuario no tiene permisos suficientes. En mi caso, copié como root un archivo y olvidé hacer al usuario propietario del mismo. Lo borramos o le damos los permisos adecuados.
Et voilà.
 

viernes, 22 de junio de 2012

[MSDOS] Imprimir desde MS-DOS a PDF

Se trata de imprimir desde un programa MS-DOS (trabajando bajo Windows XP) a PDF, concretamente utilizando PDFCreator.

Compartimos la impresora PDF, y la llamamos, por ejemplo, PDF

Redirigimos LPT a la impresora que hemos compartido
NET USE LPT1 \\%COMPUTERNAME%\PDF /persistent:yes
El problema es que si solo hacemos esto, PDFCreator nos genera unas hermosas páginas en blanco a cambio de nuestras impresiones. Hay que ajustar sus propiedades, y en la pestaña "Opciones avanzadas", "Procesador de Impresión", en la lista de la izquierda "WinPrint" y en la de la derecha "TEXT"

Et voilà

miércoles, 7 de marzo de 2012

[Java-JPA] Trabajar con consultas mezcladas

En JPA, habitualmente se trabaja con consultas que devuelven un único tipo de objeto, por ejemplo:
SELECT e FROM Equipo e
En estos casos es bastante sencillo trabajar, puesto que son resultados compactos, y a la hora de, por ejemplo, trabajar con informes de iReport, pasamos dichos objetos como tales. Sin embargo, a veces no queremos recuperar un único tipo de objeto sino varios, o incluso objetos y partes de otros. Por ejemplo, en este caso recuperamos equipos y los puestos cuya clave ajena está en equipo:
SELECT e, ep  FROM Equipo e JOIN e.puesto ep
En este caso, necesitamos extraer los distintos objetos recorriendo un resultset, y lo hacemos del siguiente modo:
    private void pruebaConsulta(String textoConsulta) {
        EntityManagerFactory factory = Persistence.createEntityManagerFactory("upiPU");
        EntityManager em = factory.createEntityManager();
        em.getTransaction().begin();
        Query consulta = em.createQuery(textoConsulta);

        // Esto valdría para una consulta que devuelve:
        // un objeto Equipo en la primera columna
        // un objeto Puesto en la segunda
        List res = consulta.getResultList();
        for (int i = 0; i < res.size(); i++) {
            Object[] fila = (Object[]) res.get(i);
            Equipo e = (Equipo) fila[0];
            Puesto p = (Puesto) fila[1];
            System.out.print(e.getIdEquipo() + "\t");
            System.out.print(e.getCodGiss() + "\t");
            System.out.print(p.getIdPuesto() + "\t");
            System.out.println(p.getUsuario().getIdUsuario());
        }
    }
De este modo, entresacamos únicamente los atributos de los objetos que queremos, aunque también podríamos haberlos escogido en la consulta, en cuyo caso los objetos devueltos podrían ser de tipo Integer, String, o cualquiera de los que compongan cada uno de los campos.

lunes, 13 de febrero de 2012

[Java] Informes con iReport y EJBQL

iReport es una herramienta magnífica para generar informes desde java, e incluso cuenta con un asistente que genera las consultas necesarias para atacar la base de datos.

Mi problema es que estaba diseñando una aplicación con JPA, y tener consultas en SQL en lugar de EJB-QL me parecía poco elegante. Hacerlo en ese dialecto cuando tenemos una única tabla es sencillo, pero cuando los datos provenían de varias tablas mediante un join la cosa se complica, porque iReport no reconoce alias y similares. Este es el modelo de datos:


La consulta en EJB-QL que recupera a los usuarios con su teléfono es:
SELECT u.idUsuario, u.nombre, ut.numTelefono, ud.nombreDepartamento 
FROM Usuario u JOIN u.telefono ut JOIN u.departamento ud
Puesta en su sitio en el archivo .jxrml sería así:

<queryString language="ejbql">
    <![CDATA[SELECT u.idUsuario, u.nombre, ut.numTelefono, ud.nombreDepartamento
      FROM Usuario u JOIN u.telefono ut JOIN u.departamento ud]]>
</queryString>

Pero no se puede hacer referencia a los campos mediante su nombre, sino mediante mediante el uso de alias específicos, COLUMN_1, COLUMN_2, etc.:
 
<field class="java.lang.String" name="COLUMN_1"></field>
<field class="java.lang.String" name="COLUMN_2"></field>
<field class="java.lang.String" name="COLUMN_3"></field>
<field class="java.lang.String" name="COLUMN_4"></field>

De ese modo funciona perfectamente.

jueves, 26 de enero de 2012

[Linux] Samba como PDC y privilegios de usuarios

Cuando tenemos un equipo Linux como controlador de dominio, los usuarios en los equipos Windows tienen privilegios limitados. Si queremos que un determinado grupo de usuarios tengan, por ejemplo, consideración de Administradores locales de las máquinas, debemos hacer:

net groupmap add ntgroup=Administradores unixgroup=adm rid=512 type=d
Se supone que en la máquina Linux tenemos un grupo llamado adm, en el que se encuentran los usuarios a los que queremos conceder permisos administrativos en los equipos Windows.

sábado, 21 de enero de 2012

[Linux] Redirigir todas las salidas de una orden

En un script, para redirigir la salida estándar y la de error a un mismo sitio (o a ninguno), utilizamos :
comando > sitio 2>&1
Por ejemplo, para comprobar si una máquina está encendida y responde al ping, pero sin que muestre nada por pantalla:
ping 10.0.0.1 > /dev/null 2>&1
if [ $? -eq 0 ]; then
  echo El cacharro está encendido
fi
Es una tontería, pero siempre se me olvida...

Datos personales