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

#6751
Cita de: Ikillnukes en  8 Agosto 2014, 17:11 PM
Creo que algunas de estas utilidades están ya presentes dentro de lo que es la super colección de Elektro, pero bueno supongo que un indentador XML nunca se ha visto por aquí así que aquí va:

precisamente estoy harto de que cierta utilidad de Microsoft me genere los archivos de manifiesto sin ningún tipo de indentación, esto me sirve ;).

EDITO: en un principio iba a ahorrarme comentarios sobre posibles mejoras de código o etc, pero hay un fallo importante que se debe corregir, no estás liberando el memorystream:
Citar
Código (vbnet) [Seleccionar]
Dim w As New MemoryStream()

Ni tampoco el Writer ni el Reader xD

Por cierto la Class XMLTextWriter está obsoleta, en su defecto Microsoft recomienda el uso de XMLWriter.

EDITO 2: Me he tomado la libertad de editar el código original enfocándolo de otra manera (aunque tampoco es tan distinto):

Ejemplo de uso:

Código (vbnet) [Seleccionar]
       Dim TextEncoding As System.Text.Encoding = System.Text.Encoding.Default
       Dim UnformattedXMLDocument As String = IO.File.ReadAllText("C:\Unformatted Document.xml", TextEncoding)
       Dim FormattedXMLDocument As String = XMLBeautify(XMLText:=UnformattedXMLDocument,
                                                        IndentChars:=New String(" "c, 2),
                                                        IndentOnAttributes:=False,
                                                        TextEncoding:=TextEncoding)

       IO.File.WriteAllText("C:\Formatted Document.xml", FormattedXMLDocument, TextEncoding)



Snippet:

Código (vbnet) [Seleccionar]
   ''' <summary>
   ''' Beautifies the contents of an unindented XML document.
   ''' </summary>
   ''' <param name="XMLText">
   ''' The XML text content.
   ''' It can be an entire document or a fragment.
   ''' </param>
   ''' <param name="IndentChars">
   ''' The string that is used to indent the XML.
   ''' Default value is: <see cref="ControlChars.Tab"/>
   ''' </param>
   ''' <param name="IndentOnAttributes">
   ''' If set to <c>true</c>, attributes will be separated by newlines.
   ''' Default value is: <c>false</c>
   ''' </param>
   ''' <param name="TextEncoding">
   ''' The XML text encoding to use.
   ''' Default value is: <see cref="System.Text.Encoding.Default"/>.
   ''' </param>
   ''' <returns>The beautified XML text.</returns>
   ''' <exception cref="System.ArgumentNullException"></exception>
   Public Shared Function XMLBeautify(ByVal XMLText As String,
                                      Optional ByVal IndentChars As String = Nothing,
                                      Optional ByVal IndentOnAttributes As Boolean = False,
                                      Optional ByVal TextEncoding As System.Text.Encoding = Nothing) As String

       If String.IsNullOrEmpty(XMLText) Then
           Throw New ArgumentNullException(XMLText)
       End If

       Dim sb As New System.Text.StringBuilder
       Dim doc As New Xml.XmlDocument()
       Dim settings As New Xml.XmlWriterSettings

       With settings
           .Indent = True
           .CheckCharacters = True
           .OmitXmlDeclaration = False
           .ConformanceLevel = Xml.ConformanceLevel.Auto
           .NamespaceHandling = Xml.NamespaceHandling.Default
           .NewLineHandling = Xml.NewLineHandling.Replace
           .NewLineChars = ControlChars.NewLine
           .NewLineOnAttributes = IndentOnAttributes
           .IndentChars = If(IndentChars IsNot Nothing, IndentChars, ControlChars.Tab)
           .Encoding = If(TextEncoding IsNot Nothing, TextEncoding, System.Text.Encoding.Default)
       End With

       Using writer As Xml.XmlWriter = Xml.XmlWriter.Create(sb, settings)
           doc.LoadXml(XMLText)
           doc.WriteContentTo(writer)
           writer.Flush()
           Return sb.ToString
       End Using

   End Function

   ''' <summary>
   ''' Beautifies the contents of an unindented XML document.
   ''' </summary>
   ''' <param name="XMLFile">
   ''' An <see cref="T:IO.FileInfo"/> that contains the XML info.
   ''' It can be an entire document or a fragment.
   ''' </param>
   ''' <param name="IndentChars">
   ''' The string that is used to indent the XML.
   ''' Default value is: <see cref="ControlChars.Tab"/>
   ''' </param>
   ''' <param name="IndentOnAttributes">
   ''' If set to <c>true</c>, attributes will be separated by newlines.
   ''' Default value is: <c>false</c>
   ''' </param>
   ''' <param name="TextEncoding">
   ''' The XML text encoding to use.
   ''' Default value is: <see cref="System.Text.Encoding.Default"/>.
   ''' </param>
   ''' <returns>The beautified XML text.</returns>
   ''' <exception cref="System.ArgumentNullException"></exception>
   Public Shared Function XMLBeautify(XMLFile As IO.FileInfo,
                                      Optional ByVal IndentChars As String = Nothing,
                                      Optional ByVal IndentOnAttributes As Boolean = False,
                                      Optional ByVal TextEncoding As System.Text.Encoding = Nothing) As String

        Return XMLBeautify(IO.File.ReadAllText(XMLFile.FullName, TextEncoding), IndentChars, IndentOnAttributes, TextEncoding)

   End Function




Posibles outputs:

1º:

Código (xml) [Seleccionar]
<savedata>
 <SoftwareType>Freeware</SoftwareType>
 <SoftwareID>Moo0 FileMonitor</SoftwareID>
 <Version>1.11</Version>
 <MainWindow>
   <SoftwareType>Freeware</SoftwareType>
   <SoftwareID>Moo0 FileMonitor</SoftwareID>
   <Version>1.11</Version>
   <View F="0" E="0" D="0" RefreshFrequency="500" LogUpTo="20000" EasyDrag="1" Maximized="0" X="958" Y="453" Width="962" Height="585" KeepOnTop="0"></View>
   <ChangesColumnOrder length="6" _0="0" _1="1" _2="2" _3="3" _4="4" _5="5"></ChangesColumnOrder>
 </MainWindow>
 <Skin>Classic LG</Skin>
</savedata>



2º:
Código (xml) [Seleccionar]
<savedata>
 <SoftwareType>Freeware</SoftwareType>
 <SoftwareID>Moo0 FileMonitor</SoftwareID>
 <Version>1.11</Version>
 <MainWindow>
   <SoftwareType>Freeware</SoftwareType>
   <SoftwareID>Moo0 FileMonitor</SoftwareID>
   <Version>1.11</Version>
   <View
     F="0"
     E="0"
     D="0"
     RefreshFrequency="500"
     LogUpTo="20000"
     EasyDrag="1"
     Maximized="0"
     X="958"
     Y="453"
     Width="962"
     Height="585"
     KeepOnTop="0"></View>
   <ChangesColumnOrder
     length="6"
     _0="0"
     _1="1"
     _2="2"
     _3="3"
     _4="4"
     _5="5"></ChangesColumnOrder>
 </MainWindow>
 <Skin>Classic LG</Skin>
</savedata>


Saludos
#6752
Cita de: CharlyM35 en  8 Agosto 2014, 00:01 AMEs que verás, yo estoy con un proyecto, y no me vendria mal algo de ayuda, pero al igual que nunca programo en lenguajes interpretados, nunca pagaria a nadie por una linea en un lenguaje interpretado. No te molestes en intentar corregirme y decirme que esos lenguajes que usas no son interpretados, por que .NET, es una maquina virtual. Ruby, usa una maquina virtual, y Batch... bueno, batch son scripts... los scripts ya de por si, son interpretados.

Buenas

No me ofendes, pero ya he explicado los lenguajes que manejo, no te puedo ayudar a solucionar el problema que tienes, ¡lo siento!.

Sobre lo de los intérpretes, hace poco tuvimos un debate sobre "lenguajes de código nativo" en el que ya quedaron claras nuestras posturas para ambas partes, no hay motivo para seguir discutiendo tecnicismos.




Cita de: ccrunch en 26 Julio 2014, 20:47 PM
5€ por un proyecto pequeño? Espero que con proyecto pequeño te refieras a una ventana de "hola mundo" porque de ser otra cosa más complicada lo único que consigues es hacer el trabajo a precio de nada, cosa que a los demás nos obliga a hacer lo mismo, o más barato.

Cita de: CharlyM35 en  8 Agosto 2014, 00:06 AMPf... pues yo por 5€ haría proyectos pequeños, y con pequeños hablo de menos de 500 lineas de código. Por 10€ subiría a 750 lineas max, y así hasta cansarme.

@ccrunch
siento no haberte respondido a ese comentario pero la verdad me pareció muy fuera de lugar, y no quería convertir esto en un flamewar, ahora creo que no tengo más remedio que dar mi opinión al respecto.

@CharlyM35
Se que ese mensaje no va dirigido a mi, lo siento por meterme donde no me llaman, la verdad es que me parece genial que estés dispuesto a ayudar a los demás sin abusar del dinero (lo mismo que intento hacer yo), pero creo que nadie debería cobrar en función de cuantas lineas de código vaya a escribir... eso me parece realmente absurdo.

Por ponerte un ejemplo, hay formas en las que te podría escribir un proyecto de +3.000 lineas de código en menos de 10 minutos echando mano de los cientos de Snippets que como programador me he ido guardo para aprovecharlos en futuros proyectos (Classes y métodos rehusables de los cuales muchas superan las 1.000 lineas de código), ¿en ese caso se debería cobrar al cliente por lineas, o por esos 10 minutos de trabajo?, obviamente no sería nada ético cobrar por las lineas, ya que no me habría costado ningún esfuerzo añadirlas (quizás si adaptar el código, pero añadirlo no).

...Pues a eso es a lo que me referí por "proyectos simples", proyectos donde haya que invertir muy poco tiempo, las lineas de código que haya que invertir me es indiferente porque pueden ser tanto muchísimas instrucciones como muy pocas, depende del proyecto claro está.




Cita de: 043h68 en 26 Julio 2014, 21:59 PMMuy honesto lo que haces, aunque si vas a tomar el freelance de forma seria entones pasate por sitios dedicados a esto, tendrás mas suerte y seguro valoraran tu trabajo.

Eso ya lo hago :P aunque la verdad es dificil hacerse un hueco entre ese tipo de servicios donde la mayoria de usuarios registrados supuestos "programadores" no son más que Bots esfadores, pero gracias por el consejo ...le puede venir bien a otros.




Cita de: xustyx en  8 Agosto 2014, 01:32 AMposiblemente de la manera en que te expresas y aunque elektro no haya puesto c++, él sepa más que tú.

Creo que está mal hacer comparaciones, pero personalmente considero que una persona que esté tan cerca del low-level ha debido adquirir una gran cantidad de conocimientos que a mi me gustaría adquirir, pero que al final nunca los aprendo porque sinceramente lo estaría haciendo simplemente por curiosidad y no porque vaya a necesitar usar esos conocimientos, y esa es además una de las tantas razones por las que decidí no aprender C/C++.

Saber cosas que posiblemente nunca vayas a utilizar, por interesantes que sean, eso no te ayudará en nada, y yo a lo largo de mi vida he visto como muchísimas personas deciden aprender C++ como su Main Language solamente porque leyeron que, o alguien les dijo que, o un amigo le recomendó a otro amigo que, en fín: Blah Blah Blah "C++ es el mejor, en C++ puedes hacer de todo", sin tener en cuenta realmente que si necesitarán usar todo el potencial que ofrece este lenguaje para lo que uno realmente pretende desarrollar y si realmente las características de ese lenguaje se adaptan a tus gustos, hay que elegir con cabeza, hay cientos de lenguajes ahí fuera ...una persona no se tiene porque adaptar a un lenguaje si ya existe otro lenguaje que se adapte a sus necesidades.




Cita de: CharlyM35 en  8 Agosto 2014, 02:13 AMHay quien hace programas no interpretados en interfaz grafica, pero a mi las interfaces me sobran. No es que no sepa hacerlas, si no que... para que?

Te recuerdo que el manejo por consola también es una interfaz, porque tal y como lo dices puedes dar a pensar conceptos equivocados a gente que se esté iniciando en la programación.

A diferencia de ti, yo opino lo mismo pero con la interfaz command-line, no es que no sepa hacerlo, pero a menos que me lo exigan ...yo no voy a desarrollar una App CLI para mi mismo ...¿para que?, sentiria que estoy perdiendo el tiempo ya que una GUI siempre va a aportar futuras ideas para incrementar las funcionalidades y un manejo mucho más sencillo para el enduser, eso por no hablar de que de todas formas siempre se puede implementar una especie de hibridez para que la app se pueda manejar también por command-line, así que todo me parecen ventajas.

Cita de: CharlyM35 en  8 Agosto 2014, 02:13 AMmis programas, son para mi y ya... antes los compartia en un foro, pero en ese foro ya apenas hay usuarios activos, así que no los comparto con nadie, por lo que no hago interfaces gráficas, pero claro.. hoy dia, la gente no ve mas allá de cuatro eventos..

De nuevo me parece genial que te guste la programación CLI y no voy a meterme con ello (aunque yo lo considero muy útil en ciertos casos, y primitivo en otros tantos), pero eso no me parece razón suficiente para generalizar de que las personas que programen con interfaces gráficas lo hagan por "vagos" o "malas costumbres" o algo parecido a lo que has insinuado, ya que hay demasiadas cosas que nunca se podrían desarrollar en una aplicación CLI por razones obvias de incompatibilidad ( Ej: reproducir un video o renderizar un documento PDF/multimedia ), por lo tanto la única salida es una GUI, la interfaz gráfica fue un gran avance en la programación y no puedes tachar a este tipo de programadores de lo que lo estés tachando, de echo yo he desarrollado decenas de proyectos personales command-line pero pero sin lugar a dudas prefiero una interfaz gráfica, sin lugar a dudas (eso sí, cuando se precisa, con soporte para parámetros por la consola), y eso no me convierte en peor programador, ni en vago, sino en todo lo contrario, simplemente es una puerta que abre más posibilidades a tu forma de programar, y esto va por todos.




Gracias por vuestros comentarios,
Saludos!
#6754
Cita de: Yaldabaot en  6 Agosto 2014, 23:33 PM
Dim count As Integer = Convert.ToInt32(cmd.ExecuteScalar())

Esa es la única rara, será esa?.

pues... sin probarlo no puedo decírtelo yo.

asegúrate de que el output que recibes de la cmd es númerico...

saludos.
#6755
Cita de: asdexiva en  7 Agosto 2014, 01:59 AMpor que esas 2 comillas si me pudieras decir gracias

Join es un método de String para concatenar un Iterable (una list por ejemplo), por lo tanto es necesario un String para utilizarlo, y las dos comillas es un String vacío para que nos permita utilizar métodos de String como ya dije que es Join.

Quizás haya otra forma más simple de unir una lista, pero en ese caso lo desconozco (practicamente no manejo Python)

Saludos!
#6756
Cita de: Yaldabaot en  6 Agosto 2014, 22:34 PMAhora bien,¿ cómo hago yo para saber dónde está el error, si la aplicación no está donde tengo el IDE, lo que ves es lo que me lanza?.

Pues a menos que el Client se instale VS y sepa depurar y utilizar los breakpoints y comprobar los autos y etc... no se me ocurre como saberlo desde el lado del Server xD.

Creo que lo más lógico dado el caso sería que añadieses controles de errores (bloques de Try/Catch) en las partes del código que tu creas que puedan ser conflictivas, y al detectar la excepción mostrases un msgbox con todos los datos, como el método que lanzó el error y los valores que habia introducido al momento de la excepción, y el usuario no tendría más que copiar el texto de ese MsgBox para reportarte el problema, supongo que eso te ayudaría a estar mucho más cerca o resolver completamente el supuesto Bug.

Aquí tienes todo lo necesario para saber como mostrar los datos en el MsgBox:
· Exception Properties
( Las propiedades que deberías mostrar en mi opinión: Message, TargetSite, Source y StackTrace además de 'txtmonto.text' y en fin lo que tu consideres oportuno )

En fin, deberías hacer eso, optimizar los chequeos de tu App y cuando lo hayas echo pasarle la actualización del programa a ese Client ...y ya solo quedaría esperar a que diese error y te lo reportase.

Quizás esto también te pueda servir de algo en el asunto: [SOURCE] Elektro ErrorDialog aunque para mostrar el método desencadenante habría que hacerle algún retoque.

Un saludo




Reectifico, no me habia dado cuenta hasta ahora que la excepción de la imagen es de tipo Integer, no Double, por ende estás comprobando el bloque de código incorrecto.
lo más lógico sería antes de nada (antes de ponerte a hacer 1.000 chequeos de errores), comprobar las conversiones que haces en el código, es decir todas las conversiones de String a Integer (Cint(), Integer.tryparse, convert.toint32() etc... no se como lo estarás haciendo), una de ellas es la conflictiva, revisa eso.

Saludos
#6757
La resolución de pantalla no tiene nada que ver con la arquitectura (x86/x64) del SO, la res. depende únicamente del rango de resoluciones para las que haya sido desarrollada dicha pantalla en concreto, están pre-programadas en el producto, y el driver las detecta (digo el Driver pero puedo estar equivocado en ese tecnicismo, no soy un experto en esa materia), pero para poder utilizar una res. específica (dentro de ese rango) también depende de que tengas iinstalado los drivers adecuados de la tarjeta de Video.

Saludos.
#6758
Cita de: asdexiva en  6 Agosto 2014, 22:21 PM
text_file.write(str(lol))

Estás tratando la lista como si fuese un string por ende se muestra el contenido RAW, no estás convirtiendo la lista a String, debes unir los elementos de la lista:

Código (python) [Seleccionar]
text_file.write(''.join(lol))

Documentación:
· str()
· str.join()

Saludos.
#6759
1) El mensaje de la excepción es bien claro, no se puede tratar la cadena de texto "La operación necesita una consu" como si fuese un valor de tipo Integer, en alguna parte del código, la cual no tiene porque ser necesariamente la que has mostrado, estás intentando hacer ese tipo de conversión, y es donde está el error.
Aunque te parezca un error absurdo, es muy común en los inicios de cualquier programador equivocarse de esa manera.

2) En el código que has mostrado parece como si, mientras un usuario escribe en un textbox, tu quisieras comprobar si lo que escribe es un número, y luego reemplazar/formatear el texto de ese textbox mientras el usuario pueda seguir escribiendo?... en ese caso debes darle otro enfoque a lo que intentes conseguir.

3) En lugar de usar métodos del siglo pasado de VisualBasic6 (IsNumeric) deberías reemplazarlo por métodos de la programación actual (Double.TryParse), ejemplo:

Código (vbnet) [Seleccionar]
       Dim comprobar As String = TxtMonto.Text
       Dim monto As Double = 0.0R
       Dim Success As Boolean = Double.TryParse(comprobar, monto)

       Select Case Success
           Case True
               lblmonto.Text = ""
               TxtMonto.Text = monto.ToString("###,###,###.##")

           Case Else
               lblmonto.ForeColor = Color.Red
               lblmonto.Text = "Dato Incorrecto"

       End Select

       btnGuardarDatos.Enabled = Success


4) Si lo que pretendes es que en el TextBox solo se puedan escribir dígitos y puntos, como ya digo tienes que darle otro enfoque al código, esa no es la manera apropiada, esta sería una manera:

Código (vbnet) [Seleccionar]
   ''' <summary>
   ''' The keys that are allowed to press in the TextBox.
   ''' </summary>
   Private ReadOnly AllowedKeys As Char() = "0123456789."

   ''' <summary>
   ''' Handles the Enter event of the TextBox control.
   ''' </summary>
   ''' <param name="sender">The source of the event.</param>
   ''' <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
   Private Sub TxtMonto_Enter(ByVal sender As Object, ByVal e As EventArgs) Handles TxtMonto.MouseEnter

       ' Disable Copy/Paste contextmenu by creating a new empty one.
       If sender.ContextMenuStrip Is Nothing Then
           sender.ContextMenuStrip = New ContextMenuStrip
       End If

   End Sub

   ''' <summary>
   ''' Handles the KeyPress event of the TextBox control.
   ''' </summary>
   ''' <param name="sender">The source of the event.</param>
   ''' <param name="e">The <see cref="KeyPressEventArgs"/> instance containing the event data.</param>
   Private Sub TxtMonto_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs) Handles TxtMonto.KeyPress

       Select Case e.KeyChar

           Case Convert.ToChar(Keys.Enter) ' 'Enter' key is pressed.
               ' Do something here...

           Case Convert.ToChar(Keys.Back) ' 'Backspace' key is pressed.
               e.Handled = False ' Delete the character

           Case Convert.ToChar(Keys.Capital Or Keys.RButton) ' 'CTRL+V' combination is pressed.
               ' Paste clipboard content only if contains allowed keys.
               e.Handled = Not Clipboard.GetText().All(Function(c) AllowedKeys.Contains(c))

           Case Else ' Other key is pressed.
               e.Handled = Not AllowedKeys.Contains(e.KeyChar)

       End Select

   End Sub


Otra manera sería que en lugar de usar un TextBox normal utilizases un MaskedTextbox y aplicarle una máscara numérica, usando la propiedad "Mask".

De todas formas no me ha quedado muy claro lo que pretendes conseguir, la función de ese textbox y porque intentas aplicarle un formato específico mientras el usuario typea.

5) Si tienes dudas acerca dle formato que le estás intentando dar al número, tienes información y ejemplos en MSDN:
· Double.ToString(IFormatProvider)
· Double.ToString(String)

Saludos
#6760
Buenas

1) Está prohibido revivir temas antiguos para preguntar, debes formular tu duda en un nuevo post.

2) Debes mostrar tu código si esperas poder recibir mejor ayuda.

3) La razón del error:

System.Net.Mail.SmtpException: The SMTP server requires a secure connection or the client was not authenticated
CitarThat error message is typically caused by one of the following:

   Incorrect connection settings, such as the wrong port specified for the secured or non-secured connection
   Incorrect credentials. I would verify the username and password combination, to make sure the credentials are correct.

4) Un ejemplo que a mi me funciona:

Código (vbnet) [Seleccionar]
   ' GMail Sender
   ' By Elektro
   '
   ' Usage Examples :
   ' GMailSender("Username@Gmail.com", "Password", "Email Subject", "Message Body", "Receiver@Address.com")
   '
   ''' <summary>
   ''' Sends an e-mail through GMail service.
   ''' </summary>
   ''' <param name="Username">Indicates the GMail account username.</param>
   ''' <param name="Password">Indicates the GMail account password.</param>
   ''' <param name="Subject">Indicates e-mail subject.</param>
   ''' <param name="Body">Indicates e-mail body.</param>
   ''' <param name="Addresses">Indicates the address(es) to send.</param>
   Private Sub GMailSender(ByVal Username As String,
                           ByVal Password As String,
                           ByVal Subject As String,
                           ByVal Body As String,
                           ByVal Addresses As String)

           Using MailSetup As New System.Net.Mail.MailMessage
             
               MailSetup.Subject = Subject
               MailSetup.To.Add(Addresses)
               MailSetup.From = New System.Net.Mail.MailAddress(Username)
               MailSetup.Body = Body

               Using SMTP As New System.Net.Mail.SmtpClient("smtp.gmail.com")
                   SMTP.Port = 587
                   SMTP.EnableSsl = True
                   SMTP.Credentials = New Net.NetworkCredential(Username, Password)
                   SMTP.Send(MailSetup)
               End Using ' SMTP

           End Using ' MailSetup

   End Sub


Tema cerrado.