hotmail: sender was rejected. Remote host said: 550 SC-001


Hotmail agregó nuevas reglas de validación para evitar la entrada de spam en sus servidores. Si tenemos un servidor de correo saliente (smtp) y la IP que utiliza está en alguna lista negra o un grupo de IPs cercano está listado, no nos van a permitir enviarles mail, obteniendo como resultado un rechazo similar a este:

Connected to 65.54.188.110 but sender was rejected. Remote host said: 550 SC-001 (BAY0-MC3-F3)
Unfortunately, messages from xxx.xxx.xxx.xxx weren't sent. Please contact your Internet service provider
since part of their network is on our block list. You can also refer your provider
to http://mail.live.com/mail/troubleshooting.aspx#errors.

Podemos verificar si la IP del servidor que envía (SMTP) está listada acá: http://www.mxtoolbox.com/blacklists.aspx

Si es un pool o grupo de IPs las baneadas, vamos a tener que hablarlo con el proveedor del servicio porque escapa a nuestro alcance solicitar la eliminación de las listas negras.
En cambio si es nuestra IP la que figura en el las listas negras, habiendo verificado y corregido la causa de la publicación, podemos solicitar al adminitrador de la lista correspondiente que nos remueva. En general, si la causa que nos colocó en la lista negra está solucionada, nos sacarán en 24 a 72 Hs. dependiendo de la entidad que las administre.
Adicionalmente, no está demás que realicemos el reclamo al soporte de e-mail de microsoft a través del siguiente formulario:

Teclado numérico activado al arranque


Si a nivel de hardware (BIOS) no podemos activar el teclado numérico para que al arranque se active, no nos va a quedar otra que hacerlo por soft:

En Linux Fedora:

Instalamos una pequeña utilidad que realiza esta tarea:

$ sudo yum install numlockx

Encendemos el teclado numérico:

$ numlockx on

Esta última línea la podemos colocar en el .bash_profile del home del usuario para que se ejecute al iniciar sesión.

En Windows:

Con el regedit, modificamos la siguiente entrada en el registro:

HKEY_CURRENT_USER-->Control Panel-->Keyboard-->InitialKeyboardIndicators

y le ponemos el valor 2.

Reiniciamos y listo.

Midnight Commander Shortcut Keys


Como no soy un asiduo usuario de este excelente utilitario de Linux, cada vez que tengo que trabajar con el tengo que ponerme a buscar cuales eran las combinaciones de teclas para operarlo. Mas aún, cuando lo abrimos en una ventana de consola y no podemos cerrarlo con el F10.

Acá van los atajos mas utilizados:

The 'F' (function) keys are widely used in mc for file operations. Read the bar at the bottom for their current function, which may differ according to the context, eg. browsing a directory, using the file viewer, or the editor. 
    In normal browsing mode:
F1 - help. More readable than the 2000-line man page, although difficult to browse.
F2 - user menu ( offers option to gzip files, etc.)
F3 - view (handy to check the contents of an rpm or tgz file, or read contents of files)
F4 - edit with internal editor, mcedit 
F5 - copy 
F6 - rename or move
F7 - create a directory
F8 - delete
F9 - pull-down - accesses the menu bar at the top.
F10 - quit. Closes mc, as well as mcedit and any unwanted open menu. 

If you don't have F keys, use Esc - number sequence (1-0) instead. 
F10 key in Gnome Terminal: opens the main terminal File menu instead, so click quit with mouse.

 

pixel quemado o trabado ?


Hace unos días tuve una interesante experiencia con una notebook. En la pantalla se veía un punto rojo (sobre fondo blanco). Tan diminuto como un punto, pero que una vez que sabes donde está, comienza a molestar porque tu mirada recae siempre en ese punto.

Este tipo de defectos puede afectar tanto a las pantallas del tipo LCD, como LED, y también a los Plasma. Así que revisar este tipo de anomalía no viene mal cuando uno compra un equipo, mas aún un televisor, dado que no están ajenos al problema.

La detección: la mejor manera es la visual. Mirando atentamente la pantalla con distintos fondos podemos detectarlos. Una ayuda puede ser una página como esta, donde al colocarla en modo de pantalla completa (F11) y seleccionando un color, buscamos facilmente los pixels defectuosos.

Pixel Quemado o Muerto: es el pixel que directamente no enciende y se ve el punto negro sobre una pantalla blanca, este tipo de falla no tiene posibilidades de correción de nuestra parte y debemos tratar de realizar el cambio con el fabricante si aún está en garantía.

Pixel Trabado, Stacked o Bloqueado: es el pixel que no está apagado, sino que se enciende en un color fijo, por ejemplo rojo, verde o azul. En estos casos, tenemos una chance para intentar solucionar el problema. Dado que el pixel está encendido, pero trabado en un color fijo, podemos intentar destrabarlo al ser exitado con rápidos cambios de color. Para ello, podemos utilizar algunos videos preparados a tal fin en youtube, posicionando el punto sobre la porción de video que parpadea en distintos colores. Si esto no soluciona el problema, reclamemos al vendedor.

A no desesperar. Pero verifiquemos inmediatamente luego de la compra para no tener dolores de cabeza posteriores.

 

Visibilidad del Tránsito de Venus 06/06/2012


El llamado tránsito de Venus es el pasaje de Venus por delante del Sol, visto desde la Tierra. Es un suceso poco frecuente (cuatro pasadas en 243 años) y en su anterior tránsito (08/06/2004), se vio algo asi:

Ahora, si se preguntan, como me lo pregunté yo, si es posible verlo desde Argentina, lamentablemente tengo que desilucionarlos. En gran parte de sudamérica no será visible porque será de noche.

Este es el mapa de visibilidad del tránsito de Venus para el 06/06/2012:

Asi que si quieren pegarse un viajecito a Japón, Rusia o el este de Australia para verlo, después me mandan una foto…

Captura Teclas / Keylogger en C# independiente del foco de la aplicación


Este es un capturador de teclas independiente de si la aplicación tiene el foco o no. Trabaja en modo consola, pero puede adaptarse a diversas necesidades.

using System;
using System.Diagnostics;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace atrapateclas
{
    class Program
    {
        private const int WH_KEYBOARD_LL = 13;
        private const int WM_KEYDOWN = 0x0100;
        private const int WM_SYSKEYDOWN = 0x0104;
        private static LowLevelKeyboardProc _proc = HookCallback;
        private static IntPtr _hookID = IntPtr.Zero;

        static void Main(string[] args)
        {
            _hookID = SetHook(_proc);
            Application.Run();
            UnhookWindowsHookEx(_hookID);
        }

        private static IntPtr SetHook(LowLevelKeyboardProc proc)
        {
            using (Process curProcess = Process.GetCurrentProcess())
            using (ProcessModule curModule = curProcess.MainModule)
            {
                return SetWindowsHookEx(WH_KEYBOARD_LL, proc,
                    GetModuleHandle(curModule.ModuleName), 0);
            }
        }

        private delegate IntPtr LowLevelKeyboardProc(
            int nCode, IntPtr wParam, IntPtr lParam);

        private static IntPtr HookCallback(
            int nCode, IntPtr wParam, IntPtr lParam)
        {
            if (nCode >= 0 && (wParam == (IntPtr)WM_KEYDOWN || wParam == (IntPtr)WM_SYSKEYDOWN))
            //if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
            {
                int vkCode = Marshal.ReadInt32(lParam);
                //if (Keys.C == (Keys)vkCode && Keys.Control == Control.ModifierKeys)
                //verifico que se presione CTRL + F1:
                if (Keys.F1 == (Keys)vkCode && Keys.Control == Control.ModifierKeys)
                    Console.WriteLine((Keys)vkCode);
            }
            return CallNextHookEx(_hookID, nCode, wParam, lParam);
        }

        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        private static extern IntPtr SetWindowsHookEx(int idHook,
            LowLevelKeyboardProc lpfn, IntPtr hMod, uint dwThreadId);

        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        private static extern bool UnhookWindowsHookEx(IntPtr hhk);

        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode,
            IntPtr wParam, IntPtr lParam);

        [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        private static extern IntPtr GetModuleHandle(string lpModuleName);
    }
}