lunes, 29 de agosto de 2016

The C# project is targeting ".NETFramework,Version=v4.0", wich is not installed on this machine.

En una ocasión me encontraba trabajando con un proyecto que utilizaba el #Framework4, el cuál ya se encontraba instalado en mi máquina, sin embargo me mostraba este error:


Lo primero que se me ocurrió es que había un problema en el sistema, por lo que intenté reinstalarlo pero al intentarlo me daba un mensaje donde me notificaba que ya se encontraba instalado por lo que no procedía. Tambipén intenté reparar los frameworks con el "fix" que proporciona #Microsoft y todo en orden pero no con el proyecto. Así que investigando un poco me topé con la probabilidad de que no estuviera "instalado" dicho framework en el #IIS porque por alguna razón no es así por defecto (uso #Windows7, #VisualStudio2010). Haciendo una búsqueda de nueva cuenta encontré la manera de registrar dicho Framework en el IIS pero... "NO FUNCIONÓ". Todo estaba bien hecho, los comandos fueron ejecutados al pie de la letra y el resultado decía que se había hecho con éxito así que para solucionar ese error pensé en instalar de nueva cuenta Visual Studio 2010, cosa que me causaba conflicto pues sólo era este proyecto en particular el que me daba ese problema, así que intenté sólo reparar y..."Voilá", funcionó. Al ejecutar el instalador te da la opción de instalar y/o reparar por lo que simplemente elegí reparar y con eso tuvo. Tal vez haya sido muy obvio para algunos pero podría serviles a otros para evitarse tiempo invertido en reinstalar y esas cosas. Comenta si tienes une mejor manera de hacerlo.

viernes, 11 de marzo de 2016

USB compatible con Mac y Windows

Si eres como yo que usa Mac y Windows, o sólo Mac pero los demás usan Windows, te habrás topado con la necesidad de hacer que sean compatibles pues si la formateas en los formatos comunes de Mac no puede ser leída en Windows y te pedirá formatear o en el caso contrario si es Fat no podrás escribir archivos grandes o si es NTFS sólo podrás leer en Mac pero no escribir.

La solución sencilla a esto es formatearlo con el formato exFat para generar una compatibilidad pero debes saber que tienes que hacerlo desde una máquina Windows ya que si lo haces en una Mac es muy posible que el problema persista así que si es tu caso o estás estrenando USB dale ese formato primero en una Windows y comprueba la compatibilidad en una Mac.

¿Cuándo se llevarán bien estos tipos?

RIP Jobs.

jueves, 10 de marzo de 2016

No se ha podido verificar esta copia de la aplicación Instalar OS X El Capitan.


<<La solución está al final del post pero te recomiendo leer todo por si te ha pasado lo mismo que a mí>>

Pues tengo una Macbook Mid 2012 común y corriente y desde que la quise actualizar a Mavericks me dio algunos problemas.

Se bajaba todo normal desde la tienda y al instalar daba muchos errores. La libré muchas veces haciendo algunas  magias pero ahora pasa que se alenta por algunos ratos. Se pasma, se congela, lo que sea, procesa algunas cosas y después reacciona y sigue como si nada. De repente le pasa de nuevo y después se le quita. Eso sucede unos meses después de formatear.

Al principio creí que era por la memoria RAM que de fábrica son 4Gb y la verdad es que no debiera pasarle pero como uso algunos programas pesados pues pensé que podría ser eso así que decidí comprar 8Gb para expandir pero siguió haciendo lo mismo. Me temo que sea el disco duro pero igual afortunadamente no me da tantos problemas y siempre ando respaldando archivos para evitar desgracias.

Lo que estaba pasando últimamente era que todos los programas "se cerraban de manera inesperada". Al inicio eran los de Adobe y lo atribuía a su procedencia pero al final lo hizo con todos así que decidí formatear.

Ya tenía guardada en aplicaciones una copia de "El Capitan" por lo que procedí hacer una USB booteable con #DiskMakerX (que la verdad sí funciona y no es mentira como esa basura de #TransMac muy inservible que claro, es para hacerlo en Windows), la reconoce automáticamente y todo bien.

Siguiendo los pasos recomendados primero debes borrar de manera superficial (pues existen varias profundidades de borrado) y después pasas a la memoria para instalar. Todo normal hasta que esta pantalla salió a dar batalla:

:(




Lo intenté de nuevo, después reinicié y seguía por que me puse a investigar y en alguna parte de la web recomendaban verificar la fecha de la máquina, que podría estar mal porque después de todo ya habías borrado la información. Intenté tal opción pero no me funcionó.

La opción sugerida es abrir la terminal y escribir date, esto te mostrará la fecha y verás si es eso o no. Leí que le funcionó a muchos pero cuando yo verifiqué la fecha de mi máquina sólo estaba atrasada un minuto, pero pensando lo preciso que este tipo de cosas deben ser pues lo cambié pero NO FUNCIONÓ. Ya estaba medio molesto pues son varias veces que la Mac me da algo de problemas.

¿Por qué? Yo que vengo de Windows, yo que invertí mucho en esta máquina, aaaaah, supongo que así es la vida.

Entonces procedí a encender la máquina sin memoria boot de esta manera te pedirá que la conectes a internet para que veas que se puede hacer. Se muestra esta imagen y se tarda unos 40 min para pasar a las herramientas:




Después de cargar se muestra una pantalla donde puedes restaurar de TimeMachine o Instalar el OS por defecto (y otras opciones) que en mi caso es el tan prestigiado Mountain Lion, WTH, volvamos a la prehistoria :P Nunca usé ese sistema pues ya existía Mavericks por lo que rápido actualicé.

Conecté el Ethernet porque según es más rápido,  elegí la opción de Instalar OS Mountain Lion pero dado que la velocidad de mi Internet es malísima me daba un total de 22 horas por lo que decidí intentar de nuevo la idea de la USB boot. 

Intenté este rollo de #TransMac pero mi PC nunca reconoció mi USB por el formato que le da la MAC al cargar el OS para el boot así que primero tenía que formatearla desde la utilidad de disco que sí te da al cargar desde la USB pero obvio que no se puede formatear mientras está montada y cargando desde ella así que se me ocurrió una idea.

Recordando que El Capitan salió en el 2015 se me ocurrió que la validación podría dar problemas por la fecha actual por lo que puse una fecha del 2015, algo como 01012015XXXXXXX, enero 1 del 2015 y la hora que son las X (o algo así jeje) y vualá, funcionó :) "Procedió a proceder"

Así es como comenzó a instalar y la verdad es que esta pantalla también me daba miedo pues en alguna otra ocasión no pasó de 21 minutos y daba un error de disco pero gracias a Dios siguió sin novedad:








Así es cómo todo funcionó bien y afortunadamente les escribo esto desde la Macbook en cuestión y sólo me queda ver qué pasará con el tiempo.

 En concreto

Cambien la fecha de su máquina a una fecha anterior o próxima a la versión del DMG con el que cuentan y que la fuerza los acompañe.

Sus comentarios son bienvenidos, quizás conocen una mejor manera y si te salvé la vida, buy me a coffe ;)


jueves, 3 de marzo de 2016

Textbox que sólo permita números C# WPF

Es común necesitar un Textbox que sólo permita la inserción de números, por ejemplo si se trata de una caja que contenga un número de teléfono o una cantidad con punto decimal.

Para este caso lo que puedes hace es recorrer el string de lo que se escribió y comparar los caracteres o aplicar el evento KeyDown, el cual ni siquiera permite que se escriba todo lo ajeno a lo que definas. Este código no deja escribir más que números:

 private void tbMovil_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
        {
            if (e.Key >= Key.D0 && e.Key <= Key.D9 || e.Key >= Key.NumPad0 && e.Key <= Key.NumPad9)
                e.Handled = false;
            else
                e.Handled = true;
        }


Y éste te deja escribir la coma "," porque en mi caso  es el separador decimal.



private void tbPrecio_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
        {
            if (e.Key >= Key.D0 && e.Key <= Key.D9 || e.Key >= Key.NumPad0 && e.Key <= Key.NumPad9)
                e.Handled = false;
            else if (e.Key == Key.OemComma)
                e.Handled = false;
            else
                e.Handled = true;
        }

Si estás seguro que es el punto usa este. Además, está validado que sólo deje introducir sólo un punto decimal ( "." = Key.OemPeriod).
La variable puntos es global.  

private void tbPrecio_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
        {
           if (e.Key >= Key.D0 && e.Key <= Key.D9 || e.Key >= Key.NumPad0 && e.Key <= Key.NumPad9)
                e.Handled = false;
            else if (e.Key == Key.OemPeriod)
            {
                if (puntos == 0)
                {
                    e.Handled = false;
                    puntos = 1;
                }
                else
                {
                    e.Handled = true;
                }
            }
            else
                e.Handled = true;
        }

Cómo saber si debo usar la coma "," o el punto "." como separador decimal por código

Yo sabía que era la coma porque el sistema es para inglés gringo y por lo tanto en el código anterior sólo deja escribir la coma y no el punto pero podrías saber cuál se usa en la región que sea en la que se use el sistema con:
string decimalSeparator = CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator;
string numero = tbPrecio.Text.TrimEnd(' '); ;
                numero.Replace(".",decimalseparator); //Aquí se remplaza el punto por el separator que está en uso según la región
Por supuesto debes tener cuidado en caso de que lo vayas a guardar en SQL ya que igual debes usar el formato que SQL pide según lo hayas definido.

martes, 1 de marzo de 2016

Convertir una lista de objetos en una lista de strings C#

Me encontraba plácidamente programando en C# cuando de repente me topé con que mi lista de objetos definidos por mí (que contenían string, decimal, int y etc.) tendría que ser exportado en un archivo .txt, por lo que me topé con la primera pregunta:

Cómo exportar una lista a un archivo .txt

Bueno, el código en C# es
 
System.IO.File.WriteAllLines(ruta, lista);

El asunto se torna complicado cuando notas que a lista debe ser en "string" por lo que primero debes convertir tu lista de objetos de algún tipo en una lista de strings. Yo hice algo como esto:
 

 List str = new List();

    foreach(TipoObjeto obj in Lista )
    {
       str.Add(obj.Nombre + " " + obj.Apellido + " " + obj.Sexo + obj.Correo + " " + obj.Monto.ToString());
    }

    System.IO.File.WriteAllLines(ruta, str);

ruta puede ser algo como @"C:\Carpeta\texto.txt
Lista es la lista de objetos con varios tipos en sus propiedades

De esta manera te aseguras que cada propiedad de tu objeto se convierta en string (que en el ejemplo anterior los que ya son string omiten la conversión .ToString(), en el caso del monto que es un decimal tuve que aplicarlo) y como recorre cada propiedad a la vez que las convierte lo que hago es concatenarlas y agregarlas a str. Encontré otras formas que o medio funcionaban, era más laboriosas o que la conversión devolvía textos raros así que hice esta y pues funcionó. Si conoces una mejor puedes compartirla.

Evitar abrir la misma ventana más de una vez WPF C#

En un proyecto de WPF con C# para abrir una ventana secundaria usamos algo como:
Ventana2 v2 = new Ventana2();
v2.Show();

Suponiendo que esto se ejecute cada vez que haces clic en un botón, cada que des ese clic se abrirá la misma ventana. Para evitar eso, agrega esta validación a tu código:
           if (!Application.Current.Windows.OfType().Any())
           {
             Ventana2 v2 = new Ventana2();
             v2.Show();
           }
Lo que hace es buscar si dicha ventana ya ha sido instanciada, de ser así no la abre y es como evitamos tener la misma ventana abierta muchas veces. Por el contrario si no ha sido abierta abre la ventana que especifiques.
Espero que les haya sido útil.

lunes, 15 de febrero de 2016

¿Qué lenguaje de programación debería aprender?

¿Qué lenguaje de programación debería aprender?

Es posible que estás empezando en el maravilloso mundo de la programación pero te has dado cuenta de todos los lenguajes y las plataformas existentes por lo que no tienes idea dónde comenzar.

Si este es tu caso, déjame contarte un poco de mí.

Cuando entré a la medio superior  (nivel preparatoria pues) me enlisté a la especialidad "Técnico programador" aun cuando no tenía ni computadora pero los pocos encuentros que tuve con una en la secundaria me enamoraron de la computación por lo que decidí tener algo que ver con ella  y en especial con la programación.   

Según el plan de estudios teníamos que ver muchos lenguajes por lo que comenzó la travesía.

La verdad es que no recuerdo todos pero el primero fue Basic, que de verdad fue muy básico. Debido a que era de alto nivel era muy entendible y qué bueno pues comenzábamos a programar y fue aquí cuando todas las estructuras de control tomaron mucho sentido fuera del papel pues antes de pasar a programar nos llenaron de la teoría pertinente. Mi cerebro comenzaba a estructurarse.

Le secundó Visual Fox Pro que ya tenía un aspecto un tanto diferente pues no era el típico fondo azul o negro de la típica "consola" pero que al fin al cabo era basicamente lo miso (salvo la sintaxis claro) pero recuerdo que en este me salían mejor las cosas. 

A continuación vino Pascal, lenguaje un tanto más estructurado que me gustó mucho por sus "procedures" que serían un equivalente a las funciones del C/C++ pues podían escribirse por separado pero invocarlas cuando así lo necesitaras. En este me atreví a meterme más y logré hacer incluso conexiones a bases de datos que eran archivos generados y gestionados por este mismo lenguaje por lo que no eran tanto como los conocemos ahora. 

Después conocí al "amor de mi vida" el hermoso lenguaje C.
Como muchos saben, en este lenguaje la programación es más estructurada y se homologa la programación orientada a objetos pues no lo es en sí. Aquí mi cerebro se estructuró mucho, la forma en cómo te hace pensar y la lógica que requiere hace que tu cerebro empiece a ser más de "programador" por lo completo que era el lenguaje en ese momento. Las estructuras de control se hacían muy lógicas y entendibles  y algo que ayuda mucho a ver y entender el código eran dos cosas que para muchos son unos dolores de cabeza. Las llaves {} y el no tan querido punto y coma ;
A mí en lo personal me gustó mucho, me adapté muy fácil y vi que el uso de librerías podían hacerlo cada vez mejor por lo que difícilmente podría preferir otro, o al menos eso pensé muy poco pues pronto conocí su evolución: El C++. Este lenguaje se hizo mi fiel amigo por muchos años pues aprendí mucho de él una vez entrando a la universidad. Éste ya es más orientado a objetos o también conocido como híbrido por contar con programación estructurada y orientada a objetos.
Hacer el cambio "structs" a "class" no fue tan complicado aunque sí me tuvieron que llenar de ejemplos y el manejo de punteros y los tipos de clases fue algo en lo que tuve que centrarme mucho pero una vez habiendo abundado en ello super el gran potencial que tiene y por  qué sigue siendo tan usado en la actualidad. 

Ya a finales de la preparatoria terminamos conociendo al Visual Basic  en Visual Studio 6 que lo novedoso era el uso de la interfaz gráfica más en forma con etiquetas, botones  y cajas de texto. Tenía una sintaxis similar salvo la acepción de las llaves y puntos y comas y la manera en cómo se declaraban variables y constantes pero básicamente el flujo y la estructura del código era muy similar. Lo que vino a hacerlo muy interesante fue la integración con Acces como base de datos lo cual llevaba a otro nivel el desarrollo pues se podía hacer cosas más interesantes.

En algún punto de la preparatoria estudié HTML por mi cuenta, que no es lenguaje en su totalidad pero que fue y es útil para muchas cosas y con lo que libré varios proyectos escolares. 

Y como ya lo mencioné, al entrar a la universidad retomé el C++ y todas sus capacidades que eran muchas. Conocí otras variantes como el Visual C++ y su evolución; el C#, lenguaje que actualmente más uso y a decir verdad es mi preferido y me actualicé en lo nuevo de Visual Basic. También fue aquí donde conocí mejor las bases de datos con MySQL y SQL Server, cosas que a decir verdad no son mi hit pero que debo aprender a amar :/

Ya en el ámbito laboral conocí otros como el PHP, JQuery, XAML, Javascript entre otros pero estos son los más relevantes y más usados en el desarrollo web.

Y, volviendo a la premisa de qué lenguaje o lenguajes debería aprender con toda certeza, bajo mi experiencia diría que C++. Este lenguaje es el "abuelo" de muchos actuales y muy utilizados (sé que debería ser el C pero el C++ maneja mejor el concepto de POO). Dado que muchos heredaron su sintaxis y su estructura, si eres bueno en C++ será más fácil aprender de sus "nietos" pues tan sólo con conocer dicho lenguaje ya podrías entender Java(incluyendo por obvias razones el lenguaje para Android), Javascript, C#, PHP, JQuery y Objective C (iOS) pero sobre todo tu lógica se hará fuerte y otros lenguajes también serían fáciles de aprender. Además, el C++ es muy usado para la programación de microcontroladores y microprocesadores, me tocó programar algunos de estos a lo largo de la carrera.
Aquí no debemos descartar al HTML que podría ayudarte a aprender XML, XAML y CSS, pero esto depende de que tipo de desarrollador quisieras ser (web, escritorio, móvil) pero sin duda alguna son de mucha utilidad conocerlos, pues es casi seguro que los vas a necesitar.  

Así que si estás en la incógnita de con qué lenguaje empezar esa es mi recomendación. Si es por hobbie pues no te hará mal intentarlo con calma y cuando puedas intentar con otros pero si tú lo que quieres que te hable en plata, empieza con Java que es de los más pagados seguidos de los .Net y los scripts y no olvides las bases de datos, nunca te vas a deshacer de ellas.

Lo que si te recomendaría es que siempre elijas populares pues su popularidad asegura que sigan siendo opción en el mercado por mucho tiempo y que lo que aprendas no se discontinue tan rápido. También elige los que tienen mucha documentación y mucho soporte pues lo vas a necesitar. Atrévete a aprender otros y si trabajas por tu cuenta o pretendes hacerlo esto te va a abrir tu panorama ampliamente.

Puedes visitar a "San Google" y preguntarle cuáles son los lenguajes más utilizados y los mejor pagados para que te des una idea del mundo real. 

Espero que esto ta hay sido de utilidad y si tienes algún comentario no dudes en compartirlo.

El extraño caso de Samuel Boings

Hola soy Sam y esta es mi historia

Soy Ingeniero en comunicaciones y Electrónica, egresado de la Escuela Superior de Ingeniería Mecánica y Eléctrica (ESIME Zacatenco) del Instituto Politécnico Nacional (IPN).

Dado que soy técnico programador elegí la especialidad de computación por lo que ahora me dedico al desarrollo de software. Me gusta la programación pero creo que no soy muy bien correspondido.

El nombre surgió de mis anécdotas en mi trabajo anterior. Estaba en una empresa muy pequeña. Era el tercer programador de tres contratados. El empleo lo conseguí gracias a la recomendación de un amigo y ex compañero de clase. A este amigo en realidad le debo muchas cosas, desde la oportunidad de entrar a ese trabajo hasta estar actualizado en todos los asuntos relacionados a la programación y en especial a lo referente al .Net.

Todo surgió debido a que como él era mi jefe de proyecto, me proporcionaba todas las configuraciones y archivos que yo tenía que manipular y los proyectos que tenía que completar y escalar pero no siempre fue tan sencillo. 

Por alguna extraña razón, las cosas no funcionaban de la misma manera como la hacían en su computadora. Aparentemente todo estaba de la misma manera; configuraciones, conexiones, actualizaciones y software eran iguales por lo que no había mucho dónde corregir u homologar. No me salvé de formatear, de reinstalar, de actualizar y todas esas cosas que se hacen para invocar a los dioses que acaban con los bugs y otras amenazas de los programadores. Después de muchos intentos y de poner en práctica esa grandiosa cualidad que las vacantes de programador piden (Tolerancia a la frustración) lográbamos resolver los detalles, siempre acompañado de la gran frase de mi colega "Samuel Boings, las computadoras no te quieren".

Por si se lo preguntan, nadie sabe de dónde salió el mote de "Boings" pero suena bien :P  

En realidad es muy difícil identificad cuáles realmente fueron los problemas que producían tantas fallas pero afortunadamente siempre encontré una solución a cada detalle por lo que tomé la decisión de documentarlas. Muchas de ellas son ridículas o al menos resueltas aparentan serlo pero mientras no sabíamos qué era lo que pasaba parecían ser el fin del mundo. 

Para muchos programadores expertos de verdad son ridículas pero para los no expertos podrían salvarles la vida y como tal vez haya más inexpertos que expertos creo que podrían ser de mucha utilidad. 

Me gusta tomar cursos de You Tube de programación en varios lenguajes por lo que podría hacer entradas de varias cosas pero en general prefiero el .Net por lo que quizás haya más de las tecnologías de Microsoft que de otras.

Espero poder ayudar y si no, al menos que veas que no eres el único al que le pasan "tantas cosas raras".