Xwork's Blog

The lord is waiting to take your hand.

Visual Studio 2010 express - Descarga

No hay comentarios.
Hola de nuevo a todos, el día de hoy vamos a ver cómo conseguir visual studio 2010 express.
Hace algunos días en la clásica batalla del hombre contra windows 10, mi pc resultó con fallas por lo que me vi obligado a reiniciarla y restablecerla en su modo inicial. Comencé a instalar todos los programas que requiero y cuando llego la hora de instalar visual c# (que en su mayoría ya solo es para programas de ocio), decidí; en lugar de buscar mi unidad de DVD e instalarla; descargar el instalador desde la web.

Comencé a buscar y no encontré resultados útiles, la mayoría de descargas estaban en inglés y si bien no es problema, opté por buscar una versión en español. Después de buscar por un buen rato, no obtuve resultados. Lo cual me llevo a pensar "¿Que pasa si comparto la imagen que yo tengo?" y pues, eso hice.

Primero que nada, hay que recordar algunas de las primicias de este blog:

  • Aquí no promovemos la piratería.
  • Somos respetuosos de las ideas, por lo general tratatremos de crear nuestro propio código/programa.
  • Si usamos software de otros, en la medida de lo posible le daremos el crédito al autor.
Todo lo anterior es para resaltar que si en algún momento Microsoft dice que elimine el enlace, lo haré. Además, al instalar cualquiera de los programas, es necesario registrarlos. Si en algún momento ya no puedes obtener un registro, puedes usar las versiones más recientes de visual studio, actualmente hay una version gratuita.
Si venias por un número de registro estás en el lugar equivocado, ve al sitio de Microsoft, aun es posible registrar estas versiones.
Y bien , el vinculo para descargar el iso completo en español de visual studio express 2010 está en GDrive. Recuerda que Visual Studio 2010 es gratuito siempre y cuando lo registres, una vez que tienes tu número de activación guárdalo y funcionará cada vez que lo requieras. La semana que viene continuamos con más de las expresiones regulares.

Los leo luego.

No hay comentarios. :

Publicar un comentario

Vamos a programar #64 - Expresiones regulares - Ejemplos (pt. 1).

No hay comentarios.
Hola de nuevo a todos, el día de hoy vamos a continuar con las expresiones regulares.


En el post anterior vimos cuales son los caracteres que sirven para crear los patrones para las expresiones regulares, el día de hoy; y antes de pasar al código de VEncoder, vamos a ver cómo se usan con algunos ejemplos.
En esta ocasión voy a usar Notepad++ ya que soporta la búsqueda en el texto mediante expresiones regulares y los patrones no cambian tanto entre las que usemos aquí y las que usaremos en el código de C# (hay algunos cambios pero son mínimos). Para las palabras de prueba, copie la lista de las 1000 palabras básicas de Wikcionario, solo las pase a notepad++, pero puedes descargarlas de mi dropbox en un archivo de texto plano.

Con todo lo anterior, vamos a ver ejemplos. Supongamos que de la lista de palabras, solo queremos  buscar aquellas que comiencen con la letra "a". Para eso podemos crear un patrón cómo el que sigue:

\ba\w+\b

La expresión anterior buscará solo las palabras completas que comiencen con la letra "a", al buscar el patrón anterior en notepad++ y contar los resultados, tendremos algo cómo lo que sigue:

El patrón funciona de la siguiente manera:

  • \b - hace la búsqueda de "finales de palabra", puede ser puntos, nuevas lineas o cualquier símbolo que no se una letra.
  • a - es la letra a.
  • \w+ - indica que se vale cualquier carácter, el símbolo + indica que se puede repetir varias veces (no necesariamente la misma letra, sino el valor de carácter).
  • \b - hace la búsqueda de "finales de palabra", puede ser puntos, nuevas lineas o cualquier símbolo que no se una letra.
Cabe mencionar que solo se buscaran las palabras que exactamente comiencen con la letra "a" por lo que si en la lista están las palabras: Aburrido y aburrido; solamente se contará aburrido. Las expresiones regulares son sensibles a mayúsculas y minúsculas (dependiendo del motor de las expresiones regulares, se puede establecer un flag para ignorarlo, pero siempre es recomendable crear un patrón que sea preciso).

Ahora supongamos que ademas de que queremos buscar las palabras que empiezan con "a", queremos que solo cuente aquellas que también terminan con la letra "n". Podemos crear un patrón cómo el que sigue:

\ba\w+n\b

Cómo podrás ver  simplemente agregamos justo antes de "\b" una letra "n", al ejecutar la búsqueda en notepad++, veremos algo cómo lo que sigue:

En el idioma español, es muy poco común oír palabras con las letras x,y y z. Supongamos que queremos buscar todas las palabras que incluyan esas letras; podemos crear un patrón cómo el que sigue:

\b\w+[xyz]\w+\b

Al implementarlo, verás que palabras cómo arroz o zanahoria no las cuenta, esto se debe a que "\w+" indica que debe de haber alguna letra antes Y después de cualquiera de las letras que esta en el grupo (X, Y y Z) , podemos tratar de arreglarlo con la siguiente:

\b[xyz]\b

Pero lejos de acercarnos al resultado, lo empeora ya que el patrón anterior solo buscara exactamente cada letra que este en medio de dos corchetes, espacios en blanco o cualquier cosa que indique final de palabra.


 Para poder plantear un poco mejor que es lo que queremos buscar, podemos plantearlo de la siguiente manera: "busca palabras que contengan las letras X, Y o Z, sea al inicio o en medio o al final de la palabra". Aquí la clave es el comparador "o" en las expresiones regulares, hay patrones que sirven cómo un "or" lógico en programación, eso quiere decir que podemos definir mas de un patron de busqueda simultaneo. Ahora probemos con la siguiente expresión regular:

\b(\w+[xyz]|\w+[xyz]\w+|[xyz]\w+)\b

Al ejecutarlo veremos que palabras cómo "yegua" y "arroz" son encontradas. La explicación del patrón anterior es simple:
  • ( -inicio del grupo
    • \b - hace la búsqueda de "finales de palabra", puede ser puntos, nuevas lineas o cualquier símbolo que no se una letra.
    • \w+[xyz] - Buscará las palabras que tengan al final x, y o z.
    • | - Alternación, buscará el patrón que este antes o después.
    • \w+[xyz]\w+ - Buscará las palabras que tengan entre otras las letras x, y o z
    • | - Alternación, buscará el patrón que este antes o después.
    • [xyz]\w+ - Buscará las palabras que empiecen con x, y o z y que tengan más letras despues de estas.
    • \b - hace la búsqueda de "finales de palabra", puede ser puntos, nuevas lineas o cualquier símbolo que no se una letra.
  • ) - fin del grupo.
Con lo anterior, tendremos cómo resultado:

Otro caso es común, es buscar palabras con determinado número de letras, para este caso hay varias formas de hacerlo (incluso para la mayoría de los casos siempre hay mas de una forma de lograr el resultado). Supongamos que queremos listar todas las palabras que contienen exactamente 15 letras para eso disponemos de los siguiente patrones:

\b\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\b

o el siguiente

\b\w{15}\b

El segundo, es el mas optimo, hay que recordar que cuando se usan los corchetes, buscará de manera repetida el patrón que le antecede, el resultado:
Pero ademas se puede usar de tres maneras diferentes, la primera es la anterior, ahora supongamos para la segunda forma que queremos buscar todas las palabras que tengan diez o mas letras, podemos crear un patrón cómo el que sigue:

\b\w{10,}\b

El primer número indica que se deben de repetir en al menos diez veces el patron "\w", cómo no se indica el número maximo para las repeticiones, buscará todas las palabras sin importar el número de letras (a partir de 10). Al ejecutar la búsqueda, veremos algo cómo lo que sigue:

Ahora supongamos que solo queremos buscar las palabras que tengan de tres a cinco letras, podemos crear un patrón así:

\b\w{3,5}\b

Cuando usamos dos números entre los corchetes, indicaremos que queremos que busque tantas veces cómo el primer dígito lo indica, el patrón que le precede, pero ademas solo lo hará hasta el parámetro superior, en este caso solo se buscaran las palabras que contengan de tres a cinco letras, otro ejemplo de este, seria buscar palabras que tengan la misma letra o silaba repetida.

(co){2}

El ejemplo anterior solo encontrará la palabra cocodrilo, ya que se repite la silaba "co" dos veces.

Y bien, por ahora es todo, en el siguiente post continuaremos con mas ejemplos y después pasaremos a la parte que tiene que ver con VEncoder.

Los leo luego

No hay comentarios. :

Publicar un comentario

Learning Machine #13 - Expresiones regulares.

No hay comentarios.
Hola de nuevo a todos, el día de hoy veremos un poco acerca de las expresiones regulares. Imagina que haces alguna clase de programa que sirve de "GUI" para ffmpeg, haces una interfaz bonita y haces los controles para funciones que suenan genial... pero nunca implementaste.


Hace algunos años publiqué un programa llamado VEncoder 2, que en su tiempo funcionó, pero poco despues se volvio obsoleto debido a que ffmpeg sufrió cambios y por lo tanto VEncoder paso a ser obsoleto.

Para solucionar eso, decidí que ya era hora de empezar a actualizarlo y tratar de hacerlo a "prueba de tiempo", pero lo haré poco a poco.

Una de las funciones que estaban planeadas desde el inicio, era la de poder escribir a mano algunos parámetros adicionales o simplemente sobre-escribir los pararmetros y sus valores. Para poder realizar ese trabajo, debemos de encontrar una forma de encontrar exactamente cada valor, es decir si queremos cambiar la resolución, debemos de encontrar la forma de saber si ya hay o no este parámetro. En c# hay varias formas de lograrlo, pero creo que la mas adecuada es mediante el uso de expresiones regulares.

Expresiones regulares

Antes que nada, veamos que son las expresiones regulares.

En cómputo teórico y teoría de lenguajes formales una expresión regular, también conocida como regex,​ es una secuencia de caracteres que forma un patrón de búsqueda, principalmente utilizada para la búsqueda de patrones de cadenas de caracteres u operaciones de sustituciones. Por ejemplo, el grupo formado por las cadenas Handel, Händel y Haendel se describe con el patrón "H(a|ä|ae)ndel". La mayoría de las formalizaciones proporcionan los siguientes constructores: una expresión regular es una forma de representar los lenguajes regulares (finitos o infinitos) y se construye utilizando caracteres del alfabeto sobre el cual se define el lenguaje. Wikipedia/expresionRegular.
 Entonces para definir un patrón, disponemos de las siguientes:

  • Clases de caracteres
    • . - Cualquier carácter (menos el de nueva linea).
    • \w\d\s - palabra, dígito, espacio en blanco.
    • \W\D\S - NO palabra, NO dígito, No espacio en blanco.
    • [abc] - cualquier letra dentro del corchete.
    • [^abc] - Ninguna de las letras dentro del corchete.
    • [a-g] - carácter entre "a" y "g".
  • Anclas
    • ^abc$ - inicio/ fin de la palabra.
    • \b\B - final/NO final.
  • Agrupación.
    • (abc) - Agrupación.
    • \1 - referencia hacia atrás.
    • (?:abc) omitir grupo.
    • (?=abc) busqueda hacia adelante.
    • (?!abc) busqueda haci atras.
  • Alternación
    • a*a+a? - 0 o mas, 1 o mas, 0 o 1.
    • a{5}a{2,} - Exactamente 5,2 o mas.
    • a{1,3} - entre uno y tres.
    • a+?a{2,}? - Buscar el menor posible.
    • ab|cd - busca ab o cd.
Y bien, por ahora es todo, en el siguiente post veremos cómo hacer uso de las expresiones regulares en C# y ademas implementaremos la función que describi al inicio.

Los leo luego.

No hay comentarios. :

Publicar un comentario

Vamos a platicar #9 - ¿Eres realmente tan listo?

2 comentarios
Hola de nuevo a todos, el día de hoy vamos a platicar un poco.
Hace poco mientras platicaba con algunos amigos, uno de ellos expresó su malestar porque era incapaz de resolver el cubo de Rubik. Yo por motivos de la facultad me di a la tarea de aprender a armarlo para poder desarrollar algún algoritmo para que después la computadora lo resolviera. En su momento fallé de manera tan tremenda, que por un tiempo me obsesioné con resolverlo, poco tiempo después logre armarlo por mi cuenta, pero no de manera practica; por suerte mientras buscaba cosas relacionadas al cubo de Rubik, encontré algunos "métodos" para poder resolverlo de manera más sencilla (solo cómo dato; 20 es el número de dios para el cubo Rubik).

Todo bien hasta ahí, pero mi amigo me cuestiono, "si aprender a resolver el cubo usando los métodos que ya alguien creo, ¿igual cuenta?", lo que me llevo a pensar, hasta que punto es valido decir que aprendimos algo, si lo hicimos en base a los descubrimientos de alguien mas. Antes de que alguien me diga "esa es precisamente la base del progreso"; eso ya lo se, solo que hasta que punto es válido decir aprendí/entendí algo.

Esto me ha llevado a cuestionarme también a mi. hace poco jugué ajedrez contra un niño de seis años, a leguas se veía que es un prodigio; me ganó de manera tan avasallante que me hizo preguntarme que tan bueno soy para el ajedrez.

Desde ahí empecé a jugar mas seguido y poco a poco me di cuenta que probablemente no sea lo mio y aquí es donde todo se jode porque me crea un conflicto. Me gusta jugar al ajedrez, he empezado a leer los fundamentos, pero entre mas trato de aplicar la teoría, peor pierdo, cuando mi amigo me expreso su malestar por el cubo de Rubik, fue precisamente un día en que jugamos un mini-torneo (en el cual perdí a la primera) y me quejé, dije que era un asco, pero el dijo lo del cubo de Rubik solo para hacer la comparación.

Si bien yo le respondí que no viene al caso, el ajedrez es estrategia pura y me funcionaba mejor cuando no sabia nada a cuando intenté aprender algo, cosa que en el cubo de Rubik no aplica, una vez aprendiendo algún método, eventualmente llegará el momento en que lo harás de manera automática y si lo haces en el ajedrez, probablemente funcione los primero cuatro o cinco movimientos, pero después ya no.

El maestro @morsa dijo que hay que estudiar años para poder siquiera considerarse un novato, pero tras perder de forma tan miserable, me he dado cuenta que probablemente no se lo mio.

Y bien por ahora es todo, en el siguiente post vamos a comenzar con la programación. Si quieres jugar contra mi al ajedrez, suelo jugar por la noche en la pagina de CHESS.COM.

Los leo luego.

2 comentarios :

Publicar un comentario