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 - BlackZeroX

#1081
Antes de entrar afirmaciones erradas de alguna manera, te recomiendo probar distintos lenguajes, nosotros te podemos decir X, Y, Z lenguaje pero la vdd eso lo vas a decidir TU, con el que te acomodes y sea mejor. la vdd yo no te recomendaria Java ni .NET, debido a que son leeentos en procesamiento hasta mi punto de vista y debido a que no les he sacado mucho su jugo, esta claro que son buenos tienen lo suyo pero te dan malas practicas como programador en mi consideracion, es lo mismo con vb y cualquier lenguaje de alto nivel... esta bien que los conoscas y veas sus PRO y CONTRAS.

Mi recomendacion: C/C++ Java, .net (TODOS los lenguajes incorporados y la plataforma en si), Basic (cualquier derivacion)...

Ahora si vamos a lo nuestro:

Cita de: SixToes en 28 Agosto 2011, 09:32 AM
Yo te recomiendo Visual basic 6.0 es fácil y tiene (para mi y para muchos) la misma  capacidad de hacer los mismo programas QUE CUALQUIER OTRO LENGUAJE y mucho mas rápido.

He usado bastante VB como para decirte que NO; No es rapido en algunas cuestiones, Hay trucos para acercarse mucho a la velocidad de C/C++ pero dependes mucho de APIS como RtlMoveMemory y de el tipo de dato long (esto lo uso para los retos de velocidad en vb6, que se publican en el subforo de VB).

* Carece de punteros reales ( los puedes simular pero Dependes del API RtlMoveMemory ).
* Barrido de bits... (en VB a fuerzas debes multiplicar o dividir...).
* Heredacion (en si en vb6 TODO ereda de el tipo Object, pero no se puede heredar de otra lado...).
* Otras cosillas...

VB no es malo salvo lo que ya cite... y si tu algoritmo es malo o bueno lo puedes escribir donde quieras pero eso si si sabes algunos trucos para la velocidad en este lenguaje u otro puedes hacercarte a la velocidad de C/C++... almenos que tu algoritmo sea mas eficiente que el que esta escrito en C/C++...

Cita de: Queta en 28 Agosto 2011, 12:55 PM
Primera mentira; a parte de que Visual Basic es un lenguaje totalmente obsoleto, ya me gustaría ver un sistema operativo desarrollado en Visual Basic, que lógicamente no se puede.

Como visualbasic viene de una vertiente del Basic... Entonces pondre lo siguiente:

"me escupo a mi mismo"

En Basic SI SE PUEDEN crear S.O., Microcontroladores, Drivers, etc...

Aqui te dejo un S.O. super pequeño("Hello World") en FreeBasic (Lenguaje Basic + ASM inline):

kernel.bas
Código (vb) [Seleccionar]


DECLARE SUB PrintString(src AS Byte Ptr, x AS LONG, y AS LONG)
DECLARE SUB main ()

SUB multiboot ()
  Asm

    .set ALIGN,    1<<0            
    .set MEMINFO,  1<<1            
    .set FLAGS,    ALIGN | MEMINFO  
    .set MAGIC,    0x1BADB002      
    .set CHECKSUM, -(MAGIC + FLAGS)

    .align 4
    .LONG MAGIC
    .LONG FLAGS
    .LONG CHECKSUM

    .set STACKSIZE, 0x4000          
    .comm stack, STACKSIZE, 32      

    .global loader                  

    loader:
      lea   esp, stack + STACKSIZE
      push  eax                      
      push  ebx                      

      CALL  MAIN

      cli
      hlt                    
  END Asm

END SUB

SUB main ()
   CONST s = "Hello World"

   PrintString CPtr(Byte Ptr, @s), 35, 12

END SUB

SUB PrintString(src AS Byte Ptr, x AS LONG, y AS LONG)

   DIM dst AS Byte Ptr
   DIM counter AS LONG

   dst = CPtr(Byte Ptr, &HB8000 + y * 160 + x * 2)

   counter = 0

   WHILE src[counter] <> 0
       dst[2 * counter] = src[counter]
       dst[2 * counter + 1] = 15
       counter = counter + 1
   WEND
END SUB



link.ld
Código (vb) [Seleccionar]


OUTPUT_FORMAT("elf32-i386")
ENTRY (loader)

SECTIONS{
   . = 0x00100000;

   .text :{
       KERNEL_START = .;

       *(.text)
   }

   .rodata ALIGN (0x1000) : {
       *(.rodata)
       _CTORS = .;
       *(.ctors)
       _CTORS_END = .;      
   }

   .data ALIGN (0x1000) : {
       *(.data)
   }

   .bss : {
       SBSS = .;
       *(COMMON)
       *(.bss)
       EBSS = .;

       KERNEL_END = .;
   }
}



Para construir el pequeño S.O.:

Código (vb) [Seleccionar]


fbc -c kernel.bas -o kernel.o
i586-elf-ld -T link.ld -o kernel.bin kernel.o



Temibles Lunas!¡.
#1082
@Gambinoh

O sencillamente cifrar una unidad/carpeta/Archivo, para que solo en TU session se pueda acceder a ella en Windows y no en otras, sin recurrir a app ni scripts.

Dulces Lunas!¡.
#1083
@usuarioarroba

No le dejes la enseñanza a la academia se un poco autodidacta... usa Redim.

Dulces Lunas!¡.
#1084
Programación Visual Basic / Re: [RETO] IsDate
29 Agosto 2011, 00:24 AM
.
Aquí les dejo mi codigo... esta bastante legible...

Código (vb) [Seleccionar]


Option Explicit

Private Declare Sub RtlMoveMemory Lib "kernel32" (ByVal pDst As Long, ByVal pSrc As Long, ByVal ByteLen As Long)

'   //  Formato aceptado   DD/MM/YYYY, D/M/YYYY, D/MM/YYYY, DD/M/YYYY, D/M/Y, etc...
Public Function isDate_BlackZX(ByRef sStr As String) As Boolean
Dim lChar           As Long
Dim lVal            As Long
Dim lConvert(3)     As Long

Dim lDim            As Long
Dim lMult           As Long
Dim pStr            As Long
Dim pChar           As Long

   pStr = LenB(sStr)
   If (pStr < &H5) Then Exit Function
   
   pStr = StrPtr(sStr) + (pStr - &H4)
   pChar = VarPtr(lChar)
   
   lDim = &H2
   lMult = &H1
   lConvert(lDim) = &H0
   
   Do Until StrPtr(sStr) > pStr
       RtlMoveMemory pChar, pStr, &H4
       lVal = (lChar And &HFF0000)
       If (lVal = &H2F0000) Then
           lDim = (lDim - &H1)
           If ((lDim And &H80000000) = &H80000000) Then Exit Function
           lMult = &H1
       Else
           If ((lVal > &H390000) Or (lVal < &H300000)) Then Exit Function
           lConvert(lDim) = lConvert(lDim) + (((lVal / &H10000) - &H30) * lMult)
           lMult = (lMult * &HA)
       End If
       lVal = (lChar And &HFF)
       If (lVal = &H2F) Then
           lDim = (lDim - &H1)
           If ((lDim And &H80000000) = &H80000000) Then Exit Function
           lMult = &H1
       Else
           If ((lVal > &H39) Or (lVal < &H30)) Then Exit Function
           lConvert(lDim) = lConvert(lDim) + ((lVal - &H30) * lMult)
           lMult = (lMult * &HA)
       End If
       pStr = (pStr - &H4)
   Loop
   
   If ((lConvert(&H2) > &H270F) Or _
       ((lConvert(&H2) And &H80000000) = &H80000000)) Or _
   Not (lDim = &H0) Then Exit Function
   
   Select Case lConvert(&H1)
       Case &H1, &H3, &H5, &H7, &H8, &HA, &HC
           If ((lConvert(&H0) > &H0) And (lConvert(&H0) < &H20)) Then isDate_BlackZX = True
       Case Is > &HC, Is <= &H0
           Exit Function
       Case Else
           If (lConvert(&H1) = &H2) Then
               If ((lConvert(&H2) Mod &H4) = &H0) Then
                   If ((lConvert(&H0) > &H0) And (lConvert(&H0) < &H1E)) Then isDate_BlackZX = True
               ElseIf ((lConvert(&H2) Mod 400) = &H0) Then
                   If ((lConvert(&H0) > &H0) And (lConvert(&H0) < &H1E)) Then isDate_BlackZX = True
               ElseIf ((lConvert(&H2) Mod 100) = &H0) Then
                   If ((lConvert(&H0) > &H0) And (lConvert(&H0) < &H1E)) Then isDate_BlackZX = True
               Else
                   If ((lConvert(&H0) > &H0) And (lConvert(&H0) < &H1D)) Then isDate_BlackZX = True
               End If
           Else
               If ((lConvert(&H0) > &H0) And (lConvert(&H0) < &H1F)) Then isDate_BlackZX = True
           End If
   End Select
   
End Function



El siguiente codigo en lugar de leer 2 char ( 4 bytes ), solo lee 1 char ( 2 bytes ), PPuede o no ser mas rapido, pero eso a mi no me interesa.

Código (vb) [Seleccionar]


Public Function isDate_BlackZX(ByRef sStr As String) As Boolean
Dim lChar           As Long
Dim lVal            As Long
Dim lConvert(3)     As Long

Dim lDim            As Long
Dim lMult           As Long
Dim pStr            As Long
Dim pChar           As Long

    pStr = LenB(sStr)
    If (pStr < &H5) Then Exit Function
   
    pStr = StrPtr(sStr) + (pStr - &H2)
    pChar = VarPtr(lChar)
   
    lDim = &H2
    lMult = &H1
    lConvert(lDim) = &H0
   
    Do Until StrPtr(sStr) > pStr
        RtlMoveMemory pChar, pStr, &H2  '   //  Dos bytes = char...
        lVal = (lChar And &HFF)
        If (lVal = &H2F) Then
            lDim = (lDim - &H1)
            If ((lDim And &H80000000) = &H80000000) Then Exit Function
            lMult = &H1
        Else
            If ((lVal > &H39) Or (lVal < &H30)) Then Exit Function
            lConvert(lDim) = lConvert(lDim) + ((lVal - &H30) * lMult)
            lMult = (lMult * &HA)
        End If
        pStr = (pStr - &H2)
    Loop
   
    If ((lConvert(&H2) > &H270F) Or _
        ((lConvert(&H2) And &H80000000) = &H80000000)) Or _
    Not (lDim = &H0) Then Exit Function
   
    Select Case lConvert(&H1)
        Case &H1, &H3, &H5, &H7, &H8, &HA, &HC
            If ((lConvert(&H0) > &H0) And (lConvert(&H0) < &H20)) Then isDate_BlackZX = True
        Case Is > &HC, Is <= &H0
            Exit Function
        Case Else
            If (lConvert(&H1) = &H2) Then
                If ((lConvert(&H2) Mod &H4) = &H0) Then
                    If ((lConvert(&H0) > &H0) And (lConvert(&H0) < &H1E)) Then isDate_BlackZX = True
                ElseIf ((lConvert(&H2) Mod 400) = &H0) Then
                    If ((lConvert(&H0) > &H0) And (lConvert(&H0) < &H1E)) Then isDate_BlackZX = True
                ElseIf ((lConvert(&H2) Mod 100) = &H0) Then
                    If ((lConvert(&H0) > &H0) And (lConvert(&H0) < &H1E)) Then isDate_BlackZX = True
                Else
                    If ((lConvert(&H0) > &H0) And (lConvert(&H0) < &H1D)) Then isDate_BlackZX = True
                End If
            Else
                If ((lConvert(&H0) > &H0) And (lConvert(&H0) < &H1F)) Then isDate_BlackZX = True
            End If
    End Select
   
End Function



Temibles Lunas!¡.
#1085
Programación Visual Basic / Re: [RETO] IsDate
28 Agosto 2011, 23:27 PM
un dato a añadir...

Un año es bisiesto si es divisible entre 4, excepto el último de cada siglo (aquel divisible por 100), salvo que este último sea divisible por 400.

Dulces Lunas!¡.
#1086
llevas algo?...

P.D.: No tareas.

Dulces Lunas!¡.
#1087
Cita de: yalosabes en 28 Agosto 2011, 19:53 PM
Bah...


Yo tambien busco este codigo

pero veo que aqui.. se sienten los muy... "programadores" que te dan referencias y links de lectura..

Si alguien pone una pregunta y pone en claro que no sabe mucho sobre el tema..creo que deberian apoyarlo..

Pero bueh.. veo que ahora responderan a cada pregunta con un enlace de MSDN Library

q verguenza..

Gracias por la GRAN AYUDA

Mucho ayuda quien no estorba dice el dicho, total solo le faltan algunos toques a el codigo ya expuesto de Hasseds con las apis que se hacen referencia, tampoco es un foro de negreros a disposicion.

Dulces Lunas!¡.
#1088
Programación Visual Basic / Re: [RETO] IsDate
28 Agosto 2011, 21:37 PM
.
Espacios en blanco?... = valen o se descartan...

Dulces Lunas!¡.
#1089
.
Para esto prefiero mi PS3, tiene bastantes funcionalidades...



Dulces Lunas!¡.
#1090
Cita de: Hasseds en 28 Agosto 2011, 04:59 AM

Lo que no llego a entender por qué el uIDEvent tambien se puede recuperar a travez de uElapse de TimerProc


Lo que pasa es que no tiene correctamente los aprametros del callback, yo tampoco me habia dado cuenta... aqui te dejo el callback con los nombres corectamente... total solo son nombres de parametros...


http://msdn.microsoft.com/en-us/library/ms644907%28v=VS.85%29.aspx

Código (Vb) [Seleccionar]


Option Explicit

Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
Declare Function WaitMessage Lib "user32" () As Long

Public iTmr     As Long

Sub main()
    iTmr = SetTimer(0, 0, 300, AddressOf TimerProc)
    Do While Not (iTmr = 0)
        DoEvents
        WaitMessage
    Loop
End Sub

'VOID CALLBACK TimerProc(
'  __in  HWND hwnd,
'  __in  UINT uMsg,
'  __in  UINT_PTR idEvent,
'  __in  DWORD dwTime
');
Sub TimerProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal idEvent As Long, ByVal dwTime As Long)
    ' hwnd   ----> { el pasado por parametro en SetTimer() }
    ' uMsg   ---->  {   WM_TIMER = 275 }
    ' idEvent ---->  { el retornado por SetTimer() }
    Debug.Print hwnd, uMsg, idEvent; "{" &  iTmr & "}", dwTime
    iTmr = ((Not KillTimer(hwnd, idEvent)) And &H1)
    Debug.Print hwnd, uMsg, idEvent; "{" &  iTmr & "}", dwTime
End Sub



temibles Lunas!¡.