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

#5661
Scripting / Re: variables en batch
11 Febrero 2015, 18:54 PM
Cualquier variable que inicialices dentro del For seguirá existiendo tras finalizar el bloque del FOR, ¿por que piensas que no es así?,
otra cosa muy distinta sería que el output de la aplicación sqlplus.exe tuviera más de una linea, con una linea final en blanco, y en ese caso el For, al iterar las lineas, se estaría sobre-escribiendo el valor de la variable, al final asignando un valor vacio.

Asegúrate de filtrar lineas vacías y/o en blanco del output, de la siguiente manera:
For ... in (`sqlplus -s QA_DATAC/qa_dc@orcl_qa @%PATH_SQL%t1 ^| findstr "^[^\s]"`) Do (...)
Nota: Ten en cuenta que en el código que has mostrado estás utilizando el modificador UseBackQ en el For, y eso altera el comportamiento de las comillas dobles, no manejo sqlplus, pero creo que no necesites usarlo.

Además de eso, estás dejando un espacio en blanco a la derecha del operador de asignación (Set valor= %%i)), corrígelo, utiliza la sintaxis correcta: Set "valor=%%~i".

Saludos
#5662
Cita de: Castiel en 11 Febrero 2015, 08:51 AM
como realizo las modificaciones para ... permitir ingresar más datos a la pila

Sabiendo de antemano que dicho código en su estructura se encuentra limitado a insertar tres elementos en la pila.

¿Lo que quieres es limitar la inserción de elementos en la pila a un total de 3 elementos?, entonces:

Código (csharp) [Seleccionar]

Stack myStack = new Stack();
int maxStackCount = 3;

...

case 1:
 if (mySatck.Count < maxStackCount) {
   // Pedimos el valor a introducir
 } else {
   Console.WriteLine(string.Format("La pila no puede exceder más de {0} elementos.", maxStackCount));
 }


EDITO: En el código que has mostrado no has acondicionado un 'case 5' para detener la inserción de datos en la pila, ¿a sido un descuido por tu parte, o necesitas ayuda con eso?.
EDITO 2: Además, si introduces una opción "erronea", tal y como tienes el búcle no va a permitir "intentarlo de nuevo" como se supone que especificas en un mensaje de la consola xD.

Traslada todas las instruccones del código que has msotrado para trabajarlo en un bloque distinto al punto de entrada de la aplicación, prueba así:

VB.Net
Código (vbnet) [Seleccionar]
Imports System.Text

Module Module1

   Dim myStack As New Stack
   Dim maxStackCount As Integer = 3

   Sub Main()
       Choose()
   End Sub

   Private Sub Choose()

       Dim userInput As Char
       Dim userValue As Integer = 0

       Dim sb As New StringBuilder
       sb.AppendLine("1- Push")
       sb.AppendLine("2- Pop")
       sb.AppendLine("3- Clear")
       sb.AppendLine("4- Contains")
       sb.AppendLine("5- Salir")
       sb.AppendLine("Dame tu opcion")

       Do Until Not Enumerable.Range(0, 5).Contains(userValue)

           Console.WriteLine(sb.ToString)

           userInput = Console.ReadKey().KeyChar
           Integer.TryParse(userInput, userValue)

           Select Case userValue

               Case 1
                   If myStack.Count < maxStackCount Then
                       ' Pedimos el valor a introducir
                   Else
                       Console.WriteLine(String.Format("La pila no puede exceder más de {0} elementos", maxStackCount))
                   End If

               Case 2
                   ' Obtnemos el elemento.

               Case 3
                   ' Limpiamos todos los contenidos del stack.

               Case 4
                   ' Pedimos el valor a encontrar.

               Case 5
                   ' Salimos del búcle.
                   Exit Do

               Case Else
                   userValue = 0 ' Resetear el valor para no salir del bucle.
                   Console.Clear()
                   Console.WriteLine("No existe la opción, intente de nuevo")

           End Select

       Loop

       sb.Clear()

   End Sub

End Module


Traducción a C#:
Código (csharp) [Seleccionar]

using Microsoft.VisualBasic;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.Text;

static class Module1
{

static Stack myStack = new Stack();

static int maxStackCount = 3;
       static void Main(string[] args)
{
Interaction.Choose();
}

private static void Choose()
{
char userInput = '\0';
int userValue = 0;

StringBuilder sb = new StringBuilder();
sb.AppendLine("1- Push");
sb.AppendLine("2- Pop");
sb.AppendLine("3- Clear");
sb.AppendLine("4- Contains");
sb.AppendLine("5- Salir");
sb.AppendLine("Dame tu opcion");

while (!(!Enumerable.Range(0, 5).Contains(userValue))) {
Console.WriteLine(sb.ToString);

userInput = Console.ReadKey().KeyChar;
int.TryParse(userInput, userValue);

switch (userValue) {

case 1:
if (myStack.Count < maxStackCount) {
// Pedimos el valor a introducir
} else {
Console.WriteLine(string.Format("La pila no puede exceder más de {0} elementos", maxStackCount));
}
break;

case 2: // Obtnemos el elemento.
break;

case 3: // Limpiamos todos los contenidos del stack.
break;

case 4: // Pedimos el valor a encontrar.
break;

case 5: // Salimos del búcle.
userValue = -1;
break;

default:
userValue = 0; // Resetear el valor para no salir del bucle.
Console.Clear();
Console.WriteLine("No existe la opción, intente de nuevo");
break;
}
}
sb.Clear();
}
}

//=======================================================
//Service provided by Telerik (www.telerik.com)
//=======================================================


Saludos!
#5663
Cita de: irvincnt93 en  8 Febrero 2015, 11:59 AMen tu código veo que en la parte de arriba del evento CellContentClick tienes un código que supongo yo es para llenar el datagridview (aun que lo estoy dudando, creo que es parde del codigo para que lo de abajo me funcione correctamente)

No te preocupes, era un simple relleno del DataGridView para mostrarte un código funcional.


Cita de: irvincnt93 en  8 Febrero 2015, 11:59 AMlas tres palabras que subraye dentro del evento CellContentClick me marcan error bro, porfa ayudame  

Debes seguir las normas del foro para utilizar las etiquetas al insertar código.

Puedes utilizar los parámetros de las etiquetas para resaltar lineas del código como puedes ver en tu comentario que he editado arriba, o puedes especificar exactamente los nombres.

Dicho esto, si el compiler te está indicando un error y además te está mostrando la causa del error y la información adicional sobre el mismo, ¿porque no muestras la información sobre el error?, no soy adivino.

De todas formas, por los nombres que subrayaste, deduzco que seguramente los errores sean porque no hayas importado los namespaces necesarios.
Código (csharp) [Seleccionar]
Using System.IO; // File
Using System.Diagnostics; // Process
Using System.Windows.Forms; // DataGridView.Rows


...Pero es que como ya he explicado puedes comprobar la causa de esos errores sin necesidad de ayuda, muestra la info del error si necesitas ayuda para solucionarlos en caso de que el error no sea por la ausencia de los namespaces.

Saludos!
#5664
Código (div) [Seleccionar]
</style><span class="VUaZ">212</span><span style="display: inline">.</span><span style="display: inline">12</span><span class="KPFX">67</span><div style="display:none">67</div><span style="display:none">170</span><span class="KPFX">189</span><span></span><span style="display:none">199</span><span class="KPFX">199</span><span></span><span class="KPFX">223</span><div style="display:none">223</div><span class="218">.</span><span class="64">12</span><span style="display:none">77</span><span class="KPFX">77</span><div style="display:none">77</div><span></span><span style="display:none">126</span><div style="display:none">126</div><span class="KPFX">165</span><div style="display:none">165</div><span style="display:none">193</span><span class="KPFX">193</span><span></span><span style="display:none">243</span><span class="KPFX">243</span><span></span><span style="display: inline">.</span><span class="217">163</span></span>

El código de arriba contiene la IP '212.12.12.163' separada en varios segmentos que utilizan nombres al azahar para mostrar los números (y los puntos delimitadores, por separado), a veces son nombres alfabéticos y otras veces numéricos, y la misma técnica de aletoriedad se puede apreciar que se utiliza para añadir otra información irrelevante (para despistar y así dificultar o imposibilitar la ingeniería inversa, me imagino), aparte de los campos <div style="display:none"> que siempre son basura.

Es el código fuente más tedioso que he visto para hacerle web-scrapping, aunque por otro lado, lo mio no es la programación a nivel web como para poder analizar la situación a la perfección.

Mi opinión tras un vistazo rápido es que ni merece la pena intentar desarrollar el algoritmo de filtración de datos (¿he mencionado ya que los nombres son al azahar?), prueba con otra página, hay miles de servicios de proxylist gratuitos (y mejores que ese).

Saludos!
#5665
Cita de: ikkaku en  9 Febrero 2015, 10:24 AM
Código (csharp) [Seleccionar]
       {
       ...
           element newElement = new element();
       ...
           database.element.Add(newElement); //<------ERROR AQUI
       }


Edit: He probado a meter una linea asi
Código (csharp) [Seleccionar]
if (newElement == null)
               MessageBox.Show("NUEVO ELEMENTO NULO");

para ver si el elemento que acabo de crear es nulo y nunca me salta asi que doy por hecho que tiene que ser algo relacionado con la base de datos o su instanciacion.

El 'MessageBox' nunca se muestra porque es imposible que el objeto 'newElement' sea nulo, ya que siempre estás inicializando el objeto al principio del bloque con el constructor.

Lo que tienes que hacer es inicializar la colección 'database.element' antes de intentar agregar un item a dicha colección, ya que al ser nula, te salta una excepción de referencia a objeto nulo, el error te está indicando que estás intentando utilizar un objeto que no ha sido inicializado, por ende, si no es el objeto  'newElement ', es la lista 'database.element' o también podría ser el objeto 'database', realiza la misma prueba del 'MessageBox' con ambos objetos.

Saludos!
#5666
Hola, intentaré aclararte algunas cosas:

Cita de: okik en  9 Febrero 2015, 18:10 PM
cuando busco por ejemplo como usar el control MonthTimer siempre me salen referéncias a Clases, es decir crear objetos Timer, y en muchos casos las propiedades de objetos no están disponibles en el control mismo.

1. No existe ningún control llamado "MonthTimer" en la librería de classes de .Net framework, el nombre del miembro más parecido es un 'Timer', quizás por eso solo te salen resultados sobre la class 'Timer', no es que te muestre resultados incorrectos o que no esté documentado, es que has buscado un miembro inexistente, ¿quizás quisiste decir/buscar un "Monthcalendar" o un 'DateTimePicker'?.

2. En esencia un Control es un conjunto de miembros (clases, propiedades, funciones, enumeraciones, estructuras, etc), ¿que tipo de documentación esperas encontrar en MSDN o en otro lugar?.




Cita de: okik en  9 Febrero 2015, 18:10 PMen muchos casos las propiedades de objetos no están disponibles en el control mismo.

Eso no es para nada cierto, lo que ocurre es que muchos miembros se llaman de la misma manera pero están ubicados en distintos namespaces, por ejemplo eso es lo que ocurre con la class Timer:
System.Timers.Timer
System.Threading.Timer
System.Windows.Forms.Timer


Cada class 'Timer' tiene un propósito diferente, unas propiedades diferentes, y cada class tiene su distinta documentación en la MSDN.

Aparte de eso, no todas las classes/controles pertenecen a la misma tecnología, por ejemplo la class TextBox de un WinForms no tiene los mismos miembros(propiedades) que la class TextBox de WPF:
System.Windows.Forms.TextBox
System.Windows.Controls.TextBox


Es normal que si no comprendes o no te fijas en los detalles importantes no le encuentres lógica a que algunas propiedades no existan...
Asegúrate de leer el namespace en la documentación de MSDN para saber a que miembro se está refiriendo:





CitarAdemás, en ocasiones me sale en inglés, según el caso.

Sin ánimo de entrar en debates sobre la programación, en mi opinión, un requisito fundamental es tener conocimientos del idioma universal, leer, comprender, y trabajar en Inglés, ya que todo con lo que estás utilizando es en Inglés empezando por la propia sintaxis del lenguaje, pero bueno, aun así los códigos en español y en chino siempre seguirán existiendo para el disgusto de todos :-/.

Bueno, dicho esto, vamos al lio, te explico, el 90% de la documentación de MSDN está traducida en varios idiomas, es cierto que no toda la documentación lo está, pero si te incomoda buscar documentación de MSDN en Google y que te salga una página en inglés, siempre puedes probar a modificar la región del idioma en la url:

Del inglés:
https://msdn.microsoft.com/en-us/library/system.windows.forms.timer%28v=vs.110%29.aspx

Al Castellano:
https://msdn.microsoft.com/es-es/library/system.windows.forms.timer%28v=vs.110%29.aspx


CitarOtra cosa me fastidia es no encontrar ejemplos por ejemplo de como usar una determinada función API, tan sólo obtengo descripciones.

En ese aspecto te doy la razón, aparte de que muchas funciones están indocumentadas, MSDN no suele exponer ejemplos útiles para funciones avanzadas, y muchas veces con las descripciones del propósito de la función o de sus parámetros no es suficiente para entender el funcionamiento o el modo de emplear la función, la verdad es que si, tienes razón.

La mejor "base de datos" de ejemplos de utilización de la API de Windows en .Net que puedes encontrar es Pinvoke.net, que está incluida en la cita del post que publiqué arriba.

PD: Si tienes dudas específicas sobre el uso de alguna función de la WinAPi, siempre puedes preguntar aquí :)


Saludos!
#5667
Joder Luis... ¿no se te ha ocurrido añadir una condición más a la query de LINQ?:
...Where (Value <= max AndAlso Value > 0)

Código (vbnet) [Seleccionar]
Dim values1 As IEnumerable(Of Integer) = {-2, -1, 0, 1, 2}
Dim values2 As IEnumerable(Of Integer) = {-20, -10, 0, 10, 20}
Dim max As Integer = 10

Dim result As IEnumerable(Of Integer) =
   (From Value As Integer In (values1.Concat(values2)).Distinct
    Where (Value <= max AndAlso Value > 0))

ListBox1.Items.AddRange(result.Cast(Of Object).ToArray)


PD ¿porque no aprendes en serio despues de tanto tiempo manejando VB.Net?, al menos lo básico ...como esto, saldrías de muchos apuros por ti mismo y eso te ayudaría a avanzar más rápido...

Saludos!
#5668
Vaya, recuerdo que estabas haciendo esa tarea en VBS y te ayudé a resolver el algoritmo y otras dudas que tenias, me alegra saber que has trasladado el trabajo a un lenguaje más óptimo como Vb.Net :)




Hay varias cosas muy incorrectas en el código que has mostrado.


1)
El segundo parámetro de la función "Enumerable.Range" es un contador, no es el final del rango inicial.

Por lo tanto, en esta instrucción estás generando 1825 valores innecesarios, empezando desde el valor 1772 y acabando en el valor 3596:
Citar
Código (vbnet) [Seleccionar]
Enumerable.Range(1773 - 1, 1825)

Cuando lo que deberías crear es un rango de 53 valores correspondientes a los 53 valores de las semanas GPS de ese año, de esta manera:
Código (vbnet) [Seleccionar]
Enumerable.Range(1773 - 1, 53)


2)
Los indices en .Net empiezan por 0, no es correcto empezar por 1
Citar
Código (vbnet,1) [Seleccionar]
       For Day As Integer = 1 To DaysInThisYear
          Result.Add(Day, GPSWeeks(DatePart(DateInterval.WeekOfYear,
                                            New DateTime(ThisYear, 1, 1).AddDays(Day - 1))))
      Next Day

Déjalo así:
Código (vbnet) [Seleccionar]
       For day As Integer = 0 To (totalDaysInYear - 1)
           result.Add(day, gpsWeeks(DatePart(DateInterval.WeekOfYear,
                                             New DateTime(year, 1, 1).AddDays(day))))
       Next day



3)
A la función "JulianDate" le das demasiadas vueltas utilizando wrappers de vb6, cuando puedes simplificarlo de esta manera:
Código (vbnet) [Seleccionar]
   Public Function JulianDate(ByVal [date] As Date) As Integer

       Return [date].Subtract(New Date([date].Year, 1, 1)).Days + 1

   End Function



4)
Las variables Día, Més, y Año (que por cierto, no deberías utilizar caracteres especiales en el nombramiento de las variables), yo las adaptaría en propiedades para añadirle mayor movilidad, y control de errores:
Código (vbnet) [Seleccionar]

   Friend ReadOnly Property GPSDictionary(ByVal datePicker As DateTimePicker) As Dictionary(Of Integer, Integer)
       Get
           If datePicker IsNot Nothing Then
               Return Me.GetGPSDictionary(datePicker)
           Else
               Throw New ArgumentNullException("datePicker")
               Return Nothing
           End If
       End Get
   End Property

   Friend ReadOnly Property Day(ByVal datePicker As DateTimePicker) As Integer
       Get
           If datePicker IsNot Nothing Then
               Return datePicker.Value.Day
           Else
               Throw New ArgumentNullException("datePicker")
               Return -1
           End If
       End Get
   End Property

   Friend ReadOnly Property Month(ByVal datePicker As DateTimePicker) As Integer
       Get
           If datePicker IsNot Nothing Then
               Return datePicker.Value.Month
           Else
               Throw New ArgumentNullException("datePicker")
               Return -1
           End If
       End Get
   End Property

   Friend ReadOnly Property Year(ByVal datePicker As DateTimePicker) As Integer
       Get
           If datePicker IsNot Nothing Then
               Return datePicker.Value.Year
           Else
               Throw New ArgumentNullException("datePicker")
               Return -1
           End If
       End Get
   End Property



5)
El event-handler "DateTimePicker1_ValueChanged" quedaría así:
Código (vbnet) [Seleccionar]
   Private Sub DateTimePicker1_ValueChanged(ByVal sender As Object, ByVal e As EventArgs) _
   Handles DateTimePicker1.ValueChanged

       Me.txtday.Text = CStr(Me.JulianDate(DirectCast(sender, DateTimePicker).Value))

   End Sub





Respondiendo a tu pregunta principal, puedes hacer que la función pida una fecha como parámetro, para poder trabajar con el año de la fecha, y así puedes asignar el rango equivalente al año específico:

Código (vbnet) [Seleccionar]
   Private Function GetGPSDictionary(ByVal datePicker As DateTimePicker) As IDictionary(Of Integer, Integer)

       Dim year As Integer = Me.Year(datePicker)
       Dim totalDaysInYear As Integer = New Date(year, 1, 1).AddYears(1).Subtract(New Date(year, 1, 1)).Days
       Dim gpsWeeks As IEnumerable(Of Integer)
       Dim result As IDictionary(Of Integer, Integer)

       Select Case year

           Case 2014
               gpsWeeks = Enumerable.Range(1773 - 1, 53)

           Case 2015
               gpsWeeks = Enumerable.Range(1825 - 1, 53)

           Case 2016
               gpsWeeks = Enumerable.Range(1877 - 1, 53)

           Case Else ' Año desconocido, lanzar excepción.
               Throw New NotImplementedException("En este ejemplo no se ha implementado el calendario GPS para el año especificado.")

       End Select

       result = New Dictionary(Of Integer, Integer)
       For day As Integer = 0 To (totalDaysInYear - 1)
           result.Add(day, gpsWeeks(DatePart(DateInterval.WeekOfYear,
                                             New DateTime(year, 1, 1).AddDays(day))))
       Next day

       Return result

   End Function


De todas formas, quizás podrías automatizar la tarea ya que en un principio y por lo que he visto cada rango parece constar de 53 valores correspondientes a las 53 semanas del calendario GPS en un año con 365 dias, así que yo habia pensado en algo así, el problema es que no da el resultado que debería dar (1820 en vez de 1825) pero si incremento el startingYear a 2010 y el startingGPSWeek al 1564 de ese año 2010 si que da el resultado esperado, así que algún detalle estoy omitiendo respecto a los calendarios y los días en los años, pero te dejo la idea por si quieres perfeccionarla:

Código (vbnet) [Seleccionar]
       Dim startingYear As Integer = 1994
       Dim startingGPSWeek As Integer = 723

       Dim a As Integer
       For x As Integer = startingYear To (year - 1)

           Select Case New Date(x, 1, 1).AddYears(1).Subtract(New Date(x, 1, 1)).Days

               Case 365 ' days in year
                   startingGPSWeek += 52

               Case 366 ' days in year
                   startingGPSWeek += 53

           End Select

       Next

       MsgBox(startingGPSWeek)
   ...
           gpsWeeks = Enumerable.Range(startingGPSWeek - 1, 53) ' ajustar el 53 al numero real de semanas GPS
   ...


EDITO: Por supuesto cabe mencionar que otra alternativa sería obtener el código fuente de la página del año en cuestión y parsearlo, pero me resulta innecesario.




Bueno, te dejo el código completo con las modificaciones que mencioné, no estoy seguro de haber comprobado correctamente que todos los días devuelvan el valor esperado:

Código (vbnet) [Seleccionar]
Public Class TestForm

#Region " Properties "

   ''' <summary>
   ''' Gets the GPS dictionary according to the specified <see cref="DateTimePicker"/> current year.
   ''' </summary>
   Friend ReadOnly Property GPSDictionary(ByVal datePicker As DateTimePicker) As IDictionary(Of Integer, Integer)
       Get
           If datePicker IsNot Nothing Then
               Return Me.GetGPSDictionary(datePicker)
           Else
               Throw New ArgumentNullException("datePicker")
               Return Nothing
           End If
       End Get
   End Property

   ''' <summary>
   ''' Gets the day of the specified <see cref="DateTimePicker"/>.
   ''' </summary>
   ''' <value>The year.</value>
   ''' <exception cref="System.ArgumentNullException">datePicker</exception>
   Friend ReadOnly Property Day(ByVal datePicker As DateTimePicker) As Integer
       Get
           If datePicker IsNot Nothing Then
               Return datePicker.Value.Day
           Else
               Throw New ArgumentNullException("datePicker")
               Return -1
           End If
       End Get
   End Property

   ''' <summary>
   ''' Gets the month of the specified <see cref="DateTimePicker"/>.
   ''' </summary>
   ''' <value>The year.</value>
   ''' <exception cref="System.ArgumentNullException">datePicker</exception>
   Friend ReadOnly Property Month(ByVal datePicker As DateTimePicker) As Integer
       Get
           If datePicker IsNot Nothing Then
               Return datePicker.Value.Month
           Else
               Throw New ArgumentNullException("datePicker")
               Return -1
           End If
       End Get
   End Property

   ''' <summary>
   ''' Gets the year of the specified <see cref="DateTimePicker"/>.
   ''' </summary>
   ''' <value>The year.</value>
   ''' <exception cref="System.ArgumentNullException">datePicker</exception>
   Friend ReadOnly Property Year(ByVal datePicker As DateTimePicker) As Integer
       Get
           If datePicker IsNot Nothing Then
               Return datePicker.Value.Year
           Else
               Throw New ArgumentNullException("datePicker")
               Return -1
           End If
       End Get
   End Property

#End Region

#Region " Event-Handlers "

   ''' <summary>
   ''' Handles the ValueChanged event of the DateTimePicker1 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 DateTimePicker1_ValueChanged(ByVal sender As Object, ByVal e As EventArgs) _
   Handles DateTimePicker1.ValueChanged

       Dim datePicker As DateTimePicker = DirectCast(sender, DateTimePicker)

       Me.txtday.Text = CStr(Me.JulianDate(datePicker.Value))

       'Try
       '    ' MsgBox(GPSDictionary(datePicker)(1))
       '    MsgBox(GPSDictionary(datePicker)(3))

       'Catch ex As Exception
       '    MsgBox(ex.Message)
       'End Try

   End Sub

#End Region

#Region " Misc. Date Functions "

   ''' <summary>
   ''' Converts a date to the first day's date of the specified <see cref="Date"/> instance,
   ''' and returns the substracted date difference, in days.
   ''' Eg. 28/02/2015 > 01/01/2015 = 31 days in Jan + 28 days in Feb = 59 days
   ''' </summary>
   ''' <param name="date">The <see cref="Date"/> instance.</param>
   ''' <returns>The substracted date difference, in days.</returns>
   Public Function JulianDate(ByVal [date] As Date) As Integer

       ' Set the passed date to: 01/01/YYYY (day/month/year)
       Dim dateFirstDay As New Date([date].Year, 1, 1)

       ' Return the substracted date difference.
       Return [date].Subtract(dateFirstDay).Days + 1

   End Function

   ''' <summary>
   ''' Gets the GPS dictionary.
   ''' </summary>
   ''' <param name="datePicker">The <see cref="DateTimePicker"/> instance.</param>
   ''' <returns>IDictionary(Of System.Int32, System.Int32).</returns>
   ''' <exception cref="System.NotImplementedException">
   ''' En este ejemplo no se ha implementado el calendario GPS para el año especificado.
   ''' </exception>
   Private Function GetGPSDictionary(ByVal datePicker As DateTimePicker) As IDictionary(Of Integer, Integer)

       Dim year As Integer = Me.Year(datePicker)
       Dim totalDaysInYear As Integer = New Date(year, 1, 1).AddYears(1).Subtract(New Date(year, 1, 1)).Days
       Dim gpsWeeks As IEnumerable(Of Integer)
       Dim result As IDictionary(Of Integer, Integer)

       Select Case year

           Case 2014
               gpsWeeks = Enumerable.Range(1773 - 1, 53)

           Case 2015
               gpsWeeks = Enumerable.Range(1825 - 1, 53)

           Case 2016
               gpsWeeks = Enumerable.Range(1877 - 1, 53)

           Case Else ' Año desconocido, lanzar excepción.
               Throw New NotImplementedException("En este ejemplo no se ha implementado el calendario GPS para el año especificado.")

       End Select

       result = New Dictionary(Of Integer, Integer)
       For day As Integer = 0 To (totalDaysInYear - 1)
           result.Add(day, gpsWeeks(DatePart(DateInterval.WeekOfYear,
                                             New DateTime(year, 1, 1).AddDays(day))))
       Next day

       Return result

   End Function

#End Region

End Class


Saludos
#5669
Cita de: Nac-ho en 10 Febrero 2015, 19:53 PM
Bueno, recopilación de logos:


(Hacer click para ver en tamaño original)

El logo del post principal, con la textura de hexágonos, ¡es muy bonita!, aunque no me convence mucho ese tipo de fondos con el logo de elhacker.net, son más un banner que un logo.

Y digo yo, @Nac-ho, ¿por que en lugar de re-estilizar el logo actual, no lo reinventas?,
el "shuriken" ya está demasiado visto, no digo que sea feo porque estaría mintiendo, es un logo genial, pero lo suyo sería proponer nuevas ideas para el logo actual, ¿no creen ustedes?.

Sugerencia para el Staff: ¿No estaría bien hacer un consurso de nuevos diseños para el logo de elhacker.net?

Saludos!
#5670
Scripting / Re: Donde aprender python?
11 Febrero 2015, 10:05 AM
Opino lo mismo que el compañero @Engel Lex, pero también cabe mencionar que Python 3.X se lleva desarrollando desde el año 2008, no es que se vayan a encontrar releases de betas inestables o prematuras... la expansión de py3 es grande en varios entornos profesionales hoy en día, se puede utilizar sin miedo, aunque como ya ha dicho @engel, pueden contener ciertos bugs, pero los cuales serán corregidos en nuevas releases.

Saludos!