miércoles, 5 de febrero de 2014

Windows XP, server 2003 - Task Scheduler Error - 0x80090016, Keyset does not exist

No es necesario reiniciar. Se resuelve de la siguiente forma:

Se detiene el servicio administrador de tareas (task scheduler)

Se borra, mueve o renombra la carpeta: C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\S-1-5-18

Se inicia de nuevo el servicio administrador de tareas (task scheduler)

Se edita cada tarea para darle el usuario y contraseña apropiados


(gracias a http://www.waztech.com/News/News_Detail.asp?id=61)

miércoles, 23 de octubre de 2013

Punto como separador decimal en Ubuntu

Antes que nada, agradecer la referencia de esta entrada, del foro de ubuntu:
http://www.ubuntu-es.org/node/177441#.UmiH-FMW1c9, la entrada de Gabriel_M

El problema es este:
La configuración regional oficial del Perú (así parece) hace que el separador de decimales por defecto sea la coma. Pero la verdad aquí usamos el punto. Así que hay que cambiar la configuración regional por defecto del Ubuntu.

Por ahí encontré una sugerencia que decía cambiar el lenguaje a "Español (EU)" pero el problema es que esta configuración cambia la moneda por defecto a $, y la fecha (me parece) al poco práctico formato mes-dia-año (siempre comparo este formato a escribir un numero con centenas-unidades-decenas, pero ese es otro tema).

Lo propio es conservar el formato regional de Perú y sólo cambiar el separador decimal a punto, y el separador de miles a coma, y el linux en general permite manipular lo que querramos (¡felizmente!)

Es como sigue:
Hay que editar el archivo "es_PE" poniendo en la terminal:

sudo gedit /usr/share/i18n/locales/es_PE

ubicar las líneas:
mon_decimal_point    "<U002C>"
mon_thousands_sep    "
<U002E>"

e invertir los parámetros así:
mon_decimal_point    "<U002E>"
mon_thousands_sep    "
<U002C>"

esto fue para moneda.

Ahora hay que hacer algo similar para los números.
Ubicar las lineas entre:
LC_NUMERIC
(aqui dice algo para copiar la configuración de españa)
END LC_NUMERIC

y reemplazarlas con:
LC_NUMERIC
decimal_point        "
<U002E>"
thousands_sep        "
<U002C>"
grouping             3;3
END LC_NUMERIC


Grabar y cerrar.

Ahora hay que actualizar la modificación en el sistema con el siguiente comando de terminal:

sudo dpkg-reconfigure locales

Eso es todo. Ahora los programas que utilizan números (calculadora, hoja de cálculo, etc.) usarán el punto como separador decimal y la coma como separador de miles.


sábado, 19 de octubre de 2013

Como instalar windows 7 desde una memoria USB

Gracias a Benny26 por su publicación en techspot:

http://www.techspot.com/community/topics/how-to-install-windows-7-on-a-netbook-using-a-usb-flash-drive.183072/


Para hacer cosas básicas en windows veo que casi siempre te mandan a "descarga este programita de aquí". Terminas descargando varios programas y perdiendo el tiempo al comprobar que no te sirven, además de cruzar los dedos para que no te este metiendo un virus.



Pero en esta página que encontré describen las cosas al estilo Linux (¡¡al fin!!) con simples pasos y comandos de consola. Después de intentos sin éxito hasta con una aplicación que me descargué del mismo microsoft (lamentable) estos pasos fueron los que me sirvieron.



A continuación una traducción del enlace:

PASO 1: LO QUE NECESITAS:

  1. Una memoria usb de 4GB o mas.
  2. Una PC con lectora de DVD, windows 7 y privilegios de administrador (estos pasos no han sido comprobados en windows XP)
  3. Un DVD con el instalador de wiindows 7.


PASO 2: PREPARANDO LA USB CON COMANDOS DE D.O.S.


  1. Coloca tu memoria usb en la pc, y retira cualquier otra memoria que tengas conectada para evitar confusiones en el proceso.
  2. Abre la ventana de terminal de windows:
    • -clic en "inicio"
    • -clic en "todos los programas"
    • -clic en "accesorios"
    • -clic DERECHO en "símbolo del sistema"
    • -clic en "ejecutar como administrador" (ESTO ES IMPORTANTE)
      (nota para aquellos que nunca han usado una ventana de comandos: no olvides que cada comando que ingreses en la ventana va seguido de la tecla enter)
      (nota 2 para aquellos que nunca han usado una ventana de comandos: sean muy cuidadosos en seguir estos pasos, sobre todo en el momento de elegir el disco. Si se equivocan de número podrían borrar todos los datos y programas de un disco equivocado)
  3. Ahora en la ventana de "símbolo del sistema" que se ha abierto, tipear DISKPART (y enter como siempre) y esperar uno segundos.
  4. Luego de unos segundos, tipear LIST DISK (y enter). Aparecerá una lista de las unidades en tu PC
  5. Ahora necesitamos saber cual es el número de tu memoria usb ("Disco 0" o "Disco 1" o etc). Te debes guiar viendo la columna "Tamaño". Una memoria usb de 4GB mostrará aproximadamente 3800MB, una de 8GB mostrará 7600MB, etc. (ser cuidadosos en este paso, no olviden que se recomendó retirar todas las otras memorias usb para no borrarlas por error)
  6. Ahora debes seleccionar tu memoria usb tipeando "SELECT DISK ?" (donde "?" es el número de tu usb que identificaste en el paso anterior, por ejemplo: SELECT DISK 8)
  7. Ahora empieza la preparación de la usb:
    • Tipea CLEAN
    • Tipea CREATE PARTITION PRIMARY
    • Tipea SELECT PARTITION 1 (si, es el numero 1, no lo cambies)
    • Tipea ACTIVE
    • Tipea FORMAT FS=NTFS
    • Espera unos minutos hasta que termine el formato
    • Tipea ASSIGN
    • Tipea EXIT
  8. Ahora puedes minimizar la ventana negra de simbolo del sistema y colocar el DVD del instalador del windows 7 en la lectora (no dejes que se ejecute el instalador)
    • Ahora debes identificar que letra tiene tu dvd y la letra que tiene tu usb. Lo puedes encontrar en "Equipo" o en "mi pc".
  9. Ahora regresa a la ventana negra de simbolo del sistema y tipea: ?: CD BOOT (reemplaza "?" con la letra de tu dvd que identificaste en el paso anterior, por ejemplo G: CD BOOT)
    • 9a. Tipea CD BOOT
  10. Tipea BOOTSECT.EXE /NT60 ?: (reemplaza "?" con la letra de tu USB que identificaste en el paso 8a, por ejemplo BOOTSECT.EXE /NT60 P:)
  11. Ahora puedes cerrar la pantalla negra de simbolo del sistema.

PASO 3: PREPARACIÓN FINAL


  1. Entra a "mi pc" (o "equipo" o donde puedas ver tus archivos). Clic derecho en tu dvd y clic en "abrir" (no en ejecutar).
  2. Selecciona todos los archivos, clic derecho y clic en "copiar"
  3. Entra a tu usb y "pega" todos los archivos en ella.
  4. Cuando termine la copia, retira "de forma segura" (como siempre lo haces) tu usb de la pc

Ahora tienes lista una usb "booteable" para instalar windows. Util por ejemplo para una netbook que no tiene lectora de DVD. Solo debes asegurarte de que la Netbook tenga habilitada la opción de "bootear desde usb". Si no sabes como hacerlo puedes googlear o comentar este post para darte una ayuda.

Espero les sirva. Aunque nunca dejaré de ser Linuxero, estamos obligados muchas veces a tener disponible un windows (estoy trabajando en desarrollos para windows con C++ y Visual Studio)... Como diría Mafalda "qué asco me doy a veces"...


jueves, 25 de octubre de 2012

Designated Initializers

"Inicializadores Designados" (espero que sea una traducción aceptable).
He buscado tanto acerca de este tema y son tan escasas las referencias que vale la pena publicar una.

En Ansi C tenía el siguiente problema:
Necesito una estructura (struct) con algunos de sus miembros constantes:

struct
{
    int valor;
    const int constante1;
    const int constante2;
} mi_estructura;


El estándar no permite la inicialización de los elementos de una estructura, osea, si quiero que mis constantes sean 4 y 6:

struct
{
    const int constante1 = 4;
    const int constante2 = 6;
    int valor;
} mi_estructura;

NO ESTA PERMITIDO


Buscando encontré la forma de inicializar los miembros de struct. Entonces para hacer lo anterior correctamente sería:

struct
{
    const int constante1;
    const int constante2;
    int valor;
} mi_estructura = { 4, 6 };

PERMITIDO


Listo, ya hay una forma de hacerlo. Pero, aun no me gusta. La lista depende del orden en que coloco las variables miembro de struct. ¿que tal si muevo "int valor" al principio de la lista? ¿o si agrego una nueva variable? ¿o quito alguna?. Cuando lo haga debo ser muy cuidadoso en rehacer la lista de inicialización para respetar el nuevo orden (cuando alguien mas le haga mantenimiento a tu código después de tiempo, es MUY deseable que esto quede claro).

La solución (que escasamente pude encontrar) los "inicializadores designados" ("designed initializers"). Había sido tan simple como etiquetar cada elemento de la lista de inicialización anterior (un estilo muy similar a "enum"):

struct
{
    const int constante1;
    const int constante2;
    int valor;
} mi_estructura = { .constante2 =6, .constante1=4 };

PERMITIDO


Ahora si está mucho mejor. Quien le de mantenimiento a mi código debe fijarse solo en que el elemento constante de la estructura tenga su inicializador en la lista. Ya no debe preocuparse del orden y ni de una posible asignación errónea de valores.
Aún me gustaría evitar la edición en dos lugares, pero parece que es lo mejor que el estándar del C puede dar.


viernes, 13 de abril de 2012

ubuntu temp

gracias a TeoBigusGeekus en http://ubuntuforums.org/showthread.php?t=1688948&page=2

A continuacion una transcripcion de su aporte:

1)Open flash video page (that you own of course) and let it load. Don't close the page.


2)Open terminal and give
code:
lsof | grep Flash

lsof: list open files
In my case (opera user) it gives
code:
operaplug 2840 teo 9u REG 8,8 6962837 392986 /tmp/FlashXXFfe85s (deleted)


Notice the 2nd (process id) and 4rth (file descriptor - without the letter) columns.


3)
code:
cp /proc/2840/fd/9 ~/Desktop/video

lunes, 6 de febrero de 2012

Repositorio local de ubuntu con archivos descargados

Esta entrada está dedicada a las PC con Ubuntu, sin conexión a internet pero que quieren usar el synaptics como si estuvieran conectados.

Hay muchas ayudas al respecto sueltas en la red, pero de todas las que revisé ninguna me funcionó bien. Así que me puse a tantear pequeñas variaciones hasta que una me funcionó y es la que les describiré a continuación: (aparentemente la falla de las ayudas que encontré se deben a una mala traducción y a errores de tipeo, asi que seré cuidadoso al respecto).
(probado con Ubuntu 11.04 Natty 64 bits)


1.- CONSEGUIR LOS ARCHIVOS DE REPOSITORIO (*.deb)
Bueno, para esta parte se necesitará irremediablemente internet, talvez de otra computadora con conexión y misma versión de ubuntu.
Las instalaciones hechas desde el synaptics guardan una copia de todas las dependencias descargadas y empleadas en la carpeta /var/cache/apt/archives.
Entonces, una PC a la que ya le hayan instalado el o los paquetes deseados via synaptics, tendrá todas las dependencias necesarias (archivos .deb) en esta carpeta.
Copien todo el contenido de esta carpeta (excepto la subcarpeta "partial" y el archivo "lock" que son solo de trabajo). Estos archivos serán su repositorio local.


2.- PREPARANDO A LA PC SIN INTERNET.
Creen una nueva carpeta en cualquier lugar, por ejemplo:
cd /home/$USER
mkdir misrepositorios
Dentro de esta carpeta creen otra (ahora si deben usar el nombre "Packages")
cd misrepositorios
mkdir Packages
Dentro de la carpeta Packages copien todos los archivos ".deb" que extrajeron de la otra PC.


3. PREPARANDO NUESTRO REPOSITORIO PARA SU USO
Ahora se creará el índice de nuestro repositorio local:
cd /home/$USER/misrepositorios/
dpkg-scanpackages Packages /dev/null | gzip > Packages/Packages.gz
Ahora se le indicará al synaptics donde buscar nuestra lista de repositorios:
sudo gedit /etc/apt/sources.list
En la parte final del archivo que se abrirá deberán añadir la línea: (¡¡respetar los espacios!!) (esta era otra fuente de error: la edición del archivo no acepta la variable "$USER", asi que aqui si hay que poner el usuario que corresponda a su pc. Si alguien sabe como usar variables en este archivo de texto, háganmelo saber)
deb file:/home/mi_usuario/misrepositorios/ Packages/
Guardan y cierran


Eso es todo. Si ahora le dan "recargar" al synaptics, leerá todos los repositorios de la carpeta como si lo estuvieran haciendo desde internet, y podrán hacer las instalaciones que deseen, siempre y cuando todas las dependencias hayan estado en su carpeta.

lunes, 2 de enero de 2012

detalles de compilacion de c++ en eclipse

Compilando en eclipse un programa hecho por otra persona en otra IDE se me presentaron los siguientes errores:

"multiple definition of _start"

el detalle en consola:
/build/buildd/eglibc-2.10.1/csu/../sysdeps/x86_64/elf/start.S:65: multiple definition of `_start'

Gracias a la publicación de Mario en un foro (http://stackoverflow.com/a/5528987) encontré la solución:
añadir el parametro -c a la compilación del g++ (en "other flags"). No volvió a aparecer el error.


Otro error que se me presentó a continuación:
" undefined reference to `pthread_create' "

a pesar de haberle añadido la opción -lpthread a la compilación con g++, me seguía arrojando el mismo error, hasta que caí en la cuenta que el eclipse trabaja por separado la compilación y el enlazado (link), así que el enlazado también debería incluir esta opción en "linker flags". Incluí de nuevo -lpthread en ese campo, y todo corrió perfecto.

Como siempre digo, aunque esta información es redundante, es mas fácil encontrarla en la web si está publicada en varios sitios y agrupada de forma distinta. Espero les sirva.

Saludos