Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Eleкtro

#4371
Citarmmm, no se a que te refieres  :¬¬. Podrías decir, entorno de desarrollo integrado (IDE).

No entiendo a que vino ese comentario. Si tenemos que llamar a las cosas por su nombre completo entonces preferiblemente hagámoslo en el idioma universal de la programación: IDE a.k.a. Integrated Development Environment :P.




Cita de: Lekim en 12 Octubre 2015, 19:49 PMNo se como se actualiza. Ni siquiera sabía que se podía. Si doy a 'Buscar actualizaciones' me envía a Windows Update.

Lo de "actualizar" era solamente una forma de expresarse para sugerirte que deberías renovar el producto antiguo que estás utilizando.

Me refiero a que descargues una versión más reciente de VS, más que nada para sacarle beneficio a las novedades del desarrollo de las características de dicha IDE, así como de los beneficios de las nuevas versiones de VB/C# claro está (VB 14 y/o C# 6).

Puedes mantener ambas versiones de VS instaladas en paralelo, sin problemas, aunque lo ideal sería reemplazar lo nuevo por lo antiguo ...a menos que tengas algún inconveniente en lo relacionado a la compatibilidad con archivos de soluciones de VS2010.

De todas formas, era solo una sugerencia.




Cita de: Lekim en 12 Octubre 2015, 19:49 PMNo se como se usa

No dispongo de VS2010 para testearlo, supuestamente los archivos con extensión .vstheme son legibles/cargables por la extensión que mencioné para VS2010.

Lo que si puedo decirte es que los esquemas de colores contenidos en los archivos de configuración de usuario de Visual Studio (archivo.vssettings) los puedes importar accediendo al menú de la barra de herramientas o ToolBar de VS, en Tools > Import and export settings > º Import selected environment settings (e importar solamente los colores para no modificar por error otras propiedades personalizables del entorno).

Saludos
#4372
¿Y por qué simplemente no usas el thema visual oscuro de Visual Studio?, de esa manera tendrias un entorno oscuro igual que en el escritorio. Aunque realmente no se si el theme oscuro está integrado en el VS2010, si no recuerdo mal era a partir del VS2012.

Supongamos que no me equivoco y el theme visual oscuro no está integrado en VS2010, entonces la priimera y obvia solución (y también la más óptima) sería actualizar tu IDE, ¡qué ya es hora!.

De todas formas otra solución sería la siguiente:

1. Instala esta extension para diseñar tu propio tema visual:
   ➢ Visual Studio Color Theme Editor

   ...O descarga este theme:
   ➢ https://raw.githubusercontent.com/peteristhegreat/DarkVS2010Theme/master/Expression.vstheme



2. Y en esta página puedes encontrar esquemas de colores para Visual Studio:
   ➢ http://studiostyl.es/

Saludos
#4373
Hola!

Vengo con la esperanza de que alguien me pueda decir como se llaman los temas originales de los samples de guitarra eléctrica que han usado para producir estos remixes de aquí abajo.




Zyklon - Chemical Waste
Año de lanzamiento 2015.

[youtube=640,360]https://www.youtube.com/watch?v=D3KKyZgdN-E[/youtube]
( el sample de la guitarra se puede escuchar bien en el minuto 01:25 )




Darren R. a.k.a. George Centeno - Metalhead
Año de lanzamiento 2000.

[youtube=640,360]https://www.youtube.com/watch?v=kKTx2FdQktk[/youtube]
( el sample de la guitarra se puede escuchar bien en el minuto 01:04 )

EDITO:
ENCONTRADO!
NO ME LO PUEDO CREER. Más de una década buscando y lo acabo de descubrir mientras escribia este post, jajaja. Bueno, pues aquí os dejo el temazo original, de Metallica.

Metallica - Seek & Destroy
[youtube=640,360]https://www.youtube.com/watch?t=51&v=J-tvJcTPxHc[/youtube]

Gracias a esta página:
http://www.whosampled.com/sample/330481/Darren-R.-Metalhead-Metallica-Seek-%26-Destroy/




Dynamite Headdy - Cabezón Mix
Año de lanzamiento 1995.

[youtube=640,360]https://www.youtube.com/watch?v=xAjRNGb7UDI[/youtube]
( el sample de la guitarra se puede escuchar bien en el minuto 03:43 )

Nótese que el sample se parece muchísimo al sample del primer tema de arriba, Zyklon - Chemical Waste, pero creo que no es el mismo, en aquél suena alguna nota más ...creo yo.

Nótese también que tal vez el sample de este tema en realidad no pertenezca a ninguna banda de Heavy, no estoy seguro, tal vez sea la OST/BGM de algún juego de la Megadrive incluyendo la BGM del Dynamite Headdy, que no la he podido conseguir para comprobarlo.

PD: Todavía conservo el cassete xD.




Saludos!
#4374
Introducción al problema




Microsoft nos ha acostumbrado toda la vida a que, si cierras una ventanita del explorer, la siguiente ventana que abras se posicionará en el mismito lugar que estaba, es decir, se supersposicionará encima de la otra ventana. Pues bien, esto ya no es así a partir de Windows 10.

Windows 10 ha cambiado su comportamiento estético en el sentido de que ahora TODAS las ventanas (e instancias) del explorador de Windows, se mostrarán en cascada.



"De acuerdo Elektro, ¿y que te ocurre con eso?", me ocurre que literálmente es un coñazo, es frustrante, algo insufrible, es lo más incómodo que este sistema operativo me ha echado a la cara.

¿A ustedes les da igual?, pues a mi no, no lo soporto, quiero que las malditas ventanas del Explorer se posicionen en el mismo lugar que las abrí por última vez, como ha sido "siempre" hasta Windows 8.1 sin ir más lejos, ahora no vengas a cambiarme mis hábitos, maldito de Windows 10.

Llámalo bug, problema de comportamiento, o estúpida decisión intencionada de diseño por parte de los tan inteligentes desarrolladores de la compañia Microsoft,
el caso es que este problema tiene un grave efecto negativo en la experiencia del usuario, por que, sin ir más lejos, resulta tecnicamente imposible mantener un orden u organización de las ventanas del Explorer.

Yo suelo tener varias ventanas abiertas, y como yo habrán miles de usuarios igual, estamos acostumbrados a posicionarlas en un lugar en concreto y que no se muevan de ahí al volverlas a abrir, pues bien, veamos a continuación una demonstración gráfica lo que ocurre con Windows 10...

Este video lo grabé para demostrar este problema llevado al extrema. Si no quieren ver el video lo resumiré, basicamente lo que hago es mover una ventana del Explorer a la esquina inferior derecha del area cliente del escritorio, seguidamente la cierro, y cuando la vuelvo a abrir, el "modo cascada" posiciona dicha ventana en la esquina superior izquierda. (tócate los...)

[youtube=960,540]http://www.youtube.com/watch?v=4uoFuVtqKdY[/youtube]





Resolución del problema ...¿dije resolución?




Personálmente he buscado y rebuscado en los lugares más recónditos de Internet, HE ESTADO EN TODAS LAS PÁGINAS DE TODA LA WORLD WIDE WEB, llegué hasta el quinto o el décimo nivel de la internet profunda o deep-web, y en mi aventura investigativa me topé con todo tipo de documentos secretos acerca de UFOs y unos juguetes chinos de última generación que se van a poner de moda muy pronto, pero a pesar de todo mi esfuerzo invertido por lograr encontrar información sobre lo que realmente yo quería, no encontré mención alguna por parte de Microsoft respecto a este nuevo comportamiento de Windows 10, así que asumo que nadie me va a poder prestar ayudar n aquí ni en ningún sitio, por que no existe una solución oficial, y por no existir... no existe o yo no he encontrado ni un miserable comentario por parte de algún empleado de Microsoft.

Lo que si encontré en mi búsqueda fueron varios lugares donde se debate este problema, especiálmente en el post de este foro es donde más debate ha habido al respecto:
Remember window position? - TenForums

A falta de una solución oficial, ¿qué nos queda?, pues recurrir a alguna posible solución de terceros, asi es... recurrir a un programa en segundo plano que nos consuma recursos, etc. Algo que no deberíamos tener que hacer, pero es lo que hay.

Actualmente existe una pseudo-solución (y de hecho, la única que se pueda tomar en serio) en forma de aplicación en segundo plano, la app en cuestión se llama ShellFolderFix y se puede descargar aquí:
ShellFolderFix - Manage folder window positions/size . SevenForums

Lo que hace dicha aplicación es conservar o guardar la posición de las ventanas que vayamos cerrando (solo funciona con las ventanas del Explorer), para restaurar las ventanas en la última posición guardada cuando las volvamos a abrir.

Genial ...¿no?, pues no, no es tan genial...

...La llamo pseudo-solución por que más que ser un "fix" es todo lo opuesto según se mire, ya que la aplicación tiene un problema de comportamiento muy grave en un escenario básico de lo más normal, al navegar manuálmente por el árbol de directorios en el Explorer (haciendo click en las carpetas para navegar, vaya).

Lo que ocurre es que, la aplicación guarda las posiciones de las ventanas que vayamos cerrando cómo ya he mencionado, y para saber que coordenadas hacen referencia a que ventana entonces también debe guardar un dato adicional, la ruta de la barra de navegación de la ventana que se cerró. ¿Qué ocurre con esto?, pues que cuando estamos navegándo manual y comodamente en una instancia del Explorer, si accedemos a cualquier ventana que haya sido guardada por este programa ShellFolderFix , nuestra ventana actual se mmoverá a dicho lugar, y eso es sencillamente absurdo, es una locura, un comportamiento muy pero que muy estúpido cuyo desarrollador no ha descubierto o no ha sabido como hacerle frente.

Para preveniros, explicaré los pasos a reproducir que demuestran el problema del que les hablo:


  • 1. Crear un directorio con esta estructura: C:\Carpeta1\Carpeta2\Carpeta3
  • 2. Crear un acceso directo en el escritorio para 'Carpeta1', 'Carpeta2' y 'Carpeta3'.
  • 3. Abrir el acceso directo de 'Carpeta3', y mover la ventana a la esquina superior derecha y cerrar la ventana, para que se guarde su posición.
  • 4. Hacer lo mismo con el acceso directo de 'Carpeta2', pero esta vez moverla al centro de la pantalla y cerrarla.
  • 5. Hacer lo mismo con el acceso directo de 'Carpeta1', pero esta vez moverla a la esquina superior izquierda y cerrarla.
  • 6. Ahora, reabrir el acceso directo de 'Carpeta1', y en dicha ventana del Explorer, navegar manualmente haciendo click a 'C:\Carpeta1\Carpeta2'.

       En este punto, veremos que la ventana actual del Explorer se moverá indiscriminadamente al centro de la pantalla.
  • 7 Ahora, en la misma ventana del explorer, navegar manualmente haciendo click a 'C:\Carpeta1\Carpeta2\Carpeta3'.

       En este punto, veremos que la ventana actual del Explorer se moverá absurda e indiscriminadamente a la esquina superior derecha de la pantalla.
  • Fín.

Dicho esto, los usuarios de Windows 10 solo podemos hacer dos cosas, resignarnos a sufrir el problema de las ventanas en cascada por parte de Microsoft, o sufrir el problema de los reposicionamientos igual de incómodos por parte de ShellFolderFix.





¿Hay alguna alternativa que funcione correctamente?




La respuesta corta es: No.

A falta de una solución oficial ...que probable y desafortunadamente nunca la habrá, yo personálmente pienso que la única solución realmente eficiente, es decir, la que no implicaría ningún consumo de recursos adicional, sería parchear el código/instrucciones que esté encargado de posicionar las ventanas en modo cascada, ya sea el Explorer.exe o el archivo que sea, que no lo se todavía, tal vez lo único que hace el Explorer sea llamar a la función CascadeWindows de la WinAPI, pero aun no lo he comprobado. De todas formas no le deseo esa labor de ingeniería inverda a nadie, no podemos esperar que alguien se interese por este problema y lo sepa resolver de esa manera.

De todas formas, yo no me quedaré quejándome sin más, soy programador y me he propuesto resolver este problema de las ventanas en cascada por mis propios medios, aunque a simple vista le encuentro varias complicaciones para resolver el problema donde ShellFolderFix falla en la navegación manual, complicaciones en el sentido de que tal vez implicarían algun consumo en segundo plano y es lo que quiero evitar ...tener una app en segundo plano para resolver este problema, pero en fin, una solución para ello sería determinar si la ventana abierta tiene el botón de "subir nivel" o "ir atrás" activado, tan simple como eso, o directamente indagar en el "historial" de la barra de navegación para saber si existe más de una ruta, que viene siendo lo mismo.  

Por ahora intentaré contactar con el autor de ShellFolderFix para explicarle este bug y la manera en la que lo puede solucionar (la app está desarrollada en Visual C++, así que lo podría resolver de manera sencilla mediante Windows UI Automation), o que me proporcione acceso al código fuente y poder implementar dicho fix, de lo contrario me tocará desarrollarlo todo desde Cero, aunque todavía no puedo plantearme nada ya que no tengo Windows 10 instalado como sistema operativo principal para poder testear. Veremos como acaba esto.

Un saludo!
#4375
@Noaptebuna

Así es como lo veo yo:

Tienes más de 16 años, probablemente más de 20, un tio hecho y derecho que debe saber lo que quiere y con quien lo quiere.

Has estado un tiempo indefinido saliendo con una chica, me imagino que hablamos de muchos meses o varios años, con una chica que durante vuestra relación JAMÁS ha sido cariñosa y/o romántica contigo (que hayas aguantado aunque sean 2 semanas con una chica así ya sería para concerderte un premio).

La chica, por algún motivo que desconocemos, un día decide recompensar a su pareja, es decir, a ti, con los mismos cariños que tu le entregabas diariamente a ella (ya era hora de que lo hiciera... ¿no?), pero tu te tomaste a broma esa situación (y con razón, cualquier habría hecho lo mismo, si podemos decir que resulta "increible") y ella se enfadó, no solamente volvió a ser la misma tia fria y seria, sino que encima se enfada por una broma cariñosa y sin maldad, y acaba dejándote por ese motivo u os acabais dejando mutuamente me da igual, pero por esa broma.




Despues de haber leido esto, lo primero que me pregunto es: ¿realmente esa chica te quiso?. Solamente una descerebrada sin remordimientos sería capaz de dejar a su pareja por una broma cariñosa sobre su personalidad (es como si me deja una chica por llamarla "idiota" o "insensible" con cariño), y encima a los pocos días de romper la relación la chica estar como si nada, apoyando a su ex pareja osea a ti para que busques el amor de tu vida en otra parte lejos de ella ...en serio, ¿crees que una mujer así se merece que sigamos hablendo de ella?.

A mi me parece absurdo estar triste y sentir dolor por una mujer tan fría como la describes, sinceramente, no lo entiendo, hay chicas mucho mejores que sabrán apreciar mejor lo que les des.

Citarconociéndome a mi mismo, no necesito psicólogos, solo un amigo/a que me escuche, sentirme comprendido, y en especial un abrazo.

Cometes un grave error al pensar así.

El único motivo por el cual sigues "encaprichado" o enamorado por ella o como quieras decirlo, es por que tu círculo de amistades se reduce a Cero, tu mismo lo dijiste, y eso te proporciona demasiado tiempo libre para pensar en ella. Necesitas amigos, pero no para que te escuchen y te den apoyo, ya que eso te haría pensar más en ella y seguir clavado en el mismo punto...

¿Reconquistarla dices?, ¿pero nos hemos vuelto más locos de lo que estabamos o que?.

...Tú lo que necesitas es conocer más chicas y punto, en una o dos semanas saliendo con otra chica, pero me refiero a una chica que sea cariñosa de verdad, entonces no te preocuparias tanto y poco a poco cada vez pensarias menos en la chica fría con la que estabas asta el punto de "olvidarla" y ya no te provocaría dolor, EN DOS SEMANAS HE DICHO y aunque no sea una relación de noviazgo, aunque sea estar con una chcia que te gusta en plan tonteo o muy buenos amigos.

Se que pensarás que esto que te digo es imposible, que la quieres demasiado como para poder olvidarla... y mucho menos hacerlo en tan poco tiempo, ¡ay!, pero amigo... yo pasé por lo mismo que tú, y te digo que ese pequeño consejo es una verdad como una casa. De hecho cualquier psicólogo te diría que lo primero que debes hacer es socializar, con familia, con amigos, con lo que te lleve a mantenerte ocupado a ti y a tu mente, y a conocer más chicas, pues lo dicen con razón, auqnue tu creas que no, así es la psicología humana y ya te he explicado como podrías arreglar el problema que tienes ahora mismo.

PD: Te lo dice alguien que conoció el amor verdadero. Esa chica no parece merecer la pena, ni cuando estabais ni ahora que no lo estais. Sal a buscarte otra chica y aprende de los defectos de tu ex (que no parecen ser pocos) para no cometer el mismo error por segunda vez con la siguiente novia que tengas, cojones.

Un saludo
#4376
Cita de: YuseTist en 10 Octubre 2015, 23:44 PM
encontré esto:

¿Pero estoy trabajando con JScript? ¿O mantengo la forma de C#?

Todo ese código está escrito en C#, pero el método Eval.JScriptEvaluate llama al intérprete JScript de Microsoft para evaluar código de JScript/javascript (es exactamente el mismo lenguaje), ya sea evaluar una expresión aritmética o no.

Esas classes de Microsoft.JScript quedaron obsoletas desde hace más de una década, deberías evitar su utilización, pues empezariamos muy mal si desarrollasemos una aplicación como una calculadora (la cual implica una mínima eficiencia posible) usando miembros deprecados, por muy buenos resultados que te de al evaluar... por algún buen motivo habrá quedado deprecada esa metodología.




Cita de: YuseTist en 10 Octubre 2015, 23:44 PMsi es JScript.. ¿se puede realizar en C#?

Si, puedes evaluar expresiones aritméticas en puro código administrado de C#/VB.Net.

Una manera sería compilando la expressión para devolver la respuesta, para ello puedes utilizar los proveedores de código de VB.Net o C (lee acerca de las classes VBCodeProvider o CSharpCodeProvider y CodeDomProvider), pero hacerlo implicaría fugas de memoria inevitables, ya que por cada evaluación realizada se generaría un ensamblado .Net que jamás serían liberados hasta finalizar la aplicación, así que no te lo recomiendo.

La otra forma sería demasiado tediosa o compleja, hablamos de desarrollar tu propio evaluador de expresiones, idear los algoritmos para tokenizar la expresión, hacer los cálculos, llevar los controles de errores, etc. No vale la pena trabajar en algo así cuando ya existen librerías open-source para .Net que han estado optimizando esa tarea durante años.

Te recomiendo la librería NCalc:
NCalc - Mathematical Expressions Evaluator for .NET - CodePlex

La página está plagado de ejemplos en C#, así que mostraré uno en VB.Net:

Código (vbnet) [Seleccionar]
Dim exp As String = "(1 + (2 - 2)) * (100 / 2.5)" ' = 40
Dim calc As New NCalc.Expression(exp)
Dim result As Decimal

If Not calc.HasErrors() Then
   result = CDec(calc.Evaluate())
Else
   MessageBox.Show(calc.Error)
End If


De todas formas, si por algún motivo quieres reinventar la rueda o hacer tu propia implementación personalizada, aquí te muestro dos buenos ejemplos...

Este código fuente parece estar muy bien, está orientado a la evaluación de expresiones aritméticas, y las expresiones soportan el uso de las funciones de la class System.Math (abc, exp, floor, round, pow, etc...) :
A C# Expression Evaluator - Black Belt Coder

Este código fuente está orientado a la evaluación de expresiones de varios tipos, incluyendo expresiones aritméticas claro está:
The expression evaluator revisited (Eval function in 100% managed .NET) - CodeProject
( debe ser un poco lento al evaluar objetos, por el uso de Reflection )

Saludos
#4377
Cita de: g3ck0 en 10 Octubre 2015, 01:46 AMPuedes configurar en el cliente cuanta banda vas a compartir con los demás... busca alguna opción relacionada con "Velocidad de subida".

Aparte de lo mencionado, también podrías buscar alguna opción relacionada con los "puestos de subida" o "upload spots", opción que sirve para limitar el sharing simultaneo a "X" cantidad de leechers, cuantos más puestos de subida obviamente más conexiones establecidas simultaneamente, pues a más personas les estarás compartiendo, pero cuantas más conexiones haya menor ancho de banda se le entregas a cada leecher, por ende aumentará el riesgo de ser baneado/denegado (blacklisted) por por parte de los servers, así que si te preocupa la estabilidad en general de tu cliente torrent entonces cuantas menos conexiones simultaneas de subida tengas mejor (tanto de subida como de bajada, se deben equilibrar hasta cierto punto teniendo en cuenta aspectos de las limitaciones de tu conexión y/o de las reglas de los servers privados que utilices, si alguno).

Saludos!
#4378
Cita de: elqueteconte en  9 Octubre 2015, 17:17 PMPensé en hacerlo en VB.net.

El código del compañero @Mad Antrax está muy pero que muy bien, sin embargo, al escucharte decir eso me han entrado ganas de mostrarte un ejemplo alternativo e iguálmente funcional en dicho lenguaje, ya que igual que tengo bien sabido que @Mad Antrax ama VBS, yo amo Vb.Net :P. Si lo hicieras en .Net (VB.Net o C#) la eficacia general del código aumentaria considerablemente en comparación con un lenguaje de scripting limitado (sobre todo si hablamos de Batch), aunque en realidad, con VBS tienes más que suficiente para llevar a cabo esa tarea.

Aquí tienes el archivo de la solución de Visual Studio 2013, como ya he mencionado cumple todas las funciones que has pedido, eso sí, lo que quieras añadir o modificar ya es cosa tuya. Si tienes preguntas sobre este lenguaje por favor hazlas en el subforo correspondiente, no desviemos más el tema aquí.



http://www.mediafire.com/download/4qoklj8s64jwuvv/WindowsApplication6.rar


Y aquí te muestro parte del código fuente. El resto del código que no muestro aquí simplemente es el código generado automaticamente por VS, el código de la UI.

Por mencionar algo de este código que te puede interesar rehutilizable para el futuro, en la función GetMonthName utilizo un objeto de globalización , CultureInfo, del cual obtengo de forma administrada los nombres de los meses en la cultura específica, en este caso "es-ES".

Te lo he dejado todo con varios comentarios para que te ayuden a comprender lo que hago.

MainForm.vb
Código (vbnet) [Seleccionar]
Imports System
Imports System.IO
Imports System.Linq
Imports System.Windows.Forms

Public NotInheritable Class MainForm : Inherits Form

   Private year As Integer = DateTime.Today.Year ' O... '2015'
   Private sourceDir As String = Directory.GetCurrentDirectory() ' O... ".\"

   Public Sub New()

       Me.InitializeComponent()

       With Me.DTPMonth ' Personalizo el formato de entrada del DateTimePicker.
           .CustomFormat = "MM" ' 01-12
           .Format = DateTimePickerFormat.Custom
           .Value = DateTime.Today
       End With

   End Sub

   Private Sub BtAccept_Click(ByVal sender As Object, ByVal e As EventArgs) _
   Handles BtAccept.Click

       ' Obtengo la ruta absoluta del directorio con fecha. (ej. "C:\Ruta\Octubre2015")
       Dim monthNumber As Integer = Me.DTPMonth.Value.Month
       Dim dateDir As String = DateUtil.GetDateDirPath("es-ES", Me.sourceDir, Me.year, monthNumber)

       ' Creo el directorio con fecha (si no existe).
       DateUtil.CreateDirectory(dateDir)

       ' Muevo los directorios (si alguno) con formato de fecha específico (ej. "yyyyMMdd"), del directorio fuente, al directorio de destino.
       DateUtil.MoveDateDirectories(Me.year, monthNumber, DateUtil.DirNameFormat, sourceDir, dateDir)

   End Sub

   Private Sub BtCancel_Click(ByVal sender As Object, ByVal e As EventArgs) _
   Handles BtCancel.Click

       ' Cierro este form, y con él termina la ejecución de la aplicación.
       Me.Close()

   End Sub

End Class


+

DateUtil.vb
Código (vbnet) [Seleccionar]
Imports System
Imports System.Globalization
Imports System.IO
Imports System.Linq
Imports System.Security.AccessControl
Imports System.Security.Principal

Public Module DateUtil

   ''' <summary>
   ''' El formato por defecto del nombre de directorio. ("yyyyMMdd" equivale a "AñoMesDia").
   ''' </summary>
   ''' <remarks>
   ''' El formato se puede cambiar, pero respetando los especificadores actuales, que son "yyyy", "MM" y "dd", los cuales son intercambiables entre si.
   ''' Para usar otros especificadores haría falta una refactorización del código (el método <see cref="MoveDateDirectories"/>) para implementar su soporte.
   ''' Los especificadores disponibles se pueden encontrar en la documentación online de MSDN:
   ''' https://msdn.microsoft.com/en-us/library/8kb3ddd4%28v=vs.110%29.aspx
   ''' </remarks>
   Public Const DirNameFormat As String = "yyyyMMdd" ' ej. "20150131"

   ''' <summary>
   ''' Devuelve el nombre de un mes del año, en el lenguaje específicado.
   ''' </summary>
   Public Function GetMonthName(ByVal cultureName As String,
                                ByVal month As Integer) As String

       If (month < 1I) OrElse (month > 12I) Then
           Throw New ArgumentOutOfRangeException(paramName:="month", message:="A value from range '1' to '12' is required.")

       ElseIf Not (From ci As CultureInfo In CultureInfo.GetCultures(CultureTypes.InstalledWin32Cultures)
                   Where ci.Name.Equals(cultureName, StringComparison.OrdinalIgnoreCase)).Any Then
           Throw New NotImplementedException(message:=String.Format("Culture '{0}' not recognized, maybe name is wrong typed or culture is not installed.", cultureName))

       Else
           Dim ci As CultureInfo = CultureInfo.GetCultureInfo(cultureName)
           Return ci.TextInfo.ToTitleCase(ci.DateTimeFormat.MonthNames(month - 1))

       End If

   End Function

   ''' <summary>
   ''' Devuelve la ruta absoluta del directorio de destino con el nombre de la fecha, en el lenguaje específicado.
   ''' ej. "C:\Ruta\Octubre2015"
   ''' </summary>
   Public Function GetDateDirPath(ByVal cultureName As String,
                                  ByVal targetDir As String,
                                  ByVal year As Integer,
                                  ByVal month As Integer) As String

       If (CStr(year).Length <> 4I) Then
           Throw New ArgumentOutOfRangeException(paramName:="year", message:="A value of 4 digits' is required.")

       ElseIf (month < 1I) OrElse (month > 12I) Then
           Throw New ArgumentOutOfRangeException(paramName:="month", message:="A value from range '1' to '12' is required.")

       Else
           Return Path.Combine(targetDir, String.Format("{0}{1}", DateUtil.GetMonthName(cultureName, month), year))

       End If

   End Function

   ''' <summary>
   ''' Crea un directorio en el directorio especificado.
   ''' </summary>
   Public Sub CreateDirectory(ByVal targetDir As String)

       ' Le asigno permisos de usuario personalizados a la carpeta existente o la carpeta que se creará.

       Dim userId As SecurityIdentifier = WindowsIdentity.GetCurrent.User
       Dim dirSec As New DirectorySecurity
       With dirSec
           .AddAccessRule(New FileSystemAccessRule(userId, FileSystemRights.CreateDirectories, AccessControlType.Allow))
           .AddAccessRule(New FileSystemAccessRule(userId, FileSystemRights.CreateFiles, AccessControlType.Allow))
           .AddAccessRule(New FileSystemAccessRule(userId, FileSystemRights.ListDirectory, AccessControlType.Allow))
           .AddAccessRule(New FileSystemAccessRule(userId, FileSystemRights.ReadAndExecute, AccessControlType.Allow))
           .AddAccessRule(New FileSystemAccessRule(userId, FileSystemRights.Write, AccessControlType.Allow))
           ' .AddAccessRule(New FileSystemAccessRule(userId, FileSystemRights.FullControl, AccessControlType.Allow))
       End With

       If Directory.Exists(targetDir) Then
           Directory.SetAccessControl(targetDir, dirSec)
       Else
           Directory.CreateDirectory(targetDir, directorySecurity:=dirSec)
       End If

   End Sub

   ''' <summary>
   ''' Mueve los directorios cuyo nombre contenga un formato de fecha especifico (intercambiable entre "yyyy", "MM", y "dd") al directorio de destino especificado.
   ''' </summary>
   Public Sub MoveDateDirectories(ByVal year As Integer,
                                  ByVal month As Integer,
                                  ByVal dateFormat As String,
                                  ByVal sourceDir As String,
                                  ByVal targetDir As String)

       If (CStr(year).Length <> 4I) Then
           Throw New ArgumentOutOfRangeException(paramName:="year", message:="A value of 4 digits' is required.")

       ElseIf (month < 1I) OrElse (month > 12I) Then
           Throw New ArgumentOutOfRangeException(paramName:="month", message:="A value from range '1' to '12' is required.")

       ElseIf (dateFormat.Replace("y", "").Replace("M", "").Replace("d", "").Length <> 0) Then
           Throw New NotImplementedException(message:="Specified date format is not implemented, only 'yyyy', 'MM' and 'dd' are interchangeable.")

       ElseIf Not Directory.Exists(sourceDir) Then
           Throw New DirectoryNotFoundException(message:=String.Format("Source directory not found: '{0}'", sourceDir))

       ElseIf Not Directory.Exists(targetDir) Then
           Throw New DirectoryNotFoundException(message:=String.Format("Target directory not found: '{0}'", targetDir))

       Else
           Dim sourceDirInfo As New DirectoryInfo(sourceDir)
           Dim targetDirInfo As New DirectoryInfo(targetDir)

           ' Obtengo una colección con los nombres de directorio con el formato de fecha especificado. (ej. de Octubre 2015:  20151001 ... 20151031)
           Dim dateDirNames As IEnumerable(Of String) =
               From day As Integer In Enumerable.Range(1, DateTime.DaysInMonth(year, month))
               Select dateFormat.Replace("yyyy", CStr(year)).
                                 Replace("MM", CStr(month).PadLeft(2, "0"c)).
                                 Replace("dd", CStr(day).PadLeft(2, "0"c))

           ' Obtengo una colección con las rutas absolutas de los directorios que cumplen las condiciones de formato de fecha.
           Dim directories As IEnumerable(Of DirectoryInfo) =
               From dirInfo As DirectoryInfo In sourceDirInfo.EnumerateDirectories("*", SearchOption.TopDirectoryOnly)
               Where dateDirNames.Contains(dirInfo.Name)

           ' Un simple mensaje de información o aviso cuando no se encuentra ningún directorio el cual mover.
           If (Not directories.Any) Then
               Dim msg As String = String.Format("No ha sido encontrado ningún directorio en '{0}' que cumpla las condiciones de formato de fecha.", sourceDirInfo.FullName)
               MessageBox.Show(msg, "By Elektro", MessageBoxButtons.OK, MessageBoxIcon.Information)

           Else
               ' Por último, muevo los directorios que cumplieron las condiciones de formato de fecha.
               For Each dirInfo As DirectoryInfo In directories

                   Debug.WriteLine(String.Format("Moviendo: {0}", dirInfo.FullName))

                   Try
                       dirInfo.MoveTo(Path.Combine(targetDirInfo.FullName, dirInfo.Name))

                   Catch ex As Exception
#If DEBUG Then
                       Throw ex
#Else
                       MessageBox.Show(ex.Message & Environment.NewLine & ex.StackTrace, "By Elektro", MessageBoxButtons.OK, MessageBoxIcon.Error)
#End If

                   End Try

               Next dirInfo

           End If ' Not directories.Any

       End If ' dateFormat...

   End Sub

End Module


Que lo apreveches.

Saludos!
#4379
Cita de: Bob_Ale en  9 Octubre 2015, 20:21 PMEstoy haciendo un programa en C# para crear un índice de ficheros para despues usar este índice en otras aplicaciones.

¿Pero es la mejor manera,  guardar un índice en un XML?

Suponiendo que hablemos de una base de datos de uso local (cuyo contenido llámese índice de archivos), entonces un archivo Xml es una manera ideal si lo que quieres es generar un archivo de texto plano que sea accesible/legible por el humano y sencillamente parseable por la máquina (vease también una estructura CSV, aunque a mi siempre me ha parecido algo muy, muy feo), de lo contrario, y si realmente nos debemos obsesionar por el rendimiento, entonces podrías serializar los datos en un archivo binario, a falta de mencionar un método más óptimo que tal vez puedo desconocer.

También habría que tener en cuenta la forma en que contruyas el Xml y también como lo cargas, me refiero a la lógica que emplees (por ejemplo instanciar un XmlWriter para escribir en el archivo poco a poco, o usar directamente el XmlSerializer) y los tiempos de respuesta de estas lógicas de tu algoritmo, pero si hablamos de una simple serialización de datos en Xml o Binario, entonces la velocidad de carga/lectura varia apenas unos milisegundos con cantidades de datos normales (1-100 mb).

Dicen que el serializador protobuf da mejores resultados que utilizando los serializadores de la librería de clases de .Net Framework, pero nunca lo he probado ya que no manejo una cantidad de datos que podamos denominar "Big Data" y por ende no me interesa romperme el cerebro para optimizar hasta tal punto ...y creo que tu tampoco necesitarás llegar hasta ese extremo, de todas formas por si te interesa lo puedes descargar aquí:
https://github.com/google/protobuf

En fin, por un lado tenemos la serialización XML y por otro la binaria, ¿para que más opciones?.

¿Cual es "la mejor manera" entre estas dos?, pues depende de las necesidades de cada uno, pero en lo que respecta a rendimiento para salir de dudas he realizado un pequeño test, donde he obtenido todas las rutas absolutas de mi sistema de archivos, y estos han sido los resultados:

Cita de: Resultado de ejecuciónTotal file amount......: 165,465 files.
FileSystem.Xml filesize: 18.88 MB.
FileSystem.Dat filesize: 16.51 MB.

Method Name: SerializeXml
Elapsed Time: 00:00:00:254 ms

Method Name: SerializeBin
Elapsed Time: 00:00:00:161 ms

Method Name: DeserializeXml
Elapsed Time: 00:00:00:327 ms

Method Name: DeserializeBin
Elapsed Time: 00:00:00:281 ms

Como se puede comprobar, el archivo resultante Xml ocupa unos MB más que el binario, y también tarda más en cargar. Los nombres de los métodos tienen nombres self-explanatory, creo que no es necesario explicar su funcionalidad.

El código fuente parcial, en VB.Net:

( Para resumir lo que ocurre, simplemente obtengo la ruta absoluta de todos los archivos del disco duro "C:\", y seguidamente uso la class BinaryFormatter y XmlSerializer para serializar los datos, mientras que con un StopWatch mido el tiempo de ejecución de ambos tipos de serialización y deserialización. )
Código (vbnet) [Seleccionar]
Imports System.IO

Public NotInheritable Class Form1 : Inherits Form

   Dim fileSystemPaths As String()
   Const xmlFilePath As String = ".\FileSystem.xml"
   Const binFilePath As String = ".\FileSystem.dat"

   Private Sub Form1_Shown() Handles MyBase.Shown

       Me.fileSystemPaths = Utils.FileDirSearcher.GetFilePaths("C:\", SearchOption.AllDirectories).ToArray

       Utils.Misc.MeasureAction(AddressOf SerializeXml, writeResultInConsole:=True)
       Utils.Misc.MeasureAction(AddressOf SerializeBin, writeResultInConsole:=True)

       Utils.Misc.MeasureAction(AddressOf DeserializeXml, writeResultInConsole:=True)
       Utils.Misc.MeasureAction(AddressOf DeserializeBin, writeResultInConsole:=True)

       Dim sb As New StringBuilder
       With sb
           .AppendLine(String.Format("Total file amount......: {0} files.", Me.fileSystemPaths.Count.ToString("n0")))
           .AppendLine(String.Format("FileSystem.Xml filesize: {0} MB.", (New FileInfo(xmlFilePath).Length / (1024 * 1024)).ToString("n2")))
           .AppendLine(String.Format("FileSystem.Dat filesize: {0} MB.", (New FileInfo(binFilePath).Length / (1024 * 1024)).ToString("n2")))
       End With

       Console.WriteLine(sb.ToString)

   End Sub

   Private Sub SerializeXml()
       Utils.SerializationUtil.Serialize(Me.fileSystemPaths, xmlFilePath, SerializationFormat.Xml)
   End Sub

   Private Sub SerializeBin()
       Utils.SerializationUtil.Serialize(Me.fileSystemPaths, binFilePath, SerializationFormat.Binary)
   End Sub

   Private Sub DeserializeXml()
       Dim fileSystemFromXml As String() = Utils.SerializationUtil.Deserialize(Of String())(xmlFilePath, SerializationFormat.Xml)
   End Sub

   Private Sub DeserializeBin()
       Dim fileSystemFromBin As String() = Utils.SerializationUtil.Deserialize(Of String())(binFilePath, SerializationFormat.Binary)
   End Sub

End Class


El código fuente de la solución completa:
http://www.mediafire.com/download/u167fme23z6p5ju/WindowsApplication1.rar

PD: C# y VB.Net son dos lenguajes (casi)idénticos internamente hablando, ya que ambos forman parte de la plataforma .Net, compilan mediante el CIL de Microsoft y se administra u optimiza mediante el JIT/NGen, así que podemos asumir que el test es igual de válido para dicho lenguaje, por si alguien tenía dudas.

Saludos.
#4380
Cuando no es una amiga es la novia, o un familiar, o uno mismo. Siempre la misma historia... pero bueno, démosle el beneficio de la duda a esta persona.

Pienso que todo el mundo debería hacerse una serie de preguntas al encontrarse en la misma situación, tenga las intenciones que tenga esa persona, ya sea para recuperar una cuenta propia/ajena, o para robar una cuenta:


  • ¿Por que motivo yo debería acudir a un foro de hacking, en lugar de acudir a la asistencia de usuario, es decir, a los servicios de resolución de problemas de la red social en la que estoy registrado?.

  • ¿Qué beneficios me puede ofrecer la ayuda de un hacker, comparado con la ayuda de un empleado de la red social que utilizo, el cual por obligación está dispuesto a ayudarme y tiene acceso a "todos" los datos de dicha red social?.

  • ¿Suponiendo que se pueda hackear una cuenta, reálmente puedo esperar que un hacker tenga la voluntad de involucrarse en un DELITO INFORMÁTICO contra una compañia tan grande y protegida como Facebook, solo por ofrecerle ayuda desinteresada a un desconocido?.
     

  • ¿Cuantas personas antes que yo habrán pedido lo mismo en un foro de hacking? ...¿tal vez cientos o miles?, entonces, ¿en vez de formular "la típica pregunta" sin argumento para que piensen que soy "el típico listo", tendría más opciones si desarrollo el problema añadiendo toda la información posible sobre el robo, sobre la identidad de los involucrados, y la cuenta que quiero ""recuperar""?.

  • ¿Debería leerme las normas del foro al que tengo intención de pedir ayuda, para saber si está permitido hablar de este tema en concreto?.

Ya te explicaron lo que debes hacer, no hay más que podamos decirte, nosotros no somos empleados de Facebook ni tampoco los hackers tienen una varita mágica para obtener el login de un usuario (se podrían aplicar técnicas de ingenieria social, cosa prohibida en el foro al ser no ético y un delito), por ende, cierrto el tema.

Suerte con la (supuesta) recuperación de dicha cuenta.

Tema cerrado.

Saludos!