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

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


  Mostrar Temas
Páginas: 1 2 3 4 [5] 6 7 8 9 10
41  Programación / Programación C/C++ / PoC, más rapido if-else o switch? en: 7 Diciembre 2014, 23:35 pm
Los que me conocen por aquí, saben que me gusta discutir por tonterias como estas(y que me gusta hacer posts largos)... hace poco estaba hablando sobre un tema con mDrinky y discutíamos si el código compilado de if else es el mismo que switch o si switch era más rápido...

aquí mi prueba de concepto... switch es más rápido... muy ligeramente más rápido

leo un archivo (pi2.txt) y repito 100 veces con 1.000.000 de valores leidos, calculo promedio y repito por el otro metodo
Código
  1. #include <iostream>
  2. #include <fstream>
  3. #include <ctime>
  4. using namespace std;
  5.  
  6. int ifelse_op(int largo, char memoria[]);
  7. int switch_op(int largo, char memoria[]);
  8.  
  9.  
  10. int main(){
  11. int a = 0;//control de ciclos
  12. int ciclos = 100;//cantidad de muestras
  13. /*tiempos*/
  14. float promedio = 0;
  15. float max = 0;
  16. float min = (unsigned int)-1;//maximo u_int
  17. float buff = 0;
  18. /*********/
  19.  
  20. /*pasamos el archivo a ram, cuidado con archios grandes*/
  21. ifstream archivo ("pi2.txt",ios::ate);//abrimos con apuntador al final
  22. int largo =(int) archivo.tellg();//calculamos el largo por el apuntador
  23.  
  24.   archivo.seekg (0, ios::beg);//colocamos apuntador en el inicio
  25.   char memoria[largo];//char-s tan largo como archivo
  26.    archivo.read (memoria, largo);//botamos archivo completo a memoria
  27.    archivo.close();//listo con el archivo
  28.  
  29. /*primer metodo if-else*/
  30. for(a=0;a<ciclos;a++){
  31. buff = ifelse_op(largo,memoria);
  32. promedio += buff;//suma para promedio
  33. max = max>buff?max:buff;//si maximo es menor que buff max=buff
  34. min = min<buff?min:buff;//si minimo es mayor que buff min=buff
  35. }
  36. promedio/=ciclos;//promedia
  37. cout << "promedio if-else: " << promedio/CLOCKS_PER_SEC << "s" << endl;
  38. cout << "min if-else:" << min/CLOCKS_PER_SEC << "s - ";
  39. cout << "max if-else:" << max/CLOCKS_PER_SEC << "s" <<endl;
  40.  
  41. /*se reinician las variables*/
  42. promedio = 0;
  43. max = 0;
  44. min = (unsigned int)-1;
  45. /****************************/
  46. /*segundo metodo switch*/
  47. for(a=0;a<ciclos;a++){
  48. buff = switch_op(largo,memoria);
  49. promedio += buff;
  50. max = max>buff?max:buff;
  51. min = min<buff?min:buff;
  52. }
  53. promedio/=ciclos;
  54. cout << "promedio if-else: " << promedio/CLOCKS_PER_SEC << "s" << endl;
  55. cout << "min if-else:" << min/CLOCKS_PER_SEC << "s - ";
  56. cout << "max if-else:" << max/CLOCKS_PER_SEC << "s" <<endl;
  57. return 0;
  58. }
  59.  
  60. /*****************************************/
  61. int ifelse_op(int largo, char memoria[]){
  62. clock_t inicio_reloj = clock();//tiempo inicial
  63. int control;//variable para control
  64. int i;//control de ciclos
  65. for(i=0;i<largo;i++){
  66. //char valor = memoria[i];//trampa a mi favor mwahaha!!
  67. if(memoria[i]=='1') control = 1;
  68. else if(memoria[i]=='2')control = 2;
  69. else if(memoria[i]=='3')control = 3;
  70. else if(memoria[i]=='4')control = 4;
  71. else if(memoria[i]=='5')control = 5;
  72. else if(memoria[i]=='6')control = 6;
  73. else if(memoria[i]=='7')control = 7;
  74. else if(memoria[i]=='8')control = 8;
  75. else if(memoria[i]=='9')control = 9;
  76. else if(memoria[i]=='0')control = 0;
  77. else control = 0;
  78. }
  79. return clock() - inicio_reloj;//retorna tiempo
  80. }
  81.  
  82. int switch_op(int largo, char memoria[]){
  83. clock_t inicio_reloj = clock();//tiempo inicial
  84. int control;//variable para control
  85. int i;//control de ciclos
  86. for(i=0;i<largo;i++){
  87. //char valor = memoria[i];
  88. switch (memoria[i]){
  89. case '1':control =  1;
  90. case '2':control =  2;
  91. case '3':control =  3;
  92. case '4':control =  4;
  93. case '5':control =  5;
  94. case '6':control =  6;
  95. case '7':control =  7;
  96. case '8':control =  8;
  97. case '9':control =  9;
  98. case '0':control =  0;
  99. default: control =  0;
  100. }
  101. }
  102. return clock() - inicio_reloj;//retorna tiempo
  103. }
  104.  
  105.  

con mi perolita los resultados son
Código:
promedio if-else: 0.0238996s
min if-else:0.023581s - max if-else:0.024229s
promedio if-else: 0.0180653s
min if-else:0.018014s - max if-else:0.018394s

con ligeras variaciones menores a +-0.0007 dando como resultado un switch 8% más rápido que el if :P

si alguien cree que mi metodología o código esta mal o me equivoqué avisen

el archivo pi2.txt es un archivo que tengo por ahí tiempo y lo uso para probar cosas, es una generacion de pi a 1.000.000 de decimales, sin cabeceras, ni texto y medio mocho... son casi 1.1mb, si lo quieren, aqui está

https://mega.co.nz/#!6xAmGIaA!FtCMe4bM5NVm-gcO2zW-myUWlBdLI3TqlweAhKaQ-0I


PD: codigo corregido...
42  Programación / Scripting / [Aporte] Código para generar tableros validos de sudoku en: 23 Noviembre 2014, 21:08 pm
Estaba buscando como resolver unos problemas y aprendiendo python (ya que puedo programar en android con QPython) asi que decidi hacer un metodo para generar tableros validos de sudoku, se genera un tablero original y con desplazamientos se lleva a la posición generada segun la semilla... la semilla genera (teoricamente) 60466175 tableros unicos

Si cualquier duda avisen

Código
  1. import pprint
  2.  
  3. #crea array bidimensiona
  4. def create_matrix(m, n): return [[0]*n for _ in xrange(m)]
  5.  
  6. #gira la matriz ccw
  7. def rotar_matrix(matrix):
  8.  matrix_auxiliar = create_matrix(9,9)
  9.  for x in range(9):
  10.    for y in range(9):
  11.      matrix_auxiliar[y][x] = matrix[x][y]
  12.  return matrix_auxiliar
  13.  
  14.  
  15.  
  16. def generar_tablero(semilla):
  17.  #se genera un sudoku base sobre el que aplicar transformaciones
  18.  basesudoku = create_matrix(9,9)
  19.  for y in range(9):
  20.    for x in range(9):
  21.      basesudoku[y][x]= (x+(y%3)*3+(y/3))%9+1
  22.  #declaracion e inicializacion de variables
  23.  #variables de transformacion
  24.  #desplazamiento del 0 al 8
  25.  desplazamiento = 0
  26.  #rotacion del 0 al 3
  27.  rotacion = 0
  28.  #combinacion cada elemento del 0 al 5
  29.  combinacion = [0,0,0,0,0,0,0,0]
  30.  
  31.  #numero generatriz de 0 60466175
  32.  desplazamiento = semilla%9
  33.  semilla /=9
  34.  rotacion = semilla%4
  35.  semilla /=4
  36.  for i in range(8):
  37.    combinacion[i] = semilla%6
  38.    semilla /= 6
  39.  
  40.  #sudoku final
  41.  sudoku = create_matrix(9,9)
  42.  
  43.  #auxiliar para copiar elementos
  44.  auxiliar = create_matrix(3,9)
  45.  
  46.  #posibles combinaciones de 3 elementos
  47.  combinatorias = create_matrix(6,3)
  48.  combinatorias = [[0,1,2],[1,2,0],[2,0,1],[1,0,2],[0,2,1],[2,1,0]]
  49.  
  50.  #combinacion para cada elemento segun combinacion escogida
  51.  combinador = create_matrix (8,3)
  52.  for i in range(8):combinador[i] = combinatorias[combinacion[i]]
  53.  
  54.  #modificacion de matriz por desplazamiento lateral con desp
  55.  for y in range(9):
  56.    for x in range(9):
  57.      sudoku[y][x] = basesudoku[y][(x+desplazamiento)%9]
  58.  
  59.  #mecla lineas de 3 en 3 segun combinacion
  60.  for z in range(3):
  61.    for copia in range(3): auxiliar[copia] = sudoku[z*3+copia]
  62.    for y in range(3):
  63.      sudoku[z*3+y] = auxiliar[combinador[z][y]]
  64.  
  65.  #se copia sudoku en auxiliar
  66.  auxiliar = sudoku[:]
  67.  
  68.  #se mezclan los 3 renglones mayores
  69.  for z in range(3):
  70.    for y in range(3):
  71.      sudoku[z*3+y] = auxiliar[combinador[3][z]*3+y]
  72.  
  73.  #se rota la matriz para aplicar conversiones en otro eje
  74.  sudoku = rotar_matrix(sudoku)
  75.  
  76.  #se repite el proceso
  77.  for z in range(3):
  78.    for copia in range(3): auxiliar[copia] = sudoku[z*3+copia]
  79.    for y in range(3):
  80.      sudoku[z*3+y] = auxiliar[combinador[z+4][y]]
  81.  
  82.  auxiliar = sudoku[:]
  83.  
  84.  for z in range(3):
  85.    for y in range(3):
  86.      sudoku[z*3+y] = auxiliar[combinador[7][z]*3+y]
  87.  
  88.  #se endereza la matriz a su orientacion original
  89.  for i in range(3): sudoku = rotar_matrix(sudoku)
  90.  
  91.  #se le da la orientacion indicada en rot
  92.  for i in range(rotacion): sudoku = rotar_matrix(sudoku)
  93.  return sudoku
  94.  
  95. pprint.pprint( generar_tablero(0) )
  96.  



[Elektro]: Título corregido, ponía "odigo" :P
43  Foros Generales / Sugerencias y dudas sobre el Foro / Reglas del foro, sub-foro y razon por lo que temas podrán ser eliminados en: 17 Noviembre 2014, 07:01 am
renovando este tema, aclaro aquí las razones por lo que los temas serán modificados, bloqueados, movidos o eliminados

Aquí las reglas del foro en caso de dudas

1- Temas con Asuntos (Títulos) en mayúsculas podrán ser borrados (I.A.1.a.)
2- Temas con Asuntos que sean no descriptivos (como "ayuda", "urgente", etc)  podrán ser borrados o modificados (I.A.1.a.)
3- Ortografía y redacción muy malas podrán ser borrados (sin remordimiento) (I.A.1.a.)

4- Los links deben ser principalmente de carácter informativo, cualquiera que se considere spam, será modificado y bloqueado, o según el fin, eliminados directamente (modificación de la regla I.B.2.b.)
5- Prohibido publicar Email, el tema será modificado (II.A.1.c.)
6- Posts con textos en mayúsculas serán modificados o borrados depende de la gravedad (III.C.1.)

7- Temas que pertenezcan a otros sub-foros serán movidos (I.A.1.c.)
8- Publicar el mismo tema 2 o más veces en este u otro sub-foro será razón de eliminación (I.A.1.c.)
9- Múltiples respuestas seguidas al mismo tema desde el mismo usuario serán modificadas o eliminadas
10- Las respuestas deben mantener la coherencia dentro del tema, de no hacerlo podrán ser eliminados (I.A.2.a.)
11- Respuestas que revivan temas de más de 60 días sin actividad más que temas que realmente lo ameriten (I.A.2.a.)

12- Ataques o insultos a otros usuarios no serán tolerados, el tema puede ser bloqueado, el mensaje modificado o borrado, el asunto puede contraer penas mayores (III.C.3.)

13- El foro no promueve contenido no ético o ilegal, cualquier tema con relación está prohibido (I.A.1.a.)

De indicarse la violación, el usuario debe corregirla antes de su próxima respuesta, si no, acciones serán tomadas, de otra manera si no se ha hecho correción en los 2 días continuos podrán ser tomadas acciones

No se deben olvidar estos 2 temas
10 pasos para plantear una duda informática
FAQ : Como hacer preguntas "inteligentes"

En caso de desconocer el motivo del borrado de un mensaje, queda terminantemente prohibido volver a publicar el mismo mensaje, la forma de proceder será mandando un Mensaje Personal al moderador de ese subforo, en caso de no tenerlo, a cualquier Moderador Global, Coadmin o Admin. (III.C.1.a. segundo parrafo)
44  Foros Generales / Foro Libre / Algunos se sentirán identificados con este comic (visual studio) en: 11 Noviembre 2014, 21:32 pm
45  Foros Generales / Noticias / Un fallo de CSRF en Twitter para robarte la cuenta en: 25 Septiembre 2014, 23:53 pm
Los ataques de CSRF (Cross-Site Request Forgery) son conocidos hace bastante tiempo. La idea de ellos es bastante sencilla, y el objetivo es conseguir que una víctima, que tiene una sesión con su cuenta en un sitio web, haga acciones involuntarias en esa sesión al abrir un enlace o cargar un contenido externo.

A día de hoy es una de las técnicas de hacking más utilizadas, y en el proyecto OWASP TOP TEN, que recoge los diez ataques más utilizadas en ataques a aplicaciones web y donde siguen reinando las técnicas de SQL Injection y el resto de inyecciones de código, ocupa el octavo lugar.


Leer Mas: http://www.elladodelmal.com/2014/09/un-fallo-de-csrf-en-twitter-para.html
46  Sistemas Operativos / GNU/Linux / problema resolucion pantalla linux mint... en: 15 Septiembre 2014, 03:39 am
hola! por fin me pase a linux mint 17

me va bien... los primeros dias excelente, el asunto es que yo estoy en una laptop y cuando llego a mi casa conecto a mi monitor y lo uso como principal... ahora me veo en un problema...

mi monitor principal es un 1440x900, la laptop 1366x768

cuando los instalé agarro el 1440x900 perfecto, varios dias, apagando y prediendo la pc, ciendo pelis, jugando, etc., me fui unos dias solo con la laptop, todo funcionó perfecto...

ahorita vuelvo y conecto a mi monitor, vuelve a la configuración que tuvo la primera vez que conecté, 1024x768 pantallas espejadas, al pasar mi monitor principal a 1440x900, el monitor me lanza un error "resolución mayor de la soportada", me paso a windows y funciona perfecto la 1440x900 (así que descarto que sea error del monitor)

lo que hice es que tengo la pantalla en 1152x864 por experimentar, y pasa algo curioso... mi pantalla dice que la resolucion es 1152x870... y me doy cuenta que el linux está enviando una resolucion mayor a la real (aparentemente)

conseguí en internet una solucion a alguien similar

primero
Código:
cvt 1440 900
y me responde
Citar
1440x900 59.89 Hz (CVT 1.30MA) hsync: 55.93 kHz; pclk: 106.50 MHz
Modeline "1440x900_60.00" 106.50 1440 1528 1672 1904 900 903 909 934 -hsync +vsync

segundo
Código:
xrandr --newmode "1440x900_60.00" 106.50 1440 1528 1672 1904 900 903 909 934 -hsync +vsync
como indican...

revisé la lista de dispositivos y mi pantalla parece ser VGA-0 (por la lista de resoluciones)
asi que
tercero
Código:
xrandr --addmode VGA-0 "1440x900_60.00"

por ultimo para probar
Código:
xrandr --output VGA-0 --mode "1440x900_60.00"
ellos indican que esto es solo para probar, hay que hacer algo para hacerlo permanente, el comando corre, pero sucede algo malo...

mi pantalla parece comprimida (con una legibilidad terrible), entonces me voy a la configuración de la pantalla y dice que la resolucion está en 1152x900

realmente ya no se más que hacer y no consigo nada referente... así que... ayuda!? :s


-----------------------------------------------modificado------------------------------------------
agrego info, al reiniciar el logo de mint está fuera del centro, queda hacia arriba unos 400px de mas
47  Sistemas Operativos / GNU/Linux / Problemas con Debian en: 9 Septiembre 2014, 13:00 pm
Lo estoy intentando sinceramente... quiero pasarme a linux, ubuntu más allá del aspecto, no me gusta, así que decidi montar debian...

el aspecto inicial es terrible, es como ver un windows 3.1 XD si, soy superficial con los sistemas operativos (aún cuando el w7 nunca lo toqué, ni el mac osx)

instale el infinity para letras, se ve bien... (aunque la tipografia de este foro se ve de terror) y los iconos arriba no me gustan...





busqué varios themes que se veían bien, descargo veo que son .theme, intenté doble click pero no! no podia ser así de simple!


herramientas del sistema->configuracion avanzada

y donde según el tutorial debo escogerlo... sopresa -.- en gris con un signo amarillo de admiracion en un triangulo y simplemente no puedo y listo




alguien me ayuda a resolver eso o a un workaround... a demás usaré este post para publicar mis miles de proximos problemas -.-

- por otro lado... no me deja instalar chrome -.- simplemente me da errores con una librería que no existe para debian... por synaptic, simplemente me dice que no, y por gestor de paquetes me ignora
48  Seguridad Informática / Hacking Wireless / Antenas Wifi caseras de alta potencia en: 9 Septiembre 2014, 02:49 am
Aunque algunos dirán que no es hacking wireless porque se van por el concepto que no es romper redes, si es hacking porque implica modificar sistemas para cambiar o mejorar su funcionamiento...

aqui un articulo que me gustó donde dan usa idea y algunas cosas para construir antenas wifi de alta portencia (según dicen hasta 1000km, pero lo dudo) incluso aseguran que son buenas son vista directa y algo de teoría para hacer mejores :P

http://www.elladodelmal.com/2014/09/como-construir-antenas-wifi-de-gran.html
49  Foros Generales / Foro Libre / Francotirador y efecto coreolis en: 8 Septiembre 2014, 07:35 am
Anoche vi un tema que me pegó un poco...

afirmaba que los francotiradores ajustaban su tiro porque la rotacion de la tierra afectaba su trayectoria...

entonces decidí echar lapiz al papel y calcular este efecto para ver que tanto puede afectar...


Bases teoricas:
Efecto coreolis: pueden buscar en wiki, pero lo describiré a mi forma... es la diferencia de velocidad dedivada por la rotacion de una figura, donde la parte interna gira a menor velocidad que la externa (imaginar un disco LP girando el centro se mueve a velocidad 0 y el borde a la velocidad de rotacion (giros/s) multiplicado por la circunsferencia... en una esfera aplica igual...

Disparo de francotirador: usando datos como que el tiro más lejano son unos 2.400m y que la velocidad de una bala .50 es ~1km/s

La tierra:
radio: 40.020km (en promedio, asumiré perfecta esfericidad y no me vengan que no, porque el diferencial está por debajo del 0.5%)

velocidad de rotacion: el efecto coreolis mismo nos dice que depende de la posicion así que la más alta es el ecuador, sabiendo que el radio es ese y que la tierra tarda 24horas en dar la vuelta...
1668km/h (redondeado) o 463m/s

ahora, sabemos que la velocidad depende del paralelo donde estés parado (no importa N o S), en la relacion
Citar
v=cos(paralelo)
(esta explicación la obviaré, si la quieren, comentenlo)

¿Cuantos km es 1º de la tierra? 40.020km/360º = 111,16km/º
y la pregunta contraria, ¿cuantos grados representa 1km? 360º/40.020km = 0,01º/km (muy redondeado)


Calculos:

sabemos entonces que en el polo la velocidad de la tierra es
Citar
cos(90º)*463m/s=0m/s
y esta relacion conserva la "velocidad de cambio" de coseno


es decir, cerca de los 0º la diferencia de velocidad entre un punto y otro es muy alta, pero cerca de los 90º la diferencia tiende a 0

desmuestro numericamente


entre os grados 0 y 1 la diferencia fue de 0,1m/s, mientras que entre 89 y 90 fue de 8,1m/s

entonces, donde más podríamos ver esto es en el polo...

Caso 1:
un francotirador dispara su .50 acostado en el asta misma del polo norte a su objetivo a 2km exactamente al sur (no importa donde mire, será el sur XD)

sabiendo que el está en los 90º de latitud y su objetivo en los 89,98º de latitud
su objetivo que está quieto pero el conoce coreolis y sabe uqe se mueve 0,16m/s a la izquierda más rapdio que el y que su bala tardará 2 segundos en alcanzarlo, entonces tendrá que apuntar a 0,32m (32m) a la izquierda si no quiere fallar...

Caso 2:
un francotirador dispara su .50 en bagdag (~33ºN) exactamente al sur

sabiendo que el está en los 33º de latitud y su objetivo en los 32,98º de latitud, su objetivo se mueve a 0,088m/s más rapido que el, a 2 segundos su objetivo estará a 0.176m a su izquierda, debe ajustar 17,6cm para no fallar...


Conclusión:
si, el efecto coreolis afecta de una manera más o menos importante... este efecto es completamente anulado entre más al este/oeste se apunta (dah, si apunta al este está apuntando a la misma latitud)

aunque aclaremos algo, a 2km, incluso con una mira según lo que consigo militar, son 32mm a 10x es decir equivalente a un lente 320mm no es mucha la diferencia, más bien me sorprende que puedan ver a alguien... aquí pego un codigo  para que vean como sería el zoom con una mira... tiene una imagen de muestra montada... si ven al hombre de naranja (en el centro de los rieles, muy lejos) no debe estar a mas de 500m y a 320mm ya la linea casi lo tapa completamente, a demás el sniper dudo que pueda predecir todas las corrientes de viento cruzantes en 2km... pero dejo mi envidia y el codigo (solo es copy/paste en un .html y listo, tiene defectos, no los pienso arreglar ya que es solo para demostrar este punto)
50  Foros Generales / Foro Libre / que pasaría si en matrix se crea una inteligencia artificial? en: 5 Agosto 2014, 19:46 pm
que pasaría si en matrix alguien crea un inteligencia artificial tal que se vuelva imponente y empiece a destruir a los humanos e intente crear una matrix? XD
Páginas: 1 2 3 4 [5] 6 7 8 9 10
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines