Bloqueando a Facebook a nivel sistema en Linux

BWAHAHAHAHAHAHAHAHAHA!!
BWAHAHAHAHAHAHAHAHAHA!!

Tanta historia de facebook tanto drama tantas preocupaciones que solo hay una cosa natural por hacer.

Patearlos ahora que están en el piso.

Y si quiere mandar el mensaje, no caer en tentación pero aun ocupa su cuenta cada alineación planetaria, bueno que tal bloquear a facebook, instagram y sus “servicios” y no solo desde un navegador o de una sesión de usuario sino desde el propio sistema.

Para hacer esto, como root (o usando sudo) edite el archivo /etc/hosts de su sistema y agregue las siguientes lineas después de las que ya estén ahí y reinicie el sistema.

############################################
# To Completely Block Facebook
# Add these entries below to your hosts file
#
# Your hosts file Location:
# Linux, Unix and Mac OS X  -> /etc/hosts
# Windows XP, Vista and Windows 7 ->  C:\WINDOWS\system32\drivers\etc\hosts
# Windows 2000  -> C:\WINNT\system32\drivers\etc\hosts
# Windows 98/ME ->  C:\WINDOWS\hosts
#
# You can edit the hosts file with any text editor
#
# On Windows 7, the default AV security scan will try to remove the
# facebook.com entry; you'll need to add an exception to tell the OS
# to keep the block listing in the hosts file and not to remove it
#
############################################

0.0.0.0 apps.facebook.com
0.0.0.0 connect.facebook.net
0.0.0.0 facebook.com
0.0.0.0 fbcdn.com
0.0.0.0 fbsbx.com
0.0.0.0 fbcdn.net
0.0.0.0 graph.facebook.com
0.0.0.0 login.facebook.com
0.0.0.0 s-static.ak.facebook.com
0.0.0.0 static.ak.connect.facebook.com
0.0.0.0 static.ak.fbcdn.net
0.0.0.0 www.connect.facebook.net
0.0.0.0 www.facebook.com
0.0.0.0 www.fbcdn.com
0.0.0.0 www.fbcdn.net
0.0.0.0 www.graph.facebook.com
0.0.0.0 www.login.facebook.com
0.0.0.0 www.s-static.ak.facebook.com
0.0.0.0 www.static.ak.connect.facebook.com
0.0.0.0 www.static.ak.fbcdn.net
0.0.0.0 0-edge-chat.facebook.com
0.0.0.0 1-edge-chat.facebook.com
0.0.0.0 2-edge-chat.facebook.com
0.0.0.0 3-edge-chat.facebook.com
0.0.0.0 4-edge-chat.facebook.com
0.0.0.0 5-edge-chat.facebook.com
0.0.0.0 6-edge-chat.facebook.com
0.0.0.0 alpha-shv-03-ash5.facebook.com
0.0.0.0 alpha-shv-03-atn1.facebook.com
0.0.0.0 alpha-shv-03-lla1.facebook.com
0.0.0.0 alpha-shv-04-prn2.facebook.com
0.0.0.0 alpha-shv-09-frc1.facebook.com
0.0.0.0 alpha.vvv.facebook.com
0.0.0.0 a.ns.facebook.com
0.0.0.0 api.facebook.com
0.0.0.0 atlasalpha-shv-09-frc3.facebook.com
0.0.0.0 atlas.c10r.facebook.com
0.0.0.0 atlasinyour-shv-05-ash3.facebook.com
0.0.0.0 atlas-shv-01-prn2.facebook.com
0.0.0.0 atlas-shv-04-lla1.facebook.com
0.0.0.0 atlas-shv-05-ash3.facebook.com
0.0.0.0 atlas-shv-06-ash2.facebook.com
0.0.0.0 atlas-shv-06-frc1.facebook.com
0.0.0.0 atlas-shv-07-lla1.facebook.com
0.0.0.0 atlas-shv-09-frc3.facebook.com
0.0.0.0 atlas-shv-13-prn1.facebook.com
0.0.0.0 atlas-www-shv-04-prn2.facebook.com
0.0.0.0 atlas-www-shv-07-ash4.facebook.com
0.0.0.0 atlas-www-shv-09-frc1.facebook.com
0.0.0.0 aura-11-01-snc7.facebook.com
0.0.0.0 badge.facebook.com
0.0.0.0 b-api.facebook.com
0.0.0.0 beta-chat-01-05-ash3.facebook.com
0.0.0.0 betanet-shv-03-atn1.facebook.com
0.0.0.0 betanet-shv-03-lla1.facebook.com
0.0.0.0 betanet-shv-04-prn2.facebook.com
0.0.0.0 betanet-shv-09-frc1.facebook.com
0.0.0.0 beta-shv-03-atn1.facebook.com
0.0.0.0 beta-shv-03-lla1.facebook.com
0.0.0.0 beta-shv-04-prn2.facebook.com
0.0.0.0 beta-shv-09-frc1.facebook.com
0.0.0.0 beta.vvv.facebook.com
0.0.0.0 b-graph.facebook.com
0.0.0.0 bidder-shv-05-frc3.facebook.com
0.0.0.0 bidder-shv-10-frc1.facebook.com
0.0.0.0 b.ns.facebook.com
0.0.0.0 channel-proxy-shv-04-frc3.facebook.com
0.0.0.0 channel-proxy-shv-06-ash2.facebook.com
0.0.0.0 channel-proxy-shv-07-ash2.facebook.com
0.0.0.0 channel-proxy-shv-13-prn1.facebook.com
0.0.0.0 channel-proxy-test-shv-07-ash2.facebook.com
0.0.0.0 code.facebook.com
0.0.0.0 connect.facebook.com
0.0.0.0 dev.vvv.facebook.com
0.0.0.0 d.vvv.facebook.com
0.0.0.0 edge-atlas-proxyprotocol-shv-01-ash5.facebook.com
0.0.0.0 edge-atlas-proxyprotocol-shv-03-ash5.facebook.com
0.0.0.0 edge-atlas-proxyprotocol-shv-07-ash4.facebook.com
0.0.0.0 edge-atlas-proxyprotocol-shv-07-frc3.facebook.com
0.0.0.0 edge-atlas-proxyprotocol-shv-09-frc1.facebook.com
0.0.0.0 edge-atlas-proxyprotocol-shv-12-frc1.facebook.com
0.0.0.0 edge-atlas-proxyprotocol-shv-12-frc3.facebook.com
0.0.0.0 edge-atlas-proxyprotocol-shv-13-frc1.facebook.com
0.0.0.0 edge-atlas-shv-01-ams2.facebook.com
0.0.0.0 edge-atlas-shv-01-ams3.facebook.com
0.0.0.0 edge-atlas-shv-01-ash5.facebook.com
0.0.0.0 edge-atlas-shv-01-atl1.facebook.com
0.0.0.0 edge-atlas-shv-01-bru2.facebook.com
0.0.0.0 edge-atlas-shv-01-cai1.facebook.com
0.0.0.0 edge-atlas-shv-01-cdg2.facebook.com
0.0.0.0 edge-atlas-shv-01-dfw1.facebook.com
0.0.0.0 edge-atlas-shv-01-fra3.facebook.com
0.0.0.0 edge-atlas-shv-01-gru1.facebook.com
0.0.0.0 edge-atlas-shv-01-hkg2.facebook.com
0.0.0.0 edge-atlas-shv-01-iad3.facebook.com
0.0.0.0 edge-atlas-shv-01-kul1.facebook.com
0.0.0.0 edge-atlas-shv-01-lax1.facebook.com
0.0.0.0 edge-atlas-shv-01-lga1.facebook.com
0.0.0.0 edge-atlas-shv-01-lhr3.facebook.com
0.0.0.0 edge-atlas-shv-01-mad1.facebook.com
0.0.0.0 edge-atlas-shv-01-mia1.facebook.com
0.0.0.0 edge-atlas-shv-01-mxp1.facebook.com
0.0.0.0 edge-atlas-shv-01-nrt1.facebook.com
0.0.0.0 edge-atlas-shv-01-ord1.facebook.com
0.0.0.0 edge-atlas-shv-01-sea1.facebook.com
0.0.0.0 edge-atlas-shv-01-sin1.facebook.com
0.0.0.0 edge-atlas-shv-01-sjc2.facebook.com
0.0.0.0 edge-atlas-shv-01-syd1.facebook.com
0.0.0.0 edge-atlas-shv-01-vie1.facebook.com
0.0.0.0 edge-atlas-shv-02-cai1.facebook.com
0.0.0.0 edge-atlas-shv-02-hkg2.facebook.com
0.0.0.0 edge-atlas-shv-03-ash5.facebook.com
0.0.0.0 edge-atlas-shv-03-atn1.facebook.com
0.0.0.0 edge-atlas-shv-03-hkg1.facebook.com
0.0.0.0 edge-atlas-shv-03-lla1.facebook.com
0.0.0.0 edge-atlas-shv-03-prn2.facebook.com
0.0.0.0 edge-atlas-shv-03-xdc1.facebook.com
0.0.0.0 edge-atlas-shv-04-hkg1.facebook.com
0.0.0.0 edge-atlas-shv-04-prn2.facebook.com
0.0.0.0 edge-atlas-shv-06-atn1.facebook.com
0.0.0.0 edge-atlas-shv-06-lla1.facebook.com
0.0.0.0 edge-atlas-shv-07-ash4.facebook.com
0.0.0.0 edge-atlas-shv-09-frc1.facebook.com
0.0.0.0 edge-atlas-shv-09-lla1.facebook.com
0.0.0.0 edge-atlas-shv-12-frc1.facebook.com
0.0.0.0 edge-atlas-shv-12-frc3.facebook.com
0.0.0.0 edge-atlas-shv-12-lla1.facebook.com
0.0.0.0 edge-atlas-shv-12-prn1.facebook.com
0.0.0.0 edge-atlas-shv-13-frc1.facebook.com
0.0.0.0 edge-atlas-shv-17-prn1.facebook.com
0.0.0.0 edge-atlas-shv-18-prn1.facebook.com
0.0.0.0 edge-chat.facebook.com
0.0.0.0 edge-liverail-shv-01-ams2.facebook.com
0.0.0.0 edge-liverail-shv-01-ams3.facebook.com
0.0.0.0 edge-liverail-shv-01-ash5.facebook.com
0.0.0.0 edge-liverail-shv-01-atl1.facebook.com
0.0.0.0 edge-liverail-shv-01-bru2.facebook.com
0.0.0.0 edge-liverail-shv-01-cai1.facebook.com
0.0.0.0 edge-liverail-shv-01-cdg2.facebook.com
0.0.0.0 edge-liverail-shv-01-dfw1.facebook.com
0.0.0.0 edge-liverail-shv-01-fra3.facebook.com
0.0.0.0 edge-liverail-shv-01-gru1.facebook.com
0.0.0.0 edge-liverail-shv-01-hkg2.facebook.com
0.0.0.0 edge-liverail-shv-01-iad3.facebook.com
0.0.0.0 edge-liverail-shv-01-kul1.facebook.com
0.0.0.0 edge-liverail-shv-01-lax1.facebook.com
0.0.0.0 edge-liverail-shv-01-lga1.facebook.com
0.0.0.0 edge-liverail-shv-01-lhr3.facebook.com
0.0.0.0 edge-liverail-shv-01-mad1.facebook.com
0.0.0.0 edge-liverail-shv-01-mia1.facebook.com
0.0.0.0 edge-liverail-shv-01-mxp1.facebook.com
0.0.0.0 edge-liverail-shv-01-nrt1.facebook.com
0.0.0.0 edge-liverail-shv-01-ord1.facebook.com
0.0.0.0 edge-liverail-shv-01-sea1.facebook.com
0.0.0.0 edge-liverail-shv-01-sin1.facebook.com
0.0.0.0 edge-liverail-shv-01-sjc2.facebook.com
0.0.0.0 edge-liverail-shv-01-syd1.facebook.com
0.0.0.0 edge-liverail-shv-01-tpe1.facebook.com
0.0.0.0 edge-liverail-shv-01-vie1.facebook.com
0.0.0.0 edge-liverail-shv-02-cai1.facebook.com
0.0.0.0 edge-liverail-shv-02-hkg2.facebook.com
0.0.0.0 edge-liverail-shv-03-ash5.facebook.com
0.0.0.0 edge-liverail-shv-03-atn1.facebook.com
0.0.0.0 edge-liverail-shv-03-hkg1.facebook.com
0.0.0.0 edge-liverail-shv-03-lla1.facebook.com
0.0.0.0 edge-liverail-shv-03-prn2.facebook.com
0.0.0.0 edge-liverail-shv-03-xdc1.facebook.com
0.0.0.0 edge-liverail-shv-04-hkg1.facebook.com
0.0.0.0 edge-liverail-shv-04-prn2.facebook.com
0.0.0.0 edge-liverail-shv-06-atn1.facebook.com
0.0.0.0 edge-liverail-shv-06-lla1.facebook.com
0.0.0.0 edge-liverail-shv-07-ash4.facebook.com
0.0.0.0 edge-liverail-shv-07-frc3.facebook.com
0.0.0.0 edge-liverail-shv-09-frc1.facebook.com
0.0.0.0 edge-liverail-shv-09-lla1.facebook.com
0.0.0.0 edge-liverail-shv-12-frc1.facebook.com
0.0.0.0 edge-liverail-shv-12-frc3.facebook.com
0.0.0.0 edge-liverail-shv-12-lla1.facebook.com
0.0.0.0 edge-liverail-shv-12-prn1.facebook.com
0.0.0.0 edge-liverail-shv-13-frc1.facebook.com
0.0.0.0 edge-liverail-shv-17-prn1.facebook.com
0.0.0.0 edge-liverail-shv-18-prn1.facebook.com
0.0.0.0 edge-mqtt.facebook.com
0.0.0.0 edge-mqtt-shv-01-ams2.facebook.com
0.0.0.0 edge-mqtt-shv-01-ams3.facebook.com
0.0.0.0 edge-mqtt-shv-01-ash5.facebook.com
0.0.0.0 edge-mqtt-shv-01-atl1.facebook.com
0.0.0.0 edge-mqtt-shv-01-bru2.facebook.com
0.0.0.0 edge-mqtt-shv-01-cai1.facebook.com
0.0.0.0 edge-mqtt-shv-01-cdg2.facebook.com
0.0.0.0 edge-mqtt-shv-01-dfw1.facebook.com
0.0.0.0 edge-mqtt-shv-01-fra3.facebook.com
0.0.0.0 edge-mqtt-shv-01-gru1.facebook.com
0.0.0.0 edge-mqtt-shv-01-hkg2.facebook.com
0.0.0.0 edge-mqtt-shv-01-iad3.facebook.com
0.0.0.0 edge-mqtt-shv-01-kul1.facebook.com
0.0.0.0 edge-mqtt-shv-01-lax1.facebook.com
0.0.0.0 edge-mqtt-shv-01-lga1.facebook.com
0.0.0.0 edge-mqtt-shv-01-lhr3.facebook.com
0.0.0.0 edge-mqtt-shv-01-mad1.facebook.com
0.0.0.0 edge-mqtt-shv-01-mia1.facebook.com
0.0.0.0 edge-mqtt-shv-01-mxp1.facebook.com
0.0.0.0 edge-mqtt-shv-01-nrt1.facebook.com
0.0.0.0 edge-mqtt-shv-01-ord1.facebook.com
0.0.0.0 edge-mqtt-shv-01-sea1.facebook.com
0.0.0.0 edge-mqtt-shv-01-sin1.facebook.com
0.0.0.0 edge-mqtt-shv-01-sjc2.facebook.com
0.0.0.0 edge-mqtt-shv-01-syd1.facebook.com
0.0.0.0 edge-mqtt-shv-01-tpe1.facebook.com
0.0.0.0 edge-mqtt-shv-01-vie1.facebook.com
0.0.0.0 edge-mqtt-shv-02-cai1.facebook.com
0.0.0.0 edge-mqtt-shv-02-hkg2.facebook.com
0.0.0.0 edge-mqtt-shv-03-ash5.facebook.com
0.0.0.0 edge-mqtt-shv-03-atn1.facebook.com
0.0.0.0 edge-mqtt-shv-03-hkg1.facebook.com
0.0.0.0 edge-mqtt-shv-03-lla1.facebook.com
0.0.0.0 edge-mqtt-shv-03-prn2.facebook.com
0.0.0.0 edge-mqtt-shv-03-xdc1.facebook.com
0.0.0.0 edge-mqtt-shv-04-hkg1.facebook.com
0.0.0.0 edge-mqtt-shv-04-prn2.facebook.com
0.0.0.0 edge-mqtt-shv-06-atn1.facebook.com
0.0.0.0 edge-mqtt-shv-06-lla1.facebook.com
0.0.0.0 edge-mqtt-shv-07-ash4.facebook.com
0.0.0.0 edge-mqtt-shv-07-frc3.facebook.com
0.0.0.0 edge-mqtt-shv-09-lla1.facebook.com
0.0.0.0 edge-mqtt-shv-12-frc1.facebook.com
0.0.0.0 edge-mqtt-shv-12-frc3.facebook.com
0.0.0.0 edge-mqtt-shv-12-lla1.facebook.com
0.0.0.0 edge-mqtt-shv-12-prn1.facebook.com
0.0.0.0 edge-mqtt-shv-13-frc1.facebook.com
0.0.0.0 edge-mqtt-shv-17-prn1.facebook.com
0.0.0.0 edge-mqtt-shv-18-prn1.facebook.com
0.0.0.0 edgeray-origin-shv-05-prn2.facebook.com
0.0.0.0 edgeray-origin-shv-07-lla1.facebook.com
0.0.0.0 edgeray-origin-shv-09-frc3.facebook.com
0.0.0.0 edgeray-origin-shv-11-frc3.facebook.com
0.0.0.0 edgeray-shv-01-ams2.facebook.com
0.0.0.0 edgeray-shv-01-ams3.facebook.com
0.0.0.0 edgeray-shv-01-atl1.facebook.com
0.0.0.0 edgeray-shv-01-bru2.facebook.com
0.0.0.0 edgeray-shv-01-cdg2.facebook.com
0.0.0.0 edgeray-shv-01-dfw1.facebook.com
0.0.0.0 edgeray-shv-01-fra3.facebook.com
0.0.0.0 edgeray-shv-01-gru1.facebook.com
0.0.0.0 edgeray-shv-01-iad3.facebook.com
0.0.0.0 edgeray-shv-01-kul1.facebook.com
0.0.0.0 edgeray-shv-01-lax1.facebook.com
0.0.0.0 edgeray-shv-01-lga1.facebook.com
0.0.0.0 edgeray-shv-01-lhr3.facebook.com
0.0.0.0 edgeray-shv-01-mad1.facebook.com
0.0.0.0 edgeray-shv-01-mia1.facebook.com
0.0.0.0 edgeray-shv-01-mxp1.facebook.com
0.0.0.0 edgeray-shv-01-ord1.facebook.com
0.0.0.0 edgeray-shv-01-sea1.facebook.com
0.0.0.0 edgeray-shv-01-sin1.facebook.com
0.0.0.0 edgeray-shv-01-sjc2.facebook.com
0.0.0.0 edgeray-shv-01-syd1.facebook.com
0.0.0.0 edgeray-shv-01-vie1.facebook.com
0.0.0.0 edge-snaptu-http-p1-shv-01-ams3.facebook.com
0.0.0.0 edge-snaptu-http-p1-shv-01-atl1.facebook.com
0.0.0.0 edge-snaptu-http-p1-shv-01-bru2.facebook.com
0.0.0.0 edge-snaptu-http-p1-shv-01-cai1.facebook.com
0.0.0.0 edge-snaptu-http-p1-shv-01-cdg2.facebook.com
0.0.0.0 edge-snaptu-http-p1-shv-01-dfw1.facebook.com
0.0.0.0 edge-snaptu-http-p1-shv-01-fra3.facebook.com
0.0.0.0 edge-snaptu-http-p1-shv-01-gru1.facebook.com
0.0.0.0 edge-snaptu-http-p1-shv-01-iad3.facebook.com
0.0.0.0 edge-snaptu-http-p1-shv-01-kul1.facebook.com
0.0.0.0 edge-snaptu-http-p1-shv-01-lax1.facebook.com
0.0.0.0 edge-snaptu-http-p1-shv-01-lhr3.facebook.com
0.0.0.0 edge-snaptu-http-p1-shv-01-mad1.facebook.com
0.0.0.0 edge-snaptu-http-p1-shv-01-nrt1.facebook.com
0.0.0.0 edge-snaptu-http-p1-shv-01-ord1.facebook.com
0.0.0.0 edge-snaptu-http-p1-shv-01-sea1.facebook.com
0.0.0.0 edge-snaptu-http-p1-shv-01-syd1.facebook.com
0.0.0.0 edge-snaptu-http-p1-shv-02-cai1.facebook.com
0.0.0.0 edge-snaptu-tunnel-shv-01-ams3.facebook.com
0.0.0.0 edge-snaptu-tunnel-shv-01-ash5.facebook.com
0.0.0.0 edge-snaptu-tunnel-shv-01-atl1.facebook.com
0.0.0.0 edge-snaptu-tunnel-shv-01-bru2.facebook.com
0.0.0.0 edge-snaptu-tunnel-shv-01-cai1.facebook.com
0.0.0.0 edge-snaptu-tunnel-shv-01-cdg2.facebook.com
0.0.0.0 edge-snaptu-tunnel-shv-01-dfw1.facebook.com
0.0.0.0 edge-snaptu-tunnel-shv-01-fra3.facebook.com
0.0.0.0 edge-snaptu-tunnel-shv-01-gru1.facebook.com
0.0.0.0 edge-snaptu-tunnel-shv-01-hkg2.facebook.com
0.0.0.0 edge-snaptu-tunnel-shv-01-iad3.facebook.com
0.0.0.0 edge-snaptu-tunnel-shv-01-kul1.facebook.com
0.0.0.0 edge-snaptu-tunnel-shv-01-lax1.facebook.com
0.0.0.0 edge-snaptu-tunnel-shv-01-lhr3.facebook.com
0.0.0.0 edge-snaptu-tunnel-shv-01-mad1.facebook.com
0.0.0.0 edge-snaptu-tunnel-shv-01-nrt1.facebook.com
0.0.0.0 edge-snaptu-tunnel-shv-01-ord1.facebook.com
0.0.0.0 edge-snaptu-tunnel-shv-01-sea1.facebook.com
0.0.0.0 edge-snaptu-tunnel-shv-01-syd1.facebook.com
0.0.0.0 edge-snaptu-tunnel-shv-02-cai1.facebook.com
0.0.0.0 edge-star-shv-12-frc3.facebook.com
0.0.0.0 instagram.c10r.facebook.com
0.0.0.0 l.facebook.com
0.0.0.0 liverail.c10r.facebook.com
0.0.0.0 lm.facebook.com
0.0.0.0 m.facebook.com
0.0.0.0 mqtt.c10r.facebook.com
0.0.0.0 mqtt.vvv.facebook.com
0.0.0.0 pixel.facebook.com
0.0.0.0 profile.ak.facebook.com.edgesuite.net
0.0.0.0 research.facebook.com
0.0.0.0 snaptu-d-shv-05-frc3.facebook.com
0.0.0.0 snaptu-d-shv-10-frc1.facebook.com
0.0.0.0 s-static.ak.facebook.com.edgekey.net
0.0.0.0 star.c10r.facebook.com
0.0.0.0 star.facebook.com
0.0.0.0 star-mini.c10r.facebook.com
0.0.0.0 static.ak.facebook.com
0.0.0.0 static.ak.facebook.com.edgesuite.net
0.0.0.0 staticxx.facebook.com
0.0.0.0 webdav.facebook.com
0.0.0.0 z-m.c10r.facebook.com
0.0.0.0 z-m.facebook.com
0.0.0.0 edge-sonar-shv-01-ams2.fbcdn.net
0.0.0.0 edge-sonar-shv-01-ams3.fbcdn.net
0.0.0.0 edge-sonar-shv-01-ash5.fbcdn.net
0.0.0.0 edge-sonar-shv-01-atl1.fbcdn.net
0.0.0.0 edge-sonar-shv-01-bru2.fbcdn.net
0.0.0.0 edge-sonar-shv-01-cai1.fbcdn.net
0.0.0.0 edge-sonar-shv-01-cdg2.fbcdn.net
0.0.0.0 edge-sonar-shv-01-dfw1.fbcdn.net
0.0.0.0 edge-sonar-shv-01-fra3.fbcdn.net
0.0.0.0 edge-sonar-shv-01-gru1.fbcdn.net
0.0.0.0 edge-sonar-shv-01-iad3.fbcdn.net
0.0.0.0 edge-sonar-shv-01-kul1.fbcdn.net
0.0.0.0 edge-sonar-shv-01-lax1.fbcdn.net
0.0.0.0 edge-sonar-shv-01-lga1.fbcdn.net
0.0.0.0 edge-sonar-shv-01-lhr3.fbcdn.net
0.0.0.0 edge-sonar-shv-01-mad1.fbcdn.net
0.0.0.0 edge-sonar-shv-01-mia1.fbcdn.net
0.0.0.0 edge-sonar-shv-01-mrs1.fbcdn.net
0.0.0.0 edge-sonar-shv-01-mxp1.fbcdn.net
0.0.0.0 edge-sonar-shv-01-nrt1.fbcdn.net
0.0.0.0 edge-sonar-shv-01-ord1.fbcdn.net
0.0.0.0 edge-sonar-shv-01-sea1.fbcdn.net
0.0.0.0 edge-sonar-shv-01-sin1.fbcdn.net
0.0.0.0 edge-sonar-shv-01-sjc2.fbcdn.net
0.0.0.0 edge-sonar-shv-01-syd1.fbcdn.net
0.0.0.0 edge-sonar-shv-01-tpe1.fbcdn.net
0.0.0.0 edge-sonar-shv-01-vie1.fbcdn.net
0.0.0.0 edge-sonar-shv-02-cai1.fbcdn.net
0.0.0.0 edge-sonar-shv-02-hkg2.fbcdn.net
0.0.0.0 edge-sonar-shv-03-ash5.fbcdn.net
0.0.0.0 edge-sonar-shv-03-atn1.fbcdn.net
0.0.0.0 edge-sonar-shv-03-hkg1.fbcdn.net
0.0.0.0 edge-sonar-shv-03-lla1.fbcdn.net
0.0.0.0 edge-sonar-shv-03-prn2.fbcdn.net
0.0.0.0 edge-sonar-shv-03-xdc1.fbcdn.net
0.0.0.0 edge-sonar-shv-04-hkg1.fbcdn.net
0.0.0.0 edge-sonar-shv-04-prn2.fbcdn.net
0.0.0.0 edge-sonar-shv-06-atn1.fbcdn.net
0.0.0.0 edge-sonar-shv-06-lla1.fbcdn.net
0.0.0.0 edge-sonar-shv-07-ash4.fbcdn.net
0.0.0.0 edge-sonar-shv-07-frc3.fbcdn.net
0.0.0.0 edge-sonar-shv-09-frc1.fbcdn.net
0.0.0.0 edge-sonar-shv-09-lla1.fbcdn.net
0.0.0.0 edge-sonar-shv-12-frc1.fbcdn.net
0.0.0.0 edge-sonar-shv-12-frc3.fbcdn.net
0.0.0.0 edge-sonar-shv-12-lla1.fbcdn.net
0.0.0.0 edge-sonar-shv-12-prn1.fbcdn.net
0.0.0.0 edge-sonar-shv-13-frc1.fbcdn.net
0.0.0.0 edge-sonar-shv-17-prn1.fbcdn.net
0.0.0.0 edge-sonar-shv-18-prn1.fbcdn.net
0.0.0.0 external-iad3-1.xx.fbcdn.net
0.0.0.0 external.fsjc1-2.fna.fbcdn.net
0.0.0.0 fdda274d380ki4frcgi-rumjfjai1460158783-sonar.xx.fbcdn.net
0.0.0.0 herningrideklub.netscontent-a-ams.xx.fbcdn.net
0.0.0.0 ncontent.xx.fbcdn.net
0.0.0.0 origincache-ash.t.fbcdn.net
0.0.0.0 origincache-frc.t.fbcdn.net
0.0.0.0 origincache-prn.t.fbcdn.net
0.0.0.0 origincache-tf.t.fbcdn.net
0.0.0.0 origincache-tl.t.fbcdn.net
0.0.0.0 origincache-xtf.fbcdn.net
0.0.0.0 origincache-xtl.fbcdn.net
0.0.0.0 origincache-xx-shv-05-atn1.fbcdn.net
0.0.0.0 origincache-xx-shv-05-frc3.fbcdn.net
0.0.0.0 origincache-xx-shv-05-prn2.fbcdn.net
0.0.0.0 origincache-xx-shv-06-ash3.fbcdn.net
0.0.0.0 origincache-xx-shv-06-ash4.fbcdn.net
0.0.0.0 origincache-xx-shv-07-ash2.fbcdn.net
0.0.0.0 origincache-xx-shv-07-atn1.fbcdn.net
0.0.0.0 origincache-xx-shv-08-ash2.fbcdn.net
0.0.0.0 origincache-xx-shv-08-frc3.fbcdn.net
0.0.0.0 origincache-xx-shv-08-prn2.fbcdn.net
0.0.0.0 origincache-xx-shv-09-frc3.fbcdn.net
0.0.0.0 origincache-xx-shv-09-prn2.fbcdn.net
0.0.0.0 origincache-xx-shv-13-prn1.fbcdn.net
0.0.0.0 photos-a-ord.xx.fbcdn.net
0.0.0.0 photos-a.xx.fbcdn.net
0.0.0.0 photos-b-ord.xx.fbcdn.net
0.0.0.0 photos-b.xx.fbcdn.net
0.0.0.0 profile-a-atl.xx.fbcdn.net
0.0.0.0 profile-a-dfw.xx.fbcdn.net
0.0.0.0 profile-a-iad.xx.fbcdn.net
0.0.0.0 profile-a-lax.xx.fbcdn.net
0.0.0.0 profile-a-lga.xx.fbcdn.net
0.0.0.0 profile-a-mia.xx.fbcdn.net
0.0.0.0 profile-a-ord.xx.fbcdn.net
0.0.0.0 profile-a-sea.xx.fbcdn.net
0.0.0.0 profile-a-sjc.xx.fbcdn.net
0.0.0.0 profile-a.xx.fbcdn.net
0.0.0.0 profile-b-dfw.xx.fbcdn.net
0.0.0.0 profile-b-iad.xx.fbcdn.net
0.0.0.0 profile-b-lga.xx.fbcdn.net
0.0.0.0 profile-b-mia.xx.fbcdn.net
0.0.0.0 profile-b-ord.xx.fbcdn.net
0.0.0.0 profile-b-sjc.xx.fbcdn.net
0.0.0.0 profile-b.xx.fbcdn.net
0.0.0.0 profile.ak.fbcdn.net
0.0.0.0 profile.xx.fbcdn.net
0.0.0.0 scontent-1.2914.fna.fbcdn.net
0.0.0.0 scontent-2.2914.fna.fbcdn.net
0.0.0.0 scontent-a-ams.xx.fbcdn.net
0.0.0.0 scontent-a-atl.xx.fbcdn.net
0.0.0.0 scontent-a-cdg.xx.fbcdn.net
0.0.0.0 scontent-a-dfw.xx.fbcdn.net
0.0.0.0 scontent-a-fra.xx.fbcdn.net
0.0.0.0 scontent-a-gru.xx.fbcdn.net
0.0.0.0 scontent-a-iad.xx.fbcdn.net
0.0.0.0 scontent-a-lax.xx.fbcdn.net
0.0.0.0 scontent-a-lga.xx.fbcdn.net
0.0.0.0 scontent-a-lhr.xx.fbcdn.net
0.0.0.0 scontent-a-mad.xx.fbcdn.net
0.0.0.0 scontent-a-mia.xx.fbcdn.net
0.0.0.0 scontent-a-mxp.xx.fbcdn.net
0.0.0.0 scontent-a-ord.xx.fbcdn.net
0.0.0.0 scontent-a-pao.xx.fbcdn.net
0.0.0.0 scontent-a-sea.xx.fbcdn.net
0.0.0.0 scontent-a-sin.xx.fbcdn.net
0.0.0.0 scontent-a-sjc.xx.fbcdn.net
0.0.0.0 scontent-a-vie.xx.fbcdn.net
0.0.0.0 scontent-a.xx.fbcdn.net
0.0.0.0 scontent-ams.xx.fbcdn.net
0.0.0.0 scontent-atl.xx.fbcdn.net
0.0.0.0 scontent-b-ams.xx.fbcdn.net
0.0.0.0 scontent-b-atl.xx.fbcdn.net
0.0.0.0 scontent-b-cdg.xx.fbcdn.net
0.0.0.0 scontent-b-dfw.xx.fbcdn.net
0.0.0.0 scontent-b-fra.xx.fbcdn.net
0.0.0.0 scontent-b-gru.xx.fbcdn.net
0.0.0.0 scontent-b-hkg.xx.fbcdn.net
0.0.0.0 scontent-b-lax.xx.fbcdn.net
0.0.0.0 scontent-b-lga.xx.fbcdn.net
0.0.0.0 scontent-b-lhr.xx.fbcdn.net
0.0.0.0 scontent-b-mad.xx.fbcdn.net
0.0.0.0 scontent-b-mia.xx.fbcdn.net
0.0.0.0 scontent-b-mxp.xx.fbcdn.net
0.0.0.0 scontent-b-ord.xx.fbcdn.net
0.0.0.0 scontent-b-pao.xx.fbcdn.net
0.0.0.0 scontent-b-sea.xx.fbcdn.net
0.0.0.0 scontent-b-sin.xx.fbcdn.net
0.0.0.0 scontent-b-sjc.xx.fbcdn.net
0.0.0.0 scontent-b-vie.xx.fbcdn.net
0.0.0.0 scontent-b.xx.fbcdn.net
0.0.0.0 scontent-cdg.xx.fbcdn.net
0.0.0.0 scontent-dfw.xx.fbcdn.net
0.0.0.0 scontent-fra.xx.fbcdn.net
0.0.0.0 scontent-gru.xx.fbcdn.net
0.0.0.0 scontent-iad3-1.xx.fbcdn.net
0.0.0.0 scontent-lax.xx.fbcdn.net
0.0.0.0 scontent-lax3-1.xx.fbcdn.net
0.0.0.0 scontent-lga.xx.fbcdn.net
0.0.0.0 scontent-lga3-1.xx.fbcdn.net
0.0.0.0 scontent-lhr.xx.fbcdn.net
0.0.0.0 scontent-mia.xx.fbcdn.net
0.0.0.0 scontent-mxp.xx.fbcdn.net
0.0.0.0 scontent-ord.xx.fbcdn.net
0.0.0.0 scontent-sea.xx.fbcdn.net
0.0.0.0 scontent-sin.xx.fbcdn.net
0.0.0.0 scontent-sjc.xx.fbcdn.net
0.0.0.0 scontent-sjc2-1.xx.fbcdn.net
0.0.0.0 scontent-vie.xx.fbcdn.net
0.0.0.0 scontent.fsjc1-2.fna.fbcdn.net
0.0.0.0 scontent.fsnc1-1.fna.fbcdn.net
0.0.0.0 scontent.xx.fbcdn.net
0.0.0.0 sonar-iad.xx.fbcdn.net
0.0.0.0 sphotos-a-ams.xx.fbcdn.net
0.0.0.0 sphotos-a-atl.xx.fbcdn.net
0.0.0.0 sphotos-a-cdg.xx.fbcdn.net
0.0.0.0 sphotos-a-dfw.xx.fbcdn.net
0.0.0.0 sphotos-a-iad.xx.fbcdn.net
0.0.0.0 sphotos-a-lax.xx.fbcdn.net
0.0.0.0 sphotos-a-lga.xx.fbcdn.net
0.0.0.0 sphotos-a-lhr.xx.fbcdn.net
0.0.0.0 sphotos-a-mad.xx.fbcdn.net
0.0.0.0 sphotos-a-mia.xx.fbcdn.net
0.0.0.0 sphotos-a-mxp.xx.fbcdn.net
0.0.0.0 sphotos-a-ord.xx.fbcdn.net
0.0.0.0 sphotos-a-pao.xx.fbcdn.net
0.0.0.0 sphotos-a-sea.xx.fbcdn.net
0.0.0.0 sphotos-a-sjc.xx.fbcdn.net
0.0.0.0 sphotos-a-vie.xx.fbcdn.net
0.0.0.0 sphotos-a.xx.fbcdn.net
0.0.0.0 sphotos-b-ams.xx.fbcdn.net
0.0.0.0 sphotos-b-atl.xx.fbcdn.net
0.0.0.0 sphotos-b-cdg.xx.fbcdn.net
0.0.0.0 sphotos-b-dfw.xx.fbcdn.net
0.0.0.0 sphotos-b-iad.xx.fbcdn.net
0.0.0.0 sphotos-b-lax.xx.fbcdn.net
0.0.0.0 sphotos-b-lga.xx.fbcdn.net
0.0.0.0 sphotos-b-lhr.xx.fbcdn.net
0.0.0.0 sphotos-b-mad.xx.fbcdn.net
0.0.0.0 sphotos-b-mia.xx.fbcdn.net
0.0.0.0 sphotos-b-mxp.xx.fbcdn.net
0.0.0.0 sphotos-b-ord.xx.fbcdn.net
0.0.0.0 sphotos-b-pao.xx.fbcdn.net
0.0.0.0 sphotos-b-sea.xx.fbcdn.net
0.0.0.0 sphotos-b-sjc.xx.fbcdn.net
0.0.0.0 sphotos-b-vie.xx.fbcdn.net
0.0.0.0 sphotos-b.xx.fbcdn.net
0.0.0.0 sphotos.xx.fbcdn.net
0.0.0.0 sphotosbord.xx.fbcdn.net
0.0.0.0 static.xx.fbcdn.net
0.0.0.0 video-iad3-1.xx.fbcdn.net
0.0.0.0 vthumb.xx.fbcdn.net
0.0.0.0 xx-fbcdn-shv-01-ams2.fbcdn.net
0.0.0.0 xx-fbcdn-shv-01-ams3.fbcdn.net
0.0.0.0 xx-fbcdn-shv-01-atl1.fbcdn.net
0.0.0.0 xx-fbcdn-shv-01-bru2.fbcdn.net
0.0.0.0 xx-fbcdn-shv-01-cdg2.fbcdn.net
0.0.0.0 xx-fbcdn-shv-01-dfw1.fbcdn.net
0.0.0.0 xx-fbcdn-shv-01-fra3.fbcdn.net
0.0.0.0 xx-fbcdn-shv-01-gru1.fbcdn.net
0.0.0.0 xx-fbcdn-shv-01-hkg2.fbcdn.net
0.0.0.0 xx-fbcdn-shv-01-iad3.fbcdn.net
0.0.0.0 xx-fbcdn-shv-01-lax1.fbcdn.net
0.0.0.0 xx-fbcdn-shv-01-lga1.fbcdn.net
0.0.0.0 xx-fbcdn-shv-01-lhr3.fbcdn.net
0.0.0.0 xx-fbcdn-shv-01-mad1.fbcdn.net
0.0.0.0 xx-fbcdn-shv-01-mia1.fbcdn.net
0.0.0.0 xx-fbcdn-shv-01-mrs1.fbcdn.net
0.0.0.0 xx-fbcdn-shv-01-mxp1.fbcdn.net
0.0.0.0 xx-fbcdn-shv-01-nrt1.fbcdn.net
0.0.0.0 xx-fbcdn-shv-01-ord1.fbcdn.net
0.0.0.0 xx-fbcdn-shv-01-sea1.fbcdn.net
0.0.0.0 xx-fbcdn-shv-01-sin1.fbcdn.net
0.0.0.0 xx-fbcdn-shv-01-sjc2.fbcdn.net
0.0.0.0 xx-fbcdn-shv-01-vie1.fbcdn.net
0.0.0.0 xx-fbcdn-shv-02-cai1.fbcdn.net
0.0.0.0 xx-fbcdn-shv-03-ash5.fbcdn.net
0.0.0.0 xx-fbcdn-shv-04-hkg1.fbcdn.net
0.0.0.0 xx-fbcdn-shv-04-prn2.fbcdn.net
0.0.0.0 z-1-scontent-sjc2-1.xx.fbcdn.net
0.0.0.0 z-1-scontent.xx.fbcdn.net
0.0.0.0 api.instagram.com
0.0.0.0 black.ish.instagram.com
0.0.0.0 i.instagram.com
0.0.0.0 instagram-shv-01-ams2.fbcdn.net
0.0.0.0 instagram-shv-01-ams3.fbcdn.net
0.0.0.0 instagram-shv-01-ash5.fbcdn.net
0.0.0.0 instagram-shv-01-atl1.fbcdn.net
0.0.0.0 instagram-shv-01-bru2.fbcdn.net
0.0.0.0 instagram-shv-01-cai1.fbcdn.net
0.0.0.0 instagram-shv-01-cdg2.fbcdn.net
0.0.0.0 instagram-shv-01-dfw1.fbcdn.net
0.0.0.0 instagram-shv-01-fra3.fbcdn.net
0.0.0.0 instagram-shv-01-gru1.fbcdn.net
0.0.0.0 instagram-shv-01-hkg2.fbcdn.net
0.0.0.0 instagram-shv-01-iad3.fbcdn.net
0.0.0.0 instagram-shv-01-kul1.fbcdn.net
0.0.0.0 instagram-shv-01-lax1.fbcdn.net
0.0.0.0 instagram-shv-01-lga1.fbcdn.net
0.0.0.0 instagram-shv-01-lhr3.fbcdn.net
0.0.0.0 instagram-shv-01-mad1.fbcdn.net
0.0.0.0 instagram-shv-01-mia1.fbcdn.net
0.0.0.0 instagram-shv-01-mxp1.fbcdn.net
0.0.0.0 instagram-shv-01-nrt1.fbcdn.net
0.0.0.0 instagram-shv-01-ord1.fbcdn.net
0.0.0.0 instagram-shv-01-sea1.fbcdn.net
0.0.0.0 instagram-shv-01-sin1.fbcdn.net
0.0.0.0 instagram-shv-01-sjc2.fbcdn.net
0.0.0.0 instagram-shv-01-syd1.fbcdn.net
0.0.0.0 instagram-shv-01-tpe1.fbcdn.net
0.0.0.0 instagram-shv-01-vie1.fbcdn.net
0.0.0.0 instagram-shv-02-cai1.fbcdn.net
0.0.0.0 instagram-shv-02-hkg2.fbcdn.net
0.0.0.0 instagram-shv-03-ash5.fbcdn.net
0.0.0.0 instagram-shv-03-atn1.fbcdn.net
0.0.0.0 instagram-shv-03-hkg1.fbcdn.net
0.0.0.0 instagram-shv-03-lla1.fbcdn.net
0.0.0.0 instagram-shv-03-prn2.fbcdn.net
0.0.0.0 instagram-shv-03-xdc1.fbcdn.net
0.0.0.0 instagram-shv-04-hkg1.fbcdn.net
0.0.0.0 instagram-shv-06-atn1.fbcdn.net
0.0.0.0 instagram-shv-06-lla1.fbcdn.net
0.0.0.0 instagram-shv-07-ash4.fbcdn.net
0.0.0.0 instagram-shv-07-frc3.fbcdn.net
0.0.0.0 instagram-shv-09-frc1.fbcdn.net
0.0.0.0 instagram-shv-09-lla1.fbcdn.net
0.0.0.0 instagram-shv-12-frc1.fbcdn.net
0.0.0.0 instagram-shv-12-frc3.fbcdn.net
0.0.0.0 instagram-shv-12-lla1.fbcdn.net
0.0.0.0 instagram-shv-12-prn1.fbcdn.net
0.0.0.0 instagram-shv-13-frc1.fbcdn.net
0.0.0.0 instagram-shv-17-prn1.fbcdn.net
0.0.0.0 instagram-shv-18-prn1.fbcdn.net
0.0.0.0 instagram.com
0.0.0.0 instagramstatic-a.akamaihd.net
0.0.0.0 instagramstatic-a.akamaihd.net.edgesuite.net
0.0.0.0 logger.instagram.com
0.0.0.0 platform.instagram.com
0.0.0.0 scontent-iad3-1.cdninstagram.com
0.0.0.0 scontent.cdninstagram.com
0.0.0.0 telegraph-ash.instagram.com
0.0.0.0 white.ish.instagram.com
0.0.0.0 www.instagram.com
0.0.0.0 ae0.bb01.ams2.tfbnw.net
0.0.0.0 ae0.bb01.atl1.tfbnw.net
0.0.0.0 ae0.bb01.bos2.tfbnw.net
0.0.0.0 ae0.bb01.hkg1.tfbnw.net
0.0.0.0 ae0.bb01.hnd1.tfbnw.net
0.0.0.0 ae0.bb01.lhr2.tfbnw.net
0.0.0.0 ae0.bb01.lla1.tfbnw.net
0.0.0.0 ae0.bb01.mia1.tfbnw.net
0.0.0.0 ae0.bb01.nrt1.tfbnw.net
0.0.0.0 ae0.bb01.sin1.tfbnw.net
0.0.0.0 ae0.bb02.ams2.tfbnw.net
0.0.0.0 ae0.bb02.atl1.tfbnw.net
0.0.0.0 ae0.bb02.bos2.tfbnw.net
0.0.0.0 ae0.bb02.hkg1.tfbnw.net
0.0.0.0 ae0.bb02.lhr2.tfbnw.net
0.0.0.0 ae0.bb02.lla1.tfbnw.net
0.0.0.0 ae0.bb02.mia1.tfbnw.net
0.0.0.0 ae0.bb02.sin1.tfbnw.net
0.0.0.0 ae0.bb03.atn1.tfbnw.net
0.0.0.0 ae0.bb03.frc3.tfbnw.net
0.0.0.0 ae0.bb03.lla1.tfbnw.net
0.0.0.0 ae0.bb03.prn2.tfbnw.net
0.0.0.0 ae0.bb03.sjc1.tfbnw.net
0.0.0.0 ae0.bb04.atn1.tfbnw.net
0.0.0.0 ae0.bb04.frc3.tfbnw.net
0.0.0.0 ae0.bb04.lla1.tfbnw.net
0.0.0.0 ae0.bb04.prn2.tfbnw.net
0.0.0.0 ae0.bb04.sjc1.tfbnw.net
0.0.0.0 ae0.bb05.frc3.tfbnw.net
0.0.0.0 ae0.bb05.lla1.tfbnw.net
0.0.0.0 ae0.bb05.prn2.tfbnw.net
0.0.0.0 ae0.bb06.frc3.tfbnw.net
0.0.0.0 ae0.bb06.lla1.tfbnw.net
0.0.0.0 ae0.bb07.lla1.tfbnw.net
0.0.0.0 ae0.br01.arn2.tfbnw.net
0.0.0.0 ae0.br01.bru2.tfbnw.net
0.0.0.0 ae0.br01.cai1.tfbnw.net
0.0.0.0 ae0.br01.gru1.tfbnw.net
0.0.0.0 ae0.br01.mad1.tfbnw.net
0.0.0.0 ae0.br01.mrs1.tfbnw.net
0.0.0.0 ae0.br01.mxp1.tfbnw.net
0.0.0.0 ae0.br01.syd1.tfbnw.net
0.0.0.0 ae0.br01.tpe1.tfbnw.net
0.0.0.0 ae0.br01.vie1.tfbnw.net
0.0.0.0 ae0.dr01.prn2.tfbnw.net
0.0.0.0 ae0.dr01.snc1.tfbnw.net
0.0.0.0 ae0.dr02.prn2.tfbnw.net
0.0.0.0 ae0.dr02.snc1.tfbnw.net
0.0.0.0 ae0.dr03.ash3.tfbnw.net
0.0.0.0 ae0.dr03.prn2.tfbnw.net
0.0.0.0 ae0.dr04.ash3.tfbnw.net
0.0.0.0 ae0.dr04.prn2.tfbnw.net
0.0.0.0 ae0.lr01.ash3.tfbnw.net
0.0.0.0 ae0.lr02.ash3.tfbnw.net
0.0.0.0 ae0.pr01.ams2.tfbnw.net
0.0.0.0 ae0.pr01.ams3.tfbnw.net
0.0.0.0 ae0.pr01.dfw1.tfbnw.net
0.0.0.0 ae0.pr01.fra2.tfbnw.net
0.0.0.0 ae0.pr01.lhr2.tfbnw.net
0.0.0.0 ae0.pr01.mia1.tfbnw.net
0.0.0.0 ae0.pr02.dfw1.tfbnw.net
0.0.0.0 ae0.pr02.fra2.tfbnw.net
0.0.0.0 ae0.pr02.iad3.tfbnw.net
0.0.0.0 ae0.pr02.lax1.tfbnw.net
0.0.0.0 ae0.pr02.lga1.tfbnw.net
0.0.0.0 ae0.pr02.mia1.tfbnw.net
0.0.0.0 ae0.pr02.ord1.tfbnw.net
0.0.0.0 ae0.pr03.sjc1.tfbnw.net
0.0.0.0 ae0.pr04.sjc1.tfbnw.net
0.0.0.0 ae10.bb01.atl1.tfbnw.net
0.0.0.0 ae10.bb01.lhr2.tfbnw.net
0.0.0.0 ae10.bb01.lla1.tfbnw.net
0.0.0.0 ae10.bb01.mia1.tfbnw.net
0.0.0.0 ae10.bb01.sin1.tfbnw.net
0.0.0.0 ae10.bb02.atl1.tfbnw.net
0.0.0.0 ae10.bb02.hkg1.tfbnw.net
0.0.0.0 ae10.bb02.lhr2.tfbnw.net
0.0.0.0 ae10.bb02.lla1.tfbnw.net
0.0.0.0 ae10.bb02.mia1.tfbnw.net
0.0.0.0 ae10.bb02.sin1.tfbnw.net
0.0.0.0 ae10.bb03.atn1.tfbnw.net
0.0.0.0 ae10.bb03.frc3.tfbnw.net
0.0.0.0 ae10.bb03.lla1.tfbnw.net
0.0.0.0 ae10.bb03.sjc1.tfbnw.net
0.0.0.0 ae10.bb04.atn1.tfbnw.net
0.0.0.0 ae10.bb04.frc3.tfbnw.net
0.0.0.0 ae10.bb04.lla1.tfbnw.net
0.0.0.0 ae10.bb04.sjc1.tfbnw.net
0.0.0.0 ae10.bb05.lla1.tfbnw.net
0.0.0.0 ae10.bb06.frc3.tfbnw.net
0.0.0.0 ae10.bb06.lla1.tfbnw.net
0.0.0.0 ae10.br01.bru2.tfbnw.net
0.0.0.0 ae10.br01.kul1.tfbnw.net
0.0.0.0 ae10.br01.mad1.tfbnw.net
0.0.0.0 ae10.br01.mxp1.tfbnw.net
0.0.0.0 ae10.br01.tpe1.tfbnw.net
0.0.0.0 ae10.br02.vie1.tfbnw.net
0.0.0.0 ae10.dr01.frc1.tfbnw.net
0.0.0.0 ae10.dr02.frc1.tfbnw.net
0.0.0.0 ae10.dr02.prn1.tfbnw.net
0.0.0.0 ae10.dr05.prn1.tfbnw.net
0.0.0.0 ae10.dr06.prn1.tfbnw.net
0.0.0.0 ae10.pr01.atl1.tfbnw.net
0.0.0.0 ae10.pr01.dfw1.tfbnw.net
0.0.0.0 ae10.pr01.fra2.tfbnw.net
0.0.0.0 ae10.pr01.lax1.tfbnw.net
0.0.0.0 ae10.pr01.mia1.tfbnw.net
0.0.0.0 ae10.pr01.nrt1.tfbnw.net
0.0.0.0 ae10.pr01.sin1.tfbnw.net
0.0.0.0 ae10.pr02.atl1.tfbnw.net
0.0.0.0 ae10.pr02.fra2.tfbnw.net
0.0.0.0 ae10.pr02.sin1.tfbnw.net
0.0.0.0 ae11.bb01.ams2.tfbnw.net
0.0.0.0 ae11.bb01.atl1.tfbnw.net
0.0.0.0 ae11.bb01.lhr2.tfbnw.net
0.0.0.0 ae11.bb01.mia1.tfbnw.net
0.0.0.0 ae11.bb01.nrt1.tfbnw.net
0.0.0.0 ae11.bb01.sin1.tfbnw.net
0.0.0.0 ae11.bb02.ams2.tfbnw.net
0.0.0.0 ae11.bb02.atl1.tfbnw.net
0.0.0.0 ae11.bb02.hkg1.tfbnw.net
0.0.0.0 ae11.bb02.lhr2.tfbnw.net
0.0.0.0 ae11.bb02.mia1.tfbnw.net
0.0.0.0 ae11.bb02.sin1.tfbnw.net
0.0.0.0 ae11.bb03.atn1.tfbnw.net
0.0.0.0 ae11.bb03.frc3.tfbnw.net
0.0.0.0 ae11.bb03.prn2.tfbnw.net
0.0.0.0 ae11.bb03.sjc1.tfbnw.net
0.0.0.0 ae11.bb04.atn1.tfbnw.net
0.0.0.0 ae11.bb04.frc3.tfbnw.net
0.0.0.0 ae11.bb04.prn2.tfbnw.net
0.0.0.0 ae11.bb04.sjc1.tfbnw.net
0.0.0.0 ae11.bb05.lla1.tfbnw.net
0.0.0.0 ae11.bb06.frc3.tfbnw.net
0.0.0.0 ae11.bb06.lla1.tfbnw.net
0.0.0.0 ae11.br01.kul1.tfbnw.net
0.0.0.0 ae11.br01.mad1.tfbnw.net
0.0.0.0 ae11.br01.tpe1.tfbnw.net
0.0.0.0 ae11.br01.vie1.tfbnw.net
0.0.0.0 ae11.br02.mxp1.tfbnw.net
0.0.0.0 ae11.br02.vie1.tfbnw.net
0.0.0.0 ae11.dr01.atn1.tfbnw.net
0.0.0.0 ae11.dr01.frc1.tfbnw.net
0.0.0.0 ae11.dr01.snc1.tfbnw.net
0.0.0.0 ae11.dr02.atn1.tfbnw.net
0.0.0.0 ae11.dr02.frc1.tfbnw.net
0.0.0.0 ae11.dr02.snc1.tfbnw.net
0.0.0.0 ae11.dr03.atn1.tfbnw.net
0.0.0.0 ae11.dr03.frc1.tfbnw.net
0.0.0.0 ae11.dr04.atn1.tfbnw.net
0.0.0.0 ae11.dr04.frc1.tfbnw.net
0.0.0.0 ae11.pr01.atl1.tfbnw.net
0.0.0.0 ae11.pr01.dfw1.tfbnw.net
0.0.0.0 ae11.pr01.hkg1.tfbnw.net
0.0.0.0 ae11.pr01.lga1.tfbnw.net
0.0.0.0 ae11.pr01.lhr2.tfbnw.net
0.0.0.0 ae11.pr01.lhr3.tfbnw.net
0.0.0.0 ae11.pr01.ord1.tfbnw.net
0.0.0.0 ae11.pr02.atl1.tfbnw.net
0.0.0.0 ae11.pr02.cdg1.tfbnw.net
0.0.0.0 ae11.pr02.fra2.tfbnw.net
0.0.0.0 ae11.pr02.lax1.tfbnw.net
0.0.0.0 ae12.bb01.ams2.tfbnw.net
0.0.0.0 ae12.bb01.lhr2.tfbnw.net
0.0.0.0 ae12.bb01.mia1.tfbnw.net
0.0.0.0 ae12.bb01.nrt1.tfbnw.net
0.0.0.0 ae12.bb02.ams2.tfbnw.net
0.0.0.0 ae12.bb02.atl1.tfbnw.net
0.0.0.0 ae12.bb02.lhr2.tfbnw.net
0.0.0.0 ae12.bb02.mia1.tfbnw.net
0.0.0.0 ae12.bb03.atn1.tfbnw.net
0.0.0.0 ae12.bb03.frc3.tfbnw.net
0.0.0.0 ae12.bb03.prn2.tfbnw.net
0.0.0.0 ae12.bb03.sjc1.tfbnw.net
0.0.0.0 ae12.bb04.atn1.tfbnw.net
0.0.0.0 ae12.bb04.frc3.tfbnw.net
0.0.0.0 ae12.bb04.prn2.tfbnw.net
0.0.0.0 ae12.bb04.sjc1.tfbnw.net
0.0.0.0 ae12.bb05.lla1.tfbnw.net
0.0.0.0 ae12.bb06.frc3.tfbnw.net
0.0.0.0 ae12.bb06.lla1.tfbnw.net
0.0.0.0 ae12.br01.kul1.tfbnw.net
0.0.0.0 ae12.br01.mad1.tfbnw.net
0.0.0.0 ae12.br01.mxp1.tfbnw.net
0.0.0.0 ae12.br01.vie1.tfbnw.net
0.0.0.0 ae12.br02.mxp1.tfbnw.net
0.0.0.0 ae12.br02.vie1.tfbnw.net
0.0.0.0 ae12.dr01.atn1.tfbnw.net
0.0.0.0 ae12.dr01.frc1.tfbnw.net
0.0.0.0 ae12.dr01.snc1.tfbnw.net
0.0.0.0 ae12.dr02.atn1.tfbnw.net
0.0.0.0 ae12.dr02.frc1.tfbnw.net
0.0.0.0 ae12.dr02.snc1.tfbnw.net
0.0.0.0 ae12.dr03.atn1.tfbnw.net
0.0.0.0 ae12.dr03.frc1.tfbnw.net
0.0.0.0 ae12.dr04.atn1.tfbnw.net
0.0.0.0 ae12.dr04.frc1.tfbnw.net
0.0.0.0 ae12.pr01.ams2.tfbnw.net
0.0.0.0 ae12.pr01.ams3.tfbnw.net
0.0.0.0 ae12.pr01.atl1.tfbnw.net
0.0.0.0 ae12.pr01.hkg1.tfbnw.net
0.0.0.0 ae12.pr01.lga1.tfbnw.net
0.0.0.0 ae12.pr01.lhr2.tfbnw.net
0.0.0.0 ae12.pr01.mia1.tfbnw.net
0.0.0.0 ae12.pr01.ord1.tfbnw.net
0.0.0.0 ae12.pr01.sea1.tfbnw.net
0.0.0.0 ae12.pr01.sin1.tfbnw.net
0.0.0.0 ae12.pr02.atl1.tfbnw.net
0.0.0.0 ae12.pr02.sea1.tfbnw.net
0.0.0.0 ae13.bb01.atl1.tfbnw.net
0.0.0.0 ae13.bb01.lhr2.tfbnw.net
0.0.0.0 ae13.bb01.mia1.tfbnw.net
0.0.0.0 ae13.bb01.nrt1.tfbnw.net
0.0.0.0 ae13.bb01.sin1.tfbnw.net
0.0.0.0 ae13.bb02.lhr2.tfbnw.net
0.0.0.0 ae13.bb02.mia1.tfbnw.net
0.0.0.0 ae13.bb03.atn1.tfbnw.net
0.0.0.0 ae13.bb03.frc3.tfbnw.net
0.0.0.0 ae13.bb03.prn2.tfbnw.net
0.0.0.0 ae13.bb03.sjc1.tfbnw.net
0.0.0.0 ae13.bb04.atn1.tfbnw.net
0.0.0.0 ae13.bb04.frc3.tfbnw.net
0.0.0.0 ae13.bb04.prn2.tfbnw.net
0.0.0.0 ae13.bb04.sjc1.tfbnw.net
0.0.0.0 ae13.bb05.lla1.tfbnw.net
0.0.0.0 ae13.bb06.lla1.tfbnw.net
0.0.0.0 ae13.br01.mad1.tfbnw.net
0.0.0.0 ae13.br01.mxp1.tfbnw.net
0.0.0.0 ae13.br01.tpe1.tfbnw.net
0.0.0.0 ae13.br01.vie1.tfbnw.net
0.0.0.0 ae13.br02.mxp1.tfbnw.net
0.0.0.0 ae13.br02.vie1.tfbnw.net
0.0.0.0 ae13.dr01.atn1.tfbnw.net
0.0.0.0 ae13.dr01.frc1.tfbnw.net
0.0.0.0 ae13.dr02.atn1.tfbnw.net
0.0.0.0 ae13.dr02.frc1.tfbnw.net
0.0.0.0 ae13.dr03.atn1.tfbnw.net
0.0.0.0 ae13.dr03.frc1.tfbnw.net
0.0.0.0 ae13.dr04.atn1.tfbnw.net
0.0.0.0 ae13.dr04.frc1.tfbnw.net
0.0.0.0 ae13.dr05.prn1.tfbnw.net
0.0.0.0 ae13.pr01.ams2.tfbnw.net
0.0.0.0 ae13.pr01.atl1.tfbnw.net
0.0.0.0 ae13.pr01.cdg1.tfbnw.net
0.0.0.0 ae13.pr01.hkg1.tfbnw.net
0.0.0.0 ae13.pr01.iad3.tfbnw.net
0.0.0.0 ae13.pr01.lhr2.tfbnw.net
0.0.0.0 ae13.pr01.mia1.tfbnw.net
0.0.0.0 ae13.pr01.ord1.tfbnw.net
0.0.0.0 ae13.pr01.sea1.tfbnw.net
0.0.0.0 whatsapp.com
0.0.0.0 www.whatsapp.com
0.0.0.0 web.whatsapp.com
0.0.0.0 w1.web.whatsapp.com
0.0.0.0 w2.web.whatsapp.com
0.0.0.0 w3.web.whatsapp.com
0.0.0.0 w4.web.whatsapp.com
0.0.0.0 w5.web.whatsapp.com
0.0.0.0 w6.web.whatsapp.com
0.0.0.0 w7.web.whatsapp.com
0.0.0.0 w8.web.whatsapp.com
0.0.0.0 w9.web.whatsapp.com
0.0.0.0 whatsapp-cdn-shv-01-atl1.fbcdn.net
0.0.0.0 whatsapp-cdn-shv-01-dfw1.fbcdn.net
0.0.0.0 whatsapp-cdn-shv-01-iad3.fbcdn.net
0.0.0.0 whatsapp-cdn-shv-01-lax1.fbcdn.net
0.0.0.0 whatsapp-cdn-shv-01-lax3.fbcdn.net
0.0.0.0 whatsapp-cdn-shv-01-lga1.fbcdn.net
0.0.0.0 whatsapp-cdn-shv-01-mia1.fbcdn.net
0.0.0.0 whatsapp-cdn-shv-01-ord1.fbcdn.net
0.0.0.0 whatsapp-cdn-shv-01-sea1.fbcdn.net
0.0.0.0 whatsapp-cdn-shv-01-sjc2.fbcdn.net
0.0.0.0 connect.facebook.net.edgekey.net
0.0.0.0 ct-m-fbx.fbsbx.com
0.0.0.0 facebook-web-clients.appspot.com
0.0.0.0 fb.me
0.0.0.0 fbcdn-profile-a.akamaihd.net
0.0.0.0 h-ct-m-fbx.fbsbx.com.online-metrix.net
0.0.0.0 sac-h-ct-m-fbx.fbsbx.com.online-metrix.net
0.0.0.0 fb.com
0.0.0.0 newsroom.fb.com
0.0.0.0 investor.fb.com
<span id="mce_SELREST_start" style="overflow:hidden;line-height:0;">&#65279;</span>

Si, facebook lo estaba rastreando desde TODAS esas direcciones, si alguna vez vio que su navegador decia “Esperando <dirección de esa lista>” ese era facebook siguiéndolo.

¿Es esta la solución permanente?, ¿Quien sabe? pero supongo si facebook cambiara esas direcciones alguien se dara cuenta y el proyecto en GitHub[1] que es la fuente de esa lista esperemos se mantenga al día.

Ya si desea volver a permitir acceder a facebook y demas solo debe ir a /etc/hosts, borrar esas lineas y reiniciar con eso restaura el acceso, así que este cambio es perfectamente reversible.

Referencias

[1] https://github.com/jmdugan/blocklists

[2] All the URLs you need to block to *actually* stop using Facebook

Anuncios

Algorithmic feed

Algorithmic feed
Algorithmic feed

Dear Medium if the algorithmic feed is to stay, Could you at least get it to make better recommendations than a Facebook aunt?

 

Imprimiendo en Java SIN mostrar el diálogo de impresión

Impreso automáticamente y sin pedir permiso
Impreso automáticamente y sin pedir permiso

Si se decida a programar sistemas hechos a la medida para diferentes negocios el generar reportes no debiera ser algo inusual, mucho menos que el cliente pida que se puedan mandar a la impresora pero ¿Que tal que el cliente pida que un reporte se imprima a una hora especifica?, esto suele tener un detalle inesperado, el que se imprima incluso si no hay nadie en la oficina para presionar el botón Imprimir, ¿Suena complicado?, ¿Algo que solo se puede hacer vía un cable serial y mandando los bits directamente?, nada de eso, aquí le digo como.

Para esto nos basaremos en lo visto en una entrada previa, por lo que le recomiendo le eche un vistazo si no lo ha hecho ya.

Mandando un documento iText directo a la impresora

Ya que halla refrescado su memoria veamos como mandar algo a la impresora sin mostrar el dialogo de impresión o pedir permiso al usuario (Obviamente solo usara este poder para el bien, ¿verdad?).

Teoría

De las entradas anteriores con la librería PdfBox seguro recordara el la clase PrinterJob es la que se encarga de mandar el documento a la impresora y para indicar la impresora necesitamos llamar al método printDialog, este nos deja seleccionar la impresora y nos pide la confirmación, pero esta no es la única forma de indicar la impresora.

Esto lo hacemos con la clase PrintService esta nos deja indicar directamente a PrinterJob la impresora saltandonos el dialogo de selección de impresora y la confirmación.

Ahora ¿Como creamos ese objeto PrintService? bueno para eso necesitamos dos cosas, primero saber el nombre exacto de la impresora que desea usar, hay dos formas de hacer esto, una es ver el dialogo de impresoras del sistema operativo, como se ve en la figura.

Así se ve en Fedora Linux, puede variar según su sistema operativo
Así se ve en Fedora Linux, puede variar según su sistema operativo

La otra es ejecutar la siguiente función la cual le listara todas las impresoras disponibles en su sistema.

/**
* Muestra en pantalla la lista de todas las impresoras disponibles en el
* sistema
*/
public void listarImpresoras() {
	PrintService[] printServices = PrintServiceLookup.lookupPrintServices(null, null);
	System.out.println("Lista de impresoras disponibles");

	for (PrintService printService: printServices) {
		System.out.println("\t" + printService.getName());
	}
}

Esta función le presentara en pantalla un listado completo de las impresoras del sistema, recuerde correrla en un proyecto que incluya PdfBox, la salida sera similar a la figura.

Como ve solo tengo una impresora conectada.
Como ve solo tengo una impresora conectada.

Como puede ver en el código de la función de búsqueda, la lista completa de impresoras nos la proporciono el método PrintServiceLookup.lookupPrintServices(null, null); el cual listo todas las impresoras, bueno usando esa misma idea podemos crear un método que nos regrese la impresora con el nombre indicado que seria como se ve a continuación

/**
* Nos regresa el PrintService que representa la impresora con el nombre que
* le indiquemos
* @param printerName nombre de la impresora que deseamos usar
* @return PrintService que representa la impresora que deseamos usar
*/
private PrintService findPrintService(String printerName) {
	PrintService[] printServices = PrintServiceLookup.lookupPrintServices(null, null);
	for (PrintService printService: printServices) {
		System.out.println(printService.getName());

		if (printService.getName().trim().equals(printerName)) {
			return printService;
		}
	}
	return null;
}

Basta con pasarle de parámetro el nombre de la impresora que deseamos usar y nos regresara el PrintService adecuado.

Lo ultimo que necesitaría hacer ya que tenga el PrintService es indicarle al objeto PrinterJob que deseamos usar ese PrintService, esto se logra con una sola linea de código que es:

printerJob.setPrintService(myPrintService);

Hecho esto basta con llamar el método print() y el documento se enviara directo a la impresora.

Pero para hacer mas claro todo veamos un ejemplo.

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package mx.hash.impresioninmediata;

import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.element.Table;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.swing.JOptionPane;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.printing.PDFPageable;

/**
 *
 * @author david
 */
public class ImpresionInmediata {

    private final static Logger LOGGER = Logger.getLogger("mx.hash.impresioninmediata.ImpresionInmediata");

    static public void main(String[] args) {
        ImpresionInmediata printer = new ImpresionInmediata();

        printer.listarImpresoras();

        try {
            ByteArrayOutputStream documentoBytes = printer.crearDocumentoiText();
            printer.imprimir(documentoBytes);
        } catch (IOException | PrinterException ex) {
            JOptionPane.showMessageDialog(null, "Error de impresion", "Error", JOptionPane.ERROR_MESSAGE);
            LOGGER.log(Level.SEVERE, null, ex);
        }
    }
    
    /**
     * Envia a imprimir el ByteArrayOutoutStream creado de un documento iText
     *
     * @param documentoBytes
     * @throws IOException
     * @throws PrinterException
     */
    public void imprimir(ByteArrayOutputStream documentoBytes) throws IOException, PrinterException {

        // Aqui convertimos la el arreglo de salida a uno de entrada que podemos
        // mandar a la impresora
        ByteArrayInputStream bais = new ByteArrayInputStream(documentoBytes.toByteArray());

        // Creamos un PDDocument con el arreglo de entrada que creamos        
        PDDocument document = PDDocument.load(bais);

        PrintService myPrintService = this.findPrintService("Deskjet-1510-series");
        PrinterJob printerJob = PrinterJob.getPrinterJob();

        printerJob.setPageable(new PDFPageable(document));
        printerJob.setPrintService(myPrintService);

        printerJob.print();

    }

    /**
     * Muestra en pantalla la lista de todas las impresoras disponibles en el
     * sistema
     */
    public void listarImpresoras() {
        PrintService[] printServices = PrintServiceLookup.lookupPrintServices(null, null);
        System.out.println("Lista de impresoras disponibles");

        for (PrintService printService : printServices) {
            System.out.println("\t" + printService.getName());
        }
    }

    /**
     * Nos regresa el PrintService que representa la impresora con el nombre que
     * le indiquemos
     * @param printerName nombre de la impresora que deseamos usar
     * @return PrintService que representa la impresora que deseamos usar
     */
    private PrintService findPrintService(String printerName) {
        PrintService[] printServices = PrintServiceLookup.lookupPrintServices(null, null);
        for (PrintService printService : printServices) {
            System.out.println(printService.getName());

            if (printService.getName().trim().equals(printerName)) {
                return printService;
            }
        }
        return null;
    }

    /**
     * Crea un documento via la libreria iText y lo almacena como un
     * ByteArrayOutputStream
     *
     * @return Documento iText en formato ByteArrayOutputStream
     */
    public ByteArrayOutputStream crearDocumentoiText() {
        // Es en este ByteArrayOutputStream donde se pone el documento una vez 
        // que se llama a documento.close()
        ByteArrayOutputStream documentoBytes = new ByteArrayOutputStream();

        PdfWriter pdfWriter = new PdfWriter(documentoBytes);
        PdfDocument pdfDoc = new PdfDocument(pdfWriter);

        Document documento = new Document(pdfDoc, PageSize.LETTER);
        documento.add(new Paragraph("Inicia el reporte"));
        documento.add(this.crearTabla());

        documento.close();

        return documentoBytes;
    }

    private Table crearTabla() {
        float[] anchos = {50F, 50F, 50F};
        Table tablaEncabezado = new Table(anchos);

        tablaEncabezado.setWidth(500F);

        tablaEncabezado.addCell("Hora Inicio");
        tablaEncabezado.addCell("Hora Fin");
        tablaEncabezado.addCell("");
        tablaEncabezado.addCell("Fecha Inicio");
        tablaEncabezado.addCell("Fecha Fin");
        tablaEncabezado.addCell("Fin de Turno");

        return tablaEncabezado;
    }    

}

Al correr este ejemplo muy posiblemente la indicara un error (a menos que por casualidad su impresora se llama exactamente igual que la mia), no se preocupe al correr el programa la lista completa de impresoras aparecerá en pantalla, solamente vea cual impresora desea usar y acomode la siguiente linea

PrintService myPrintService = this.findPrintService("Deskjet-1510-series");

Poniendo el nombre de la impresora como argumento a esa función, hecho esto el documento se imprimirá la siguiente vez que corra el programa.

El ejemplo completo lo puede encontrar aquí: https://github.com/HashRaygoza/ImpresionInmediata


Espero que esta entrada les fuera de utilidad y desean cooperar, me pueden invitar una cerveza: https://www.paypal.me/hashRaygoza/20mxn Gracias y nos vemos en la próxima :).

 

Mandando un documento iText directo a la impresora

¡Miren! Sin Pdf previo
¡Miren! Sin Pdf previo

En una entrada anterior detallamos como mandar un archivo Pdf a la impresora y si bien seguro puede usar eso para implementar la impresión de un documento iText, creandolo en disco duro e imprimiendolo desde ahí, también es posible hacerlo sin necesidad de guardar nada en disco duro, veamos como :).

Imprimiendo un Pdf desde Java

Teoria

Para esto usaremos una funcionalidad muy interesante de la clase PdfWriter de iText la habilidad de enviar el documento resultante no a un archivo en disco duro sino a un objeto ByteArrayOutputStream como se ve en las siguientes lineas de código.

ByteArrayOutputStream documentoBytes = new ByteArrayOutputStream();
PdfWriter pdfWriter = new PdfWriter(documentoBytes);

Ahora ¿De que nos sirve eso?, bueno podemos convertir el ByteArrayOutputStream en un ByteArrayInputStream.

ByteArrayInputStream bais = new ByteArrayInputStream(documentoBytes.toByteArray());

Y si ha leido la documentación de PdfBox sabrá que no solo puede cargar un archivo desde el disco duro, sino también un ByteArrayInputStream.

PDDocument document = PDDocument.load(bais);

Y de ese punto ya puede seguir el mismo procedimiento mostrado en otra entrada, llamando al proceso de impresión del sistema, pero para hacerlo mas claro veamos un ejemplo.

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package mx.hash.printitext;

import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.element.Table;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.printing.PDFPageable;

/**
 *
 * @author david
 */
public class PrintiText {

    private final static Logger LOGGER = Logger.getLogger("mx.hash.printitext.PrintiText");

    static public void main(String[] args) {
        try {
            PrintiText printer = new PrintiText();

            ByteArrayOutputStream documentoBytes = printer.crearDocumentoiText();
            printer.imprimir(documentoBytes);

        } catch (IOException | PrinterException ex) {
            JOptionPane.showMessageDialog(null, "Error de impresion", "Error", JOptionPane.ERROR_MESSAGE);
            LOGGER.log(Level.SEVERE, null, ex);
        }
    }

    /**
     * Crea un documento via la libreria iText y lo almacena como un
     * ByteArrayOutputStream
     *
     * @return Documento iText en formato ByteArrayOutputStream
     */
    public ByteArrayOutputStream crearDocumentoiText() {
        LOGGER.log(Level.INFO, "Creando documento iText");

        // Es en este ByteArrayOutputStream donde se pone el documento una vez 
        // que se llama a documento.close()
        ByteArrayOutputStream documentoBytes = new ByteArrayOutputStream();

        PdfWriter pdfWriter = new PdfWriter(documentoBytes);
        PdfDocument pdfDoc = new PdfDocument(pdfWriter);

        Document documento = new Document(pdfDoc, PageSize.LETTER);
        LOGGER.log(Level.INFO, "Agregando los elementos al documento");

        documento.add(new Paragraph("Inicia el reporte"));
        documento.add(this.crearTabla());

        documento.close();

        return documentoBytes;
    }

    private Table crearTabla() {
        LOGGER.log(Level.INFO, "Creando tabla");

        float[] anchos = {50F, 50F, 50F};
        Table tablaEncabezado = new Table(anchos);

        tablaEncabezado.setWidth(500F);

        tablaEncabezado.addCell("Hora Inicio");
        tablaEncabezado.addCell("Hora Fin");
        tablaEncabezado.addCell("");
        tablaEncabezado.addCell("Fecha Inicio");
        tablaEncabezado.addCell("Fecha Fin");
        tablaEncabezado.addCell("Fin de Turno");

        return tablaEncabezado;
    }

    /**
     * Envia a imprimir el ByteArrayOutoutStream creado de un documento iText
     *
     * @param documentoBytes
     * @throws IOException
     * @throws PrinterException
     */
    public void imprimir(ByteArrayOutputStream documentoBytes) throws IOException, PrinterException {
        LOGGER.log(Level.INFO, "Enviando documento a imprimir");

        // Aqui convertimos la el arreglo de salida a uno de entrada que podemos
        // mandar a la impresora
        ByteArrayInputStream bais = new ByteArrayInputStream(documentoBytes.toByteArray());
        
        // Creamos un PDDocument con el arreglo de entrada que creamos        
        PDDocument document = PDDocument.load(bais);

        PrinterJob job = PrinterJob.getPrinterJob();

        LOGGER.log(Level.INFO, "Mostrando el dialogo de impresion");
        if (job.printDialog() == true) {
            job.setPageable(new PDFPageable(document));

            LOGGER.log(Level.INFO, "Imprimiendo documento");
            job.print();
        }
    }
}

Este programa usa iText para generar el documento que puede ver al principio de la entrada con un párrafo de texto y una tabla y después vía PdfBox mandarlo a la impresora.

El programa en ejecución.
El programa en ejecución.

Aquí puede aplicar sus conocimientos de iText y en el método crearDocumentoiText agregar mas elementos que deseé aparezcan en el documento y vea los resultados.

El ejemplo completo lo puede encontrar en GitHub en la siguiente dirección https://github.com/HashRaygoza/PrintiText


Espero que esta entrada les fuera de utilidad y desean cooperar, me pueden invitar una cerveza: https://www.paypal.me/hashRaygoza/20mxn Gracias y nos vemos en la próxima :).

Imprimiendo un Pdf desde Java

Imprimiendo un Pdf desde Java
Imprimiendo un Pdf desde Java

A la hora de investigar como mandar el Pdf que acaba de generar a la impresora es MUY posible que se encuentre con un mensaje perturbador, el hecho de que NO todas las impresoras entienden nativamente el formato Pdf por lo que si manda el archivo a la brava se arriesga a solo obtener basura a la salida de varias impresoras.

Por fortuna hay librerías capaces de convertir su archivo Pdf a algo que la impresora puede entender, por ejemplo Apache PdfBox ¿Como integrarlo a su proyecto? aquí le digo :).

Agregando PdfBox a su proyecto

Si su proyecto esta usando Maven agregar la librería PdfBox es tan sencillo como agregar esa dependencia, en el caso especifico de NetBeans seria como en la figura.

Agregando PdfBox en NetBeans
Agregando PdfBox en NetBeans

Si esta usando otro IDE o Maven directamente puede agregar la dependencia agregando esta dependencia a su archivo pom.xml

<dependency> 
<groupId>org.apache.pdfbox</groupId> 
<artifactId>pdfbox</artifactId>
<version>2.0.8</version> 
</dependency>

O si esta agregando las librerías manualmente puede descargar los .jar necesarios desde aquí: https://pdfbox.apache.org/download.cgi#20x

Imprimiendo el Pdf

Ahora la forma en que haremos la impresión es la siguiente:

  1. Cargaremos el archivo Pdf desde el disco duro vía un objeto PDDocument
  2. Obtendremos el proceso de impresión del sistema
  3. Seleccionaremos la impresora
  4. Usando un objeto PDFPageable enviaremos el documento a la impresora
  5. Imprimiremos

Notara que en este ejemplo cargaremos el Pdf desde el disco duro, esto es mas que nada para simplificar el ejemplo al no tener que incluir el código que genere el documento, pero sepa que es perfectamente posible mandar un Pdf que creo con iText a la impresora sin necesidad de guardarlo en disco, eso se mostrara en una entrada próxima.

A continuación se presenta el código de nuestro ejemplo:

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package mx.hash.impresionpdf;

import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.printing.PDFPageable;

/**
 *
 * @author david
 */
public class Impresor {

    private final static Logger LOGGER = Logger.getLogger("mx.hash.impresionpdf.Impresor");

    public static void main(String[] args) {
        Impresor impresor = new Impresor();

        try {
            impresor.imprimir();
        } catch (PrinterException | IOException ex) {
            JOptionPane.showMessageDialog(null, "Error de impresion", "Error", JOptionPane.ERROR_MESSAGE);
            LOGGER.log(Level.SEVERE, null, ex);
        }
    }

    /***
     * Manda un documento a imprimir a la impresora que se indique en el dialogo
     * @throws PrinterException
     * @throws IOException 
     */
    public void imprimir() throws PrinterException, IOException {
        // Indicamos el nombre del archivo Pdf que deseamos imprimir
        PDDocument document = PDDocument.load(new File("./documento.pdf"));

        PrinterJob job = PrinterJob.getPrinterJob();

        LOGGER.log(Level.INFO, "Mostrando el dialogo de impresion");
        if (job.printDialog() == true) {            
            job.setPageable(new PDFPageable(document));

            LOGGER.log(Level.INFO, "Imprimiendo documento");
            job.print();
        }
    }
}

Para que todo quede lo mas claro posible vamos a detallar que hacen las lineas mas relevantes del ejemplo.

Aquí cargamos el documento pdf desde la ruta indicada

PDDocument document = PDDocument.load(new File("./documento.pdf"));

Obtenemos el servicio de impresión del sistema

PrinterJob job = PrinterJob.getPrinterJob();

Mostramos el dialogo para seleccionar a que impresora deseamos enviar el documento, el método .printDialog() regresa true si selecciono una impresora, false en el caso contrario

if (job.printDialog() == true)

Via el método setPageable le pasamos al servicio de impresión nuestro documento que podría ser de una o mas paginas

job.setPageable(new PDFPageable(document));

Finalmente mandamos a imprimir

job.print();

Corriendo el ejemplo

Ahora vamos a correr el ejemplo, un preparativo extra que va a necesitar es poner un archivo pdf con nombre documento.pdf en la carpeta de su proyecto o modificar la ruta en esta linea.

PDDocument document = PDDocument.load(new File("./documento.pdf"));

Así es como la carpeta del proyecto se ve en mi equipo.

Ahí puse documento.pdf
Ahí puse documento.pdf

Hecho eso corra el programa y le aparecerá el siguiente dialogo (al menos en Linux, en Windows es posible le aparezca el dialogo de impresión nativo de Windows)

Dialogo de impresión
Dialogo de impresión

Seleccione la impresora que desea utilizar y al presionar imprimir enviara el documento a su impresora.

Como un extra vaya a el gestor de trabajos de impresión y vera que nuestra impresión aparece como Java Printing y puede cancelar la impresión desde ahí si lo desea.

Servicio de Impresión en GNOME
Servicio de Impresión en GNOME
Impresión en proceso
Impresión en proceso

Puede encontrar el ejemplo completo en GitHub en la siguiente dirección: https://github.com/HashRaygoza/ImpresionPdf


Espero que esta entrada les fuera de utilidad y desean cooperar, me pueden invitar una cerveza: https://www.paypal.me/hashRaygoza/20mxn Gracias y nos vemos en la próxima :).

Nueva paleta de colores

 

Neón
Neón

Ya ven que la única constante es el cambio y ha llegado la hora de cambiar la paleta de colores que uso en mis comics de la vieja paleta de colores de comics de los 50’s.

A algo mas original que llevo un par de comics experimentando, hacer los comics principalmente en escala de grises pero con detalles en colores neón para enfatizar ciertas cosas.

Como en la entrada de la paleta anterior aquí presento el contenido del archivo neon.gpl.

GIMP Palette
Name: HashComics
Columns: 8
#
192   0  80 Sin nombre
255  38  53 Sin nombre
255 128  26 Sin nombre
254 243  31 Sin nombre
170 255   1 Sin nombre
 22 255 255 Sin nombre
170   0 255 Sin nombre
255   0 170 Sin nombre
159  97 100 Sin nombre
255 113 130 Sin nombre
255 205 156 Sin nombre
255 250 166 Sin nombre
199 255  92 Sin nombre
102 242 255 Sin nombre
199  91 255 Sin nombre
255 122 210 Sin nombre
255 255 255 Sin nombre
223 223 223 Sin nombre
191 191 191 Sin nombre
159 159 159 Sin nombre
127 127 127 Sin nombre
 95  95  95 Sin nombre
 63  63  63 Sin nombre
  0   0   0 Sin nombre

Solo guardelo con extensión .gpl y coloquelo en la carpeta de paletas del GIMP y la siguiente vez que inicie el GIMP tendra disponible esa paleta de colores.

Y como muestra del efecto aquí esta uno de mis dibujos viejos coloreado con la nueva paleta.

¿Que tal el efecto?
¿Que tal el efecto?

Va a ser divertido ver si este experimento funciona.


Espero que esta entrada les fuera de utilidad y desean cooperar, me pueden invitar una cerveza: https://www.paypal.me/hashRaygoza/20mxn Gracias y nos vemos en la próxima :).