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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


  Mostrar Mensajes
Páginas: 1 ... 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 [149] 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 ... 432
1481  Programación / Programación Visual Basic / Re: Problema muy extraño con ShellEjecute en: 6 Mayo 2020, 15:27 pm
Ok, te entiendo.

Si cuentas que el programa funciona correctamente de un modo pero no cuando tomas el mismo path, y lo pasas al shellexecute, las dos posibilidades más inmediatas son:
A - Problema con la redefinición del string pasado al shell execute.
B - Problemas de permisos sea del usuario o de la carpeta donde yace el fichero. Esto último e smás dependiente del S.O. que del programa, si el usuario toma los permisos adecuados o ejecuta el programa con permisos de administrador...

Incluso aún siendo esto último, por orden (si fuera el caso) procede examinar primero que el string recibido se pase correctamente a sehllexecute.

Seguiré leyendo tu mensaje previo para ver si aparece el código donde quede recogido dicha llamada y si aparece el contenido de uno de esos txt, donde conste la ruta, para dilucidar el posible problema.

...a la noche saco un ratito, lo reviso y te comento.
1482  Programación / Programación General / Re: Que lenguaje es mas facil para aprender? en: 6 Mayo 2020, 15:17 pm
Jamás recomendaría C ...para 'empezar'.

C es un lenguaje de bajo nivel, antes de poder sacarle provecho se tendrá un follón espantoso en la cabeza con demasiados detalles e imprecisiones volando en el aire sin saber a qué vienen.
Para lo mismo 'empezar', tampoco recomendaría ensamblador. Ensamblador debería ser el segundo lenguaje, pero no para aprender, si no para sondear, pues da una muy buena aproximación a la estructura de los procesadores, aunque luego sea diferente en cada plataforma, la base es la misma.

Desde Python, a Java, Perl, Ruby, Visual Basic (o incluso Pascal, que aunque esté de 'capa caída' para empezar en la programación es muy asequible). Todos ellos son lenguajes de alto nivel y asequibles para entender en un primer contacto de programación. Debería no profundizarse al comienzo, estudiar lo simple de varios de ellos y más adelante ver con cual se siente uno de forma natural más cómodo. Y tirar adelante con él.

Cuando se alcance un nivel medio-avanzado en al menos un lenguaje es cuando procede (si es el deseo), aprender (otros o) lenguajes más complejos, pues ya hay asumido una gran parte que es común a muchos lenguajes y básicamente lo que se hará luego es aprender las diferencias con otros lenguajes. A veces las diferencias se limitan a la sintaxis y a veces son tantas las diferencias que es casi todo un nuevo mundo a explorar como sucede con ensamblador y C... aunque a pesar de las diferencias notables todavía siguen teniendo en común con el resto de lenguajes una meta, y la formalización de lograrlo: la algoritmia.
1483  Foros Generales / Dudas Generales / Re: Estoy muy preocupado. Soy un desaprensivo sin experiencia que he entrado en Tor en: 5 Mayo 2020, 16:25 pm
Simplemente olvídalo... y si había algún más que solo fotos de desnudos, da aviso a la policía para que lo investiguen.

Desde un punto de vista legal, pulsar un enlace no es ilegal... sim importar qué haya detrás de ese enlace.

Quién no ha puesto a descargar un peli or internet, y después que se ha descargado has ido a ponerla y resultó se runa peli porno???. A menudo un tema es ocultado bajo una descripción imprecisa o inexacta.

Pinchar en un enlace que ponga 'mujeres desnudas' no es ilegal, que luego resulten ser niñas y no mujeres, tampoco lo convierte (por solo ese hecho) en delito. Pero si intuyes algo ilegal, si que harías bien en pasar el enlace a la policía, no es preciso contarles toda esta parrafada... basta resumir en:

"Navegando por la web, he acabado en este enlace que muestra contenido que en mi opinión es ilegal por contener ....lo que sea el caso... les envío el enlace por si procede investigarlo".

Y ya... no le des más vueltas.
1484  Foros Generales / Foro Libre / Re: Colores favoritos? en: 5 Mayo 2020, 16:14 pm
Depende de para qué...

No es lo mismo, elegir un color para las paredes de una casa, que para la ropa, que para...
Y no sé cual es el color 'Purupura'  :laugh: :laugh: :laugh:

En general me gusta el verde y según para qué el negro o el púrpura.
1485  Programación / Programación General / Re: Prolog generador de código con swap y move en: 4 Mayo 2020, 16:51 pm
No queda claro cuales son todas las restricciones.

La idea básica para lograrlo es la recursión del backtracking que provee prolog.
Dado que move(X), borrará alguna de las variables, el primer paso debería ser buscar los valores no repetidos en el estado final, y usar swap(X,Y...) al caso... determina la condición final de cuando se alcanza este semiestado es lo que te debe hacer pensar un poquito.

Y solo cuando se hayan completado esta submeta es cuando procede hacer los move(X) que fueren precisos. Not que por ejemplo para una entrdada: ... regs(A,A,A,A), R). no habría lugar a los swap, si no solo a los move, igualmente en una entrada como: ...regs(D,B,A,C), R). no habría lugar a los move, si no solo a los swap.
1486  Foros Generales / Sugerencias y dudas sobre el Foro / Re: Cambios - Mantenimiento - Limpieza del foro (Abril 2020) en: 3 Mayo 2020, 21:06 pm
Ya que el foro está de obras  ;D ;D ;D... pregunto:  :rolleyes: :rolleyes:
¿Se podría añadir un tema oscuro, pero oscuro más bien negro   >:D?...

Actualmente uso el 'dark theme', pero no termina de convencerme, se queda a medias  :silbar: :silbar:


(el darke theme es el último en esta imagen, que como se aprecia no son tan oscuros)...
1487  Programación / Programación Visual Basic / Re: Problema muy extraño con ShellEjecute en: 3 Mayo 2020, 01:41 am
Bueno, solo he mirado (de momento) el primer parrafo.
Contienes un grave error...

Aunque revisas que el usuario no haya elegido un path inaccesible, no revisas que haya cancelado.
Si cancela, txtPath.Text, Dialogo.FileName, txtSucia.Text y Dialogo.FileTitle quedan con valor "".

Se puede preguntar por si están vacíos, pero es más cómodo tratarlo como un error.
Te pongo ese párrafo para solucionar ese caso, cuando revises que a pesar de ello te siguiere dando error, pués se revisa el resto del código.

Código
  1. Private Function SeleccionaFile() As Boolean
  2.    Dim cadenita
  3.  
  4.    With Dialogo
  5.        .DialogTitle = "Elija un fichero ejecutable..."
  6.        .Filter = "Ejecutables (.exe .com .vbs)|*.exe;*.com;*.vbs|Exe (.exe)|*.exe|Com (.com )|*.com|VB Script (.vbs)|*.vbs" ' ...etc...
  7.        .CancelError = True
  8.        On Error GoTo Cancelado
  9.        .ShowOpen
  10.  
  11.        txtPath.Text = .FileName
  12.        txtSucia.Text = .FileTitle
  13.    End With
  14.  
  15.    cadenita = Len(txtPath.Text)
  16.    If cadenita > 255 Then
  17.        MsgBox "La ruta de este programa es demasiado lejana, debe seleccionar una ruta más corta de destino", vbCritical
  18.        txtPath.Text = ""
  19.        Exit Function
  20.    End If
  21.  
  22.    SeleccionaFile = True
  23.    Exit Function
  24. Cancelado:
  25.    If (Err.Number = 32755) Then
  26.        MsgBox "el usuario ha cancelado la eleccion de fichero..."
  27.        ' hacer lo que corresponda a este caso... tipicamente no hacer nada al devolver.
  28.    Else
  29.        Call MsgBox("Ocurrio un error inesperado..." & CStr(Err.Number), , "Dialogo de seleccion de fichero")  ' no se espera que esto suceda... pero si alguna vez ocurre, al reportar el mensaje, hay por donde indagar...
  30.    End If
  31. End Function
  32.  
  33.  
  34.  
  35. ' ... despues... en la llamada
  36.  
  37. if (SeleccionaFile = TRUE) then
  38.  '... se invoca lo que sea que haces...
  39. else
  40.  ' pero si devuelve false, es lo mismo que si el usuaro no hubiera realizado ninguna accion
  41. end if
  42.  
  43.  

Por cierto, como dices que invocas un ejecutable, imagino que el control 'Commondialog' tiene filtrado para elegir solo ficheros ejecutables, no???. Que has establecido algún valor en las propiedades 'Filter'. Sino el usuario podría elegir cualquier cosa... he puesto un filter de ejemplo...
1488  Programación / Programación Visual Basic / Re: Problema muy extraño con ShellEjecute en: 2 Mayo 2020, 21:10 pm
Citar
pero si selecciono de nuevo el archivo y una vez vuelto a seleccionar  (obviamente la ruta no cambia ni se modifica a la vista, es exactamente la misma) si anda el ejecutador de mi programa... con solo volver a seleccionar lo mismo

El tema es que lo que selecciono es un bat, entonces en realidad el shell si lo ejecuta, pero se cierra rapidamente, como si fallara algo interno del bat, pero lo tan extraño que destaco, es que simplemente volviendo a cargar manualmente (con mi boton examinar) el archiv bat, si anda. Y la ruta no se modifica.

Es mas, en la linea anterior a ejecutar el shellejecute, puse un msgbox para que muestre al path del programa, y en ambos casos (cuando restauro el preset desde la base de datos, o seleccionado ahi mismo sin usar el recorset) el path es exactamente el mismo y no hay una / de menos o de mas o : o esas cosas..

que podrá ser?
Hablas de un modo inconcreto. No se puede adivinar que falla en un programa que falla, así, sin más.

Luego pones un vídeo (que no voy a ver), en vez de simplemente hacer un copypaste de texto, con el contenido del bat... y el contenido del código que hace la llamada al bat. Es rápido, es fácilmente consultable y se puede repasar cuantas veces sea preciso de forma rápida (un vídeo exige volver a verlo todo de nuevo y se pierde mucho tiempo con ello).

Si haces esto último marcado en negrita, pués se le podrá echar un vistazo rápido...
1489  Programación / Programación C/C++ / Re: [ALGEBRA DE MATRICES] Matriz triangular superior desdendiente en C. en: 1 Mayo 2020, 22:00 pm
Nota: Se trata como un array unidimensional...
Código:
buleano = funcion EsMTSD(array Valores, entero Ancho)
    entero i, j, k, f

    k = size(valores)-1
    f = (Ancho + 1)
    Bucle para j desde Ancho hasta k en incrementos de Ancho
        Bucle para i desde j hasta k en incrementos de f
            Si (Valores(i) <> 0) Devolver FALSE        
        Siguiente
    Siguiente
  
    Devolver TRUE
fin funcion

El bucle externo toma el indice del primer elemento de cada fila (empezando por la 2ª)
El bucle interno recorre a saltos de ancho +1, es decir en avanza en diagonal hasta superar su índice la última fila.
Es decir solo se recorren los valores objetos de búsqueda.


Nótese que 'k' y 'f' son redundantes (se añaden por claridad en el código... aunque también lo hace más eficiente si se tratara de arrays enormes).
1490  Programación / Programación General / Re: Fundamento del Ensamblaje y Linkeado de Programas en: 27 Abril 2020, 03:12 am
Hablamos entonces de referencias como -cualquier tipo de- objeto a ser localizado en el algoritmo.
No. Una referencia es cualquier miembro del código fuente que se incluyó en la tabla de símbolos. Puede ser desde una expresión, a un método, un tipo de datos complejo. La expresión será reducida y convertida (en general) a notación polaca inversa antes de hacerla consignar como lista para compilar... etc...

La tabla de símbolos es una tabla con estructura de árbol, por lo general montada sobre una tabla hash por eficiencia, y que recoge absolutamente todos los datos precisos del código de un módulo... los detalles exactos son propios de cada implementación.
En general antes de escribir nada a fichero, primero se lee el código en memoria y se realizan las fases primeras de análisis y en algún punto cada compilador decide escribir ya los ficheros, generlamente cuando pasa el análisis semántico sin errores 'graves' (los típicos ficheros de código objeto). Ya expliqué más arriba las razones frecuentes para escribirlos y todavía alterarlos...

Los pases son, en pocas palabras, un ordenamiento (en todo sentido) del proceso de compilacion.
y ¿como calcula el compilador el numero de pases que son necesarios, en ese caso (o cualquier otro)?
No. Un pase no tiene nada que ver con ordenar, ni tampoco se calculan la cantidad de pases.
El número de pases es una cuestión de diseño, de la forma en que haya sido concebido el compilador para manejar el lenguaje que compila.
De hecho las operaciones que realice en uno u otro pase, es también dependiente del diseño del compilador... yo simplemente señalo la 'separación lógica' (para entenderlo), en dos fases bien claras y definidas, en un pase suele hacerse en análisis léxico (para encontrar errores con 'tokens' no reconocibles y el análisis sintáctico (para ver que aunque cada token se reconoce la propia línea tiene sentido... y se reconoce como bien formada, esto como mínimo...

En el segundo pase se aborda como mínimo el análisis semántico, aunque habrá compiladores que lo realicen en el primer pase, una optimización de código y un pase a un código intermedio aunque esto suele dejarse para lo último.

Luego interviene el linker que toma todos los módulos y construye con todos el ejecutable, todavía suele proceder resolver algunas referencias como ya expliqué, aunque nuevamente dependerá del diseño, pudiera ser que el compilador haya resuelto ya las referencias y el linker simplemente ensamble todos los módulos junto y lo pase definitivamente al código intermedio o al código nativo... piensa que no hay reglas fijas... hay pasos que resolver pero cada cual diseña que pasos resuelve en que sitio y cuales en otro.
Tambén es frecuente que haya más de una fase de optimización del código. Aunque si son demasiadas puede sufrir demora.

El codigo objeto es entonces mas bien informacion que codigo, que el enlazador utiliza para enlazar.
No. El código que consta ahí, es como mínimo una aproximación al código definitivo, si es cierto que pueda adjuntar cierta info precisa para que el linker utilice y que luego descarte. Nuevamente depende del diseño. En general esa info suele ser mínima y tan mínima que lo típico es que se pase en la cadena de comandos... si fueran tan amplia que algún límite en el string lo pudiera cortar, pués puede que el diseñador haya decidido volcar dicha info en algún fichero.
Por ejemplo la cadena de comandos puede estar solicitando que se cree una dll, en vez de un exe... o un driver, o que adjunte también métodos para depuración etc, etc...

Esto me genera un poco de confusion.
Entonces seria algo asi: el compilador se encarga del ordenamiento del algoritmo principal, en forma de "arbol" (digamos).
No hay nada que ordenar a no ser que te refieras a poner las cosas en su sitio... pero no precisa ningún orden específico salvo el lógico que mantiene el propio proyecto.
Si un proyecto se compone de 12 módulos (por ejemplo), uno de ellos será el primero sin duda, el resto no tiene tanta relevancia que posición ocupen, puede que el compilador los tome por orden alfabético del nombre del fichero o puede que haya alguna pesquisa adicional que el propio proyecto aporte y que pueda utilizar para seguir cierto orden (caso de varios proyectos, donde siempre hay uno que es el principal y los otros secundarios)... en general si hay dependencias dichos módulos se compilan antes... el diseño del proyecto suele aportar dicha info, pero si no hay dependencias, y todos los módulos tienen igual relevancia no importa el orden en que se tomen.

Y el enlazador se encarga del ordenamiento de su interaccion con este exterior compuesto de librerias de enlace dinamico, librerias estaticas, etcetera. ¿no?
No sé porque insistes en un 'orden'.

A ver, lo más parecido a 'orden' que te haya indicado es la palabra 'correlativo'...
Supongamos que eres un profesor y x niños van a acudir a un cine y tu los vas a llevar... a medida que suben al bus, si la lista está vacía, tu anotas el nombre de cada uno de forma correlativa (uno debajo del otro), por claridad, no anotando en una línea  3 en otra uno , 5 líneas vacías...
Y si la lista ya está ocupada (porque en otro pase previo ya la completaste), pués ahora señalas una x o tachas cada nombre... antes de salir con el bus repasarás la lista si falta alguno, lo buscarás o puede que haya una nota y ponga que el padre del niño lo entrega 30 km mas allá... (imagina que los llevas al cine en otra ciudad, o al zoo que no lo hay e cualquier sitio)... igual que tienes que resolver esa lista, con cada detalle, problema y anotación, no es disitnto resolver el asunto de las referencias... puede que un niño quisier air pero no haya espacio en el bus, aún así lo tienes anotado, imagina que ahora te llama el padre de2 de ellos y te dice que Pedrito y Juanito no irán porque tienen fiebre, pués tienes que remplazarlos por esos que anotaste al final d ela lista y queen principio no cabían en el bús,, llamas a sus padres y ves si todavía están interesados, etc... imagina los posibles vericuetos y entiende que resolverlos requiere más o menos pasos, pero ya conocidos y cada viaje es disitnto  tendrá sus cosas disitntas a otro previo...

Cuando el compilador encuentra en un módulo, 20 variables a nivel de módulo, 15 métodos, 3 subclases, 3 enumeraciones y 2 estructuras... pués las variables las pondrá juntas al comienzo, en el bloque de datos (pero no importa el orden en que estén lo normal es que se pongan correlativas tal y como se las ha encotnrado en el código. Debajo pondrá las direcciones de las métodos en la raíz del módulo porque son métodos estáticos igual que las variables... en cambio todo lo que es dinámico, como las clases y estructuras aunque también las ponga debajo, en realidad cuando se invoquen (en tiempo de ejecución se clonarán los datos que tengan para ser puestos en la pila (típicamente. admeás ese conado suele ser que se colocan en orden inverso a como aparecen en el código, de hecho es una forma de reconocer que están en la pila), la dirección de entrada al código seguirá estando debajo (también correlativo), junto con su código, pero cada instancia usará el bloque de datos que se haya clonado en la pila... las constantes de enumeración igualmente constarán donde las variables, si bien en los ejecutables pueden ser eliminados pues remplazan en el código el valor que corresponde allí donde se nombran, en cambio en librerías permanecen, como enumeración (con su nombres y valor) porque se usarán por su nombre, forman parte d ela propia autodocumentación de una librería...  Nuevamente en ese caso es cosa del diseñador edel lneguaje donde y como ubicar esa ayuda de la documentación de las librerías. es típico hacer una copia en un ficheor aparte que luego se imorta o referencia desde el IDE cuando se está programando (como sucedes con las famosas librerías TLB, por ejemplo).
En fin, no hay que ordenar solo recorrer y poner valores correlativos...
1 byte direccion X, un entero de 4 bytes x +1, un string x+5, una estructura de 37 bytes x +9, una estrucutra de 8 bytes x + 46...  un metodo estatatico x+54, otro método, x+54 más lo que ocupe el código del anterior, etc... pero al principio es solo una aproximación, si hay alguna referencia que resolver se anota donde queda atrancado, y desde ahí en adelante habrá que reasignar direcciones correlativamente desde donde se quedó... La tabla de símbolos asiste en todo momento con esos detalles que están presentes y que faltan.

Por ejemplo imagina que hay una directiva include... que coloca cierto código en una parte... pués tocará dejar hueco para realojar ese include... aunque lo general es que cuando un lenguaje admite  directivas include, hace un preprocesamiento como fase previa en el compilador, antes incluso de la fase d eanálisis léxico, justamente ahí es importar código fuente, al código fuente que tenía el programador, pero a veces una directiva, puede solicitar que por eficiencia haga un 'inline' esto es que en vez de hacer una llamada a cierta librería, si solo aparece en el código 3 veces y apenas son unas instrucciones las incluye en el código en vez de hacer una llamada a la función de una determinada librería, especialmente si se llamará muchas veces (caso de bucles), por lo que donde antes había una llamada y ocupada x bytes de espacio, ahora hay que alojar quizás y bytes remplazando esa llamada...

Y ¿es el compilador o el enlazador el que auna los algoritmos de un mismo proyecto? Por deduccion de lo anterior pensaria que es el compilador.
El compilador no entiende de 'algoritmos' eso es solo a nivel del programador... un compilador solo entiende el lenguaje en el que está escrito el código, ni mas, ni menos. Dehecho una vez que pase la fase del análisis semántico es cuando se empieza a escribir el código intermedio y ahí ya ni el análisis sintáctico ni el sintáctico saben ya nada de eso, se etapa empieza con el código fuente y acaba cuando lo entrega a l analizador semántico y dispone ya de la tabla de símbolos...
El compilador tiene la misisón de compilar cada módulo que tenga un proyecto, pero quien finalmente los une todos en un solo fichero (o librería), es el linker...

Uf. Cuanto necesitaba leer este articulo.
Me parece interesante que la ignorancia pueda ser una fuente de creatividad. Yo no conocia las maneras en las que se realiza esto y como consecuencia invente varias maneras de hacerlo.
Un compilador tiene demasiados detalles como para describirlos en mensajes, lo que no impide que de una manera imprecisa pueda darse explicaciones que den un bosquejo que aclare ciertas dudas. La exactitud de cada detalle en cambio requiere meterse a fondo.


Corrijo ortografía... se me escapan letras, porque escribo muy rápido y en el teclado se traba a veces alguna tecla por culpa de algunas miguitas que van dando vueltas rebotando entre las teclas...
Páginas: 1 ... 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 [149] 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 ... 432
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines