EL problema de los departamentos de sistemas en México

Esta entrada está dedicada a un problema que se presenta en la mayoría de empresas mexicanas ajenas al software (que se dedican a otro giro) pero que cuentan con un departamento de sistemas en el cual se desarrolla el software a la medida el cual requiere la compañía.
Enumerare una lista de puntos que para mí engloban la gran problemática en los departamentos de sistemas:

  1. El primer problema radica en que la empresa se dedica a vender un producto que nada tiene que ver con software, por lo cual su departamento de sistemas no es su prioridad, esto ocasiona que el departamento tenga bajo presupuesto, lo cual afecta tanto el equipo a utilizar como el personal a contratar, una empresa de este tipo termina contratando personal por 12,000 pesos al mes en promedio y lo único bueno que tiene para ofrecerle es las prestaciones ya que el ambiente en el que trabajaran deja mucho que desear. Si ofreces bananas, pues obtendrás changos (frase de Alex).
  2. El segundo punto lo centrare en la documentación, en la mayoría de departamentos de sistemas no les pasa por la cabeza documentar su software, no piensan en que pasara cuando el personal encargado de cierto proyecto renuncie o sea despedido, o el nuevo personal que corregirá los bugs o se encargara de terminar sistemas a medias, todo esto solo dirige que su personal siga renunciando, si se tiene un software sin documentación, esperen contratar adivinos ya que ningún programador piensa igual.
  3. Como tercer punto, mencionare a los programadores de la vieja escuela que siguen programando con lenguajes de programación antiguos y lo peor aún es que son lenguajes que ya tienen problemas con los mismos sistemas operativos, todo esto nos dirige a desarrollos que duran mucho más tiempo cuando puede mejorarlos utilizando lenguajes de quinta generación que aceleran el proceso de desarrollo. Este problema en parte es culpa del programador que se cierra a lo que conoce o teme conocer algo nuevo y también es culpa de la empresa, ya que esta última no obliga a su personal a capacitarse pagándoles cursos y certificaciones.
  4. En el cuarto y último punto menciono algo importante y es el hecho de las empresas por no tener un modelo de mejora y evaluación de procesos, por ejemplo CMMI, MoProSoft. Esto es una gran parte de todo el espiral de problemas que hay, ya que no solo se necesita saber programar, se necesita saber organizar el proceso de un software, no solo es que llegue Pepe y te diga quiero esto y en tiempo real vas al código de producción (si directo de producción, no es broma), y se modifica el cambio, después Pepe se enoja por que fallaron cosas que ya funcionaban, pues claro no se sigue una organización para realizar el cambio, es lógico que fallen cosas, y todo esto hace que el sistema valla tomando forma de Frankenstein.

Para concluir yo recomendaría que las empresas le den más importancia al área de sistemas, ya que son el núcleo de su logística, casi todos los departamentos dependen de un software creado en esta área, y siempre el personal de sistemas termina llevándose todas las culpas en la mayoría de ocasiones. Se necesita mejorar los departamentos de sistemas ya que es un beneficio para la empresa, si se mejora los procesos como se realiza un software, con procesos como toma de requerimientos, análisis, desarrollo, pruebas e implementación se puede mejorar en calidad, y la calidad reduce los errores en el software ya que hacer un software cuando Pepe viene a joder pedir un cambio, es un 99% que va a fallar algo, y Pepe tendrá que seguir chingando dando vuelta al departamento hasta que se esté listo el cambio. También las empresas invirtiendo dinero en capacitación a su personal tendrán gente más preparada y no se cerraran en utilizar herramientas de los años 80, a lo cual harán los desarrollos de forma más rápida. Y como ultima sugerencia, optar por tener un modelo de mejora y evaluación de procesos no está demás, ya que esto les daría un estatus de calidad superior y lo cual se vería sin duda reflejado en los ingresos monetarios que obtiene la empresa.

Existen muchos más puntos pero trate de englobar los que creo son los principales.

Función para encriptar en sha1 en C# .Net

La siguiente función nos sirve para realizar una encriptación en SHA1 en C# .Net.

 public class Encrypt
    {
      public static string GetSHA1(string str)
        {
            SHA1 sha1 = SHA1Managed.Create();
            ASCIIEncoding encoding = new ASCIIEncoding();
            byte[] stream = null;
            StringBuilder sb = new StringBuilder();
            stream = sha1.ComputeHash(encoding.GetBytes(str));
            for (int i = 0; i < stream.Length; i++) sb.AppendFormat("{0:x2}", stream[i]);
            return sb.ToString();
        }
   }

Y se utiliza así:

string cadenaEncriptada=Encrypt.GetSha1("patito");

Recuerda agregar las siguientes librerías para utilizarla:

using System.Security.Cryptography;
using System.Text;

Como abrir una ventana con información a dar clic en nuestro marker #googlemaps #infoWindow

Para abrir una ventana al dar clic en un marker en los mapas de google maps debemos utilizar el objeto de nombre infoWindow. Para ello veamos el siguiente ejemplo:

Dar clic en el marker:

Código HTML

<div id="mapa" style="height:300px;">
</div>

Código Javascript

function initialize() {

//valores de mapa
  var myLatlng = new google.maps.LatLng(18.363882,-103.044922);
  var mapOptions = {
    zoom: 4,
    center: myLatlng
  };

  //creamos el mapa
  var map = new google.maps.Map(document.getElementById('mapa'), mapOptions);

  //contenido de nuestra ventana
  var contentString = '&lt;div id="content"&gt;'+
      'contenido feliz de una ventanita en el marker&lt;br&gt;'+
	    'contenido feliz de una ventanita en el marker&lt;br&gt;'+
		 'contenido feliz de una ventanita en el marker&lt;br&gt;'+
		  'contenido feliz de una ventanita en el marker&lt;br&gt;'+

      '&lt;/div&gt;';

  //info window
  var infowindow = new google.maps.InfoWindow({
      content: contentString
  });

  //variables de nuestro marker, contiene la ubicación del centro del mapa
  var marker = new google.maps.Marker({
      position: myLatlng,
      map: map,
      title: 'Titulo del marker'
  });

  //agregamos el evento para abrir el infowindow de nuestro marker
  google.maps.event.addListener(marker, 'click', function() {
    infowindow.open(map,marker);
  });
}

//ejecutamos la funcion que tiene todo nuestro codigo
initialize();

Como eliminar etiquetas html de una cadena en c#

Para remplazar las etiquetas html de una cadena o eliminarlas en c#, podemos utilizar la siguiente línea que contiene la expresión regular que hará el trabajo de buscar las etiquetas html:

string candenaConTags="<br><p><b>Un Texto</b></p>";
string cadenaSinTags = Regex.Replace(cadenaConTags, "<.*?>", string.Empty);
//cadenaSinTags -> Un Texto

Recuerda de haber importado la librería para poder hacer uso de la clase Regex:

using System.Text.RegularExpressions;

Ignorar el certificado al momento de una petición a un API en C# .Net

Algunas veces necesitamos ignorar los certificados cuando nos conectamos a un API la cual pide SSL por ejemplo y necesitamos hacer pruebas, para ello podemos hacer el siguiente truco, agregamos el siguiente método (AceptarTodosLosCertificados) en nuestra clase:

class Conexion{

        public bool AceptarTodosLosCertificados(object sender, System.Security.Cryptography.X509Certificates.X509Certificate certification, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors)
        {
            return true;
        }

}

Y ya solo invocamos la siguiente línea antes de hacer la petición a la API:

class Conexion{

        public bool AceptarTodosLosCertificados(object sender, System.Security.Cryptography.X509Certificates.X509Certificate certification, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors)
        {
            return true;
        }

	   public bool Connect(){

            try
            {

                //linea donde invocamos el metodo
                ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(AceptarTodosLosCertificados);

                //aquí el codigo para la petición

                var httpWebRequest = (HttpWebRequest)WebRequest.Create("https://www.paginaconseguridad.com/lalala");
                httpWebRequest.ContentType = "application/json; charset=utf-8";
                httpWebRequest.Method = "POST";
                httpWebRequest.Accept = "application/json";

                //y aqui mas codigo .....

                return true;
            }catch(Exception ex){
                error = ex.Message;
                return false;
            }

        }

}

Así de sencillo nos brincaremos el certificado.

Como ubicar mapa de google maps en un domicilio en específico #googleMaps

Para ubicar nuestro mapa de google maps en un domicilio en específico, vamos primero a crear nuestro mapa:

<div id="mapita"></div>
//creamos el mapa por medio del div con id mapita
var mapOptions = {
zoom: 14,
center: new google.maps.LatLng(88.1121, 103.12121)
};
map = new google.maps.Map(document.getElementById('mapita'),
mapOptions);

En seguida le daremos un domicilio por medio de texto y de la siguiente manera el mapa se centrara en el domicilio dado:

//lo ubicamos a una dirección en específico
geocoder = new google.maps.Geocoder();
var address = "Guadalajara Jalisco Mexico";

//buscamos el domicilio por medio de geocoder
geocoder.geocode({ 'address': address }, function (results, status) {
//si el domicilio se encuentra lo ubicamos
//no valla ser que ponen crater 1512 de Marte Sistema Solar

if (status == google.maps.GeocoderStatus.OK) {
map.setCenter(results[0].geometry.location);
}
});

Ejecutar una cadena como consulta en SQL Server #SQLServer

Para ejecutar una cadena en Transact-SQL como una consulta, existe el procedure de nombre sp_sqlexec, este recibe la cadena la cual ejecuta. Esto nos sirve para consultas dinámicas pero no es recomendable a menos que se tenga bien planteada la seguridad para evitar travesuras de los “hackers”.

Ejemplo:

declare @cadena varchar(max)='select * from tabla'

exec sp_sqlexec @cadena

Como hacer que el navegador no cargue datos guardados como usuario y contraseña en un input. #html5

Para hacer que nuestros inputs no carguen datos guardados en el navegador, ya sea usuario y contraseña cargados en el formulario de acceso y se carguen en el formulario de modificar datos de usuario por ejemplo, tenemos que utilizar el atributo: autocomplete con el valor off.

<input type="text" name="usuario" autocomplete="off">

Esto evitara que se cargue el valor guardado de usuario en una caja de texto con el mismo name.

Como detectar cuando se redimensiona la ventana de nuestro navegador con #jquery

Para detectar cuando se redimensiona la ventana de nuestro navegador existe el evento resize. Basta con utilizar el selector en el objeto global window y aplicar la función que deseamos realizar cada que se redimensiona:

$(window).resize(function(){
//aqui el codigo que se ejecutara cuando se redimencione la ventana
var alto=$(window).height();
var ancho=$(window).width();
alert("alto: "+alto+" ancho:"+ancho);
})