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

#4981
Buenas

Para usar un servicio online, antes de ponerte a trastear primero tienes que analizar y/o documentarte sobre que parámetros puede tomar la query de dicho servicio.

Dicho esto, por lo que siempre he visto, es mala idea traducir la respuesta de GoogleTranslate, te va a dar cientos de problemas muy concretos de parsing, pero si aun así lo quieres intentar, entonces para intentar sacarle el máximo beneficio posible a lo que estás intentando hacer, obtén la respuesta en formato JSON, esto lo puedes hacer asignando el parámetro client con un valor que sea diferente a "t":

Ejemplo:
http://translate.google.com/translate_a/t?client=p&text=hola&sl=es&tl=en

Respuesta (RAW):
{"sentences":[{"trans":"Hello","orig":"hola","translit":"","src_translit":""}],"src":"es","server_time":26}

Respuesta formateada:
{
"sentences":
[
{
"trans":"Hello",
"orig":"hola",
"translit":"",
"src_translit":""
}
],
"src":"es",
"server_time":26
}


Puedes utilizar la ibrería JSON.Net (si no recuerdo mal la tienes disponible desde la consola NuGet de VisualStudio también) para llevar a cabo la tarea de parseo de la manera más eficiente.

PD: Hay proyectos de clientes gratuitos y muy elaborados de GoogleTranslate en C# que puedes encontrar en páginas cómo codeproject.com, pero ninguno es perfecto al intentar traducir en ciertas circunstancias (por las complicaciones variables del parseo de la respuesta). En cambio, la Web-API de pago de GoogleTranslate te lo da todo hecho de manera muy limpia y facil, sin complicaciones (al menos por lo que he visto en la documentación oficial de Google Dev).

Saludos!
#4982
Con poner en Google "KFC Rat" salen cientos de debunks a esta noticia, que claramente es un intento de fraude por parte del cliente, cliente que además al parecer se niega a cooperar con los representantes de KFC.

Es claramente un listillo que ya no puede seguir fingiendo.




Algunos datos interesantes:

Citar

CitarA customer has made a serious claim against KFC and refuses to cooperate in the investigation.

The images the customer originally posted do not include this second angle because it clearly shows it's a piece of hand-breaded white meat chicken.

Based on this, and the fact that he refuses to allow anyone to see the product, we are left to believe that he intended to deceive the public with this hoax and we are considering all options.



Citar

Where's the skull? Where are the legs? What about the third tower? Frying oil isn't hot enough to melt steel beams!

If you look at the evidence, it's clear that this is not a rat, it's just a piece of fried chicken with a "tail" of fat hanging off of it.

Fuente(s):
http://imgur.com/gallery/wxg9VcQ
http://gawker.com/kfconspiracy-did-kfc-serve-someone-a-fried-breaded-ra-1711946555
#4983
CitarTras comprobar que su pedido no era carne rebozada, sino una rata empanada, decidió denunciarlo y para demostrarlo no dudó en compartir las fotografías.

Yo no entiendo a la gente, es para cabrearse, con lo facil que sería aportar una prueba irrefutable quitando un poco de la superficie empanada para que se vea la carne y así poder comprobar si la piel tiene pelo de rata o es piel de pollo...

Así que sin pruebas, la forma de rata no demuestra evidencia alguna, unos ven a Jesucristo en las galletas, y otros pueden ver ratas donde puede que no haya nada más que pollo.

Tal vez solo sea un caso de alguien que busca dinero facil con una denuncia a una empresa cómo KFC, porque si hacer una foto al "alimento" sin rasgar la superficie ni mostrar fotos de la carne ni nada ...pues si esa es la única forma que este individuo ha encontrado para "demostrar" algo, entonces vamos apañados.

A mi me parece un FAAAKE.

Saludos!
#4984
CitarEs más, se me ocurre que también se podría usar ChrW(13).

El mismo "error" de nuevo. puedes utilizar la función Convert.ToChar.

Cita de: okik en 18 Junio 2015, 19:13 PMpero si uso vbCrlf ¿tampoco pasa nada no?. Quiero decir, que no afecta en nada al programa, supongo.

No, en realidad no pasa nada ...o según se mire,
los wrappers de vb6 siguen siendo puro código .Net, pero la razón de que existan es por compatibilidad, esto quiere decir que un buen día podrían dejar de existir,

pero, yo te lo comento más que nada por que simplemente el hecho de recurrir a las viejas técnicas o nombres de funciones de VB6 no es algo bueno ya que de alguna manera te estancas en esa tecnología de hace ya casi 2 décadas, y entonces no sigues buenas prácticas de programación en .Net, ya que esto es .Net, no VB6,

y, aunque de todas formas sea puro código .Net cómo ya he dicho, si vieras el código fuente de esos wrappers (mediante Reflection) es bastante horrible en comparación con el resto de sus equivalentes funciones built-in que no forman parte del namespace Microsoft.VisualBasic,
por ende, te recomiendo no utilizar practicamente ningún miembro que forme parte del namespace Microsoft.VisualBasic, es decir, ningún nombre de función que conozcas de Vb6 plus las constantes y todo eso, ya que todo tiene su equivalente en otras clases más "seguras" y optimizadas de .Net.

PD: En mi opinión, es una mala costumbre que les pasa a muchas personas, bien por que hacen la transición de vb6 a .net y preservan sus costumbres, o también a iniciados en VB.Net que hacen copy/pastes de Google, ya que en la mayoría de respuestas que encuentres en Google solo verás morralla vb6-estilizada de programadores que siguen este tipo de prácticas con VB.Net.

Saludos!
#4986
Foro Libre / Re: ¿Quién es tu sensei?
17 Junio 2015, 21:23 PM
Cita de: Gus Garsaky en 17 Junio 2015, 21:16 PMElektro, kub0x, números, Shell Root, WHK, Elektro, MinusFour, #dvry, .:UNDER:., engel lex y por supuesto el-brujo, y quizás más que no tuve la oportunidad de observar y conocer. Todos ellos son talentosos devs.

Que bien, yo salgo dos veces, ¡y el resto no!, chuparos esa!!, soy con diferencia el más sabio de los aquí presentes             ...(por supuesto que NO, ni de coña xD).




Este tipo de posts nunca me han gustado, solo consiguen calificar a unos pocos y dejar en el olvido a otros que tanto se merecen ser nombrados cómo el resto, cada uno tiene conocimientos de algún tipo distintos, es imposible clasificar por "sabio" a las personas de este foro, todos son sabios en un sentido o en otro.

Cualquiera de los helper-users que estamos acostumbrados a ver cómo por ejemplo al grande Gus Garsaky que he citado, o cualquiera del staff de elhacker es un buen ejemplo a seguir, ¿qué pasa por ejemplo son Simorg, Aprendiz-oscuro, y el resto que tienen amplios conocimientos de Hardware que ni de lejos tendremos nosotros?, cada uno cuenta en sabiduría.

Saludos!
#4987
Cita de: okik en 17 Junio 2015, 13:24 PMHe encontrado esta forma usando System.Windows.Forms.HtmlDocument y algo tan viejo como la función InStr.

El código que has mostrado está bastante vb6-estilizado.

En lugar de la función InStr, puedes utilizar la función String.IndexOf()

En lugar de la constante vbCrLf, puedes usar la constante ControlChars.CrLf

Saludos!
#4988
Foro Libre / Re: ¿Quién es tu sensei?
17 Junio 2015, 15:12 PM
Torbe, de ese si que se puede aprender cómo hacerle un poco de ingeniería inversa a la vida para convertirla en un paraiso, siendo muy feo y empezando desde la nada. :xD

Los conocimientos de todos los moderadores de Ing. Inversa me fascinan, ya que yo no me he desarrollado bien en ese aspecto, pero de entre los habituales de esa sección del foro, los conocimientos de un usuario llamado Mad Antrax sobre el cheating me asombran, aunque es un hueso muy duro de roer.

Saludos!
#4989
Analizando bastante a fondo la TEDIOSA class MethodInfo descubrí cómo resolverlo:

Código (vbnet) [Seleccionar]
Dim isSetLastError As Boolean =
   CType(expr.Body, MethodCallExpression).Method.GetCustomAttributes(False).
                                                 OfType(Of DllImportAttribute)().FirstOrDefault.SetLastError





EDITO:

Os dejo el método genérico si quereis testearlo, es simplemente el inicio de una solución todo-en-uno para ahorrar toneladas de repetición de escritura de código para llevar a cabo la misma tarea, y cómo tal puede no ser perfecto, de hecho no lo es, es imposible hacer una función de este estilo que sea "compatible" con la magnitud de funciones de la WinAPI, ya que la función GetLastError depende de la función "X" que haya sido llamada, en la que algunos casos no tiene por que devolver "0" para una salida exitosa, pero si estamos seguros del valor de retorno de las funciones que usemos entonces si que es bueno usarlo.

Código (vbnet) [Seleccionar]

   ''' ----------------------------------------------------------------------------------------------------
   ''' <remarks>
   ''' Title : SafePInvoke
   ''' Author: Elektro
   ''' Date  : 17-June-2015
   ''' </remarks>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' Invokes the specified encapsulated function, trying to provide a higher safety level for error-handling.
   ''' If the function that was called using platform invoke has the <see cref="DllImportAttribute.SetLastError"/>,
   ''' then it checks the exit code returned by the function, and, if is not a success code, throws a <see cref="Win32Exception"/>.
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <typeparam name="T"></typeparam>
   '''
   ''' <param name="expr">
   ''' The encapsulated function.
   ''' </param>
   '''
   ''' <param name="refResult">
   ''' The referenced result variable.
   ''' </param>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <returns>
   ''' The type of the return value depends on the function definition.
   ''' </returns>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <exception cref="Win32Exception">
   ''' Function 'X' thrown an unmanaged Win32 exception with error code 'X'.
   ''' </exception>
   ''' ----------------------------------------------------------------------------------------------------
   <DebuggerStepThrough>
    Private Shared Function SafePInvoke(Of T)(ByVal expr As Expression(Of Func(Of T)),
                                              Optional ByVal successCode As Integer = 0) As T

        Dim result As T = expr.Compile.Invoke()

        Dim method As MethodInfo =
            CType(expr.Body, MethodCallExpression).Method

        Dim isSetLastError As Boolean =
            method.GetCustomAttributes(inherit:=False).
                   OfType(Of DllImportAttribute)().FirstOrDefault.SetLastError

        If isSetLastError Then

            Dim exitCode As Integer = Marshal.GetLastWin32Error

            If exitCode <> successCode Then
                Throw New Win32Exception([error]:=exitCode,
                                         message:=String.Format("Function '{0}' thrown an unmanaged Win32 exception with error code '{1}'.",
                                                                method.Name, CStr(exitCode)))
            End If

        End If

        Return result

    End Function


Ejemplos de uso ...parciales:

Código (vbnet) [Seleccionar]
Dim length As Integer = SafePInvoke(Function() NativeMethods.GetWindowTextLength(hWnd))

Código (vbnet) [Seleccionar]
Dim sb As New StringBuilder(String.Empty, length)
SafePInvoke(Function() NativeMethods.GetWindowText(hWnd, sb, sb.Capacity + 1))


Saludos!
#4990
Cómo dice el título del tema, ¿alguien tiene puñetera idea de si es posible, tal vez mediante Reflection, cómo se puede comprobar los valores de los atributos de una firma de una declaración de invocación de plataforma?.

Código (csharp,1) [Seleccionar]
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
private static extern int xxx();


Código (vbnet,1) [Seleccionar]
<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)>
Private Shared Function xxx() As Integer
End Function


Basicamente necesito comprobar el valor de SetLastError en tiempo de ejecución, para determinar si es True o es False, pero parece un misterio sin resolver.

¿Alguien sabe de alguna referencia oficial de MSDN donde expliquen este detalle tan específico?, ¿cómo obtener los metadatos del método?.

Es para mejorar la lógica de este método genérico, ya que sin poder determinar ese detalle que me falta, no sirve para nada realizar un checkeo:
Código (vbnet) [Seleccionar]
   ''' <summary>
   ''' Invokes the encapsulated function, Tthen checks the exit code returned by the function that was called using platform invoke
   ''' that has the <see cref="DllImportAttribute.SetLastError"/> flag set.
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <exception cref="Win32Exception">
   ''' Function 'X' thrown an unmanaged Win32 exception with error code 'X'.
   ''' </exception>
   ''' ----------------------------------------------------------------------------------------------------
   Private Shared Sub SafePInvoke(Of T)(ByRef refResult As T, ByVal expr As expression(Of Func(Of T)))

       refResult = expr.Compile.Invoke()

       Dim exitCode As Integer = Marshal.GetLastWin32Error
       If exitCode <> 0 Then
           Throw New Win32Exception([error]:=exitCode, message:=String.Format("Function '{0}' thrown an unmanaged Win32 exception with error code '{1}'.",
                                                                              CType(expr.Body, MethodCallExpression).Method.Name, CStr(exitCode)))
       End If

   End Sub


Saludos!