TARDÍGRADOS

Ciencia en español -ʟᴀ ʀᴀᴢóɴ ᴇsᴛá ᴀʜí ғᴜᴇʀᴀ-

Inteligencia Artificial Generativa (AGI)

Posted by Albert Zotkin on April 26, 2023

Estos días está de actualidad hablar de Inteligencia Artificial, a raíz del lanzamiento mundial de los chat GPT de la Compañía OpenAI. Aproveché la ocasión para saber un poco más sobre en qué consisten esas aplicaciones, y si las puedo usar en mis paginas web. Así fue como descargué la APi de OpenAI para Node.js, adapté sus módulos al lenguaje JHS (desarrollado por mí) para escribir páginas web dinámicas, estilo PHP. La primera aplicación que encontré fue DALL-E, que es una GPT (Generative Pre-trained Transformer), subconjunto de AGI (Artificial Generative Intelligence), capaz de generar imágenes basadas en los textos que le entregues. Por ejemplo, le puedo dar un texto en inglés, o en cualquier otro idioma, y lo entenderá. Y le digo: “portrait of Dali like a van Gogh”, y esto es lo que te ofrece:

Por cierto, el nombre DALL-E, elegido por OpenAI para esta app GPT, está basado en el nombre Dalí, precisamente (Pues así es como se pronuncia en inglés). Veamos ahora algunos detalles técnicos de cómo hacer una ‘request’ por el método GET desde la página cliente al servidor. La app Dall-E está implementada en el módulo OpenAI para Node.js mediante una función asincrónica. Supongamos que mi servidor web lo pongo a la escucha en la URL https://localhost:8000, y la página cliente desde la que se hacen requests a DALL-E es la ‘openai/gen-img.jhs´. Necesitaremos una ‘query string’ con dos variables: una será la variable ‘prompt’, donde enviamos nuestro texto, y la otra la variable ‘size’, donde le diremos de qué tamaño queremos la imagen. Así, nuestra ‘request’ completa del ejemplo, suponiendo que queremos un tamaño mediano de imagen, será está:

'https://localhost:8000/openai/gen-img.jhs?prompt=portrait of Dali like a van Gogh& size=medium'

O si codificamos convemientemente la URl, lo cual sería bastante correcto:

https://localhost:8000/openai/gen-img.jhs?prompt=portrait%20of%20Dali%20like%20a%20van%20Gogh&%20size=medium

Cuando la request sea procesada por nuestro servidor con el método GET, generará el objeto queryobject = {prompt:’portrait of Dali like a van Gogh’, size:’medium’}, el cual es enviado como argumento a la función asincrónica

const response = await openai.createImage({prompt:queryobject.prompt, n: 1, size: queryobject.size});

donde el parámetro adicional n:1, lo dejamos constante, porque sólo queremos una copia de la imagen. Cuando DALL-E termina la tarea que le hemos pedido, nos devuelve el resultado de esta forma:

const result = response.data.data[0].url

es decir, nos envía una url de la imagen generada que tiene almacenada en la nube OpenAI (no nos envía todos los bytes en crudo de la imagen).
Si le volviéramos a enviar la misma request (mismo texto) el resultado sería distinto, pero siempre en contexto.

Otra de las aplicaciones de OpenAI que estuve viendo es la de chat. Más exactamente el modelo para chat ‘gpt-3.5-turbo’. En este caso la función asincrónica es

const response = await openai.createChatCompletion({model, messages});

. Es decir, que en la request de la pagina cliente enviamos dos variables, una será ‘messages’, para los mensajes de texto y nombre de usuario, y otra será ‘model’ para el modelo de GPT que estemos solicitando. El objeto ‘messages’ es un array de objetos compuesto cada uno por dos variables de cadena. Es decir,

messages =[
{role:'albert' , content:'hi assistant, how big is our universe?'},
{role:'albert' , content:'are black holes real?'},
{role:'albert' , content:'Does dark matter exist?'},
{role:'albert' , content:'is our universe a simulation?'},
...
]

. Esto lo hacen asi, para poder chatear con el usuario, poder mantener una conversación con él. La respuesta a cada mensaje que enviemos se extrae así:

 const result = response.data.choices[0].message.content;

Y para finalizar esta breve incursión en la AGI (Inteligencia Artificial Generativa) de OpenAI, combinemos ambas aplicaciones, que sucintamente he presentado, la DALL-E y el modelo GPT 3.5-turbo. A GPT 3.5-turbo le solicito lo siguiente:

 
messages =[
{role:'albert' , content:'hi assistant, can you write a short tale of a rabbit?'},
]

Una vez que leo ese breve cuento, sé que al propagonista le llama Benny, por lo tanto, propongo a DALL-E lo siguiente:

 
prompt:'draw a colorful young and curious rabbit eating a carrot style alice in wonderland'

Y El resultado combinado de ambas consultas es este:

Benny The Rabbit

Once upon a time, there was a young and curious rabbit named Benny. He had soft and white fur and big floppy ears that would bounce as he hopped around the meadow. Benny loved exploring and discovering new things.

One day, while venturing far away from his burrow, Benny found a patch of the sweetest and juiciest carrots he had ever seen. Excitedly, he began to munch on them, savoring their delicious taste.
However, Benny soon realized that he had wandered quite far from home and was now lost in a vast and unfamiliar landscape. The sun began to set, and Benny’s fear grew as the darkness enveloped him.
Just when Benny was about to give up hope, he heard a familiar voice calling his name – it was his mother! She had been searching for him and finally found him just in time.
Benny felt comforted and relieved, knowing that his mother cared for him and would always be there to guide him back home. From then on, Benny always remembered to stay close to his burrow and never venture too far away.

Authors:
script: ‘GPT-3.5-turbo’
illustrations: ‘DALL-E’

Posted in criptografía, Inteligencia artificial | Tagged: , , , , , | Leave a Comment »

Revisión de la Teoría de la Gravitación Modificada de Majorana

Posted by Albert Zotkin on April 17, 2023

El término “apantallamiento gravitacional” se refiere a un hipotético fenómeno de apantallamiento de un objeto de la influencia del campo gravitatorio. Tal proceso, si existe, tendría el efecto de reducir el peso de un objeto. La forma de la región apantallada gravitacionalmente sería similar a una sombra producida por un “escudo gravitacional”. Por ejemplo, la forma de una región apantallada por un disco sería cónica. La distancia del vértice respecto del disco variaría directamente con el diámetro del disco apantallador. Hasta la fecha, parece no existir evidencia alguna de tal efecto de sombra gravitacional. El apantallamiento gravitacional es considerado como una flagrante violación del principio de equivalencia y por lo tanto inconsistente con la Teoría de la Gravitación Universal de Newton y con la teoría general de la Relatividad de Einstein.

majorana

En figura de arriba, el cuerpo A irradia su influencia gravitacional, y el cuerpo intermedio B produciría sombra gravitacional sobre el cuerpo C, por lo tanto la masa del cuerpo C se vería reducida en cierta cantidad, según esta teoría.
Hasta el año 2008, no hubo ningún experimento exitoso respecto a la detección de sombra gravitacional . Para cuantificar dicho efecto, Quirino Majorana propuso un coeficiente de extinción h que modifica la ley de gravitación de Newton, de la siguiente forma:

\displaystyle  F' = \frac{GMm}{r^2}\  e^{-h \int \rho(r) dr}  (1)
donde \rho(r) es la densidad de materia bariónica entre el cuerpo A y el C, M sería la masa de A, m la masa de C, y r la distancia entre ambas masas. Por lo tanto, en la figura de arriba, la densidad \rho(r) sería la cantidad de masa del cuerpo intermedio B.

Las mejores medidas de laboratorio han establecido una cota superior para el apantallamiento gravitatorio de 4.3×10-15 m²/kg. Un análisis más reciente sugiere una cota inferior de 0.6×10-15 m²/kg. La mejor estimación, basada en datos de la mayor precisión de anomalía gravitatoria durante el eclipse de Sol de 1997, ofrece una nueva restricción del coeficiente de extinción h en 6×10-19 m²/kg. Sin embargo, observaciones astronómicas imponen límites más severos. Poincaré, basándose en observaciones lunares de 1908, estableció que h no puede ser mas grande que la cota 10-18 m²/kg. Posteriormente la precisión de esa cota fue mejorada. Eckhardt mostró que los datos obtenidos del experimento Lunar Ranging LR-3 implican una cota superior de 10-22 m²/kg, y Williams y colegas han mejorado dicha cota hasta situarla en h = (3 ± 5)×10-22 m²/kg. Ese valor es menor que la incertidumbre. La consecuencia de esos resultados experimentales negativos (que están muy en consonancia con las predicciones de la teoría general de la relatividad) es que cada teoría que contiene hipótesis de apantallamiento gravitacional, como la teoría de la gravitación de Le Sage, debe reducir esos efectos a un nivel indetectable.

Muy bien, muy bien. Hasta ahora todo lo que he escrito es muy mainstream, muy en la onda de lo oficial de lo politicamente correcto, que viene a decirnos que el apantallamiento gravitacional no existe, y que la teoría general de la relatividad es más o menos el dogma que reina en el paradigma actual de la física teórica. Perfecto, pero ahora viene lo interesante. Pensando un poco, vemos que la teoría que propuso Majorana es interesante pero incompleta. ¿Incompleta por qué?. Incompleta por la sencilla razón de que un apantallamiento gravitacional produciría una pérdida efectiva de masa en el cuerpo situado en la zona de sombra gravitacional, pero eso no se ha observado experimentalmente. Entonces, ¿dónde está el quid de la cuestión?. El quid de la cuestión está en un pequeño detalle que a todos estos pensadores de la física se les ha pasado desapercibido, y es el siguiente: En la figura de arriba donde he dibujado los cuerpos A, B y C, existe sombra gravitacional de B sobre C, por lo que C perdería masa efectiva, pero eso no se observa experimentalmente, por lo tanto, lo que ocurre es que el cuerpo C refleja gravitación sobre el cuerpo intermedio B, de modo que el cuerpo A “ve” al cuerpo C con menos masa efectiva (hipótesis de Majorana), pero también “ve” al cuerpo B con un aumento de su masa efectiva (hipótesis de Zotkin) en la misma cantidad. El resultado de esa simetría en la distribución efectiva de masas es que el centro de masas del sistema B-C está más cerca de A que la predicción clásica de Newton.

Para explicar mejor mi hipótesis, fijémonos en la ecuación (1) de Majorana, donde la fuerza F’ de atracción resulta ser menor que la predicha por la teoría clásica de newton. Mi hipótesis es que debe existir una compensación de masas efectivas. Es decir, la parte de masa efectiva que pierde el cuerpo C la gana el cuerpo B, y eso expresado matemáticamente es así:

\displaystyle F = \frac{GMm}{r^2}\  \cfrac{ e^{-h \int \rho(r) dr} + e^{h \int \rho(r) dr}} {2} \\ \\ \\ \\ F = \frac{GMm}{r^2}\ \cosh \left( h \int \rho(r) dr\right) \\ \\  (2)
y ahora si tendríamos una ley de gravitación modificada que explicaría muchos fenómenos y anomalías gravitacionales.

Saludos

Posted in Astrofísica, Gravedad Cuántica, Relatividad | Tagged: , , , | Leave a Comment »

La reflexión de un rayo de luz en un espejo móvil falsaría la Relatividad Especial

Posted by Albert Zotkin on April 14, 2023

Una fuente de luz y un observador están en reposo en el mismo sistema inercial de referencia, donde r es el vector distancia entre ellos. Un espejo, que se mueve alejándose de ellos perpendicularmente a r por el punto medio, está ahora a una altura h, llevando una velocidad u y refleja luz de la fuente hacia el observador. Podemos conocer las componentes de velocidad v1 y v2 con respecto a la fuente y al observador respectivamente. Esas componentes de velocidad poseen la misma magnitud, v, asi que podemos escribir

u = v_1 + v_2 \\ v = |v_1| = |v_2|

Y en ángulo \alpha entre v_1 y v_2 es

\alpha = 2\tan^{-1}\left(\cfrac{|r|}{2h} \right)

por lo tanto,

|u| = 2 \cos \left ( \cfrac{\alpha}{2} \right )v \\ \\ \\ v = \cfrac{|u|}{ 2 \cos (\frac{\alpha}{2})}

El observador detecta el rayo reflejado como si procediera de la imagen tras el espejo. Puesto que el espejo se mueve con velocidad v1 con respecto a la fuente de luz y con v2 respecto al observador, crea una imagen virtual de la fuente de luz alejándose con una velocidad de w = 2v a lo largo de la linea de vista,

w = 2v = \cfrac{|u|}{\cos(\frac{\alpha}{2})}

Entonces, para esa velocidad virtual w, la cual puede incluso ser superluminal, porque no corresponde a ningún movimiento real entre fuente de luz y observador (recordemos que fuente de luz y observador están en reposo), podemos predecir una frecuencia Doppler observada desplazada hacia el rojo de la frecuencia original f0,

f = f_0 \exp \left (-\cfrac{w}{c} \right ) = f_0 \exp \left (-\cfrac{|u|}{c\cos(\frac{\alpha}{2})}  \right )

*Apéndice: Desde un contexto de la Relatividad Especial, la predicción sería como sigue. Aplica una adición de velocidades de Einstein,

w =  \cfrac{2v}{1 + \frac{v^2}{c^2}}

Ahora aplica un Doppler relativista, así

f' = f_0 \displaystyle \sqrt{\cfrac{1 - \frac{w}{c}}{1 + \frac{w}{c}}}

Y después de un poco de álgebra, sabiendo que v = |u|/(2\cos(\alpha/2)), se obtiene que

f' = - f_0 \displaystyle \cfrac{|u| - 2c\cos(\frac{\alpha}{2}) }{|u| + 2c\cos(\frac{\alpha}{2})}

¿Dónde está el error engañoso en esta derivación?. Podemos ver que hay dos nociones erróneas, las cuales cuando actuan de forma cooperativa, intentan ligéramente compesar la respuesta errónea originando una medianamente decente. El primer error consiste en asumir que debe existir la siguiente adición relativista de las velocidades, w = 2v/(1 + v2/c2). Eso no tiene mucho sentido, es absurdo, ya que w es una velocidad VIRTUAL de la fuente de luz con respecto al observador (pero ambos están en reposo), no una velocidad real (esta puede ser incluso superluminal), una adición relativista de velocidades NO procede ser aplicada en tal caso. Si la w es superluminal , significa que, una vez que el observador detecta el rayo de luz como procedente de la imagen virtual tras el espejo, la información no es más rápida que la luz porque esa información ha viajado en realidad una trayectoria más larga que la de una linea recta desde la fuente de luz al observador, por lo tanto esa información viajó con la luz, no es superluminal. Este error de concepto que se comete en la relatividad especial es después ligeramente corregido cuando se aplica el Doppler relativista a f0 através de esa errónea w, obteniendose una predicción de frecuencia f’ que está muy próxima a la correcta f, que se ha ofrecido arriba. En realidad, f/f0 y f’/f0 sólo empiezan a diferir desde el tercer orden de sus respectivas series de potencias,

\displaystyle \frac{f}{f_0}=  1-\cfrac{\sec\left[\frac{\alpha }{2}\right] |u|}{c}+\cfrac{\sec\left[\frac{\alpha }{2}\right]^2 |u|^2}{2 c^2}-\cfrac{\sec\left[\frac{\alpha }{2}\right]^3 |u|^3}{6 c^3}+\cfrac{\sec\left[\frac{\alpha }{2}\right]^4 |u|^4}{24 c^4}-\cfrac{\sec\left[\frac{\alpha }{2}\right]^5 |u|^5}{120 c^5}+\cdots
\displaystyle \frac{f'}{f_0}= 1-\cfrac{\sec\left[\frac{\alpha }{2}\right] |u|}{c}+ \cfrac{\sec\left[\frac{\alpha }{2}\right]^2 |u|^2}{2 c^2}- \cfrac{\sec\left[\frac{\alpha }{2}\right]^3 |u|^3}{4 c^3}+ \cfrac{\sec\left[\frac{\alpha }{2}\right]^4 |u|^4}{8 c^4}- \cfrac{\sec\left[\frac{\alpha }{2}\right]^5 |u|^5}{16 c^5}\cdots

Posted in Matemáticas, Relatividad | Tagged: , , , , , | 1 Comment »

¿Vivimos en un universo de Möbius?: La antimateria somos nosotros

Posted by Albert Zotkin on February 5, 2023

Posted in Cosmología | Tagged: , , , , , , , , , , , , , , , , , , , | Leave a Comment »

Cosmología: Materia Oscura

Posted by Albert Zotkin on December 28, 2021

Mi comentario respecto a este e-Print es el siguiente:

¿Qué ocurre con la galaxia rica en gas ultra-difusa AGC 14905 que se ha estudiado en el e-Print que he presentado arriba?.

Pues ocurre algo muy sencillo de entender. Es una galaxia muy antigua, y por lo tanto posee poca “materia oscura“. Pongo entre paréntesis la materia oscura para indicar que, según mi hipótesis, lo que se viene llamando materia oscura es simplemente una zona exterior (halo) de potencial gravitatorio positivo. Supongamos que en cierta regíón interestelar, lejos de cualquier sistema masivo, la densidad de materia bariónica es de 0.1 átomos de hidrógeno por cm3, y que hemos asumido para ella que el potencial gravitatorio es cero. Pero, eso es inexacto, ya que el potencial gravitatorio como función de una distribución de masa bariónica en la distancia nunca puede ser cero, aunque sí pude aproximarse mucho a cero si los sistemas masivos están muy lejanos e influyen poco en esa región de potencial.
Es decir, que lo que llamamos materia oscura es algo que se forma, y por lo tanto también es algo que se “evaporará” con el tiempo. En este sentido, cuando se está formando una galaxia, en sus primeras etapas, debe existir poca materia oscura en su halo. Y de igual forma, cuando una galaxia es muy antigua, su foso de materia oscura se ha “evaporado” mucho, hasta quedar en una cantidad mínima que puede ser indetectable.

Cuando se acumula masa bariónica muy rápidamemente en alguna subregión de esa región de potencial, la densidad global de la región permanece constante, y la de la subregión aumenta, por lo tanto, debe existir en el exterior (halo) de esa subregión una zona donde la densidad de materia sea menor que la densidad global de 0.1 átomos de hidrógeno por cm3. Ese halo exterior posee potencial gravitatorio positivo si en nuestras ecuaciones hemos asumido que esa región posee globalmente un potencial gravitatorio de cero. El comportamiento gravitacional de ese halo exterior es exótico y la ciencia actual lo llama “ materia oscura“. ¿Por qué es exótico?, porque aunque ese halo exterior a la subregión posee una densidad mucho más baja que 0.1 átomos de hidrógeno por cm3, su comportamiento es como si fuera el de la existencia de masa, ya que las masas sólo pueden poseer un único signo, el de atracción. Esa masa “virtual” fantasma es la materia oscura, algo que la ciencia actual es incapaz de ver y entender.

Albert Zotkin

Posted in Astrofísica, Cosmología | Tagged: , , , , , , , , , , , , , , , , , , , , , , | 1 Comment »

Criptomonedas: Bitcoin

Posted by Albert Zotkin on November 21, 2021

Posted in Bitcoin, criptografía, Criptomonedas | Tagged: , , , , , , , , , , , , , , , | Leave a Comment »

El número π (PI) visto desde una n-bola

Posted by Albert Zotkin on August 24, 2021

Posted in Matemáticas | Tagged: , , , , , , , , | Leave a Comment »

Método de autosimilaridad para detectar teorías falsas de la relatividad

Posted by Albert Zotkin on August 19, 2021

Posted in criptografía | 3 Comments »

Cómo “robar” bitcoins con una modesta tarjeta gráfica NVIDIA

Posted by Albert Zotkin on July 15, 2021

Hola amigos de Tardígrados. El propósito principal del siguiente documento informático, no es enseñar a robar Bitcoins, eso estaría muy feo sino demostrar la robustez de la protección criptográfica de Bitcoin, y mostrar de paso, con un caso práctico, la casi inexpugnable muralla que ofrece esa criptografía contra posibles ataques, que los hay. ¿Es tan segura esa protección criptográfica?. Sí. Estamos hablando de cadenas de 256 bits. Esas contraseñas serán las semillas para generar las llaves privadas y las direcciones públicas de Bitcoin. O sea, estamos hablando de un número monstruosamente grande de combinaciones. Ese número entero es:

\displaystyle N =2^{2^{2^{3}}}=1157920892373161954235709850086879078532699846656405640394575840079131\ 29639936

que, como vemos, tiene 78 cifras decimales. Para intentar hacernos una idea de lo que ese número representa, supongamos que tenemos una lista de 135 direcciones de Bitcoins, que queremos atacar. Atacar, aquí quiere decir descubrir la clave privada desde la dirección publica. Entonces la probabilidad de dar con una de esas 135 claves sería de:

\displaystyle P =\frac{135}{ 2^{2^{2^{3}}} } = 1.1658827549377500244271575014780539421006600491989 \text{ x } 10^{-75}

Es decir, aun suponiendo que nuestra computadora fuera capaz de procesar 1 millón de direcciones por segundo, tendríamos por delante aún unos

\displaystyle t =\frac{ 2^{2^{2^{3}}} }{135 \times 1000000} = 8.5771917953567552165608137043472524335755544196771 \text{ x } 10^{68} \text{ segundos}

para encontrar la primera de esas 135 direcciones de la lista que queremos atacar. Creo que ni Matusalén conseguiría vivir tanto para ver como se consigue ese primer hallazgo 🙂

Mi tarjeta gráfica es una NVIDIA GeForce GT 430. Escribiremos un pequeño programa para Node.JS , en el que aceleraremos la computación mediante tarjeta gráfica, es decir, usaremos la GPU de la tarjeta gráfica, en lugar de la CPU de la computadora. Para la computación con tarjeta gráfica usaremos el módulo gpu.js, el cual posee un javascript de aceleración muy interesante. Para trabajar con bitcoins, yo uso el módulo bitcore-lib, donde además de las herramientas para bitcoin también trae otras interesantes utilidades. Empecemos abriendo un editor de texto cualquiera, y escribamos las primeras instrucciones de nuestro programilla, que como sabemos deberá ser escrito en lenguaje javascript, ya que es para Node.JS .

  1. const {GPU} = require(‘./gpu.js’);
  2. const bitcore = require(‘bitcore-lib’);
  3. const crypto = require(‘crypto’);
  4. const fs = require(‘fs’);
  5. const gpu = new GPU();
  6. var argv = require(‘yargs’)
  7. .usage(‘Usage: $0 –range [num] –samples [num]’)
  8. /*.demand([‘range’,’samples’])*/
  9. .argv;
  10. const jsonutil = require(‘jsonutil’);
  11. const JSONStream = require(‘JSONStream’);
Los módulos gpu.js, yargs, jsonutil y bitcore-lib, los puedes decargar desde npm. Los módulos crypto y fs, no, porque ya vienen incluidos en el propio Node.js.
Nuestro programilla, que trabajará desde una consola DOS de windows mediante comandos, tiene el módulo yargs, con el que definimos dos argumentos para pasar en la linea de comandos al ser ejecutado. Nuestro primer argumento será –range [num], y en él especificaremos el número de coincidencias que deseamos (obviamente, desearíamos un número de coincidencias pleno, pero como esta es sólo una herramienta demostrativa, tenemos que dar juego a las coincidencias. Las direcciones públicas de bitcoin poseen 34 caracteres, porque están codificadas en Base58, por lo tanto el juego podrá ir desde 1 coincidencias hasta el pleno de 34. ¿Por qué 34?. Porque son números hexadecimales de 50 dígitos, que están codificados en Base58. Después usaremos en nuestra linea de comando el argumento –samples [num], que será el número de direcciones que queremos en nuestra lista de resultados, Obviamente si nuestra lista de direcciones objetivo es de 135, el número num que sigue a –samples no podrá ser nunca mayor a esos 135.
Sigamos escribiendo nuestro código en nuestro editor de textos favorito:

  1. const range = argv.range?parseInt(argv.range):4;
  2. var max_limit = argv.samples?parseInt(argv.samples):10;
  3. const file = “keys-“+range+“.json”;
  4. var results_file = “keys-“+range+“.json”;
  5. var jsonwriter = JSONStream.stringify();
  6. var jsonwriter_file = fs.createWriteStream(results_file);
  7. jsonwriter.pipe(jsonwriter_file);
  8. const objetive_addrs =[// list of bitcoin public addreses, can’t be empty
  9. //…TODO
  10. ];
  11. const objetive_size = 100;
  12. const m = Fill(objetive_size);
  13. const render = gpu.createKernel(function(a,m) {
  14. var h = a[this.thread.y][this.thread.x];
  15. var c = m[this.thread.y][this.thread.x];
  16. if(h == c) return h;
  17. return 1;
  18. }).setOutput([42, objetive_size]);
  19. var n=0;
  20. var time0 = Date.now();
  21. var total=0;
  22. var stop = 8;
  23. var keys = {
  24. phrase:null,
  25. private_key:null,
  26. wif:null,
  27. public_address:null,
  28. objetive_addrs:null
  29. };
En las lineas 14 y 15 pasamos los argumentos –range y –samples a sus respectivas variables range y max_limit. En las lineas 16 y 17 nombramos 2 archivos con el mismo nombre.. En las lineas 18 a 20 creamos los streams para escribir el archivo results_file.

El resto del programilla es como sigue:

  1. /***********************************************************************************************************/
  2. console.log(\x1b[32m***************************************************\x1b[0m”);
  3. console.log(\x1b[32m*******************\x1b[0m\x1b[92m THE IMPOSSIBLE\x1b[0m\x1b[32m ****************\x1b[0m”);
  4. console.log(\x1b[32m*******\x1b[0m\x1b[92mIt’s kind of fun to do the impossible\x1b[0m\x1b[32m*******\x1b[0m”);
  5. console.log(\x1b[32m—————RANGE \x1b[1m%s\x1b[0m \x1b[35mwith samples\x1b[0m \x1b[1m%s\x1b[0m \x1b[35mSTARTED—————\x1b[0m”,range,max_limit);
  6. console.log({miners_size:objetive_adrs.length});
  7. while(n < max_limit){
  8. var ar = FillArray(miners_size);
  9. var a = ar[0];
  10. var b = ar[1];
  11. var p = ar[2];
  12. var w = ar[3];
  13. var r = render(a,m);
  14. var t = filterArray(r, a, b, p, w, m, range);
  15. if(t.length){
  16. for(var i=0;i<t.length;i++){
  17. keys.phrase = t[i][0];
  18. keys.private_key = t[i][1];
  19. keys.wif = t[i][2];
  20. keys.public_address = t[i][3];
  21. keys.miner__address = t[i][4];
  22. jsonwriter.write(keys);
  23. var pair = highlight(t[i]);
  24. keys.phrase = pair[0];
  25. keys.private_key = pair[1];
  26. keys.wif = pair[2];
  27. keys.public_address = pair[3];
  28. keys.miner__address = pair[4];
  29. consola(keys);
  30. var time = Date.now()time0;
  31. total += time;
  32. time0 = Date.now();
  33. console.log(\x1b[33mNew keys has been appended to file \x1b[1m%s\x1b[0m. \x1b[33mDuration of this sample: \x1b[31m\x1b[1m%s\x1b[0m \x1b[33mseconds\x1b[0m”,results_file, time/1000);
  34. }
  35. n++;
  36. if(n==max_limit) {
  37. jsonwriter.end();
  38. console.log(“max-limit of %s samples reached. Job terminated.”,max_limit);
  39. console.log(\x1b[33m – Total \x1b[1mduration\x1b[0m \x1b[33mof job: \x1b[31m\x1b[1m%s\x1b[0m \x1b[33mseconds – \x1b[0m”,total/1000);
  40. break;
  41. }
  42. }
  43. }
  44. /******************************************************/
  45. function FillArray(size){
  46. var a = [];
  47. var b = [];
  48. var p = [];
  49. var w = [];
  50. for(var j = 0;j < size;j++){
  51. var t = [];
  52. var hash = crypto.randomBytes(32);
  53. //var hash = bitcore.crypto.Hash.sha256(crypto.randomBytes(32));
  54. var bn = bitcore.crypto.BN.fromBuffer(hash);
  55. var privateKey = new bitcore.PrivateKey(bn);
  56. var address = privateKey.toAddress().toString(‘hex’);
  57. b.push(hash.toString(‘hex’));
  58. p.push(privateKey.toString(‘hex’));
  59. w.push(privateKey.toWIF().toString(‘hex’));
  60. for(var i = 0;i < address.length;i++){
  61. t.push(address.charCodeAt(i));
  62. }
  63. a.push(t);
  64. }
  65. return [a,b,p,w];
  66. }
  67. function FillMiners(size){
  68. var a = [];
  69. var k = 0;
  70. for(var j = 0;j < size;j++){
  71. if(k == objetive_adrs.length)k=0;
  72. var address = objetive_adrs[k];
  73. k++;
  74. var t = [];
  75. for(var i = 0;i < 42;i++){
  76. if(i<address.length)
  77. t.push(address.charCodeAt(i));
  78. else
  79. t.push(0);
  80. }
  81. a.push(t);
  82. }
  83. return a;
  84. }
  85. function FillMiners2(size){
  86. var a = [];
  87. var k = 0;
  88. for(var j = 0;j < size;j++){
  89. if(k == objetive_addrs.length)k=0;
  90. var address = objetive_addrs[k];
  91. k++;
  92. var t = [];
  93. for(var i = 0;i < 42;i++){
  94. if(i<address.length)
  95. t.push(address.charCodeAt(i));
  96. else
  97. t.push(0);
  98. }
  99. a.push(t);
  100. }
  101. return a;
  102. }
  103. function check(a) {
  104. return a != 1;
  105. }
  106. function filterArray(r, a, b, p, w, m, range){
  107. var f = [];
  108. for(i in r){
  109. var s = r[i].filter(check);
  110. if(s.length >= range){
  111. var a1 = new Buffer.from(a[i]).toString();
  112. var b1 = b[i];
  113. var p1 = p[i];
  114. var w1 = w[i];
  115. var m1 = new Buffer.from(objetive_adrs[i]).toString();
  116. f.push([b1,p1,w1,a1,m1]);
  117. }
  118. }
  119. return f;
  120. }
  121. // funciones para imprimir resultados en la consols DOS de Winsdows
  122. function highlight(keys){
  123. var pa = keys[3].split();
  124. var ma = keys[4].split();
  125. const h =\x1b[1m’;
  126. const t =\x1b[0m\x1b[32m’;
  127. const y =\x1b[33m’;
  128. const g =\x1b[32m’;
  129. for(id in pa){
  130. if(pa[id] == ma[id]){
  131. pa[id] = ma[id] = h+ma[id]+t;
  132. }
  133. }
  134. var b = y+keys[0]+\x1b[0m’;
  135. var p = y+keys[1]+\x1b[0m’;
  136. var w = y+keys[2]+\x1b[0m’;
  137. var pa2 = g+pa.join()+\x1b[0m’;
  138. var ma2 = g+ma.join()+\x1b[0m’;
  139. return [b,p,w,pa2,ma2];
  140. }
  141. function consola(json){
  142. var a = JSON.stringify(json,null,8);
  143. a = a.replace(/”/g,);
  144. a = a.replace(/\\u001b/g,\x1b’);
  145. process.stdout.write(a);
  146. }
  147. /******************************************************/

Saludos

Posted in Bitcoin, criptografía, Criptomonedas, informática | Tagged: , , , , , , , , , , , | Leave a Comment »

Formalismos incorrectos de la Relatividad Especial

Posted by Albert Zotkin on July 6, 2021

“Quien parte de principios erróneos termina en conclusiones equivocadas”
Uno de los embrollos más tremendos en Física Teórica surge cuando intentamos calcular la velocidad de una fuente de luz mediante la medida de su desplazamiento Doppler, o cuando calculamos cualquier magnitud física que implica velocidades relativas entre fuente de luz y observador. A menudo es materia de discusión el tema de si la velocidad de la luz es independiente de la velocidad de la fuente, o si no lo es respecto a la velocidad del observador. Una cosa parece estar clara, la respuesta a esta clase de cuestiones es que las velocidades relativas parecen depender de la teoría desde la que se consideran. La teoría de la Relatividad Especial, y la Teoría General de la Relatividad, han contribuido notablemente a ese embrollo brutal.

Sería interesante poder separar el grano de la paja seleccionando formalismos matemáticos que no incluyen velocidades explícitamente. Por lo tanto, en lugar de trabajar con velocidades relativas podemos trabajar con energía total, energía cinética y momento. Al realizar esta siega evitamos manejar resultados que pudieran ser vistos como dependientes de la teoría.

Así pues, un “formalismo correcto” será desde ahora aquel que no exhibe explicitamente velocidades, “formalismo incorrecto” será aquel que contenga explícitamente velocidades.

Empecemos con algunos ejemplos, que serían independientes de la teoría desde la que se consideran, y que serían “correctos“:

A. Fórmulas correctas:

A1. Energía en reposo de un cuerpo

\displaystyle E_0 = m_0 c^2

A2. Relación Energía-momento

E^2 = (m_0 c^2)^2 + (p c)^2

A3. Doppler relativista expresado en función de E/E_0

f = f_0 \left ( \frac{E}{E_0} \pm \sqrt{ (\frac{E}{E_0})^2 - 1 } \right )

A4. Energía total expresada como energía en reposo más energía cinética

A5. Momento relativista expresado en función de E, E_0 and c

p = \pm E_0 \cfrac{\sqrt{(E/E_0)^2 - 1}}{c}

B. Algunas fórmulas “incorrectas” que dan respuestas “correctas” según se especifica en la sección A.

B1. Doppler relativista expresado en función de v,

f = f_0 \sqrt{\cfrac{1+v/c}{1-v/c}}

B2. Momento relativista

p = m_0 \cfrac{v}{ \sqrt{ 1-\frac{v^2}{c^2} } }

B3. Energía cinética relativista

K = m_0 c^2 \left (\cfrac{1}{ \sqrt{ 1-\frac{v^2}{c^2} } } - 1 \right)

B4. Energía total expresada en función de la energía en reposo y la velocidad v

E = m_0 \cfrac{c^2}{ \sqrt{ 1-\frac{v^2}{c^2} } }

Estas fórmulas de la sección B son “incorrectas“, según la definición de “correcto” ofrecida arriba. Podemos ver que cualquier fórmula de la sección A puede ser hallada desde estas de la sección B. Pero eso sólo significa que las fórmulas en B pertenecen a una teoría ( por ejemplo la relatividad especial) donde la velocidad es dependiente de la teoría.

Los siguientes ejemplos pertenecen a una teoría distinta desde la que se pueden derivar las mismas fórmulas “correctas” expresadas en la sección A.

C. Algunas fórmulas alternativas que dan la respuesta correcta

C1. Doppler Relativista Galileano expresado en función de v,

f = f_0 \exp \left ( \frac{v}{c} \right )

C2. Momento relativista Galileano,

p = m_0 c \sinh \left (\frac{v}{c}\right)

C3. Energía cinética Galileana

K = m_0 c^2 \left (\cosh (\frac{v}{c}) - 1 \right)

C4. Energía total Galileana expresada en función de la energía en reposo y velocidad v

E = m_0 c^2 \cosh \left (\frac{v}{c} \right)

Según la definición de “correcto“, las fórmulas en la secciones B y C son “incorrectas” porque incluyen explícitamente la velocidad v ( así pues v es dependiente de la teoría), pero desde cada conjunto de fórmulas se pueden derivar las fórmulas correctas de A.

También sería interesante incluir algunos ejemplos desde la mecánica Newtoniana, y ver por qué la mayoría de ellos no pueden ser incluidos en la sección A de fórmulas “correctas“,

D. Fórmulas de la mecánica Newtoniana que son “incorrectas“, aunque no incluyen explicitamente la velocidad v:

D1. Doppler relativista Newtoniano expresado en función de E/E_0

f = f_0 \left (1 \pm \sqrt{\frac{2E}{E_0} - 2} \right )

D2. Momento Newtoniano expresado en función de E   , E_0    y c

p = \pm E_0 \cfrac{\sqrt{\frac{2E}{E_0} - 2}}{c}

La conclusión es clara. Podemos expresar la ratio “correctav/c en función de la energía total E y la energía en reposo E_0    , como

\cfrac{v}{c} = \pm \sqrt{1 - \frac{E_0^2}{E^2}}

o como

\cfrac{v}{c} = \pm \cosh^{-1}( \frac{E}{E_0})

Por lo tanto, cualquier teoría que produzca una ratio diferente sería “incorrecta” en el sentido de que no daría respuestas “correctas“, tal y como están definidas en la sección A.

La mecanica Newtoniana da la ratio

\cfrac{v}{c} = \pm \sqrt{\frac{2E}{E_0} - 2}

La Relatividad Especial y la Relatividad Galileana Completa (el conjunto de fórmulas que he ofrecido en la sección C) dan la ratio “correcta“, por lo tanto son indistinguibles experimentalmente la una de la otra, sólo se distinguen desde sus postulados y formalismos, pero nunca desde sus predicciones observables.

Saludos formales e incorrectos a todos

Posted in Relatividad | Tagged: , , , , , , , , , , , , , , , , , , , , , , , , , , , , | 2 Comments »