elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Deseas probar algunas mejoras a la interfaz del foro? Prueba cake! acerca de


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 7 8 [9] 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 ... 1054
81  Programación / .NET / Re: Librería de Snippets para VB.Net !! (Compartan aquí sus snippets) en: 23 Diciembre 2017, 07:52
CÓMO OBTENER EL PRECIO DEL BITCOIN DE UNA CANTIDAD DE CUALQUIER CRIPTOMONEDA EN LA MONEDA QUE QUIERAS

Con el fin de ahorrar la escritura de código, reutilizaremos la enumeración que ya publiqué en este otro post:


( deben copiar y pegar la enumeración "Currencies" junto al código que mostraré a continuación para que funcione. )

En esta ocasión, la API que utilizaremos será: https://coinmarketcap.com/api/, la cual soporta muchas criptomonedas, aunque no muchas divisas.

Primero definiremos una interfáz con nombre ICryptoCurrency, que nos servirá para representar criptomonedas (Bitcoin, Ethereum, Litecoin, etcétera) y sus funcionalidades.

Código
  1. Public Interface ICryptoCurrency
  2.  
  3.    ''' <summary>
  4.    ''' Gets the canonical name of this <see cref="ICryptoCurrency"/>.
  5.    ''' </summary>
  6.    ReadOnly Property Name As String
  7.  
  8.    ''' <summary>
  9.    ''' Gets the symbol of this <see cref="ICryptoCurrency"/>.
  10.    ''' </summary>
  11.    ReadOnly Property Symbol As String
  12.  
  13.    ''' <summary>
  14.    ''' Gets the price equivalency for 1 amount of this <see cref="ICryptoCurrency"/> converted to the specified currency.
  15.    ''' </summary>
  16.    Function GetPrice(ByVal currency As Currencies) As Double
  17.  
  18.    ''' <summary>
  19.    ''' Gets the price equivalency for the specified amount of this <see cref="ICryptoCurrency"/> converted to the specified currency.
  20.    ''' </summary>
  21.    Function GetPrice(ByVal amount As Double, ByVal currency As Currencies) As Double
  22.  
  23.    ''' <summary>
  24.    ''' Asunchronously gets the price equivalency for 1 amount of this <see cref="ICryptoCurrency"/> converted to the specified currency.
  25.    ''' </summary>
  26.    Function GetPriceAsync(ByVal currency As Currencies) As Task(Of Double)
  27.  
  28.    ''' <summary>
  29.    ''' Asynchronously gets the price equivalency for the specified amount of this <see cref="ICryptoCurrency"/> converted to the specified currency.
  30.    ''' </summary>
  31.    Function GetPriceAsync(ByVal amount As Double, ByVal currency As Currencies) As Task(Of Double)
  32.  
  33. End Interface

Seguidamente implementamos las criptomodas que queramos, en este caso el Bitcoin y Ethereum:

( para implementar más criptomonedas solo tienen que copiar y pegar la clase del Bitcoin o del Ethereum, modificar el nombre y el símbolo para la nueva criptomoneda, y lo demás dejarlo todo exactamente igual... )

Código
  1. ''' <summary>
  2. ''' Represents the Bitcoin (symbol: BTC) cryptocurrency.
  3. ''' </summary>
  4. Public Class Bitcoin : Implements ICryptoCurrency
  5.  
  6.    Public Sub New()
  7.    End Sub
  8.  
  9.    Public ReadOnly Property Name As String = "Bitcoin" Implements ICryptoCurrency.Name
  10.  
  11.    Public ReadOnly Property Symbol As String = "BTC" Implements ICryptoCurrency.Symbol
  12.  
  13.    ''' <summary>
  14.    ''' Gets the price for 1 Bitcoins converted to the specified currency.
  15.    ''' </summary>
  16.    Public Overridable Function GetPrice(ByVal currency As Currencies) As Double Implements ICryptoCurrency.GetPrice
  17.        Return CryptoCurrencyUtil.GetCryptoCurrencyPrice(Me, 1, currency)
  18.    End Function
  19.  
  20.    ''' <summary>
  21.    ''' Gets the price for the specified amount of Bitcoins converted to the specified currency.
  22.    ''' </summary>
  23.    Public Overridable Function GetPrice(ByVal amount As Double, ByVal currency As Currencies) As Double Implements ICryptoCurrency.GetPrice
  24.        Return CryptoCurrencyUtil.GetCryptoCurrencyPrice(Me, amount, currency)
  25.    End Function
  26.  
  27.    ''' <summary>
  28.    ''' Asynchronously gets the price for 1 Bitcoins converted to the specified currency.
  29.    ''' </summary>
  30.    Public Overridable Async Function GetPriceAsync(ByVal currency As Currencies) As Task(Of Double) Implements ICryptoCurrency.GetPriceAsync
  31.        Return Await CryptoCurrencyUtil.GetCryptoCurrencyPriceAsync(Me, 1, currency)
  32.    End Function
  33.  
  34.    ''' <summary>
  35.    ''' Asynchronously gets the price for the specified amount of Bitcoins converted to the specified currency.
  36.    ''' </summary>
  37.    Public Overridable Async Function GetPriceAsync(ByVal amount As Double, ByVal currency As Currencies) As Task(Of Double) Implements ICryptoCurrency.GetPriceAsync
  38.        Return Await CryptoCurrencyUtil.GetCryptoCurrencyPriceAsync(Me, amount, currency)
  39.    End Function
  40.  
  41. End Class

Código
  1. ''' <summary>
  2. ''' Represents the Ethereum (symbol: ETH) cryptocurrency.
  3. ''' </summary>
  4. Public Class Ethereum : Implements ICryptoCurrency
  5.  
  6.    Public Sub New()
  7.    End Sub
  8.  
  9.    Public ReadOnly Property Name As String = "Ethereum" Implements ICryptoCurrency.Name
  10.  
  11.    Public ReadOnly Property Symbol As String = "ETH" Implements ICryptoCurrency.Symbol
  12.  
  13.    ''' <summary>
  14.    ''' Gets the price for 1 Ethereums converted to the specified currency.
  15.    ''' </summary>
  16.    Public Overridable Function GetPrice(ByVal currency As Currencies) As Double Implements ICryptoCurrency.GetPrice
  17.        Return CryptoCurrencyUtil.GetCryptoCurrencyPrice(Me, 1, currency)
  18.    End Function
  19.  
  20.    ''' <summary>
  21.    ''' Gets the price for the specified amount of Ethereums converted to the specified currency.
  22.    ''' </summary>
  23.    Public Overridable Function GetPrice(ByVal amount As Double, ByVal currency As Currencies) As Double Implements ICryptoCurrency.GetPrice
  24.        Return CryptoCurrencyUtil.GetCryptoCurrencyPrice(Me, amount, currency)
  25.    End Function
  26.  
  27.    ''' <summary>
  28.    ''' Asynchronously gets the price for 1 Ethereums converted to the specified currency.
  29.    ''' </summary>
  30.    Public Overridable Async Function GetPriceAsync(ByVal currency As Currencies) As Task(Of Double) Implements ICryptoCurrency.GetPriceAsync
  31.        Return Await CryptoCurrencyUtil.GetCryptoCurrencyPriceAsync(Me, 1, currency)
  32.    End Function
  33.  
  34.    ''' <summary>
  35.    ''' Asynchronously gets the price for the specified amount of Ethereums converted to the specified currency.
  36.    ''' </summary>
  37.    Public Overridable Async Function GetPriceAsync(ByVal amount As Double, ByVal currency As Currencies) As Task(Of Double) Implements ICryptoCurrency.GetPriceAsync
  38.        Return Await CryptoCurrencyUtil.GetCryptoCurrencyPriceAsync(Me, amount, currency)
  39.    End Function
  40.  
  41. End Class

Por último, creamos una clase con nombre CryptoCurrencyUtil en la que declararemos las funciones GetCryptoCurrencyPrice y GetCryptoCurrencyPriceAsync:

Código
  1. Public NotInheritable Class CryptoCurrencyUtil
  2.  
  3.    Private Sub New()
  4.    End Sub
  5.  
  6.    ''' ----------------------------------------------------------------------------------------------------
  7.    ''' <summary>
  8.    ''' Gets the price of the specified cryptocurrency converted to the target currency.
  9.    ''' </summary>
  10.    ''' ----------------------------------------------------------------------------------------------------
  11.    ''' <param name="cryptoCurrency">
  12.    ''' The source <see cref="ICryptoCurrency"/>.
  13.    ''' </param>
  14.    '''
  15.    ''' <param name="amount">
  16.    ''' The amount value of the source cryptocurrency.
  17.    ''' </param>
  18.    '''
  19.    ''' <param name="currency">
  20.    ''' The target currency.
  21.    ''' </param>
  22.    ''' ----------------------------------------------------------------------------------------------------
  23.    ''' <returns>
  24.    ''' The resulting price.
  25.    ''' </returns>
  26.    ''' ----------------------------------------------------------------------------------------------------
  27.    ''' <exception cref="NotImplementedException">
  28.    ''' The specified currency is not supported by this API.
  29.    ''' </exception>
  30.    '''
  31.    ''' <exception cref="HttpListenerException">
  32.    ''' The requested cryptocurrency rate info is empty due to an unknown error.
  33.    ''' </exception>
  34.    '''
  35.    ''' <exception cref="FormatException">
  36.    ''' Element name '{0}' not found. Unknown error reason.
  37.    ''' </exception>
  38.    ''' ----------------------------------------------------------------------------------------------------
  39.    <DebuggerStepThrough>
  40.    Public Shared Function GetCryptoCurrencyPrice(ByVal cryptoCurrency As ICryptoCurrency, ByVal amount As Double, ByVal currency As Currencies) As Double
  41.  
  42.        Dim t As New Task(Of Double)(
  43.            Function() As Double
  44.                Return CryptoCurrencyUtil.GetCryptoCurrencyPriceAsync(cryptoCurrency, amount, currency).Result
  45.            End Function)
  46.  
  47.        t.Start()
  48.        t.Wait()
  49.  
  50.        Return t.Result
  51.  
  52.    End Function
  53.  
  54.    ''' ----------------------------------------------------------------------------------------------------
  55.    ''' <summary>
  56.    ''' Asynchronously gets the price of the specified cryptocurrency converted to the target currency.
  57.    ''' </summary>
  58.    ''' ----------------------------------------------------------------------------------------------------
  59.    ''' <param name="cryptoCurrency">
  60.    ''' The source <see cref="ICryptoCurrency"/>.
  61.    ''' </param>
  62.    '''
  63.    ''' <param name="amount">
  64.    ''' The amount value of the source cryptocurrency.
  65.    ''' </param>
  66.    '''
  67.    ''' <param name="currency">
  68.    ''' The target currency.
  69.    ''' </param>
  70.    ''' ----------------------------------------------------------------------------------------------------
  71.    ''' <returns>
  72.    ''' The resulting price.
  73.    ''' </returns>
  74.    ''' ----------------------------------------------------------------------------------------------------
  75.    ''' <exception cref="NotImplementedException">
  76.    ''' The specified currency is not supported by this API.
  77.    ''' </exception>
  78.    '''
  79.    ''' <exception cref="HttpListenerException">
  80.    ''' The requested cryptocurrency rate info is empty due to an unknown error.
  81.    ''' </exception>
  82.    '''
  83.    ''' <exception cref="FormatException">
  84.    ''' Element name '{0}' not found. Unknown error reason.
  85.    ''' </exception>
  86.    ''' ----------------------------------------------------------------------------------------------------
  87.    <DebuggerStepThrough>
  88.    Public Shared Async Function GetCryptoCurrencyPriceAsync(ByVal cryptoCurrency As ICryptoCurrency, ByVal amount As Double, ByVal currency As Currencies) As Task(Of Double)
  89.  
  90.        Dim validCurrencies As String() =
  91.        {
  92.            "AUD", "BRL", "CAD", "CHF", "CLP", "CNY", "CZK", "DKK",
  93.            "EUR", "GBP", "HKD", "HUF", "IDR", "ILS", "INR", "JPY",
  94.            "KRW", "MXN", "MYR", "NOK", "NZD", "PHP", "PKR", "PLN",
  95.            "RUB", "SEK", "SGD", "THB", "TRY", "TWD", "USD", "ZAR"
  96.        }
  97.  
  98.        If Not validCurrencies.Contains(currency.ToString().ToUpper()) Then
  99.            Throw New NotImplementedException("The specified currency is not supported by this API.",
  100.                                              New ArgumentException("", paramName:="currency"))
  101.        End If
  102.  
  103.        Dim uri As New Uri(String.Format("https://api.coinmarketcap.com/v1/ticker/{0}/?convert={1}",
  104.                                         cryptoCurrency.Name, currency.ToString()))
  105.  
  106.        Dim req As WebRequest = WebRequest.Create(uri)
  107.        Using res As WebResponse = Await req.GetResponseAsync(),
  108.                  SR As New StreamReader(res.GetResponseStream()),
  109.                  XmlReader As XmlDictionaryReader =
  110.                      JsonReaderWriterFactory.CreateJsonReader(SR.BaseStream, Encoding.UTF8, New XmlDictionaryReaderQuotas, Nothing)
  111.  
  112.            Dim xml As XElement = XElement.Load(XmlReader)
  113.            If (xml.IsEmpty) Then
  114.                Dim errMsg As String = String.Format("The requested cryptocurrency rate info is empty due to an unknown error. ""{0}""", uri.ToString())
  115.                Throw New HttpListenerException(HttpStatusCode.NotFound, errMsg)
  116.            End If
  117.  
  118.            Dim elementName As String = String.Format("price_{0}", currency.ToString().ToLower())
  119.            Dim element As XElement = xml.Element("item").Element(elementName)
  120.            If (element Is Nothing) Then
  121.                Throw New FormatException(String.Format("Element name '{0}' not found. Unknown error reason.", elementName))
  122.            End If
  123.  
  124.            Dim price As Double = Double.Parse(element.Value, NumberStyles.Currency, New NumberFormatInfo With {.CurrencyDecimalSeparator = "."})
  125.            Select Case amount
  126.                Case Is = 1
  127.                    Return price
  128.                Case Is < 1
  129.                    Return (price / (1 / amount))
  130.                Case Else ' > 1
  131.                    Return (price * amount)
  132.            End Select
  133.  
  134.        End Using
  135.  
  136.    End Function
  137.  
  138. End Class

LISTO.

Modo de empleo para obtener la equivalencia de 1 bitcoins a dólares:
Código
  1. Dim btc As New Bitcoin()
  2. Dim price As Double = btc.GetPrice(Currencies.USD)
  3. Debug.WriteLine(String.Format("{0:C}", price, CultureInfo.CurrentCulture))

O tambien:
Código
  1. Dim cryptoCurrency As ICryptoCurrency = New Bitcoin()
  2. Dim price As Double = CryptoCurrencyUtil.GetCryptoCurrencyPrice(cryptoCurrency, 1, Currencies.USD)
  3. Debug.WriteLine(String.Format("{0:C}", price, CultureInfo.CurrentCulture))

Modo de empleo para obtener la equivalencia de 5.86 ethereums a dólares:
Código
  1. Dim eth As New Ethereum()
  2. Dim price As Double = eth.GetPrice(5.86, Currencies.USD)
  3. Debug.WriteLine(String.Format("{0:C}", price, CultureInfo.CurrentCulture))

O tambien:
Código
  1. Dim cryptoCurrency As ICryptoCurrency = New Ethereum()
  2. Dim price As Double = CryptoCurrencyUtil.GetCryptoCurrencyPrice(cryptoCurrency, 5.86, Currencies.USD)
  3. Debug.WriteLine(String.Format("{0:C}", price, CultureInfo.CurrentCulture))




EDITO:
Se me olvidaba comentar... que por supuesto el nombre de la criptomoneda debe ser soportado por la API en cuestión... o mejor dicho el identificador, el campo "id" (no el campo "name"), así que quizás quieran adaptar las representaciones de criptomonedas para añadirle una propiedad con nombre "id" para ese propósito...

Aquí pueden ver todos los campos que devuelve el documento JSON:

Nótese que en el caso de Bitcoin y Ethereum el nombre es igual que el identificador para la API, por eso lo he simplificado y no he implimentado el campo "Id", pero no todos los nombres son iguales que los identificadores, véase un ejemplo:
...
id   "bitcoin-cash"
name   "Bitcoin Cash"
...

Saludos.
82  Programación / .NET / Re: Librería de Snippets para VB.Net !! (Compartan aquí sus snippets) en: 23 Diciembre 2017, 04:28
¿CÓMO OBTENER UNA REFERENCIA A TODOS LOS PROCESOS HIJO DE UN PROCESO?

Código
  1. ''' ----------------------------------------------------------------------------------------------------
  2. ''' <summary>
  3. ''' Gets the child processes of the source <see cref="Process"/>.
  4. ''' </summary>
  5. ''' ----------------------------------------------------------------------------------------------------
  6. ''' <param name="p">
  7. ''' The source <see cref="Process"/>.
  8. ''' </param>
  9. ''' ----------------------------------------------------------------------------------------------------
  10. ''' <returns>
  11. ''' A <see cref="IEnumerable(Of Process)"/> containing the child processes.
  12. ''' </returns>
  13. ''' ----------------------------------------------------------------------------------------------------
  14. <DebuggerStepThrough>
  15. Public Sahred Iterator Function GetChildProcesses(ByVal p As Process) As IEnumerable(Of Process)
  16.  
  17.    Dim scope As New ManagementScope("root\CIMV2")p.Id))
  18.    Dim options As New EnumerationOptions With {
  19.        .ReturnImmediately = True,
  20.        .Rewindable = False,
  21.        .DirectRead = True,
  22.        .EnumerateDeep = False
  23.    }
  24.  
  25.    Using mos As New ManagementObjectSearcher(scope, query, options),
  26.          moc As ManagementObjectCollection = mos.Get()
  27.  
  28.        For Each mo As ManagementObject In moc
  29.            Dim value As Object = mo.Properties("ProcessID").Value()
  30.            If (value IsNot Nothing) Then
  31.                Yield Process.GetProcessById(CInt(value))
  32.            End If
  33.        Next
  34.    End Using
  35.  
  36. End Function

Modo de empleo:
Código
  1. Dim mainProcess As Process = Process.GetProcessesByName("explorer").Single()
  2. Dim childProcesses As IEnumerable(Of Process) = GetChildProcesses(mainProcess)
  3.  
  4. For Each p As Process In childProcesses
  5.    Console.WriteLine(p.ProcessName)
  6. Next

Saludos.
83  Programación / .NET / Re: Librería de Snippets para VB.Net !! (Compartan aquí sus snippets) en: 23 Diciembre 2017, 04:19
CÓMO OBTENER EL PRECIO DEL BITCOIN EN LA MONEDA QUE QUIERAS

Bueno, pues buscando alguna API gratuita y sin muchas limitaciones, encontré https://bitpay.com/api (de hecho, parece que no tiene ninguna limitación de peticiones por mes, pero no estoy completamente seguro.)

La sintaxis de la consulta es sencilla: "https://bitpay.com/api/rates/BTC/{NOMBRE_DE_MONEDA}" -así que primero creamos la siguiente enumeración con los nombres de monedas aceptados por la API (o en su defecto, un diccionario. como prefieran adaptarlo):

Código
  1. ''' ----------------------------------------------------------------------------------------------------
  2. ''' <summary>
  3. ''' Specifies the ISO-4217 3-character currency codes.
  4. ''' </summary>
  5. ''' ----------------------------------------------------------------------------------------------------
  6. Public Enum Currencies As Integer
  7.  
  8.    ''' <summary>
  9.    ''' UAE Dirham
  10.    ''' </summary>
  11.    AED
  12.  
  13.    ''' <summary>
  14.    ''' Afghan Afghani
  15.    ''' </summary>
  16.    AFN
  17.  
  18.    ''' <summary>
  19.    ''' Albanian Lek
  20.    ''' </summary>
  21.    ALL
  22.  
  23.    ''' <summary>
  24.    ''' Armenian Dram
  25.    ''' </summary>
  26.    AMD
  27.  
  28.    ''' <summary>
  29.    ''' Netherlands Antillean Guilder
  30.    ''' </summary>
  31.    ANG
  32.  
  33.    ''' <summary>
  34.    ''' Angolan Kwanza
  35.    ''' </summary>
  36.    AOA
  37.  
  38.    ''' <summary>
  39.    ''' Argentine Peso
  40.    ''' </summary>
  41.    ARS
  42.  
  43.    ''' <summary>
  44.    ''' Australian Dollar
  45.    ''' </summary>
  46.    AUD
  47.  
  48.    ''' <summary>
  49.    ''' Aruban Florin
  50.    ''' </summary>
  51.    AWG
  52.  
  53.    ''' <summary>
  54.    ''' Azerbaijani Manat
  55.    ''' </summary>
  56.    AZN
  57.  
  58.    ''' <summary>
  59.    ''' Bosnia-Herzegovina Convertible Mark
  60.    ''' </summary>
  61.    BAM
  62.  
  63.    ''' <summary>
  64.    ''' Barbadian Dollar
  65.    ''' </summary>
  66.    BBD
  67.  
  68.    ''' <summary>
  69.    ''' Bitcoin Cash
  70.    ''' </summary>
  71.    BCH
  72.  
  73.    ''' <summary>
  74.    ''' Bangladeshi Taka
  75.    ''' </summary>
  76.    BDT
  77.  
  78.    ''' <summary>
  79.    ''' Bulgarian Lev
  80.    ''' </summary>
  81.    BGN
  82.  
  83.    ''' <summary>
  84.    ''' Bahraini Dinar
  85.    ''' </summary>
  86.    BHD
  87.  
  88.    ''' <summary>
  89.    ''' Burundian Franc
  90.    ''' </summary>
  91.    BIF
  92.  
  93.    ''' <summary>
  94.    ''' Bermudan Dollar
  95.    ''' </summary>
  96.    BMD
  97.  
  98.    ''' <summary>
  99.    ''' Brunei Dollar
  100.    ''' </summary>
  101.    BND
  102.  
  103.    ''' <summary>
  104.    ''' Bolivian Boliviano
  105.    ''' </summary>
  106.    BOB
  107.  
  108.    ''' <summary>
  109.    ''' Brazilian Real
  110.    ''' </summary>
  111.    BRL
  112.  
  113.    ''' <summary>
  114.    ''' Bahamian Dollar
  115.    ''' </summary>
  116.    BSD
  117.  
  118.    ''' <summary>
  119.    ''' Bhutanese Ngultrum
  120.    ''' </summary>
  121.    BTN
  122.  
  123.    ''' <summary>
  124.    ''' Botswanan Pula
  125.    ''' </summary>
  126.    BWP
  127.  
  128.    ''' <summary>
  129.    ''' Belize Dollar
  130.    ''' </summary>
  131.    BZD
  132.  
  133.    ''' <summary>
  134.    ''' Canadian Dollar
  135.    ''' </summary>
  136.    CAD
  137.  
  138.    ''' <summary>
  139.    ''' Congolese Franc
  140.    ''' </summary>
  141.    CDF
  142.  
  143.    ''' <summary>
  144.    ''' Swiss Franc
  145.    ''' </summary>
  146.    CHF
  147.  
  148.    ''' <summary>
  149.    ''' Chilean Unit of Account (UF)
  150.    ''' </summary>
  151.    CLF
  152.  
  153.    ''' <summary>
  154.    ''' Chilean Peso
  155.    ''' </summary>
  156.    CLP
  157.  
  158.    ''' <summary>
  159.    ''' Chinese Yuan
  160.    ''' </summary>
  161.    CNY
  162.  
  163.    ''' <summary>
  164.    ''' Colombian Peso
  165.    ''' </summary>
  166.    COP
  167.  
  168.    ''' <summary>
  169.    ''' Costa Rican Colón
  170.    ''' </summary>
  171.    CRC
  172.  
  173.    ''' <summary>
  174.    ''' Cuban Peso
  175.    ''' </summary>
  176.    CUP
  177.  
  178.    ''' <summary>
  179.    ''' Cape Verdean Escudo
  180.    ''' </summary>
  181.    CVE
  182.  
  183.    ''' <summary>
  184.    ''' Czech Koruna
  185.    ''' </summary>
  186.    CZK
  187.  
  188.    ''' <summary>
  189.    ''' Djiboutian Franc
  190.    ''' </summary>
  191.    DJF
  192.  
  193.    ''' <summary>
  194.    ''' Danish Krone
  195.    ''' </summary>
  196.    DKK
  197.  
  198.    ''' <summary>
  199.    ''' Dominican Peso
  200.    ''' </summary>
  201.    DOP
  202.  
  203.    ''' <summary>
  204.    ''' Algerian Dinar
  205.    ''' </summary>
  206.    DZD
  207.  
  208.    ''' <summary>
  209.    ''' Egyptian Pound
  210.    ''' </summary>
  211.    EGP
  212.  
  213.    ''' <summary>
  214.    ''' Ethiopian Birr
  215.    ''' </summary>
  216.    ETB
  217.  
  218.    ''' <summary>
  219.    ''' Eurozone Euro
  220.    ''' </summary>
  221.    EUR
  222.  
  223.    ''' <summary>
  224.    ''' Fijian Dollar
  225.    ''' </summary>
  226.    FJD
  227.  
  228.    ''' <summary>
  229.    ''' Falkland Islands Pound
  230.    ''' </summary>
  231.    FKP
  232.  
  233.    ''' <summary>
  234.    ''' Pound Sterling
  235.    ''' </summary>
  236.    GBP
  237.  
  238.    ''' <summary>
  239.    ''' Georgian Lari
  240.    ''' </summary>
  241.    GEL
  242.  
  243.    ''' <summary>
  244.    ''' Ghanaian Cedi
  245.    ''' </summary>
  246.    GHS
  247.  
  248.    ''' <summary>
  249.    ''' Gibraltar Pound
  250.    ''' </summary>
  251.    GIP
  252.  
  253.    ''' <summary>
  254.    ''' Gambian Dalasi
  255.    ''' </summary>
  256.    GMD
  257.  
  258.    ''' <summary>
  259.    ''' Guinean Franc
  260.    ''' </summary>
  261.    GNF
  262.  
  263.    ''' <summary>
  264.    ''' Guatemalan Quetzal
  265.    ''' </summary>
  266.    GTQ
  267.  
  268.    ''' <summary>
  269.    ''' Guyanaese Dollar
  270.    ''' </summary>
  271.    GYD
  272.  
  273.    ''' <summary>
  274.    ''' Hong Kong Dollar
  275.    ''' </summary>
  276.    HKD
  277.  
  278.    ''' <summary>
  279.    ''' Honduran Lempira
  280.    ''' </summary>
  281.    HNL
  282.  
  283.    ''' <summary>
  284.    ''' Croatian Kuna
  285.    ''' </summary>
  286.    HRK
  287.  
  288.    ''' <summary>
  289.    ''' Haitian Gourde
  290.    ''' </summary>
  291.    HTG
  292.  
  293.    ''' <summary>
  294.    ''' Hungarian Forint
  295.    ''' </summary>
  296.    HUF
  297.  
  298.    ''' <summary>
  299.    ''' Indonesian Rupiah
  300.    ''' </summary>
  301.    IDR
  302.  
  303.    ''' <summary>
  304.    ''' Israeli Shekel
  305.    ''' </summary>
  306.    ILS
  307.  
  308.    ''' <summary>
  309.    ''' Indian Rupee
  310.    ''' </summary>
  311.    INR
  312.  
  313.    ''' <summary>
  314.    ''' Iraqi Dinar
  315.    ''' </summary>
  316.    IQD
  317.  
  318.    ''' <summary>
  319.    ''' Iranian Rial
  320.    ''' </summary>
  321.    IRR
  322.  
  323.    ''' <summary>
  324.    ''' Icelandic Króna
  325.    ''' </summary>
  326.    ISK
  327.  
  328.    ''' <summary>
  329.    ''' Jersey Pound
  330.    ''' </summary>
  331.    JEP
  332.  
  333.    ''' <summary>
  334.    ''' Jamaican Dollar
  335.    ''' </summary>
  336.    JMD
  337.  
  338.    ''' <summary>
  339.    ''' Jordanian Dinar
  340.    ''' </summary>
  341.    JOD
  342.  
  343.    ''' <summary>
  344.    ''' Japanese Yen
  345.    ''' </summary>
  346.    JPY
  347.  
  348.    ''' <summary>
  349.    ''' Kenyan Shilling
  350.    ''' </summary>
  351.    KES
  352.  
  353.    ''' <summary>
  354.    ''' Kyrgystani Som
  355.    ''' </summary>
  356.    KGS
  357.  
  358.    ''' <summary>
  359.    ''' Cambodian Riel
  360.    ''' </summary>
  361.    KHR
  362.  
  363.    ''' <summary>
  364.    ''' Comorian Franc
  365.    ''' </summary>
  366.    KMF
  367.  
  368.    ''' <summary>
  369.    ''' North Korean Won
  370.    ''' </summary>
  371.    KPW
  372.  
  373.    ''' <summary>
  374.    ''' South Korean Won
  375.    ''' </summary>
  376.    KRW
  377.  
  378.    ''' <summary>
  379.    ''' Kuwaiti Dinar
  380.    ''' </summary>
  381.    KWD
  382.  
  383.    ''' <summary>
  384.    ''' Cayman Islands Dollar
  385.    ''' </summary>
  386.    KYD
  387.  
  388.    ''' <summary>
  389.    ''' Kazakhstani Tenge
  390.    ''' </summary>
  391.    KZT
  392.  
  393.    ''' <summary>
  394.    ''' Laotian Kip
  395.    ''' </summary>
  396.    LAK
  397.  
  398.    ''' <summary>
  399.    ''' Lebanese Pound
  400.    ''' </summary>
  401.    LBP
  402.  
  403.    ''' <summary>
  404.    ''' Sri Lankan Rupee
  405.    ''' </summary>
  406.    LKR
  407.  
  408.    ''' <summary>
  409.    ''' Liberian Dollar
  410.    ''' </summary>
  411.    LRD
  412.  
  413.    ''' <summary>
  414.    ''' Lesotho Loti
  415.    ''' </summary>
  416.    LSL
  417.  
  418.    ''' <summary>
  419.    ''' Libyan Dinar
  420.    ''' </summary>
  421.    LYD
  422.  
  423.    ''' <summary>
  424.    ''' Moroccan Dirham
  425.    ''' </summary>
  426.    MAD
  427.  
  428.    ''' <summary>
  429.    ''' Moldovan Leu
  430.    ''' </summary>
  431.    MDL
  432.  
  433.    ''' <summary>
  434.    ''' Malagasy Ariary
  435.    ''' </summary>
  436.    MGA
  437.  
  438.    ''' <summary>
  439.    ''' Macedonian Denar
  440.    ''' </summary>
  441.    MKD
  442.  
  443.    ''' <summary>
  444.    ''' Myanma Kyat
  445.    ''' </summary>
  446.    MMK
  447.  
  448.    ''' <summary>
  449.    ''' Mongolian Tugrik
  450.    ''' </summary>
  451.    MNT
  452.  
  453.    ''' <summary>
  454.    ''' Macanese Pataca
  455.    ''' </summary>
  456.    MOP
  457.  
  458.    ''' <summary>
  459.    ''' Mauritanian Ouguiya
  460.    ''' </summary>
  461.    MRO
  462.  
  463.    ''' <summary>
  464.    ''' Mauritian Rupee
  465.    ''' </summary>
  466.    MUR
  467.  
  468.    ''' <summary>
  469.    ''' Maldivian Rufiyaa
  470.    ''' </summary>
  471.    MVR
  472.  
  473.    ''' <summary>
  474.    ''' Malawian Kwacha
  475.    ''' </summary>
  476.    MWK
  477.  
  478.    ''' <summary>
  479.    ''' Mexican Peso
  480.    ''' </summary>
  481.    MXN
  482.  
  483.    ''' <summary>
  484.    ''' Malaysian Ringgit
  485.    ''' </summary>
  486.    MYR
  487.  
  488.    ''' <summary>
  489.    ''' Mozambican Metical
  490.    ''' </summary>
  491.    MZN
  492.  
  493.    ''' <summary>
  494.    ''' Namibian Dollar
  495.    ''' </summary>
  496.    NAD
  497.  
  498.    ''' <summary>
  499.    ''' Nigerian Naira
  500.    ''' </summary>
  501.    NGN
  502.  
  503.    ''' <summary>
  504.    ''' Nicaraguan Córdoba
  505.    ''' </summary>
  506.    NIO
  507.  
  508.    ''' <summary>
  509.    ''' Norwegian Krone
  510.    ''' </summary>
  511.    NOK
  512.  
  513.    ''' <summary>
  514.    ''' Nepalese Rupee
  515.    ''' </summary>
  516.    NPR
  517.  
  518.    ''' <summary>
  519.    ''' New Zealand Dollar
  520.    ''' </summary>
  521.    NZD
  522.  
  523.    ''' <summary>
  524.    ''' Omani Rial
  525.    ''' </summary>
  526.    OMR
  527.  
  528.    ''' <summary>
  529.    ''' Panamanian Balboa
  530.    ''' </summary>
  531.    PAB
  532.  
  533.    ''' <summary>
  534.    ''' Peruvian Nuevo Sol
  535.    ''' </summary>
  536.    PEN
  537.  
  538.    ''' <summary>
  539.    ''' Papua New Guinean Kina
  540.    ''' </summary>
  541.    PGK
  542.  
  543.    ''' <summary>
  544.    ''' Philippine Peso
  545.    ''' </summary>
  546.    PHP
  547.  
  548.    ''' <summary>
  549.    ''' Pakistani Rupee
  550.    ''' </summary>
  551.    PKR
  552.  
  553.    ''' <summary>
  554.    ''' Polish Zloty
  555.    ''' </summary>
  556.    PLN
  557.  
  558.    ''' <summary>
  559.    ''' Paraguayan Guarani
  560.    ''' </summary>
  561.    PYG
  562.  
  563.    ''' <summary>
  564.    ''' Qatari Rial
  565.    ''' </summary>
  566.    QAR
  567.  
  568.    ''' <summary>
  569.    ''' Romanian Leu
  570.    ''' </summary>
  571.    RON
  572.  
  573.    ''' <summary>
  574.    ''' Serbian Dinar
  575.    ''' </summary>
  576.    RSD
  577.  
  578.    ''' <summary>
  579.    ''' Russian Ruble
  580.    ''' </summary>
  581.    RUB
  582.  
  583.    ''' <summary>
  584.    ''' Rwandan Franc
  585.    ''' </summary>
  586.    RWF
  587.  
  588.    ''' <summary>
  589.    ''' Saudi Riyal
  590.    ''' </summary>
  591.    SAR
  592.  
  593.    ''' <summary>
  594.    ''' Solomon Islands Dollar
  595.    ''' </summary>
  596.    SBD
  597.  
  598.    ''' <summary>
  599.    ''' Seychellois Rupee
  600.    ''' </summary>
  601.    SCR
  602.  
  603.    ''' <summary>
  604.    ''' Sudanese Pound
  605.    ''' </summary>
  606.    SDG
  607.  
  608.    ''' <summary>
  609.    ''' Swedish Krona
  610.    ''' </summary>
  611.    SEK
  612.  
  613.    ''' <summary>
  614.    ''' Singapore Dollar
  615.    ''' </summary>
  616.    SGD
  617.  
  618.    ''' <summary>
  619.    ''' Saint Helena Pound
  620.    ''' </summary>
  621.    SHP
  622.  
  623.    ''' <summary>
  624.    ''' Sierra Leonean Leone
  625.    ''' </summary>
  626.    SLL
  627.  
  628.    ''' <summary>
  629.    ''' Somali Shilling
  630.    ''' </summary>
  631.    SOS
  632.  
  633.    ''' <summary>
  634.    ''' Surinamese Dollar
  635.    ''' </summary>
  636.    SRD
  637.  
  638.    ''' <summary>
  639.    ''' São Tomé and Príncipe Dobra
  640.    ''' </summary>
  641.    STD
  642.  
  643.    ''' <summary>
  644.    ''' Salvadoran Colón
  645.    ''' </summary>
  646.    SVC
  647.  
  648.    ''' <summary>
  649.    ''' Syrian Pound
  650.    ''' </summary>
  651.    SYP
  652.  
  653.    ''' <summary>
  654.    ''' Swazi Lilangeni
  655.    ''' </summary>
  656.    SZL
  657.  
  658.    ''' <summary>
  659.    ''' Thai Baht
  660.    ''' </summary>
  661.    THB
  662.  
  663.    ''' <summary>
  664.    ''' Tajikistani Somoni
  665.    ''' </summary>
  666.    TJS
  667.  
  668.    ''' <summary>
  669.    ''' Turkmenistani Manat
  670.    ''' </summary>
  671.    TMT
  672.  
  673.    ''' <summary>
  674.    ''' Tunisian Dinar
  675.    ''' </summary>
  676.    TND
  677.  
  678.    ''' <summary>
  679.    ''' Tongan Pa&#699;anga
  680.    ''' </summary>
  681.    TOP
  682.  
  683.    ''' <summary>
  684.    ''' Turkish Lira
  685.    ''' </summary>
  686.    [TRY]
  687.  
  688.    ''' <summary>
  689.    ''' Trinidad and Tobago Dollar
  690.    ''' </summary>
  691.    TTD
  692.  
  693.    ''' <summary>
  694.    ''' New Taiwan Dollar
  695.    ''' </summary>
  696.    TWD
  697.  
  698.    ''' <summary>
  699.    ''' Tanzanian Shilling
  700.    ''' </summary>
  701.    TZS
  702.  
  703.    ''' <summary>
  704.    ''' Ukrainian Hryvnia
  705.    ''' </summary>
  706.    UAH
  707.  
  708.    ''' <summary>
  709.    ''' Ugandan Shilling
  710.    ''' </summary>
  711.    UGX
  712.  
  713.    ''' <summary>
  714.    ''' US Dollar
  715.    ''' </summary>
  716.    USD
  717.  
  718.    ''' <summary>
  719.    ''' Uruguayan Peso
  720.    ''' </summary>
  721.    UYU
  722.  
  723.    ''' <summary>
  724.    ''' Uzbekistan Som
  725.    ''' </summary>
  726.    UZS
  727.  
  728.    ''' <summary>
  729.    ''' Venezuelan Bolívar Fuerte
  730.    ''' </summary>
  731.    VEF
  732.  
  733.    ''' <summary>
  734.    ''' Vietnamese Dong
  735.    ''' </summary>
  736.    VND
  737.  
  738.    ''' <summary>
  739.    ''' Vanuatu Vatu
  740.    ''' </summary>
  741.    VUV
  742.  
  743.    ''' <summary>
  744.    ''' Samoan Tala
  745.    ''' </summary>
  746.    WST
  747.  
  748.    ''' <summary>
  749.    ''' CFA Franc BEAC
  750.    ''' </summary>
  751.    XAF
  752.  
  753.    ''' <summary>
  754.    ''' Silver (troy ounce)
  755.    ''' </summary>
  756.    XAG
  757.  
  758.    ''' <summary>
  759.    ''' Gold (troy ounce)
  760.    ''' </summary>
  761.    XAU
  762.  
  763.    ''' <summary>
  764.    ''' East Caribbean Dollar
  765.    ''' </summary>
  766.    XCD
  767.  
  768.    ''' <summary>
  769.    ''' CFA Franc BCEAO
  770.    ''' </summary>
  771.    XOF
  772.  
  773.    ''' <summary>
  774.    ''' CFP Franc
  775.    ''' </summary>
  776.    XPF
  777.  
  778.    ''' <summary>
  779.    ''' Yemeni Rial
  780.    ''' </summary>
  781.    YER
  782.  
  783.    ''' <summary>
  784.    ''' South African Rand
  785.    ''' </summary>
  786.    ZAR
  787.  
  788.    ''' <summary>
  789.    ''' Zambian Kwacha
  790.    ''' </summary>
  791.    ZMW
  792.  
  793.    ''' <summary>
  794.    ''' Zimbabwean Dollar
  795.    ''' </summary>
  796.    ZWL
  797.  
  798. End Enum
  799.  

Y con eso, podemos hacer una función de uso genérico que tome como argumento un valor de la enumeración, usar la API y parsear el documento JSON devuelto para obtener el valor del Bitcoin:

Código
  1. Imports System.Globalization
  2. Imports System.IO
  3. Imports System.Net
  4. Imports System.Runtime.Serialization.Json
  5. Imports System.Text
  6. Imports System.Xml

Código
  1. ''' ----------------------------------------------------------------------------------------------------
  2. ''' <summary>
  3. ''' Gets the price of 1 Bitcoin in the specified currency.
  4. ''' </summary>
  5. ''' ----------------------------------------------------------------------------------------------------
  6. ''' <param name="currency">
  7. ''' The currency.
  8. ''' </param>
  9. ''' ----------------------------------------------------------------------------------------------------
  10. ''' <returns>
  11. ''' The resulting price.
  12. ''' </returns>
  13. ''' ----------------------------------------------------------------------------------------------------
  14. ''' <exception cref="HttpListenerException">
  15. ''' The returned Bitcoin rate info is empty due to an unknown error.
  16. ''' </exception>
  17. ''' ----------------------------------------------------------------------------------------------------
  18. <DebuggerStepThrough>
  19. Private Shared Function GetBitcoinPrice(ByVal currency As Currencies) As Decimal
  20.  
  21.    Dim uri As New Uri(String.Format("https://bitpay.com/api/rates/BTC/{0}", currency.ToString()))
  22.    Dim req As WebRequest = WebRequest.Create(uri)
  23.  
  24.    Using res As WebResponse = req.GetResponse(),
  25.          sr As New StreamReader(res.GetResponseStream()),
  26.          xmlReader As XmlDictionaryReader =
  27.              JsonReaderWriterFactory.CreateJsonReader(sr.BaseStream, Encoding.UTF8, New XmlDictionaryReaderQuotas, Nothing)
  28.  
  29.        Dim xml As XElement = XElement.Load(xmlReader)
  30.        If (xml.IsEmpty) Then
  31.            Dim errMsg As String = String.Format("The returned Bitcoin rate info is empty due to an unknown error. ""{0}""", uri.ToString())
  32.            Throw New HttpListenerException(HttpStatusCode.NotFound, errMsg)
  33.        End If
  34.  
  35.        Return Decimal.Parse(xml.<rate>.Value, NumberStyles.Currency, New NumberFormatInfo With {.CurrencyDecimalSeparator = "."})
  36.  
  37.    End Using
  38.  
  39. End Function

Modo de empleo:
Código
  1. Dim price As Decimal = GetBitcoinPrice(Currencies.USD)
  2. Console.WriteLine(price)

Saludos.
84  Programación / .NET / Re: Velocidad 2 Proyectos diferentes o Todo en una misma solucion?? en: 22 Diciembre 2017, 19:54
las referencias que hacia a archivos externos, la utilice dentro de la misma solucion como "clases"

A menos que intentes explicarte mejor usando otras palabras... no entiendo muy bien a que te refieres, ¿que es eso de convertir referencias de archivos de texto, a clases?. De todas formas te puedo decir que trabajar con operaciones I/O de lectura sobre archivos locales por supuesto es más lento que trabajar con el bloque de asignación de memoria de tu programa.



los archivos exe que llama , crearlos en la misma solucion, para no llamar al exe

Esto tampoco se lo que significa, se puede interpretar de varias maneras, pero bueno, el procedimiento necesario para crear el proceso de un executable, e inicializarlo (esté ubicado el .exe donde lo esté), ya es considerablemente mucho más lento que realizar otras cosas, como por ejemplo podría ser llamar a una función aleatoria de tu programa y esperar el valor de retorno (una función de la librería 7z.dll, por ejemplo), y si además te pones a capturar la salida del programa para controlar el porcentaje de progreso, el tiempo total de ejecución hasta finalizar la operación se incrementará aun más. Aunque para hacer una comparación de velocidad en condiciones, habría que ver el código fuente para poder tener en cuenta factores importantes... como la complejidad ciclomática de los métodos/funciones de un programa, la administración de recursos del programa, y en general lo bien o lo mal que estén programadas las funcionalidades del programa.

De forma genérica o superficial te puedo decir que si quieres acelerar algún procedimiento de tu programa, entonces podrías aplicar los principios de la programación asincrónica, multi hilo, paralelismo. Pero depende de para que cosa.

Nota: Actualmente mi programa funciona solamente en mi pc y no en otras computadoras, cosa que quiero resolver y no encuentro como , si alguien tiene una sugeencia estaria perfecto.

La única solución es que depures el código. Si todavía no solucionaste los errores, si quieres puedes pasarme el código fuente por mensaje privado, si no me funciona en mi PC intentaré averiguar el motivo. Y dime que versión de Windows estás utilizando en tu PC.

Saludos
85  Programación / .NET / Re: Error CLR20r3 aplicacion no corre en otra pc en: 22 Diciembre 2017, 19:54
Más claro, imposible:

Citar
No se controló System.ArgumentException
Message='name' no puede ser una cadena vacía.
Nombre del parámetro: name
...
en System.Speech.Synthesis.SpeechSynthesizer.SelectVoice(String name)
en C:\Users\Test\Desktop\AIRH\AIRH\MainWindow.xaml.cs:línea 74

Saludos
86  Programación / Scripting / Re: System.OutOfMemoryException en: 21 Diciembre 2017, 23:54
Me temo que ocurre igual


Exception calling "ReadAllLines" with "1" argument(s): "Exception of type 'System.OutOfMemoryException' was thrown."

Eso te dije, que probablemente te ocurriría igual con "ReadAllLines". Prueba con "ReadLines", si tienes .NET Framework 4.7 deberías poder usar esa función, si te sale algún error, muestra el mensaje de error.

saludos
87  Programación / Scripting / Re: System.OutOfMemoryException en: 21 Diciembre 2017, 22:31
Lo estoy haciendo sobre el PowerShell, es correcto?

si.



por el momento me dice Method invocation failed because [System.IO.File] doesn't contain a method named 'ReadLines'.

Sin embargo validando la clase ReadLines si pertenece al objeto System.IO.File

La función System.IO.File.ReadLines() fue introducida en la versión 4.0 de .NET Framework, así que necesitas tener instalada esa versión (como mínimo) o una superior en tu Windows. Si eso no es posible, entonces mo podrás usar ese código. Puedes probar con la función "ReadAllLines" en vez de "ReadLines" (solo tienes que cambiarle el nombre a esa parte del código), pero el resultado me temo que será muy distinto ( ya que esa función devuelve un Array como tal, así que probablemente se te desbordará la memoria, pero bueno, por probar... puedes intentarlo a ver. )

Saludos
88  Programación / Scripting / Re: System.OutOfMemoryException en: 21 Diciembre 2017, 21:49
algo para superar este inconveniente?

Prueba con las clases de .NET Framework (esto tecnicamente ya no sería puto código PowerShell):

script.ps1
Código
  1. $lines = [System.IO.File]::ReadLines( "C:\File.csv", [System.Text.Encoding]::Default )
  2. [System.Int32] $count = ($lines).Count
  3.  
  4. Write-Host $count

No estoy muy seguro de si funcionará. Por un lado la clase IEnumerable (la cual es parecida a un Array en la programación) es un tipo de evaluación vaga (Lazy Evaluarion Type), esto quiere decir que las lineas del contenido del archivo.csv (o dicho de otra forma, los elementos del Array) solo se cargarán en memoria a medida que vaya siendo realmente necesario y se deasignará de la memoria cuando ya no sea necesario, por lo que en principio no sufririas un desbordamiento de memoria, sin embargo al usar la propiedad IEnumerable.Count tiene que iterar todos los elementos de la colección IEnumerable para hacer el conteo... así que no estoy seguro de lo que sucederá, pruébalo y me dices.

Saludos.
89  Foros Generales / Dudas Generales / Re: ¿Criptomonedas? en: 21 Diciembre 2017, 21:08
Un monedero de Bitcoin, como por ejemplo Electrum, solo guarda criptomonedas de Bitcoin? O también lo hace con otras, como Ethereum o Iota?

Si quieres un (multi)monedero virtual, seguro, y con soporte para varias criptomonedas, yo te recomiendo Exodus. También uso Electrum, pero es que Exodus me parece irresistible desde que lo probé por primera vez... y todos los datos se representan de forma muy abstracta ocultando la información "crítica", de hecho los monederos se crean solos sin que tengas que introducir ningún dato ni palabras clave ni nada por tu parte...

Desde el programa puedes transferir ganancias de una criptomoneda/monedero a otra.


 





Grax iUDEX.

Qué casa de cambio me recomendais para comprar y vender bitcoins?

Una con soporte rápido por e-mail, en Español, y de confianza:

Saludos.
90  Programación / Desarrollo Web / ¿En que orden debo actualizar un sitio web en WordPress? en: 21 Diciembre 2017, 21:00
No sé si será una pregunta estúpida, pero prefiero preguntar para evitar posibles incompatibilidades despues...

Tengo una página web con WordPress, hace tiempo que no la actualizo y al entrar al cpanel me dice que hay una nueva versión de WordPress, y también nuevas versiones de varios plugins, y una nueva versión del tema visual.

Bien, mi pregunta es la siguiente: ¿qué debo actualizar primero, la versión de WordPress, los plugins, o el theme?, ¿importa el orden?.

Gracias.
Páginas: 1 2 3 4 5 6 7 8 [9] 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 ... 1054
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines