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

 

 


Tema destacado:


  Mostrar Temas
Páginas: 1 2 3 4 [5] 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ... 42
41  Programación / Java / ¿Cómo recibir un controlador y enviar un modelo al mismo tiempo en spring? en: 31 Octubre 2016, 19:26 pm
Hola, tengo un controlador y un template, estoy usando Spring boot y Thymeleaf.

Por lo que yo entiendo, para poder manipular formularios debo crear un modelo y este enviarselo como objeto al formulario, hasta aca todo bien, el problema está en la petición post ya que por un lado recibo el modelo como argumento de la función pero ya no tengo el modelo para poder enviar datos al template.

Controlador:
Código
  1. @Controller
  2. public class Main {
  3.  
  4.    @GetMapping("/")
  5.    public String httpGet(Model model){
  6.  
  7.        FormModel form_model = new FormModel();
  8.        model.addAttribute("form_model", form_model);
  9.        model.addAttribute("demo", "abc");
  10.  
  11.        return "main_template";
  12.    }
  13.  
  14.    @PostMapping("/")
  15.    public String httpPost(@ModelAttribute ModelForm form_model){
  16.  
  17.        FormModel form_model = new FormModel();
  18.  
  19.        // <-- Cómo envío model al template si no tengo model?
  20.        model.addAttribute("form_model", form_model);
  21.        model.addAttribute("demo", "abc");
  22.  
  23.        return "main_template";
  24.    }
  25. }

Mi template:
Código
  1. <!DOCTYPE html>
  2.    <head>
  3.        <title>Demo</title>
  4.    </head>
  5.    <body>
  6.        <form class="form-signin" action="#" method="post" th:action="@{/}" th:object="${form_model}">
  7.            <input th:field="*{email}" required="required" type="email" />
  8.            <input th:field="*{password}" type="password" />
  9.            <p th:text="${demo}"></p>
  10.            <button type="submit">Submit</button>
  11.        </form>
  12.    </body>
  13. </html>

Lo que yo entiendo acá: https://spring.io/guides/gs/validating-form-input/ es que primero tengo una funcion para recibir la petición get, como argumento viene un objeto llamado model el cual se encarga de enviar variables al template, como por ejemplo el objeto encargado del formulario, despues en la petición post pasa un solo argumento de modelo el cual es el objeto del formulario mas un validador, hasta acá todo bien, digamos que hubo un error en el formulario y necesito volver a cargar el formulario, necesito pasar otraves el objeto, pero no tengo como mandarlo porque no tengo el objeto llamado model y tampoco puedo iniciarlo desde la función, entonces que hago?

¿cómo puedo recibir el modelo del formulario en una petición post y al mismo tiempo comunicarme con el contenido en html enviando variables?
42  Programación / Java / Necesito una mano para calcular distancias XY en: 23 Octubre 2016, 00:57 am
Hola, tengo una duda, me he dado muchas vueltas y no llego a puerto aun.

Tengo un plano de 100x100, tengo un objeto en la posición 30x30, ¿cómo lo puedo mover de posición x cantidad de espacios usando un grado de inclinación?.

Por ejemplo, quiero moverlo en dirección hacia arriba y a la derecha en 45 grados.

El problema central es el siguiente: Tengo un circulo y un objeto que se mueve al rededor de el en su superficie, ambos objetos se mueven de manera independiente pero necesito que el objeto se mueva de manera que simule estar unido al borde del circulo, despues de esto tengo una función que debiera aumentar la separación entre el circulo y el objeto sin perder la sincronización de rotación ya que este circulo va rotando en una dirección al azar (ccw o cw).

Actualmente hice sin problemas que el objeto esté centrado con respecto al circulo y que este rote en la misma velocidad del circulo usando su base y no su centro, ahora solo necesito establecer su distancia, pero esta distancia esta relacionada con la cantidad de grados de rotación del objeto y ahi es donde quedé.

Hice este post en programación general porque no necesito que me hagan el código, quiero entenderlo para aplicarlo en muchas situaciones. De todas maneras este es el código que uso para hacer rotar el objeto sobre el circulo:

Código
  1. // Cambia el tamaño
  2.        this.matrix.setScale(1, 1);
  3.  
  4.        // Rota la imagen a partir de su centro
  5.        this.matrix.postRotate(this.angle, this.image.getWidth() / 2, this.image.getHeight());
  6.  
  7.        // Posiciona la nave al centro del circulo
  8.        this.matrix.postTranslate(
  9.                this.start_circle.getLeft() + (this.start_circle.getWidth() / 2) - (this.image.getWidth() / 2),
  10.                this.start_circle.getTop() + (this.start_circle.getHeight() / 2) - this.image.getHeight()
  11.        );

Es código Java para Android + canvas.

Una solución que encontré fue tomar el punto de rotación vertical muy abajo, para que simulara la rotación sobre un circulo, pero esto significaba que a la posición final tenía que restarle pixeles y cuando tenia que mover el objeto se me hacia todo un desmadre incontrolable y para solucionarlo tenía que crear condicionales para saber si el opbjeto estaba rotando o habia que aumentar el espacio y tenia un código muy mal optimizado, asi que lo eliminé y ando en busca de algo mas óptimo.

El tema debiera quedar algo así:

  • Si el grado es 0 entonces se suma la distancia el 100% sobre vertical
  • Si el grado es 45 entonces se suma la distancia el 50% sobre vertical y 50% horizontal
  • Si el grado es 90 entonces se suma la distancia el 100% sobre horizontal
  • si el grado es 135 entonces se suma la distancia el 50% horizontal y se resta el 50% vertical
  • si el grado es 180 entonces se resta la distancia el 100% vertical
  • si el grado es 225 entonces se resta la distancia el 50% sobre vertical y 50% horizontal
  • si el grado es 270 entonces se resta la distancia 100% sobre horizontal
  • Si el grado es 315 entonces se resta la distancia 50% sobre horizontal y se suma 50% sobre vertical
  • Si el grado es 360 entonces se suma la distancia el 100% sobre vertical

Saludos.
43  Foros Generales / Foro Libre / Rick Astley’s en bash xD en: 16 Octubre 2016, 03:03 am
He encontrado un proyecto en github que me ha hecho reir bastante, me ha cambiado el día xD

https://github.com/keroserene/rickrollrc

Los que usan Linux pueden ejecutar el script así:

Código:
curl -s -L http://bit.ly/10hA8iC | bash

No es nada malicioso. Enjoy.
44  Programación / Java / ¿Es normal que un servicio inicie tan lento? en: 19 Septiembre 2016, 01:29 am
Hola, tengo algunas apps instaladas en un servidor con centos7 como zimbra, confluence, bitbucket, etc, y cada app tardaa una ifinidad en iniciar, zimbra se que usa muchos servicios asi que es normal, pero hay otros en que despues de iniciar el servicio debo esperar por lo menos 15 minutos para que el sitio web pueda ser accesible.

Esto es normal en un proyecto java transaccional hecho con con hibernate? ya que quiero probar hacer algunos desarrollos, pero si realmente es tan lento en iniciar y es tan problemático como servicios, mejor prefiero usar otro lenguaje mas flexible y rápido como python.
45  Foros Generales / Foro Libre / Duda matemática en: 16 Septiembre 2016, 05:42 am
Hola, tengo una duda...

Digamos que tengo un objeto que tiene un area de 33cm, esto quiere decir que tiene 3cm de ancho y 11cm de alto, de esta manera existen 33 cubos de 1cm cada uno dentro (3x11=33).

Ahora, tomo una cuerda y encierro este rectángulo, tengo 4 caras, dos caras son de 3cm (superior e inferior) y tengo dos caras de 11cm (laterales), si los sumo me da 3*2=6 y 11*2=22 asi que 6+22=28cm

En otras palabras ahora tengo una cuerda estirada de 28cm, si esta cuerda la uno en sus dos extremos obtengo un cuadrado de lados iguales, se supone que independientemente de la forma que le de a esta cuerda la cantidad del area no debiera variar verdad? si hago un rectangulo o un cuadrado o un triangulo o un circulo , si uso para todos la misma cuerda debiera tener la misma cantidad de cemento para todos no?

Ahora, si tengo esta cuerda de 28cm y la uno para formar un cuadrado perfecto obtengo 28/4=7, esto quiere decir que tengo un cuadrado de 7x7 (que debiera ser igual a uno de 11x3), pero al sacar el area 7x7=49 tengo 49cm de area vs 33cm con lo que comencé... ¿que sucedió?, ¿donde se fueron los otros 16cm cuadrados de cemento?

Por otro lado realizando lo inverso puedo concluir de buena manera que la raiz cuadrada de 33 es 5,744562647... asi que la cuerda debiera ser de ese valor multiplicado por 4, o sea ~22,97...cm y no 28, pero si al principio tengo un rectangulo de 3x11 eso es 28 y no 22, ¿que pasó?
46  Sistemas Operativos / GNU/Linux / Creando portadas a un documento PDF desde bash en: 28 Agosto 2016, 23:52 pm
Hola, hace poco tuve que hacer un script que quiero compartir.

Este script lo que hace es tomar un archivo pdf llamado "input.pdf" y le agrega una imagen de fondo a la portada (llamada bg-cover.png), claramente la portada debe tener transparencia para que esto funcione. Se necesita tener instalado image magic.

Saludos.

Código
  1. #!/bin/bash
  2.  
  3. # Dependencies
  4. # sudo apt-get install imagemagick
  5.  
  6. # Merge pdf and background image
  7.  
  8. # Split pdf into images
  9. echo "Spliting pdf to images ..."
  10. convert -density 150 input.pdf -quality 90 output.png
  11.  
  12. # Merge first page with background image
  13. echo "join background image with cover ...";
  14. composite -compose over -alpha On output-0.png bg-cover.png output-0.png
  15.  
  16. # Convert images to PDF
  17. echo "Join images to out pdf file ...";
  18. convert -compress jpeg `ls output-*.png` output.pdf
  19.  
  20. # Clean files
  21. echo "Clean files ...";
  22. rm -f output-*.png
  23.  
  24. echo "Done!";
  25.  
  26.  
47  Sistemas Operativos / GNU/Linux / Solución del arranque de ubuntu despues de actualizar version en: 27 Agosto 2016, 22:44 pm
Hola, desde hace un tiempo he tenido un problema bastante específico con el aranque de Ubuntu y es que despues de actualizar de versión ya no arranca el modo gráfico pero cuando inicia el menú del grub (antes del arranque del sistema operativo) y elijes el kernel con opción "(upstart) arranca sin problemas.

En este post explicaré como solucionar algunos problemas más comunes que se tienen cuando actualizas tu distribución, todo lo que explicaré es una recopilación de muchas fuentes, muchas preguntas y muchas pruebas en mi pc que finalmente he logrado que todo funcione como reloj sin la necesidad de tener que formatear y reinstalar todo nuevamente.

Resumen
En resumen para los que no quieran leer todo el post debo decir que el problema es una combinación de muchos otros problemas:

* Librerías de Virtualbox no se eliminan al ser desinstalado
* Módulos del kernel de Virtualbox dejan de ser compatibles con la version del kernel actualizada junto a la nueva distribución.
* Montaje automático de discos NTFS o ExFat

Esto desencadena otra serie de problemas como por ejemplo que el arranque del kernel no finalice debido a que el módulo de virtualbox no existe y tampoco es capaz de automontar un disco con problemas de arranque (inicio rápido de windows)

Detalles

El primer problema que vemos es que no inicia ubuntu en modo gráfico sino que solo inicia en modo terminal (tty1):



Para comprender porque sucede esto lo que haremos es simplemente reiniciar el sistema y observar los mensajes de errores de carga:



En base a esto comenzaremos a solucionar de manera muy fácil cada uno de estos problemas.

Problema 1: Error al cargar los módulos del kernel de linux

El error de la carga del sistema nos dice:

Citar
[FAILED] Failed to start Load Kernel Modules. See 'systemctl status systemd-modules-load.service' for details.



Cuando dejamos que inicie normalmente el sistema operativo este por lo menos iniciará en modo terminal y esto es bueno porque podremos observar los problemas que hubo en la carga, si iniciamos con upstart no veremos estos logs.

Despues que iniciamos sesión en modo terminal ejecutaremos el comando que nos recomendó el sistema:

Citar
systemctl status systemd-modules-load.service



El sistema nos dice que la carga de un módulo falló y si nos fijamos bien el comando específico que falló fue:

Código:
/lib/systemd/systemd-modules-load

Por lo tanto probamos aver que nos arroja:

Código:
$ sudo /lib/systemd/systemd-modules-load
Failed to insert 'vboxvideo': No such device

Ajamm! el módulo que nos da el problema es el video de Virtualbox, asi que trataremos de solucionarlo:

Código:
$ sudo  dpkg-reconfigure virtualbox
 * Unloading VirtualBox kernel modules...   [ OK ]
 * Loading VirtualBox kernel modules...      * No suitable module for running kernel found
                                                              [fail]
invoke-rc.d: initscript virtualbox, action "restart" failed.

Como falló intentaremos solucionar esto de otra manera:

Código:
$ sudo modprobe vboxdrv
modprobe: FATAL: Module vboxdrv not found in directory /lib/modules/4.4.0-34-generic

Entonces comprendí que claramente el módulo instalado por Virtualbox era compatible hasta ese momento para la versión del kernel cuando se instaló y por lo tanto claramente no es compatible con el nuevo kernel por lo cual las opciones a seguir son varias: reinstalar o eliminar virtualbox.

En mi caso para evitar problemas y asegurarme  que todo ande bien procedí a desinstalar virtualbox :

Código:
$ sudo apt-get purge virtualbox
$ sudo apt-get autoremove
$ sudo apt-get autoclean

Ahora probamos reiniciar el sistema y nos encontramos que el sistema continúa con el mismo problema y es porque el sistema aun está intentando cargar el mismo módulo de virtualbox a pesar de ya haber sido desinstalado, asi que procedemos a purgar manualmente virtualbox:

Editamos el archivo "/etc/modules" con cualquier editor, yo usé nano:
Código:
$ sudo nano -w /etc/modules

Buscamos y eliminamos la línea donde dice "vboxvideo", guardamos y cerramos el editor. Debiera quedar masomenos así el archivo final:

Código:
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.

lp
# vboxvideo

Nótese que vboxvideo está comentado con un signo gato.

Ahora si volvemos a reiniciar y ya no veremos el mismo error de la carga de módulos del kernel :D


Problema 2: journal falla porque no es capaz de crear el archivo de logs

El error de la carga del sistema nos dice:

Citar
[FAILED] Failed to start Create Volatile Files and Directories. See 'systemctl status systemd-tmpfiles-setup.services'



La solución es tan fácil como eliminar el directorio de logs de journal service para que este vuelva a crearlos con sus nuevos permisos correspondientes:

Código:
$ rm -rf /var/log/journal
$ rm -rf /run/log/journal

Luego de esto reinicias el sistema y ya no debiera volver a aparecer ese mensaje de error.


Problema 3: Error al iniciar el servicio pNFS

El error de la carga del sistema nos dice:

Citar
[DEPEND] Dependency failed for pNFS block layout mapping daemon.



Esto se soluciona creando una mascara del servicio:

Código:
$ sudo systemctl mask nfs-blkmap.service

Con esto ya no debiera volver a aparecer ese error.


Problema 4: No se monta el directorio raiz en modo de escritura

Todo lo que hemos solucionado hacia atrás era solo parte del problema, aun nos daremos cuenta que no podemos ingresar al modo gráfico.

Lo que haremos para ver que sucede es iniciar manualmente el modo gráfico y ver que nos arroja:

Código:
$ startx



Este error es muy común y se debe porque no tenemos montado el directorio raiz en modo de escritura, solo está en modo lectura y eso se debe a una configuración del mismo grub.

Hagamos una prueba, remontaremos la partición del directorio raiz del sistema y luego de eso iniciaremos el gestor gráfico:

Código:
$ sudo mount -o remount,rw /
$ startx

Al hacer esto nos daremos cuenta que nos apareció el login de ubuntu y podremos acceder normalmente al sistema.

Ahora, haremos que esto se haga de manera automática reparando el archivo de inicio:

Lo que haremos es editar el archivo "/etc/default/grub" con permisos de root, podemos hacerlo por ejemplo:

Código:
sudo gedit /etc/default/grub

O también usando vi o nano desde el terminal.

Buscamos las siguientes líneas:

Citar
EOF
  fi
  if test -d /sys/firmware/efi && test -e "${linux}.efi.signed"; then
    sed "s/^/$submenu_indentation/" << EOF
   linux   ${rel_dirname}/${basename}.efi.signed root=${linux_root_device_thisversion} ro ${args}
EOF
  else
    sed "s/^/$submenu_indentation/" << EOF
   linux   ${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args}

Pueden haber mas lineas que sean similares pero lo importante es encontrar las que digan "ro", estas hay que reemplazarlas por "rw" (read write), guardas cambios y actualizamos el grub:

Código:
$ sudo update-grub

Luego reiniciamos el sistema (puedes reiniciar con el comando "reboot") y listo! ahora nuestro sistema inicia sin problemas.


Recomendaciones adicionales

Adicionalmente a esto también es recomendable realizar una serie de pasos y mantenciones para asegurarnos que tenemos todo en regla y que no nos aparecerán otros problemas adicionales que impidan iniciar normalmente el sistema:


1: Limpiar el sistema, actualizar todo y buscar dependencias no instaladas:
Hay algunos problemas conocidos en que el sistema no arranca despues de una actualización porque no se instalaron correctamente algunas dependencias.

Código:
$ sudo apt-get update
$ sudo dpkg --configure -a
$ sudo apt-get dist-upgrade
$ sudo apt-get -f install


2. Reinstalar "systemd-sysv"
Hay algunos problemas con "systemd-sysv" que impiden que el sistema arranque despues de una actualización, por este motivo procedemos a realizar una reinstalación:

Código:
$ sudo apt-cache policy systemd-sysv
$ sudo apt-get install --reinstall systemd-sysv

3. Eliminando los mimetypes
Hay algunos problemas cuando quieres hacer cambios específicos en algunos softwares que modifican el mimetype del sistema y arrojan una cantidad infinta de warnings de tipo "Unknown media type in type ...", esto se soluciona desinstalando el paquete con problemas:

Código:
$ sudo mv -vi /usr/share/mime/packages/kde.xml /usr/share/mime/packages/kde.xml.bak
$ sudo update-mime-database /usr/share/mime
$ sudo apt-get remove chemical-mime-data


¿Otros problemas similares al actualizar la distribución?, recomendaciones

Cuando actualizas una distribucin debes tener mucho cuidado, antes de hacerlo debes deshabilitar tus drivers privativos como los de nvidia, intel, etc ya que cuando actualizas y tienes un nuevo kernel estos drivers dejan de ser compatibles, por lo tanto cuando terminas y reinicias el sistema puedes terminar con un kernel panic:



Por esto cuando puedes iniciar por lo menos con "upstart" lo primero que debes hacer es deshabilitar tus drivers privativos desde el gestor de actualizaciones en la pestaña que dice "controladores restringidos":



Otro problema muy común es la actualización de componentes gráficos que en muchas ocasiones arrojan problemas debido a configuraciones antiguas, para evitar esto basta con reinstalar cada componente o purgar y luego instalar, por ejemplo en mi caso al actualizar "libgdk-pixbuf" a traves de las actualizaciones automáticas mi sistema dejó de dar video, por lo cual tuve que iniciar en modo tty1 (presionando Alt+Control+F1 después de loguearse sin importar que no se vea nada), esto iniciará el modo consola y luego procedemos a reinstalar el paquete afectado:

Código:
apt-get -y reinstall libgdk-pixbuf2.0-0 libgdk-pixbuf2.0-common libgdk-pixbuf2.0-common && reboot

Reiniciamos y solucionado!. Ahora, ¿cómo podemos saber exactamente que version estamos utilizando?:

Código:
whk@machine:~$ sudo apt list --installed | grep libgdk
[sudo] password for whk:

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

libgdk-pixbuf2.0-0/xenial-updates,xenial-security,now 2.32.2-1ubuntu1.4 amd64 [instalado]
libgdk-pixbuf2.0-common/xenial-updates,xenial-updates,xenial-security,xenial-security,now 2.32.2-1ubuntu1.4 all [instalado]
libgdk-pixbuf2.0-dev/xenial-updates,xenial-security,now 2.32.2-1ubuntu1.4 amd64 [instalado, automático]

Este problema se viene arrastrando desde hace muchos años y me ha sucedido hoy (2018). Esto es parte de un largo bug de ubuntu.

Otro problema muy común es que la tarjeta de red deja de ser compatible por lo cual cuando terminas la actualización y te encuentras con que solo puedes acceder al terminal tambien te das cuenta que no le puedes hacer ping a google, entonces ejecutas "ifconfig" para ver la configuración de red y no aparece "eth0", cuando eso sucede es porque tu driver de la tarjeta de red ya no es compatible.

Entonces, ¿que puedo hacer?: que tu tarjeta de red no le funcione el driver no quiere decir que tu chip de wifi tampoco lo sea, en muchas ocasiones si pero no siempre, en ese caso debes buscar documentación sobre como habilitar tu wifi manualmente desde "iwconfig".

Cuando no puedes habilitar ninguno de los dos lo que yo hago es buscar el modelo del notebook (laptop) o pc y le busco el driver oficial y se lo paso via usb pendrive, para esto debo montar manualmente la partición del usb y luego acceder al archivo e instalarlo, si es un .deb lo instalo con "dpkg -i archivo".

También es recomendable mantener siempre la última versión del kernel instalado y eliminar las versiones viejas. Cuando actualizas la distribución de tu sistema operativo este por lo general viene con nuevas versiones del kernel pero estas no se eliminan de manera automática, para esto puedes usar "Ubuntu Tweak" en la sección de limpieza:



Esto es bueno porque también eliminarás problemas de carga de módulos con otros kernels.

Otro punto a considerar es que si no tienes problemas con virtualbox si los puedes tener con algún otro sistema de virtualización como kvm, en este sentido desinstala y luego lo vuelves a instalar cuando tengas todo funcionando, tus configuraciones y maquinas virtuales al igual que con virtualbox no serán eliminados.

Si usas Java, después de actualizar tu sistema operativo debes reconfigurar la ruta por defecto:
Código:
$ sudo update-alternatives --config java

Y seleccionar la versión que estás usando, en mi caso es Java7:
Código:
root@machine:/# sudo update-alternatives --config java
Existen 3 opciones para la alternativa java (que provee /usr/bin/java).

  Selección   Ruta                                     Prioridad  Estado
------------------------------------------------------------
* 0            /usr/bin/gij-5                            1050      modo automático
  1            /usr/bin/gij-4.8                          1048      modo manual
  2            /usr/bin/gij-5                            1050      modo manual
  3            /usr/lib/jvm/java-7-oracle/jre/bin/java   1049      modo manual

Press <enter> to keep the current choice[*], or type selection number: 3
update-alternatives: utilizando /usr/lib/jvm/java-7-oracle/jre/bin/java para proveer /usr/bin/java (java) en modo manual
root@machine:/#

Si no lo haces entonces las aplicaciones que usaban java (como android studio) dejarán de funcionar o darán errores comunes de compatibilidad, como por ejemplo:

Código:
whk@machine:/opt/android-studio/bin$ ./studio.sh 
java version "1.5.0"
gij (GNU libgcj) version 5.4.0 20160609

Copyright (C) 2007 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Start Failed: Internal Error. Please report to https://https://code.google.com/p/android/issues

java.lang.reflect.InvocationTargetException
   ...
Caused by: java.lang.RuntimeException: Could not find 'theUnsafe' field in the class sun.misc.Unsafe
   at com.intellij.util.concurrency.AtomicFieldUpdater.getUnsafe(AtomicFieldUpdater.java:44)
   ...14 more


Algunas fuentes

Algunas fuentes desde donde recopilé la información:


Espero que todo esto les pueda dar algunas luces sobre el problema que tengan cuando terminan de actualizar Ubuntu. Si no quieren pasar un buen rato sentado en el escritorio tratando de hacer arrancar ubuntu despues de una actualización entonces descarguen el iso de la nueva versión de ubuntu, respalden y formateen, instalen el SO de cero.

Saludos.
48  Programación / Programación General / Resto de un numero natural de 200 digitos en: 23 Agosto 2016, 01:47 am
Hola, alguien sabe de algún método para calcular el resto de un numero natural de 200 digitos?, he intentado con gmp pero no me da la longitud.

Saludos.
49  Seguridad Informática / Bugs y Exploits / Problemas de seguridad en HTML5 webrtc permite resolver tu ip local en: 17 Agosto 2016, 05:30 am
He estado leyendo un post de un blog muy interesante y se trata de que utilizando el objeto webrtc de HTML5 es posible obtener las ips locales de todas tus interfaces de red:

http://hacking.ventures/local-ip-discovery-with-html5-webrtc-security-and-privacy-risk/

Acá una prueba de concepto: http://net.ipcalf.com/ al ingresar te muestra todas tus ips locales, a mi me mostró la que me asignó mi router, la del virtualbox y de una vpn local.

Acá el código fuente que han utilizado (en javascript):
Código
  1. // NOTE: window.RTCPeerConnection is "not a constructor" in FF22/23
  2. var RTCPeerConnection = /*window.RTCPeerConnection ||*/ window.webkitRTCPeerConnection || window.mozRTCPeerConnection;
  3.  
  4. if (RTCPeerConnection) (function () {
  5.    var rtc = new RTCPeerConnection({iceServers:[]});
  6.    if (1 || window.mozRTCPeerConnection) {      // FF [and now Chrome!] needs a channel/stream to proceed
  7.        rtc.createDataChannel('', {reliable:false});
  8.    };
  9.  
  10.    rtc.onicecandidate = function (evt) {
  11.        // convert the candidate to SDP so we can run it through our general parser
  12.        // see https://twitter.com/lancestout/status/525796175425720320 for details
  13.        if (evt.candidate) grepSDP("a="+evt.candidate.candidate);
  14.    };
  15.    rtc.createOffer(function (offerDesc) {
  16.        grepSDP(offerDesc.sdp);
  17.        rtc.setLocalDescription(offerDesc);
  18.    }, function (e) { console.warn("offer failed", e); });
  19.  
  20.  
  21.    var addrs = Object.create(null);
  22.    addrs["0.0.0.0"] = false;
  23.    function updateDisplay(newAddr) {
  24.        if (newAddr in addrs) return;
  25.        else addrs[newAddr] = true;
  26.        var displayAddrs = Object.keys(addrs).filter(function (k) { return addrs[k]; });
  27.        document.getElementById('list').textContent = displayAddrs.join(" or perhaps ") || "n/a";
  28.    }
  29.  
  30.    function grepSDP(sdp) {
  31.        var hosts = [];
  32.        sdp.split('\r\n').forEach(function (line) { // c.f. http://tools.ietf.org/html/rfc4566#page-39
  33.            if (~line.indexOf("a=candidate")) {     // http://tools.ietf.org/html/rfc4566#section-5.13
  34.                var parts = line.split(' '),        // http://tools.ietf.org/html/rfc5245#section-15.1
  35.                    addr = parts[4],
  36.                    type = parts[7];
  37.                if (type === 'host') updateDisplay(addr);
  38.            } else if (~line.indexOf("c=")) {       // http://tools.ietf.org/html/rfc4566#section-5.7
  39.                var parts = line.split(' '),
  40.                    addr = parts[2];
  41.                updateDisplay(addr);
  42.            }
  43.        });
  44.    }
  45. })(); else {
  46.    document.getElementById('list').innerHTML = "<code>ifconfig | grep inet | grep -v inet6 | cut -d\" \" -f2 | tail -n1</code>";
  47.    document.getElementById('list').nextSibling.textContent = "In Chrome and Firefox your IP should display automatically, by the power of WebRTCskull.";
  48. }




Local IP discovery with HTML5 WebRTC: Security and privacy risk?

With the progression of HTML5 WebRTC, browsers are getting ever closer to making pluginless video conferencing a reality. One feature of WebRTC is the ability to discover the local IP addresses of the browsing machine. Does that put us at an increased risk?

Recently I stumbled across Nathan Vander Wilt’s net.ipcalf.com. When opened from a relatively new version of Chrome or Firefox, your computer’s local IP addresses should present itself.

I’ve coded up another example, which attempts to use WebRTC to find your local IPs, and then probe for other live hosts on your network(s).

Others will likely cover the usefulness of these APIs, so I will — for the sake of argument — comment on the tinfoilhat-y perspective. Bear with me.

Privacy concerns

I know for a fact that some people use multiple browsers on the same PC, in order to separate identities or browsing profiles. These people might browse Reddit’s cute-cat-picture-subreddits with Firefox and the programming subreddits with Chrome. From the web server’s perspective, both browsers will likely have the same public IP address, but their headers, tracking cookies and whatnot will clearly differ.

local-network

With the WebRTC local IP discovery technique, those interested in tracking you, be that ad agencies or some spy organization, will be able to do make connections between browsers based on a combination of public and local IP. If they for whatever reason can tie an identity to one browser, they will probably assume that the same person is hiding behind the second one.

There’s also a risk that the local IP info can aid in identification between public IPs. Let’s say that you use some VPN service, or Tor, whenever you surf cute cat pictures, but you use the same browser. EFF’s Panopticlick tells the story of how each browser is pretty much unique, based on HTTP header fingerprinting and so forth. Add local IP addresses, or even subnets to circumvent DHCP lease times, and your browser / PC is even more unique. And by unique, I mean trackable.

Security concerns

Consider some evil page which, based on the local IP returned from the WebRTC technique, starts scanning devices on your LAN. Let’s say your IP is 10.0.8.13, then the evil javascript could start out by guessing that your router is at 10.0.8.1. Then let’s move on to assume that your router, which probably hasn’t had it’s firmware upgraded for a while, has some half-assed web interface, which is accessible from your LAN.

The chance of this router being remote exploitable — that is from your public IP — isn’t huge. It has happened, but it doesn’t happen that often. The chance of there still being some obscure XSS flaw hidden in there somewhere, however, is much greater. So what if this evil page, which has now identified that your router is on 10.0.8.1, and figured out which software it runs, then goes on to exploit one of the XSS vulnerabilities — and adds some evil person as remote admin?

Now this doesn’t have to be your router. It would be fairly trivial for a javascript to discover which hosts are up on your local network — I’ve had great luck doing timed HTTPS-request against non-HTTPS ports on IPs to do just that. With this information, the evil page can go on to test the discovered hosts for a plethora of vulnerabilities, based on simple fingerprinting. That could do all kinds of damage.

I just put this to the test on an office network I am part of, which happens to house an old Canon printer. I’m pretty sure it predates the pyramids — but at the very least the dawn of security bugs, because it will do pretty much exactly what a rogue javascript tells it to do.

So, yeah, your printer is now part of a botnet, and is routinely DDoS-ing powerplants in Iran. Congratulations.

But what does it all mean?

So there are privacy concerns, and the feature can at least make local exploitation easier for an attacker.

On the other hand, there are bigger privacy concerns around today (yes I’m talking to you, NSA), and from a security perspective not yielding the ip is arguably security through obscurity.

So I’ll let you lot make up your own minds. My tinfoil hat stays on.
50  Programación / Programación General / ¿Cómo debería calcular la posicion de un objeto con zoom? en: 31 Julio 2016, 22:57 pm
Hola, estoy intentando calcular la posicion de un objeto sobre una superficie pero me está costando un poco.

Tengo el lienzo que tiene un tamaño de 100x200 pixeles, este lienzo se encuentra posicionado al centro de la pantalla el cual tiene un tamaño dinámico, sobre el lienzo central se posiciona el objeto que puede tener una posición, por ejemplo de 10px de izquierda a derecha mas el pixel de inicio del lienzo.

Por ejemplo, digamos que la pantalla es de 1024x768 y el lienzo es de 100x200, entonces si el objeto está 10 pixeles dentro del lienzo hacia la derecha, quiere decir que la cantidad de pixeles hacia la derecha son ((1024/2)-(100/2))+10

El problema que tengo es que de manera dinámica le hago zoom al lienzo para ajustarlo a la pantalla, digamos que este facto de zoom es de 2.5, eso quiere decir que el lienzo es un 250% mas grande desde el centro hacia afuera para ser ajustado al tamaño completo de la pantalla.

Mi problema ahora se encuentra cuando necesito saber la exactitud de la posición del objeto que tambien fue redimensionado sobre el mismo lienzo.

No tengo acceso a los valores nuevos de cada objeto dibujado sobre el lienzo porque el sistema sobre el cual estoy trabajando no deja un historial de objetos, cuando se dibujan pasa a ser un lienzo único y no separado por capas (estoy usando canvas) asi que cuando hago la redimensión del lienzo el area de acción del objeto no se redimensiona (porque no es un objeto dibujable, es el area de un botón).

Lo que necesito es calcular la posicion exacta del boton ya redimensionado para poder realizar las acciones al momento de hacer click sobre el botón.



Lo azul es la pantalla, el rojo es el lienzo y el verde es el botón.

Tengo posiciones top, bottom, left y right, es un area cuadrada, lo que traté de hacer es aumentar cada valor multiplicado por la mitad del factor de zoom pero no me resultó, también intenté aumentar proporcionalmente el tamaño del area del boton pero me es dificil poder posicionarlo ya que por ejemplo si el boton esta en la ezquina superior derecha la posicion top y left no debiera cambiar como si estubiera en la posicion right bottom porque el superior se corre hacia arriba y la izquierda y el de abajo hacia abajo y la izquierda y si estubiera al centro es proporcional.

¿A alguien se le ocurre como hacer esto?
Páginas: 1 2 3 4 [5] 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ... 42
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines