- Portal de trámites para el contribuyente https://www.siat.sat.gob.mx/PTSC/
- Servicio web de Validación de RFC: https://portalsat.plataforma.sat.gob.mx/ConsultaRFC/respuesta.faces
- Recuperar facturas que me han emitido: http://www.sat.gob.mx/informacion_fiscal/factura_electronica/Paginas/servicio_generacion_cfdi.aspx
Este es el blog personal de las actividades de trabajo del Arquitecto de Sistemas (SA) Alfonso Baqueiro Bernal.
miércoles, abril 08, 2015
Ligas de interes para pagar impuestos en México
jueves, marzo 19, 2015
IT Operations Acronyms
- application performance monitoring (APM)
- Unified Monitoring (UnMon)
- Network Performance Monitoring and Diagnostics (NPMD)
- Infrastructure Performance Monitoring (IPM)
- IT Operations Analytics (ITOA)
APM application performance monitoring
Hoy descubrí las siglas APM que han sido creadas para hablar de la monitorización del rendimiento de aplicaciones, dicho de otra forma para hacer referencia a aplicaciones o servicios que permiten monitorear el rendimiento de nuestras aplicaciones, servicios, servidores, etc.
Hoy en día están de moda, debido a la facilidad de uso, las aplicaciones basadas en la nube, que se clasificacan también como SaaS (Software as a Service), y dado que ando evaluando tecnologías para monitorizar, he encontrado dos SaaS en esta categoría.
Les dejo los links:
En particular estoy probando ruxit, el cual es monitoreo basado en agente, que no requiere configurar practicamente nada excepto instalar el agente, que al descargarlo ya viene configurado para nuestra cuenta de monitoreo, al parecer este tipo de servicios están basados en una visión holística del SaaS donde el usuario requiere saber y hacer lo mímino necesario y el sistema prove al usuario con la visión de que es lo que necesita y que requiere, permitiendo configurar a su gusto un subconjunto de lo que el sistema capta como necesario.
Si les interesa probar ruxit, saquen una cuenta e instalen el agente en algún equipo, puede ser el de uso diario, para que vean que datos ofrece el monitoreo.
Saludos y happy monitoring...
martes, marzo 03, 2015
Programación de ventanas GTK usando javascript
Al intentar correr un ejemplo que viene en este libro de introducción a javascript
El cual documenta un ejemplo de un programa javascript para armar una GUI (interface gráfica de usuario) con un botón.
Para correrlo en ubuntu es necesario instalar el runner de javascript gjs, que se encuentra en el paquete gjs, por lo que instalamos dicho paquete
sudo apt-get install gjs
Sin embargo al tratar probar las primeras lineas del código, donde se hacen los imports, nos marca un error:
gjs gtk.js
JS ERROR: !!! Exception was: Error: Requiring GLib, version none: Typelib file for namespace 'GLib' (any version) not found
JS ERROR: !!! lineNumber = '0'
JS ERROR: !!! fileName = 'gjs_throw'
JS ERROR: !!! message = 'Requiring GLib, version none: Typelib file for namespace 'GLib' (any version) not found'
JS ERROR: !!! stack = 'Error("Requiring GLib, version none: Typelib file for namespace 'GLib' (any version) not found")@:0
("Requiring GLib, version none: Typelib file for namespace 'GLib' (any version) not found")@gjs_throw:0
Error("Chained exception")@:0
("Chained exception")@gjs_throw:0
@gtk.js:1
'
Error: Requiring GLib, version none: Typelib file for namespace 'GLib' (any version) not found
lunes, septiembre 29, 2014
Reflexionando en bicicleta.
Sin embargo creo que ocurre al revés, que cuando empiezas a amar a alguien, te empiezas a querer y cuidar a ti mismo para poder estar con quien amas.
Gracias doña bebita, eres una bendición de Dios.
martes, febrero 25, 2014
Como conectar linux a VPN servida por windows o PPP desde linea de comandos
Para conectar ubuntu a una VPN de manera gráfica es muy sencillo ya que trae una GUI de manejo sencillo, al parecer más fácil que en el propio windows.
Sin embargo establecer la conexión requiere interacción manual de nuestra parte, y cuando requerimos la conexión de manera cotidiana resulta engorroso tener que estar conectándola a cada rato que se desconecta, por lo que una forma de hacerlo mediante un script es más adecuada. Otra ventaja es que podemos fijar las rutas manualmente y no sacar todo nuestro tráfico por la VPN.
Requerimos el comando pppd, el cual viene como parte del paquete ppp.
Si no lo tenemos instalado es tan sencillo como usar el comando.
sudo apt-get install ppp pptp-linux
Ahora si entremos en materia de como se hace:
nota: los parámetros se ponen mayúsculas
Primero el comando para levantar el cliente de VPN
pppd call VPN_NAME debug logfd 2 nodetach
El programa buscara los parámetros en el archivo
/etc/ppp/peers/VPN_NAME
cosa que nos damos cuenta cuando lo corremos y aún no tenemos el archivo ya que marca:
pppd: Can't open options file /etc/ppp/peers/VPN_NAME: No such file or directory
En dicho archivo tenemos que poner lo siguiente:
pty "pptp VPN_HOST --nolaunchpppd"
name USERNAME
# esto para que use la ultima versión ms-chap2 al no usar los otros métodos de autentificación
refuse-pap
refuse-eap
refuse-chap
# deshabilitar compresion bsd
nobsdcomp
# deshabilitar compresión deflate
nodeflate
Adicionalmente tenemos que especificar el password a usar en el archivo
/etc/ppp/chap-secrets
USERNAME SOMETHING PASSWORD *
curiosamente el parámetro SERVER podriamos pensar que corresponde al VPN_HOST pero no es así, hemos puesto inicialmente el valor SOMETHING porque no sabemos que tenemos que poner
guardamos y corremos nuevamente el comando de conexión
pppd call VPN_NAME debug logfd 2 nodetach
a lo que obtendremos un mensaje de error entre lo que encontraremos lo siguiente:
No CHAP secret found for authenticating us to X
Ese X es lo que tenemos que poner en lugar de SOMETHING en el archivo chap-secrets.
Al hacerlo y volver a conectar a la vpn:
pppd call VPN_NAME debug logfd 2 nodetach
si el password es correcto podemos ver que se queda abierta la conexión y se queda corriendo el programa porque le hemos dicho nodetach, lo que nos facilita poner el comando dentro de un ciclo para que se mantenga abierta la vpn.
La parte truculenta de esto fue el SOMETHING ya que esto no aparece explicado por ninguna parte que he visto en internet ni en la documentación.
Si queremos ver un poco más de info de depuración podemos ver los mensajes de salida de pppd
tail -f /var/log/messages | grep pppd
Una vez que estamos conectados tenemos de dos sopas para que los IPs remotos sean accesibles, una es añadir como ruta default la interface ppp0, con el inconveniente de que si en la VPN no tenemos acceso a internet en nuestro equipo nos quedamos sin internet:
route add default dev ppp0
La segunda, es si ya conocemos los segmentos a los que tenemos acceso dentro de la VPN, añadimos estos segmentos
route add -net x.x.x.x/x dev ppp0
Si la info te ha sido de utilidad no olvides regalar un comentario.
domingo, noviembre 24, 2013
Configurar Router Linksys WRT54G con firmware ddwrt para funcionar como gateway repetidor de señal
Firmware Version DD-WRT v24-sp1 (07/27/08) micro - build 10012
Prerequisitos
Debe estar funcionando adecuadamente el router como Gateway, y con el DHCP configurado y activo.
Para aplicar la configuración nos conectamos al router por cable de red ethernet.
Lo que hacemos es que el router se conecta a una red inalámbrica como cliente, y crea una red virtual WIFI a la que nos conectamos y a través de la cual nos da servicio de Gateway o sea nos comparte el internet por esta SSID virtual y se conecta a internet a través del internet inalambrico de la red anfitrión.
1. Status > Wireless > Site survey
2. Seleccionar a la red a la que nos queremos conectar para que repita si esta protegida, necesitamos conocer la llave.
3. Damos click en el botón de extrema derecha [Join]
4. Lo anterior nos lleva a la pantalla de Wireless > Basic Settings
5. En dicha pantalla
Wireless Mode poner a Repeater
SSID debe corresponder a la red que seleccionamos
Hay que aclarar que no funciona como un repetidor tal cual y los equipos cliente
no se conectarán a la red anfitrión sino que lo que se tiene que hacer es crear
una interface virtual a la que asignamos un SSID que es al que se conectan los
equipos cliente
6. Virtual Interfaces [Add]
7. Le ponemos el SSID a nuestro gusto
8. [Save]
9. Cambiamos a la pestaña Wireless Security
10. Especificamos los parámetros de seguridad de la red anfitrión y la llave, aquí tiene truco ya hay que ponerle una passphrase vacia, darle generate, y luego poner el password correspondient y darle [Apply settings] y aunque no aparezca el password en el textbok, este ya se guarda y se usa
11. Especificamos los parámetros de seguridad para nuestra red virtual (interface virtual) que son los que usaremos en los equipos cliente
12. [Apply Settings]
13. Reboot router
Probablemente ya no nos responda el router por el cable de red y no nos asigne IP
si es el caso entonces nos conectados al router via WIFI y usando la SSID virtual y su llave
Para estas alturas ya debemos de tener internet a través de la red anfitrión.
lunes, noviembre 18, 2013
Configuración de vncserver para arrancar entorno gnome ~/.vnc/xstartup
Como configurar linux vncserver para que arranque un entorno de escritorio gnome al ejecutar un vncserver.
Modificar el archivo ~/.vnc/xstartup y dejarlo como sigue:
#!/bin/bash
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
exec gnome-session
sábado, noviembre 09, 2013
BOOK: Como ganar amigos e influir en la gente (Dale Carnegie)
- Herbert Spencer -
Cuando tratamos con la gente debemos recordar que no tratamos con criaturas lógicas. Tratamos con criaturas emotivas, criaturas erizadas de prejuicios e impulsadas por el orgullo y la vanidad.
"No hablaré mal de hombre álguno, y de todos diré lo bueno que sepa."
- Benjamin Franklin -
Un gran hombre demuestra su grandeza por la forma en que trata a los pequeños.
- Carlyle -
En lugar de cesurar a la gente, tratemos de comprenderla. Tratemos de imaginarnos por qué hacen lo que hacen. Eso es mucho más provechoso y más interesante que la crítica; y de ello surge la simpatía, la tolerancia y la bondad. "Saberlo todo es perdonarlo todo."
El mismo Dios, señor, no se propone juzgar al hombre hasta el fin de sus dias. Entonces ¿porqué hemos de juzgarlo usted o yo?
REGLA 1: No critique, no condene ni se queje.
Solo hay un medio para conseguir que alguien haga algo.
Y es el de hacer que el prójimo quiera hacerlo.
La única manera de conseguir que usted haga algo es darle lo que usted quiere.
Sigmun Freud decía que todo lo que hacemos surge de 2 motivos:
- El impulso sexual
- El deseo de ser grande
El Dr. Dewey lo expresa en una sola
- El deseo de ser importante
"A todo el mundo le agrada un elegio."
- Abraham Lincoln -
"El principio más profundo del carácter humano es el anhelo de ser apreciado."
- William James -
Si nuestros antepasados no hubiesen sentido este ardiente anhelo de ser importantes, la civilización habría sido imposible. Sin él seriamos iguales que los animales.
Si usted me dice como satisface sus deseos de ser importante, le diré qué es usted.
Eso es lo que determina su carácter. Es la cosa más significativa que hay en usted.
"Considero que el mayor bien que poseo es mi capacidad para despertar el entusiasmo entre los hombres, y que la forma de desarrollar lo mejor que hay en el hombre es por medio del aprecio y el aliento.
Nada hay que mate tanto las ambiciones de una persona como las criticas de sus superiores. Yo jamas critico a nadie. Creo que se debe dar a una persona un incentivo para que trabaje. Por eso siempre estoy deseoso de ensalzar, pero soy remiso para encontrar defectos. Si algo me gusta, soy caluroso en mi aprobación y generoso en mis elogios."
- Charles Swab -
¿que hace la persona común? Si algo no le gusta arma un escándalo, si le gusta, no dice nada.
Falta de aprecio es la razón principal para que hombres y mujeres abandonen a su pareja, con frecuencia damos tan por sentada la presencia de nuestro cónyuge, que nunca le manifestamos nuestro aprecio.
Alimentamos los cuerpos de nuestros hijos y amigos y empleados; pero muy raras veces alimentamos su propia estima. Les damos carne y papas para que tengan energía; pero descuidamos darles amables palabras de aprecio que cantarían durante años en su recuerdo.
La adulación hace más mal que bien. La adulación es falsa, y como el dinero falso, nos pone eventualmente en aprietos si queremos hacerla circular.
La diferencia entre la apreciación y la adulación es muy sencilla: una es sincera y la otra no. Una procede del corazón y la otra sale de la boca. Una es altruista la otra egoísta. Una despierta admiración universal, la otra es universalmente condenada.
"No temas a los enemigos que te atacan, teme a los enemigos que te adulan."
- Alvaro Obregón -
Descuidamos elogiar a nuestros hij@ cuando trae una buena nota, y rara vez alentamos a nuestros hijos cuando logran hornear una torta o construir una casita para pájaros. Nada les agrada más a los niños que esta especie de interés y aprobación de sus padres.
Pasaré una sola vez por este camino; de modo que cualquier bien que pueda hacer o cualquier cortesía que pueda tener para con cualquier ser humano, que sea ahora. no la dejaré para mañana, ni la olvidaré, porque nunca más volveré a pasar por aquí."
"Todo hombre que conozco es superior a mí en algún sentido. En ese sentido, aprendo de él."
- Emmerson -
Seamos calurosos en la aprobación y generosos en el elogio.
REGLA 2: Demuestre aprecio honrado y sincero.
sábado, noviembre 02, 2013
configure static permanent route on red hat or cent os
file:
/etc/sysconfig/network-scripts/route-eth0
content:
GATEWAY0=192.168.1.254
NETMASK0=255.255.255.0
ADDRESS0=192.168.99.0
meaning:
all the traffic to addreses 192.168.99.* go through gateway 192.168.1.254
equivalent temporal route command:
route add -net 192.168.99.0/24 gw 192.168.1.254
miércoles, octubre 30, 2013
search ip using grep
lunes, julio 29, 2013
How upgrade Android Micro SD from 16Gb to 32Gb preserving my SD contents
The process I used to do this was creating a new partition table on the new card and adding a partition of type c (FAT32 LBA) using the fdisk command in linux, saving the partition table.
After create a filesystem using mkfs.vfat and labeling "PHONE CARD" on the partition.
Of course you can do exactly the same using windows tools, the idea es create the partition on the new card and formatting it using a FAT32 filesystem.
Once you have the new partitión all what you have to do is turn off your phone, remove the old sd card, plug-in it on your computer, mount it, and copy all the files, including the hidden files to the new sd card, you can use your favorite file explorer software or commands like rsync to do this.
In my case it took 8 hours to do the copy.
Finally, insert the new sd card in your phone, all the apps should be working, test several apps (the ones that you know were running from the card) and test you have all your contents.
And that's it, enjoy your new space.
jueves, julio 18, 2013
Where do SMS are stored on android phones filesystem
/data/data/com.android.providers.telephony/databases/mmssms.db
The file is a SQLite Database, of course we need a rooted phone to copy the file with adb or using SSHDroid
miércoles, junio 26, 2013
Construyendo archivos .ear para deployar aplicaciones en un java application server
El .ear es un .zip con extensión .ear, que se puede crear con un programa para hacer .zip común y corriente, el truco esta en la estructura de archivos que debe tener:
META-INF
META-INF/application.xml
META-INF/MANIFEST.MF
se debe incluir un archivo META-INF/application.xml
con un contenido donde especificamos las apps y modulos a desplegar, cuyas rutas (
viernes, junio 21, 2013
Proporcionar soporte a equipos remotos linux
Otra opción, libre es VNC.
Para hacer conección, en este caso cuando a quien queremos ayudar esta detras de firewall y no lo puede remediar, es (ejectar los comandos desde la linea de comandos ej. xterm ó gnome-terminal ó konsole):
1. abrir el vncviewer en nuestro equipo en modo listen (nuestro equipo debe tener un puerto abierto en internet por default se usa el 5500)
vncviewer -listen
2. le proporcionamos a la persona que vamos a ayudar nuestro IP público donde esta escuchando nuestro vncviewer, ej. 74.125.225.238
3. el cliente al que vamos a ayudar en su equipo linux abre el servidor de vnc para la sesión de X principal (debe tener instalado el paquete x11vnc (sudo apt-get install x11vnc) )
x11vnc -connect 74.125.225.238
con esto comparte su escritorio para que podamos ayudarlo, en cualquier momento puede quitarnos el control interrumpiendo el programa (ctrl+c)
jueves, junio 06, 2013
PHP script to generate DB
<?php
header('Content-Type: text/plain; charset=utf-8');
$no_tablas = 40;
$type_a = explode('|','int|varchar(20)|char(5)|decimal(10,2)|date|time');
for($i=1; $i<=$no_tablas; $i++){
$no_campos = rand(3,12);
$foreign = (rand(0,1))? true: false;
$foreign_str = '';
$campos = array();
$campos[] = "\tid int not null primary key";
for($j=1; $j<=$no_campos; $j++){
$ctype = $type_a[ rand(0,count($type_a)-1) ];
if ($foreign && $ctype=='int' && $foreign_str==''){
$dest_tbl = "tabla_".rand(1,$i-1);
$foreign_str = "\tforeign_key (campo_$j) references $dest_tbl(id)";
$nullable = 'not null';
} else {
$nullable = (rand(0,1)==1) ? 'not null': '';
}
$campos[] = "\tcampo_$j $ctype $nullable";
}
$campos_str = join(",\n",$campos);
echo <<<EOF
create table tabla_$i (
$campos_str
$foreign_str
);
EOF;
}
?>
Una muestra del archivo de salida, es algo así:
create table tabla_1 ( id int not null primary key, campo_1 varchar(20) , campo_2 date not null, campo_3 time not null, campo_4 char(5) not null, campo_5 char(5) , campo_6 date not null, campo_7 date not null, campo_8 int not null, campo_9 char(5) not null, campo_10 date not null foreign_key (campo_8) references tabla_1(id) ); create table tabla_2 ( id int not null primary key, campo_1 time , campo_2 varchar(20) , campo_3 date not null, campo_4 time , campo_5 char(5) , campo_6 decimal(10,2) , campo_7 time ); create table tabla_3 ( id int not null primary key, campo_1 varchar(20) , campo_2 varchar(20) not null, campo_3 time , campo_4 time , campo_5 int , campo_6 time not null, campo_7 char(5) , campo_8 time , campo_9 decimal(10,2) , campo_10 date );
Comparación de programas de compresión vs versión paralela.
Comparación de los programas de compresión, tiempos y tamaños, se usan versión mono y versión paralela. gzip pv TABLA_QYDTTK4_F130604.TXT | gzip > TABLA_QYDTTK4_F130604.txt.gz 1.04GiB 0:00:45 [23.5MiB/s] [====================================================>] 100% pv TABLA_QYDTTK4_F130604.TXT | pigz > TABLA_QYDTTK4_F130604.txt.pig.gz 1.04GiB 0:00:04 [ 236MiB/s] [====================================================>] 100% bzip2 pv TABLA_QYDTTK4_F130604.TXT | bzip2 > TABLA_QYDTTK4_F130604.txt.bz2 1.04GiB 0:04:55 [3.59MiB/s] [====================================================>] 100% pv TABLA_QYDTTK4_F130604.TXT | lbzip2 > TABLA_QYDTTK4_F130604.txt.lbzip2.bz2 1.04GiB 0:00:07 [ 134MiB/s] [====================================================>] 100% pv TABLA_QYDTTK4_F130604.TXT | pbzip2 > TABLA_QYDTTK4_F130604.txt.pbzip2.bz2 1.04GiB 0:00:26 [39.3MiB/s] [====================================================>] 100% xz pv TABLA_QYDTTK4_F130604.TXT | xz > TABLA_QYDTTK4_F130604.txt.xz 1.04GiB 0:11:02 [ 1.6MiB/s] [====================================================>] 100% pv TABLA_QYDTTK4_F130604.TXT | pxz > TABLA_QYDTTK4_F130604.txt.pxz.xz 1.04GiB 0:01:06 [15.9MiB/s] [====================================================>] 100% pv TABLA_QYDTTK4_F130604.TXT | pixz > TABLA_QYDTTK4_F130604.txt.pixz.xz 1.04GiB 0:00:58 [18.1MiB/s] [====================================================>] 100% human readable sizes -rw-r--r-- 1 jobs jobs 1.1G jun 5 06:28 TABLA_QYDTTK4_F130604.TXT -rw-r--r-- 1 jobs jobs 86M jun 5 13:11 TABLA_QYDTTK4_F130604.rar -rw-r--r-- 1 jobs jobs 101M jun 6 11:23 TABLA_QYDTTK4_F130604.txt.gz -rw-r--r-- 1 jobs jobs 101M jun 6 11:31 TABLA_QYDTTK4_F130604.txt.pig.gz -rw-r--r-- 1 jobs jobs 80M jun 6 11:29 TABLA_QYDTTK4_F130604.txt.bz2 -rw-r--r-- 1 jobs jobs 80M jun 6 12:16 TABLA_QYDTTK4_F130604.txt.lbzip2.bz2 -rw-r--r-- 1 jobs jobs 80M jun 6 12:21 TABLA_QYDTTK4_F130604.txt.pbzip2.bz2 -rw-r--r-- 1 jobs jobs 63M jun 6 12:02 TABLA_QYDTTK4_F130604.txt.pixz.xz -rw-r--r-- 1 jobs jobs 63M jun 6 11:55 TABLA_QYDTTK4_F130604.txt.pxz.xz -rw-r--r-- 1 jobs jobs 63M jun 6 11:49 TABLA_QYDTTK4_F130604.txt.xz sizes, more detail -rw-r--r-- 1 jobs jobs 1112120271 jun 5 06:28 TABLA_QYDTTK4_F130604.TXT -rw-r--r-- 1 jobs jobs 90148917 jun 5 13:11 TABLA_QYDTTK4_F130604.rar -rw-r--r-- 1 jobs jobs 105128200 jun 6 11:23 TABLA_QYDTTK4_F130604.txt.gz -rw-r--r-- 1 jobs jobs 105153673 jun 6 11:31 TABLA_QYDTTK4_F130604.txt.pig.gz -rw-r--r-- 1 jobs jobs 82889350 jun 6 11:29 TABLA_QYDTTK4_F130604.txt.bz2 -rw-r--r-- 1 jobs jobs 83134496 jun 6 12:16 TABLA_QYDTTK4_F130604.txt.lbzip2.bz2 -rw-r--r-- 1 jobs jobs 82913562 jun 6 12:21 TABLA_QYDTTK4_F130604.txt.pbzip2.bz2 -rw-r--r-- 1 jobs jobs 65921560 jun 6 12:02 TABLA_QYDTTK4_F130604.txt.pixz.xz -rw-r--r-- 1 jobs jobs 65884988 jun 6 11:55 TABLA_QYDTTK4_F130604.txt.pxz.xz -rw-r--r-- 1 jobs jobs 65667608 jun 6 11:49 TABLA_QYDTTK4_F130604.txt.xz Notas: Se uso un archivo de texto de 1.04 Gb, en una workstation con 64Gb de RAM usando /dev/shm, sistema operativo Gentoo, y el software se compilo del repositorio.
extract specific lines from text file
L1=21
L2=33
FILE=x.txt
awk method:
awk -e "NR>=$L1&&NR<=$L2{print \$0}" $FILE
sed method:
sed -n "$L1,$L2 p" $FILE
head + tail method:
head -n $L2 $FILE | tail -n $(($L2-$L1+1))
martes, mayo 28, 2013
Corazón Coraza
porque te pienso
porque la noche está de ojos abiertos
porque la noche pasa y digo amor
porque has venido a recoger tu imagen
y eres mejor que todas tus imágenes
porque eres linda desde el pie hasta el alma
porque eres buena desde el alma a mí
porque te escondes dulce en el orgullo
pequeña y dulce
corazón coraza
porque no eres mía
porque te miro y muero
y peor que muero
si no te miro amor
si no te miro
pero existes mejor donde te quiero
porque tu boca es sangre
y tienes frío
tengo que amarte amor
tengo que amarte
aunque esta herida duela como dos
aunque te busque y no te encuentre
y aunque
la noche pase y yo te tenga
y no.
lunes, mayo 27, 2013
Git Administration, delete the last commit
after running this command in your local repo, do a
git push
this allows to restore the repo when someone for example erased all files in error.
